yangys
2025-09-18 79e81a02076cdd1e828eb06029cd51eb37522f42
blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/producedivision/service/MdmUserService.java
@@ -1,15 +1,33 @@
package org.springblade.mdm.basesetting.producedivision.service;
import com.alibaba.nacos.common.utils.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springblade.core.tool.utils.Func;
import org.springblade.mdm.basesetting.producedivision.entity.MdmDept;
import org.springblade.mdm.basesetting.producedivision.entity.MdmRole;
import org.springblade.mdm.basesetting.producedivision.entity.MdmUser;
import org.springblade.mdm.basesetting.producedivision.mapper.MdmUserMapper;
import org.springblade.mdm.commons.service.ParamService;
import org.springblade.mdm.gkw.programnode.vo.ProgramNodeVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.stream.Collectors;
@Service
public class MdmUserService extends ServiceImpl<MdmUserMapper, MdmUser> {
   @Autowired
   private ParamService paramService;
   @Autowired
   private MdmRoleService roleService;
   @Autowired
   private MdmDeptService deptService;
   public Long getUserIdByName(String name) {
      List<MdmUser> users = this.lambdaQuery().eq(MdmUser::getName, name).eq(MdmUser::getStatus, 1).orderByDesc(MdmUser::getCreateTime).list();
      Long userId = null;
@@ -19,4 +37,79 @@
      return userId;
   }
   /**
    * 所有审批用户列表
    * @return
    */
   public List<MdmUser> listByDeptAndRoleAlias() {
      List<String> approveRoleAliasList = Func.split(paramService.getApproveRoleAlias(),',');
      List<MdmUser> approveUserList = userListByRoleAlias(approveRoleAliasList);
      //查询程序管理员用户列表
      List<String> managerAliasList = Func.split(paramService.getProgramManagerRoleAlias(),',');
      List<MdmUser> mgrUserList = userListByRoleAlias(managerAliasList);
      for(MdmUser approveUser : approveUserList) {
         for(MdmUser manager : mgrUserList) {
            if(approveUser.getId().equals(manager.getId())) {
               approveUser.setManager(true);
               break;
            }
         }
      }
      return approveUserList;
   }
   private List<MdmUser> userListByRoleAlias(List<String> approveRoleAliasList) {
      List<MdmRole> approveRoles = roleService.listRoleAlias(approveRoleAliasList);
      List<MdmUser> userList= this.getBaseMapper().selectByRoleIds(approveRoles.stream().map(MdmRole::getId).map(rid -> rid+"").toList());
      return userList;
   }
   /**
    * 审批用户树
    * @return 根节点列表
    */
   public List<ProgramNodeVO> flowUserTree() {
      List<ProgramNodeVO> rootNodeVOS = new ArrayList<>();
      List<MdmUser> users = listByDeptAndRoleAlias();
      Map<String,List<MdmUser>> userMap = users.stream().collect(Collectors.groupingBy(MdmUser::getDeptId));
      List<Long> deptIds = new ArrayList<>();
      userMap.keySet().stream().forEach(deptId -> {
         deptIds.addAll(Func.toLongList(deptId));
      });
      List<MdmDept> deptList = deptService.lambdaQuery().in(MdmDept::getId,deptIds).list();
      for(MdmDept dept : deptList) {
         String strDeptId = String.valueOf(dept.getId());
         ProgramNodeVO deptNode = new ProgramNodeVO();
         deptNode.setId(strDeptId);
         deptNode.setName(dept.getDeptName());
         deptNode.setNodeType("dept");
         deptNode.setChildren(new ArrayList<>());
         userMap.forEach((k, usersInDept) -> {
            if(k.contains(strDeptId)){
               for(MdmUser u : usersInDept) {
                  ProgramNodeVO userNode = new ProgramNodeVO();
                  userNode.setId(String.valueOf(u.getId()));
                  userNode.setName(u.getName());
                  if(u.isManager()){
                     userNode.setNodeType("manager");
                  }else {
                     userNode.setNodeType("user");
                  }
                  deptNode.getChildren().add(userNode);
               }
            }
         });
         rootNodeVOS.add(deptNode);
      }
      return rootNodeVOS;
   }
}