10 小时以前 abbb0e6fa913843bd10c5c63c6b5484c88e74e8f
src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -8,9 +8,11 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.approve.mapper.ApproveNodeMapper;
import com.ruoyi.approve.mapper.ApproveProcessDeptMapper;
import com.ruoyi.approve.mapper.ApproveProcessMapper;
import com.ruoyi.approve.pojo.ApproveNode;
import com.ruoyi.approve.pojo.ApproveProcess;
import com.ruoyi.approve.pojo.ApproveProcessDept;
import com.ruoyi.approve.service.IApproveNodeService;
import com.ruoyi.approve.service.IApproveProcessService;
import com.ruoyi.approve.utils.DailyRedisCounter;
@@ -52,7 +54,10 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Service
@@ -71,7 +76,9 @@
    @Autowired
    private  SysUserMapper sysUserMapper;
    @Autowired
    private  ApproveProcessMapper approveProcessMapper;
    private ApproveProcessMapper approveProcessMapper;
    @Autowired
    private ApproveProcessDeptMapper approveProcessDeptMapper;
    @Autowired
    private  TempFileServiceImpl tempFileService;
    @Autowired
@@ -84,7 +91,10 @@
    @Override
    public void addApprove(ApproveProcessVO approveProcessVO) throws Exception {
        SysUser sysUser = sysUserMapper.selectUserById(approveProcessVO.getApproveUser());
        SysDept sysDept = sysDeptMapper.selectDeptById(approveProcessVO.getApproveDeptId());
        List<Long> approveDeptIds = normalizeDeptIds(approveProcessVO.getApproveDeptIdArray(), approveProcessVO.getApproveDeptId());
        Map<Long, SysDept> deptMap = loadDepartments(approveDeptIds);
        if (deptMap.size() != approveDeptIds.size()) throw new RuntimeException("部门不存在");
        SysDept sysDept = deptMap.get(approveDeptIds.get(0));
        String[] split = approveProcessVO.getApproveUserIds().split(",");
        List<Long> longList = Arrays.stream(split)
                .map(Long::valueOf)  // 将每个 String 转换为 Long
@@ -104,8 +114,10 @@
        approveProcess.setApproveId(no);
        approveProcess.setApproveUser(approveProcessVO.getApproveUser());
        approveProcess.setApproveUserName(sysUser.getNickName());
        approveProcess.setApproveDeptId(approveProcessVO.getApproveDeptId());
        approveProcess.setApproveDeptName(sysDept.getDeptName());
        approveProcess.setApproveDeptId(approveDeptIds.get(0));
        approveProcess.setApproveDeptName(approveDeptIds.stream().map(deptMap::get).map(SysDept::getDeptName).collect(Collectors.joining(",")));
        approveProcess.setApproveDeptIdArray(approveDeptIds);
        approveProcess.setApproveDeptNameArray(approveDeptIds.stream().map(deptMap::get).map(SysDept::getDeptName).collect(Collectors.toList()));
        approveProcess.setApproveUserNames(sysUsers.stream().map(SysUser::getNickName).collect(Collectors.joining(",")));
        approveProcess.setApproveTime(StringUtils.isEmpty(approveProcessVO.getApproveTime()) ? null : dateFormat.parse(approveProcessVO.getApproveTime()));
        approveProcess.setApproveReason(approveProcessVO.getApproveReason());
@@ -118,7 +130,7 @@
        approveProcess.setApproveDelete(0);
        approveProcess.setApproveType(approveProcessVO.getApproveType());
        approveProcess.setCreateTime(LocalDateTime.now());
        approveProcess.setTenantId(approveProcessVO.getApproveDeptId());
        approveProcess.setTenantId(approveDeptIds.get(0));
        approveProcess.setApproveUserIds(approveProcessVO.getApproveUserIds());
        approveProcess.setApproveUserCurrentId(longList.get(0));
        approveProcess.setApproveTitle(ObjectUtils.isNotEmpty(approveProcessVO.getApproveTitle()) ? approveProcessVO.getApproveTitle() : "");
@@ -135,8 +147,9 @@
            approveProcessMapper.updateById(approveProcess1);
        }
        save(approveProcess);
        saveProcessDepartments(approveProcess.getId(), approveDeptIds, deptMap);
        //初始化审批节点
        approveNodeService.initApproveNodes(approveProcessVO.getApproveUserIds(), no, approveProcessVO.getApproveDeptId());
        approveNodeService.initApproveNodes(approveProcessVO.getApproveUserIds(), no, approveDeptIds.get(0));
        // 附件绑定
        tempFileService.migrateTempFilesToFormal(approveProcess.getId(), approveProcessVO.getTempFileIds(), FileNameType.ApproveProcess.getValue());
        /*消息通知*/
@@ -173,6 +186,7 @@
    @Override
    public IPage<ApproveProcess> listAll(Page page, ApproveProcess approveProcess) {
        IPage<ApproveProcess> approveProcessIPage = approveProcessMapper.listPage(page, approveProcess);
        fillDepartmentArrays(approveProcessIPage.getRecords());
        List<ApproveProcess> records = approveProcessIPage.getRecords();
        for (ApproveProcess record : records) {
@@ -301,6 +315,7 @@
        one.setCommonFileList(commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
                .eq(CommonFile::getCommonId, one.getId())
                .eq(CommonFile::getType, FileNameType.ApproveProcess.getValue())));
        fillDepartmentArrays(Arrays.asList(one));
        return one;
    }
@@ -379,6 +394,17 @@
            approve.setApproveUserCurrentName(sysUsers.stream().filter(user -> user.getUserId().equals(Long.parseLong(split[0]))).collect(Collectors.toList()).get(0).getNickName());
        }
        if (approveGetAndUpdateVo.getApproveDeptIdArray() != null || approveGetAndUpdateVo.getApproveDeptId() != null) {
            if (approve.getApproveStatus() == 1) throw new RuntimeException("审核中不可以修改审批部门");
            List<Long> deptIds = normalizeDeptIds(approveGetAndUpdateVo.getApproveDeptIdArray(), approveGetAndUpdateVo.getApproveDeptId());
            Map<Long, SysDept> deptMap = loadDepartments(deptIds);
            if (deptMap.size() != deptIds.size()) throw new RuntimeException("部门不存在");
            approve.setApproveDeptId(deptIds.get(0));
            approve.setApproveDeptName(deptIds.stream().map(deptMap::get).map(SysDept::getDeptName).collect(Collectors.joining(",")));
            approve.setTenantId(deptIds.get(0));
            approveProcessDeptMapper.delete(Wrappers.<ApproveProcessDept>lambdaUpdate().eq(ApproveProcessDept::getApproveProcessId, approve.getId()));
            saveProcessDepartments(approve.getId(), deptIds, deptMap);
        }
        updateById(approve);
        //修改审批人
        // 先删除 后新增
@@ -424,6 +450,54 @@
    }
    private Map<Long, SysDept> loadDepartments(List<Long> deptIds) {
        Map<Long, SysDept> deptMap = new java.util.HashMap<>();
        for (Long deptId : deptIds) {
            SysDept dept = sysDeptMapper.selectDeptById(deptId);
            if (dept != null) deptMap.put(deptId, dept);
        }
        return deptMap;
    }
    private List<Long> normalizeDeptIds(List<Long> deptIds, Long deptId) {
        List<Long> ids = deptIds == null || deptIds.isEmpty() ? (deptId == null ? new ArrayList<>() : Arrays.asList(deptId)) : deptIds;
        if (ids.isEmpty()) throw new RuntimeException("请选择审批部门");
        Set<Long> uniqueIds = new LinkedHashSet<>(ids);
        if (uniqueIds.size() != ids.size() || uniqueIds.stream().anyMatch(id -> id == null || id <= 0)) {
            throw new RuntimeException("审批部门参数不正确");
        }
        return new ArrayList<>(uniqueIds);
    }
    private void saveProcessDepartments(Long processId, List<Long> deptIds, Map<Long, SysDept> deptMap) {
        for (int i = 0; i < deptIds.size(); i++) {
            ApproveProcessDept processDept = new ApproveProcessDept();
            processDept.setApproveProcessId(processId);
            processDept.setApproveDeptId(deptIds.get(i));
            processDept.setApproveDeptName(deptMap.get(deptIds.get(i)).getDeptName());
            processDept.setDeptOrder(i + 1);
            processDept.setDeleteFlag(0);
            processDept.setCreateTime(LocalDateTime.now());
            approveProcessDeptMapper.insert(processDept);
        }
    }
    private void fillDepartmentArrays(List<ApproveProcess> processes) {
        for (ApproveProcess process : processes) {
            List<ApproveProcessDept> departments = approveProcessDeptMapper.selectList(Wrappers.<ApproveProcessDept>lambdaQuery()
                    .eq(ApproveProcessDept::getApproveProcessId, process.getId())
                    .eq(ApproveProcessDept::getDeleteFlag, 0)
                    .orderByAsc(ApproveProcessDept::getDeptOrder));
            if (departments.isEmpty()) {
                process.setApproveDeptIdArray(process.getApproveDeptId() == null ? new ArrayList<>() : Arrays.asList(process.getApproveDeptId()));
                process.setApproveDeptNameArray(process.getApproveDeptName() == null ? new ArrayList<>() : Arrays.asList(process.getApproveDeptName()));
            } else {
                process.setApproveDeptIdArray(departments.stream().map(ApproveProcessDept::getApproveDeptId).collect(Collectors.toList()));
                process.setApproveDeptNameArray(departments.stream().map(ApproveProcessDept::getApproveDeptName).collect(Collectors.toList()));
            }
        }
    }
    //审批类型获取(与前端页面对应)
    private String approveProcessType(Integer approveType) {
        switch (approveType) {