diff --git a/src/main/java/com/lz/modules/app/controller/ResultRecordController.java b/src/main/java/com/lz/modules/app/controller/ResultRecordController.java index 3fe8202b..1bda4bab 100644 --- a/src/main/java/com/lz/modules/app/controller/ResultRecordController.java +++ b/src/main/java/com/lz/modules/app/controller/ResultRecordController.java @@ -650,10 +650,15 @@ public class ResultRecordController extends AbstractController { /** * 删除 */ + // http://localhost:8080/lz_management/user/lzresultrecord/new/approval?resultRecordId=215&status=1&loginUserId=825 @RequestMapping("/new/approval") public R approval(ApprovalDto approvalDto) { - approvalDto.setLoginUserId(approvalDto.getLoginUserId()); - return resultRecordService.newApproval(approvalDto); + try { + approvalDto.setLoginUserId(approvalDto.getLoginUserId()); + return resultRecordService.newApproval(approvalDto); + } catch (Exception e) { + return R.error(e.getMessage()); + } } diff --git a/src/main/java/com/lz/modules/app/controller/TestController.java b/src/main/java/com/lz/modules/app/controller/TestController.java index 0b96c350..bd5ac44b 100644 --- a/src/main/java/com/lz/modules/app/controller/TestController.java +++ b/src/main/java/com/lz/modules/app/controller/TestController.java @@ -266,18 +266,5 @@ public class TestController { - /** - * 删除 - */ - // http://localhost:8080/lz_management/user/lzresultrecord/new/approval?resultRecordId=215&status=1 - @RequestMapping("/new/approval") - public R approval(Long resultRecordId,Integer status ) { - ApprovalDto approvalDto = new ApprovalDto(); - approvalDto.setResultRecordId(resultRecordId); - approvalDto.setStatus(status); - return resultRecordService.newApproval(approvalDto); - - } - } diff --git a/src/main/java/com/lz/modules/app/dto/ApprovalDto.java b/src/main/java/com/lz/modules/app/dto/ApprovalDto.java index 04629587..b67720ce 100644 --- a/src/main/java/com/lz/modules/app/dto/ApprovalDto.java +++ b/src/main/java/com/lz/modules/app/dto/ApprovalDto.java @@ -5,8 +5,10 @@ import lombok.Data; @Data public class ApprovalDto { private Long resultRecordId; - private Integer status; //1 提交审批,审批通过,2 撤回,3 催办,5 驳回,6 申述,7 流程终止 + private Integer status; //1 提交审批,审批通过,2 撤回,3 催办,4 跳过,5 驳回,6 申述,7 流程终止,8 转交 private Long loginUserId; private String menuName; //按钮名称 private String comment; + private Long transferStaffId; // 转交员工 id + private Long currentStaffId; //当前用户 id } diff --git a/src/main/java/com/lz/modules/app/enums/FlowRecordStatusEnums.java b/src/main/java/com/lz/modules/app/enums/FlowRecordStatusEnums.java index e4e38ece..db15582d 100644 --- a/src/main/java/com/lz/modules/app/enums/FlowRecordStatusEnums.java +++ b/src/main/java/com/lz/modules/app/enums/FlowRecordStatusEnums.java @@ -5,7 +5,8 @@ public enum FlowRecordStatusEnums { UN_TO_STATUS(0, "流程未到"), FINISHED_STATUS(1, "流程已走"), CURRENT_FLOW_STATUS(2, "当前流程"), - SKIP_STATUS(3, "跳过"); + OTHER_APPROVAL(3,"其他人己审批"), + SKIP_STATUS(4, "跳过"); private Integer status; private String desc ; diff --git a/src/main/java/com/lz/modules/flow/dao/FlowRecordMapper.java b/src/main/java/com/lz/modules/flow/dao/FlowRecordMapper.java index 7739ceca..a6b96ebf 100644 --- a/src/main/java/com/lz/modules/flow/dao/FlowRecordMapper.java +++ b/src/main/java/com/lz/modules/flow/dao/FlowRecordMapper.java @@ -64,4 +64,11 @@ public interface FlowRecordMapper extends BaseMapper { List selectFlowRecordByRecordIdStatus(@Param("resultRecordId") Long resultRecordId, @Param("status") Integer status); FlowRecord selectFlowRecordByRecordIdAndFlowId(@Param("resultRecordId") Long resultRecordId, @Param("flowId") Long flowId); + + List selectFlowRecordByRecordIdStatusFlowIndex(@Param("resultRecordId") Long resultRecordId, @Param("status") int status, @Param("flowIndex") int flowIndex); + + + FlowRecord selectPreFlowRecordByRecordIdMaxIdStatus(@Param("resultRecordId") Long resultRecordId, @Param("id") Long id, @Param("status") int status); + + List selectFlowRecordByRecordIdFlowIndex(@Param("resultRecordId") Long resultRecordId, @Param("flowIndex") Integer flowIndex); } \ No newline at end of file diff --git a/src/main/java/com/lz/modules/flow/entity/FlowRecord.java b/src/main/java/com/lz/modules/flow/entity/FlowRecord.java index 36250494..b03f5334 100644 --- a/src/main/java/com/lz/modules/flow/entity/FlowRecord.java +++ b/src/main/java/com/lz/modules/flow/entity/FlowRecord.java @@ -46,7 +46,7 @@ public class FlowRecord implements java.io.Serializable { private String flowStaffIdRole; //状态名称 private String statusName; - //类型 ,1 表示提交目标,2 表示提交结果 + //步骤类型0:依次,1:或签(同时通知,一人通过或拒绝即可),2会签(同时通知,所有人同意才可) private Integer type; /** * diff --git a/src/main/java/com/lz/modules/flow/service/FlowRecordService.java b/src/main/java/com/lz/modules/flow/service/FlowRecordService.java index 3bb55b2b..f2640222 100644 --- a/src/main/java/com/lz/modules/flow/service/FlowRecordService.java +++ b/src/main/java/com/lz/modules/flow/service/FlowRecordService.java @@ -63,4 +63,11 @@ public interface FlowRecordService extends IService { List selectFlowRecordByRecordIdStatus(Long resultRecordId,Integer status); FlowRecord selectFlowRecordByRecordIdAndFlowId(Long resultRecordId, Long id); + + List selectFlowRecordByRecordIdStatusFlowIndex(Long resultRecordId, int status, int flowIndex); + + + FlowRecord selectPreFlowRecordByRecordIdMaxIdStatus(Long resultRecordId, Long id, int status); + + List selectFlowRecordByRecordIdFlowIndex(Long resultRecordId, Integer flowIndex); } \ No newline at end of file diff --git a/src/main/java/com/lz/modules/flow/service/impl/FlowRecordServiceImpl.java b/src/main/java/com/lz/modules/flow/service/impl/FlowRecordServiceImpl.java index 66904608..09f0ae20 100644 --- a/src/main/java/com/lz/modules/flow/service/impl/FlowRecordServiceImpl.java +++ b/src/main/java/com/lz/modules/flow/service/impl/FlowRecordServiceImpl.java @@ -173,4 +173,21 @@ public class FlowRecordServiceImpl extends ServiceImpl selectFlowRecordByRecordIdStatusFlowIndex(Long resultRecordId, int status, int flowIndex) { + return flowRecordMapper.selectFlowRecordByRecordIdStatusFlowIndex(resultRecordId,status,flowIndex); + } + + @Override + public FlowRecord selectPreFlowRecordByRecordIdMaxIdStatus(Long resultRecordId, Long id, int status) { + return flowRecordMapper.selectPreFlowRecordByRecordIdMaxIdStatus(resultRecordId,id,status); + } + + @Override + public List selectFlowRecordByRecordIdFlowIndex(Long resultRecordId, Integer flowIndex) { + return flowRecordMapper.selectFlowRecordByRecordIdFlowIndex(resultRecordId,flowIndex); + } + + } diff --git a/src/main/java/com/lz/modules/sys/service/app/ResultRecordService.java b/src/main/java/com/lz/modules/sys/service/app/ResultRecordService.java index ed10e077..c10f4444 100644 --- a/src/main/java/com/lz/modules/sys/service/app/ResultRecordService.java +++ b/src/main/java/com/lz/modules/sys/service/app/ResultRecordService.java @@ -110,5 +110,5 @@ public interface ResultRecordService extends IService { R initFlowRecord(Long resultRecordId); - R newApproval(ApprovalDto approvalDto); + R newApproval(ApprovalDto approvalDto) throws Exception; } \ No newline at end of file diff --git a/src/main/java/com/lz/modules/sys/service/app/impl/ResultRecordServiceImpl.java b/src/main/java/com/lz/modules/sys/service/app/impl/ResultRecordServiceImpl.java index b6731bf0..f35138fc 100644 --- a/src/main/java/com/lz/modules/sys/service/app/impl/ResultRecordServiceImpl.java +++ b/src/main/java/com/lz/modules/sys/service/app/impl/ResultRecordServiceImpl.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.lz.common.emun.WorkMsgTypeEnum; +import com.lz.common.exception.RRException; import com.lz.common.utils.*; import com.lz.modules.app.dao.DepartmentsDao; import com.lz.modules.app.dao.DepartmentsStaffRelateDao; @@ -27,7 +28,6 @@ import com.lz.modules.flow.enums.FlowRecordEnum; import com.lz.modules.flow.model.*; import com.lz.modules.flow.service.*; import com.lz.modules.job.business.DingtalkBusiness; -import com.lz.modules.performance.req.AssessDetailReq; import com.lz.modules.performance.res.ChartStatistical; import com.lz.modules.sys.dao.app.ResultRecordMapper; import com.lz.modules.sys.entity.SysUserEntity; @@ -813,8 +813,17 @@ public class ResultRecordServiceImpl extends ServiceImpl flowRecords = flowRecordService.selectFlowRecordByRecordIdStatus(approvalDto.getResultRecordId(), 1); if(flowRecords!=null && flowRecords.size()>0){ @@ -840,72 +862,128 @@ public class ResultRecordServiceImpl extends ServiceImpl flowRecords = flowRecordService.selectFlowRecordByRecordId(approvalDto.getResultRecordId()); ResultRecord resultRecord = resultRecordMapper.selectResultRecordById(approvalDto.getResultRecordId()); - FlowRecord currentFlowRecord = null; - for(FlowRecord flowRecord: flowRecords){ - if(flowRecord.getStatus().equals(FlowRecordStatusEnums.CURRENT_FLOW_STATUS.getStatus())){ - log.info("flowRecordId:" + flowRecord.getId() + "更新为流程己走"); - flowRecord.setStatus(FlowRecordStatusEnums.FINISHED_STATUS.getStatus()); - flowRecordService.updateFlowRecordById(flowRecord); - } else if (flowRecord.getStatus().equals(FlowRecordStatusEnums.SKIP_STATUS.getStatus())){ - continue; - } else if (flowRecord.getStatus().equals(FlowRecordStatusEnums.UN_TO_STATUS.getStatus())){ - flowRecord.setStatus(FlowRecordStatusEnums.CURRENT_FLOW_STATUS.getStatus()); - log.info("flowRecordId:" + flowRecord.getId() + "更新为正在执行"); - currentFlowRecord = flowRecord; - flowRecordService.updateFlowRecordById(flowRecord); - break; + if(approvalDto.getLoginUserId() == null){ + approvalDto.setLoginUserId(resultRecord.getCurrentApprovalStaffId()); + } + List flowRecords = flowRecordService.selectFlowRecordByRecordIdStatus(approvalDto.getResultRecordId(),2); + if(CollectionUtils.isEmpty(flowRecords)){ + log.info("流程己经结束"); + return R.ok("流程己经结束"); + } + FlowRecord preFlowRecord = flowRecords.get(0); + int stepType = preFlowRecord.getType(); + if (flowRecords != null && flowRecords.size() > 0) { + if (stepType == 0 || stepType == 1) { //表示只要一个人通过就可以了 + for (FlowRecord flowRecord : flowRecords) { + if (flowRecord.getApprovalStaffId().equals(approvalDto.getLoginUserId())) { + flowRecord.setStatus(FlowRecordStatusEnums.FINISHED_STATUS.getStatus());//当前审批己经完成 + } else { + flowRecord.setStatus(FlowRecordStatusEnums.OTHER_APPROVAL.getStatus()); //其他审批 + } + flowRecordService.updateFlowRecordById(flowRecord); + } + } else { + boolean flag = false; + FlowRecord currentFlowRecord = null; + for (FlowRecord flowRecord : flowRecords) { + if (!flowRecord.getApprovalStaffId().equals(approvalDto.getLoginUserId()) + && flowRecord.getStatus().equals(FlowRecordStatusEnums.CURRENT_FLOW_STATUS.getStatus())) { + flag = true; + } else { + currentFlowRecord = flowRecord;//当前流程 id + } + } + currentFlowRecord.setStatus(FlowRecordStatusEnums.FINISHED_STATUS.getStatus());//当前审批己经完成 + flowRecordService.updateFlowRecordById(currentFlowRecord); + if (flag) { //流程未向下走 + return R.ok("审批成功"); + } } + } else { + preFlowRecord.setStatus(FlowRecordStatusEnums.FINISHED_STATUS.getStatus());//流程己走 + flowRecordService.updateFlowRecordById(preFlowRecord); + FlowChart flowChart = flowService.selectFlowChartByChartId(preFlowRecord.getFlowId()); + comment(approvalDto, flowChart); + } + + List nextFlowRecords = flowRecordService.selectFlowRecordByRecordIdStatusFlowIndex(approvalDto.getResultRecordId(),0,preFlowRecord.getFlowIndex() + 1 ); + if(CollectionUtils.isEmpty(nextFlowRecords)){ + log.info("流程己经结束2"); + return R.ok("流程己经结束"); + } + FlowRecord currentFlowRecord = nextFlowRecords.get(0); + + for (FlowRecord flowRecord : nextFlowRecords) { + flowRecord.setStatus(FlowRecordStatusEnums.CURRENT_FLOW_STATUS.getStatus()); + flowRecordService.updateFlowRecordById(flowRecord); } FlowChart flowChart = flowService.selectFlowChartByChartId(currentFlowRecord.getFlowId()); + resultRecord.setFlowProcess(flowChart.getFlowProcess()); - resultRecord.setFlowStaffIdRole(currentFlowRecord.getFlowStaffIdRole()); - resultRecord.setCurrentApprovalStaffId(currentFlowRecord.getApprovalStaffId()); - resultRecord.setCurrentApprovalStaffName(currentFlowRecord.getApprovalStaffName()); - resultRecordService.updateResultRecordById(resultRecord); - comment(approvalDto,flowChart); + resultRecord.setFlowStaffIdRole(nextFlowRecords.size() == 1 ? currentFlowRecord.getFlowStaffIdRole() : null); + resultRecord.setCurrentApprovalStaffId(nextFlowRecords.size() == 1 ? currentFlowRecord.getApprovalStaffId() : null); + resultRecord.setCurrentApprovalStaffName(nextFlowRecords.size() == 1 ? currentFlowRecord.getApprovalStaffName() : null); + resultRecordService.updateCoverResultRecordById(resultRecord); return R.ok(); } + private R newReject(ApprovalDto approvalDto) { - List flowRecords = flowRecordService.selectFlowRecordByRecordIdStatus(approvalDto.getResultRecordId(),2); - if(flowRecords !=null && flowRecords.size() > 0 ){ - FlowRecord currentFlowRecord = flowRecords.get(0); - for(FlowRecord flowRecord : flowRecords){ - flowRecord.setStatus(0); + List currentflowRecords = flowRecordService.selectFlowRecordByRecordIdStatus(approvalDto.getResultRecordId(),FlowRecordStatusEnums.CURRENT_FLOW_STATUS.getStatus()); + if(currentflowRecords !=null && currentflowRecords.size() > 0 ){ + FlowRecord currentFlowRecord = currentflowRecords.get(0); + // 更新当前数据 + // 获取当前审批结点组 + List currentFlowRecords = flowRecordService.selectFlowRecordByRecordIdFlowIndex(approvalDto.getResultRecordId(), currentFlowRecord.getFlowIndex()); + for(FlowRecord flowRecord : currentFlowRecords){ + flowRecord.setStatus(FlowRecordStatusEnums.UN_TO_STATUS.getStatus()); flowRecordService.updateFlowRecordById(flowRecord); } + FlowRecord currentApprovalFlowRecord = currentFlowRecords.get(0); + FlowChart currentflowChart = flowService.selectFlowChartByChartId(currentApprovalFlowRecord.getFlowId()); + comment(approvalDto, currentflowChart); //评论 - FlowRecord lastFlowRecord = flowRecordService.selectFlowRecordByRecordIdAndFlowId(approvalDto.getResultRecordId(),currentFlowRecord.getId()); - lastFlowRecord.setStatus(2); - flowRecordService.updateFlowRecordById(lastFlowRecord); + // 恢复之前数据 + // 获取之前审批过的结点 + FlowRecord preFlowRecord = flowRecordService.selectPreFlowRecordByRecordIdMaxIdStatus(approvalDto.getResultRecordId(), + currentFlowRecord.getId(),FlowRecordStatusEnums.FINISHED_STATUS.getStatus()); + if(preFlowRecord != null) { + // 获取之前审批结点组 + List flowRecords = flowRecordService.selectFlowRecordByRecordIdFlowIndex(approvalDto.getResultRecordId(), preFlowRecord.getFlowIndex()); + for (FlowRecord flowRecord : flowRecords) { + flowRecord.setStatus(FlowRecordStatusEnums.CURRENT_FLOW_STATUS.getStatus()); + flowRecordService.updateFlowRecordById(flowRecord); + } - ResultRecord resultRecord = resultRecordMapper.selectResultRecordById(approvalDto.getResultRecordId()); - resultRecord.setCurrentApprovalStaffId(lastFlowRecord.getApprovalStaffId()); - resultRecord.setCurrentApprovalStaffName(lastFlowRecord.getApprovalStaffName()); - resultRecord.setFlowStaffIdRole(lastFlowRecord.getFlowStaffIdRole()); - FlowChart flowChart = flowService.selectFlowChartByChartId(lastFlowRecord.getFlowId()); - resultRecord.setFlowProcess(flowChart.getFlowProcess()); - resultRecordService.updateResultRecordById(resultRecord); - comment(approvalDto,flowChart); + FlowRecord lastFlowRecord = flowRecords.get(0); + ResultRecord resultRecord = resultRecordMapper.selectResultRecordById(approvalDto.getResultRecordId()); + resultRecord.setCurrentApprovalStaffId(flowRecords.size() == 1 ? lastFlowRecord.getApprovalStaffId():null); + resultRecord.setCurrentApprovalStaffName(flowRecords.size() == 1 ?lastFlowRecord.getApprovalStaffName():null); + resultRecord.setFlowStaffIdRole(flowRecords.size() == 1 ?lastFlowRecord.getFlowStaffIdRole():null); + + FlowChart flowChart = flowService.selectFlowChartByChartId(lastFlowRecord.getFlowId()); + resultRecord.setFlowProcess(flowChart.getFlowProcess()); + resultRecordService.updateCoverResultRecordById(resultRecord); + } } return R.ok(); } - private R urge(ApprovalDto approvalDto) { ResultRecord resultRecord = resultRecordMapper.selectResultRecordById(approvalDto.getResultRecordId()); if(!resultRecord.getCurrentApprovalStaffId().equals(approvalDto.getLoginUserId())){ diff --git a/src/main/resources/mapper/flow/FlowRecordMapper.xml b/src/main/resources/mapper/flow/FlowRecordMapper.xml index a2e3e6d1..03f41db9 100644 --- a/src/main/resources/mapper/flow/FlowRecordMapper.xml +++ b/src/main/resources/mapper/flow/FlowRecordMapper.xml @@ -266,10 +266,25 @@ + + + + + + + + +