11 小时以前 44683931d3ca09cf2a062b6ef6cffb4624a18c4d
src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -3,13 +3,16 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
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;
@@ -51,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
@@ -70,7 +76,9 @@
    @Autowired
    private  SysUserMapper sysUserMapper;
    @Autowired
    private  ApproveProcessMapper approveProcessMapper;
    private ApproveProcessMapper approveProcessMapper;
    @Autowired
    private ApproveProcessDeptMapper approveProcessDeptMapper;
    @Autowired
    private  TempFileServiceImpl tempFileService;
    @Autowired
@@ -83,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
@@ -99,12 +111,14 @@
//        String approveID = today + formattedCount;
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        ApproveProcess approveProcess = new ApproveProcess();
        String no = OrderUtils.countTodayByCreateTime(approveProcessMapper, "SP","approveId");
        String no = OrderUtils.countTodayByCreateTime(approveProcessMapper, "","approve_id");
        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());
@@ -117,9 +131,10 @@
        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() : "");
        approveProcess.setApproveUserCurrentName(sysUsers
                .stream()
                .filter(SysUser -> SysUser.getUserId().equals(longList.get(0)))
@@ -133,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());
        /*消息通知*/
@@ -171,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) {
@@ -221,20 +238,19 @@
        return approveProcessIPage;
    }
    public void delByIds(List<Long> ids) {
        for (Long approveId : ids) {
    @Override
    public void delByIds(List<Long> longs) {
        ApproveProcess approveProcess;
        for (Long approveId : longs) {
            //  逻辑删除审批流程
            update(new UpdateWrapper<ApproveProcess>()
                    .lambda()
                    .set(ApproveProcess::getApproveDelete, 1)
                    .eq(ApproveProcess::getId, approveId));
            // 删除对应的附件
            commonFileService.deleteByBusinessId(approveId, FileNameType.ApproveProcess.getValue());
            ApproveProcess approveProcess = approveProcessMapper.selectById(approveId);
                    .eq(ApproveProcess::getApproveId, approveId));
            //  删除审批节点
            approveNodeService.delApproveNodeByApproveId(approveProcess.getApproveId());
            approveNodeService.delApproveNodeByApproveId(approveId);
            //  只查最新一条审批流程
            ApproveProcess latestProcess = approveProcessMapper.selectOne(
@@ -247,14 +263,12 @@
                continue;
            }
            //  删除对应的消息通知
            sysNoticeService.remove(new LambdaQueryWrapper<SysNotice>()
                    .eq(SysNotice::getNoticeTitle, approveProcessType(latestProcess.getApproveType()))
                    .eq(SysNotice::getSenderId, latestProcess.getApproveUser())
                    .apply("CAST(notice_content AS CHAR) LIKE CONCAT('%', {0}, '%')", latestProcess.getApproveId()));
        }
    }
    @Override
@@ -272,7 +286,7 @@
            // 删除对应的附件
            commonFileService.deleteByBusinessId(approveProcess.getId(), FileNameType.ApproveProcess.getValue());
            //  删除审批节点
            approveNodeService.delApproveNodeByApproveId(approveId.toString());
            approveNodeService.delApproveNodeByApproveId(approveId);
            //  只查最新一条审批流程
            ApproveProcess latestProcess = approveProcessMapper.selectOne(
@@ -302,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;
    }
@@ -373,10 +388,24 @@
        if (sysUser == null) throw new RuntimeException("申请人不存在");
        approve.setApproveUserName(sysUser.getNickName());
        approve.setApproveUser(sysUser.getUserId());
        approve.setApproveTitle(approveGetAndUpdateVo.getApproveTitle());
        //审核中不可以编辑审核人
        if (approve.getApproveStatus() != 1) {
            approve.setApproveUserCurrentId(Long.parseLong(split[0]));
            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);
        //修改审批人
@@ -423,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) {
@@ -442,6 +510,10 @@
                return "发货审批";
            case 8:
                return "危险作业审批";
            case 9:
                return "销售审批";
            case 10:
                return "自由协同审批";
        }
        return null;
    }