青城
7 天以前 9cbad80abaabd430de6a9739fb2c898d3b10193a
协调审批对接修改后
已修改13个文件
176 ■■■■ 文件已修改
src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/controller/ApproveProcessController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/mapper/ApproveProcessMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/pojo/ApproveNode.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/service/IApproveNodeService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/service/IApproveProcessService.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/utils/DailyRedisCounter.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/vo/ApproveNodeVo.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/approve/ApproveProcessMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/approve/controller/ApproveNodeController.java
@@ -15,11 +15,11 @@
    /**
     * 流程状态详情
     * @param id 流程审批id approve_id
     * @param id 流程审批编号 approve_id
     * @return
     */
    @GetMapping("/details")
    public AjaxResult details(@PathVariable String id) {
    @GetMapping("/details/{id}")
    public AjaxResult details(@PathVariable("id") String id) {
        return AjaxResult.success(approveNodeService.details(id));
    }
@@ -34,15 +34,6 @@
        return AjaxResult.success();
    }
    /**
     * 初始化审批节点
     * @param id
     * @return
     */
    @PostMapping("/init")
    public AjaxResult init(String id) {
        approveNodeService.initApproveNodes(id);
        return AjaxResult.success();
    }
}
src/main/java/com/ruoyi/approve/controller/ApproveProcessController.java
@@ -91,8 +91,8 @@
     * @return
     */
    @GetMapping("/list")
    public AjaxResult list(Page page) {
        return AjaxResult.success(approveProcessService.listAll(page));
    public AjaxResult list(Page page,String id) {
        return AjaxResult.success(approveProcessService.listAll(page,id));
    }
    /**
@@ -100,7 +100,7 @@
     * @param ids
     * @return
     */
    @RequestMapping ("/deleteIds")
    @DeleteMapping("/deleteIds")
    public AjaxResult deleteIds(@RequestBody Long[] ids) {
        if (ids == null || ids.length == 0) {
            return AjaxResult.warn("参数不能为空");
src/main/java/com/ruoyi/approve/mapper/ApproveProcessMapper.java
@@ -13,6 +13,7 @@
@Mapper
public interface ApproveProcessMapper extends BaseMapper<ApproveProcess> {
    void updateApproveDeptId(ApproveProcess approveProcess);
}
src/main/java/com/ruoyi/approve/pojo/ApproveNode.java
@@ -69,7 +69,7 @@
    private String approveNodeReason;
    /**
     * 审批节点备注
     * 审批节点备注 (是否到当前节点:0否,1是(默认0))
     */
    private String approveNodeRemark;
src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
@@ -31,6 +31,11 @@
    private Long approveUser;
    /**
     * 当前申请人姓名
     */
    private String approveUserName;
    /**
     * 申请部门id
     */
    private Long approveDeptId;
src/main/java/com/ruoyi/approve/service/IApproveNodeService.java
@@ -8,7 +8,11 @@
public interface IApproveNodeService extends IService<ApproveNode> {
    void initApproveNodes(String id);
    /**
     * 初始化
     * @param id 流程编号
     */
    void initApproveNodes(String id,int delFlag);
    /**
     * 详情
     * @param id
src/main/java/com/ruoyi/approve/service/IApproveProcessService.java
@@ -24,12 +24,17 @@
     */
    List<SysDept> selectDeptListByDeptIds(Long[] deptIds);
    IPage<ApproveProcess> listAll(Page page);
    IPage<ApproveProcess> listAll(Page page,String id);
    void delApprove(Long[] ids);
    void updateByApproveId(ApproveGetAndUpdateVo approveGetAndUpdateVo);
    /**
     * 根据流程编号进行查找
     * @param id
     * @return
     */
    ApproveProcess getApproveById(String id);
    /**
src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -30,13 +30,14 @@
    @Override
    public void initApproveNodes(String id) {
    public void initApproveNodes(String id,int deleteFlag) {
        //租户id
        Long tenantId = SecurityUtils.getLoginUser().getTenantId();
        ApproveProcess approve = approveProcessService.getApproveById(id);
        String[] names = approve.getApproveUserNames().split(",");
        Long approveId = approve.getId();
        for (int i = 0; i < names.length; i++) {
            ApproveNode approveNode = new ApproveNode();
            approveNode.setApproveProcessId(approveId);
@@ -45,7 +46,12 @@
            approveNode.setApproveNodeTime(new Date());
            approveNode.setApproveNodeStatus(0);
            approveNode.setTenantId(tenantId);
            approveNode.setDeleteFlag(0);
            approveNode.setDeleteFlag(deleteFlag);
            approveNode.setApproveNodeReason(null);
            approveNode.setApproveNodeRemark("0");
            if(i==0){
                approveNode.setApproveNodeRemark("1");
            }
            approveNodeMapper.insert(approveNode);
        }
    }
@@ -57,6 +63,8 @@
        LambdaQueryWrapper<ApproveNode> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(ApproveNode::getApproveProcessId, approveId);
        queryWrapper.eq(ApproveNode::getDeleteFlag, 0);
        List<ApproveNode> list = list(queryWrapper);
        // 按照 approveNodeOrder 字段升序排序
        list.sort(Comparator.comparingInt(ApproveNode::getApproveNodeOrder));
@@ -73,21 +81,58 @@
            ApproveProcess approveProcess = approveProcessService.getBaseMapper().selectById(approveProcessId);
            approveProcess.setApproveOverTime(new Date());
            approveProcess.setApproveStatus(3);
            //设置当前审批人为第一个
            approveProcess.setApproveUserCurrentId(Long.valueOf(approveProcess.getApproveUserIds().split(",")[0]));
            approveProcess.setApproveUserCurrentName(approveProcess.getApproveUserNames().split(",")[0]);
            approveProcessService.saveOrUpdate(approveProcess);
            //审批节点状态改变
            initApproveNodes(approveProcess.getApproveId());
            updateApproveNodes(approveProcess.getApproveId(),1);
            initApproveNodes(approveProcess.getApproveId(),0);
            return;
        }
        //更新审批流程
        //更新审批流程 当前审批人修改
         approveProcessService.updateApproveProcessStatus(approveNode);
        //审批流程当前审批人修改
        //审批流程 节点状态改变
        ApproveNode node = getById(approveNode.getId());
        node.setApproveNodeRemark("0");
        node.setApproveNodeTime(new Date());
        node.setApproveNodeReason(approveNode.getApproveNodeReason());
        node.setApproveNodeStatus(approveNode.getApproveNodeStatus());
        approveNodeMapper.updateById(node);
        //下一个节点状态改变
        ApproveNode node1 = approveNodeMapper.selectById(approveNode.getId());
        Long approveProcessId = node1.getApproveProcessId();
        ApproveProcess approveProcess = approveProcessService.getBaseMapper().selectById(approveProcessId);
        int length = approveProcess.getApproveUserIds().split(",").length;
        //此时是最后一个节点了
        if (length==node.getApproveNodeOrder()){
            return;
        }
        LambdaQueryWrapper<ApproveNode> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(ApproveNode::getApproveNodeOrder, node.getApproveNodeOrder()+1);
        queryWrapper.eq(ApproveNode::getApproveProcessId, node.getApproveProcessId());
        queryWrapper.eq(ApproveNode::getDeleteFlag, 0);
        ApproveNode nextNode = getOne(queryWrapper);
        nextNode.setApproveNodeRemark("1");
        approveNodeMapper.updateById(nextNode);
    }
    private void updateApproveNodes(String id, int delFlag) {
        ApproveProcess approve = approveProcessService.getApproveById(id);
        Long approveId = approve.getId();
        LambdaQueryWrapper<ApproveNode> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(ApproveNode::getApproveProcessId, approveId);
        List<ApproveNode> list = list(queryWrapper);
        for (ApproveNode approveNode : list) {
            approveNode.setDeleteFlag(delFlag);
            approveNodeMapper.updateById(approveNode);
        }
    }
}
src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -13,7 +13,9 @@
import com.ruoyi.approve.vo.ApproveGetAndUpdateVo;
import com.ruoyi.approve.vo.ApproveNodeVo;
import com.ruoyi.approve.vo.ApproveProcessVO;
import com.ruoyi.basic.pojo.Customer;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.project.system.domain.SysDept;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysDeptMapper;
@@ -27,10 +29,7 @@
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.*;
@Service
@RequiredArgsConstructor
@@ -46,11 +45,14 @@
    private final SysUserMapper sysUserMapper;
    private final ApproveProcessMapper approveProcessMapper;
    @Override
    public void addApprove(ApproveProcessVO approveProcessVO) {
        Long userId = SecurityUtils.getUserId();
        String nickName = SecurityUtils.getLoginUser().getNickName();
        //租户id
        Long tenantId = SecurityUtils.getLoginUser().getTenantId();
        String deptName = sysDeptMapper.selectDeptById(approveProcessVO.getApproveDeptId()).getDeptName();
        String today = LocalDate.now().format(DATE_FORMAT);
        Long approveId = dailyRedisCounter.incrementAndGet("approveId");
@@ -59,17 +61,18 @@
        String approveID = today + formattedCount;
        //审批人姓名处理
        String approverIds = approveProcessVO.getApproverIds();
        String approverIds = approveProcessVO.getApproveUserIds();
        String[] idArray = approverIds.split(",");
        String approverNames = getApproverNames(approveProcessVO.getApproverIds());
        String[] namdArray = approverIds.split(",");
        String approverNames = getApproverNames(approveProcessVO.getApproveUserIds());
        String[] namdArray = approverNames.split(",");
        ApproveProcess approveProcess = new ApproveProcess();
        approveProcess.setApproveId(approveID);
        approveProcess.setApproveUser(userId);
        approveProcess.setApproveUserName(nickName);
        approveProcess.setApproveDeptId(approveProcessVO.getApproveDeptId());
      //  approveProcess.setApproveDeptName(approveProcessVO.getDeptName());
        approveProcess.setApproveUserIds(approveProcessVO.getApproverIds());
        approveProcess.setApproveDeptName(deptName);
        approveProcess.setApproveUserIds(approveProcessVO.getApproveUserIds());
        approveProcess.setApproveUserNames(approverNames);
        approveProcess.setApproveUserCurrentId(Long.parseLong(idArray[0]));
        approveProcess.setApproveUserCurrentName(namdArray[0]);
@@ -82,7 +85,7 @@
        save(approveProcess);
        //初始化审批节点
        approveNodeService.initApproveNodes(approveID);
        approveNodeService.initApproveNodes(approveID,0);
    }
    private String getApproverNames(String approverIds) {
@@ -91,13 +94,14 @@
        Integer[] ids = Arrays.stream(idArray)
                .map(Integer::parseInt)
                .toArray(Integer[]::new);
        String names = "";
        StringBuilder stringBuilder = new StringBuilder();
        List<String> names = new ArrayList<String>();
        for (Integer id : ids) {
            SysUser sysUser = sysUserMapper.selectUserById(id.longValue());
                names = stringBuilder + "," + sysUser.getUserName();
                 names.add(sysUser.getNickName());
        }
        return names;
        return String.join(",", names);
    }
@@ -112,9 +116,16 @@
    }
    @Override
    public IPage<ApproveProcess> listAll(Page page) {
    public IPage<ApproveProcess> listAll(Page page,String id) {
        // 1. 处理空值场景(参数校验)
        if (page == null) {
            page = Page.of(1, 10); // 默认第1页,每页10条数据
        }
        LambdaQueryWrapper<ApproveProcess> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(ApproveProcess::getApproveDelete, 0);
        if (StringUtils.isNotBlank(id)) {
            queryWrapper.like(ApproveProcess::getApproveId, id);
        }
        return approveProcessMapper.selectPage(page, queryWrapper);
    }
@@ -122,8 +133,10 @@
    public void delApprove(Long[] ids) {
        for (Long id : ids) {
            LambdaQueryWrapper<ApproveProcess> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(ApproveProcess::getApproveDelete, 1);
            update(queryWrapper);
            queryWrapper.eq(ApproveProcess::getApproveId, id);
            ApproveProcess process = getOne(queryWrapper);
            process.setApproveDelete(1);
            saveOrUpdate(process);
        }
    }
@@ -143,9 +156,16 @@
        String[] idArray = approveProcess.getApproveUserIds().split(",");
        String[] nameArray = approveProcess.getApproveUserNames().split(",");
        Integer noderOrder = approveNodeVo.getApproveNodeOrder();
        approveProcess.setApproveUserCurrentId(Long.parseLong(idArray[noderOrder]));
        approveProcess.setApproveUserCurrentName(nameArray[noderOrder]);
        //设置当前审批人
        if (noderOrder ==idArray.length){
            approveProcess.setApproveUserCurrentId(null);
            approveProcess.setApproveUserCurrentName(null);
        }else {
            approveProcess.setApproveUserCurrentId(Long.parseLong(idArray[noderOrder]));
            approveProcess.setApproveUserCurrentName(nameArray[noderOrder]);
        }
        if(noderOrder.equals(1)){
            if(approveNodeVo.getApproveNodeStatus() == 1){
@@ -155,12 +175,16 @@
        if(noderOrder.equals(idArray.length)){
            if(approveNodeVo.getApproveNodeStatus() == 1){
                approveProcess.setApproveStatus(2);
                approveProcess.setApproveOverTime(new Date());
            }
        }
        updateById(approveProcess);
       // updateById(approveProcess);
        approveProcessMapper.updateApproveDeptId(approveProcess);
    }
    @Override
    public void updateByApproveId(ApproveGetAndUpdateVo approveGetAndUpdateVo) {
        ApproveProcess approve = getApproveById(approveGetAndUpdateVo.getId());
src/main/java/com/ruoyi/approve/utils/DailyRedisCounter.java
@@ -64,6 +64,7 @@
    /**
     * 生成Redis键
     * 格式 daily_counter:counterName:yyyyMMdd
     */
    private String getKey(String counterName) {
        String today = LocalDate.now().format(DATE_FORMAT);
src/main/java/com/ruoyi/approve/vo/ApproveNodeVo.java
@@ -16,4 +16,6 @@
     */
    private Integer approveNodeStatus;
    private String approveNodeReason;
}
src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java
@@ -12,7 +12,7 @@
    //部门名称
    //private String deptName;
    //审批人 ids
    private String approverIds;
    private String approveUserIds;
    //审批人名称
    //private String approverNames;
    //审批事由
src/main/resources/mapper/approve/ApproveProcessMapper.xml
@@ -27,4 +27,12 @@
        approve_user_names,approve_reason,approve_time,approve_over_time,approve_status,
        approve_delete,tenant_id,approve_type,approve_remark
    </sql>
    <update id="updateApproveDeptId" parameterType="com.ruoyi.approve.pojo.ApproveProcess">
        update approve_process
        set approve_user_current_id = #{approveUserCurrentId},
            approve_user_current_name = #{approveUserCurrentName},
            approve_status = #{approveStatus},
            approve_over_time = #{approveOverTime}
        where id = #{id}
    </update>
</mapper>