Browse Source

组织机构同步接口

sucheng 11 months ago
parent
commit
000263330b

+ 12 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/dao/DepartmentAndPersonnelDao.java

@@ -0,0 +1,12 @@
+package com.rongwei.sfcommon.sys.dao;
+
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface DepartmentAndPersonnelDao {
+
+    void deleteOrgByIds(@Param("deleteDepartIdList") List<String> deleteDepartIdList);
+
+    void deleteUserById(@Param("deleteUserIdList") List<String> deleteUserIdList);
+}

+ 10 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/DepartmentAndPersonnelService.java

@@ -0,0 +1,10 @@
+package com.rongwei.sfcommon.sys.service;
+
+import com.rongwei.rwcommon.base.R;
+import com.rongwe.scentity.vo.DepartmentAndPersonnelReq;
+
+public interface DepartmentAndPersonnelService {
+
+    R departmentAndPersonnel(DepartmentAndPersonnelReq req);
+}
+

+ 193 - 0
js-security/security-common/src/main/java/com/rongwei/sfcommon/sys/service/impl/DepartmentAndPersonnelServiceImpl.java

@@ -0,0 +1,193 @@
+package com.rongwei.sfcommon.sys.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.rongwe.scentity.vo.DepartmentAndPersonnelReq;
+import com.rongwe.scentity.vo.DepartmentVo;
+import com.rongwe.scentity.vo.PersonnelVo;
+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.domain.SysUserRoleDo;
+import com.rongwei.rwadmincommon.system.service.SysOrganizationService;
+import com.rongwei.rwadmincommon.system.service.SysUserOrgService;
+import com.rongwei.rwadmincommon.system.service.SysUserRoleService;
+import com.rongwei.rwadmincommon.system.service.SysUserService;
+import com.rongwei.rwcommon.base.R;
+import com.rongwei.rwcommon.utils.SecurityUtil;
+import com.rongwei.sfcommon.sys.dao.DepartmentAndPersonnelDao;
+import com.rongwei.sfcommon.sys.service.DepartmentAndPersonnelService;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.LinkedList;
+import java.util.List;
+
+@Service
+@Log4j2
+public class DepartmentAndPersonnelServiceImpl implements DepartmentAndPersonnelService {
+    @Autowired
+    private SysOrganizationService sysOrganizationService;
+    @Autowired
+    private SysUserService sysUserService;
+    @Autowired
+    private SysUserOrgService sysUserOrgService;
+    @Autowired
+    private SysUserRoleService sysUserRoleService;
+    @Resource
+    private DepartmentAndPersonnelDao departmentAndPersonnelDao;
+
+    @Override
+    public R departmentAndPersonnel(DepartmentAndPersonnelReq req) {
+        //部门数据
+        List<DepartmentVo> departmentList = req.getDepartmentList();
+        log.info("接收到部门数据:{}条", departmentList.size());
+        //员工数据
+        List<PersonnelVo> personnelList = req.getPersonnelList();
+        log.info("接收到员工数据:{}条", personnelList.size());
+
+        List<SysOrganizationDo> insertDepartList = new LinkedList<>();
+        List<SysOrganizationDo> updateDepartList = new LinkedList<>();
+        List<String> deleteDepartIdList = new LinkedList<>();
+        //=======================开始处理部门数据======================
+        if (ObjectUtil.isNotEmpty(departmentList)) {
+            //查询本系统中已有的部门信息
+            List<SysOrganizationDo> sysOrganizationDoList = sysOrganizationService.list();
+            //遍历入参部门 判断新增、修改、删除
+
+            for (DepartmentVo departmentVo : departmentList) {
+                //筛选部门ID
+                SysOrganizationDo sysOrganizationDo = sysOrganizationDoList.stream().filter(item -> item.getId().equals(departmentVo.getDepartmentid())).findFirst().orElse(null);
+                //如果不存在 并且没有被冻结使用,则新增
+                if (ObjectUtil.isEmpty(sysOrganizationDo) && departmentVo.getCanceled() != 1) {
+                    SysOrganizationDo insertSysOrganization = new SysOrganizationDo();
+                    insertSysOrganization.setId(departmentVo.getDepartmentid());
+                    insertSysOrganization.setCode(departmentVo.getDepartmentcode());
+                    insertSysOrganization.setFullname(departmentVo.getDepartmentname());
+                    insertSysOrganization.setShortname(departmentVo.getDepartmentname());
+                    if (ObjectUtil.isNotEmpty(departmentVo.getSupdepid())) {
+                        insertSysOrganization.setPid(departmentVo.getSupdepid());
+                    } else {
+                        insertSysOrganization.setPid("-1");
+                    }
+                    //TODO:补充平台构造部门字段
+                    insertSysOrganization.setIsleaf("n");
+                    //如果名字中带有“有限公司”
+                    if(departmentVo.getDepartmentname().contains("有限公司")){
+                        insertSysOrganization.setOrgtype("Branch-Office");
+                    }
+
+                    insertDepartList.add(insertSysOrganization);
+                } else {
+                    //冻结,则删除
+                    if (departmentVo.getCanceled() == 1) {
+                        deleteDepartIdList.add(departmentVo.getDepartmentid());
+                    } else {
+                        sysOrganizationDo.setCode(departmentVo.getDepartmentcode());
+                        sysOrganizationDo.setPid(departmentVo.getSupdepid());
+
+                        updateDepartList.add(sysOrganizationDo);
+                    }
+                }
+            }
+
+        }
+        //=======================开始处理员工数据======================
+        List<SysUserDo> insertUserList = new LinkedList<>();
+        List<SysUserDo> updateUserList = new LinkedList<>();
+        List<String> deleteUserIdList = new LinkedList<>();
+        //员工-部门关系
+        List<String> deleteUserOrgByUserIdList = new LinkedList<>();//根据用户ID批量删除
+        List<SysUserOrgDo> insertUserOrgList = new LinkedList<>();
+        //员工-角色关系(新增的员工,给予一个默认的角色)
+        List<SysUserRoleDo> insertUserRoleList = new LinkedList<>();
+        if (ObjectUtil.isNotEmpty(personnelList)) {
+            //查询本系统中已有的员工数据
+            List<SysUserDo> sysUserDoList = sysUserService.list();
+            for (PersonnelVo personnelVo : personnelList) {
+                SysUserDo sysUserDo = sysUserDoList.stream().filter(item -> item.getId().equals(personnelVo.getWorkcode())).findFirst().orElse(null);
+                //不存在 并且在职,则新增
+                if (ObjectUtil.isEmpty(sysUserDo) && personnelVo.getStatus() == 1) {
+                    SysUserDo insertUser = new SysUserDo();
+                    insertUser.setId(personnelVo.getWorkcode());
+                    insertUser.setAccount(personnelVo.getWorkcode());
+                    insertUser.setName(personnelVo.getLastname());
+                    //TODO:待完善平台用户其他字段
+                    insertUserList.add(insertUser);
+
+                    SysUserOrgDo insertUserOrg = new SysUserOrgDo();
+                    insertUserOrg.setId(SecurityUtil.getUUID());
+                    insertUserOrg.setUserid(personnelVo.getWorkcode());
+                    insertUserOrg.setOrgid(personnelVo.getDepartmentid());
+                    insertUserOrgList.add(insertUserOrg);
+
+                    //新增用户给予默认角色
+                    SysUserRoleDo insertUserRole = new SysUserRoleDo();
+                    insertUserRole.setId(SecurityUtil.getUUID());
+                    insertUserRole.setUserid(personnelVo.getWorkcode());
+                    insertUserRole.setRoleid("58fb8df3bebb48d58e8a2be261c32774");//普通员工 角色
+                } else {
+                    //不是在职,则删除
+                    if (personnelVo.getStatus() != 1) {
+                        deleteUserIdList.add(personnelVo.getWorkcode());
+                        deleteUserOrgByUserIdList.add(personnelVo.getWorkcode());
+                    } else {
+                        sysUserDo.setName(personnelVo.getLastname());
+                        updateUserList.add(sysUserDo);
+
+                        deleteUserOrgByUserIdList.add(personnelVo.getWorkcode());
+
+                        SysUserOrgDo insertUserOrg = new SysUserOrgDo();
+                        insertUserOrg.setId(SecurityUtil.getUUID());
+                        insertUserOrg.setUserid(personnelVo.getWorkcode());
+                        insertUserOrg.setOrgid(personnelVo.getDepartmentid());
+                        insertUserOrgList.add(insertUserOrg);
+                    }
+                }
+            }
+
+        }
+        //批量导入/修改部门
+        if (ObjectUtil.isNotEmpty(deleteDepartIdList)) {
+//            sysOrganizationService.removeByIds(deleteDepartIdList);
+            departmentAndPersonnelDao.deleteOrgByIds(deleteDepartIdList);
+        }
+
+        if (ObjectUtil.isNotEmpty(updateDepartList)) {
+            sysOrganizationService.updateBatchById(updateDepartList);
+        }
+        if (ObjectUtil.isNotEmpty(insertDepartList)) {
+            sysOrganizationService.saveBatch(insertDepartList);
+        }
+
+        //批量导入/修改用户
+        if (ObjectUtil.isNotEmpty(deleteUserIdList)) {
+//            sysUserService.removeByIds(deleteUserIdList);
+            departmentAndPersonnelDao.deleteUserById(deleteUserIdList);
+        }
+        if (ObjectUtil.isNotEmpty(updateUserList)) {
+            sysUserService.updateBatchById(updateUserList);
+        }
+        if (ObjectUtil.isNotEmpty(insertUserList)) {
+            sysUserService.saveBatch(insertUserList);
+        }
+
+        //批量导入/修改 用户-部门
+        if(ObjectUtil.isNotEmpty(deleteUserOrgByUserIdList)){
+            sysUserOrgService.remove(new QueryWrapper<SysUserOrgDo>().lambda().in(SysUserOrgDo::getUserid, deleteUserOrgByUserIdList));
+        }
+        if(ObjectUtil.isNotEmpty(insertUserOrgList)){
+            sysUserOrgService.saveBatch(insertUserOrgList);
+        }
+
+        //初始化批量导入/修改 用户-角色
+        if(ObjectUtil.isNotEmpty(insertUserRoleList)){
+            sysUserRoleService.saveBatch(insertUserRoleList);
+        }
+
+        String res = "成功,部门新增"+insertDepartList.size()+"个,更新"+updateDepartList.size()+"个,删除"+deleteDepartIdList.size()+"个,员工新增"+insertUserList.size()+"个,更新"+updateUserList.size()+"个,删除"+deleteUserIdList.size()+"个";
+        return R.ok(res);
+    }
+}

+ 17 - 0
js-security/security-common/src/main/resources/mybatis/DepartmentAndPersonnelDao.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.rongwei.sfcommon.sys.dao.DepartmentAndPersonnelDao">
+
+    <delete id="deleteOrgByIds">
+        delete from sys_organization where ID IN
+        <foreach collection="deleteDepartIdList" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+    </delete>
+    <delete id="deleteUserById">
+        delete from sys_user where ID IN
+        <foreach collection="deleteUserIdList" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+    </delete>
+</mapper>

+ 18 - 0
js-security/security-entity/src/main/java/com/rongwe/scentity/vo/DepartmentAndPersonnelReq.java

@@ -0,0 +1,18 @@
+package com.rongwe.scentity.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author :sc
+ * @since :2024/8/29
+ */
+@Data
+public class DepartmentAndPersonnelReq {
+    //部门数组
+    private List<DepartmentVo> departmentList;
+
+    //员工信息数组
+    private List<PersonnelVo> personnelList;
+}

+ 25 - 0
js-security/security-entity/src/main/java/com/rongwe/scentity/vo/DepartmentVo.java

@@ -0,0 +1,25 @@
+package com.rongwe.scentity.vo;
+
+import lombok.Data;
+
+/**
+ * @author :sc
+ * @since :2024/8/29
+ */
+@Data
+public class DepartmentVo {
+    //部门ID,我们系统的部门ID
+    private String departmentid;
+
+    //部门编码 值也是唯一的
+    private String departmentcode;
+
+    //部门名称
+    private String departmentname;
+
+    //上级部门ID
+    private String supdepid;
+
+    //状态:canceled = 1  部门冻结使用
+    private Integer canceled;
+}

+ 22 - 0
js-security/security-entity/src/main/java/com/rongwe/scentity/vo/PersonnelVo.java

@@ -0,0 +1,22 @@
+package com.rongwe.scentity.vo;
+
+import lombok.Data;
+
+/**
+ * @author :sc
+ * @since :2024/8/29
+ */
+@Data
+public class PersonnelVo {
+    //工号 KEY值
+    private String workcode;
+
+    //姓名
+    private String lastname;
+
+    //部门ID
+    private String departmentid;
+
+    //状态 1:在职,5:离职  7:无效
+    private Integer status;
+}

+ 32 - 0
js-security/security-server/src/main/java/com/rongwei/savecheck/controller/DepartmentAndPersonnelController.java

@@ -0,0 +1,32 @@
+package com.rongwei.savecheck.controller;
+
+import com.rongwei.rwcommon.base.R;
+import com.rongwe.scentity.vo.DepartmentAndPersonnelReq;
+import com.rongwei.sfcommon.sys.service.DepartmentAndPersonnelService;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author :sc
+ * @since :2024/9/3
+ */
+@RestController
+@RequestMapping("/dataSync")
+@Log4j2
+public class DepartmentAndPersonnelController {
+    @Autowired
+    private DepartmentAndPersonnelService departmentAndPersonnelService;
+
+    /**
+     * 同步部门和用户信息
+     */
+    @PostMapping("/departmentAndPersonnel")
+    public R departmentAndPersonnel(@RequestBody DepartmentAndPersonnelReq req){
+        log.info("开始同步部门和用户信息");
+        return departmentAndPersonnelService.departmentAndPersonnel(req);
+    }
+}