diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index f5cf538..72c5208 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -29,7 +29,7 @@ * 样品状态(任务收发&任务分发使用,委托书和样品关联表中的状态): * 1:待收入;2:待分发;3:检测中;4:检测完成;5:待归还;6:已归还;7:无需检测;8:已超期 * 实验室检定状态(实验室检测使用,实验室检定信息记录表中的状态): - * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回 + * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回;5:终止(已收入中点击终止更新实验室中待分配和待检测的的状态为已终止) *

* * @author wangpeng diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index f5cf538..72c5208 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -29,7 +29,7 @@ * 样品状态(任务收发&任务分发使用,委托书和样品关联表中的状态): * 1:待收入;2:待分发;3:检测中;4:检测完成;5:待归还;6:已归还;7:无需检测;8:已超期 * 实验室检定状态(实验室检测使用,实验室检定信息记录表中的状态): - * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回 + * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回;5:终止(已收入中点击终止更新实验室中待分配和待检测的的状态为已终止) *

* * @author wangpeng diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java new file mode 100644 index 0000000..32fe974 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java @@ -0,0 +1,13 @@ +package com.casic.missiles.enums; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/02/09 16:00 + */ +public interface AssigneeTypeEnum { + //1具体人员 2角色 3部门 + String USER = "1"; + String ROLE = "2"; + String DEPT = "3"; +} diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index f5cf538..72c5208 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -29,7 +29,7 @@ * 样品状态(任务收发&任务分发使用,委托书和样品关联表中的状态): * 1:待收入;2:待分发;3:检测中;4:检测完成;5:待归还;6:已归还;7:无需检测;8:已超期 * 实验室检定状态(实验室检测使用,实验室检定信息记录表中的状态): - * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回 + * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回;5:终止(已收入中点击终止更新实验室中待分配和待检测的的状态为已终止) *

* * @author wangpeng diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java new file mode 100644 index 0000000..32fe974 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java @@ -0,0 +1,13 @@ +package com.casic.missiles.enums; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/02/09 16:00 + */ +public interface AssigneeTypeEnum { + //1具体人员 2角色 3部门 + String USER = "1"; + String ROLE = "2"; + String DEPT = "3"; +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 0e2ecd2..18ab69f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; import com.casic.missiles.enums.AssigneeSetTypeEnum; +import com.casic.missiles.enums.AssigneeTypeEnum; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; @@ -92,9 +93,9 @@ JSONObject jsonObject1 = (JSONObject) iterator.next(); String targetId = jsonObject1.getString("targetId"); //1具体人员 2角色 3部门 - if ("1".equals(jsonObject1.getString("type"))) { + if (AssigneeTypeEnum.USER.equals(jsonObject1.getString("type"))) { assigneeList.add(targetId); - } else if ("2".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.ROLE.equals(jsonObject1.getString("type"))) { //按角色查询用户id QueryWrapper ruWrapper = new QueryWrapper<>(); ruWrapper.eq("ROLEID", targetId); @@ -103,7 +104,7 @@ List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); assigneeList.addAll(collect); } - } else if ("3".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id List> list = userMapper.selectUsers(null, null, null, targetId); if (!CollectionUtils.isEmpty(list)) { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index f5cf538..72c5208 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -29,7 +29,7 @@ * 样品状态(任务收发&任务分发使用,委托书和样品关联表中的状态): * 1:待收入;2:待分发;3:检测中;4:检测完成;5:待归还;6:已归还;7:无需检测;8:已超期 * 实验室检定状态(实验室检测使用,实验室检定信息记录表中的状态): - * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回 + * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回;5:终止(已收入中点击终止更新实验室中待分配和待检测的的状态为已终止) *

* * @author wangpeng diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java new file mode 100644 index 0000000..32fe974 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java @@ -0,0 +1,13 @@ +package com.casic.missiles.enums; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/02/09 16:00 + */ +public interface AssigneeTypeEnum { + //1具体人员 2角色 3部门 + String USER = "1"; + String ROLE = "2"; + String DEPT = "3"; +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 0e2ecd2..18ab69f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; import com.casic.missiles.enums.AssigneeSetTypeEnum; +import com.casic.missiles.enums.AssigneeTypeEnum; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; @@ -92,9 +93,9 @@ JSONObject jsonObject1 = (JSONObject) iterator.next(); String targetId = jsonObject1.getString("targetId"); //1具体人员 2角色 3部门 - if ("1".equals(jsonObject1.getString("type"))) { + if (AssigneeTypeEnum.USER.equals(jsonObject1.getString("type"))) { assigneeList.add(targetId); - } else if ("2".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.ROLE.equals(jsonObject1.getString("type"))) { //按角色查询用户id QueryWrapper ruWrapper = new QueryWrapper<>(); ruWrapper.eq("ROLEID", targetId); @@ -103,7 +104,7 @@ List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); assigneeList.addAll(collect); } - } else if ("3".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id List> list = userMapper.selectUsers(null, null, null, targetId); if (!CollectionUtils.isEmpty(list)) { diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java index 8d70c94..e1efeaf 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java @@ -26,7 +26,7 @@ List selectApprovalList(Page page, @Param("request") FileApprovalListRequest request); - List selectDraftListForApproval(@Param("request") FileApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") FileApprovalListRequest request); - List selectBatchForApproval(@Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index f5cf538..72c5208 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -29,7 +29,7 @@ * 样品状态(任务收发&任务分发使用,委托书和样品关联表中的状态): * 1:待收入;2:待分发;3:检测中;4:检测完成;5:待归还;6:已归还;7:无需检测;8:已超期 * 实验室检定状态(实验室检测使用,实验室检定信息记录表中的状态): - * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回 + * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回;5:终止(已收入中点击终止更新实验室中待分配和待检测的的状态为已终止) *

* * @author wangpeng diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java new file mode 100644 index 0000000..32fe974 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java @@ -0,0 +1,13 @@ +package com.casic.missiles.enums; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/02/09 16:00 + */ +public interface AssigneeTypeEnum { + //1具体人员 2角色 3部门 + String USER = "1"; + String ROLE = "2"; + String DEPT = "3"; +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 0e2ecd2..18ab69f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; import com.casic.missiles.enums.AssigneeSetTypeEnum; +import com.casic.missiles.enums.AssigneeTypeEnum; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; @@ -92,9 +93,9 @@ JSONObject jsonObject1 = (JSONObject) iterator.next(); String targetId = jsonObject1.getString("targetId"); //1具体人员 2角色 3部门 - if ("1".equals(jsonObject1.getString("type"))) { + if (AssigneeTypeEnum.USER.equals(jsonObject1.getString("type"))) { assigneeList.add(targetId); - } else if ("2".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.ROLE.equals(jsonObject1.getString("type"))) { //按角色查询用户id QueryWrapper ruWrapper = new QueryWrapper<>(); ruWrapper.eq("ROLEID", targetId); @@ -103,7 +104,7 @@ List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); assigneeList.addAll(collect); } - } else if ("3".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id List> list = userMapper.selectUsers(null, null, null, targetId); if (!CollectionUtils.isEmpty(list)) { diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java index 8d70c94..e1efeaf 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java @@ -26,7 +26,7 @@ List selectApprovalList(Page page, @Param("request") FileApprovalListRequest request); - List selectDraftListForApproval(@Param("request") FileApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") FileApprovalListRequest request); - List selectBatchForApproval(@Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java index b5cfc4e..220e097 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java @@ -2,7 +2,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.TraceSupplierApprovalListRequest; +import com.casic.missiles.dto.meter.TraceSupplierApprovalListResponse; import com.casic.missiles.dto.meter.TraceSupplierDetailResponse; import com.casic.missiles.model.meter.MeterTraceSupplier; import org.apache.ibatis.annotations.Param; @@ -23,7 +25,7 @@ TraceSupplierDetailResponse selectTraceSupplierById(@Param("id") Long id); - List selectDraftListForApproval(@Param("request") TraceSupplierApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request); - List selectBatchForApproval(@Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); + List selectBatchForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index f5cf538..72c5208 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -29,7 +29,7 @@ * 样品状态(任务收发&任务分发使用,委托书和样品关联表中的状态): * 1:待收入;2:待分发;3:检测中;4:检测完成;5:待归还;6:已归还;7:无需检测;8:已超期 * 实验室检定状态(实验室检测使用,实验室检定信息记录表中的状态): - * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回 + * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回;5:终止(已收入中点击终止更新实验室中待分配和待检测的的状态为已终止) *

* * @author wangpeng diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java new file mode 100644 index 0000000..32fe974 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java @@ -0,0 +1,13 @@ +package com.casic.missiles.enums; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/02/09 16:00 + */ +public interface AssigneeTypeEnum { + //1具体人员 2角色 3部门 + String USER = "1"; + String ROLE = "2"; + String DEPT = "3"; +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 0e2ecd2..18ab69f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; import com.casic.missiles.enums.AssigneeSetTypeEnum; +import com.casic.missiles.enums.AssigneeTypeEnum; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; @@ -92,9 +93,9 @@ JSONObject jsonObject1 = (JSONObject) iterator.next(); String targetId = jsonObject1.getString("targetId"); //1具体人员 2角色 3部门 - if ("1".equals(jsonObject1.getString("type"))) { + if (AssigneeTypeEnum.USER.equals(jsonObject1.getString("type"))) { assigneeList.add(targetId); - } else if ("2".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.ROLE.equals(jsonObject1.getString("type"))) { //按角色查询用户id QueryWrapper ruWrapper = new QueryWrapper<>(); ruWrapper.eq("ROLEID", targetId); @@ -103,7 +104,7 @@ List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); assigneeList.addAll(collect); } - } else if ("3".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id List> list = userMapper.selectUsers(null, null, null, targetId); if (!CollectionUtils.isEmpty(list)) { diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java index 8d70c94..e1efeaf 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java @@ -26,7 +26,7 @@ List selectApprovalList(Page page, @Param("request") FileApprovalListRequest request); - List selectDraftListForApproval(@Param("request") FileApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") FileApprovalListRequest request); - List selectBatchForApproval(@Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java index b5cfc4e..220e097 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java @@ -2,7 +2,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.TraceSupplierApprovalListRequest; +import com.casic.missiles.dto.meter.TraceSupplierApprovalListResponse; import com.casic.missiles.dto.meter.TraceSupplierDetailResponse; import com.casic.missiles.model.meter.MeterTraceSupplier; import org.apache.ibatis.annotations.Param; @@ -23,7 +25,7 @@ TraceSupplierDetailResponse selectTraceSupplierById(@Param("id") Long id); - List selectDraftListForApproval(@Param("request") TraceSupplierApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request); - List selectBatchForApproval(@Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); + List selectBatchForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java index 9bd6254..f2864e8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java @@ -2,8 +2,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.MeterWorkbenchResponse; import com.casic.missiles.dto.meter.TrainPlanApprovalListRequest; +import com.casic.missiles.dto.meter.TrainPlanApprovalListResponse; import com.casic.missiles.dto.meter.TrainPlanDetailResponse; import com.casic.missiles.model.meter.MeterTrainPlan; import org.apache.ibatis.annotations.Param; @@ -26,7 +28,7 @@ List meterTrainStatistic(@Param("startTime")String startTime, @Param("endTime")String endTime); - List selectDraftListForApproval(@Param("request")TrainPlanApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request); - List selectBatchForApproval(@Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index f5cf538..72c5208 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -29,7 +29,7 @@ * 样品状态(任务收发&任务分发使用,委托书和样品关联表中的状态): * 1:待收入;2:待分发;3:检测中;4:检测完成;5:待归还;6:已归还;7:无需检测;8:已超期 * 实验室检定状态(实验室检测使用,实验室检定信息记录表中的状态): - * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回 + * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回;5:终止(已收入中点击终止更新实验室中待分配和待检测的的状态为已终止) *

* * @author wangpeng diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java new file mode 100644 index 0000000..32fe974 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java @@ -0,0 +1,13 @@ +package com.casic.missiles.enums; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/02/09 16:00 + */ +public interface AssigneeTypeEnum { + //1具体人员 2角色 3部门 + String USER = "1"; + String ROLE = "2"; + String DEPT = "3"; +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 0e2ecd2..18ab69f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; import com.casic.missiles.enums.AssigneeSetTypeEnum; +import com.casic.missiles.enums.AssigneeTypeEnum; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; @@ -92,9 +93,9 @@ JSONObject jsonObject1 = (JSONObject) iterator.next(); String targetId = jsonObject1.getString("targetId"); //1具体人员 2角色 3部门 - if ("1".equals(jsonObject1.getString("type"))) { + if (AssigneeTypeEnum.USER.equals(jsonObject1.getString("type"))) { assigneeList.add(targetId); - } else if ("2".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.ROLE.equals(jsonObject1.getString("type"))) { //按角色查询用户id QueryWrapper ruWrapper = new QueryWrapper<>(); ruWrapper.eq("ROLEID", targetId); @@ -103,7 +104,7 @@ List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); assigneeList.addAll(collect); } - } else if ("3".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id List> list = userMapper.selectUsers(null, null, null, targetId); if (!CollectionUtils.isEmpty(list)) { diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java index 8d70c94..e1efeaf 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java @@ -26,7 +26,7 @@ List selectApprovalList(Page page, @Param("request") FileApprovalListRequest request); - List selectDraftListForApproval(@Param("request") FileApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") FileApprovalListRequest request); - List selectBatchForApproval(@Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java index b5cfc4e..220e097 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java @@ -2,7 +2,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.TraceSupplierApprovalListRequest; +import com.casic.missiles.dto.meter.TraceSupplierApprovalListResponse; import com.casic.missiles.dto.meter.TraceSupplierDetailResponse; import com.casic.missiles.model.meter.MeterTraceSupplier; import org.apache.ibatis.annotations.Param; @@ -23,7 +25,7 @@ TraceSupplierDetailResponse selectTraceSupplierById(@Param("id") Long id); - List selectDraftListForApproval(@Param("request") TraceSupplierApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request); - List selectBatchForApproval(@Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); + List selectBatchForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java index 9bd6254..f2864e8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java @@ -2,8 +2,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.MeterWorkbenchResponse; import com.casic.missiles.dto.meter.TrainPlanApprovalListRequest; +import com.casic.missiles.dto.meter.TrainPlanApprovalListResponse; import com.casic.missiles.dto.meter.TrainPlanDetailResponse; import com.casic.missiles.model.meter.MeterTrainPlan; import org.apache.ibatis.annotations.Param; @@ -26,7 +28,7 @@ List meterTrainStatistic(@Param("startTime")String startTime, @Param("endTime")String endTime); - List selectDraftListForApproval(@Param("request")TrainPlanApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request); - List selectBatchForApproval(@Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java new file mode 100644 index 0000000..9edcda0 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.flowable; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/10 12:27 + */ +@Data +public class AllApproveDTO { + private String businessKey; + private String status; +} diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index f5cf538..72c5208 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -29,7 +29,7 @@ * 样品状态(任务收发&任务分发使用,委托书和样品关联表中的状态): * 1:待收入;2:待分发;3:检测中;4:检测完成;5:待归还;6:已归还;7:无需检测;8:已超期 * 实验室检定状态(实验室检测使用,实验室检定信息记录表中的状态): - * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回 + * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回;5:终止(已收入中点击终止更新实验室中待分配和待检测的的状态为已终止) *

* * @author wangpeng diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java new file mode 100644 index 0000000..32fe974 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java @@ -0,0 +1,13 @@ +package com.casic.missiles.enums; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/02/09 16:00 + */ +public interface AssigneeTypeEnum { + //1具体人员 2角色 3部门 + String USER = "1"; + String ROLE = "2"; + String DEPT = "3"; +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 0e2ecd2..18ab69f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; import com.casic.missiles.enums.AssigneeSetTypeEnum; +import com.casic.missiles.enums.AssigneeTypeEnum; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; @@ -92,9 +93,9 @@ JSONObject jsonObject1 = (JSONObject) iterator.next(); String targetId = jsonObject1.getString("targetId"); //1具体人员 2角色 3部门 - if ("1".equals(jsonObject1.getString("type"))) { + if (AssigneeTypeEnum.USER.equals(jsonObject1.getString("type"))) { assigneeList.add(targetId); - } else if ("2".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.ROLE.equals(jsonObject1.getString("type"))) { //按角色查询用户id QueryWrapper ruWrapper = new QueryWrapper<>(); ruWrapper.eq("ROLEID", targetId); @@ -103,7 +104,7 @@ List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); assigneeList.addAll(collect); } - } else if ("3".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id List> list = userMapper.selectUsers(null, null, null, targetId); if (!CollectionUtils.isEmpty(list)) { diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java index 8d70c94..e1efeaf 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java @@ -26,7 +26,7 @@ List selectApprovalList(Page page, @Param("request") FileApprovalListRequest request); - List selectDraftListForApproval(@Param("request") FileApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") FileApprovalListRequest request); - List selectBatchForApproval(@Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java index b5cfc4e..220e097 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java @@ -2,7 +2,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.TraceSupplierApprovalListRequest; +import com.casic.missiles.dto.meter.TraceSupplierApprovalListResponse; import com.casic.missiles.dto.meter.TraceSupplierDetailResponse; import com.casic.missiles.model.meter.MeterTraceSupplier; import org.apache.ibatis.annotations.Param; @@ -23,7 +25,7 @@ TraceSupplierDetailResponse selectTraceSupplierById(@Param("id") Long id); - List selectDraftListForApproval(@Param("request") TraceSupplierApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request); - List selectBatchForApproval(@Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); + List selectBatchForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java index 9bd6254..f2864e8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java @@ -2,8 +2,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.MeterWorkbenchResponse; import com.casic.missiles.dto.meter.TrainPlanApprovalListRequest; +import com.casic.missiles.dto.meter.TrainPlanApprovalListResponse; import com.casic.missiles.dto.meter.TrainPlanDetailResponse; import com.casic.missiles.model.meter.MeterTrainPlan; import org.apache.ibatis.annotations.Param; @@ -26,7 +28,7 @@ List meterTrainStatistic(@Param("startTime")String startTime, @Param("endTime")String endTime); - List selectDraftListForApproval(@Param("request")TrainPlanApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request); - List selectBatchForApproval(@Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java new file mode 100644 index 0000000..9edcda0 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.flowable; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/10 12:27 + */ +@Data +public class AllApproveDTO { + private String businessKey; + private String status; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java index 11420e5..b16ae67 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java @@ -17,6 +17,6 @@ private String processInstanceId; @ApiModelProperty("审批结论/意见") - @NotBlank(message = "审批结论/意见不能为空") +// @NotBlank(message = "审批结论/意见不能为空") private String comments; } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index f5cf538..72c5208 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -29,7 +29,7 @@ * 样品状态(任务收发&任务分发使用,委托书和样品关联表中的状态): * 1:待收入;2:待分发;3:检测中;4:检测完成;5:待归还;6:已归还;7:无需检测;8:已超期 * 实验室检定状态(实验室检测使用,实验室检定信息记录表中的状态): - * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回 + * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回;5:终止(已收入中点击终止更新实验室中待分配和待检测的的状态为已终止) *

* * @author wangpeng diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java new file mode 100644 index 0000000..32fe974 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java @@ -0,0 +1,13 @@ +package com.casic.missiles.enums; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/02/09 16:00 + */ +public interface AssigneeTypeEnum { + //1具体人员 2角色 3部门 + String USER = "1"; + String ROLE = "2"; + String DEPT = "3"; +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 0e2ecd2..18ab69f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; import com.casic.missiles.enums.AssigneeSetTypeEnum; +import com.casic.missiles.enums.AssigneeTypeEnum; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; @@ -92,9 +93,9 @@ JSONObject jsonObject1 = (JSONObject) iterator.next(); String targetId = jsonObject1.getString("targetId"); //1具体人员 2角色 3部门 - if ("1".equals(jsonObject1.getString("type"))) { + if (AssigneeTypeEnum.USER.equals(jsonObject1.getString("type"))) { assigneeList.add(targetId); - } else if ("2".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.ROLE.equals(jsonObject1.getString("type"))) { //按角色查询用户id QueryWrapper ruWrapper = new QueryWrapper<>(); ruWrapper.eq("ROLEID", targetId); @@ -103,7 +104,7 @@ List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); assigneeList.addAll(collect); } - } else if ("3".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id List> list = userMapper.selectUsers(null, null, null, targetId); if (!CollectionUtils.isEmpty(list)) { diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java index 8d70c94..e1efeaf 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java @@ -26,7 +26,7 @@ List selectApprovalList(Page page, @Param("request") FileApprovalListRequest request); - List selectDraftListForApproval(@Param("request") FileApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") FileApprovalListRequest request); - List selectBatchForApproval(@Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java index b5cfc4e..220e097 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java @@ -2,7 +2,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.TraceSupplierApprovalListRequest; +import com.casic.missiles.dto.meter.TraceSupplierApprovalListResponse; import com.casic.missiles.dto.meter.TraceSupplierDetailResponse; import com.casic.missiles.model.meter.MeterTraceSupplier; import org.apache.ibatis.annotations.Param; @@ -23,7 +25,7 @@ TraceSupplierDetailResponse selectTraceSupplierById(@Param("id") Long id); - List selectDraftListForApproval(@Param("request") TraceSupplierApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request); - List selectBatchForApproval(@Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); + List selectBatchForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java index 9bd6254..f2864e8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java @@ -2,8 +2,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.MeterWorkbenchResponse; import com.casic.missiles.dto.meter.TrainPlanApprovalListRequest; +import com.casic.missiles.dto.meter.TrainPlanApprovalListResponse; import com.casic.missiles.dto.meter.TrainPlanDetailResponse; import com.casic.missiles.model.meter.MeterTrainPlan; import org.apache.ibatis.annotations.Param; @@ -26,7 +28,7 @@ List meterTrainStatistic(@Param("startTime")String startTime, @Param("endTime")String endTime); - List selectDraftListForApproval(@Param("request")TrainPlanApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request); - List selectBatchForApproval(@Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java new file mode 100644 index 0000000..9edcda0 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.flowable; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/10 12:27 + */ +@Data +public class AllApproveDTO { + private String businessKey; + private String status; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java index 11420e5..b16ae67 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java @@ -17,6 +17,6 @@ private String processInstanceId; @ApiModelProperty("审批结论/意见") - @NotBlank(message = "审批结论/意见不能为空") +// @NotBlank(message = "审批结论/意见不能为空") private String comments; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java index b32478b..2866e3b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java @@ -1,6 +1,7 @@ package com.casic.missiles.service; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import java.util.List; @@ -25,4 +26,6 @@ List getCanceledList(String formId); List getFailedRejectList(String formId); + + List getAllList(String formId); } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index f5cf538..72c5208 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -29,7 +29,7 @@ * 样品状态(任务收发&任务分发使用,委托书和样品关联表中的状态): * 1:待收入;2:待分发;3:检测中;4:检测完成;5:待归还;6:已归还;7:无需检测;8:已超期 * 实验室检定状态(实验室检测使用,实验室检定信息记录表中的状态): - * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回 + * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回;5:终止(已收入中点击终止更新实验室中待分配和待检测的的状态为已终止) *

* * @author wangpeng diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java new file mode 100644 index 0000000..32fe974 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java @@ -0,0 +1,13 @@ +package com.casic.missiles.enums; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/02/09 16:00 + */ +public interface AssigneeTypeEnum { + //1具体人员 2角色 3部门 + String USER = "1"; + String ROLE = "2"; + String DEPT = "3"; +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 0e2ecd2..18ab69f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; import com.casic.missiles.enums.AssigneeSetTypeEnum; +import com.casic.missiles.enums.AssigneeTypeEnum; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; @@ -92,9 +93,9 @@ JSONObject jsonObject1 = (JSONObject) iterator.next(); String targetId = jsonObject1.getString("targetId"); //1具体人员 2角色 3部门 - if ("1".equals(jsonObject1.getString("type"))) { + if (AssigneeTypeEnum.USER.equals(jsonObject1.getString("type"))) { assigneeList.add(targetId); - } else if ("2".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.ROLE.equals(jsonObject1.getString("type"))) { //按角色查询用户id QueryWrapper ruWrapper = new QueryWrapper<>(); ruWrapper.eq("ROLEID", targetId); @@ -103,7 +104,7 @@ List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); assigneeList.addAll(collect); } - } else if ("3".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id List> list = userMapper.selectUsers(null, null, null, targetId); if (!CollectionUtils.isEmpty(list)) { diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java index 8d70c94..e1efeaf 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java @@ -26,7 +26,7 @@ List selectApprovalList(Page page, @Param("request") FileApprovalListRequest request); - List selectDraftListForApproval(@Param("request") FileApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") FileApprovalListRequest request); - List selectBatchForApproval(@Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java index b5cfc4e..220e097 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java @@ -2,7 +2,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.TraceSupplierApprovalListRequest; +import com.casic.missiles.dto.meter.TraceSupplierApprovalListResponse; import com.casic.missiles.dto.meter.TraceSupplierDetailResponse; import com.casic.missiles.model.meter.MeterTraceSupplier; import org.apache.ibatis.annotations.Param; @@ -23,7 +25,7 @@ TraceSupplierDetailResponse selectTraceSupplierById(@Param("id") Long id); - List selectDraftListForApproval(@Param("request") TraceSupplierApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request); - List selectBatchForApproval(@Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); + List selectBatchForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java index 9bd6254..f2864e8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java @@ -2,8 +2,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.MeterWorkbenchResponse; import com.casic.missiles.dto.meter.TrainPlanApprovalListRequest; +import com.casic.missiles.dto.meter.TrainPlanApprovalListResponse; import com.casic.missiles.dto.meter.TrainPlanDetailResponse; import com.casic.missiles.model.meter.MeterTrainPlan; import org.apache.ibatis.annotations.Param; @@ -26,7 +28,7 @@ List meterTrainStatistic(@Param("startTime")String startTime, @Param("endTime")String endTime); - List selectDraftListForApproval(@Param("request")TrainPlanApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request); - List selectBatchForApproval(@Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java new file mode 100644 index 0000000..9edcda0 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.flowable; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/10 12:27 + */ +@Data +public class AllApproveDTO { + private String businessKey; + private String status; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java index 11420e5..b16ae67 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java @@ -17,6 +17,6 @@ private String processInstanceId; @ApiModelProperty("审批结论/意见") - @NotBlank(message = "审批结论/意见不能为空") +// @NotBlank(message = "审批结论/意见不能为空") private String comments; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java index b32478b..2866e3b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java @@ -1,6 +1,7 @@ package com.casic.missiles.service; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import java.util.List; @@ -25,4 +26,6 @@ List getCanceledList(String formId); List getFailedRejectList(String formId); + + List getAllList(String formId); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java index 447f9a1..7cca60a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -55,19 +56,17 @@ @Transactional public ReturnDTO processSubmit(String formId, Long id){ - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("该表单不存在对应的流程定义,formId:{}", formId); return ReturnUtil.failed("流程提交处理失败,该表单不存在对应的流程定义,请重新提交"); } //流程发起人 - /*AuthUser user = ShiroKit.getUser(); + AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); - });*/ - Authentication.setAuthenticatedUserId(String.valueOf(0)); + }); + Authentication.setAuthenticatedUserId(String.valueOf(user.getId())); //根据流程key(SystemFlowForm中的procDefId)获取流程id ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(flowForm.getProcDefId()).latestVersion().singleResult(); @@ -99,9 +98,7 @@ public List getCanceledList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询已取消的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -109,27 +106,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据业务状态、流程定义查询该业务所有已取消的流程实例-拒绝 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .deleted() //拒绝的要执行删除操作,也要设置业务状态,此处可同时设置为条件进行查询 - .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) //对应取消按钮中设置的业务状态 - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getCanceledProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务已取消的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getCanceledProcessInstancesForStarted(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -137,9 +120,7 @@ public List getFailedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询未通过的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -147,44 +128,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(true){ - //根据业务状态、流程定义查询该业务所有未通过的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) -// .deleted() //拒绝的审批流程要执行删除操作,也要设置业务状态,所以使用下行的状态可满足拒绝的查询 - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) //todo:拒绝按钮已增加业务状态,需验证不加deleted查询的是未删除的还是所有的 - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .finished() //审批者已完成审批 - .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询未通过的流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(task.getProcessInstanceId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) - .singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -193,9 +143,7 @@ @Override public List getFailedRejectList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询未通过-驳回的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -203,52 +151,20 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据业务状态、流程定义查询该业务所有未通过的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED_REJECT); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .finished() //审批者已完成审批 - .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询未通过的流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(task.getProcessInstanceId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED_REJECT); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; } public List getPassedList(String formId) { - //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询已通过的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -256,43 +172,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据流程定义查询该业务所有已完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .finished() - .notDeleted() - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getPassedProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据流程定义、登录用户id查询该业务已完成的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .finished() - .notDeleted() - .startedBy(String.valueOf(user.getId())) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据流程定义、登录用户id获取该业务流程的实例结束的已办任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .processFinished() //todo:此参数若表示实例已完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .notDeleted() - .processInstanceId(task.getProcessInstanceId()).singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getPassedProcessInstancesForStartedAndAssignee(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -300,9 +186,7 @@ public List getInApprovedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询审批中的任务,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -310,32 +194,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据流程定义查询该业务所有未完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) //这里使用流程定义,因为更新流程定义不会更新定义id,会更新部署id -// .deploymentId(flowForm.getDeployId()) - .or() - .unfinished() - .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 - .endOr() - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getInApprovedProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据流程定义、登录用户id查询该业务未完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .or() - .unfinished() - .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 - .endOr() - .startedBy(String.valueOf(user.getId())) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getInApprovedProcessInstancesForStarted(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -343,9 +208,7 @@ public List getToBeApprovedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询待审批的任务,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -380,6 +243,219 @@ //返回任务id和关联业务主键id return toBeApprovedDTOs; + } + @Override + public List getAllList(String formId) { + SystemFlowForm flowForm = getSystemFlowForm(formId); + if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { + log.error("查询全部的流程,该表单不存在对应的流程定义,formId:{}", formId); + return new ArrayList<>(); + } + List list = new ArrayList<>(); + //管理员or其他用户 + if(ShiroKit.isAdmin()){ + //审批中实例 + getInApprovedProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.IN_APPROVED); + }); + //已通过实例 + getPassedProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.PASSED); + });; + //未通过-拒绝实例 + getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED_REJECT).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED_REJECT); + }); + //未通过实例 + getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED); + }); + //已取消实例 + getCanceledProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.CANCELED); + }); + }else{ + AuthUser user = ShiroKit.getUser(); + Assert.isFalse(Objects.isNull(user), () -> { + throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); + }); + //审批中实例 + getInApprovedProcessInstancesForStarted(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.IN_APPROVED); + }); + //已通过实例 + getPassedProcessInstancesForStartedAndAssignee(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.PASSED); + }); + //未通过-拒绝实例 + getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED_REJECT).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED_REJECT); + }); + //未通过实例 + getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED); + }); + //已取消实例 + getCanceledProcessInstancesForStarted(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.CANCELED); + }); + } + return list; + } + + private void enrichList(List list, HistoricProcessInstance instance, String status) { + AllApproveDTO allApproveDTO = new AllApproveDTO(); + allApproveDTO.setBusinessKey(instance.getBusinessKey()); + allApproveDTO.setStatus(status); + list.add(allApproveDTO); + } + + private SystemFlowForm getSystemFlowForm(String formId) { + //根据业务表单id获取流程定义 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("form_id", formId); + return flowFormService.getOne(wrapper); + } + + private List getPassedProcessInstancesForStartedAndAssignee(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances; + //根据流程定义、登录用户id查询该业务已完成的流程实例(作为发起者) + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .finished() + .notDeleted() + .startedBy(String.valueOf(user.getId())) + .orderByProcessInstanceStartTime().desc() + .list(); + //根据流程定义、登录用户id获取该业务流程的实例结束的已办任务(作为审批者) + List tasks = historyService.createHistoricTaskInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .taskAssignee(String.valueOf(user.getId())) + .processFinished() //todo:此参数若表示实例已完成,则这里使用正确,需验证 + .orderByTaskCreateTime().desc() + .list(); + //根据作为审批者的任务查询流程实例 + for (HistoricTaskInstance task : tasks) { + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .notDeleted() + .processInstanceId(task.getProcessInstanceId()).singleResult(); + historicProcessInstances.add(historicProcessInstance); + } + return historicProcessInstances; + } + + private List getInApprovedProcessInstances(SystemFlowForm flowForm) { + List historicProcessInstances; + //根据流程定义查询该业务所有未完成的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) //这里使用流程定义,因为更新流程定义不会更新定义id,会更新部署id +// .deploymentId(flowForm.getDeployId()) + .or() + .unfinished() + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getInApprovedProcessInstancesForStarted(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances; + //根据流程定义、登录用户id查询该业务未完成的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .or() + .unfinished() + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() + .startedBy(String.valueOf(user.getId())) + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getPassedProcessInstances(SystemFlowForm flowForm) { + //根据流程定义查询该业务所有已完成的流程实例 + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .finished() + .notDeleted() + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getFailedProcessInstances(SystemFlowForm flowForm, String failStatus) { + //根据业务状态、流程定义查询该业务所有未通过的流程实例 + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) +// .deleted() //拒绝的审批流程要执行删除操作,也要设置业务状态,所以使用下行的状态可满足拒绝的查询 + .processInstanceBusinessStatus(failStatus) //todo:拒绝按钮已增加业务状态,需验证不加deleted查询的是未删除的还是所有的 + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getFailedProcessInstancesForStartedAndAssignee(SystemFlowForm flowForm, AuthUser user, String failStatus) { + //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .startedBy(String.valueOf(user.getId())) + .processInstanceBusinessStatus(failStatus) + .orderByProcessInstanceStartTime().desc() + .list(); + //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) + List tasks = historyService.createHistoricTaskInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .taskAssignee(String.valueOf(user.getId())) + .finished() //审批者已完成审批 + .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 + .orderByTaskCreateTime().desc() + .list(); + //根据作为审批者的任务查询未通过的流程实例 + for (HistoricTaskInstance task : tasks) { + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(task.getProcessInstanceId()) + .processInstanceBusinessStatus(failStatus) + .singleResult(); + historicProcessInstances.add(historicProcessInstance); + } + return historicProcessInstances; + } + + private List getCanceledProcessInstancesForStarted(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances;//根据业务状态、流程定义、登录用户id查询该业务已取消的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .startedBy(String.valueOf(user.getId())) + .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getCanceledProcessInstances(SystemFlowForm flowForm) { + List historicProcessInstances; + //根据业务状态、流程定义查询该业务所有已取消的流程实例-拒绝 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .deleted() //取消的要执行删除操作,也要设置业务状态,此处可同时设置为条件进行查询 + .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) //对应取消按钮中设置的业务状态 + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; } } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index f5cf538..72c5208 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -29,7 +29,7 @@ * 样品状态(任务收发&任务分发使用,委托书和样品关联表中的状态): * 1:待收入;2:待分发;3:检测中;4:检测完成;5:待归还;6:已归还;7:无需检测;8:已超期 * 实验室检定状态(实验室检测使用,实验室检定信息记录表中的状态): - * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回 + * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回;5:终止(已收入中点击终止更新实验室中待分配和待检测的的状态为已终止) *

* * @author wangpeng diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java new file mode 100644 index 0000000..32fe974 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java @@ -0,0 +1,13 @@ +package com.casic.missiles.enums; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/02/09 16:00 + */ +public interface AssigneeTypeEnum { + //1具体人员 2角色 3部门 + String USER = "1"; + String ROLE = "2"; + String DEPT = "3"; +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 0e2ecd2..18ab69f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; import com.casic.missiles.enums.AssigneeSetTypeEnum; +import com.casic.missiles.enums.AssigneeTypeEnum; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; @@ -92,9 +93,9 @@ JSONObject jsonObject1 = (JSONObject) iterator.next(); String targetId = jsonObject1.getString("targetId"); //1具体人员 2角色 3部门 - if ("1".equals(jsonObject1.getString("type"))) { + if (AssigneeTypeEnum.USER.equals(jsonObject1.getString("type"))) { assigneeList.add(targetId); - } else if ("2".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.ROLE.equals(jsonObject1.getString("type"))) { //按角色查询用户id QueryWrapper ruWrapper = new QueryWrapper<>(); ruWrapper.eq("ROLEID", targetId); @@ -103,7 +104,7 @@ List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); assigneeList.addAll(collect); } - } else if ("3".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id List> list = userMapper.selectUsers(null, null, null, targetId); if (!CollectionUtils.isEmpty(list)) { diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java index 8d70c94..e1efeaf 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java @@ -26,7 +26,7 @@ List selectApprovalList(Page page, @Param("request") FileApprovalListRequest request); - List selectDraftListForApproval(@Param("request") FileApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") FileApprovalListRequest request); - List selectBatchForApproval(@Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java index b5cfc4e..220e097 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java @@ -2,7 +2,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.TraceSupplierApprovalListRequest; +import com.casic.missiles.dto.meter.TraceSupplierApprovalListResponse; import com.casic.missiles.dto.meter.TraceSupplierDetailResponse; import com.casic.missiles.model.meter.MeterTraceSupplier; import org.apache.ibatis.annotations.Param; @@ -23,7 +25,7 @@ TraceSupplierDetailResponse selectTraceSupplierById(@Param("id") Long id); - List selectDraftListForApproval(@Param("request") TraceSupplierApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request); - List selectBatchForApproval(@Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); + List selectBatchForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java index 9bd6254..f2864e8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java @@ -2,8 +2,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.MeterWorkbenchResponse; import com.casic.missiles.dto.meter.TrainPlanApprovalListRequest; +import com.casic.missiles.dto.meter.TrainPlanApprovalListResponse; import com.casic.missiles.dto.meter.TrainPlanDetailResponse; import com.casic.missiles.model.meter.MeterTrainPlan; import org.apache.ibatis.annotations.Param; @@ -26,7 +28,7 @@ List meterTrainStatistic(@Param("startTime")String startTime, @Param("endTime")String endTime); - List selectDraftListForApproval(@Param("request")TrainPlanApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request); - List selectBatchForApproval(@Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java new file mode 100644 index 0000000..9edcda0 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.flowable; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/10 12:27 + */ +@Data +public class AllApproveDTO { + private String businessKey; + private String status; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java index 11420e5..b16ae67 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java @@ -17,6 +17,6 @@ private String processInstanceId; @ApiModelProperty("审批结论/意见") - @NotBlank(message = "审批结论/意见不能为空") +// @NotBlank(message = "审批结论/意见不能为空") private String comments; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java index b32478b..2866e3b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java @@ -1,6 +1,7 @@ package com.casic.missiles.service; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import java.util.List; @@ -25,4 +26,6 @@ List getCanceledList(String formId); List getFailedRejectList(String formId); + + List getAllList(String formId); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java index 447f9a1..7cca60a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -55,19 +56,17 @@ @Transactional public ReturnDTO processSubmit(String formId, Long id){ - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("该表单不存在对应的流程定义,formId:{}", formId); return ReturnUtil.failed("流程提交处理失败,该表单不存在对应的流程定义,请重新提交"); } //流程发起人 - /*AuthUser user = ShiroKit.getUser(); + AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); - });*/ - Authentication.setAuthenticatedUserId(String.valueOf(0)); + }); + Authentication.setAuthenticatedUserId(String.valueOf(user.getId())); //根据流程key(SystemFlowForm中的procDefId)获取流程id ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(flowForm.getProcDefId()).latestVersion().singleResult(); @@ -99,9 +98,7 @@ public List getCanceledList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询已取消的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -109,27 +106,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据业务状态、流程定义查询该业务所有已取消的流程实例-拒绝 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .deleted() //拒绝的要执行删除操作,也要设置业务状态,此处可同时设置为条件进行查询 - .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) //对应取消按钮中设置的业务状态 - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getCanceledProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务已取消的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getCanceledProcessInstancesForStarted(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -137,9 +120,7 @@ public List getFailedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询未通过的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -147,44 +128,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(true){ - //根据业务状态、流程定义查询该业务所有未通过的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) -// .deleted() //拒绝的审批流程要执行删除操作,也要设置业务状态,所以使用下行的状态可满足拒绝的查询 - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) //todo:拒绝按钮已增加业务状态,需验证不加deleted查询的是未删除的还是所有的 - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .finished() //审批者已完成审批 - .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询未通过的流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(task.getProcessInstanceId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) - .singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -193,9 +143,7 @@ @Override public List getFailedRejectList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询未通过-驳回的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -203,52 +151,20 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据业务状态、流程定义查询该业务所有未通过的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED_REJECT); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .finished() //审批者已完成审批 - .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询未通过的流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(task.getProcessInstanceId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED_REJECT); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; } public List getPassedList(String formId) { - //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询已通过的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -256,43 +172,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据流程定义查询该业务所有已完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .finished() - .notDeleted() - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getPassedProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据流程定义、登录用户id查询该业务已完成的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .finished() - .notDeleted() - .startedBy(String.valueOf(user.getId())) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据流程定义、登录用户id获取该业务流程的实例结束的已办任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .processFinished() //todo:此参数若表示实例已完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .notDeleted() - .processInstanceId(task.getProcessInstanceId()).singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getPassedProcessInstancesForStartedAndAssignee(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -300,9 +186,7 @@ public List getInApprovedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询审批中的任务,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -310,32 +194,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据流程定义查询该业务所有未完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) //这里使用流程定义,因为更新流程定义不会更新定义id,会更新部署id -// .deploymentId(flowForm.getDeployId()) - .or() - .unfinished() - .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 - .endOr() - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getInApprovedProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据流程定义、登录用户id查询该业务未完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .or() - .unfinished() - .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 - .endOr() - .startedBy(String.valueOf(user.getId())) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getInApprovedProcessInstancesForStarted(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -343,9 +208,7 @@ public List getToBeApprovedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询待审批的任务,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -380,6 +243,219 @@ //返回任务id和关联业务主键id return toBeApprovedDTOs; + } + @Override + public List getAllList(String formId) { + SystemFlowForm flowForm = getSystemFlowForm(formId); + if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { + log.error("查询全部的流程,该表单不存在对应的流程定义,formId:{}", formId); + return new ArrayList<>(); + } + List list = new ArrayList<>(); + //管理员or其他用户 + if(ShiroKit.isAdmin()){ + //审批中实例 + getInApprovedProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.IN_APPROVED); + }); + //已通过实例 + getPassedProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.PASSED); + });; + //未通过-拒绝实例 + getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED_REJECT).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED_REJECT); + }); + //未通过实例 + getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED); + }); + //已取消实例 + getCanceledProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.CANCELED); + }); + }else{ + AuthUser user = ShiroKit.getUser(); + Assert.isFalse(Objects.isNull(user), () -> { + throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); + }); + //审批中实例 + getInApprovedProcessInstancesForStarted(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.IN_APPROVED); + }); + //已通过实例 + getPassedProcessInstancesForStartedAndAssignee(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.PASSED); + }); + //未通过-拒绝实例 + getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED_REJECT).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED_REJECT); + }); + //未通过实例 + getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED); + }); + //已取消实例 + getCanceledProcessInstancesForStarted(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.CANCELED); + }); + } + return list; + } + + private void enrichList(List list, HistoricProcessInstance instance, String status) { + AllApproveDTO allApproveDTO = new AllApproveDTO(); + allApproveDTO.setBusinessKey(instance.getBusinessKey()); + allApproveDTO.setStatus(status); + list.add(allApproveDTO); + } + + private SystemFlowForm getSystemFlowForm(String formId) { + //根据业务表单id获取流程定义 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("form_id", formId); + return flowFormService.getOne(wrapper); + } + + private List getPassedProcessInstancesForStartedAndAssignee(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances; + //根据流程定义、登录用户id查询该业务已完成的流程实例(作为发起者) + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .finished() + .notDeleted() + .startedBy(String.valueOf(user.getId())) + .orderByProcessInstanceStartTime().desc() + .list(); + //根据流程定义、登录用户id获取该业务流程的实例结束的已办任务(作为审批者) + List tasks = historyService.createHistoricTaskInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .taskAssignee(String.valueOf(user.getId())) + .processFinished() //todo:此参数若表示实例已完成,则这里使用正确,需验证 + .orderByTaskCreateTime().desc() + .list(); + //根据作为审批者的任务查询流程实例 + for (HistoricTaskInstance task : tasks) { + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .notDeleted() + .processInstanceId(task.getProcessInstanceId()).singleResult(); + historicProcessInstances.add(historicProcessInstance); + } + return historicProcessInstances; + } + + private List getInApprovedProcessInstances(SystemFlowForm flowForm) { + List historicProcessInstances; + //根据流程定义查询该业务所有未完成的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) //这里使用流程定义,因为更新流程定义不会更新定义id,会更新部署id +// .deploymentId(flowForm.getDeployId()) + .or() + .unfinished() + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getInApprovedProcessInstancesForStarted(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances; + //根据流程定义、登录用户id查询该业务未完成的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .or() + .unfinished() + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() + .startedBy(String.valueOf(user.getId())) + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getPassedProcessInstances(SystemFlowForm flowForm) { + //根据流程定义查询该业务所有已完成的流程实例 + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .finished() + .notDeleted() + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getFailedProcessInstances(SystemFlowForm flowForm, String failStatus) { + //根据业务状态、流程定义查询该业务所有未通过的流程实例 + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) +// .deleted() //拒绝的审批流程要执行删除操作,也要设置业务状态,所以使用下行的状态可满足拒绝的查询 + .processInstanceBusinessStatus(failStatus) //todo:拒绝按钮已增加业务状态,需验证不加deleted查询的是未删除的还是所有的 + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getFailedProcessInstancesForStartedAndAssignee(SystemFlowForm flowForm, AuthUser user, String failStatus) { + //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .startedBy(String.valueOf(user.getId())) + .processInstanceBusinessStatus(failStatus) + .orderByProcessInstanceStartTime().desc() + .list(); + //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) + List tasks = historyService.createHistoricTaskInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .taskAssignee(String.valueOf(user.getId())) + .finished() //审批者已完成审批 + .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 + .orderByTaskCreateTime().desc() + .list(); + //根据作为审批者的任务查询未通过的流程实例 + for (HistoricTaskInstance task : tasks) { + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(task.getProcessInstanceId()) + .processInstanceBusinessStatus(failStatus) + .singleResult(); + historicProcessInstances.add(historicProcessInstance); + } + return historicProcessInstances; + } + + private List getCanceledProcessInstancesForStarted(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances;//根据业务状态、流程定义、登录用户id查询该业务已取消的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .startedBy(String.valueOf(user.getId())) + .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getCanceledProcessInstances(SystemFlowForm flowForm) { + List historicProcessInstances; + //根据业务状态、流程定义查询该业务所有已取消的流程实例-拒绝 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .deleted() //取消的要执行删除操作,也要设置业务状态,此处可同时设置为条件进行查询 + .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) //对应取消按钮中设置的业务状态 + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java index bef098c..23a2913 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java @@ -1,6 +1,5 @@ package com.casic.missiles.service.Impl.equipment; -import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.service.IBaseExportService; @@ -10,6 +9,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.AcceptanceCheck; import com.casic.missiles.dto.equipment.AcceptanceCheckRequest; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.EquipmentApplyTypeEnum; @@ -34,10 +34,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentAcceptanceCheckService") @@ -99,8 +96,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -130,8 +132,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ equipmentApply.setTaskId(taskMap.get(equipmentApply.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + equipmentApply.setApprovalStatus(taskMap.get(String.valueOf(equipmentApply.getId()))); + } DictCodeUtils.convertDictCodeToName(equipmentApply); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(AcceptanceCheck::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index f5cf538..72c5208 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -29,7 +29,7 @@ * 样品状态(任务收发&任务分发使用,委托书和样品关联表中的状态): * 1:待收入;2:待分发;3:检测中;4:检测完成;5:待归还;6:已归还;7:无需检测;8:已超期 * 实验室检定状态(实验室检测使用,实验室检定信息记录表中的状态): - * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回 + * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回;5:终止(已收入中点击终止更新实验室中待分配和待检测的的状态为已终止) *

* * @author wangpeng diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java new file mode 100644 index 0000000..32fe974 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java @@ -0,0 +1,13 @@ +package com.casic.missiles.enums; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/02/09 16:00 + */ +public interface AssigneeTypeEnum { + //1具体人员 2角色 3部门 + String USER = "1"; + String ROLE = "2"; + String DEPT = "3"; +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 0e2ecd2..18ab69f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; import com.casic.missiles.enums.AssigneeSetTypeEnum; +import com.casic.missiles.enums.AssigneeTypeEnum; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; @@ -92,9 +93,9 @@ JSONObject jsonObject1 = (JSONObject) iterator.next(); String targetId = jsonObject1.getString("targetId"); //1具体人员 2角色 3部门 - if ("1".equals(jsonObject1.getString("type"))) { + if (AssigneeTypeEnum.USER.equals(jsonObject1.getString("type"))) { assigneeList.add(targetId); - } else if ("2".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.ROLE.equals(jsonObject1.getString("type"))) { //按角色查询用户id QueryWrapper ruWrapper = new QueryWrapper<>(); ruWrapper.eq("ROLEID", targetId); @@ -103,7 +104,7 @@ List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); assigneeList.addAll(collect); } - } else if ("3".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id List> list = userMapper.selectUsers(null, null, null, targetId); if (!CollectionUtils.isEmpty(list)) { diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java index 8d70c94..e1efeaf 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java @@ -26,7 +26,7 @@ List selectApprovalList(Page page, @Param("request") FileApprovalListRequest request); - List selectDraftListForApproval(@Param("request") FileApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") FileApprovalListRequest request); - List selectBatchForApproval(@Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java index b5cfc4e..220e097 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java @@ -2,7 +2,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.TraceSupplierApprovalListRequest; +import com.casic.missiles.dto.meter.TraceSupplierApprovalListResponse; import com.casic.missiles.dto.meter.TraceSupplierDetailResponse; import com.casic.missiles.model.meter.MeterTraceSupplier; import org.apache.ibatis.annotations.Param; @@ -23,7 +25,7 @@ TraceSupplierDetailResponse selectTraceSupplierById(@Param("id") Long id); - List selectDraftListForApproval(@Param("request") TraceSupplierApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request); - List selectBatchForApproval(@Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); + List selectBatchForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java index 9bd6254..f2864e8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java @@ -2,8 +2,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.MeterWorkbenchResponse; import com.casic.missiles.dto.meter.TrainPlanApprovalListRequest; +import com.casic.missiles.dto.meter.TrainPlanApprovalListResponse; import com.casic.missiles.dto.meter.TrainPlanDetailResponse; import com.casic.missiles.model.meter.MeterTrainPlan; import org.apache.ibatis.annotations.Param; @@ -26,7 +28,7 @@ List meterTrainStatistic(@Param("startTime")String startTime, @Param("endTime")String endTime); - List selectDraftListForApproval(@Param("request")TrainPlanApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request); - List selectBatchForApproval(@Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java new file mode 100644 index 0000000..9edcda0 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.flowable; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/10 12:27 + */ +@Data +public class AllApproveDTO { + private String businessKey; + private String status; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java index 11420e5..b16ae67 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java @@ -17,6 +17,6 @@ private String processInstanceId; @ApiModelProperty("审批结论/意见") - @NotBlank(message = "审批结论/意见不能为空") +// @NotBlank(message = "审批结论/意见不能为空") private String comments; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java index b32478b..2866e3b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java @@ -1,6 +1,7 @@ package com.casic.missiles.service; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import java.util.List; @@ -25,4 +26,6 @@ List getCanceledList(String formId); List getFailedRejectList(String formId); + + List getAllList(String formId); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java index 447f9a1..7cca60a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -55,19 +56,17 @@ @Transactional public ReturnDTO processSubmit(String formId, Long id){ - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("该表单不存在对应的流程定义,formId:{}", formId); return ReturnUtil.failed("流程提交处理失败,该表单不存在对应的流程定义,请重新提交"); } //流程发起人 - /*AuthUser user = ShiroKit.getUser(); + AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); - });*/ - Authentication.setAuthenticatedUserId(String.valueOf(0)); + }); + Authentication.setAuthenticatedUserId(String.valueOf(user.getId())); //根据流程key(SystemFlowForm中的procDefId)获取流程id ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(flowForm.getProcDefId()).latestVersion().singleResult(); @@ -99,9 +98,7 @@ public List getCanceledList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询已取消的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -109,27 +106,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据业务状态、流程定义查询该业务所有已取消的流程实例-拒绝 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .deleted() //拒绝的要执行删除操作,也要设置业务状态,此处可同时设置为条件进行查询 - .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) //对应取消按钮中设置的业务状态 - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getCanceledProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务已取消的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getCanceledProcessInstancesForStarted(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -137,9 +120,7 @@ public List getFailedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询未通过的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -147,44 +128,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(true){ - //根据业务状态、流程定义查询该业务所有未通过的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) -// .deleted() //拒绝的审批流程要执行删除操作,也要设置业务状态,所以使用下行的状态可满足拒绝的查询 - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) //todo:拒绝按钮已增加业务状态,需验证不加deleted查询的是未删除的还是所有的 - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .finished() //审批者已完成审批 - .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询未通过的流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(task.getProcessInstanceId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) - .singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -193,9 +143,7 @@ @Override public List getFailedRejectList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询未通过-驳回的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -203,52 +151,20 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据业务状态、流程定义查询该业务所有未通过的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED_REJECT); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .finished() //审批者已完成审批 - .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询未通过的流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(task.getProcessInstanceId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED_REJECT); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; } public List getPassedList(String formId) { - //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询已通过的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -256,43 +172,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据流程定义查询该业务所有已完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .finished() - .notDeleted() - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getPassedProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据流程定义、登录用户id查询该业务已完成的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .finished() - .notDeleted() - .startedBy(String.valueOf(user.getId())) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据流程定义、登录用户id获取该业务流程的实例结束的已办任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .processFinished() //todo:此参数若表示实例已完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .notDeleted() - .processInstanceId(task.getProcessInstanceId()).singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getPassedProcessInstancesForStartedAndAssignee(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -300,9 +186,7 @@ public List getInApprovedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询审批中的任务,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -310,32 +194,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据流程定义查询该业务所有未完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) //这里使用流程定义,因为更新流程定义不会更新定义id,会更新部署id -// .deploymentId(flowForm.getDeployId()) - .or() - .unfinished() - .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 - .endOr() - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getInApprovedProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据流程定义、登录用户id查询该业务未完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .or() - .unfinished() - .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 - .endOr() - .startedBy(String.valueOf(user.getId())) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getInApprovedProcessInstancesForStarted(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -343,9 +208,7 @@ public List getToBeApprovedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询待审批的任务,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -380,6 +243,219 @@ //返回任务id和关联业务主键id return toBeApprovedDTOs; + } + @Override + public List getAllList(String formId) { + SystemFlowForm flowForm = getSystemFlowForm(formId); + if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { + log.error("查询全部的流程,该表单不存在对应的流程定义,formId:{}", formId); + return new ArrayList<>(); + } + List list = new ArrayList<>(); + //管理员or其他用户 + if(ShiroKit.isAdmin()){ + //审批中实例 + getInApprovedProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.IN_APPROVED); + }); + //已通过实例 + getPassedProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.PASSED); + });; + //未通过-拒绝实例 + getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED_REJECT).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED_REJECT); + }); + //未通过实例 + getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED); + }); + //已取消实例 + getCanceledProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.CANCELED); + }); + }else{ + AuthUser user = ShiroKit.getUser(); + Assert.isFalse(Objects.isNull(user), () -> { + throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); + }); + //审批中实例 + getInApprovedProcessInstancesForStarted(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.IN_APPROVED); + }); + //已通过实例 + getPassedProcessInstancesForStartedAndAssignee(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.PASSED); + }); + //未通过-拒绝实例 + getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED_REJECT).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED_REJECT); + }); + //未通过实例 + getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED); + }); + //已取消实例 + getCanceledProcessInstancesForStarted(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.CANCELED); + }); + } + return list; + } + + private void enrichList(List list, HistoricProcessInstance instance, String status) { + AllApproveDTO allApproveDTO = new AllApproveDTO(); + allApproveDTO.setBusinessKey(instance.getBusinessKey()); + allApproveDTO.setStatus(status); + list.add(allApproveDTO); + } + + private SystemFlowForm getSystemFlowForm(String formId) { + //根据业务表单id获取流程定义 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("form_id", formId); + return flowFormService.getOne(wrapper); + } + + private List getPassedProcessInstancesForStartedAndAssignee(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances; + //根据流程定义、登录用户id查询该业务已完成的流程实例(作为发起者) + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .finished() + .notDeleted() + .startedBy(String.valueOf(user.getId())) + .orderByProcessInstanceStartTime().desc() + .list(); + //根据流程定义、登录用户id获取该业务流程的实例结束的已办任务(作为审批者) + List tasks = historyService.createHistoricTaskInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .taskAssignee(String.valueOf(user.getId())) + .processFinished() //todo:此参数若表示实例已完成,则这里使用正确,需验证 + .orderByTaskCreateTime().desc() + .list(); + //根据作为审批者的任务查询流程实例 + for (HistoricTaskInstance task : tasks) { + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .notDeleted() + .processInstanceId(task.getProcessInstanceId()).singleResult(); + historicProcessInstances.add(historicProcessInstance); + } + return historicProcessInstances; + } + + private List getInApprovedProcessInstances(SystemFlowForm flowForm) { + List historicProcessInstances; + //根据流程定义查询该业务所有未完成的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) //这里使用流程定义,因为更新流程定义不会更新定义id,会更新部署id +// .deploymentId(flowForm.getDeployId()) + .or() + .unfinished() + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getInApprovedProcessInstancesForStarted(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances; + //根据流程定义、登录用户id查询该业务未完成的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .or() + .unfinished() + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() + .startedBy(String.valueOf(user.getId())) + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getPassedProcessInstances(SystemFlowForm flowForm) { + //根据流程定义查询该业务所有已完成的流程实例 + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .finished() + .notDeleted() + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getFailedProcessInstances(SystemFlowForm flowForm, String failStatus) { + //根据业务状态、流程定义查询该业务所有未通过的流程实例 + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) +// .deleted() //拒绝的审批流程要执行删除操作,也要设置业务状态,所以使用下行的状态可满足拒绝的查询 + .processInstanceBusinessStatus(failStatus) //todo:拒绝按钮已增加业务状态,需验证不加deleted查询的是未删除的还是所有的 + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getFailedProcessInstancesForStartedAndAssignee(SystemFlowForm flowForm, AuthUser user, String failStatus) { + //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .startedBy(String.valueOf(user.getId())) + .processInstanceBusinessStatus(failStatus) + .orderByProcessInstanceStartTime().desc() + .list(); + //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) + List tasks = historyService.createHistoricTaskInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .taskAssignee(String.valueOf(user.getId())) + .finished() //审批者已完成审批 + .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 + .orderByTaskCreateTime().desc() + .list(); + //根据作为审批者的任务查询未通过的流程实例 + for (HistoricTaskInstance task : tasks) { + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(task.getProcessInstanceId()) + .processInstanceBusinessStatus(failStatus) + .singleResult(); + historicProcessInstances.add(historicProcessInstance); + } + return historicProcessInstances; + } + + private List getCanceledProcessInstancesForStarted(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances;//根据业务状态、流程定义、登录用户id查询该业务已取消的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .startedBy(String.valueOf(user.getId())) + .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getCanceledProcessInstances(SystemFlowForm flowForm) { + List historicProcessInstances; + //根据业务状态、流程定义查询该业务所有已取消的流程实例-拒绝 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .deleted() //取消的要执行删除操作,也要设置业务状态,此处可同时设置为条件进行查询 + .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) //对应取消按钮中设置的业务状态 + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java index bef098c..23a2913 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java @@ -1,6 +1,5 @@ package com.casic.missiles.service.Impl.equipment; -import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.service.IBaseExportService; @@ -10,6 +9,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.AcceptanceCheck; import com.casic.missiles.dto.equipment.AcceptanceCheckRequest; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.EquipmentApplyTypeEnum; @@ -34,10 +34,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentAcceptanceCheckService") @@ -99,8 +96,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -130,8 +132,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ equipmentApply.setTaskId(taskMap.get(equipmentApply.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + equipmentApply.setApprovalStatus(taskMap.get(String.valueOf(equipmentApply.getId()))); + } DictCodeUtils.convertDictCodeToName(equipmentApply); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(AcceptanceCheck::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java index 5f08d09..57bb3a9 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java @@ -10,10 +10,11 @@ import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentApplyProcessRequest; import com.casic.missiles.dto.equipment.EquipmentApplyRequest; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; -import com.casic.missiles.dto.equipment.EquipmentApplyProcessRequest; import com.casic.missiles.enums.*; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.equipment.EquipmentApplyEquipmentMapper; @@ -24,10 +25,10 @@ import com.casic.missiles.model.equipment.EquipmentFixedAssets; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.service.IBaseApprovalService; -import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.service.equipment.IEquipmentApplyEquipmentService; import com.casic.missiles.service.equipment.IEquipmentApplyFileService; import com.casic.missiles.service.equipment.IEquipmentApplyService; +import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import org.apache.commons.lang3.StringUtils; @@ -37,10 +38,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentApplyService") @@ -94,8 +92,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -122,8 +125,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ equipmentApply.setTaskId(taskMap.get(equipmentApply.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + equipmentApply.setApprovalStatus(taskMap.get(String.valueOf(equipmentApply.getId()))); + } DictCodeUtils.convertDictCodeToName(equipmentApply); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(EquipmentApply::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index f5cf538..72c5208 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -29,7 +29,7 @@ * 样品状态(任务收发&任务分发使用,委托书和样品关联表中的状态): * 1:待收入;2:待分发;3:检测中;4:检测完成;5:待归还;6:已归还;7:无需检测;8:已超期 * 实验室检定状态(实验室检测使用,实验室检定信息记录表中的状态): - * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回 + * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回;5:终止(已收入中点击终止更新实验室中待分配和待检测的的状态为已终止) *

* * @author wangpeng diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java new file mode 100644 index 0000000..32fe974 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java @@ -0,0 +1,13 @@ +package com.casic.missiles.enums; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/02/09 16:00 + */ +public interface AssigneeTypeEnum { + //1具体人员 2角色 3部门 + String USER = "1"; + String ROLE = "2"; + String DEPT = "3"; +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 0e2ecd2..18ab69f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; import com.casic.missiles.enums.AssigneeSetTypeEnum; +import com.casic.missiles.enums.AssigneeTypeEnum; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; @@ -92,9 +93,9 @@ JSONObject jsonObject1 = (JSONObject) iterator.next(); String targetId = jsonObject1.getString("targetId"); //1具体人员 2角色 3部门 - if ("1".equals(jsonObject1.getString("type"))) { + if (AssigneeTypeEnum.USER.equals(jsonObject1.getString("type"))) { assigneeList.add(targetId); - } else if ("2".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.ROLE.equals(jsonObject1.getString("type"))) { //按角色查询用户id QueryWrapper ruWrapper = new QueryWrapper<>(); ruWrapper.eq("ROLEID", targetId); @@ -103,7 +104,7 @@ List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); assigneeList.addAll(collect); } - } else if ("3".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id List> list = userMapper.selectUsers(null, null, null, targetId); if (!CollectionUtils.isEmpty(list)) { diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java index 8d70c94..e1efeaf 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java @@ -26,7 +26,7 @@ List selectApprovalList(Page page, @Param("request") FileApprovalListRequest request); - List selectDraftListForApproval(@Param("request") FileApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") FileApprovalListRequest request); - List selectBatchForApproval(@Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java index b5cfc4e..220e097 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java @@ -2,7 +2,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.TraceSupplierApprovalListRequest; +import com.casic.missiles.dto.meter.TraceSupplierApprovalListResponse; import com.casic.missiles.dto.meter.TraceSupplierDetailResponse; import com.casic.missiles.model.meter.MeterTraceSupplier; import org.apache.ibatis.annotations.Param; @@ -23,7 +25,7 @@ TraceSupplierDetailResponse selectTraceSupplierById(@Param("id") Long id); - List selectDraftListForApproval(@Param("request") TraceSupplierApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request); - List selectBatchForApproval(@Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); + List selectBatchForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java index 9bd6254..f2864e8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java @@ -2,8 +2,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.MeterWorkbenchResponse; import com.casic.missiles.dto.meter.TrainPlanApprovalListRequest; +import com.casic.missiles.dto.meter.TrainPlanApprovalListResponse; import com.casic.missiles.dto.meter.TrainPlanDetailResponse; import com.casic.missiles.model.meter.MeterTrainPlan; import org.apache.ibatis.annotations.Param; @@ -26,7 +28,7 @@ List meterTrainStatistic(@Param("startTime")String startTime, @Param("endTime")String endTime); - List selectDraftListForApproval(@Param("request")TrainPlanApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request); - List selectBatchForApproval(@Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java new file mode 100644 index 0000000..9edcda0 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.flowable; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/10 12:27 + */ +@Data +public class AllApproveDTO { + private String businessKey; + private String status; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java index 11420e5..b16ae67 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java @@ -17,6 +17,6 @@ private String processInstanceId; @ApiModelProperty("审批结论/意见") - @NotBlank(message = "审批结论/意见不能为空") +// @NotBlank(message = "审批结论/意见不能为空") private String comments; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java index b32478b..2866e3b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java @@ -1,6 +1,7 @@ package com.casic.missiles.service; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import java.util.List; @@ -25,4 +26,6 @@ List getCanceledList(String formId); List getFailedRejectList(String formId); + + List getAllList(String formId); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java index 447f9a1..7cca60a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -55,19 +56,17 @@ @Transactional public ReturnDTO processSubmit(String formId, Long id){ - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("该表单不存在对应的流程定义,formId:{}", formId); return ReturnUtil.failed("流程提交处理失败,该表单不存在对应的流程定义,请重新提交"); } //流程发起人 - /*AuthUser user = ShiroKit.getUser(); + AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); - });*/ - Authentication.setAuthenticatedUserId(String.valueOf(0)); + }); + Authentication.setAuthenticatedUserId(String.valueOf(user.getId())); //根据流程key(SystemFlowForm中的procDefId)获取流程id ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(flowForm.getProcDefId()).latestVersion().singleResult(); @@ -99,9 +98,7 @@ public List getCanceledList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询已取消的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -109,27 +106,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据业务状态、流程定义查询该业务所有已取消的流程实例-拒绝 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .deleted() //拒绝的要执行删除操作,也要设置业务状态,此处可同时设置为条件进行查询 - .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) //对应取消按钮中设置的业务状态 - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getCanceledProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务已取消的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getCanceledProcessInstancesForStarted(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -137,9 +120,7 @@ public List getFailedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询未通过的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -147,44 +128,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(true){ - //根据业务状态、流程定义查询该业务所有未通过的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) -// .deleted() //拒绝的审批流程要执行删除操作,也要设置业务状态,所以使用下行的状态可满足拒绝的查询 - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) //todo:拒绝按钮已增加业务状态,需验证不加deleted查询的是未删除的还是所有的 - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .finished() //审批者已完成审批 - .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询未通过的流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(task.getProcessInstanceId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) - .singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -193,9 +143,7 @@ @Override public List getFailedRejectList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询未通过-驳回的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -203,52 +151,20 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据业务状态、流程定义查询该业务所有未通过的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED_REJECT); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .finished() //审批者已完成审批 - .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询未通过的流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(task.getProcessInstanceId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED_REJECT); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; } public List getPassedList(String formId) { - //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询已通过的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -256,43 +172,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据流程定义查询该业务所有已完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .finished() - .notDeleted() - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getPassedProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据流程定义、登录用户id查询该业务已完成的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .finished() - .notDeleted() - .startedBy(String.valueOf(user.getId())) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据流程定义、登录用户id获取该业务流程的实例结束的已办任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .processFinished() //todo:此参数若表示实例已完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .notDeleted() - .processInstanceId(task.getProcessInstanceId()).singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getPassedProcessInstancesForStartedAndAssignee(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -300,9 +186,7 @@ public List getInApprovedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询审批中的任务,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -310,32 +194,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据流程定义查询该业务所有未完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) //这里使用流程定义,因为更新流程定义不会更新定义id,会更新部署id -// .deploymentId(flowForm.getDeployId()) - .or() - .unfinished() - .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 - .endOr() - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getInApprovedProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据流程定义、登录用户id查询该业务未完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .or() - .unfinished() - .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 - .endOr() - .startedBy(String.valueOf(user.getId())) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getInApprovedProcessInstancesForStarted(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -343,9 +208,7 @@ public List getToBeApprovedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询待审批的任务,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -380,6 +243,219 @@ //返回任务id和关联业务主键id return toBeApprovedDTOs; + } + @Override + public List getAllList(String formId) { + SystemFlowForm flowForm = getSystemFlowForm(formId); + if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { + log.error("查询全部的流程,该表单不存在对应的流程定义,formId:{}", formId); + return new ArrayList<>(); + } + List list = new ArrayList<>(); + //管理员or其他用户 + if(ShiroKit.isAdmin()){ + //审批中实例 + getInApprovedProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.IN_APPROVED); + }); + //已通过实例 + getPassedProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.PASSED); + });; + //未通过-拒绝实例 + getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED_REJECT).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED_REJECT); + }); + //未通过实例 + getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED); + }); + //已取消实例 + getCanceledProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.CANCELED); + }); + }else{ + AuthUser user = ShiroKit.getUser(); + Assert.isFalse(Objects.isNull(user), () -> { + throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); + }); + //审批中实例 + getInApprovedProcessInstancesForStarted(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.IN_APPROVED); + }); + //已通过实例 + getPassedProcessInstancesForStartedAndAssignee(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.PASSED); + }); + //未通过-拒绝实例 + getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED_REJECT).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED_REJECT); + }); + //未通过实例 + getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED); + }); + //已取消实例 + getCanceledProcessInstancesForStarted(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.CANCELED); + }); + } + return list; + } + + private void enrichList(List list, HistoricProcessInstance instance, String status) { + AllApproveDTO allApproveDTO = new AllApproveDTO(); + allApproveDTO.setBusinessKey(instance.getBusinessKey()); + allApproveDTO.setStatus(status); + list.add(allApproveDTO); + } + + private SystemFlowForm getSystemFlowForm(String formId) { + //根据业务表单id获取流程定义 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("form_id", formId); + return flowFormService.getOne(wrapper); + } + + private List getPassedProcessInstancesForStartedAndAssignee(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances; + //根据流程定义、登录用户id查询该业务已完成的流程实例(作为发起者) + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .finished() + .notDeleted() + .startedBy(String.valueOf(user.getId())) + .orderByProcessInstanceStartTime().desc() + .list(); + //根据流程定义、登录用户id获取该业务流程的实例结束的已办任务(作为审批者) + List tasks = historyService.createHistoricTaskInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .taskAssignee(String.valueOf(user.getId())) + .processFinished() //todo:此参数若表示实例已完成,则这里使用正确,需验证 + .orderByTaskCreateTime().desc() + .list(); + //根据作为审批者的任务查询流程实例 + for (HistoricTaskInstance task : tasks) { + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .notDeleted() + .processInstanceId(task.getProcessInstanceId()).singleResult(); + historicProcessInstances.add(historicProcessInstance); + } + return historicProcessInstances; + } + + private List getInApprovedProcessInstances(SystemFlowForm flowForm) { + List historicProcessInstances; + //根据流程定义查询该业务所有未完成的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) //这里使用流程定义,因为更新流程定义不会更新定义id,会更新部署id +// .deploymentId(flowForm.getDeployId()) + .or() + .unfinished() + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getInApprovedProcessInstancesForStarted(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances; + //根据流程定义、登录用户id查询该业务未完成的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .or() + .unfinished() + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() + .startedBy(String.valueOf(user.getId())) + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getPassedProcessInstances(SystemFlowForm flowForm) { + //根据流程定义查询该业务所有已完成的流程实例 + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .finished() + .notDeleted() + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getFailedProcessInstances(SystemFlowForm flowForm, String failStatus) { + //根据业务状态、流程定义查询该业务所有未通过的流程实例 + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) +// .deleted() //拒绝的审批流程要执行删除操作,也要设置业务状态,所以使用下行的状态可满足拒绝的查询 + .processInstanceBusinessStatus(failStatus) //todo:拒绝按钮已增加业务状态,需验证不加deleted查询的是未删除的还是所有的 + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getFailedProcessInstancesForStartedAndAssignee(SystemFlowForm flowForm, AuthUser user, String failStatus) { + //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .startedBy(String.valueOf(user.getId())) + .processInstanceBusinessStatus(failStatus) + .orderByProcessInstanceStartTime().desc() + .list(); + //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) + List tasks = historyService.createHistoricTaskInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .taskAssignee(String.valueOf(user.getId())) + .finished() //审批者已完成审批 + .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 + .orderByTaskCreateTime().desc() + .list(); + //根据作为审批者的任务查询未通过的流程实例 + for (HistoricTaskInstance task : tasks) { + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(task.getProcessInstanceId()) + .processInstanceBusinessStatus(failStatus) + .singleResult(); + historicProcessInstances.add(historicProcessInstance); + } + return historicProcessInstances; + } + + private List getCanceledProcessInstancesForStarted(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances;//根据业务状态、流程定义、登录用户id查询该业务已取消的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .startedBy(String.valueOf(user.getId())) + .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getCanceledProcessInstances(SystemFlowForm flowForm) { + List historicProcessInstances; + //根据业务状态、流程定义查询该业务所有已取消的流程实例-拒绝 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .deleted() //取消的要执行删除操作,也要设置业务状态,此处可同时设置为条件进行查询 + .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) //对应取消按钮中设置的业务状态 + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java index bef098c..23a2913 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java @@ -1,6 +1,5 @@ package com.casic.missiles.service.Impl.equipment; -import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.service.IBaseExportService; @@ -10,6 +9,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.AcceptanceCheck; import com.casic.missiles.dto.equipment.AcceptanceCheckRequest; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.EquipmentApplyTypeEnum; @@ -34,10 +34,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentAcceptanceCheckService") @@ -99,8 +96,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -130,8 +132,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ equipmentApply.setTaskId(taskMap.get(equipmentApply.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + equipmentApply.setApprovalStatus(taskMap.get(String.valueOf(equipmentApply.getId()))); + } DictCodeUtils.convertDictCodeToName(equipmentApply); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(AcceptanceCheck::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java index 5f08d09..57bb3a9 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java @@ -10,10 +10,11 @@ import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentApplyProcessRequest; import com.casic.missiles.dto.equipment.EquipmentApplyRequest; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; -import com.casic.missiles.dto.equipment.EquipmentApplyProcessRequest; import com.casic.missiles.enums.*; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.equipment.EquipmentApplyEquipmentMapper; @@ -24,10 +25,10 @@ import com.casic.missiles.model.equipment.EquipmentFixedAssets; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.service.IBaseApprovalService; -import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.service.equipment.IEquipmentApplyEquipmentService; import com.casic.missiles.service.equipment.IEquipmentApplyFileService; import com.casic.missiles.service.equipment.IEquipmentApplyService; +import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import org.apache.commons.lang3.StringUtils; @@ -37,10 +38,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentApplyService") @@ -94,8 +92,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -122,8 +125,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ equipmentApply.setTaskId(taskMap.get(equipmentApply.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + equipmentApply.setApprovalStatus(taskMap.get(String.valueOf(equipmentApply.getId()))); + } DictCodeUtils.convertDictCodeToName(equipmentApply); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(EquipmentApply::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java index 4fe93a6..2d55553 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java @@ -9,6 +9,7 @@ import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.equipment.StandardEquipmentApplyRequest; @@ -108,8 +109,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -133,8 +139,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ item.setTaskId(taskMap.get(item.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + item.setApprovalStatus(taskMap.get(String.valueOf(item.getId()))); + } DictCodeUtils.convertDictCodeToName(item); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(EquipmentStandardApply::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index f5cf538..72c5208 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -29,7 +29,7 @@ * 样品状态(任务收发&任务分发使用,委托书和样品关联表中的状态): * 1:待收入;2:待分发;3:检测中;4:检测完成;5:待归还;6:已归还;7:无需检测;8:已超期 * 实验室检定状态(实验室检测使用,实验室检定信息记录表中的状态): - * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回 + * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回;5:终止(已收入中点击终止更新实验室中待分配和待检测的的状态为已终止) *

* * @author wangpeng diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java new file mode 100644 index 0000000..32fe974 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java @@ -0,0 +1,13 @@ +package com.casic.missiles.enums; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/02/09 16:00 + */ +public interface AssigneeTypeEnum { + //1具体人员 2角色 3部门 + String USER = "1"; + String ROLE = "2"; + String DEPT = "3"; +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 0e2ecd2..18ab69f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; import com.casic.missiles.enums.AssigneeSetTypeEnum; +import com.casic.missiles.enums.AssigneeTypeEnum; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; @@ -92,9 +93,9 @@ JSONObject jsonObject1 = (JSONObject) iterator.next(); String targetId = jsonObject1.getString("targetId"); //1具体人员 2角色 3部门 - if ("1".equals(jsonObject1.getString("type"))) { + if (AssigneeTypeEnum.USER.equals(jsonObject1.getString("type"))) { assigneeList.add(targetId); - } else if ("2".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.ROLE.equals(jsonObject1.getString("type"))) { //按角色查询用户id QueryWrapper ruWrapper = new QueryWrapper<>(); ruWrapper.eq("ROLEID", targetId); @@ -103,7 +104,7 @@ List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); assigneeList.addAll(collect); } - } else if ("3".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id List> list = userMapper.selectUsers(null, null, null, targetId); if (!CollectionUtils.isEmpty(list)) { diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java index 8d70c94..e1efeaf 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java @@ -26,7 +26,7 @@ List selectApprovalList(Page page, @Param("request") FileApprovalListRequest request); - List selectDraftListForApproval(@Param("request") FileApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") FileApprovalListRequest request); - List selectBatchForApproval(@Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java index b5cfc4e..220e097 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java @@ -2,7 +2,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.TraceSupplierApprovalListRequest; +import com.casic.missiles.dto.meter.TraceSupplierApprovalListResponse; import com.casic.missiles.dto.meter.TraceSupplierDetailResponse; import com.casic.missiles.model.meter.MeterTraceSupplier; import org.apache.ibatis.annotations.Param; @@ -23,7 +25,7 @@ TraceSupplierDetailResponse selectTraceSupplierById(@Param("id") Long id); - List selectDraftListForApproval(@Param("request") TraceSupplierApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request); - List selectBatchForApproval(@Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); + List selectBatchForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java index 9bd6254..f2864e8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java @@ -2,8 +2,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.MeterWorkbenchResponse; import com.casic.missiles.dto.meter.TrainPlanApprovalListRequest; +import com.casic.missiles.dto.meter.TrainPlanApprovalListResponse; import com.casic.missiles.dto.meter.TrainPlanDetailResponse; import com.casic.missiles.model.meter.MeterTrainPlan; import org.apache.ibatis.annotations.Param; @@ -26,7 +28,7 @@ List meterTrainStatistic(@Param("startTime")String startTime, @Param("endTime")String endTime); - List selectDraftListForApproval(@Param("request")TrainPlanApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request); - List selectBatchForApproval(@Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java new file mode 100644 index 0000000..9edcda0 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.flowable; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/10 12:27 + */ +@Data +public class AllApproveDTO { + private String businessKey; + private String status; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java index 11420e5..b16ae67 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java @@ -17,6 +17,6 @@ private String processInstanceId; @ApiModelProperty("审批结论/意见") - @NotBlank(message = "审批结论/意见不能为空") +// @NotBlank(message = "审批结论/意见不能为空") private String comments; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java index b32478b..2866e3b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java @@ -1,6 +1,7 @@ package com.casic.missiles.service; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import java.util.List; @@ -25,4 +26,6 @@ List getCanceledList(String formId); List getFailedRejectList(String formId); + + List getAllList(String formId); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java index 447f9a1..7cca60a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -55,19 +56,17 @@ @Transactional public ReturnDTO processSubmit(String formId, Long id){ - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("该表单不存在对应的流程定义,formId:{}", formId); return ReturnUtil.failed("流程提交处理失败,该表单不存在对应的流程定义,请重新提交"); } //流程发起人 - /*AuthUser user = ShiroKit.getUser(); + AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); - });*/ - Authentication.setAuthenticatedUserId(String.valueOf(0)); + }); + Authentication.setAuthenticatedUserId(String.valueOf(user.getId())); //根据流程key(SystemFlowForm中的procDefId)获取流程id ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(flowForm.getProcDefId()).latestVersion().singleResult(); @@ -99,9 +98,7 @@ public List getCanceledList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询已取消的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -109,27 +106,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据业务状态、流程定义查询该业务所有已取消的流程实例-拒绝 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .deleted() //拒绝的要执行删除操作,也要设置业务状态,此处可同时设置为条件进行查询 - .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) //对应取消按钮中设置的业务状态 - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getCanceledProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务已取消的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getCanceledProcessInstancesForStarted(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -137,9 +120,7 @@ public List getFailedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询未通过的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -147,44 +128,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(true){ - //根据业务状态、流程定义查询该业务所有未通过的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) -// .deleted() //拒绝的审批流程要执行删除操作,也要设置业务状态,所以使用下行的状态可满足拒绝的查询 - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) //todo:拒绝按钮已增加业务状态,需验证不加deleted查询的是未删除的还是所有的 - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .finished() //审批者已完成审批 - .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询未通过的流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(task.getProcessInstanceId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) - .singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -193,9 +143,7 @@ @Override public List getFailedRejectList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询未通过-驳回的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -203,52 +151,20 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据业务状态、流程定义查询该业务所有未通过的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED_REJECT); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .finished() //审批者已完成审批 - .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询未通过的流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(task.getProcessInstanceId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED_REJECT); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; } public List getPassedList(String formId) { - //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询已通过的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -256,43 +172,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据流程定义查询该业务所有已完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .finished() - .notDeleted() - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getPassedProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据流程定义、登录用户id查询该业务已完成的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .finished() - .notDeleted() - .startedBy(String.valueOf(user.getId())) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据流程定义、登录用户id获取该业务流程的实例结束的已办任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .processFinished() //todo:此参数若表示实例已完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .notDeleted() - .processInstanceId(task.getProcessInstanceId()).singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getPassedProcessInstancesForStartedAndAssignee(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -300,9 +186,7 @@ public List getInApprovedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询审批中的任务,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -310,32 +194,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据流程定义查询该业务所有未完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) //这里使用流程定义,因为更新流程定义不会更新定义id,会更新部署id -// .deploymentId(flowForm.getDeployId()) - .or() - .unfinished() - .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 - .endOr() - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getInApprovedProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据流程定义、登录用户id查询该业务未完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .or() - .unfinished() - .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 - .endOr() - .startedBy(String.valueOf(user.getId())) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getInApprovedProcessInstancesForStarted(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -343,9 +208,7 @@ public List getToBeApprovedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询待审批的任务,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -380,6 +243,219 @@ //返回任务id和关联业务主键id return toBeApprovedDTOs; + } + @Override + public List getAllList(String formId) { + SystemFlowForm flowForm = getSystemFlowForm(formId); + if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { + log.error("查询全部的流程,该表单不存在对应的流程定义,formId:{}", formId); + return new ArrayList<>(); + } + List list = new ArrayList<>(); + //管理员or其他用户 + if(ShiroKit.isAdmin()){ + //审批中实例 + getInApprovedProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.IN_APPROVED); + }); + //已通过实例 + getPassedProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.PASSED); + });; + //未通过-拒绝实例 + getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED_REJECT).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED_REJECT); + }); + //未通过实例 + getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED); + }); + //已取消实例 + getCanceledProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.CANCELED); + }); + }else{ + AuthUser user = ShiroKit.getUser(); + Assert.isFalse(Objects.isNull(user), () -> { + throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); + }); + //审批中实例 + getInApprovedProcessInstancesForStarted(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.IN_APPROVED); + }); + //已通过实例 + getPassedProcessInstancesForStartedAndAssignee(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.PASSED); + }); + //未通过-拒绝实例 + getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED_REJECT).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED_REJECT); + }); + //未通过实例 + getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED); + }); + //已取消实例 + getCanceledProcessInstancesForStarted(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.CANCELED); + }); + } + return list; + } + + private void enrichList(List list, HistoricProcessInstance instance, String status) { + AllApproveDTO allApproveDTO = new AllApproveDTO(); + allApproveDTO.setBusinessKey(instance.getBusinessKey()); + allApproveDTO.setStatus(status); + list.add(allApproveDTO); + } + + private SystemFlowForm getSystemFlowForm(String formId) { + //根据业务表单id获取流程定义 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("form_id", formId); + return flowFormService.getOne(wrapper); + } + + private List getPassedProcessInstancesForStartedAndAssignee(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances; + //根据流程定义、登录用户id查询该业务已完成的流程实例(作为发起者) + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .finished() + .notDeleted() + .startedBy(String.valueOf(user.getId())) + .orderByProcessInstanceStartTime().desc() + .list(); + //根据流程定义、登录用户id获取该业务流程的实例结束的已办任务(作为审批者) + List tasks = historyService.createHistoricTaskInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .taskAssignee(String.valueOf(user.getId())) + .processFinished() //todo:此参数若表示实例已完成,则这里使用正确,需验证 + .orderByTaskCreateTime().desc() + .list(); + //根据作为审批者的任务查询流程实例 + for (HistoricTaskInstance task : tasks) { + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .notDeleted() + .processInstanceId(task.getProcessInstanceId()).singleResult(); + historicProcessInstances.add(historicProcessInstance); + } + return historicProcessInstances; + } + + private List getInApprovedProcessInstances(SystemFlowForm flowForm) { + List historicProcessInstances; + //根据流程定义查询该业务所有未完成的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) //这里使用流程定义,因为更新流程定义不会更新定义id,会更新部署id +// .deploymentId(flowForm.getDeployId()) + .or() + .unfinished() + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getInApprovedProcessInstancesForStarted(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances; + //根据流程定义、登录用户id查询该业务未完成的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .or() + .unfinished() + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() + .startedBy(String.valueOf(user.getId())) + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getPassedProcessInstances(SystemFlowForm flowForm) { + //根据流程定义查询该业务所有已完成的流程实例 + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .finished() + .notDeleted() + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getFailedProcessInstances(SystemFlowForm flowForm, String failStatus) { + //根据业务状态、流程定义查询该业务所有未通过的流程实例 + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) +// .deleted() //拒绝的审批流程要执行删除操作,也要设置业务状态,所以使用下行的状态可满足拒绝的查询 + .processInstanceBusinessStatus(failStatus) //todo:拒绝按钮已增加业务状态,需验证不加deleted查询的是未删除的还是所有的 + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getFailedProcessInstancesForStartedAndAssignee(SystemFlowForm flowForm, AuthUser user, String failStatus) { + //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .startedBy(String.valueOf(user.getId())) + .processInstanceBusinessStatus(failStatus) + .orderByProcessInstanceStartTime().desc() + .list(); + //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) + List tasks = historyService.createHistoricTaskInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .taskAssignee(String.valueOf(user.getId())) + .finished() //审批者已完成审批 + .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 + .orderByTaskCreateTime().desc() + .list(); + //根据作为审批者的任务查询未通过的流程实例 + for (HistoricTaskInstance task : tasks) { + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(task.getProcessInstanceId()) + .processInstanceBusinessStatus(failStatus) + .singleResult(); + historicProcessInstances.add(historicProcessInstance); + } + return historicProcessInstances; + } + + private List getCanceledProcessInstancesForStarted(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances;//根据业务状态、流程定义、登录用户id查询该业务已取消的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .startedBy(String.valueOf(user.getId())) + .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getCanceledProcessInstances(SystemFlowForm flowForm) { + List historicProcessInstances; + //根据业务状态、流程定义查询该业务所有已取消的流程实例-拒绝 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .deleted() //取消的要执行删除操作,也要设置业务状态,此处可同时设置为条件进行查询 + .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) //对应取消按钮中设置的业务状态 + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java index bef098c..23a2913 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java @@ -1,6 +1,5 @@ package com.casic.missiles.service.Impl.equipment; -import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.service.IBaseExportService; @@ -10,6 +9,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.AcceptanceCheck; import com.casic.missiles.dto.equipment.AcceptanceCheckRequest; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.EquipmentApplyTypeEnum; @@ -34,10 +34,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentAcceptanceCheckService") @@ -99,8 +96,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -130,8 +132,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ equipmentApply.setTaskId(taskMap.get(equipmentApply.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + equipmentApply.setApprovalStatus(taskMap.get(String.valueOf(equipmentApply.getId()))); + } DictCodeUtils.convertDictCodeToName(equipmentApply); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(AcceptanceCheck::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java index 5f08d09..57bb3a9 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java @@ -10,10 +10,11 @@ import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentApplyProcessRequest; import com.casic.missiles.dto.equipment.EquipmentApplyRequest; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; -import com.casic.missiles.dto.equipment.EquipmentApplyProcessRequest; import com.casic.missiles.enums.*; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.equipment.EquipmentApplyEquipmentMapper; @@ -24,10 +25,10 @@ import com.casic.missiles.model.equipment.EquipmentFixedAssets; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.service.IBaseApprovalService; -import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.service.equipment.IEquipmentApplyEquipmentService; import com.casic.missiles.service.equipment.IEquipmentApplyFileService; import com.casic.missiles.service.equipment.IEquipmentApplyService; +import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import org.apache.commons.lang3.StringUtils; @@ -37,10 +38,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentApplyService") @@ -94,8 +92,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -122,8 +125,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ equipmentApply.setTaskId(taskMap.get(equipmentApply.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + equipmentApply.setApprovalStatus(taskMap.get(String.valueOf(equipmentApply.getId()))); + } DictCodeUtils.convertDictCodeToName(equipmentApply); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(EquipmentApply::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java index 4fe93a6..2d55553 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java @@ -9,6 +9,7 @@ import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.equipment.StandardEquipmentApplyRequest; @@ -108,8 +109,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -133,8 +139,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ item.setTaskId(taskMap.get(item.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + item.setApprovalStatus(taskMap.get(String.valueOf(item.getId()))); + } DictCodeUtils.convertDictCodeToName(item); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(EquipmentStandardApply::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java index 42102df..b1b937c 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java @@ -6,8 +6,9 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.equipment.StateManageRequest; -import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.equipment.StateManageResponse; +import com.casic.missiles.dto.flowable.AllApproveDTO; +import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.mapper.equipment.EquipmentApplyFileMapper; @@ -21,10 +22,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentStateManageService") @@ -72,8 +70,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -97,10 +100,14 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ item.setTaskId(taskMap.get(item.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + item.setApprovalStatus(taskMap.get(String.valueOf(item.getId()))); + } DictCodeUtils.convertDictCodeToName(item); } - for (StateManageResponse stateManageResponse : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(stateManageResponse); + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(StateManageResponse::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); } return resultPage; } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index f5cf538..72c5208 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -29,7 +29,7 @@ * 样品状态(任务收发&任务分发使用,委托书和样品关联表中的状态): * 1:待收入;2:待分发;3:检测中;4:检测完成;5:待归还;6:已归还;7:无需检测;8:已超期 * 实验室检定状态(实验室检测使用,实验室检定信息记录表中的状态): - * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回 + * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回;5:终止(已收入中点击终止更新实验室中待分配和待检测的的状态为已终止) *

* * @author wangpeng diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java new file mode 100644 index 0000000..32fe974 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java @@ -0,0 +1,13 @@ +package com.casic.missiles.enums; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/02/09 16:00 + */ +public interface AssigneeTypeEnum { + //1具体人员 2角色 3部门 + String USER = "1"; + String ROLE = "2"; + String DEPT = "3"; +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 0e2ecd2..18ab69f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; import com.casic.missiles.enums.AssigneeSetTypeEnum; +import com.casic.missiles.enums.AssigneeTypeEnum; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; @@ -92,9 +93,9 @@ JSONObject jsonObject1 = (JSONObject) iterator.next(); String targetId = jsonObject1.getString("targetId"); //1具体人员 2角色 3部门 - if ("1".equals(jsonObject1.getString("type"))) { + if (AssigneeTypeEnum.USER.equals(jsonObject1.getString("type"))) { assigneeList.add(targetId); - } else if ("2".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.ROLE.equals(jsonObject1.getString("type"))) { //按角色查询用户id QueryWrapper ruWrapper = new QueryWrapper<>(); ruWrapper.eq("ROLEID", targetId); @@ -103,7 +104,7 @@ List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); assigneeList.addAll(collect); } - } else if ("3".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id List> list = userMapper.selectUsers(null, null, null, targetId); if (!CollectionUtils.isEmpty(list)) { diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java index 8d70c94..e1efeaf 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java @@ -26,7 +26,7 @@ List selectApprovalList(Page page, @Param("request") FileApprovalListRequest request); - List selectDraftListForApproval(@Param("request") FileApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") FileApprovalListRequest request); - List selectBatchForApproval(@Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java index b5cfc4e..220e097 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java @@ -2,7 +2,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.TraceSupplierApprovalListRequest; +import com.casic.missiles.dto.meter.TraceSupplierApprovalListResponse; import com.casic.missiles.dto.meter.TraceSupplierDetailResponse; import com.casic.missiles.model.meter.MeterTraceSupplier; import org.apache.ibatis.annotations.Param; @@ -23,7 +25,7 @@ TraceSupplierDetailResponse selectTraceSupplierById(@Param("id") Long id); - List selectDraftListForApproval(@Param("request") TraceSupplierApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request); - List selectBatchForApproval(@Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); + List selectBatchForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java index 9bd6254..f2864e8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java @@ -2,8 +2,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.MeterWorkbenchResponse; import com.casic.missiles.dto.meter.TrainPlanApprovalListRequest; +import com.casic.missiles.dto.meter.TrainPlanApprovalListResponse; import com.casic.missiles.dto.meter.TrainPlanDetailResponse; import com.casic.missiles.model.meter.MeterTrainPlan; import org.apache.ibatis.annotations.Param; @@ -26,7 +28,7 @@ List meterTrainStatistic(@Param("startTime")String startTime, @Param("endTime")String endTime); - List selectDraftListForApproval(@Param("request")TrainPlanApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request); - List selectBatchForApproval(@Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java new file mode 100644 index 0000000..9edcda0 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.flowable; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/10 12:27 + */ +@Data +public class AllApproveDTO { + private String businessKey; + private String status; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java index 11420e5..b16ae67 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java @@ -17,6 +17,6 @@ private String processInstanceId; @ApiModelProperty("审批结论/意见") - @NotBlank(message = "审批结论/意见不能为空") +// @NotBlank(message = "审批结论/意见不能为空") private String comments; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java index b32478b..2866e3b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java @@ -1,6 +1,7 @@ package com.casic.missiles.service; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import java.util.List; @@ -25,4 +26,6 @@ List getCanceledList(String formId); List getFailedRejectList(String formId); + + List getAllList(String formId); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java index 447f9a1..7cca60a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -55,19 +56,17 @@ @Transactional public ReturnDTO processSubmit(String formId, Long id){ - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("该表单不存在对应的流程定义,formId:{}", formId); return ReturnUtil.failed("流程提交处理失败,该表单不存在对应的流程定义,请重新提交"); } //流程发起人 - /*AuthUser user = ShiroKit.getUser(); + AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); - });*/ - Authentication.setAuthenticatedUserId(String.valueOf(0)); + }); + Authentication.setAuthenticatedUserId(String.valueOf(user.getId())); //根据流程key(SystemFlowForm中的procDefId)获取流程id ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(flowForm.getProcDefId()).latestVersion().singleResult(); @@ -99,9 +98,7 @@ public List getCanceledList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询已取消的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -109,27 +106,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据业务状态、流程定义查询该业务所有已取消的流程实例-拒绝 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .deleted() //拒绝的要执行删除操作,也要设置业务状态,此处可同时设置为条件进行查询 - .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) //对应取消按钮中设置的业务状态 - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getCanceledProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务已取消的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getCanceledProcessInstancesForStarted(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -137,9 +120,7 @@ public List getFailedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询未通过的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -147,44 +128,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(true){ - //根据业务状态、流程定义查询该业务所有未通过的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) -// .deleted() //拒绝的审批流程要执行删除操作,也要设置业务状态,所以使用下行的状态可满足拒绝的查询 - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) //todo:拒绝按钮已增加业务状态,需验证不加deleted查询的是未删除的还是所有的 - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .finished() //审批者已完成审批 - .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询未通过的流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(task.getProcessInstanceId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) - .singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -193,9 +143,7 @@ @Override public List getFailedRejectList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询未通过-驳回的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -203,52 +151,20 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据业务状态、流程定义查询该业务所有未通过的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED_REJECT); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .finished() //审批者已完成审批 - .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询未通过的流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(task.getProcessInstanceId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED_REJECT); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; } public List getPassedList(String formId) { - //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询已通过的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -256,43 +172,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据流程定义查询该业务所有已完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .finished() - .notDeleted() - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getPassedProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据流程定义、登录用户id查询该业务已完成的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .finished() - .notDeleted() - .startedBy(String.valueOf(user.getId())) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据流程定义、登录用户id获取该业务流程的实例结束的已办任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .processFinished() //todo:此参数若表示实例已完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .notDeleted() - .processInstanceId(task.getProcessInstanceId()).singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getPassedProcessInstancesForStartedAndAssignee(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -300,9 +186,7 @@ public List getInApprovedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询审批中的任务,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -310,32 +194,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据流程定义查询该业务所有未完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) //这里使用流程定义,因为更新流程定义不会更新定义id,会更新部署id -// .deploymentId(flowForm.getDeployId()) - .or() - .unfinished() - .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 - .endOr() - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getInApprovedProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据流程定义、登录用户id查询该业务未完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .or() - .unfinished() - .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 - .endOr() - .startedBy(String.valueOf(user.getId())) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getInApprovedProcessInstancesForStarted(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -343,9 +208,7 @@ public List getToBeApprovedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询待审批的任务,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -380,6 +243,219 @@ //返回任务id和关联业务主键id return toBeApprovedDTOs; + } + @Override + public List getAllList(String formId) { + SystemFlowForm flowForm = getSystemFlowForm(formId); + if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { + log.error("查询全部的流程,该表单不存在对应的流程定义,formId:{}", formId); + return new ArrayList<>(); + } + List list = new ArrayList<>(); + //管理员or其他用户 + if(ShiroKit.isAdmin()){ + //审批中实例 + getInApprovedProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.IN_APPROVED); + }); + //已通过实例 + getPassedProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.PASSED); + });; + //未通过-拒绝实例 + getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED_REJECT).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED_REJECT); + }); + //未通过实例 + getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED); + }); + //已取消实例 + getCanceledProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.CANCELED); + }); + }else{ + AuthUser user = ShiroKit.getUser(); + Assert.isFalse(Objects.isNull(user), () -> { + throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); + }); + //审批中实例 + getInApprovedProcessInstancesForStarted(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.IN_APPROVED); + }); + //已通过实例 + getPassedProcessInstancesForStartedAndAssignee(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.PASSED); + }); + //未通过-拒绝实例 + getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED_REJECT).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED_REJECT); + }); + //未通过实例 + getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED); + }); + //已取消实例 + getCanceledProcessInstancesForStarted(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.CANCELED); + }); + } + return list; + } + + private void enrichList(List list, HistoricProcessInstance instance, String status) { + AllApproveDTO allApproveDTO = new AllApproveDTO(); + allApproveDTO.setBusinessKey(instance.getBusinessKey()); + allApproveDTO.setStatus(status); + list.add(allApproveDTO); + } + + private SystemFlowForm getSystemFlowForm(String formId) { + //根据业务表单id获取流程定义 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("form_id", formId); + return flowFormService.getOne(wrapper); + } + + private List getPassedProcessInstancesForStartedAndAssignee(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances; + //根据流程定义、登录用户id查询该业务已完成的流程实例(作为发起者) + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .finished() + .notDeleted() + .startedBy(String.valueOf(user.getId())) + .orderByProcessInstanceStartTime().desc() + .list(); + //根据流程定义、登录用户id获取该业务流程的实例结束的已办任务(作为审批者) + List tasks = historyService.createHistoricTaskInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .taskAssignee(String.valueOf(user.getId())) + .processFinished() //todo:此参数若表示实例已完成,则这里使用正确,需验证 + .orderByTaskCreateTime().desc() + .list(); + //根据作为审批者的任务查询流程实例 + for (HistoricTaskInstance task : tasks) { + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .notDeleted() + .processInstanceId(task.getProcessInstanceId()).singleResult(); + historicProcessInstances.add(historicProcessInstance); + } + return historicProcessInstances; + } + + private List getInApprovedProcessInstances(SystemFlowForm flowForm) { + List historicProcessInstances; + //根据流程定义查询该业务所有未完成的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) //这里使用流程定义,因为更新流程定义不会更新定义id,会更新部署id +// .deploymentId(flowForm.getDeployId()) + .or() + .unfinished() + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getInApprovedProcessInstancesForStarted(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances; + //根据流程定义、登录用户id查询该业务未完成的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .or() + .unfinished() + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() + .startedBy(String.valueOf(user.getId())) + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getPassedProcessInstances(SystemFlowForm flowForm) { + //根据流程定义查询该业务所有已完成的流程实例 + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .finished() + .notDeleted() + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getFailedProcessInstances(SystemFlowForm flowForm, String failStatus) { + //根据业务状态、流程定义查询该业务所有未通过的流程实例 + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) +// .deleted() //拒绝的审批流程要执行删除操作,也要设置业务状态,所以使用下行的状态可满足拒绝的查询 + .processInstanceBusinessStatus(failStatus) //todo:拒绝按钮已增加业务状态,需验证不加deleted查询的是未删除的还是所有的 + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getFailedProcessInstancesForStartedAndAssignee(SystemFlowForm flowForm, AuthUser user, String failStatus) { + //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .startedBy(String.valueOf(user.getId())) + .processInstanceBusinessStatus(failStatus) + .orderByProcessInstanceStartTime().desc() + .list(); + //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) + List tasks = historyService.createHistoricTaskInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .taskAssignee(String.valueOf(user.getId())) + .finished() //审批者已完成审批 + .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 + .orderByTaskCreateTime().desc() + .list(); + //根据作为审批者的任务查询未通过的流程实例 + for (HistoricTaskInstance task : tasks) { + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(task.getProcessInstanceId()) + .processInstanceBusinessStatus(failStatus) + .singleResult(); + historicProcessInstances.add(historicProcessInstance); + } + return historicProcessInstances; + } + + private List getCanceledProcessInstancesForStarted(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances;//根据业务状态、流程定义、登录用户id查询该业务已取消的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .startedBy(String.valueOf(user.getId())) + .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getCanceledProcessInstances(SystemFlowForm flowForm) { + List historicProcessInstances; + //根据业务状态、流程定义查询该业务所有已取消的流程实例-拒绝 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .deleted() //取消的要执行删除操作,也要设置业务状态,此处可同时设置为条件进行查询 + .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) //对应取消按钮中设置的业务状态 + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java index bef098c..23a2913 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java @@ -1,6 +1,5 @@ package com.casic.missiles.service.Impl.equipment; -import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.service.IBaseExportService; @@ -10,6 +9,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.AcceptanceCheck; import com.casic.missiles.dto.equipment.AcceptanceCheckRequest; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.EquipmentApplyTypeEnum; @@ -34,10 +34,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentAcceptanceCheckService") @@ -99,8 +96,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -130,8 +132,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ equipmentApply.setTaskId(taskMap.get(equipmentApply.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + equipmentApply.setApprovalStatus(taskMap.get(String.valueOf(equipmentApply.getId()))); + } DictCodeUtils.convertDictCodeToName(equipmentApply); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(AcceptanceCheck::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java index 5f08d09..57bb3a9 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java @@ -10,10 +10,11 @@ import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentApplyProcessRequest; import com.casic.missiles.dto.equipment.EquipmentApplyRequest; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; -import com.casic.missiles.dto.equipment.EquipmentApplyProcessRequest; import com.casic.missiles.enums.*; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.equipment.EquipmentApplyEquipmentMapper; @@ -24,10 +25,10 @@ import com.casic.missiles.model.equipment.EquipmentFixedAssets; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.service.IBaseApprovalService; -import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.service.equipment.IEquipmentApplyEquipmentService; import com.casic.missiles.service.equipment.IEquipmentApplyFileService; import com.casic.missiles.service.equipment.IEquipmentApplyService; +import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import org.apache.commons.lang3.StringUtils; @@ -37,10 +38,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentApplyService") @@ -94,8 +92,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -122,8 +125,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ equipmentApply.setTaskId(taskMap.get(equipmentApply.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + equipmentApply.setApprovalStatus(taskMap.get(String.valueOf(equipmentApply.getId()))); + } DictCodeUtils.convertDictCodeToName(equipmentApply); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(EquipmentApply::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java index 4fe93a6..2d55553 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java @@ -9,6 +9,7 @@ import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.equipment.StandardEquipmentApplyRequest; @@ -108,8 +109,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -133,8 +139,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ item.setTaskId(taskMap.get(item.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + item.setApprovalStatus(taskMap.get(String.valueOf(item.getId()))); + } DictCodeUtils.convertDictCodeToName(item); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(EquipmentStandardApply::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java index 42102df..b1b937c 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java @@ -6,8 +6,9 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.equipment.StateManageRequest; -import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.equipment.StateManageResponse; +import com.casic.missiles.dto.flowable.AllApproveDTO; +import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.mapper.equipment.EquipmentApplyFileMapper; @@ -21,10 +22,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentStateManageService") @@ -72,8 +70,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -97,10 +100,14 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ item.setTaskId(taskMap.get(item.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + item.setApprovalStatus(taskMap.get(String.valueOf(item.getId()))); + } DictCodeUtils.convertDictCodeToName(item); } - for (StateManageResponse stateManageResponse : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(stateManageResponse); + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(StateManageResponse::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/flowable/ApprovalOperateServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/flowable/ApprovalOperateServiceImpl.java index 025f6eb..16210c6 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/flowable/ApprovalOperateServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/flowable/ApprovalOperateServiceImpl.java @@ -192,7 +192,10 @@ HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() .processInstanceId(request.getProcessInstanceId()) .startedBy(String.valueOf(user.getId())) + .or() .unfinished() //审批中的流程才能撤回 + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() .singleResult(); if(Objects.isNull(historicProcessInstance)){ log.error("该用户无审批中的流程,userId:{},processInstanceId:{}", user.getId(), request.getProcessInstanceId()); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index f5cf538..72c5208 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -29,7 +29,7 @@ * 样品状态(任务收发&任务分发使用,委托书和样品关联表中的状态): * 1:待收入;2:待分发;3:检测中;4:检测完成;5:待归还;6:已归还;7:无需检测;8:已超期 * 实验室检定状态(实验室检测使用,实验室检定信息记录表中的状态): - * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回 + * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回;5:终止(已收入中点击终止更新实验室中待分配和待检测的的状态为已终止) *

* * @author wangpeng diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java new file mode 100644 index 0000000..32fe974 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java @@ -0,0 +1,13 @@ +package com.casic.missiles.enums; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/02/09 16:00 + */ +public interface AssigneeTypeEnum { + //1具体人员 2角色 3部门 + String USER = "1"; + String ROLE = "2"; + String DEPT = "3"; +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 0e2ecd2..18ab69f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; import com.casic.missiles.enums.AssigneeSetTypeEnum; +import com.casic.missiles.enums.AssigneeTypeEnum; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; @@ -92,9 +93,9 @@ JSONObject jsonObject1 = (JSONObject) iterator.next(); String targetId = jsonObject1.getString("targetId"); //1具体人员 2角色 3部门 - if ("1".equals(jsonObject1.getString("type"))) { + if (AssigneeTypeEnum.USER.equals(jsonObject1.getString("type"))) { assigneeList.add(targetId); - } else if ("2".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.ROLE.equals(jsonObject1.getString("type"))) { //按角色查询用户id QueryWrapper ruWrapper = new QueryWrapper<>(); ruWrapper.eq("ROLEID", targetId); @@ -103,7 +104,7 @@ List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); assigneeList.addAll(collect); } - } else if ("3".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id List> list = userMapper.selectUsers(null, null, null, targetId); if (!CollectionUtils.isEmpty(list)) { diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java index 8d70c94..e1efeaf 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java @@ -26,7 +26,7 @@ List selectApprovalList(Page page, @Param("request") FileApprovalListRequest request); - List selectDraftListForApproval(@Param("request") FileApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") FileApprovalListRequest request); - List selectBatchForApproval(@Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java index b5cfc4e..220e097 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java @@ -2,7 +2,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.TraceSupplierApprovalListRequest; +import com.casic.missiles.dto.meter.TraceSupplierApprovalListResponse; import com.casic.missiles.dto.meter.TraceSupplierDetailResponse; import com.casic.missiles.model.meter.MeterTraceSupplier; import org.apache.ibatis.annotations.Param; @@ -23,7 +25,7 @@ TraceSupplierDetailResponse selectTraceSupplierById(@Param("id") Long id); - List selectDraftListForApproval(@Param("request") TraceSupplierApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request); - List selectBatchForApproval(@Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); + List selectBatchForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java index 9bd6254..f2864e8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java @@ -2,8 +2,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.MeterWorkbenchResponse; import com.casic.missiles.dto.meter.TrainPlanApprovalListRequest; +import com.casic.missiles.dto.meter.TrainPlanApprovalListResponse; import com.casic.missiles.dto.meter.TrainPlanDetailResponse; import com.casic.missiles.model.meter.MeterTrainPlan; import org.apache.ibatis.annotations.Param; @@ -26,7 +28,7 @@ List meterTrainStatistic(@Param("startTime")String startTime, @Param("endTime")String endTime); - List selectDraftListForApproval(@Param("request")TrainPlanApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request); - List selectBatchForApproval(@Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java new file mode 100644 index 0000000..9edcda0 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.flowable; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/10 12:27 + */ +@Data +public class AllApproveDTO { + private String businessKey; + private String status; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java index 11420e5..b16ae67 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java @@ -17,6 +17,6 @@ private String processInstanceId; @ApiModelProperty("审批结论/意见") - @NotBlank(message = "审批结论/意见不能为空") +// @NotBlank(message = "审批结论/意见不能为空") private String comments; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java index b32478b..2866e3b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java @@ -1,6 +1,7 @@ package com.casic.missiles.service; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import java.util.List; @@ -25,4 +26,6 @@ List getCanceledList(String formId); List getFailedRejectList(String formId); + + List getAllList(String formId); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java index 447f9a1..7cca60a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -55,19 +56,17 @@ @Transactional public ReturnDTO processSubmit(String formId, Long id){ - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("该表单不存在对应的流程定义,formId:{}", formId); return ReturnUtil.failed("流程提交处理失败,该表单不存在对应的流程定义,请重新提交"); } //流程发起人 - /*AuthUser user = ShiroKit.getUser(); + AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); - });*/ - Authentication.setAuthenticatedUserId(String.valueOf(0)); + }); + Authentication.setAuthenticatedUserId(String.valueOf(user.getId())); //根据流程key(SystemFlowForm中的procDefId)获取流程id ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(flowForm.getProcDefId()).latestVersion().singleResult(); @@ -99,9 +98,7 @@ public List getCanceledList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询已取消的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -109,27 +106,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据业务状态、流程定义查询该业务所有已取消的流程实例-拒绝 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .deleted() //拒绝的要执行删除操作,也要设置业务状态,此处可同时设置为条件进行查询 - .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) //对应取消按钮中设置的业务状态 - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getCanceledProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务已取消的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getCanceledProcessInstancesForStarted(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -137,9 +120,7 @@ public List getFailedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询未通过的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -147,44 +128,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(true){ - //根据业务状态、流程定义查询该业务所有未通过的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) -// .deleted() //拒绝的审批流程要执行删除操作,也要设置业务状态,所以使用下行的状态可满足拒绝的查询 - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) //todo:拒绝按钮已增加业务状态,需验证不加deleted查询的是未删除的还是所有的 - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .finished() //审批者已完成审批 - .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询未通过的流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(task.getProcessInstanceId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) - .singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -193,9 +143,7 @@ @Override public List getFailedRejectList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询未通过-驳回的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -203,52 +151,20 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据业务状态、流程定义查询该业务所有未通过的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED_REJECT); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .finished() //审批者已完成审批 - .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询未通过的流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(task.getProcessInstanceId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED_REJECT); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; } public List getPassedList(String formId) { - //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询已通过的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -256,43 +172,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据流程定义查询该业务所有已完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .finished() - .notDeleted() - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getPassedProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据流程定义、登录用户id查询该业务已完成的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .finished() - .notDeleted() - .startedBy(String.valueOf(user.getId())) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据流程定义、登录用户id获取该业务流程的实例结束的已办任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .processFinished() //todo:此参数若表示实例已完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .notDeleted() - .processInstanceId(task.getProcessInstanceId()).singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getPassedProcessInstancesForStartedAndAssignee(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -300,9 +186,7 @@ public List getInApprovedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询审批中的任务,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -310,32 +194,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据流程定义查询该业务所有未完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) //这里使用流程定义,因为更新流程定义不会更新定义id,会更新部署id -// .deploymentId(flowForm.getDeployId()) - .or() - .unfinished() - .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 - .endOr() - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getInApprovedProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据流程定义、登录用户id查询该业务未完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .or() - .unfinished() - .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 - .endOr() - .startedBy(String.valueOf(user.getId())) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getInApprovedProcessInstancesForStarted(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -343,9 +208,7 @@ public List getToBeApprovedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询待审批的任务,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -380,6 +243,219 @@ //返回任务id和关联业务主键id return toBeApprovedDTOs; + } + @Override + public List getAllList(String formId) { + SystemFlowForm flowForm = getSystemFlowForm(formId); + if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { + log.error("查询全部的流程,该表单不存在对应的流程定义,formId:{}", formId); + return new ArrayList<>(); + } + List list = new ArrayList<>(); + //管理员or其他用户 + if(ShiroKit.isAdmin()){ + //审批中实例 + getInApprovedProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.IN_APPROVED); + }); + //已通过实例 + getPassedProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.PASSED); + });; + //未通过-拒绝实例 + getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED_REJECT).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED_REJECT); + }); + //未通过实例 + getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED); + }); + //已取消实例 + getCanceledProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.CANCELED); + }); + }else{ + AuthUser user = ShiroKit.getUser(); + Assert.isFalse(Objects.isNull(user), () -> { + throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); + }); + //审批中实例 + getInApprovedProcessInstancesForStarted(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.IN_APPROVED); + }); + //已通过实例 + getPassedProcessInstancesForStartedAndAssignee(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.PASSED); + }); + //未通过-拒绝实例 + getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED_REJECT).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED_REJECT); + }); + //未通过实例 + getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED); + }); + //已取消实例 + getCanceledProcessInstancesForStarted(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.CANCELED); + }); + } + return list; + } + + private void enrichList(List list, HistoricProcessInstance instance, String status) { + AllApproveDTO allApproveDTO = new AllApproveDTO(); + allApproveDTO.setBusinessKey(instance.getBusinessKey()); + allApproveDTO.setStatus(status); + list.add(allApproveDTO); + } + + private SystemFlowForm getSystemFlowForm(String formId) { + //根据业务表单id获取流程定义 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("form_id", formId); + return flowFormService.getOne(wrapper); + } + + private List getPassedProcessInstancesForStartedAndAssignee(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances; + //根据流程定义、登录用户id查询该业务已完成的流程实例(作为发起者) + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .finished() + .notDeleted() + .startedBy(String.valueOf(user.getId())) + .orderByProcessInstanceStartTime().desc() + .list(); + //根据流程定义、登录用户id获取该业务流程的实例结束的已办任务(作为审批者) + List tasks = historyService.createHistoricTaskInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .taskAssignee(String.valueOf(user.getId())) + .processFinished() //todo:此参数若表示实例已完成,则这里使用正确,需验证 + .orderByTaskCreateTime().desc() + .list(); + //根据作为审批者的任务查询流程实例 + for (HistoricTaskInstance task : tasks) { + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .notDeleted() + .processInstanceId(task.getProcessInstanceId()).singleResult(); + historicProcessInstances.add(historicProcessInstance); + } + return historicProcessInstances; + } + + private List getInApprovedProcessInstances(SystemFlowForm flowForm) { + List historicProcessInstances; + //根据流程定义查询该业务所有未完成的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) //这里使用流程定义,因为更新流程定义不会更新定义id,会更新部署id +// .deploymentId(flowForm.getDeployId()) + .or() + .unfinished() + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getInApprovedProcessInstancesForStarted(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances; + //根据流程定义、登录用户id查询该业务未完成的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .or() + .unfinished() + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() + .startedBy(String.valueOf(user.getId())) + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getPassedProcessInstances(SystemFlowForm flowForm) { + //根据流程定义查询该业务所有已完成的流程实例 + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .finished() + .notDeleted() + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getFailedProcessInstances(SystemFlowForm flowForm, String failStatus) { + //根据业务状态、流程定义查询该业务所有未通过的流程实例 + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) +// .deleted() //拒绝的审批流程要执行删除操作,也要设置业务状态,所以使用下行的状态可满足拒绝的查询 + .processInstanceBusinessStatus(failStatus) //todo:拒绝按钮已增加业务状态,需验证不加deleted查询的是未删除的还是所有的 + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getFailedProcessInstancesForStartedAndAssignee(SystemFlowForm flowForm, AuthUser user, String failStatus) { + //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .startedBy(String.valueOf(user.getId())) + .processInstanceBusinessStatus(failStatus) + .orderByProcessInstanceStartTime().desc() + .list(); + //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) + List tasks = historyService.createHistoricTaskInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .taskAssignee(String.valueOf(user.getId())) + .finished() //审批者已完成审批 + .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 + .orderByTaskCreateTime().desc() + .list(); + //根据作为审批者的任务查询未通过的流程实例 + for (HistoricTaskInstance task : tasks) { + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(task.getProcessInstanceId()) + .processInstanceBusinessStatus(failStatus) + .singleResult(); + historicProcessInstances.add(historicProcessInstance); + } + return historicProcessInstances; + } + + private List getCanceledProcessInstancesForStarted(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances;//根据业务状态、流程定义、登录用户id查询该业务已取消的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .startedBy(String.valueOf(user.getId())) + .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getCanceledProcessInstances(SystemFlowForm flowForm) { + List historicProcessInstances; + //根据业务状态、流程定义查询该业务所有已取消的流程实例-拒绝 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .deleted() //取消的要执行删除操作,也要设置业务状态,此处可同时设置为条件进行查询 + .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) //对应取消按钮中设置的业务状态 + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java index bef098c..23a2913 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java @@ -1,6 +1,5 @@ package com.casic.missiles.service.Impl.equipment; -import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.service.IBaseExportService; @@ -10,6 +9,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.AcceptanceCheck; import com.casic.missiles.dto.equipment.AcceptanceCheckRequest; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.EquipmentApplyTypeEnum; @@ -34,10 +34,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentAcceptanceCheckService") @@ -99,8 +96,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -130,8 +132,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ equipmentApply.setTaskId(taskMap.get(equipmentApply.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + equipmentApply.setApprovalStatus(taskMap.get(String.valueOf(equipmentApply.getId()))); + } DictCodeUtils.convertDictCodeToName(equipmentApply); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(AcceptanceCheck::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java index 5f08d09..57bb3a9 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java @@ -10,10 +10,11 @@ import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentApplyProcessRequest; import com.casic.missiles.dto.equipment.EquipmentApplyRequest; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; -import com.casic.missiles.dto.equipment.EquipmentApplyProcessRequest; import com.casic.missiles.enums.*; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.equipment.EquipmentApplyEquipmentMapper; @@ -24,10 +25,10 @@ import com.casic.missiles.model.equipment.EquipmentFixedAssets; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.service.IBaseApprovalService; -import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.service.equipment.IEquipmentApplyEquipmentService; import com.casic.missiles.service.equipment.IEquipmentApplyFileService; import com.casic.missiles.service.equipment.IEquipmentApplyService; +import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import org.apache.commons.lang3.StringUtils; @@ -37,10 +38,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentApplyService") @@ -94,8 +92,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -122,8 +125,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ equipmentApply.setTaskId(taskMap.get(equipmentApply.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + equipmentApply.setApprovalStatus(taskMap.get(String.valueOf(equipmentApply.getId()))); + } DictCodeUtils.convertDictCodeToName(equipmentApply); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(EquipmentApply::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java index 4fe93a6..2d55553 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java @@ -9,6 +9,7 @@ import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.equipment.StandardEquipmentApplyRequest; @@ -108,8 +109,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -133,8 +139,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ item.setTaskId(taskMap.get(item.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + item.setApprovalStatus(taskMap.get(String.valueOf(item.getId()))); + } DictCodeUtils.convertDictCodeToName(item); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(EquipmentStandardApply::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java index 42102df..b1b937c 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java @@ -6,8 +6,9 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.equipment.StateManageRequest; -import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.equipment.StateManageResponse; +import com.casic.missiles.dto.flowable.AllApproveDTO; +import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.mapper.equipment.EquipmentApplyFileMapper; @@ -21,10 +22,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentStateManageService") @@ -72,8 +70,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -97,10 +100,14 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ item.setTaskId(taskMap.get(item.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + item.setApprovalStatus(taskMap.get(String.valueOf(item.getId()))); + } DictCodeUtils.convertDictCodeToName(item); } - for (StateManageResponse stateManageResponse : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(stateManageResponse); + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(StateManageResponse::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/flowable/ApprovalOperateServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/flowable/ApprovalOperateServiceImpl.java index 025f6eb..16210c6 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/flowable/ApprovalOperateServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/flowable/ApprovalOperateServiceImpl.java @@ -192,7 +192,10 @@ HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() .processInstanceId(request.getProcessInstanceId()) .startedBy(String.valueOf(user.getId())) + .or() .unfinished() //审批中的流程才能撤回 + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() .singleResult(); if(Objects.isNull(historicProcessInstance)){ log.error("该用户无审批中的流程,userId:{},processInstanceId:{}", user.getId(), request.getProcessInstanceId()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterFileServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterFileServiceImpl.java index 7d94027..6eeebd8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterFileServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterFileServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.dto.BaseApprovalSubmitRequest; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.meter.FileApprovalListRequest; @@ -41,9 +42,7 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -185,7 +184,7 @@ throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); request.setCreateUserId(user.getId()); - return handleApprovalStatus(request); + return handleApprovalStatus(page, request); } @Override @@ -222,7 +221,7 @@ throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } - private List handleApprovalStatus(FileApprovalListRequest request) { + private List handleApprovalStatus(Page page, FileApprovalListRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); List list; @@ -231,7 +230,7 @@ switch (request.getApprovalStatus()) { //草稿 case ApprovalStatusEnum.DRAFT: - list = meterFileMapper.selectDraftListForApproval(request); + list = meterFileMapper.selectDraftListForApproval(page, request); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.DRAFT); break; //待审批,该状态维护在flowable中 @@ -241,7 +240,7 @@ businessKeys = toBeApprovedList.stream().map(ToBeApprovedDTO::getBusinessKey).collect(Collectors.toList()); } if(!CollectionUtils.isEmpty(businessKeys)){ - list = meterFileMapper.selectBatchForApproval(request, businessKeys); + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.TO_BE_APPROVED); //DTO根据业务主键补全taskId approvalList.forEach(approval -> { @@ -257,7 +256,7 @@ case ApprovalStatusEnum.IN_APPROVED: businessKeys = baseApprovalService.getInApprovedList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = meterFileMapper.selectBatchForApproval(request, businessKeys); + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.IN_APPROVED); } break; @@ -265,7 +264,7 @@ case ApprovalStatusEnum.PASSED: businessKeys = baseApprovalService.getPassedList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = meterFileMapper.selectBatchForApproval(request, businessKeys); + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.PASSED); } break; @@ -274,12 +273,12 @@ businessKeys = baseApprovalService.getFailedList(request.getFormId()); //未通过-拒绝 List rejectBusinessKey = baseApprovalService.getFailedRejectList(request.getFormId()); //未通过-驳回 if(!CollectionUtils.isEmpty(businessKeys)){ - list = meterFileMapper.selectBatchForApproval(request, businessKeys); + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.FAILED); } List rejectApprovalList = new ArrayList<>(); if(!CollectionUtils.isEmpty(rejectBusinessKey)){ - List rejectList = meterFileMapper.selectBatchForApproval(request, rejectBusinessKey); + List rejectList = meterFileMapper.selectBatchForApproval(page, request, rejectBusinessKey); rejectApprovalList = handleApprovalListResponse(approvalList, rejectList, ApprovalStatusEnum.FAILED_REJECT); } //合并未通过-拒绝和未通过-驳回 @@ -289,14 +288,40 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = meterFileMapper.selectBatchForApproval(request, businessKeys); + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.CANCELED); } break; + //全部 + //区分管理员和普通用户 + //普通用户获取自己发起的(审批中、已通过、未通过、已取消),管理员获取全部(审批中、已通过、未通过、已取消) + case ApprovalStatusEnum.ALL: + List AllApproveList = baseApprovalService.getAllList(request.getFormId()); + if(!CollectionUtils.isEmpty(AllApproveList)){ + businessKeys = AllApproveList.stream().map(AllApproveDTO::getBusinessKey).collect(Collectors.toList()); + } + if(!CollectionUtils.isEmpty(businessKeys)){ + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); + approvalList = handleAllApprovalListResponse(approvalList, list, AllApproveList); + } + break; } return approvalList; } + private List handleAllApprovalListResponse(List approvalList, List list, List allApproveList) { + Map taskMap = new HashMap<>(); + approvalList = ConvertUtils.sourceToTarget(list, FileApprovalListResponse.class); + allApproveList.forEach(allApprove -> {taskMap.put(allApprove.getBusinessKey(),allApprove.getStatus());}); + //状态补全 + approvalList.forEach(approval -> { + approval.setApprovalStatusName(dictService.getDictNameByCode(MeterDictEnum.APPROVAL_STATUS, taskMap.get(String.valueOf(approval.getId())))); + approval.setApprovalStatus(taskMap.get(String.valueOf(approval.getId()))); + }); + //排序 + return approvalList.stream().sorted(Comparator.comparing(FileApprovalListResponse::getCreateTime).reversed()).collect(Collectors.toList()); + } + private List handleApprovalListResponse(List approvalList, List list, String status){ approvalList = ConvertUtils.sourceToTarget(list, FileApprovalListResponse.class); approvalList.stream().forEach(result -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index f5cf538..72c5208 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -29,7 +29,7 @@ * 样品状态(任务收发&任务分发使用,委托书和样品关联表中的状态): * 1:待收入;2:待分发;3:检测中;4:检测完成;5:待归还;6:已归还;7:无需检测;8:已超期 * 实验室检定状态(实验室检测使用,实验室检定信息记录表中的状态): - * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回 + * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回;5:终止(已收入中点击终止更新实验室中待分配和待检测的的状态为已终止) *

* * @author wangpeng diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java new file mode 100644 index 0000000..32fe974 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java @@ -0,0 +1,13 @@ +package com.casic.missiles.enums; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/02/09 16:00 + */ +public interface AssigneeTypeEnum { + //1具体人员 2角色 3部门 + String USER = "1"; + String ROLE = "2"; + String DEPT = "3"; +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 0e2ecd2..18ab69f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; import com.casic.missiles.enums.AssigneeSetTypeEnum; +import com.casic.missiles.enums.AssigneeTypeEnum; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; @@ -92,9 +93,9 @@ JSONObject jsonObject1 = (JSONObject) iterator.next(); String targetId = jsonObject1.getString("targetId"); //1具体人员 2角色 3部门 - if ("1".equals(jsonObject1.getString("type"))) { + if (AssigneeTypeEnum.USER.equals(jsonObject1.getString("type"))) { assigneeList.add(targetId); - } else if ("2".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.ROLE.equals(jsonObject1.getString("type"))) { //按角色查询用户id QueryWrapper ruWrapper = new QueryWrapper<>(); ruWrapper.eq("ROLEID", targetId); @@ -103,7 +104,7 @@ List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); assigneeList.addAll(collect); } - } else if ("3".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id List> list = userMapper.selectUsers(null, null, null, targetId); if (!CollectionUtils.isEmpty(list)) { diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java index 8d70c94..e1efeaf 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java @@ -26,7 +26,7 @@ List selectApprovalList(Page page, @Param("request") FileApprovalListRequest request); - List selectDraftListForApproval(@Param("request") FileApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") FileApprovalListRequest request); - List selectBatchForApproval(@Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java index b5cfc4e..220e097 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java @@ -2,7 +2,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.TraceSupplierApprovalListRequest; +import com.casic.missiles.dto.meter.TraceSupplierApprovalListResponse; import com.casic.missiles.dto.meter.TraceSupplierDetailResponse; import com.casic.missiles.model.meter.MeterTraceSupplier; import org.apache.ibatis.annotations.Param; @@ -23,7 +25,7 @@ TraceSupplierDetailResponse selectTraceSupplierById(@Param("id") Long id); - List selectDraftListForApproval(@Param("request") TraceSupplierApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request); - List selectBatchForApproval(@Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); + List selectBatchForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java index 9bd6254..f2864e8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java @@ -2,8 +2,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.MeterWorkbenchResponse; import com.casic.missiles.dto.meter.TrainPlanApprovalListRequest; +import com.casic.missiles.dto.meter.TrainPlanApprovalListResponse; import com.casic.missiles.dto.meter.TrainPlanDetailResponse; import com.casic.missiles.model.meter.MeterTrainPlan; import org.apache.ibatis.annotations.Param; @@ -26,7 +28,7 @@ List meterTrainStatistic(@Param("startTime")String startTime, @Param("endTime")String endTime); - List selectDraftListForApproval(@Param("request")TrainPlanApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request); - List selectBatchForApproval(@Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java new file mode 100644 index 0000000..9edcda0 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.flowable; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/10 12:27 + */ +@Data +public class AllApproveDTO { + private String businessKey; + private String status; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java index 11420e5..b16ae67 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java @@ -17,6 +17,6 @@ private String processInstanceId; @ApiModelProperty("审批结论/意见") - @NotBlank(message = "审批结论/意见不能为空") +// @NotBlank(message = "审批结论/意见不能为空") private String comments; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java index b32478b..2866e3b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java @@ -1,6 +1,7 @@ package com.casic.missiles.service; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import java.util.List; @@ -25,4 +26,6 @@ List getCanceledList(String formId); List getFailedRejectList(String formId); + + List getAllList(String formId); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java index 447f9a1..7cca60a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -55,19 +56,17 @@ @Transactional public ReturnDTO processSubmit(String formId, Long id){ - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("该表单不存在对应的流程定义,formId:{}", formId); return ReturnUtil.failed("流程提交处理失败,该表单不存在对应的流程定义,请重新提交"); } //流程发起人 - /*AuthUser user = ShiroKit.getUser(); + AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); - });*/ - Authentication.setAuthenticatedUserId(String.valueOf(0)); + }); + Authentication.setAuthenticatedUserId(String.valueOf(user.getId())); //根据流程key(SystemFlowForm中的procDefId)获取流程id ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(flowForm.getProcDefId()).latestVersion().singleResult(); @@ -99,9 +98,7 @@ public List getCanceledList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询已取消的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -109,27 +106,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据业务状态、流程定义查询该业务所有已取消的流程实例-拒绝 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .deleted() //拒绝的要执行删除操作,也要设置业务状态,此处可同时设置为条件进行查询 - .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) //对应取消按钮中设置的业务状态 - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getCanceledProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务已取消的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getCanceledProcessInstancesForStarted(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -137,9 +120,7 @@ public List getFailedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询未通过的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -147,44 +128,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(true){ - //根据业务状态、流程定义查询该业务所有未通过的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) -// .deleted() //拒绝的审批流程要执行删除操作,也要设置业务状态,所以使用下行的状态可满足拒绝的查询 - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) //todo:拒绝按钮已增加业务状态,需验证不加deleted查询的是未删除的还是所有的 - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .finished() //审批者已完成审批 - .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询未通过的流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(task.getProcessInstanceId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) - .singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -193,9 +143,7 @@ @Override public List getFailedRejectList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询未通过-驳回的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -203,52 +151,20 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据业务状态、流程定义查询该业务所有未通过的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED_REJECT); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .finished() //审批者已完成审批 - .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询未通过的流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(task.getProcessInstanceId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED_REJECT); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; } public List getPassedList(String formId) { - //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询已通过的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -256,43 +172,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据流程定义查询该业务所有已完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .finished() - .notDeleted() - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getPassedProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据流程定义、登录用户id查询该业务已完成的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .finished() - .notDeleted() - .startedBy(String.valueOf(user.getId())) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据流程定义、登录用户id获取该业务流程的实例结束的已办任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .processFinished() //todo:此参数若表示实例已完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .notDeleted() - .processInstanceId(task.getProcessInstanceId()).singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getPassedProcessInstancesForStartedAndAssignee(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -300,9 +186,7 @@ public List getInApprovedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询审批中的任务,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -310,32 +194,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据流程定义查询该业务所有未完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) //这里使用流程定义,因为更新流程定义不会更新定义id,会更新部署id -// .deploymentId(flowForm.getDeployId()) - .or() - .unfinished() - .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 - .endOr() - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getInApprovedProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据流程定义、登录用户id查询该业务未完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .or() - .unfinished() - .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 - .endOr() - .startedBy(String.valueOf(user.getId())) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getInApprovedProcessInstancesForStarted(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -343,9 +208,7 @@ public List getToBeApprovedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询待审批的任务,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -380,6 +243,219 @@ //返回任务id和关联业务主键id return toBeApprovedDTOs; + } + @Override + public List getAllList(String formId) { + SystemFlowForm flowForm = getSystemFlowForm(formId); + if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { + log.error("查询全部的流程,该表单不存在对应的流程定义,formId:{}", formId); + return new ArrayList<>(); + } + List list = new ArrayList<>(); + //管理员or其他用户 + if(ShiroKit.isAdmin()){ + //审批中实例 + getInApprovedProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.IN_APPROVED); + }); + //已通过实例 + getPassedProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.PASSED); + });; + //未通过-拒绝实例 + getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED_REJECT).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED_REJECT); + }); + //未通过实例 + getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED); + }); + //已取消实例 + getCanceledProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.CANCELED); + }); + }else{ + AuthUser user = ShiroKit.getUser(); + Assert.isFalse(Objects.isNull(user), () -> { + throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); + }); + //审批中实例 + getInApprovedProcessInstancesForStarted(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.IN_APPROVED); + }); + //已通过实例 + getPassedProcessInstancesForStartedAndAssignee(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.PASSED); + }); + //未通过-拒绝实例 + getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED_REJECT).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED_REJECT); + }); + //未通过实例 + getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED); + }); + //已取消实例 + getCanceledProcessInstancesForStarted(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.CANCELED); + }); + } + return list; + } + + private void enrichList(List list, HistoricProcessInstance instance, String status) { + AllApproveDTO allApproveDTO = new AllApproveDTO(); + allApproveDTO.setBusinessKey(instance.getBusinessKey()); + allApproveDTO.setStatus(status); + list.add(allApproveDTO); + } + + private SystemFlowForm getSystemFlowForm(String formId) { + //根据业务表单id获取流程定义 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("form_id", formId); + return flowFormService.getOne(wrapper); + } + + private List getPassedProcessInstancesForStartedAndAssignee(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances; + //根据流程定义、登录用户id查询该业务已完成的流程实例(作为发起者) + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .finished() + .notDeleted() + .startedBy(String.valueOf(user.getId())) + .orderByProcessInstanceStartTime().desc() + .list(); + //根据流程定义、登录用户id获取该业务流程的实例结束的已办任务(作为审批者) + List tasks = historyService.createHistoricTaskInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .taskAssignee(String.valueOf(user.getId())) + .processFinished() //todo:此参数若表示实例已完成,则这里使用正确,需验证 + .orderByTaskCreateTime().desc() + .list(); + //根据作为审批者的任务查询流程实例 + for (HistoricTaskInstance task : tasks) { + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .notDeleted() + .processInstanceId(task.getProcessInstanceId()).singleResult(); + historicProcessInstances.add(historicProcessInstance); + } + return historicProcessInstances; + } + + private List getInApprovedProcessInstances(SystemFlowForm flowForm) { + List historicProcessInstances; + //根据流程定义查询该业务所有未完成的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) //这里使用流程定义,因为更新流程定义不会更新定义id,会更新部署id +// .deploymentId(flowForm.getDeployId()) + .or() + .unfinished() + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getInApprovedProcessInstancesForStarted(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances; + //根据流程定义、登录用户id查询该业务未完成的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .or() + .unfinished() + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() + .startedBy(String.valueOf(user.getId())) + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getPassedProcessInstances(SystemFlowForm flowForm) { + //根据流程定义查询该业务所有已完成的流程实例 + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .finished() + .notDeleted() + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getFailedProcessInstances(SystemFlowForm flowForm, String failStatus) { + //根据业务状态、流程定义查询该业务所有未通过的流程实例 + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) +// .deleted() //拒绝的审批流程要执行删除操作,也要设置业务状态,所以使用下行的状态可满足拒绝的查询 + .processInstanceBusinessStatus(failStatus) //todo:拒绝按钮已增加业务状态,需验证不加deleted查询的是未删除的还是所有的 + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getFailedProcessInstancesForStartedAndAssignee(SystemFlowForm flowForm, AuthUser user, String failStatus) { + //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .startedBy(String.valueOf(user.getId())) + .processInstanceBusinessStatus(failStatus) + .orderByProcessInstanceStartTime().desc() + .list(); + //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) + List tasks = historyService.createHistoricTaskInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .taskAssignee(String.valueOf(user.getId())) + .finished() //审批者已完成审批 + .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 + .orderByTaskCreateTime().desc() + .list(); + //根据作为审批者的任务查询未通过的流程实例 + for (HistoricTaskInstance task : tasks) { + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(task.getProcessInstanceId()) + .processInstanceBusinessStatus(failStatus) + .singleResult(); + historicProcessInstances.add(historicProcessInstance); + } + return historicProcessInstances; + } + + private List getCanceledProcessInstancesForStarted(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances;//根据业务状态、流程定义、登录用户id查询该业务已取消的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .startedBy(String.valueOf(user.getId())) + .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getCanceledProcessInstances(SystemFlowForm flowForm) { + List historicProcessInstances; + //根据业务状态、流程定义查询该业务所有已取消的流程实例-拒绝 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .deleted() //取消的要执行删除操作,也要设置业务状态,此处可同时设置为条件进行查询 + .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) //对应取消按钮中设置的业务状态 + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java index bef098c..23a2913 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java @@ -1,6 +1,5 @@ package com.casic.missiles.service.Impl.equipment; -import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.service.IBaseExportService; @@ -10,6 +9,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.AcceptanceCheck; import com.casic.missiles.dto.equipment.AcceptanceCheckRequest; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.EquipmentApplyTypeEnum; @@ -34,10 +34,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentAcceptanceCheckService") @@ -99,8 +96,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -130,8 +132,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ equipmentApply.setTaskId(taskMap.get(equipmentApply.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + equipmentApply.setApprovalStatus(taskMap.get(String.valueOf(equipmentApply.getId()))); + } DictCodeUtils.convertDictCodeToName(equipmentApply); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(AcceptanceCheck::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java index 5f08d09..57bb3a9 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java @@ -10,10 +10,11 @@ import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentApplyProcessRequest; import com.casic.missiles.dto.equipment.EquipmentApplyRequest; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; -import com.casic.missiles.dto.equipment.EquipmentApplyProcessRequest; import com.casic.missiles.enums.*; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.equipment.EquipmentApplyEquipmentMapper; @@ -24,10 +25,10 @@ import com.casic.missiles.model.equipment.EquipmentFixedAssets; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.service.IBaseApprovalService; -import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.service.equipment.IEquipmentApplyEquipmentService; import com.casic.missiles.service.equipment.IEquipmentApplyFileService; import com.casic.missiles.service.equipment.IEquipmentApplyService; +import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import org.apache.commons.lang3.StringUtils; @@ -37,10 +38,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentApplyService") @@ -94,8 +92,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -122,8 +125,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ equipmentApply.setTaskId(taskMap.get(equipmentApply.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + equipmentApply.setApprovalStatus(taskMap.get(String.valueOf(equipmentApply.getId()))); + } DictCodeUtils.convertDictCodeToName(equipmentApply); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(EquipmentApply::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java index 4fe93a6..2d55553 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java @@ -9,6 +9,7 @@ import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.equipment.StandardEquipmentApplyRequest; @@ -108,8 +109,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -133,8 +139,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ item.setTaskId(taskMap.get(item.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + item.setApprovalStatus(taskMap.get(String.valueOf(item.getId()))); + } DictCodeUtils.convertDictCodeToName(item); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(EquipmentStandardApply::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java index 42102df..b1b937c 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java @@ -6,8 +6,9 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.equipment.StateManageRequest; -import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.equipment.StateManageResponse; +import com.casic.missiles.dto.flowable.AllApproveDTO; +import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.mapper.equipment.EquipmentApplyFileMapper; @@ -21,10 +22,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentStateManageService") @@ -72,8 +70,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -97,10 +100,14 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ item.setTaskId(taskMap.get(item.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + item.setApprovalStatus(taskMap.get(String.valueOf(item.getId()))); + } DictCodeUtils.convertDictCodeToName(item); } - for (StateManageResponse stateManageResponse : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(stateManageResponse); + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(StateManageResponse::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/flowable/ApprovalOperateServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/flowable/ApprovalOperateServiceImpl.java index 025f6eb..16210c6 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/flowable/ApprovalOperateServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/flowable/ApprovalOperateServiceImpl.java @@ -192,7 +192,10 @@ HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() .processInstanceId(request.getProcessInstanceId()) .startedBy(String.valueOf(user.getId())) + .or() .unfinished() //审批中的流程才能撤回 + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() .singleResult(); if(Objects.isNull(historicProcessInstance)){ log.error("该用户无审批中的流程,userId:{},processInstanceId:{}", user.getId(), request.getProcessInstanceId()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterFileServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterFileServiceImpl.java index 7d94027..6eeebd8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterFileServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterFileServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.dto.BaseApprovalSubmitRequest; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.meter.FileApprovalListRequest; @@ -41,9 +42,7 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -185,7 +184,7 @@ throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); request.setCreateUserId(user.getId()); - return handleApprovalStatus(request); + return handleApprovalStatus(page, request); } @Override @@ -222,7 +221,7 @@ throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } - private List handleApprovalStatus(FileApprovalListRequest request) { + private List handleApprovalStatus(Page page, FileApprovalListRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); List list; @@ -231,7 +230,7 @@ switch (request.getApprovalStatus()) { //草稿 case ApprovalStatusEnum.DRAFT: - list = meterFileMapper.selectDraftListForApproval(request); + list = meterFileMapper.selectDraftListForApproval(page, request); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.DRAFT); break; //待审批,该状态维护在flowable中 @@ -241,7 +240,7 @@ businessKeys = toBeApprovedList.stream().map(ToBeApprovedDTO::getBusinessKey).collect(Collectors.toList()); } if(!CollectionUtils.isEmpty(businessKeys)){ - list = meterFileMapper.selectBatchForApproval(request, businessKeys); + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.TO_BE_APPROVED); //DTO根据业务主键补全taskId approvalList.forEach(approval -> { @@ -257,7 +256,7 @@ case ApprovalStatusEnum.IN_APPROVED: businessKeys = baseApprovalService.getInApprovedList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = meterFileMapper.selectBatchForApproval(request, businessKeys); + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.IN_APPROVED); } break; @@ -265,7 +264,7 @@ case ApprovalStatusEnum.PASSED: businessKeys = baseApprovalService.getPassedList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = meterFileMapper.selectBatchForApproval(request, businessKeys); + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.PASSED); } break; @@ -274,12 +273,12 @@ businessKeys = baseApprovalService.getFailedList(request.getFormId()); //未通过-拒绝 List rejectBusinessKey = baseApprovalService.getFailedRejectList(request.getFormId()); //未通过-驳回 if(!CollectionUtils.isEmpty(businessKeys)){ - list = meterFileMapper.selectBatchForApproval(request, businessKeys); + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.FAILED); } List rejectApprovalList = new ArrayList<>(); if(!CollectionUtils.isEmpty(rejectBusinessKey)){ - List rejectList = meterFileMapper.selectBatchForApproval(request, rejectBusinessKey); + List rejectList = meterFileMapper.selectBatchForApproval(page, request, rejectBusinessKey); rejectApprovalList = handleApprovalListResponse(approvalList, rejectList, ApprovalStatusEnum.FAILED_REJECT); } //合并未通过-拒绝和未通过-驳回 @@ -289,14 +288,40 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = meterFileMapper.selectBatchForApproval(request, businessKeys); + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.CANCELED); } break; + //全部 + //区分管理员和普通用户 + //普通用户获取自己发起的(审批中、已通过、未通过、已取消),管理员获取全部(审批中、已通过、未通过、已取消) + case ApprovalStatusEnum.ALL: + List AllApproveList = baseApprovalService.getAllList(request.getFormId()); + if(!CollectionUtils.isEmpty(AllApproveList)){ + businessKeys = AllApproveList.stream().map(AllApproveDTO::getBusinessKey).collect(Collectors.toList()); + } + if(!CollectionUtils.isEmpty(businessKeys)){ + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); + approvalList = handleAllApprovalListResponse(approvalList, list, AllApproveList); + } + break; } return approvalList; } + private List handleAllApprovalListResponse(List approvalList, List list, List allApproveList) { + Map taskMap = new HashMap<>(); + approvalList = ConvertUtils.sourceToTarget(list, FileApprovalListResponse.class); + allApproveList.forEach(allApprove -> {taskMap.put(allApprove.getBusinessKey(),allApprove.getStatus());}); + //状态补全 + approvalList.forEach(approval -> { + approval.setApprovalStatusName(dictService.getDictNameByCode(MeterDictEnum.APPROVAL_STATUS, taskMap.get(String.valueOf(approval.getId())))); + approval.setApprovalStatus(taskMap.get(String.valueOf(approval.getId()))); + }); + //排序 + return approvalList.stream().sorted(Comparator.comparing(FileApprovalListResponse::getCreateTime).reversed()).collect(Collectors.toList()); + } + private List handleApprovalListResponse(List approvalList, List list, String status){ approvalList = ConvertUtils.sourceToTarget(list, FileApprovalListResponse.class); approvalList.stream().forEach(result -> { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterTraceSupplierServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterTraceSupplierServiceImpl.java index 4f6b6db..321321b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterTraceSupplierServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterTraceSupplierServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.dto.BaseApprovalSubmitRequest; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.meter.*; @@ -38,9 +39,7 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -169,7 +168,7 @@ throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); request.setCreateUserId(user.getId()); - return handleApprovalStatus(request); + return handleApprovalStatus(page, request); } @Override @@ -204,24 +203,24 @@ throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } - private List handleApprovalStatus(TraceSupplierApprovalListRequest request) { + private List handleApprovalStatus(Page page, TraceSupplierApprovalListRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); List list; switch (request.getApprovalStatus()) { //草稿 case ApprovalStatusEnum.DRAFT: - list = traceSupplierMapper.selectDraftListForApproval(request); + list = traceSupplierMapper.selectDraftListForApproval(page, request); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.DRAFT); break; //待审批,该状态维护在flowable中 case ApprovalStatusEnum.TO_BE_APPROVED: List toBeApprovedList = baseApprovalService.getToBeApprovedList(request.getFormId()); if(!CollectionUtils.isEmpty(toBeApprovedList)){ - businessKeys = toBeApprovedList.stream().map(ToBeApprovedDTO::getBusinessKey).collect(Collectors.toList()); + businessKeys = toBeApprovedList.stream().map(ToBeApprovedDTO::getBusinessKey).distinct().collect(Collectors.toList()); } if(!CollectionUtils.isEmpty(businessKeys)){ - list = traceSupplierMapper.selectBatchForApproval(request, businessKeys); + list = traceSupplierMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.TO_BE_APPROVED); //DTO根据业务主键补全taskId approvalList.forEach(approval -> { @@ -239,7 +238,7 @@ case ApprovalStatusEnum.IN_APPROVED: businessKeys = baseApprovalService.getInApprovedList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = traceSupplierMapper.selectBatchForApproval(request, businessKeys); + list = traceSupplierMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.IN_APPROVED); } break; @@ -247,7 +246,7 @@ case ApprovalStatusEnum.PASSED: businessKeys = baseApprovalService.getPassedList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = traceSupplierMapper.selectBatchForApproval(request, businessKeys); + list = traceSupplierMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.PASSED); } break; @@ -256,12 +255,12 @@ businessKeys = baseApprovalService.getFailedList(request.getFormId()); //未通过-拒绝 List rejectBusinessKey = baseApprovalService.getFailedRejectList(request.getFormId()); //未通过-驳回 if(!CollectionUtils.isEmpty(businessKeys)){ - list = traceSupplierMapper.selectBatchForApproval(request, businessKeys); + list = traceSupplierMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.FAILED); } List rejectApprovalList = new ArrayList<>(); if(!CollectionUtils.isEmpty(rejectBusinessKey)){ - List rejectList = traceSupplierMapper.selectBatchForApproval(request, rejectBusinessKey); + List rejectList = traceSupplierMapper.selectBatchForApproval(page, request, rejectBusinessKey); rejectApprovalList = handleApprovalListResponse(approvalList, rejectList, ApprovalStatusEnum.FAILED_REJECT); } //合并未通过-拒绝和未通过-驳回 @@ -271,14 +270,40 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = traceSupplierMapper.selectBatchForApproval(request, businessKeys); + list = traceSupplierMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.CANCELED); } break; + //全部 + //区分管理员和普通用户 + //普通用户获取自己发起的(审批中、已通过、未通过、已取消),管理员获取全部(审批中、已通过、未通过、已取消) + case ApprovalStatusEnum.ALL: + List AllApproveList = baseApprovalService.getAllList(request.getFormId()); + if(!CollectionUtils.isEmpty(AllApproveList)){ + businessKeys = AllApproveList.stream().map(AllApproveDTO::getBusinessKey).collect(Collectors.toList()); + } + if(!CollectionUtils.isEmpty(businessKeys)){ + list = traceSupplierMapper.selectBatchForApproval(page, request, businessKeys); + approvalList = handleAllApprovalListResponse(approvalList, list, AllApproveList); + } + break; } return approvalList; } + private List handleAllApprovalListResponse(List approvalList, List list, List allApproveList) { + Map taskMap = new HashMap<>(); + approvalList = ConvertUtils.sourceToTarget(list, TraceSupplierApprovalListResponse.class); + allApproveList.forEach(allApprove -> {taskMap.put(allApprove.getBusinessKey(),allApprove.getStatus());}); + //状态补全 + approvalList.forEach(approval -> { + approval.setApprovalStatusName(dictService.getDictNameByCode(MeterDictEnum.APPROVAL_STATUS, taskMap.get(String.valueOf(approval.getId())))); + approval.setApprovalStatus(taskMap.get(String.valueOf(approval.getId()))); + }); + //排序 + return approvalList.stream().sorted(Comparator.comparing(TraceSupplierApprovalListResponse::getCreateTime).reversed()).collect(Collectors.toList()); + } + @Override @Transactional public ReturnDTO updateTraceSupplier(MeterTraceSupplier traceSupplier) { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index f5cf538..72c5208 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -29,7 +29,7 @@ * 样品状态(任务收发&任务分发使用,委托书和样品关联表中的状态): * 1:待收入;2:待分发;3:检测中;4:检测完成;5:待归还;6:已归还;7:无需检测;8:已超期 * 实验室检定状态(实验室检测使用,实验室检定信息记录表中的状态): - * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回 + * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回;5:终止(已收入中点击终止更新实验室中待分配和待检测的的状态为已终止) *

* * @author wangpeng diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java new file mode 100644 index 0000000..32fe974 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java @@ -0,0 +1,13 @@ +package com.casic.missiles.enums; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/02/09 16:00 + */ +public interface AssigneeTypeEnum { + //1具体人员 2角色 3部门 + String USER = "1"; + String ROLE = "2"; + String DEPT = "3"; +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 0e2ecd2..18ab69f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; import com.casic.missiles.enums.AssigneeSetTypeEnum; +import com.casic.missiles.enums.AssigneeTypeEnum; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; @@ -92,9 +93,9 @@ JSONObject jsonObject1 = (JSONObject) iterator.next(); String targetId = jsonObject1.getString("targetId"); //1具体人员 2角色 3部门 - if ("1".equals(jsonObject1.getString("type"))) { + if (AssigneeTypeEnum.USER.equals(jsonObject1.getString("type"))) { assigneeList.add(targetId); - } else if ("2".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.ROLE.equals(jsonObject1.getString("type"))) { //按角色查询用户id QueryWrapper ruWrapper = new QueryWrapper<>(); ruWrapper.eq("ROLEID", targetId); @@ -103,7 +104,7 @@ List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); assigneeList.addAll(collect); } - } else if ("3".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id List> list = userMapper.selectUsers(null, null, null, targetId); if (!CollectionUtils.isEmpty(list)) { diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java index 8d70c94..e1efeaf 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java @@ -26,7 +26,7 @@ List selectApprovalList(Page page, @Param("request") FileApprovalListRequest request); - List selectDraftListForApproval(@Param("request") FileApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") FileApprovalListRequest request); - List selectBatchForApproval(@Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java index b5cfc4e..220e097 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java @@ -2,7 +2,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.TraceSupplierApprovalListRequest; +import com.casic.missiles.dto.meter.TraceSupplierApprovalListResponse; import com.casic.missiles.dto.meter.TraceSupplierDetailResponse; import com.casic.missiles.model.meter.MeterTraceSupplier; import org.apache.ibatis.annotations.Param; @@ -23,7 +25,7 @@ TraceSupplierDetailResponse selectTraceSupplierById(@Param("id") Long id); - List selectDraftListForApproval(@Param("request") TraceSupplierApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request); - List selectBatchForApproval(@Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); + List selectBatchForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java index 9bd6254..f2864e8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java @@ -2,8 +2,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.MeterWorkbenchResponse; import com.casic.missiles.dto.meter.TrainPlanApprovalListRequest; +import com.casic.missiles.dto.meter.TrainPlanApprovalListResponse; import com.casic.missiles.dto.meter.TrainPlanDetailResponse; import com.casic.missiles.model.meter.MeterTrainPlan; import org.apache.ibatis.annotations.Param; @@ -26,7 +28,7 @@ List meterTrainStatistic(@Param("startTime")String startTime, @Param("endTime")String endTime); - List selectDraftListForApproval(@Param("request")TrainPlanApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request); - List selectBatchForApproval(@Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java new file mode 100644 index 0000000..9edcda0 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.flowable; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/10 12:27 + */ +@Data +public class AllApproveDTO { + private String businessKey; + private String status; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java index 11420e5..b16ae67 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java @@ -17,6 +17,6 @@ private String processInstanceId; @ApiModelProperty("审批结论/意见") - @NotBlank(message = "审批结论/意见不能为空") +// @NotBlank(message = "审批结论/意见不能为空") private String comments; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java index b32478b..2866e3b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java @@ -1,6 +1,7 @@ package com.casic.missiles.service; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import java.util.List; @@ -25,4 +26,6 @@ List getCanceledList(String formId); List getFailedRejectList(String formId); + + List getAllList(String formId); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java index 447f9a1..7cca60a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -55,19 +56,17 @@ @Transactional public ReturnDTO processSubmit(String formId, Long id){ - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("该表单不存在对应的流程定义,formId:{}", formId); return ReturnUtil.failed("流程提交处理失败,该表单不存在对应的流程定义,请重新提交"); } //流程发起人 - /*AuthUser user = ShiroKit.getUser(); + AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); - });*/ - Authentication.setAuthenticatedUserId(String.valueOf(0)); + }); + Authentication.setAuthenticatedUserId(String.valueOf(user.getId())); //根据流程key(SystemFlowForm中的procDefId)获取流程id ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(flowForm.getProcDefId()).latestVersion().singleResult(); @@ -99,9 +98,7 @@ public List getCanceledList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询已取消的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -109,27 +106,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据业务状态、流程定义查询该业务所有已取消的流程实例-拒绝 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .deleted() //拒绝的要执行删除操作,也要设置业务状态,此处可同时设置为条件进行查询 - .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) //对应取消按钮中设置的业务状态 - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getCanceledProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务已取消的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getCanceledProcessInstancesForStarted(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -137,9 +120,7 @@ public List getFailedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询未通过的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -147,44 +128,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(true){ - //根据业务状态、流程定义查询该业务所有未通过的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) -// .deleted() //拒绝的审批流程要执行删除操作,也要设置业务状态,所以使用下行的状态可满足拒绝的查询 - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) //todo:拒绝按钮已增加业务状态,需验证不加deleted查询的是未删除的还是所有的 - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .finished() //审批者已完成审批 - .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询未通过的流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(task.getProcessInstanceId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) - .singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -193,9 +143,7 @@ @Override public List getFailedRejectList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询未通过-驳回的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -203,52 +151,20 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据业务状态、流程定义查询该业务所有未通过的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED_REJECT); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .finished() //审批者已完成审批 - .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询未通过的流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(task.getProcessInstanceId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED_REJECT); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; } public List getPassedList(String formId) { - //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询已通过的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -256,43 +172,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据流程定义查询该业务所有已完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .finished() - .notDeleted() - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getPassedProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据流程定义、登录用户id查询该业务已完成的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .finished() - .notDeleted() - .startedBy(String.valueOf(user.getId())) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据流程定义、登录用户id获取该业务流程的实例结束的已办任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .processFinished() //todo:此参数若表示实例已完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .notDeleted() - .processInstanceId(task.getProcessInstanceId()).singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getPassedProcessInstancesForStartedAndAssignee(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -300,9 +186,7 @@ public List getInApprovedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询审批中的任务,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -310,32 +194,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据流程定义查询该业务所有未完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) //这里使用流程定义,因为更新流程定义不会更新定义id,会更新部署id -// .deploymentId(flowForm.getDeployId()) - .or() - .unfinished() - .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 - .endOr() - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getInApprovedProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据流程定义、登录用户id查询该业务未完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .or() - .unfinished() - .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 - .endOr() - .startedBy(String.valueOf(user.getId())) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getInApprovedProcessInstancesForStarted(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -343,9 +208,7 @@ public List getToBeApprovedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询待审批的任务,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -380,6 +243,219 @@ //返回任务id和关联业务主键id return toBeApprovedDTOs; + } + @Override + public List getAllList(String formId) { + SystemFlowForm flowForm = getSystemFlowForm(formId); + if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { + log.error("查询全部的流程,该表单不存在对应的流程定义,formId:{}", formId); + return new ArrayList<>(); + } + List list = new ArrayList<>(); + //管理员or其他用户 + if(ShiroKit.isAdmin()){ + //审批中实例 + getInApprovedProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.IN_APPROVED); + }); + //已通过实例 + getPassedProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.PASSED); + });; + //未通过-拒绝实例 + getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED_REJECT).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED_REJECT); + }); + //未通过实例 + getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED); + }); + //已取消实例 + getCanceledProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.CANCELED); + }); + }else{ + AuthUser user = ShiroKit.getUser(); + Assert.isFalse(Objects.isNull(user), () -> { + throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); + }); + //审批中实例 + getInApprovedProcessInstancesForStarted(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.IN_APPROVED); + }); + //已通过实例 + getPassedProcessInstancesForStartedAndAssignee(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.PASSED); + }); + //未通过-拒绝实例 + getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED_REJECT).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED_REJECT); + }); + //未通过实例 + getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED); + }); + //已取消实例 + getCanceledProcessInstancesForStarted(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.CANCELED); + }); + } + return list; + } + + private void enrichList(List list, HistoricProcessInstance instance, String status) { + AllApproveDTO allApproveDTO = new AllApproveDTO(); + allApproveDTO.setBusinessKey(instance.getBusinessKey()); + allApproveDTO.setStatus(status); + list.add(allApproveDTO); + } + + private SystemFlowForm getSystemFlowForm(String formId) { + //根据业务表单id获取流程定义 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("form_id", formId); + return flowFormService.getOne(wrapper); + } + + private List getPassedProcessInstancesForStartedAndAssignee(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances; + //根据流程定义、登录用户id查询该业务已完成的流程实例(作为发起者) + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .finished() + .notDeleted() + .startedBy(String.valueOf(user.getId())) + .orderByProcessInstanceStartTime().desc() + .list(); + //根据流程定义、登录用户id获取该业务流程的实例结束的已办任务(作为审批者) + List tasks = historyService.createHistoricTaskInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .taskAssignee(String.valueOf(user.getId())) + .processFinished() //todo:此参数若表示实例已完成,则这里使用正确,需验证 + .orderByTaskCreateTime().desc() + .list(); + //根据作为审批者的任务查询流程实例 + for (HistoricTaskInstance task : tasks) { + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .notDeleted() + .processInstanceId(task.getProcessInstanceId()).singleResult(); + historicProcessInstances.add(historicProcessInstance); + } + return historicProcessInstances; + } + + private List getInApprovedProcessInstances(SystemFlowForm flowForm) { + List historicProcessInstances; + //根据流程定义查询该业务所有未完成的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) //这里使用流程定义,因为更新流程定义不会更新定义id,会更新部署id +// .deploymentId(flowForm.getDeployId()) + .or() + .unfinished() + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getInApprovedProcessInstancesForStarted(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances; + //根据流程定义、登录用户id查询该业务未完成的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .or() + .unfinished() + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() + .startedBy(String.valueOf(user.getId())) + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getPassedProcessInstances(SystemFlowForm flowForm) { + //根据流程定义查询该业务所有已完成的流程实例 + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .finished() + .notDeleted() + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getFailedProcessInstances(SystemFlowForm flowForm, String failStatus) { + //根据业务状态、流程定义查询该业务所有未通过的流程实例 + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) +// .deleted() //拒绝的审批流程要执行删除操作,也要设置业务状态,所以使用下行的状态可满足拒绝的查询 + .processInstanceBusinessStatus(failStatus) //todo:拒绝按钮已增加业务状态,需验证不加deleted查询的是未删除的还是所有的 + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getFailedProcessInstancesForStartedAndAssignee(SystemFlowForm flowForm, AuthUser user, String failStatus) { + //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .startedBy(String.valueOf(user.getId())) + .processInstanceBusinessStatus(failStatus) + .orderByProcessInstanceStartTime().desc() + .list(); + //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) + List tasks = historyService.createHistoricTaskInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .taskAssignee(String.valueOf(user.getId())) + .finished() //审批者已完成审批 + .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 + .orderByTaskCreateTime().desc() + .list(); + //根据作为审批者的任务查询未通过的流程实例 + for (HistoricTaskInstance task : tasks) { + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(task.getProcessInstanceId()) + .processInstanceBusinessStatus(failStatus) + .singleResult(); + historicProcessInstances.add(historicProcessInstance); + } + return historicProcessInstances; + } + + private List getCanceledProcessInstancesForStarted(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances;//根据业务状态、流程定义、登录用户id查询该业务已取消的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .startedBy(String.valueOf(user.getId())) + .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getCanceledProcessInstances(SystemFlowForm flowForm) { + List historicProcessInstances; + //根据业务状态、流程定义查询该业务所有已取消的流程实例-拒绝 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .deleted() //取消的要执行删除操作,也要设置业务状态,此处可同时设置为条件进行查询 + .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) //对应取消按钮中设置的业务状态 + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java index bef098c..23a2913 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java @@ -1,6 +1,5 @@ package com.casic.missiles.service.Impl.equipment; -import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.service.IBaseExportService; @@ -10,6 +9,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.AcceptanceCheck; import com.casic.missiles.dto.equipment.AcceptanceCheckRequest; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.EquipmentApplyTypeEnum; @@ -34,10 +34,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentAcceptanceCheckService") @@ -99,8 +96,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -130,8 +132,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ equipmentApply.setTaskId(taskMap.get(equipmentApply.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + equipmentApply.setApprovalStatus(taskMap.get(String.valueOf(equipmentApply.getId()))); + } DictCodeUtils.convertDictCodeToName(equipmentApply); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(AcceptanceCheck::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java index 5f08d09..57bb3a9 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java @@ -10,10 +10,11 @@ import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentApplyProcessRequest; import com.casic.missiles.dto.equipment.EquipmentApplyRequest; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; -import com.casic.missiles.dto.equipment.EquipmentApplyProcessRequest; import com.casic.missiles.enums.*; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.equipment.EquipmentApplyEquipmentMapper; @@ -24,10 +25,10 @@ import com.casic.missiles.model.equipment.EquipmentFixedAssets; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.service.IBaseApprovalService; -import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.service.equipment.IEquipmentApplyEquipmentService; import com.casic.missiles.service.equipment.IEquipmentApplyFileService; import com.casic.missiles.service.equipment.IEquipmentApplyService; +import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import org.apache.commons.lang3.StringUtils; @@ -37,10 +38,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentApplyService") @@ -94,8 +92,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -122,8 +125,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ equipmentApply.setTaskId(taskMap.get(equipmentApply.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + equipmentApply.setApprovalStatus(taskMap.get(String.valueOf(equipmentApply.getId()))); + } DictCodeUtils.convertDictCodeToName(equipmentApply); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(EquipmentApply::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java index 4fe93a6..2d55553 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java @@ -9,6 +9,7 @@ import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.equipment.StandardEquipmentApplyRequest; @@ -108,8 +109,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -133,8 +139,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ item.setTaskId(taskMap.get(item.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + item.setApprovalStatus(taskMap.get(String.valueOf(item.getId()))); + } DictCodeUtils.convertDictCodeToName(item); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(EquipmentStandardApply::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java index 42102df..b1b937c 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java @@ -6,8 +6,9 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.equipment.StateManageRequest; -import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.equipment.StateManageResponse; +import com.casic.missiles.dto.flowable.AllApproveDTO; +import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.mapper.equipment.EquipmentApplyFileMapper; @@ -21,10 +22,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentStateManageService") @@ -72,8 +70,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -97,10 +100,14 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ item.setTaskId(taskMap.get(item.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + item.setApprovalStatus(taskMap.get(String.valueOf(item.getId()))); + } DictCodeUtils.convertDictCodeToName(item); } - for (StateManageResponse stateManageResponse : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(stateManageResponse); + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(StateManageResponse::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/flowable/ApprovalOperateServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/flowable/ApprovalOperateServiceImpl.java index 025f6eb..16210c6 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/flowable/ApprovalOperateServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/flowable/ApprovalOperateServiceImpl.java @@ -192,7 +192,10 @@ HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() .processInstanceId(request.getProcessInstanceId()) .startedBy(String.valueOf(user.getId())) + .or() .unfinished() //审批中的流程才能撤回 + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() .singleResult(); if(Objects.isNull(historicProcessInstance)){ log.error("该用户无审批中的流程,userId:{},processInstanceId:{}", user.getId(), request.getProcessInstanceId()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterFileServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterFileServiceImpl.java index 7d94027..6eeebd8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterFileServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterFileServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.dto.BaseApprovalSubmitRequest; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.meter.FileApprovalListRequest; @@ -41,9 +42,7 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -185,7 +184,7 @@ throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); request.setCreateUserId(user.getId()); - return handleApprovalStatus(request); + return handleApprovalStatus(page, request); } @Override @@ -222,7 +221,7 @@ throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } - private List handleApprovalStatus(FileApprovalListRequest request) { + private List handleApprovalStatus(Page page, FileApprovalListRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); List list; @@ -231,7 +230,7 @@ switch (request.getApprovalStatus()) { //草稿 case ApprovalStatusEnum.DRAFT: - list = meterFileMapper.selectDraftListForApproval(request); + list = meterFileMapper.selectDraftListForApproval(page, request); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.DRAFT); break; //待审批,该状态维护在flowable中 @@ -241,7 +240,7 @@ businessKeys = toBeApprovedList.stream().map(ToBeApprovedDTO::getBusinessKey).collect(Collectors.toList()); } if(!CollectionUtils.isEmpty(businessKeys)){ - list = meterFileMapper.selectBatchForApproval(request, businessKeys); + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.TO_BE_APPROVED); //DTO根据业务主键补全taskId approvalList.forEach(approval -> { @@ -257,7 +256,7 @@ case ApprovalStatusEnum.IN_APPROVED: businessKeys = baseApprovalService.getInApprovedList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = meterFileMapper.selectBatchForApproval(request, businessKeys); + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.IN_APPROVED); } break; @@ -265,7 +264,7 @@ case ApprovalStatusEnum.PASSED: businessKeys = baseApprovalService.getPassedList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = meterFileMapper.selectBatchForApproval(request, businessKeys); + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.PASSED); } break; @@ -274,12 +273,12 @@ businessKeys = baseApprovalService.getFailedList(request.getFormId()); //未通过-拒绝 List rejectBusinessKey = baseApprovalService.getFailedRejectList(request.getFormId()); //未通过-驳回 if(!CollectionUtils.isEmpty(businessKeys)){ - list = meterFileMapper.selectBatchForApproval(request, businessKeys); + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.FAILED); } List rejectApprovalList = new ArrayList<>(); if(!CollectionUtils.isEmpty(rejectBusinessKey)){ - List rejectList = meterFileMapper.selectBatchForApproval(request, rejectBusinessKey); + List rejectList = meterFileMapper.selectBatchForApproval(page, request, rejectBusinessKey); rejectApprovalList = handleApprovalListResponse(approvalList, rejectList, ApprovalStatusEnum.FAILED_REJECT); } //合并未通过-拒绝和未通过-驳回 @@ -289,14 +288,40 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = meterFileMapper.selectBatchForApproval(request, businessKeys); + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.CANCELED); } break; + //全部 + //区分管理员和普通用户 + //普通用户获取自己发起的(审批中、已通过、未通过、已取消),管理员获取全部(审批中、已通过、未通过、已取消) + case ApprovalStatusEnum.ALL: + List AllApproveList = baseApprovalService.getAllList(request.getFormId()); + if(!CollectionUtils.isEmpty(AllApproveList)){ + businessKeys = AllApproveList.stream().map(AllApproveDTO::getBusinessKey).collect(Collectors.toList()); + } + if(!CollectionUtils.isEmpty(businessKeys)){ + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); + approvalList = handleAllApprovalListResponse(approvalList, list, AllApproveList); + } + break; } return approvalList; } + private List handleAllApprovalListResponse(List approvalList, List list, List allApproveList) { + Map taskMap = new HashMap<>(); + approvalList = ConvertUtils.sourceToTarget(list, FileApprovalListResponse.class); + allApproveList.forEach(allApprove -> {taskMap.put(allApprove.getBusinessKey(),allApprove.getStatus());}); + //状态补全 + approvalList.forEach(approval -> { + approval.setApprovalStatusName(dictService.getDictNameByCode(MeterDictEnum.APPROVAL_STATUS, taskMap.get(String.valueOf(approval.getId())))); + approval.setApprovalStatus(taskMap.get(String.valueOf(approval.getId()))); + }); + //排序 + return approvalList.stream().sorted(Comparator.comparing(FileApprovalListResponse::getCreateTime).reversed()).collect(Collectors.toList()); + } + private List handleApprovalListResponse(List approvalList, List list, String status){ approvalList = ConvertUtils.sourceToTarget(list, FileApprovalListResponse.class); approvalList.stream().forEach(result -> { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterTraceSupplierServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterTraceSupplierServiceImpl.java index 4f6b6db..321321b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterTraceSupplierServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterTraceSupplierServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.dto.BaseApprovalSubmitRequest; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.meter.*; @@ -38,9 +39,7 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -169,7 +168,7 @@ throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); request.setCreateUserId(user.getId()); - return handleApprovalStatus(request); + return handleApprovalStatus(page, request); } @Override @@ -204,24 +203,24 @@ throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } - private List handleApprovalStatus(TraceSupplierApprovalListRequest request) { + private List handleApprovalStatus(Page page, TraceSupplierApprovalListRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); List list; switch (request.getApprovalStatus()) { //草稿 case ApprovalStatusEnum.DRAFT: - list = traceSupplierMapper.selectDraftListForApproval(request); + list = traceSupplierMapper.selectDraftListForApproval(page, request); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.DRAFT); break; //待审批,该状态维护在flowable中 case ApprovalStatusEnum.TO_BE_APPROVED: List toBeApprovedList = baseApprovalService.getToBeApprovedList(request.getFormId()); if(!CollectionUtils.isEmpty(toBeApprovedList)){ - businessKeys = toBeApprovedList.stream().map(ToBeApprovedDTO::getBusinessKey).collect(Collectors.toList()); + businessKeys = toBeApprovedList.stream().map(ToBeApprovedDTO::getBusinessKey).distinct().collect(Collectors.toList()); } if(!CollectionUtils.isEmpty(businessKeys)){ - list = traceSupplierMapper.selectBatchForApproval(request, businessKeys); + list = traceSupplierMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.TO_BE_APPROVED); //DTO根据业务主键补全taskId approvalList.forEach(approval -> { @@ -239,7 +238,7 @@ case ApprovalStatusEnum.IN_APPROVED: businessKeys = baseApprovalService.getInApprovedList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = traceSupplierMapper.selectBatchForApproval(request, businessKeys); + list = traceSupplierMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.IN_APPROVED); } break; @@ -247,7 +246,7 @@ case ApprovalStatusEnum.PASSED: businessKeys = baseApprovalService.getPassedList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = traceSupplierMapper.selectBatchForApproval(request, businessKeys); + list = traceSupplierMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.PASSED); } break; @@ -256,12 +255,12 @@ businessKeys = baseApprovalService.getFailedList(request.getFormId()); //未通过-拒绝 List rejectBusinessKey = baseApprovalService.getFailedRejectList(request.getFormId()); //未通过-驳回 if(!CollectionUtils.isEmpty(businessKeys)){ - list = traceSupplierMapper.selectBatchForApproval(request, businessKeys); + list = traceSupplierMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.FAILED); } List rejectApprovalList = new ArrayList<>(); if(!CollectionUtils.isEmpty(rejectBusinessKey)){ - List rejectList = traceSupplierMapper.selectBatchForApproval(request, rejectBusinessKey); + List rejectList = traceSupplierMapper.selectBatchForApproval(page, request, rejectBusinessKey); rejectApprovalList = handleApprovalListResponse(approvalList, rejectList, ApprovalStatusEnum.FAILED_REJECT); } //合并未通过-拒绝和未通过-驳回 @@ -271,14 +270,40 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = traceSupplierMapper.selectBatchForApproval(request, businessKeys); + list = traceSupplierMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.CANCELED); } break; + //全部 + //区分管理员和普通用户 + //普通用户获取自己发起的(审批中、已通过、未通过、已取消),管理员获取全部(审批中、已通过、未通过、已取消) + case ApprovalStatusEnum.ALL: + List AllApproveList = baseApprovalService.getAllList(request.getFormId()); + if(!CollectionUtils.isEmpty(AllApproveList)){ + businessKeys = AllApproveList.stream().map(AllApproveDTO::getBusinessKey).collect(Collectors.toList()); + } + if(!CollectionUtils.isEmpty(businessKeys)){ + list = traceSupplierMapper.selectBatchForApproval(page, request, businessKeys); + approvalList = handleAllApprovalListResponse(approvalList, list, AllApproveList); + } + break; } return approvalList; } + private List handleAllApprovalListResponse(List approvalList, List list, List allApproveList) { + Map taskMap = new HashMap<>(); + approvalList = ConvertUtils.sourceToTarget(list, TraceSupplierApprovalListResponse.class); + allApproveList.forEach(allApprove -> {taskMap.put(allApprove.getBusinessKey(),allApprove.getStatus());}); + //状态补全 + approvalList.forEach(approval -> { + approval.setApprovalStatusName(dictService.getDictNameByCode(MeterDictEnum.APPROVAL_STATUS, taskMap.get(String.valueOf(approval.getId())))); + approval.setApprovalStatus(taskMap.get(String.valueOf(approval.getId()))); + }); + //排序 + return approvalList.stream().sorted(Comparator.comparing(TraceSupplierApprovalListResponse::getCreateTime).reversed()).collect(Collectors.toList()); + } + @Override @Transactional public ReturnDTO updateTraceSupplier(MeterTraceSupplier traceSupplier) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterTrainPlanServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterTrainPlanServiceImpl.java index 6e8f296..3dbecc0 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterTrainPlanServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterTrainPlanServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.dto.BaseApprovalSubmitRequest; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.meter.*; @@ -40,9 +41,7 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -153,7 +152,7 @@ throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); request.setCreateUserId(user.getId()); - return handleApprovalStatus(request); + return handleApprovalStatus(page, request); } @Override @@ -245,7 +244,7 @@ return ReturnUtil.success(planResponse); } - private List handleApprovalStatus(TrainPlanApprovalListRequest request) { + private List handleApprovalStatus(Page page, TrainPlanApprovalListRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); List list; @@ -254,7 +253,7 @@ switch (request.getApprovalStatus()) { //草稿 case ApprovalStatusEnum.DRAFT: - list = trainPlanMapper.selectDraftListForApproval(request); + list = trainPlanMapper.selectDraftListForApproval(page, request); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.DRAFT); break; //待审批,该状态维护在flowable中 @@ -264,7 +263,7 @@ businessKeys = toBeApprovedList.stream().map(ToBeApprovedDTO::getBusinessKey).collect(Collectors.toList()); } if(!CollectionUtils.isEmpty(businessKeys)){ - list = trainPlanMapper.selectBatchForApproval(request, businessKeys); + list = trainPlanMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.TO_BE_APPROVED); //DTO根据业务主键补全taskId approvalList.forEach(approval -> { @@ -280,7 +279,7 @@ case ApprovalStatusEnum.IN_APPROVED: businessKeys = baseApprovalService.getInApprovedList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = trainPlanMapper.selectBatchForApproval(request, businessKeys); + list = trainPlanMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.IN_APPROVED); } break; @@ -288,7 +287,7 @@ case ApprovalStatusEnum.PASSED: businessKeys = baseApprovalService.getPassedList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = trainPlanMapper.selectBatchForApproval(request, businessKeys); + list = trainPlanMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.PASSED); } break; @@ -297,12 +296,12 @@ businessKeys = baseApprovalService.getFailedList(request.getFormId()); //未通过-拒绝 List rejectBusinessKey = baseApprovalService.getFailedRejectList(request.getFormId()); //未通过-驳回 if(!CollectionUtils.isEmpty(businessKeys)){ - list = trainPlanMapper.selectBatchForApproval(request, businessKeys); + list = trainPlanMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.FAILED); } List rejectApprovalList = new ArrayList<>(); if(!CollectionUtils.isEmpty(rejectBusinessKey)){ - List rejectList = trainPlanMapper.selectBatchForApproval(request, rejectBusinessKey); + List rejectList = trainPlanMapper.selectBatchForApproval(page, request, rejectBusinessKey); rejectApprovalList = handleApprovalListResponse(approvalList, rejectList, ApprovalStatusEnum.FAILED_REJECT); } //合并未通过-拒绝和未通过-驳回 @@ -312,14 +311,38 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = trainPlanMapper.selectBatchForApproval(request, businessKeys); + list = trainPlanMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.CANCELED); } break; + //全部 + case ApprovalStatusEnum.ALL: + List AllApproveList = baseApprovalService.getAllList(request.getFormId()); + if(!CollectionUtils.isEmpty(AllApproveList)){ + businessKeys = AllApproveList.stream().map(AllApproveDTO::getBusinessKey).collect(Collectors.toList()); + } + if(!CollectionUtils.isEmpty(businessKeys)){ + list = trainPlanMapper.selectBatchForApproval(page, request, businessKeys); + approvalList = handleAllApprovalListResponse(approvalList, list, AllApproveList); + } + break; } return approvalList; } + private List handleAllApprovalListResponse(List approvalList, List list, List allApproveList) { + Map taskMap = new HashMap<>(); + approvalList = ConvertUtils.sourceToTarget(list, TrainPlanApprovalListResponse.class); + allApproveList.forEach(allApprove -> {taskMap.put(allApprove.getBusinessKey(),allApprove.getStatus());}); + //状态补全 + approvalList.forEach(approval -> { + approval.setApprovalStatusName(dictService.getDictNameByCode(MeterDictEnum.APPROVAL_STATUS, taskMap.get(String.valueOf(approval.getId())))); + approval.setApprovalStatus(taskMap.get(String.valueOf(approval.getId()))); + }); + //排序 + return approvalList.stream().sorted(Comparator.comparing(TrainPlanApprovalListResponse::getCreateTime).reversed()).collect(Collectors.toList()); + } + private List handleApprovalListResponse(List approvalList, List list, String status){ approvalList = ConvertUtils.sourceToTarget(list, TrainPlanApprovalListResponse.class); approvalList.stream().forEach(result -> { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index f5cf538..72c5208 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -29,7 +29,7 @@ * 样品状态(任务收发&任务分发使用,委托书和样品关联表中的状态): * 1:待收入;2:待分发;3:检测中;4:检测完成;5:待归还;6:已归还;7:无需检测;8:已超期 * 实验室检定状态(实验室检测使用,实验室检定信息记录表中的状态): - * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回 + * 1:待分配(负责人);2:待检测(检定人);3:检测完成;4:退回;5:终止(已收入中点击终止更新实验室中待分配和待检测的的状态为已终止) *

* * @author wangpeng diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java new file mode 100644 index 0000000..32fe974 --- /dev/null +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/AssigneeTypeEnum.java @@ -0,0 +1,13 @@ +package com.casic.missiles.enums; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/02/09 16:00 + */ +public interface AssigneeTypeEnum { + //1具体人员 2角色 3部门 + String USER = "1"; + String ROLE = "2"; + String DEPT = "3"; +} diff --git a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java index 0e2ecd2..18ab69f 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/listeners/flowable/CounterSignListener.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.toolkit.SqlRunner; import com.casic.missiles.enums.AssigneeSetTypeEnum; +import com.casic.missiles.enums.AssigneeTypeEnum; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; import com.casic.missiles.modular.system.dao.DeptMapper; @@ -92,9 +93,9 @@ JSONObject jsonObject1 = (JSONObject) iterator.next(); String targetId = jsonObject1.getString("targetId"); //1具体人员 2角色 3部门 - if ("1".equals(jsonObject1.getString("type"))) { + if (AssigneeTypeEnum.USER.equals(jsonObject1.getString("type"))) { assigneeList.add(targetId); - } else if ("2".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.ROLE.equals(jsonObject1.getString("type"))) { //按角色查询用户id QueryWrapper ruWrapper = new QueryWrapper<>(); ruWrapper.eq("ROLEID", targetId); @@ -103,7 +104,7 @@ List collect = ruRelations.stream().map(RuRelation::getUserId).map(x -> x + "").collect(Collectors.toList()); assigneeList.addAll(collect); } - } else if ("3".equals(jsonObject1.getString("type"))) { + } else if (AssigneeTypeEnum.DEPT.equals(jsonObject1.getString("type"))) { //按部门查询用户id List> list = userMapper.selectUsers(null, null, null, targetId); if (!CollectionUtils.isEmpty(list)) { diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java index 8d70c94..e1efeaf 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterFileMapper.java @@ -26,7 +26,7 @@ List selectApprovalList(Page page, @Param("request") FileApprovalListRequest request); - List selectDraftListForApproval(@Param("request") FileApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") FileApprovalListRequest request); - List selectBatchForApproval(@Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")FileApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java index b5cfc4e..220e097 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTraceSupplierMapper.java @@ -2,7 +2,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.TraceSupplierApprovalListRequest; +import com.casic.missiles.dto.meter.TraceSupplierApprovalListResponse; import com.casic.missiles.dto.meter.TraceSupplierDetailResponse; import com.casic.missiles.model.meter.MeterTraceSupplier; import org.apache.ibatis.annotations.Param; @@ -23,7 +25,7 @@ TraceSupplierDetailResponse selectTraceSupplierById(@Param("id") Long id); - List selectDraftListForApproval(@Param("request") TraceSupplierApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request); - List selectBatchForApproval(@Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); + List selectBatchForApproval(Page page, @Param("request") TraceSupplierApprovalListRequest request, @Param("businessKey") List businessKey); } diff --git a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java index 9bd6254..f2864e8 100644 --- a/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java +++ b/casic-metering-dao/src/main/java/com/casic/missiles/mapper/meter/MeterTrainPlanMapper.java @@ -2,8 +2,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.dto.meter.MeterWorkbenchResponse; import com.casic.missiles.dto.meter.TrainPlanApprovalListRequest; +import com.casic.missiles.dto.meter.TrainPlanApprovalListResponse; import com.casic.missiles.dto.meter.TrainPlanDetailResponse; import com.casic.missiles.model.meter.MeterTrainPlan; import org.apache.ibatis.annotations.Param; @@ -26,7 +28,7 @@ List meterTrainStatistic(@Param("startTime")String startTime, @Param("endTime")String endTime); - List selectDraftListForApproval(@Param("request")TrainPlanApprovalListRequest request); + List selectDraftListForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request); - List selectBatchForApproval(@Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); + List selectBatchForApproval(Page page, @Param("request")TrainPlanApprovalListRequest request, @Param("businessKey")List businessKey); } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java new file mode 100644 index 0000000..9edcda0 --- /dev/null +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/AllApproveDTO.java @@ -0,0 +1,14 @@ +package com.casic.missiles.dto.flowable; + +import lombok.Data; + +/** + * @Description: + * @Author: wangpeng + * @Date: 2023/2/10 12:27 + */ +@Data +public class AllApproveDTO { + private String businessKey; + private String status; +} diff --git a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java index 11420e5..b16ae67 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/dto/flowable/ApprovalRevokeRequest.java @@ -17,6 +17,6 @@ private String processInstanceId; @ApiModelProperty("审批结论/意见") - @NotBlank(message = "审批结论/意见不能为空") +// @NotBlank(message = "审批结论/意见不能为空") private String comments; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java index b32478b..2866e3b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/IBaseApprovalService.java @@ -1,6 +1,7 @@ package com.casic.missiles.service; import com.casic.missiles.dto.ReturnDTO; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import java.util.List; @@ -25,4 +26,6 @@ List getCanceledList(String formId); List getFailedRejectList(String formId); + + List getAllList(String formId); } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java index 447f9a1..7cca60a 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/BaseApprovalServiceImpl.java @@ -7,6 +7,7 @@ import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.BusinessExceptionEnum; @@ -55,19 +56,17 @@ @Transactional public ReturnDTO processSubmit(String formId, Long id){ - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("该表单不存在对应的流程定义,formId:{}", formId); return ReturnUtil.failed("流程提交处理失败,该表单不存在对应的流程定义,请重新提交"); } //流程发起人 - /*AuthUser user = ShiroKit.getUser(); + AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); - });*/ - Authentication.setAuthenticatedUserId(String.valueOf(0)); + }); + Authentication.setAuthenticatedUserId(String.valueOf(user.getId())); //根据流程key(SystemFlowForm中的procDefId)获取流程id ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey(flowForm.getProcDefId()).latestVersion().singleResult(); @@ -99,9 +98,7 @@ public List getCanceledList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询已取消的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -109,27 +106,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据业务状态、流程定义查询该业务所有已取消的流程实例-拒绝 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .deleted() //拒绝的要执行删除操作,也要设置业务状态,此处可同时设置为条件进行查询 - .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) //对应取消按钮中设置的业务状态 - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getCanceledProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务已取消的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getCanceledProcessInstancesForStarted(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -137,9 +120,7 @@ public List getFailedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询未通过的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -147,44 +128,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(true){ - //根据业务状态、流程定义查询该业务所有未通过的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) -// .deleted() //拒绝的审批流程要执行删除操作,也要设置业务状态,所以使用下行的状态可满足拒绝的查询 - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) //todo:拒绝按钮已增加业务状态,需验证不加deleted查询的是未删除的还是所有的 - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .finished() //审批者已完成审批 - .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询未通过的流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(task.getProcessInstanceId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED) - .singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -193,9 +143,7 @@ @Override public List getFailedRejectList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询未通过-驳回的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -203,52 +151,20 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据业务状态、流程定义查询该业务所有未通过的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED_REJECT); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .startedBy(String.valueOf(user.getId())) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .finished() //审批者已完成审批 - .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询未通过的流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .processInstanceId(task.getProcessInstanceId()) - .processInstanceBusinessStatus(ApprovalStatusEnum.FAILED_REJECT) - .singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED_REJECT); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; } public List getPassedList(String formId) { - //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询已通过的流程,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -256,43 +172,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据流程定义查询该业务所有已完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .finished() - .notDeleted() - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getPassedProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据流程定义、登录用户id查询该业务已完成的流程实例(作为发起者) - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .finished() - .notDeleted() - .startedBy(String.valueOf(user.getId())) - .orderByProcessInstanceStartTime().desc() - .list(); - //根据流程定义、登录用户id获取该业务流程的实例结束的已办任务(作为审批者) - List tasks = historyService.createHistoricTaskInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .taskAssignee(String.valueOf(user.getId())) - .processFinished() //todo:此参数若表示实例已完成,则这里使用正确,需验证 - .orderByTaskCreateTime().desc() - .list(); - //根据作为审批者的任务查询流程实例 - for (HistoricTaskInstance task : tasks) { - HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() - .notDeleted() - .processInstanceId(task.getProcessInstanceId()).singleResult(); - historicProcessInstances.add(historicProcessInstance); - } + historicProcessInstances = getPassedProcessInstancesForStartedAndAssignee(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -300,9 +186,7 @@ public List getInApprovedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询审批中的任务,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -310,32 +194,13 @@ List historicProcessInstances = new ArrayList<>(); //管理员or其他用户 if(ShiroKit.isAdmin()){ - //根据流程定义查询该业务所有未完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) //这里使用流程定义,因为更新流程定义不会更新定义id,会更新部署id -// .deploymentId(flowForm.getDeployId()) - .or() - .unfinished() - .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 - .endOr() - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getInApprovedProcessInstances(flowForm); }else{ AuthUser user = ShiroKit.getUser(); Assert.isFalse(Objects.isNull(user), () -> { throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); - //根据流程定义、登录用户id查询该业务未完成的流程实例 - historicProcessInstances = historyService.createHistoricProcessInstanceQuery() - .processDefinitionKey(flowForm.getProcDefId()) -// .deploymentId(flowForm.getDeployId()) - .or() - .unfinished() - .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 - .endOr() - .startedBy(String.valueOf(user.getId())) - .orderByProcessInstanceStartTime().desc() - .list(); + historicProcessInstances = getInApprovedProcessInstancesForStarted(flowForm, user); } List businessKeys = historicProcessInstances.stream().map(HistoricProcessInstance::getBusinessKey).collect(Collectors.toList()); return businessKeys; @@ -343,9 +208,7 @@ public List getToBeApprovedList(String formId) { //根据业务表单id获取流程定义 - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("form_id", formId); - SystemFlowForm flowForm = flowFormService.getOne(wrapper); + SystemFlowForm flowForm = getSystemFlowForm(formId); if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { log.error("查询待审批的任务,该表单不存在对应的流程定义,formId:{}", formId); return new ArrayList<>(); @@ -380,6 +243,219 @@ //返回任务id和关联业务主键id return toBeApprovedDTOs; + } + @Override + public List getAllList(String formId) { + SystemFlowForm flowForm = getSystemFlowForm(formId); + if (Objects.isNull(flowForm) || StringUtils.isEmpty(flowForm.getDeployId()) || StringUtils.isEmpty(flowForm.getProcDefId())) { + log.error("查询全部的流程,该表单不存在对应的流程定义,formId:{}", formId); + return new ArrayList<>(); + } + List list = new ArrayList<>(); + //管理员or其他用户 + if(ShiroKit.isAdmin()){ + //审批中实例 + getInApprovedProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.IN_APPROVED); + }); + //已通过实例 + getPassedProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.PASSED); + });; + //未通过-拒绝实例 + getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED_REJECT).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED_REJECT); + }); + //未通过实例 + getFailedProcessInstances(flowForm, ApprovalStatusEnum.FAILED).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED); + }); + //已取消实例 + getCanceledProcessInstances(flowForm).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.CANCELED); + }); + }else{ + AuthUser user = ShiroKit.getUser(); + Assert.isFalse(Objects.isNull(user), () -> { + throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); + }); + //审批中实例 + getInApprovedProcessInstancesForStarted(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.IN_APPROVED); + }); + //已通过实例 + getPassedProcessInstancesForStartedAndAssignee(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.PASSED); + }); + //未通过-拒绝实例 + getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED_REJECT).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED_REJECT); + }); + //未通过实例 + getFailedProcessInstancesForStartedAndAssignee(flowForm, user, ApprovalStatusEnum.FAILED).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.FAILED); + }); + //已取消实例 + getCanceledProcessInstancesForStarted(flowForm, user).forEach(instance ->{ + enrichList(list, instance, ApprovalStatusEnum.CANCELED); + }); + } + return list; + } + + private void enrichList(List list, HistoricProcessInstance instance, String status) { + AllApproveDTO allApproveDTO = new AllApproveDTO(); + allApproveDTO.setBusinessKey(instance.getBusinessKey()); + allApproveDTO.setStatus(status); + list.add(allApproveDTO); + } + + private SystemFlowForm getSystemFlowForm(String formId) { + //根据业务表单id获取流程定义 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("form_id", formId); + return flowFormService.getOne(wrapper); + } + + private List getPassedProcessInstancesForStartedAndAssignee(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances; + //根据流程定义、登录用户id查询该业务已完成的流程实例(作为发起者) + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .finished() + .notDeleted() + .startedBy(String.valueOf(user.getId())) + .orderByProcessInstanceStartTime().desc() + .list(); + //根据流程定义、登录用户id获取该业务流程的实例结束的已办任务(作为审批者) + List tasks = historyService.createHistoricTaskInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .taskAssignee(String.valueOf(user.getId())) + .processFinished() //todo:此参数若表示实例已完成,则这里使用正确,需验证 + .orderByTaskCreateTime().desc() + .list(); + //根据作为审批者的任务查询流程实例 + for (HistoricTaskInstance task : tasks) { + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .notDeleted() + .processInstanceId(task.getProcessInstanceId()).singleResult(); + historicProcessInstances.add(historicProcessInstance); + } + return historicProcessInstances; + } + + private List getInApprovedProcessInstances(SystemFlowForm flowForm) { + List historicProcessInstances; + //根据流程定义查询该业务所有未完成的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) //这里使用流程定义,因为更新流程定义不会更新定义id,会更新部署id +// .deploymentId(flowForm.getDeployId()) + .or() + .unfinished() + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getInApprovedProcessInstancesForStarted(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances; + //根据流程定义、登录用户id查询该业务未完成的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .or() + .unfinished() + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() + .startedBy(String.valueOf(user.getId())) + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getPassedProcessInstances(SystemFlowForm flowForm) { + //根据流程定义查询该业务所有已完成的流程实例 + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .finished() + .notDeleted() + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getFailedProcessInstances(SystemFlowForm flowForm, String failStatus) { + //根据业务状态、流程定义查询该业务所有未通过的流程实例 + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) +// .deleted() //拒绝的审批流程要执行删除操作,也要设置业务状态,所以使用下行的状态可满足拒绝的查询 + .processInstanceBusinessStatus(failStatus) //todo:拒绝按钮已增加业务状态,需验证不加deleted查询的是未删除的还是所有的 + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getFailedProcessInstancesForStartedAndAssignee(SystemFlowForm flowForm, AuthUser user, String failStatus) { + //根据业务状态、流程定义、登录用户id查询该业务未通过的流程实例(作为发起者) + List historicProcessInstances; + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .startedBy(String.valueOf(user.getId())) + .processInstanceBusinessStatus(failStatus) + .orderByProcessInstanceStartTime().desc() + .list(); + //根据业务状态、流程定义、登录用户id获取该业务的未通过的流程实例的审批者已完成任务(作为审批者) + List tasks = historyService.createHistoricTaskInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .taskAssignee(String.valueOf(user.getId())) + .finished() //审批者已完成审批 + .processUnfinished() //todo:此参数若表示实例未完成,则这里使用正确,需验证 + .orderByTaskCreateTime().desc() + .list(); + //根据作为审批者的任务查询未通过的流程实例 + for (HistoricTaskInstance task : tasks) { + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .processInstanceId(task.getProcessInstanceId()) + .processInstanceBusinessStatus(failStatus) + .singleResult(); + historicProcessInstances.add(historicProcessInstance); + } + return historicProcessInstances; + } + + private List getCanceledProcessInstancesForStarted(SystemFlowForm flowForm, AuthUser user) { + List historicProcessInstances;//根据业务状态、流程定义、登录用户id查询该业务已取消的流程实例 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .startedBy(String.valueOf(user.getId())) + .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; + } + + private List getCanceledProcessInstances(SystemFlowForm flowForm) { + List historicProcessInstances; + //根据业务状态、流程定义查询该业务所有已取消的流程实例-拒绝 + historicProcessInstances = historyService.createHistoricProcessInstanceQuery() + .processDefinitionKey(flowForm.getProcDefId()) +// .deploymentId(flowForm.getDeployId()) + .deleted() //取消的要执行删除操作,也要设置业务状态,此处可同时设置为条件进行查询 + .processInstanceBusinessStatus(ApprovalStatusEnum.CANCELED) //对应取消按钮中设置的业务状态 + .orderByProcessInstanceStartTime().desc() + .list(); + return historicProcessInstances; } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java index bef098c..23a2913 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyAcceptanceCheckServiceImpl.java @@ -1,6 +1,5 @@ package com.casic.missiles.service.Impl.equipment; -import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.casic.missiles.core.base.service.IBaseExportService; @@ -10,6 +9,7 @@ import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.equipment.AcceptanceCheck; import com.casic.missiles.dto.equipment.AcceptanceCheckRequest; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.EquipmentApplyTypeEnum; @@ -34,10 +34,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentAcceptanceCheckService") @@ -99,8 +96,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -130,8 +132,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ equipmentApply.setTaskId(taskMap.get(equipmentApply.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + equipmentApply.setApprovalStatus(taskMap.get(String.valueOf(equipmentApply.getId()))); + } DictCodeUtils.convertDictCodeToName(equipmentApply); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(AcceptanceCheck::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java index 5f08d09..57bb3a9 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentApplyServiceImpl.java @@ -10,10 +10,11 @@ import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.equipment.EquipmentApplyProcessRequest; import com.casic.missiles.dto.equipment.EquipmentApplyRequest; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; -import com.casic.missiles.dto.equipment.EquipmentApplyProcessRequest; import com.casic.missiles.enums.*; import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.equipment.EquipmentApplyEquipmentMapper; @@ -24,10 +25,10 @@ import com.casic.missiles.model.equipment.EquipmentFixedAssets; import com.casic.missiles.model.response.ResponseData; import com.casic.missiles.service.IBaseApprovalService; -import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.service.equipment.IEquipmentApplyEquipmentService; import com.casic.missiles.service.equipment.IEquipmentApplyFileService; import com.casic.missiles.service.equipment.IEquipmentApplyService; +import com.casic.missiles.service.flowable.ApprovalOperateService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import org.apache.commons.lang3.StringUtils; @@ -37,10 +38,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentApplyService") @@ -94,8 +92,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -122,8 +125,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ equipmentApply.setTaskId(taskMap.get(equipmentApply.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + equipmentApply.setApprovalStatus(taskMap.get(String.valueOf(equipmentApply.getId()))); + } DictCodeUtils.convertDictCodeToName(equipmentApply); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(EquipmentApply::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java index 4fe93a6..2d55553 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStandardApplyServiceImpl.java @@ -9,6 +9,7 @@ import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.equipment.StandardEquipmentApplyRequest; @@ -108,8 +109,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -133,8 +139,15 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ item.setTaskId(taskMap.get(item.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + item.setApprovalStatus(taskMap.get(String.valueOf(item.getId()))); + } DictCodeUtils.convertDictCodeToName(item); } + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(EquipmentStandardApply::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); + } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java index 42102df..b1b937c 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/equipment/EquipmentStateManageServiceImpl.java @@ -6,8 +6,9 @@ import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.equipment.StateManageRequest; -import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.equipment.StateManageResponse; +import com.casic.missiles.dto.flowable.AllApproveDTO; +import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.enums.ApprovalStatusEnum; import com.casic.missiles.enums.ExportEnum; import com.casic.missiles.mapper.equipment.EquipmentApplyFileMapper; @@ -21,10 +22,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service("IEquipmentStateManageService") @@ -72,8 +70,13 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); break; + case ApprovalStatusEnum.ALL: + List allList = baseApprovalService.getAllList(request.getFormId()); + businessKeys = allList.stream().map(AllApproveDTO::getBusinessKey).distinct().collect(Collectors.toList()); + allList.forEach(allApprovedDTO -> {taskMap.put(allApprovedDTO.getBusinessKey(),allApprovedDTO.getStatus());}); + break; default: - // 全部 或 草稿箱,直接查表,不用查工作流 + // 草稿箱,直接查表,不用查工作流 searchBusinessKey = false; break; } @@ -97,10 +100,14 @@ if(ApprovalStatusEnum.TO_BE_APPROVED.equals(status)){ item.setTaskId(taskMap.get(item.getId().toString())); } + if(ApprovalStatusEnum.ALL.equals(status)){ + item.setApprovalStatus(taskMap.get(String.valueOf(item.getId()))); + } DictCodeUtils.convertDictCodeToName(item); } - for (StateManageResponse stateManageResponse : resultPage.getRecords()) { - DictCodeUtils.convertDictCodeToName(stateManageResponse); + if(ApprovalStatusEnum.ALL.equals(status) && !CollectionUtils.isEmpty(resultPage.getRecords())){ + List collect = resultPage.getRecords().stream().sorted(Comparator.comparing(StateManageResponse::getCreateTime).reversed()).collect(Collectors.toList()); + resultPage.setRecords(collect); } return resultPage; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/flowable/ApprovalOperateServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/flowable/ApprovalOperateServiceImpl.java index 025f6eb..16210c6 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/flowable/ApprovalOperateServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/flowable/ApprovalOperateServiceImpl.java @@ -192,7 +192,10 @@ HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() .processInstanceId(request.getProcessInstanceId()) .startedBy(String.valueOf(user.getId())) + .or() .unfinished() //审批中的流程才能撤回 + .processInstanceBusinessStatus(ApprovalStatusEnum.IN_APPROVED) //查询审批中状态,因为驳回后的编辑操作中设置为该状态 + .endOr() .singleResult(); if(Objects.isNull(historicProcessInstance)){ log.error("该用户无审批中的流程,userId:{},processInstanceId:{}", user.getId(), request.getProcessInstanceId()); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterFileServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterFileServiceImpl.java index 7d94027..6eeebd8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterFileServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterFileServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.dto.BaseApprovalSubmitRequest; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.meter.FileApprovalListRequest; @@ -41,9 +42,7 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -185,7 +184,7 @@ throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); request.setCreateUserId(user.getId()); - return handleApprovalStatus(request); + return handleApprovalStatus(page, request); } @Override @@ -222,7 +221,7 @@ throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } - private List handleApprovalStatus(FileApprovalListRequest request) { + private List handleApprovalStatus(Page page, FileApprovalListRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); List list; @@ -231,7 +230,7 @@ switch (request.getApprovalStatus()) { //草稿 case ApprovalStatusEnum.DRAFT: - list = meterFileMapper.selectDraftListForApproval(request); + list = meterFileMapper.selectDraftListForApproval(page, request); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.DRAFT); break; //待审批,该状态维护在flowable中 @@ -241,7 +240,7 @@ businessKeys = toBeApprovedList.stream().map(ToBeApprovedDTO::getBusinessKey).collect(Collectors.toList()); } if(!CollectionUtils.isEmpty(businessKeys)){ - list = meterFileMapper.selectBatchForApproval(request, businessKeys); + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.TO_BE_APPROVED); //DTO根据业务主键补全taskId approvalList.forEach(approval -> { @@ -257,7 +256,7 @@ case ApprovalStatusEnum.IN_APPROVED: businessKeys = baseApprovalService.getInApprovedList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = meterFileMapper.selectBatchForApproval(request, businessKeys); + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.IN_APPROVED); } break; @@ -265,7 +264,7 @@ case ApprovalStatusEnum.PASSED: businessKeys = baseApprovalService.getPassedList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = meterFileMapper.selectBatchForApproval(request, businessKeys); + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.PASSED); } break; @@ -274,12 +273,12 @@ businessKeys = baseApprovalService.getFailedList(request.getFormId()); //未通过-拒绝 List rejectBusinessKey = baseApprovalService.getFailedRejectList(request.getFormId()); //未通过-驳回 if(!CollectionUtils.isEmpty(businessKeys)){ - list = meterFileMapper.selectBatchForApproval(request, businessKeys); + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.FAILED); } List rejectApprovalList = new ArrayList<>(); if(!CollectionUtils.isEmpty(rejectBusinessKey)){ - List rejectList = meterFileMapper.selectBatchForApproval(request, rejectBusinessKey); + List rejectList = meterFileMapper.selectBatchForApproval(page, request, rejectBusinessKey); rejectApprovalList = handleApprovalListResponse(approvalList, rejectList, ApprovalStatusEnum.FAILED_REJECT); } //合并未通过-拒绝和未通过-驳回 @@ -289,14 +288,40 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = meterFileMapper.selectBatchForApproval(request, businessKeys); + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.CANCELED); } break; + //全部 + //区分管理员和普通用户 + //普通用户获取自己发起的(审批中、已通过、未通过、已取消),管理员获取全部(审批中、已通过、未通过、已取消) + case ApprovalStatusEnum.ALL: + List AllApproveList = baseApprovalService.getAllList(request.getFormId()); + if(!CollectionUtils.isEmpty(AllApproveList)){ + businessKeys = AllApproveList.stream().map(AllApproveDTO::getBusinessKey).collect(Collectors.toList()); + } + if(!CollectionUtils.isEmpty(businessKeys)){ + list = meterFileMapper.selectBatchForApproval(page, request, businessKeys); + approvalList = handleAllApprovalListResponse(approvalList, list, AllApproveList); + } + break; } return approvalList; } + private List handleAllApprovalListResponse(List approvalList, List list, List allApproveList) { + Map taskMap = new HashMap<>(); + approvalList = ConvertUtils.sourceToTarget(list, FileApprovalListResponse.class); + allApproveList.forEach(allApprove -> {taskMap.put(allApprove.getBusinessKey(),allApprove.getStatus());}); + //状态补全 + approvalList.forEach(approval -> { + approval.setApprovalStatusName(dictService.getDictNameByCode(MeterDictEnum.APPROVAL_STATUS, taskMap.get(String.valueOf(approval.getId())))); + approval.setApprovalStatus(taskMap.get(String.valueOf(approval.getId()))); + }); + //排序 + return approvalList.stream().sorted(Comparator.comparing(FileApprovalListResponse::getCreateTime).reversed()).collect(Collectors.toList()); + } + private List handleApprovalListResponse(List approvalList, List list, String status){ approvalList = ConvertUtils.sourceToTarget(list, FileApprovalListResponse.class); approvalList.stream().forEach(result -> { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterTraceSupplierServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterTraceSupplierServiceImpl.java index 4f6b6db..321321b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterTraceSupplierServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterTraceSupplierServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.dto.BaseApprovalSubmitRequest; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.meter.*; @@ -38,9 +39,7 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -169,7 +168,7 @@ throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); request.setCreateUserId(user.getId()); - return handleApprovalStatus(request); + return handleApprovalStatus(page, request); } @Override @@ -204,24 +203,24 @@ throw new BusinessException(BusinessExceptionEnum.HANDLE_FAILED); } - private List handleApprovalStatus(TraceSupplierApprovalListRequest request) { + private List handleApprovalStatus(Page page, TraceSupplierApprovalListRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); List list; switch (request.getApprovalStatus()) { //草稿 case ApprovalStatusEnum.DRAFT: - list = traceSupplierMapper.selectDraftListForApproval(request); + list = traceSupplierMapper.selectDraftListForApproval(page, request); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.DRAFT); break; //待审批,该状态维护在flowable中 case ApprovalStatusEnum.TO_BE_APPROVED: List toBeApprovedList = baseApprovalService.getToBeApprovedList(request.getFormId()); if(!CollectionUtils.isEmpty(toBeApprovedList)){ - businessKeys = toBeApprovedList.stream().map(ToBeApprovedDTO::getBusinessKey).collect(Collectors.toList()); + businessKeys = toBeApprovedList.stream().map(ToBeApprovedDTO::getBusinessKey).distinct().collect(Collectors.toList()); } if(!CollectionUtils.isEmpty(businessKeys)){ - list = traceSupplierMapper.selectBatchForApproval(request, businessKeys); + list = traceSupplierMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.TO_BE_APPROVED); //DTO根据业务主键补全taskId approvalList.forEach(approval -> { @@ -239,7 +238,7 @@ case ApprovalStatusEnum.IN_APPROVED: businessKeys = baseApprovalService.getInApprovedList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = traceSupplierMapper.selectBatchForApproval(request, businessKeys); + list = traceSupplierMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.IN_APPROVED); } break; @@ -247,7 +246,7 @@ case ApprovalStatusEnum.PASSED: businessKeys = baseApprovalService.getPassedList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = traceSupplierMapper.selectBatchForApproval(request, businessKeys); + list = traceSupplierMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.PASSED); } break; @@ -256,12 +255,12 @@ businessKeys = baseApprovalService.getFailedList(request.getFormId()); //未通过-拒绝 List rejectBusinessKey = baseApprovalService.getFailedRejectList(request.getFormId()); //未通过-驳回 if(!CollectionUtils.isEmpty(businessKeys)){ - list = traceSupplierMapper.selectBatchForApproval(request, businessKeys); + list = traceSupplierMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.FAILED); } List rejectApprovalList = new ArrayList<>(); if(!CollectionUtils.isEmpty(rejectBusinessKey)){ - List rejectList = traceSupplierMapper.selectBatchForApproval(request, rejectBusinessKey); + List rejectList = traceSupplierMapper.selectBatchForApproval(page, request, rejectBusinessKey); rejectApprovalList = handleApprovalListResponse(approvalList, rejectList, ApprovalStatusEnum.FAILED_REJECT); } //合并未通过-拒绝和未通过-驳回 @@ -271,14 +270,40 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = traceSupplierMapper.selectBatchForApproval(request, businessKeys); + list = traceSupplierMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.CANCELED); } break; + //全部 + //区分管理员和普通用户 + //普通用户获取自己发起的(审批中、已通过、未通过、已取消),管理员获取全部(审批中、已通过、未通过、已取消) + case ApprovalStatusEnum.ALL: + List AllApproveList = baseApprovalService.getAllList(request.getFormId()); + if(!CollectionUtils.isEmpty(AllApproveList)){ + businessKeys = AllApproveList.stream().map(AllApproveDTO::getBusinessKey).collect(Collectors.toList()); + } + if(!CollectionUtils.isEmpty(businessKeys)){ + list = traceSupplierMapper.selectBatchForApproval(page, request, businessKeys); + approvalList = handleAllApprovalListResponse(approvalList, list, AllApproveList); + } + break; } return approvalList; } + private List handleAllApprovalListResponse(List approvalList, List list, List allApproveList) { + Map taskMap = new HashMap<>(); + approvalList = ConvertUtils.sourceToTarget(list, TraceSupplierApprovalListResponse.class); + allApproveList.forEach(allApprove -> {taskMap.put(allApprove.getBusinessKey(),allApprove.getStatus());}); + //状态补全 + approvalList.forEach(approval -> { + approval.setApprovalStatusName(dictService.getDictNameByCode(MeterDictEnum.APPROVAL_STATUS, taskMap.get(String.valueOf(approval.getId())))); + approval.setApprovalStatus(taskMap.get(String.valueOf(approval.getId()))); + }); + //排序 + return approvalList.stream().sorted(Comparator.comparing(TraceSupplierApprovalListResponse::getCreateTime).reversed()).collect(Collectors.toList()); + } + @Override @Transactional public ReturnDTO updateTraceSupplier(MeterTraceSupplier traceSupplier) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterTrainPlanServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterTrainPlanServiceImpl.java index 6e8f296..3dbecc0 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterTrainPlanServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/meter/MeterTrainPlanServiceImpl.java @@ -10,6 +10,7 @@ import com.casic.missiles.dto.BaseApprovalSubmitRequest; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; +import com.casic.missiles.dto.flowable.AllApproveDTO; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.dto.flowable.ToBeApprovedDTO; import com.casic.missiles.dto.meter.*; @@ -40,9 +41,7 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -153,7 +152,7 @@ throw new BusinessException(BusinessExceptionEnum.LOGIN_USER_ACQUIRE_FAILED); }); request.setCreateUserId(user.getId()); - return handleApprovalStatus(request); + return handleApprovalStatus(page, request); } @Override @@ -245,7 +244,7 @@ return ReturnUtil.success(planResponse); } - private List handleApprovalStatus(TrainPlanApprovalListRequest request) { + private List handleApprovalStatus(Page page, TrainPlanApprovalListRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); List list; @@ -254,7 +253,7 @@ switch (request.getApprovalStatus()) { //草稿 case ApprovalStatusEnum.DRAFT: - list = trainPlanMapper.selectDraftListForApproval(request); + list = trainPlanMapper.selectDraftListForApproval(page, request); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.DRAFT); break; //待审批,该状态维护在flowable中 @@ -264,7 +263,7 @@ businessKeys = toBeApprovedList.stream().map(ToBeApprovedDTO::getBusinessKey).collect(Collectors.toList()); } if(!CollectionUtils.isEmpty(businessKeys)){ - list = trainPlanMapper.selectBatchForApproval(request, businessKeys); + list = trainPlanMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.TO_BE_APPROVED); //DTO根据业务主键补全taskId approvalList.forEach(approval -> { @@ -280,7 +279,7 @@ case ApprovalStatusEnum.IN_APPROVED: businessKeys = baseApprovalService.getInApprovedList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = trainPlanMapper.selectBatchForApproval(request, businessKeys); + list = trainPlanMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.IN_APPROVED); } break; @@ -288,7 +287,7 @@ case ApprovalStatusEnum.PASSED: businessKeys = baseApprovalService.getPassedList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = trainPlanMapper.selectBatchForApproval(request, businessKeys); + list = trainPlanMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.PASSED); } break; @@ -297,12 +296,12 @@ businessKeys = baseApprovalService.getFailedList(request.getFormId()); //未通过-拒绝 List rejectBusinessKey = baseApprovalService.getFailedRejectList(request.getFormId()); //未通过-驳回 if(!CollectionUtils.isEmpty(businessKeys)){ - list = trainPlanMapper.selectBatchForApproval(request, businessKeys); + list = trainPlanMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.FAILED); } List rejectApprovalList = new ArrayList<>(); if(!CollectionUtils.isEmpty(rejectBusinessKey)){ - List rejectList = trainPlanMapper.selectBatchForApproval(request, rejectBusinessKey); + List rejectList = trainPlanMapper.selectBatchForApproval(page, request, rejectBusinessKey); rejectApprovalList = handleApprovalListResponse(approvalList, rejectList, ApprovalStatusEnum.FAILED_REJECT); } //合并未通过-拒绝和未通过-驳回 @@ -312,14 +311,38 @@ case ApprovalStatusEnum.CANCELED: businessKeys = baseApprovalService.getCanceledList(request.getFormId()); if(!CollectionUtils.isEmpty(businessKeys)){ - list = trainPlanMapper.selectBatchForApproval(request, businessKeys); + list = trainPlanMapper.selectBatchForApproval(page, request, businessKeys); approvalList = handleApprovalListResponse(approvalList, list, ApprovalStatusEnum.CANCELED); } break; + //全部 + case ApprovalStatusEnum.ALL: + List AllApproveList = baseApprovalService.getAllList(request.getFormId()); + if(!CollectionUtils.isEmpty(AllApproveList)){ + businessKeys = AllApproveList.stream().map(AllApproveDTO::getBusinessKey).collect(Collectors.toList()); + } + if(!CollectionUtils.isEmpty(businessKeys)){ + list = trainPlanMapper.selectBatchForApproval(page, request, businessKeys); + approvalList = handleAllApprovalListResponse(approvalList, list, AllApproveList); + } + break; } return approvalList; } + private List handleAllApprovalListResponse(List approvalList, List list, List allApproveList) { + Map taskMap = new HashMap<>(); + approvalList = ConvertUtils.sourceToTarget(list, TrainPlanApprovalListResponse.class); + allApproveList.forEach(allApprove -> {taskMap.put(allApprove.getBusinessKey(),allApprove.getStatus());}); + //状态补全 + approvalList.forEach(approval -> { + approval.setApprovalStatusName(dictService.getDictNameByCode(MeterDictEnum.APPROVAL_STATUS, taskMap.get(String.valueOf(approval.getId())))); + approval.setApprovalStatus(taskMap.get(String.valueOf(approval.getId()))); + }); + //排序 + return approvalList.stream().sorted(Comparator.comparing(TrainPlanApprovalListResponse::getCreateTime).reversed()).collect(Collectors.toList()); + } + private List handleApprovalListResponse(List approvalList, List list, String status){ approvalList = ConvertUtils.sourceToTarget(list, TrainPlanApprovalListResponse.class); approvalList.stream().forEach(result -> { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/FlowDefDefServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/FlowDefDefServiceImpl.java index b6e54c8..26f93e7 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/FlowDefDefServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/FlowDefDefServiceImpl.java @@ -12,6 +12,7 @@ import com.casic.missiles.dto.system.FlowListRequest; import com.casic.missiles.dto.system.FlowProcDefDTO; import com.casic.missiles.dto.system.FlowUpdateStateRequest; +import com.casic.missiles.enums.AssigneeTypeEnum; import com.casic.missiles.mapper.system.FlowDefMapper; import com.casic.missiles.mapper.system.SystemFlowFormMapper; import com.casic.missiles.model.system.SystemFlowForm; @@ -421,11 +422,11 @@ String s = JSONObject.toJSONString(iterator.next()); HashMap map = new ObjectMapper().readValue(s, HashMap.class); // HashMap map = (HashMap) iterator.next(); - if ("1".equals(String.valueOf(map.get("type")))) { + if (AssigneeTypeEnum.USER.equals(String.valueOf(map.get("type")))) { //用户id String targetId = String.valueOf(map.get("targetId")); userIds.add(targetId); - } else if ("2".equals(String.valueOf(map.get("type")))) { + } else if (AssigneeTypeEnum.ROLE.equals(String.valueOf(map.get("type")))) { //角色id String targetId = String.valueOf(map.get("targetId")); IUserRoleRelationService relationService = SpringContextUtil.getBean(IUserRoleRelationService.class); @@ -436,7 +437,7 @@ ruRelations.forEach(ruRelation -> { userIds.add(String.valueOf(ruRelation.getUserId())); }); - } else if ("3".equals(String.valueOf(map.get("type")))) { + } else if (AssigneeTypeEnum.DEPT.equals(String.valueOf(map.get("type")))) { //部门id String targetId = String.valueOf(map.get("targetId")); UserMapper userMapper = SpringContextUtil.getBean(UserMapper.class);