Browse Source

组织机构人员同步

fangpy 1 year ago
parent
commit
0746a62f4a

+ 12 - 0
cx_question/business-common/pom.xml

@@ -112,5 +112,17 @@
 <!--            <artifactId>easypoi-annotation</artifactId>-->
 <!--            <version>4.4.0</version>-->
 <!--        </dependency>-->
+
+        <dependency>
+            <groupId>com.oracle</groupId>
+            <artifactId>ojdbc6</artifactId>
+            <version>11.2.0.3</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.rongwei</groupId>
+            <artifactId>rw-admin-common</artifactId>
+            <version>1.1-SNAPSHOT</version>
+        </dependency>
     </dependencies>
 </project>

+ 18 - 0
cx_question/business-common/src/main/java/com/rongwei/bscommon/sys/dao/CxCommonDao.java

@@ -0,0 +1,18 @@
+package com.rongwei.bscommon.sys.dao;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Update;
+
+@Mapper
+public interface CxCommonDao {
+
+    @Update("delete from sys_organization")
+    void deleteAllOrg();
+
+    @Update("delete from sys_user")
+    void deleteAllUser();
+
+    @Update("delete from sys_user_org")
+    void deleteAllUserDept();
+
+}

+ 19 - 0
cx_question/business-common/src/main/java/com/rongwei/bscommon/sys/dao/SlaveOracleDao.java

@@ -0,0 +1,19 @@
+package com.rongwei.bscommon.sys.dao;
+
+import com.rongwei.bsentity.vo.VDeptVo;
+import com.rongwei.bsentity.vo.VPsndocVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+@Mapper
+public interface SlaveOracleDao {
+
+    @Select("select * from V_BC_DEPT")
+    List<VDeptVo> getAllOracleDepts();
+
+    @Select("select * from V_BC_PSNDOC")
+    List<VPsndocVo> getAllOracleUsers();
+
+}

+ 8 - 0
cx_question/business-common/src/main/java/com/rongwei/bscommon/sys/service/OrgUserSyncService.java

@@ -0,0 +1,8 @@
+package com.rongwei.bscommon.sys.service;
+
+public interface OrgUserSyncService {
+
+    void orgSync();
+
+    void userSync();
+}

+ 13 - 0
cx_question/business-common/src/main/java/com/rongwei/bscommon/sys/service/SlaveSourceService.java

@@ -0,0 +1,13 @@
+package com.rongwei.bscommon.sys.service;
+
+import com.rongwei.bsentity.vo.VDeptVo;
+import com.rongwei.bsentity.vo.VPsndocVo;
+
+import java.util.List;
+
+public interface SlaveSourceService {
+
+    List<VDeptVo> getAllOracleDepts();
+
+    List<VPsndocVo> getAllOracleUsers();
+}

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

@@ -0,0 +1,217 @@
+package com.rongwei.bscommon.sys.service.impl;
+
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.rongwei.bscommon.sys.dao.CxCommonDao;
+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.rwadmincommon.system.domain.SysOrganizationDo;
+import com.rongwei.rwadmincommon.system.domain.SysUserDo;
+import com.rongwei.rwadmincommon.system.domain.SysUserOrgDo;
+import com.rongwei.rwadmincommon.system.service.SysOrganizationService;
+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 org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class OrgUserSyncServiceImpl implements OrgUserSyncService {
+
+    @Autowired
+    private SlaveSourceService slaveSourceService;
+    @Autowired
+    private SysOrganizationService sysOrganizationService;
+    @Autowired
+    private SysUserService sysUserService;
+    @Autowired
+    private SysUserOrgService sysUserOrgService;
+    @Autowired
+    private CxCommonDao commonDao;
+
+    /**
+     * 组织机构同步
+     */
+    @Override
+    public void orgSync(){
+        List<SysOrganizationDo> orgs = new ArrayList<>();
+
+        List<VDeptVo> allOracleDepts = slaveSourceService.getAllOracleDepts();
+        // 获取根目录
+        List<VDeptVo> rootOrgs = allOracleDepts.stream().filter(v -> "~".equals(v.getPk_fatherorg())).collect(Collectors.toList());
+        // 获取非根目录
+        List<VDeptVo> notRootOrgs = allOracleDepts.stream().filter(v -> !"~".equals(v.getPk_fatherorg())).collect(Collectors.toList());
+        // 构造所有根目录的Map
+        for(int i=0;i<rootOrgs.size();i++){
+            VDeptVo rootOrg = rootOrgs.get(i);
+            SysOrganizationDo sysOrganizationDo = new SysOrganizationDo();
+            // 字段映射
+            sysOrganizationDo.setPid("-1");
+            sysOrganizationDo.setTreecode((i+1)+"");
+            sysOrganizationDo.setLevel(1);
+            sysOrganizationDo.setSort((i+1));
+            this.baseSet(sysOrganizationDo,rootOrg);
+
+            // 递归子节点
+            this.setChild(orgs,sysOrganizationDo,notRootOrgs);
+            orgs.add(sysOrganizationDo);
+        }
+        System.out.println("******************************************");
+        System.out.println(JSONUtil.toJsonStr(orgs));
+        System.out.println("******************************************");
+        System.out.println(JSONUtil.toJsonStr(notRootOrgs));
+        // 保存数据
+        saveOrgs(orgs);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void saveOrgs(List<SysOrganizationDo> orgs){
+        // 组织机构保存,先清理老数据,再保存
+        commonDao.deleteAllOrg();
+        // 保存最新数据
+        sysOrganizationService.saveBatch(orgs);
+    }
+
+    /**
+     * 递归赋值子节点数据
+     * @param orgs
+     * @param pOrg
+     * @param notRootOrgs
+     */
+    private void setChild(List<SysOrganizationDo> orgs,SysOrganizationDo pOrg,List<VDeptVo> notRootOrgs){
+        boolean hasChild = false;
+        int j = 1;
+        for (int i = 0; i < notRootOrgs.size(); i++) {
+            VDeptVo rootOrg = notRootOrgs.get(i);
+            // 找到当前节点的所有子节点
+            if(rootOrg.getPk_fatherorg() != null && rootOrg.getPk_fatherorg().equals(pOrg.getId())){
+                hasChild = true;
+                // 子节点赋值
+                SysOrganizationDo sysOrganizationDo = new SysOrganizationDo();
+                // 字段映射
+                sysOrganizationDo.setPid(rootOrg.getPk_fatherorg());
+                sysOrganizationDo.setTreecode(pOrg.getTreecode()+"."+j);
+                sysOrganizationDo.setLevel(pOrg.getLevel()+1);
+                sysOrganizationDo.setSort((i+1));
+                if(StringUtils.isBlank(pOrg.getFullpid())){
+                    sysOrganizationDo.setFullpid("," + rootOrg.getPk_fatherorg());
+                }else{
+                    sysOrganizationDo.setFullpid(pOrg.getFullpid() + "," + rootOrg.getPk_fatherorg());
+                }
+                this.baseSet(sysOrganizationDo,rootOrg);
+                orgs.add(sysOrganizationDo);
+                this.setChild(orgs,sysOrganizationDo,notRootOrgs);
+                j++;
+            }
+        }
+        // 设置父节点是否为叶子节点
+        if(hasChild){
+            pOrg.setIsleaf("n");
+        }else{
+            pOrg.setIsleaf("y");
+        }
+    }
+
+    /**
+     * 基本属性设置
+     * @param sysOrganizationDo
+     * @param rootOrg
+     */
+    private void baseSet(SysOrganizationDo sysOrganizationDo,VDeptVo rootOrg){
+        sysOrganizationDo.setId(rootOrg.getPk_dept());
+        sysOrganizationDo.setCode(rootOrg.getCode());
+        sysOrganizationDo.setFullname(rootOrg.getName());
+        sysOrganizationDo.setShortname(rootOrg.getName());
+        if(!"~".equals(rootOrg.getPrincipal())){
+            sysOrganizationDo.setChargeid(rootOrg.getPrincipal());
+        }
+        if(rootOrg.getEnablestate() == 2){
+            sysOrganizationDo.setEnabled("y");
+        }else{
+            sysOrganizationDo.setEnabled("n");
+        }
+        sysOrganizationDo.setCreatedate(DateUtil.parse(rootOrg.getCreationtime()+".154", DatePattern.NORM_DATETIME_MS_PATTERN));
+        sysOrganizationDo.setModifydate(DateUtil.parseDate(rootOrg.getTs()));
+    }
+
+    /**
+     * 人员同步
+     */
+    @Override
+    public void userSync(){
+        // 获取OA所有用户
+        List<VPsndocVo> allOracleUsers = slaveSourceService.getAllOracleUsers();
+        // 获取本系统所有用户
+        List<SysUserDo> users = sysUserService.list();
+
+        // 组织UserDo对象和UserOrgDo对象
+        List<SysUserDo> userDos = new ArrayList<>();
+        List<SysUserOrgDo> userOrgDos = new ArrayList<>();
+
+        for (VPsndocVo psndocVo : allOracleUsers) {
+            // 用户表数据构造
+            SysUserDo userDo = new SysUserDo();
+            userDo.setId(psndocVo.getPk_psndoc());
+            userDo.setAccount(psndocVo.getUser_code());
+            userDo.setName(psndocVo.getName());
+            userDo.setCode(psndocVo.getCode());
+            userDo.setEmail(psndocVo.getSecret_email());
+            if("1".equals(psndocVo.getSex())){
+                userDo.setGender("male");
+            } else if ("2".equals(psndocVo.getSex())) {
+                userDo.setGender("female");
+            }
+            userDo.setMobile(psndocVo.getMobile());
+            userDo.setCreatedate(DateUtil.parseDate(psndocVo.getCreationtime()));
+            userDo.setModifydate(DateUtil.parseDate(psndocVo.getTs()));
+            // 设置登录密码
+            List<SysUserDo> hasUser = users.stream().filter(v -> v.getId().equals(psndocVo.getPk_psndoc())).collect(Collectors.toList());
+            if(hasUser != null && hasUser.size() == 1){
+                userDo.setPassword(hasUser.get(0).getPassword());
+            }else{
+                userDo.setPassword(SecurityUtil.getSaltMd5AndSha("000000", userDo.getId()));
+            }
+            userDos.add(userDo);
+            // 用户部门表数据构造
+            if(StringUtils.isNotBlank(psndocVo.getPk_dept())){
+                SysUserOrgDo userOrgDo = new SysUserOrgDo();
+                userOrgDo.setUserid(userDo.getId());
+                userOrgDo.setOrgid(psndocVo.getPk_dept());
+                userOrgDo.setId(SecurityUtil.getUUID());
+                userOrgDos.add(userOrgDo);
+            }
+        }
+        // 数据保存
+        this.userSave(userDos,userOrgDos);
+    }
+
+    /**
+     * 用户相关数据保存
+     * @param userDos
+     * @param userOrgDos
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void userSave(List<SysUserDo> userDos,List<SysUserOrgDo> userOrgDos){
+        // 用户表和用户部门表数据保存
+        if(userDos != null && userDos.size()>0){
+            // 先清除用户表
+            commonDao.deleteAllUser();
+            sysUserService.saveBatch(userDos);
+            if(userOrgDos != null && userOrgDos.size()>0){
+                // 先清除用户部门表
+                commonDao.deleteAllUserDept();
+                sysUserOrgService.saveBatch(userOrgDos);
+            }
+        }
+    }
+}

+ 30 - 0
cx_question/business-common/src/main/java/com/rongwei/bscommon/sys/service/impl/SlaveSourceServiceImpl.java

@@ -0,0 +1,30 @@
+package com.rongwei.bscommon.sys.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.rongwei.bscommon.sys.dao.SlaveOracleDao;
+import com.rongwei.bscommon.sys.service.SlaveSourceService;
+import com.rongwei.bsentity.vo.VDeptVo;
+import com.rongwei.bsentity.vo.VPsndocVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import java.util.List;
+
+@Service
+public class SlaveSourceServiceImpl implements SlaveSourceService {
+
+    @Autowired
+    private SlaveOracleDao slaveOracleDao;
+
+    @Override
+    @DS("slave")
+    public List<VDeptVo> getAllOracleDepts() {
+        return slaveOracleDao.getAllOracleDepts();
+    }
+
+    @Override
+    @DS("slave")
+    public List<VPsndocVo> getAllOracleUsers() {
+        return slaveOracleDao.getAllOracleUsers();
+    }
+
+}

+ 28 - 0
cx_question/business-entity/src/main/java/com/rongwei/bsentity/vo/VDeptVo.java

@@ -0,0 +1,28 @@
+package com.rongwei.bsentity.vo;
+
+import lombok.Data;
+
+@Data
+public class VDeptVo {
+
+    private String pk_dept;
+
+    private String pk_fatherorg;
+
+    private String code;
+
+    private String name;
+
+    private String shortname;
+
+    private Integer enablestate;
+
+    private String principal;
+
+    private String memo;
+
+    private String creationtime;
+
+    private String ts;
+
+}

+ 30 - 0
cx_question/business-entity/src/main/java/com/rongwei/bsentity/vo/VPsndocVo.java

@@ -0,0 +1,30 @@
+package com.rongwei.bsentity.vo;
+
+import lombok.Data;
+
+@Data
+public class VPsndocVo {
+
+    private String pk_psndoc;
+
+    private String user_code;
+
+    private String name;
+
+    private String code;
+
+    private String secret_email;
+
+    private Integer sex;
+
+    private String mobile;
+
+    private String jobname;
+
+    private String pk_dept;
+
+    private String creationtime;
+
+    private String ts;
+
+}

+ 30 - 0
cx_question/business-server/src/main/java/com/rongwei/controller/QuestionController.java

@@ -1,8 +1,12 @@
 package com.rongwei.controller;
 
+import com.rongwei.bscommon.sys.service.OrgUserSyncService;
+import com.rongwei.bscommon.sys.service.SlaveSourceService;
 import com.rongwei.bscommon.sys.service.SrmIssuesListService;
 import com.rongwei.bscommon.sys.service.SysMindMappingBsService;
 import com.rongwei.bsentity.domin.SrmIssuesListDo;
+import com.rongwei.bsentity.vo.VDeptVo;
+import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommonentity.commonservers.vo.SysMindMappingVo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -10,6 +14,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.io.IOException;
+import java.util.List;
+import java.util.Map;
 
 @RestController
 @RequestMapping("/question")
@@ -21,6 +27,10 @@ public class QuestionController {
     private SysMindMappingBsService sysMindMappingBsService;
     @Autowired
     private SrmIssuesListService srmIssuesListService;
+    @Autowired
+    private SlaveSourceService slaveSourceService;
+    @Autowired
+    private OrgUserSyncService orgUserSyncService;
 
     /**
      * 故障树图片保存
@@ -42,4 +52,24 @@ public class QuestionController {
         srmIssuesListService.saveFishBoneImg(srmIssuesListDo);
     }
 
+    /**
+     * 测试
+     * @return
+     */
+    @PostMapping("/testOne")
+    public R testOne(@RequestBody Map<String,Object> map) throws IOException {
+        orgUserSyncService.orgSync();
+        return R.ok();
+    }
+
+    /**
+     * 测试
+     * @return
+     */
+    @PostMapping("/testTwo")
+    public R testTwo(@RequestBody Map<String,Object> map) throws IOException {
+        orgUserSyncService.userSync();
+        return R.ok();
+    }
+
 }