15 小时以前 44683931d3ca09cf2a062b6ef6cffb4624a18c4d
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
@@ -73,6 +78,8 @@
    @Autowired
    private  ApproveProcessMapper approveProcessMapper;
    @Autowired
    private ApproveProcessDeptMapper approveProcessDeptMapper;
    @Autowired
    private  TempFileServiceImpl tempFileService;
    @Autowired
    private  CommonFileMapper commonFileMapper;
@@ -84,7 +91,11 @@
    @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());
        List<SysDept> sysDepts = sysDeptMapper.selectBatchIds(approveDeptIds);
        Map<Long, SysDept> deptMap = sysDepts.stream().collect(Collectors.toMap(SysDept::getDeptId, dept -> dept));
        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 +115,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 +131,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 +148,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 +187,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 +316,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 +395,18 @@
            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());
            List<SysDept> departments = sysDeptMapper.selectBatchIds(deptIds);
            Map<Long, SysDept> deptMap = departments.stream().collect(Collectors.toMap(SysDept::getDeptId, dept -> dept));
            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 +452,45 @@
    }
    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) {