From d644df94dcb33c07c887d3ccfae27a861907c4c3 Mon Sep 17 00:00:00 2001 From: zt Date: Sun, 28 Sep 2025 16:25:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=93=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/service/UserService.java | 7 ++- .../design/service/IDesUserService.java | 2 + .../service/impl/DesUserServiceImpl.java | 39 +++++++++++++ .../impl/DesVolumeFileServiceImpl.java | 6 ++ .../service/impl/SysUserServiceImpl.java | 46 +++++++++++++++ .../listener/WorkflowGlobalListener.java | 57 ++++++++++++++++++- 6 files changed, 153 insertions(+), 4 deletions(-) diff --git a/xinnengyuan/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java b/xinnengyuan/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java index 616de043..4e1ed904 100644 --- a/xinnengyuan/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java +++ b/xinnengyuan/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java @@ -131,8 +131,13 @@ public interface UserService { String selectAvatarById(Long userId); /** - * 通过用户id查询头像 + * 通过用户id查询用户信息 */ UserDTO selectUser(Long userId); + /** + * 查询对应专业的用户Id + */ + List selectUserByProfession(String code,String businessId,String type,Long projectId); + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesUserService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesUserService.java index 7d388509..568cfa00 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesUserService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesUserService.java @@ -99,4 +99,6 @@ public interface IDesUserService extends IService{ Long getCount(String principal, String specialty, Long projectId); void exportExcelByProjectId(Long deptId, HttpServletResponse response); + + List selectbySpecialtyAndType(String specialty, String type, Long projectId); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesUserServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesUserServiceImpl.java index 19465612..4acc716f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesUserServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesUserServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.design.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.servlet.http.HttpServletResponse; import org.apache.poi.ss.usermodel.*; @@ -15,6 +16,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.design.domain.dto.desUser.DesUserBatchDto; +import org.dromara.project.domain.BusUserProjectRelevancy; +import org.dromara.project.service.IBusUserProjectRelevancyService; import org.dromara.system.domain.SysUserRole; import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.vo.SysDictDataVo; @@ -54,6 +57,8 @@ public class DesUserServiceImpl extends ServiceImpl impl private final ISysRoleService roleService; + private final IBusUserProjectRelevancyService userProjectRelevancyService; + /** * 查询设计人员 * @@ -171,6 +176,9 @@ public class DesUserServiceImpl extends ServiceImpl impl ArrayList userIds = new ArrayList<>(); List sysUserRoles = new ArrayList<>(); + + + for (DesUserBo bo : dto.getList()) { if(bo.getUserId()==null){ continue; @@ -194,6 +202,25 @@ public class DesUserServiceImpl extends ServiceImpl impl userIds.add(sysUserRole.getUserId()+"-"+sysUserRole.getRoleId()); } roleService.insertUserRoleBatch(sysUserRoles); + //项目关联 + // 删除用户与项目的关联 + Set list1 = sysUserRoles.stream().map(SysUserRole::getUserId).collect(Collectors.toSet()); + if(CollectionUtil.isNotEmpty(list1)){ + userProjectRelevancyService.remove(new LambdaQueryWrapper<>(BusUserProjectRelevancy.class) + .in(BusUserProjectRelevancy::getUserId, list1) + .eq(BusUserProjectRelevancy::getProjectId, dto.getProjectId()) + ); + ArrayList busUserProjectRelevancies = new ArrayList<>(); + for (Long userId : list1) { + BusUserProjectRelevancy relevancy = new BusUserProjectRelevancy(); + relevancy.setUserId(userId); + relevancy.setProjectId(dto.getProjectId()); + relevancy.setUserType("2"); + busUserProjectRelevancies.add(relevancy); + } + userProjectRelevancyService.saveBatch(busUserProjectRelevancies); + } + //todo:发消息 return saveBatch(desUsers); } @@ -473,4 +500,16 @@ public class DesUserServiceImpl extends ServiceImpl impl validation.setShowErrorBox(true); mainSheet.addValidationData(validation); } + + + @Override + public List selectbySpecialtyAndType(String specialty, String type, Long projectId) { + List desUsers = baseMapper.selectList(Wrappers.lambdaQuery() + .eq(DesUser::getUserMajor, specialty) + .eq(DesUser::getUserType, type) + .eq(DesUser::getProjectId, projectId) + ); + + return desUsers.stream().map(DesUser::getUserId).collect(Collectors.toList()); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeFileServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeFileServiceImpl.java index 67e70d5d..15e3460e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeFileServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeFileServiceImpl.java @@ -493,6 +493,12 @@ public class DesVolumeFileServiceImpl extends ServiceImpl ids) { + try { + ossService.deleteWithValidByIds(ids,false); + }catch (Exception e){ + log.error("删除卷册文件存储失败",e); + } + return this.removeBatchByIds(ids); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index 4ea8f83b..76d183f9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -29,6 +29,13 @@ import org.dromara.contractor.domain.SubConstructionUser; import org.dromara.contractor.domain.SubContractor; import org.dromara.contractor.service.ISubConstructionUserService; import org.dromara.contractor.service.ISubContractorService; +import org.dromara.design.domain.DesDesignChange; +import org.dromara.design.domain.DesVolumeCatalog; +import org.dromara.design.domain.DesVolumeFile; +import org.dromara.design.service.IDesDesignChangeService; +import org.dromara.design.service.IDesUserService; +import org.dromara.design.service.IDesVolumeCatalogService; +import org.dromara.design.service.IDesVolumeFileService; import org.dromara.project.domain.BusUserProjectRelevancy; import org.dromara.project.service.IBusUserProjectRelevancyService; import org.dromara.system.domain.*; @@ -77,6 +84,22 @@ public class SysUserServiceImpl implements ISysUserService, UserService { private final ISubContractorService contractorService; + @Lazy + @Resource + private IDesVolumeCatalogService volumeCatalogService; + + @Lazy + @Resource + private IDesVolumeFileService volumeFileService; + + @Lazy + @Resource + private IDesDesignChangeService desDesignChangeService; + + @Lazy + @Resource + private IDesUserService desUserService; + @Lazy @Resource private ISysUserFileService userFileService; @@ -1220,4 +1243,27 @@ public class SysUserServiceImpl implements ISysUserService, UserService { } return userDTO; } + + @Override + public List selectUserByProfession(String code, String businessId,String type,Long projectId) { + //procDesignFile 过程图纸 + //bpDesignFile 蓝图审核 + //moneydesignchanged 资金设计变更管理 + //designchanged 设计变更审批 + String specialty = null; + if("procDesignFile".equals(code) || "bpDesignFile".equals(code)){ + DesVolumeFile volumeFile = volumeFileService.getById(businessId); + DesVolumeCatalog volumeCatalog = volumeCatalogService.getById(volumeFile.getVolumeCatalogId()); + specialty = volumeCatalog.getSpecialty(); + } else if ("moneydesignchanged".equals(code) || "designchanged".equals(code)) { + DesDesignChange desDesignChange = desDesignChangeService.getById(businessId); + specialty = desDesignChange.getSpecialty(); + } + if(specialty == null){ + return null; + } + + List longs = desUserService.selectbySpecialtyAndType(specialty, type,projectId); + return longs.stream().map(String::valueOf).toList(); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java index c11ece92..7aa19ce1 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java @@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.dto.UserDTO; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.enums.BusinessStatusEnum; +import org.dromara.common.core.service.UserService; import org.dromara.common.core.utils.StringUtils; import org.dromara.warm.flow.core.FlowEngine; import org.dromara.warm.flow.core.dto.FlowParams; @@ -54,6 +55,19 @@ public class WorkflowGlobalListener implements GlobalListener { private final IFlwCommonService flwCommonService; private final InsService insService; private final IFlwTaskAssigneeService flwTaskAssigneeService; + private final UserService userService; + + + + // 需要分专业的角色 + // 1961314792461586433 校审员(系统) + // 1961315028017893378 审核员(系统) + // 1961315147199041537 审定员(系统) + private static final List roleList = Arrays.asList("role:1961314792461586433", "role:1961315028017893378", "role:1961315147199041537"); + + + + /** * 创建监听器,任务创建时执行 @@ -149,12 +163,22 @@ public class WorkflowGlobalListener implements GlobalListener { permissionFlag = permissionFlag.replace("@@", ","); String flowCode = definition.getFlowCode(); - String projectId = flowCode.split("_")[0]; + String[] split = flowCode.split("_"); + String projectId = split[0]; List userDTOS = flwTaskAssigneeService.fetchUsersByStorageIds(permissionFlag, Long.valueOf(projectId)); - - flowTask.setPermissionList(userDTOS.stream().map(UserDTO::getUserId).map(String::valueOf).collect(Collectors.toList())); + String type = getType(permissionFlag); + if(type != null){ + try { + List longs = userService.selectUserByProfession(split[1], instance.getBusinessId(), type,Long.valueOf(projectId)); + flowTask.setPermissionList(longs); + }catch (Exception e) { + flowTask.setPermissionList(userDTOS.stream().map(UserDTO::getUserId).map(String::valueOf).collect(Collectors.toList())); + } + }else { + flowTask.setPermissionList(userDTOS.stream().map(UserDTO::getUserId).map(String::valueOf).collect(Collectors.toList())); + } } } catch (Exception e) { log.error("设置失败: {}", e.getMessage()); @@ -162,6 +186,33 @@ public class WorkflowGlobalListener implements GlobalListener { } } + + public String getType(String permissionFlag){ + // 1961314792461586433 校审员(系统) + // 1961315028017893378 审核员(系统) + // 1961315147199041537 审定员(系统) + String[] split = permissionFlag.split(","); + String roleId = null; + for (String s : split) { + if(roleList.contains(s)){ + roleId = s.replace("role:", ""); + } + } + if(roleId == null){ + return null; + } + String type = null; + if("1961314792461586433".equals(roleId)){ + type = "3"; + }else if("1961315028017893378".equals(roleId)){ + type = "5"; + }else if("1961315147199041537".equals(roleId)){ + type = "4"; + } + return type; + + } + /** * 完成监听器,当前任务完成后执行 *