Explorar el Código

组织机构人员同步优化、及通用用户所属工厂逻辑改动

fangpy hace 1 año
padre
commit
49b47cb5e7

+ 37 - 11
bs-common/src/main/java/com/rongwei/safecommon/config/BsMetaObjectHandler.java

@@ -2,9 +2,11 @@ package com.rongwei.safecommon.config;
 
 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
 import com.rongwei.commonservice.service.RedisService;
+import com.rongwei.rwadmincommon.system.domain.SysOrganizationDo;
 import com.rongwei.rwadmincommon.system.vo.SysOrganizationVo;
 import com.rongwei.rwadmincommon.system.vo.SysUserVo;
 import com.rongwei.rwcommon.utils.StringUtils;
+import com.rongwei.safecommon.utils.SaveConstans;
 import org.apache.ibatis.reflection.MetaObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -13,6 +15,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
@@ -60,22 +63,45 @@ public class BsMetaObjectHandler implements MetaObjectHandler {
             logger.info("start insert fill ....");
             Object tenantid = this.getFieldValByName("tenantid", metaObject);
             if(null == tenantid && sysUser != null){
-                // 获取最上层部门
+                // 所有组织机构
+                List<SysOrganizationDo> orgdos = (List<SysOrganizationDo>)redisService.getRedisCatchObj("allOrgs");
+                // 获取所属工厂
                 List<SysOrganizationVo> organizationDoList = sysUser.getOrganizationDoList();
                 if(organizationDoList != null && organizationDoList.size()>0){
-                    SysOrganizationVo org = organizationDoList.get(0);
-                    String fullpid = org.getFullpid();
-                    String tid = null;
-                    if(StringUtils.isNotBlank(fullpid)){
-                        String[] fullpids = fullpid.split(",");
-                        for (String pid : fullpids) {
-                            if(StringUtils.isNotBlank(pid)){
-                                tid = pid;
-                                break;
+                    String tids = null;
+                    for (SysOrganizationVo org : organizationDoList) {
+                        // 当前部门即工厂级部门
+                        if(SaveConstans.ORGTYPE_FACTORY.equals(org.getOrgtype())){
+                            if(tids == null){
+                                tids = org.getId();
+                            }else{
+                                tids = tids + "," + org.getId();
+                            }
+                        }
+                        // 当前部门所有上级部门查找是否有工厂级部门
+                        else{
+                            String fullpid = org.getFullpid();
+                            if(StringUtils.isNotBlank(fullpid)){
+                                List<String> fullpids = Arrays.asList(fullpid.split(","));
+                                for (String pid : fullpids) {
+                                    for (SysOrganizationDo orgdo : orgdos) {
+                                        if(StringUtils.isNotBlank(pid) && pid.equals(orgdo.getId())){
+                                            if(SaveConstans.ORGTYPE_FACTORY.equals(orgdo.getOrgtype())){
+                                                if(tids == null){
+                                                    tids = orgdo.getId();
+                                                }else{
+                                                    tids = tids + "," + orgdo.getId();
+                                                }
+                                            }
+                                            break;
+                                        }
+                                    }
+                                }
                             }
                         }
                     }
-                    this.setFieldValByName("tenantid", tid, metaObject);
+
+                    this.setFieldValByName("tenantid", tids, metaObject);
                 }
             }
 

+ 16 - 0
bs-common/src/main/java/com/rongwei/safecommon/utils/SaveConstans.java

@@ -0,0 +1,16 @@
+package com.rongwei.safecommon.utils;
+
+public class SaveConstans {
+
+    // 部门类型:集团
+    public final static String ORGTYPE_GROUP = "group";
+    // 部门类型:分公司
+    public final static String ORGTYPE_BRANCHOFFICE = "Branch-Office";
+    // 部门类型:工厂
+    public final static String ORGTYPE_FACTORY = "factory";
+    // 部门类型:车间
+    public final static String ORGTYPE_CHEJIAN = "chejian";
+    // 部门类型:工段
+    public final static String ORGTYPE_GONGDUAN = "gongduan";
+
+}

+ 20 - 4
cx_question/business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/OrgUserSyncServiceImpl.java

@@ -9,6 +9,7 @@ import com.rongwei.bscommon.sys.service.OrgUserSyncService;
 import com.rongwei.bscommon.sys.service.SlaveSourceService;
 import com.rongwei.bsentity.vo.VDeptVo;
 import com.rongwei.bsentity.vo.VPsndocVo;
+import com.rongwei.commonservice.service.RedisService;
 import com.rongwei.rwadmincommon.system.domain.SysOrganizationDo;
 import com.rongwei.rwadmincommon.system.domain.SysUserDo;
 import com.rongwei.rwadmincommon.system.domain.SysUserOrgDo;
@@ -17,11 +18,13 @@ import com.rongwei.rwadmincommon.system.service.SysUserOrgService;
 import com.rongwei.rwadmincommon.system.service.SysUserService;
 import com.rongwei.rwcommon.utils.SecurityUtil;
 import com.rongwei.rwcommon.utils.StringUtils;
+import com.rongwei.safecommon.utils.SaveConstans;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -38,6 +41,8 @@ public class OrgUserSyncServiceImpl implements OrgUserSyncService {
     private SysUserOrgService sysUserOrgService;
     @Autowired
     private CxCommonDao commonDao;
+    @Autowired
+    private RedisService redisService;
 
     /**
      * 组织机构同步
@@ -72,14 +77,18 @@ public class OrgUserSyncServiceImpl implements OrgUserSyncService {
         System.out.println(JSONUtil.toJsonStr(notRootOrgs));
         // 保存数据
         saveOrgs(orgs);
+
+        // 查询所有数据,并缓存到Redis中
+        List<SysOrganizationDo> orgdos = sysOrganizationService.list();
+        redisService.redisCatchInit("allOrgs",orgdos,0);
     }
 
     @Transactional(rollbackFor = Exception.class)
     public void saveOrgs(List<SysOrganizationDo> orgs){
         // 组织机构保存,先清理老数据,再保存
-        commonDao.deleteAllOrg();
+//        commonDao.deleteAllOrg();
         // 保存最新数据
-        sysOrganizationService.saveBatch(orgs);
+        sysOrganizationService.saveOrUpdateBatch(orgs);
     }
 
     /**
@@ -142,6 +151,13 @@ public class OrgUserSyncServiceImpl implements OrgUserSyncService {
         }
         sysOrganizationDo.setCreatedate(DateUtil.parse(rootOrg.getCreationtime()+".154", DatePattern.NORM_DATETIME_MS_PATTERN));
         sysOrganizationDo.setModifydate(DateUtil.parseDate(rootOrg.getTs()));
+        // 设置部门类型
+        String[] facs = {"1027","1028","1003"};
+        List<String> faclist = Arrays.asList(facs);
+        // 工厂类型
+        if(sysOrganizationDo.getCode() != null && faclist.contains(sysOrganizationDo.getCode())){
+            sysOrganizationDo.setOrgtype(SaveConstans.ORGTYPE_FACTORY);
+        }
     }
 
     /**
@@ -205,8 +221,8 @@ public class OrgUserSyncServiceImpl implements OrgUserSyncService {
         // 用户表和用户部门表数据保存
         if(userDos != null && userDos.size()>0){
             // 先清除用户表
-            commonDao.deleteAllUser();
-            sysUserService.saveBatch(userDos);
+//            commonDao.deleteAllUser();
+            sysUserService.saveOrUpdateBatch(userDos);
             if(userOrgDos != null && userOrgDos.size()>0){
                 // 先清除用户部门表
                 commonDao.deleteAllUserDept();