package com.ruoyi.approve.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.approve.mapper.ApproveNodeMapper; import com.ruoyi.approve.pojo.ApproveNode; import com.ruoyi.approve.pojo.ApproveProcess; import com.ruoyi.approve.service.IApproveNodeService; import com.ruoyi.approve.service.IApproveProcessService; import com.ruoyi.approve.vo.ApproveNodeVo; import com.ruoyi.common.utils.SecurityUtils; import lombok.AllArgsConstructor; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.Comparator; import java.util.Date; import java.util.List; @Service @RequiredArgsConstructor public class ApproveNodeServiceImpl extends ServiceImpl implements IApproveNodeService { @Autowired private ApproveNodeMapper approveNodeMapper; @Autowired private IApproveProcessService approveProcessService; @Override 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); approveNode.setApproveNodeOrder(i +1); approveNode.setApproveNodeUser(names[i]); approveNode.setApproveNodeTime(new Date()); approveNode.setApproveNodeStatus(0); approveNode.setTenantId(tenantId); approveNode.setDeleteFlag(deleteFlag); approveNode.setApproveNodeReason(null); approveNode.setApproveNodeRemark("0"); if(i==0){ approveNode.setApproveNodeRemark("1"); } approveNodeMapper.insert(approveNode); } } @Override public List details(String id) { ApproveProcess approve = approveProcessService.getApproveById(id); Long approveId = approve.getId(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ApproveNode::getApproveProcessId, approveId); queryWrapper.eq(ApproveNode::getDeleteFlag, 0); List list = list(queryWrapper); // 按照 approveNodeOrder 字段升序排序 list.sort(Comparator.comparingInt(ApproveNode::getApproveNodeOrder)); return list; } @Override public void updateApproveNode(ApproveNodeVo approveNode) { //某个节点审批不通过 if(approveNode.getApproveNodeStatus().intValue()==2){ //修改审批流程 ApproveNode node = approveNodeMapper.selectById(approveNode.getId()); Long approveProcessId = node.getApproveProcessId(); 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); //审批节点状态改变 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 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 queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ApproveNode::getApproveProcessId, approveId); List list = list(queryWrapper); for (ApproveNode approveNode : list) { approveNode.setDeleteFlag(delFlag); approveNodeMapper.updateById(approveNode); } } }