From 8444084e6aa11efa23287e7f82474ac22378a5c4 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期二, 01 四月 2025 16:03:19 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/sys/SysDeptServiceImpl.java | 144 +++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 135 insertions(+), 9 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/sys/SysDeptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/sys/SysDeptServiceImpl.java index bd80525..b7a26ed 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/sys/SysDeptServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/sys/SysDeptServiceImpl.java @@ -1,11 +1,5 @@ package com.ruoyi.system.service.impl.sys; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.stream.Collectors; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.text.Convert; @@ -16,10 +10,25 @@ import com.ruoyi.system.api.domain.poji.sys.SysDept; import com.ruoyi.system.api.domain.poji.sys.SysRole; import com.ruoyi.system.api.domain.poji.sys.SysUser; +import com.ruoyi.system.domain.pojo.sys.SysDeptMenu; import com.ruoyi.system.domain.vo.TreeSelect; import com.ruoyi.system.mapper.sys.SysDeptMapper; +import com.ruoyi.system.mapper.sys.SysDeptMenuMapper; import com.ruoyi.system.mapper.sys.SysRoleMapper; +import com.ruoyi.system.service.staff.SysWxCpService; import com.ruoyi.system.service.sys.ISysDeptService; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.cp.api.WxCpDepartmentService; +import me.chanjar.weixin.cp.api.WxCpService; +import me.chanjar.weixin.cp.bean.WxCpDepart; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; /** * 部门管理 服务实现 @@ -29,11 +38,22 @@ @Service public class SysDeptServiceImpl implements ISysDeptService { - @Autowired + @Resource private SysDeptMapper deptMapper; - @Autowired + @Resource private SysRoleMapper roleMapper; + + @Resource + private SysDeptMenuMapper deptMenuMapper; + + @Resource + private SysWxCpService sysWxCpService; + + @Resource + @Qualifier("wxService") + private WxCpService wxCpService; + /** * 查询部门管理数据 @@ -218,7 +238,48 @@ throw new ServiceException("部门停用,不允许新增"); } dept.setAncestors(info.getAncestors() + "," + dept.getParentId()); - return deptMapper.insertDept(dept); + Long wxDeptId = sysWxCpService.addWxCpDept(1L,dept.getDeptName()); + dept.setWxDeptId(wxDeptId); + //新增部门 + int i = deptMapper.insertDept(dept); + if(dept.getMenuIds()!=null||dept.getStaffMenuIds()!=null){ + return insertDeptMenu(dept); + }else{ + return i; + } + + } + + /** + * 新增角色菜单信息 + * + * @param dept 部门对象 + */ + public int insertDeptMenu(SysDept dept) + { + int rows = 1; + // 新增用户与角色管理 + List<SysDeptMenu> list = new ArrayList<SysDeptMenu>(); + for (Long menuId : dept.getMenuIds()) + { + SysDeptMenu rm = new SysDeptMenu(); + rm.setDeptId(dept.getDeptId()); + rm.setMenuId(menuId); + rm.setMenuFrom(1); + list.add(rm); + } + for(Long menuId : dept.getStaffMenuIds()){ + SysDeptMenu rm = new SysDeptMenu(); + rm.setDeptId(dept.getDeptId()); + rm.setMenuId(menuId); + rm.setMenuFrom(2); + list.add(rm); + } + if (list.size() > 0) + { + rows = deptMenuMapper.batchDeptMenu(list); + } + return rows; } /** @@ -239,6 +300,9 @@ dept.setAncestors(newAncestors); updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors); } + if(oldDept.getWxDeptId()!=null&&!oldDept.getDeptName().equals(dept.getDeptName())){ + sysWxCpService.updateWxCpDept(oldDept.getWxDeptId(),dept.getDeptName()); + } int result = deptMapper.updateDept(dept); if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()) && StringUtils.isNotEmpty(dept.getAncestors()) && !StringUtils.equals("0", dept.getAncestors())) @@ -246,6 +310,9 @@ // 如果该部门是启用状态,则启用该部门的所有上级部门 updateParentDeptStatusNormal(dept); } + // 删除角色与菜单关联 + deptMenuMapper.deleteDeptMenuByDeptId(dept.getDeptId()); + insertDeptMenu(dept); return result; } @@ -335,4 +402,63 @@ { return getChildList(list, t).size() > 0 ? true : false; } + + + /** + * @description 通过微信部门id获取部门 + * @author jqs + * @date 2023/8/17 16:21 + * @param wxDeptId + * @return SysDept + */ + @Override + public SysDept getByWxDeptId(Long wxDeptId){ + return deptMapper.getByWxDeptId(wxDeptId); + } + + /** + * @description 同步部门 + * @author jqs + * @date 2023/8/17 15:42 + * @param + * @return void + */ + @Override + public void syncDepartment(){ + WxCpDepartmentService wxCpDepartmentService = wxCpService.getDepartmentService(); + try { + //从企业微信拉去部门名单 + List<WxCpDepart> wxCpDepartList = wxCpDepartmentService.list(null); + if(wxCpDepartList!=null&&wxCpDepartList.size()>0){ + for(WxCpDepart wxCpDepart : wxCpDepartList){ + if(wxCpDepart.getParentId().compareTo(24L)<0){ + //获取系统内对应部门 + SysDept sysDept = this.getByWxDeptId(wxCpDepart.getId()); + //判断是否有该部门,没有则新建 + if(sysDept!=null){ + //判断是否有变化 + if(!sysDept.getDeptName().equals(wxCpDepart.getName())||sysDept.getOrderNum()!=wxCpDepart.getOrder().intValue()){ + sysDept.setDeptName(wxCpDepart.getName()); + sysDept.setOrderNum(wxCpDepart.getOrder().intValue()); + sysDept.setUpdateBy("企业微信同步"); + this.updateDept(sysDept); + } + }else{ + sysDept = new SysDept(); + sysDept.setDelFlag("0"); + sysDept.setStatus("0"); + sysDept.setParentId(100L); + sysDept.setOrderNum(wxCpDepart.getOrder().intValue()); + sysDept.setCreateBy("企业微信同步"); + sysDept.setDeptName(wxCpDepart.getName()); + sysDept.setWxDeptId(wxCpDepart.getId()); + this.insertDept(sysDept); + } + } + } + } + } catch (WxErrorException e) { + throw new RuntimeException(e); + } + } } -- Gitblit v1.7.1