diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java index 38a7c95..8be4b8e 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java @@ -6,6 +6,7 @@ import com.casic.missiles.modular.cwscase.model.CwsCase; import com.casic.missiles.modular.cwscase.model.QueryCondition; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; import java.util.List; import java.util.Map; @@ -40,4 +41,6 @@ List> workList(@Param("page") Page page,@Param("groupId")String groupId,@Param("onedeptid")String onedeptid,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); List> completedList(@Param("page") Page page,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); + @Update("update dcm_cws_case set CASE_STATE = PRE_STATE where id = #{bizId}") + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java index 38a7c95..8be4b8e 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java @@ -6,6 +6,7 @@ import com.casic.missiles.modular.cwscase.model.CwsCase; import com.casic.missiles.modular.cwscase.model.QueryCondition; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; import java.util.List; import java.util.Map; @@ -40,4 +41,6 @@ List> workList(@Param("page") Page page,@Param("groupId")String groupId,@Param("onedeptid")String onedeptid,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); List> completedList(@Param("page") Page page,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); + @Update("update dcm_cws_case set CASE_STATE = PRE_STATE where id = #{bizId}") + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java index 5dcdcf0..02ea4e8 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java @@ -39,4 +39,10 @@ List> workList(Page page,String groupId,String onedeptid,String actUserId, QueryCondition queryCondition); List> completedList(Page page,String actUserId, QueryCondition queryCondition); + + /** + * 案件撤销 + * @param bizId + */ + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java index 38a7c95..8be4b8e 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java @@ -6,6 +6,7 @@ import com.casic.missiles.modular.cwscase.model.CwsCase; import com.casic.missiles.modular.cwscase.model.QueryCondition; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; import java.util.List; import java.util.Map; @@ -40,4 +41,6 @@ List> workList(@Param("page") Page page,@Param("groupId")String groupId,@Param("onedeptid")String onedeptid,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); List> completedList(@Param("page") Page page,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); + @Update("update dcm_cws_case set CASE_STATE = PRE_STATE where id = #{bizId}") + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java index 5dcdcf0..02ea4e8 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java @@ -39,4 +39,10 @@ List> workList(Page page,String groupId,String onedeptid,String actUserId, QueryCondition queryCondition); List> completedList(Page page,String actUserId, QueryCondition queryCondition); + + /** + * 案件撤销 + * @param bizId + */ + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java index a650580..0b3d192 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java @@ -487,6 +487,15 @@ return results; } + /** + * 案件撤销 + * @param bizId 案卷ID + */ + @Override + public void cancelCaseState(String bizId) { + this.baseMapper.cancelCaseState(bizId); + } + //包装大小类 private Map warpper(Map m) { diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java index 38a7c95..8be4b8e 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java @@ -6,6 +6,7 @@ import com.casic.missiles.modular.cwscase.model.CwsCase; import com.casic.missiles.modular.cwscase.model.QueryCondition; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; import java.util.List; import java.util.Map; @@ -40,4 +41,6 @@ List> workList(@Param("page") Page page,@Param("groupId")String groupId,@Param("onedeptid")String onedeptid,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); List> completedList(@Param("page") Page page,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); + @Update("update dcm_cws_case set CASE_STATE = PRE_STATE where id = #{bizId}") + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java index 5dcdcf0..02ea4e8 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java @@ -39,4 +39,10 @@ List> workList(Page page,String groupId,String onedeptid,String actUserId, QueryCondition queryCondition); List> completedList(Page page,String actUserId, QueryCondition queryCondition); + + /** + * 案件撤销 + * @param bizId + */ + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java index a650580..0b3d192 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java @@ -487,6 +487,15 @@ return results; } + /** + * 案件撤销 + * @param bizId 案卷ID + */ + @Override + public void cancelCaseState(String bizId) { + this.baseMapper.cancelCaseState(bizId); + } + //包装大小类 private Map warpper(Map m) { diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java index c1e0675..5564b36 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.modular.flowable.service.ICwsSuportService; import com.casic.missiles.modular.system.model.Dict; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.Serializable; @@ -276,4 +277,8 @@ public CwsCase selectCaseById(Serializable id) { return cwsCaseService.selectById(id); } + @Override + public void cancelCaseState(String bizId) { + cwsCaseService.cancelCaseState(bizId); + } } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java index 38a7c95..8be4b8e 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java @@ -6,6 +6,7 @@ import com.casic.missiles.modular.cwscase.model.CwsCase; import com.casic.missiles.modular.cwscase.model.QueryCondition; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; import java.util.List; import java.util.Map; @@ -40,4 +41,6 @@ List> workList(@Param("page") Page page,@Param("groupId")String groupId,@Param("onedeptid")String onedeptid,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); List> completedList(@Param("page") Page page,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); + @Update("update dcm_cws_case set CASE_STATE = PRE_STATE where id = #{bizId}") + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java index 5dcdcf0..02ea4e8 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java @@ -39,4 +39,10 @@ List> workList(Page page,String groupId,String onedeptid,String actUserId, QueryCondition queryCondition); List> completedList(Page page,String actUserId, QueryCondition queryCondition); + + /** + * 案件撤销 + * @param bizId + */ + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java index a650580..0b3d192 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java @@ -487,6 +487,15 @@ return results; } + /** + * 案件撤销 + * @param bizId 案卷ID + */ + @Override + public void cancelCaseState(String bizId) { + this.baseMapper.cancelCaseState(bizId); + } + //包装大小类 private Map warpper(Map m) { diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java index c1e0675..5564b36 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.modular.flowable.service.ICwsSuportService; import com.casic.missiles.modular.system.model.Dict; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.Serializable; @@ -276,4 +277,8 @@ public CwsCase selectCaseById(Serializable id) { return cwsCaseService.selectById(id); } + @Override + public void cancelCaseState(String bizId) { + cwsCaseService.cancelCaseState(bizId); + } } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java index 3d9ac58..a45ce55 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java @@ -76,6 +76,11 @@ return ResponseData.success(processId); } + @PostMapping(value = "/cancelTask") + public Object cancelTask(String bizId,String processId,String caseState) { + caseFlowService.cancelActivity(bizId,processId,caseState); + return ResponseData.success(); + } /** * 案件处理接口 @@ -112,7 +117,7 @@ @GetMapping(value = "/historicalRecords") @ResponseBody public Object historicalRecords(String processId) { - HistoricActivityInstanceQuery query = processEngine.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId(processId).activityType("userTask"); + HistoricActivityInstanceQuery query = processEngine.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId(processId).activityType("userTask").orderByHistoricActivityInstanceEndTime().asc(); List list = query.list(); List processRecords = new ArrayList<>(); for (HistoricActivityInstance task : list) { diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java index 38a7c95..8be4b8e 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java @@ -6,6 +6,7 @@ import com.casic.missiles.modular.cwscase.model.CwsCase; import com.casic.missiles.modular.cwscase.model.QueryCondition; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; import java.util.List; import java.util.Map; @@ -40,4 +41,6 @@ List> workList(@Param("page") Page page,@Param("groupId")String groupId,@Param("onedeptid")String onedeptid,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); List> completedList(@Param("page") Page page,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); + @Update("update dcm_cws_case set CASE_STATE = PRE_STATE where id = #{bizId}") + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java index 5dcdcf0..02ea4e8 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java @@ -39,4 +39,10 @@ List> workList(Page page,String groupId,String onedeptid,String actUserId, QueryCondition queryCondition); List> completedList(Page page,String actUserId, QueryCondition queryCondition); + + /** + * 案件撤销 + * @param bizId + */ + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java index a650580..0b3d192 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java @@ -487,6 +487,15 @@ return results; } + /** + * 案件撤销 + * @param bizId 案卷ID + */ + @Override + public void cancelCaseState(String bizId) { + this.baseMapper.cancelCaseState(bizId); + } + //包装大小类 private Map warpper(Map m) { diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java index c1e0675..5564b36 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.modular.flowable.service.ICwsSuportService; import com.casic.missiles.modular.system.model.Dict; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.Serializable; @@ -276,4 +277,8 @@ public CwsCase selectCaseById(Serializable id) { return cwsCaseService.selectById(id); } + @Override + public void cancelCaseState(String bizId) { + cwsCaseService.cancelCaseState(bizId); + } } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java index 3d9ac58..a45ce55 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java @@ -76,6 +76,11 @@ return ResponseData.success(processId); } + @PostMapping(value = "/cancelTask") + public Object cancelTask(String bizId,String processId,String caseState) { + caseFlowService.cancelActivity(bizId,processId,caseState); + return ResponseData.success(); + } /** * 案件处理接口 @@ -112,7 +117,7 @@ @GetMapping(value = "/historicalRecords") @ResponseBody public Object historicalRecords(String processId) { - HistoricActivityInstanceQuery query = processEngine.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId(processId).activityType("userTask"); + HistoricActivityInstanceQuery query = processEngine.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId(processId).activityType("userTask").orderByHistoricActivityInstanceEndTime().asc(); List list = query.list(); List processRecords = new ArrayList<>(); for (HistoricActivityInstance task : list) { diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java index b1545a4..850f065 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java @@ -6,12 +6,19 @@ import com.casic.missiles.core.common.service.ICommonPermissionService; import com.casic.missiles.core.exception.GunsException; import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.cwscase.model.CwsCase; import com.casic.missiles.modular.dictexpand.model.DictExpand; +import com.casic.missiles.modular.flowable.dto.FlowUserDto; import com.casic.missiles.modular.flowable.dto.ProcessDcmsDto; import com.casic.missiles.modular.flowable.service.IBmsSuportService; import com.casic.missiles.modular.flowable.service.ICaseFlowService; +import com.casic.missiles.modular.flowable.service.ICwsSuportService; import com.casic.missiles.modular.flowable.util.BizFlowUtil; import com.casic.missiles.modular.flowable.util.FlowDcmsUserFactory; +import org.flowable.engine.ProcessEngine; +import org.flowable.engine.history.HistoricActivityInstance; +import org.flowable.engine.impl.persistence.entity.ExecutionEntity; +import org.flowable.task.api.Task; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -20,7 +27,9 @@ import org.springframework.transaction.annotation.Transactional; import java.sql.Timestamp; +import java.util.Arrays; import java.util.Calendar; +import java.util.List; /** *

@@ -35,8 +44,10 @@ private static final Logger logger = LoggerFactory.getLogger(CaseFlowServiceImpl.class); @Autowired private ICommonPermissionService service; - - + @Autowired + private ICwsSuportService cwsSuportService; + @Value("${casic.case.cancelNodes}") + private String[] cancelNodes; @Autowired private IBmsSuportService caseSuportService; @@ -45,6 +56,8 @@ */ @Value("${casic.case.defaultLimitTime:120}") private Integer defaultLimitTime; + @Autowired + private ProcessEngine processEngine; /** * 启动案卷流程 @@ -110,5 +123,41 @@ // } } + @Transactional(rollbackFor = Exception.class) + @Override + public void cancelActivity(String bizId, String processId, String caseState) { + GunsException guns = new GunsException(BizExceptionEnum.SERVER_ERROR); + if (ToolUtil.isEmpty(caseState)) { + guns.setMessage("当前案卷状态不能为空"); + throw guns; + } + CwsCase cwsCase = cwsSuportService.selectCaseById(bizId); + List historicActivityInstances = BizFlowUtil.getFinishedHistorics(processId); + if (!String.valueOf(cwsCase.getCaseState()).equals(caseState) || historicActivityInstances.isEmpty()) { + guns.setMessage("当前节点状态已变更,请刷新重试"); + throw guns; + } + String nodeKey = cwsCase.getPreState() + "" + cwsCase.getCaseState(); + if (!Arrays.asList(cancelNodes).contains(nodeKey)) { + guns.setMessage("当前操作不允许撤销,请刷新重试"); + throw guns; + } + String assignee = historicActivityInstances.get(historicActivityInstances.size() - 1).getAssignee(); + if (!String.valueOf(service.getCurrLoginUser().getId()).equals(assignee)) { + guns.setMessage("非当前用户处理不允许撤销,请刷新重试"); + throw guns; + } + String preActivityId = historicActivityInstances.get(historicActivityInstances.size() - 1).getActivityId(); + + //恢复更新状态 + cwsSuportService.cancelCaseState(bizId); + FlowUserDto dto = FlowDcmsUserFactory.createFlowUser(service.getCurrLoginUser()); + Task task = processEngine.getTaskService().createTaskQuery().processInstanceId(processId).singleResult(); + ExecutionEntity currEntity = (ExecutionEntity) processEngine.getRuntimeService().createExecutionQuery().executionId(task.getExecutionId()).singleResult(); + // String preActivityId = BizFlowUtil.findPreActivity(currEntity.getActivityId(), processId); + //撤销流程 + BizFlowUtil.moveSingleActivityId(processId, task.getId(), currEntity.getActivityId(), preActivityId, dto.getDeptId(), dto.getRoleTip(), dto.getUserId()); + } + } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java index 38a7c95..8be4b8e 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java @@ -6,6 +6,7 @@ import com.casic.missiles.modular.cwscase.model.CwsCase; import com.casic.missiles.modular.cwscase.model.QueryCondition; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; import java.util.List; import java.util.Map; @@ -40,4 +41,6 @@ List> workList(@Param("page") Page page,@Param("groupId")String groupId,@Param("onedeptid")String onedeptid,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); List> completedList(@Param("page") Page page,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); + @Update("update dcm_cws_case set CASE_STATE = PRE_STATE where id = #{bizId}") + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java index 5dcdcf0..02ea4e8 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java @@ -39,4 +39,10 @@ List> workList(Page page,String groupId,String onedeptid,String actUserId, QueryCondition queryCondition); List> completedList(Page page,String actUserId, QueryCondition queryCondition); + + /** + * 案件撤销 + * @param bizId + */ + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java index a650580..0b3d192 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java @@ -487,6 +487,15 @@ return results; } + /** + * 案件撤销 + * @param bizId 案卷ID + */ + @Override + public void cancelCaseState(String bizId) { + this.baseMapper.cancelCaseState(bizId); + } + //包装大小类 private Map warpper(Map m) { diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java index c1e0675..5564b36 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.modular.flowable.service.ICwsSuportService; import com.casic.missiles.modular.system.model.Dict; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.Serializable; @@ -276,4 +277,8 @@ public CwsCase selectCaseById(Serializable id) { return cwsCaseService.selectById(id); } + @Override + public void cancelCaseState(String bizId) { + cwsCaseService.cancelCaseState(bizId); + } } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java index 3d9ac58..a45ce55 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java @@ -76,6 +76,11 @@ return ResponseData.success(processId); } + @PostMapping(value = "/cancelTask") + public Object cancelTask(String bizId,String processId,String caseState) { + caseFlowService.cancelActivity(bizId,processId,caseState); + return ResponseData.success(); + } /** * 案件处理接口 @@ -112,7 +117,7 @@ @GetMapping(value = "/historicalRecords") @ResponseBody public Object historicalRecords(String processId) { - HistoricActivityInstanceQuery query = processEngine.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId(processId).activityType("userTask"); + HistoricActivityInstanceQuery query = processEngine.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId(processId).activityType("userTask").orderByHistoricActivityInstanceEndTime().asc(); List list = query.list(); List processRecords = new ArrayList<>(); for (HistoricActivityInstance task : list) { diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java index b1545a4..850f065 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java @@ -6,12 +6,19 @@ import com.casic.missiles.core.common.service.ICommonPermissionService; import com.casic.missiles.core.exception.GunsException; import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.cwscase.model.CwsCase; import com.casic.missiles.modular.dictexpand.model.DictExpand; +import com.casic.missiles.modular.flowable.dto.FlowUserDto; import com.casic.missiles.modular.flowable.dto.ProcessDcmsDto; import com.casic.missiles.modular.flowable.service.IBmsSuportService; import com.casic.missiles.modular.flowable.service.ICaseFlowService; +import com.casic.missiles.modular.flowable.service.ICwsSuportService; import com.casic.missiles.modular.flowable.util.BizFlowUtil; import com.casic.missiles.modular.flowable.util.FlowDcmsUserFactory; +import org.flowable.engine.ProcessEngine; +import org.flowable.engine.history.HistoricActivityInstance; +import org.flowable.engine.impl.persistence.entity.ExecutionEntity; +import org.flowable.task.api.Task; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -20,7 +27,9 @@ import org.springframework.transaction.annotation.Transactional; import java.sql.Timestamp; +import java.util.Arrays; import java.util.Calendar; +import java.util.List; /** *

@@ -35,8 +44,10 @@ private static final Logger logger = LoggerFactory.getLogger(CaseFlowServiceImpl.class); @Autowired private ICommonPermissionService service; - - + @Autowired + private ICwsSuportService cwsSuportService; + @Value("${casic.case.cancelNodes}") + private String[] cancelNodes; @Autowired private IBmsSuportService caseSuportService; @@ -45,6 +56,8 @@ */ @Value("${casic.case.defaultLimitTime:120}") private Integer defaultLimitTime; + @Autowired + private ProcessEngine processEngine; /** * 启动案卷流程 @@ -110,5 +123,41 @@ // } } + @Transactional(rollbackFor = Exception.class) + @Override + public void cancelActivity(String bizId, String processId, String caseState) { + GunsException guns = new GunsException(BizExceptionEnum.SERVER_ERROR); + if (ToolUtil.isEmpty(caseState)) { + guns.setMessage("当前案卷状态不能为空"); + throw guns; + } + CwsCase cwsCase = cwsSuportService.selectCaseById(bizId); + List historicActivityInstances = BizFlowUtil.getFinishedHistorics(processId); + if (!String.valueOf(cwsCase.getCaseState()).equals(caseState) || historicActivityInstances.isEmpty()) { + guns.setMessage("当前节点状态已变更,请刷新重试"); + throw guns; + } + String nodeKey = cwsCase.getPreState() + "" + cwsCase.getCaseState(); + if (!Arrays.asList(cancelNodes).contains(nodeKey)) { + guns.setMessage("当前操作不允许撤销,请刷新重试"); + throw guns; + } + String assignee = historicActivityInstances.get(historicActivityInstances.size() - 1).getAssignee(); + if (!String.valueOf(service.getCurrLoginUser().getId()).equals(assignee)) { + guns.setMessage("非当前用户处理不允许撤销,请刷新重试"); + throw guns; + } + String preActivityId = historicActivityInstances.get(historicActivityInstances.size() - 1).getActivityId(); + + //恢复更新状态 + cwsSuportService.cancelCaseState(bizId); + FlowUserDto dto = FlowDcmsUserFactory.createFlowUser(service.getCurrLoginUser()); + Task task = processEngine.getTaskService().createTaskQuery().processInstanceId(processId).singleResult(); + ExecutionEntity currEntity = (ExecutionEntity) processEngine.getRuntimeService().createExecutionQuery().executionId(task.getExecutionId()).singleResult(); + // String preActivityId = BizFlowUtil.findPreActivity(currEntity.getActivityId(), processId); + //撤销流程 + BizFlowUtil.moveSingleActivityId(processId, task.getId(), currEntity.getActivityId(), preActivityId, dto.getDeptId(), dto.getRoleTip(), dto.getUserId()); + } + } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java index 99c5d64..be9fe8e 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java @@ -7,7 +7,6 @@ import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.flowable.dto.ProcessDcmsDto; -import com.casic.missiles.modular.flowable.dto.ProcessRecord; import com.casic.missiles.modular.flowable.service.IFlowNextnodeService; import com.casic.missiles.modular.system.model.FlowNextnode; import org.flowable.engine.history.HistoricActivityInstance; @@ -179,7 +178,11 @@ * @param targetTaskKey * @return */ - public static String moveSingleActivityId(String processInstanceId, String currentActivityId, String targetTaskKey) { - return FlowableUtil.moveSingleActivityId(processInstanceId, currentActivityId, targetTaskKey); + public static String moveSingleActivityId(String processInstanceId, String taskId, String currentActivityId, String targetTaskKey, String currDeptId, String roleTip, String currUserId) { + return FlowableUtil.moveSingleActivityId(processInstanceId, taskId, currentActivityId, targetTaskKey, currDeptId, roleTip, currUserId); + } + + public static List getFinishedHistorics(String processInstanceId) { + return FlowableUtil.getFinishedHistorics(processInstanceId); } } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java index 38a7c95..8be4b8e 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java @@ -6,6 +6,7 @@ import com.casic.missiles.modular.cwscase.model.CwsCase; import com.casic.missiles.modular.cwscase.model.QueryCondition; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; import java.util.List; import java.util.Map; @@ -40,4 +41,6 @@ List> workList(@Param("page") Page page,@Param("groupId")String groupId,@Param("onedeptid")String onedeptid,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); List> completedList(@Param("page") Page page,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); + @Update("update dcm_cws_case set CASE_STATE = PRE_STATE where id = #{bizId}") + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java index 5dcdcf0..02ea4e8 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java @@ -39,4 +39,10 @@ List> workList(Page page,String groupId,String onedeptid,String actUserId, QueryCondition queryCondition); List> completedList(Page page,String actUserId, QueryCondition queryCondition); + + /** + * 案件撤销 + * @param bizId + */ + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java index a650580..0b3d192 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java @@ -487,6 +487,15 @@ return results; } + /** + * 案件撤销 + * @param bizId 案卷ID + */ + @Override + public void cancelCaseState(String bizId) { + this.baseMapper.cancelCaseState(bizId); + } + //包装大小类 private Map warpper(Map m) { diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java index c1e0675..5564b36 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.modular.flowable.service.ICwsSuportService; import com.casic.missiles.modular.system.model.Dict; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.Serializable; @@ -276,4 +277,8 @@ public CwsCase selectCaseById(Serializable id) { return cwsCaseService.selectById(id); } + @Override + public void cancelCaseState(String bizId) { + cwsCaseService.cancelCaseState(bizId); + } } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java index 3d9ac58..a45ce55 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java @@ -76,6 +76,11 @@ return ResponseData.success(processId); } + @PostMapping(value = "/cancelTask") + public Object cancelTask(String bizId,String processId,String caseState) { + caseFlowService.cancelActivity(bizId,processId,caseState); + return ResponseData.success(); + } /** * 案件处理接口 @@ -112,7 +117,7 @@ @GetMapping(value = "/historicalRecords") @ResponseBody public Object historicalRecords(String processId) { - HistoricActivityInstanceQuery query = processEngine.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId(processId).activityType("userTask"); + HistoricActivityInstanceQuery query = processEngine.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId(processId).activityType("userTask").orderByHistoricActivityInstanceEndTime().asc(); List list = query.list(); List processRecords = new ArrayList<>(); for (HistoricActivityInstance task : list) { diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java index b1545a4..850f065 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java @@ -6,12 +6,19 @@ import com.casic.missiles.core.common.service.ICommonPermissionService; import com.casic.missiles.core.exception.GunsException; import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.cwscase.model.CwsCase; import com.casic.missiles.modular.dictexpand.model.DictExpand; +import com.casic.missiles.modular.flowable.dto.FlowUserDto; import com.casic.missiles.modular.flowable.dto.ProcessDcmsDto; import com.casic.missiles.modular.flowable.service.IBmsSuportService; import com.casic.missiles.modular.flowable.service.ICaseFlowService; +import com.casic.missiles.modular.flowable.service.ICwsSuportService; import com.casic.missiles.modular.flowable.util.BizFlowUtil; import com.casic.missiles.modular.flowable.util.FlowDcmsUserFactory; +import org.flowable.engine.ProcessEngine; +import org.flowable.engine.history.HistoricActivityInstance; +import org.flowable.engine.impl.persistence.entity.ExecutionEntity; +import org.flowable.task.api.Task; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -20,7 +27,9 @@ import org.springframework.transaction.annotation.Transactional; import java.sql.Timestamp; +import java.util.Arrays; import java.util.Calendar; +import java.util.List; /** *

@@ -35,8 +44,10 @@ private static final Logger logger = LoggerFactory.getLogger(CaseFlowServiceImpl.class); @Autowired private ICommonPermissionService service; - - + @Autowired + private ICwsSuportService cwsSuportService; + @Value("${casic.case.cancelNodes}") + private String[] cancelNodes; @Autowired private IBmsSuportService caseSuportService; @@ -45,6 +56,8 @@ */ @Value("${casic.case.defaultLimitTime:120}") private Integer defaultLimitTime; + @Autowired + private ProcessEngine processEngine; /** * 启动案卷流程 @@ -110,5 +123,41 @@ // } } + @Transactional(rollbackFor = Exception.class) + @Override + public void cancelActivity(String bizId, String processId, String caseState) { + GunsException guns = new GunsException(BizExceptionEnum.SERVER_ERROR); + if (ToolUtil.isEmpty(caseState)) { + guns.setMessage("当前案卷状态不能为空"); + throw guns; + } + CwsCase cwsCase = cwsSuportService.selectCaseById(bizId); + List historicActivityInstances = BizFlowUtil.getFinishedHistorics(processId); + if (!String.valueOf(cwsCase.getCaseState()).equals(caseState) || historicActivityInstances.isEmpty()) { + guns.setMessage("当前节点状态已变更,请刷新重试"); + throw guns; + } + String nodeKey = cwsCase.getPreState() + "" + cwsCase.getCaseState(); + if (!Arrays.asList(cancelNodes).contains(nodeKey)) { + guns.setMessage("当前操作不允许撤销,请刷新重试"); + throw guns; + } + String assignee = historicActivityInstances.get(historicActivityInstances.size() - 1).getAssignee(); + if (!String.valueOf(service.getCurrLoginUser().getId()).equals(assignee)) { + guns.setMessage("非当前用户处理不允许撤销,请刷新重试"); + throw guns; + } + String preActivityId = historicActivityInstances.get(historicActivityInstances.size() - 1).getActivityId(); + + //恢复更新状态 + cwsSuportService.cancelCaseState(bizId); + FlowUserDto dto = FlowDcmsUserFactory.createFlowUser(service.getCurrLoginUser()); + Task task = processEngine.getTaskService().createTaskQuery().processInstanceId(processId).singleResult(); + ExecutionEntity currEntity = (ExecutionEntity) processEngine.getRuntimeService().createExecutionQuery().executionId(task.getExecutionId()).singleResult(); + // String preActivityId = BizFlowUtil.findPreActivity(currEntity.getActivityId(), processId); + //撤销流程 + BizFlowUtil.moveSingleActivityId(processId, task.getId(), currEntity.getActivityId(), preActivityId, dto.getDeptId(), dto.getRoleTip(), dto.getUserId()); + } + } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java index 99c5d64..be9fe8e 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java @@ -7,7 +7,6 @@ import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.flowable.dto.ProcessDcmsDto; -import com.casic.missiles.modular.flowable.dto.ProcessRecord; import com.casic.missiles.modular.flowable.service.IFlowNextnodeService; import com.casic.missiles.modular.system.model.FlowNextnode; import org.flowable.engine.history.HistoricActivityInstance; @@ -179,7 +178,11 @@ * @param targetTaskKey * @return */ - public static String moveSingleActivityId(String processInstanceId, String currentActivityId, String targetTaskKey) { - return FlowableUtil.moveSingleActivityId(processInstanceId, currentActivityId, targetTaskKey); + public static String moveSingleActivityId(String processInstanceId, String taskId, String currentActivityId, String targetTaskKey, String currDeptId, String roleTip, String currUserId) { + return FlowableUtil.moveSingleActivityId(processInstanceId, taskId, currentActivityId, targetTaskKey, currDeptId, roleTip, currUserId); + } + + public static List getFinishedHistorics(String processInstanceId) { + return FlowableUtil.getFinishedHistorics(processInstanceId); } } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java index 1a762d4..b838c47 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java @@ -3,7 +3,6 @@ import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.flowable.constant.FlowConstants; -import com.casic.missiles.modular.flowable.dto.ProcessRecord; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.FlowNode; import org.flowable.bpmn.model.SequenceFlow; @@ -110,6 +109,17 @@ return null; } + /** + * 获取已完成任务列表 + * + * @param processInstanceId 流程实例ID + * @return 已完成task结果集 + */ + public static List getFinishedHistorics(String processInstanceId) { + List historicActivityInstances = getProcessEngine().getHistoryService().createHistoricActivityInstanceQuery().finished().processInstanceId(processInstanceId).activityType("userTask").list(); +// historicActivityInstances.get(0) + return historicActivityInstances; + } /** * 查询流程记录 @@ -140,7 +150,17 @@ return sourceRef; } - public static String moveSingleActivityId(String processId, String currTaskActivityId, String targetTaskKey) { + public static String moveSingleActivityId(String processId, String taskId, String currTaskActivityId, String targetTaskKey, String currDeptId, String roleTip,String currUserId) { + //删除记录ID +// getProcessEngine().getHistoryService().deleteHistoricTaskInstance(taskId); + getProcessEngine().getTaskService().setAssignee(taskId,currUserId); + getProcessEngine().getTaskService().addComment(taskId, processId, "申请已撤销"); + getProcessEngine().getTaskService().addComment(taskId, processId, FlowConstants.OPERATION_TYPE, "申请已撤销"); + //保存当前操作用户节点 + getProcessEngine().getTaskService().addComment(taskId, processId, FlowConstants.DEPT_TYPE, currDeptId); + //当前处理人角色 + getProcessEngine().getTaskService().addComment(taskId, processId, FlowConstants.ROLE_TYPE, roleTip); + getProcessEngine().getRuntimeService().createChangeActivityStateBuilder() .processInstanceId(processId).cancelActivityId(currTaskActivityId) .startActivityId(targetTaskKey).changeState(); @@ -148,7 +168,7 @@ } public static Task getCurrTask(String processId) { - Task task = processEngine.getTaskService().createTaskQuery().processInstanceId(processId).singleResult(); + Task task = getProcessEngine().getTaskService().createTaskQuery().processInstanceId(processId).singleResult(); return task; } } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java index 38a7c95..8be4b8e 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java @@ -6,6 +6,7 @@ import com.casic.missiles.modular.cwscase.model.CwsCase; import com.casic.missiles.modular.cwscase.model.QueryCondition; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; import java.util.List; import java.util.Map; @@ -40,4 +41,6 @@ List> workList(@Param("page") Page page,@Param("groupId")String groupId,@Param("onedeptid")String onedeptid,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); List> completedList(@Param("page") Page page,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); + @Update("update dcm_cws_case set CASE_STATE = PRE_STATE where id = #{bizId}") + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java index 5dcdcf0..02ea4e8 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java @@ -39,4 +39,10 @@ List> workList(Page page,String groupId,String onedeptid,String actUserId, QueryCondition queryCondition); List> completedList(Page page,String actUserId, QueryCondition queryCondition); + + /** + * 案件撤销 + * @param bizId + */ + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java index a650580..0b3d192 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java @@ -487,6 +487,15 @@ return results; } + /** + * 案件撤销 + * @param bizId 案卷ID + */ + @Override + public void cancelCaseState(String bizId) { + this.baseMapper.cancelCaseState(bizId); + } + //包装大小类 private Map warpper(Map m) { diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java index c1e0675..5564b36 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.modular.flowable.service.ICwsSuportService; import com.casic.missiles.modular.system.model.Dict; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.Serializable; @@ -276,4 +277,8 @@ public CwsCase selectCaseById(Serializable id) { return cwsCaseService.selectById(id); } + @Override + public void cancelCaseState(String bizId) { + cwsCaseService.cancelCaseState(bizId); + } } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java index 3d9ac58..a45ce55 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java @@ -76,6 +76,11 @@ return ResponseData.success(processId); } + @PostMapping(value = "/cancelTask") + public Object cancelTask(String bizId,String processId,String caseState) { + caseFlowService.cancelActivity(bizId,processId,caseState); + return ResponseData.success(); + } /** * 案件处理接口 @@ -112,7 +117,7 @@ @GetMapping(value = "/historicalRecords") @ResponseBody public Object historicalRecords(String processId) { - HistoricActivityInstanceQuery query = processEngine.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId(processId).activityType("userTask"); + HistoricActivityInstanceQuery query = processEngine.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId(processId).activityType("userTask").orderByHistoricActivityInstanceEndTime().asc(); List list = query.list(); List processRecords = new ArrayList<>(); for (HistoricActivityInstance task : list) { diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java index b1545a4..850f065 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java @@ -6,12 +6,19 @@ import com.casic.missiles.core.common.service.ICommonPermissionService; import com.casic.missiles.core.exception.GunsException; import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.cwscase.model.CwsCase; import com.casic.missiles.modular.dictexpand.model.DictExpand; +import com.casic.missiles.modular.flowable.dto.FlowUserDto; import com.casic.missiles.modular.flowable.dto.ProcessDcmsDto; import com.casic.missiles.modular.flowable.service.IBmsSuportService; import com.casic.missiles.modular.flowable.service.ICaseFlowService; +import com.casic.missiles.modular.flowable.service.ICwsSuportService; import com.casic.missiles.modular.flowable.util.BizFlowUtil; import com.casic.missiles.modular.flowable.util.FlowDcmsUserFactory; +import org.flowable.engine.ProcessEngine; +import org.flowable.engine.history.HistoricActivityInstance; +import org.flowable.engine.impl.persistence.entity.ExecutionEntity; +import org.flowable.task.api.Task; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -20,7 +27,9 @@ import org.springframework.transaction.annotation.Transactional; import java.sql.Timestamp; +import java.util.Arrays; import java.util.Calendar; +import java.util.List; /** *

@@ -35,8 +44,10 @@ private static final Logger logger = LoggerFactory.getLogger(CaseFlowServiceImpl.class); @Autowired private ICommonPermissionService service; - - + @Autowired + private ICwsSuportService cwsSuportService; + @Value("${casic.case.cancelNodes}") + private String[] cancelNodes; @Autowired private IBmsSuportService caseSuportService; @@ -45,6 +56,8 @@ */ @Value("${casic.case.defaultLimitTime:120}") private Integer defaultLimitTime; + @Autowired + private ProcessEngine processEngine; /** * 启动案卷流程 @@ -110,5 +123,41 @@ // } } + @Transactional(rollbackFor = Exception.class) + @Override + public void cancelActivity(String bizId, String processId, String caseState) { + GunsException guns = new GunsException(BizExceptionEnum.SERVER_ERROR); + if (ToolUtil.isEmpty(caseState)) { + guns.setMessage("当前案卷状态不能为空"); + throw guns; + } + CwsCase cwsCase = cwsSuportService.selectCaseById(bizId); + List historicActivityInstances = BizFlowUtil.getFinishedHistorics(processId); + if (!String.valueOf(cwsCase.getCaseState()).equals(caseState) || historicActivityInstances.isEmpty()) { + guns.setMessage("当前节点状态已变更,请刷新重试"); + throw guns; + } + String nodeKey = cwsCase.getPreState() + "" + cwsCase.getCaseState(); + if (!Arrays.asList(cancelNodes).contains(nodeKey)) { + guns.setMessage("当前操作不允许撤销,请刷新重试"); + throw guns; + } + String assignee = historicActivityInstances.get(historicActivityInstances.size() - 1).getAssignee(); + if (!String.valueOf(service.getCurrLoginUser().getId()).equals(assignee)) { + guns.setMessage("非当前用户处理不允许撤销,请刷新重试"); + throw guns; + } + String preActivityId = historicActivityInstances.get(historicActivityInstances.size() - 1).getActivityId(); + + //恢复更新状态 + cwsSuportService.cancelCaseState(bizId); + FlowUserDto dto = FlowDcmsUserFactory.createFlowUser(service.getCurrLoginUser()); + Task task = processEngine.getTaskService().createTaskQuery().processInstanceId(processId).singleResult(); + ExecutionEntity currEntity = (ExecutionEntity) processEngine.getRuntimeService().createExecutionQuery().executionId(task.getExecutionId()).singleResult(); + // String preActivityId = BizFlowUtil.findPreActivity(currEntity.getActivityId(), processId); + //撤销流程 + BizFlowUtil.moveSingleActivityId(processId, task.getId(), currEntity.getActivityId(), preActivityId, dto.getDeptId(), dto.getRoleTip(), dto.getUserId()); + } + } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java index 99c5d64..be9fe8e 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java @@ -7,7 +7,6 @@ import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.flowable.dto.ProcessDcmsDto; -import com.casic.missiles.modular.flowable.dto.ProcessRecord; import com.casic.missiles.modular.flowable.service.IFlowNextnodeService; import com.casic.missiles.modular.system.model.FlowNextnode; import org.flowable.engine.history.HistoricActivityInstance; @@ -179,7 +178,11 @@ * @param targetTaskKey * @return */ - public static String moveSingleActivityId(String processInstanceId, String currentActivityId, String targetTaskKey) { - return FlowableUtil.moveSingleActivityId(processInstanceId, currentActivityId, targetTaskKey); + public static String moveSingleActivityId(String processInstanceId, String taskId, String currentActivityId, String targetTaskKey, String currDeptId, String roleTip, String currUserId) { + return FlowableUtil.moveSingleActivityId(processInstanceId, taskId, currentActivityId, targetTaskKey, currDeptId, roleTip, currUserId); + } + + public static List getFinishedHistorics(String processInstanceId) { + return FlowableUtil.getFinishedHistorics(processInstanceId); } } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java index 1a762d4..b838c47 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java @@ -3,7 +3,6 @@ import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.flowable.constant.FlowConstants; -import com.casic.missiles.modular.flowable.dto.ProcessRecord; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.FlowNode; import org.flowable.bpmn.model.SequenceFlow; @@ -110,6 +109,17 @@ return null; } + /** + * 获取已完成任务列表 + * + * @param processInstanceId 流程实例ID + * @return 已完成task结果集 + */ + public static List getFinishedHistorics(String processInstanceId) { + List historicActivityInstances = getProcessEngine().getHistoryService().createHistoricActivityInstanceQuery().finished().processInstanceId(processInstanceId).activityType("userTask").list(); +// historicActivityInstances.get(0) + return historicActivityInstances; + } /** * 查询流程记录 @@ -140,7 +150,17 @@ return sourceRef; } - public static String moveSingleActivityId(String processId, String currTaskActivityId, String targetTaskKey) { + public static String moveSingleActivityId(String processId, String taskId, String currTaskActivityId, String targetTaskKey, String currDeptId, String roleTip,String currUserId) { + //删除记录ID +// getProcessEngine().getHistoryService().deleteHistoricTaskInstance(taskId); + getProcessEngine().getTaskService().setAssignee(taskId,currUserId); + getProcessEngine().getTaskService().addComment(taskId, processId, "申请已撤销"); + getProcessEngine().getTaskService().addComment(taskId, processId, FlowConstants.OPERATION_TYPE, "申请已撤销"); + //保存当前操作用户节点 + getProcessEngine().getTaskService().addComment(taskId, processId, FlowConstants.DEPT_TYPE, currDeptId); + //当前处理人角色 + getProcessEngine().getTaskService().addComment(taskId, processId, FlowConstants.ROLE_TYPE, roleTip); + getProcessEngine().getRuntimeService().createChangeActivityStateBuilder() .processInstanceId(processId).cancelActivityId(currTaskActivityId) .startActivityId(targetTaskKey).changeState(); @@ -148,7 +168,7 @@ } public static Task getCurrTask(String processId) { - Task task = processEngine.getTaskService().createTaskQuery().processInstanceId(processId).singleResult(); + Task task = getProcessEngine().getTaskService().createTaskQuery().processInstanceId(processId).singleResult(); return task; } } diff --git a/casic-service-support/src/main/java/com/casic/missiles/modular/cwscase/model/CwsCase.java b/casic-service-support/src/main/java/com/casic/missiles/modular/cwscase/model/CwsCase.java index 0346784..7a45e99 100644 --- a/casic-service-support/src/main/java/com/casic/missiles/modular/cwscase/model/CwsCase.java +++ b/casic-service-support/src/main/java/com/casic/missiles/modular/cwscase/model/CwsCase.java @@ -260,7 +260,11 @@ private String punishImage; @TableField("PUNISH_TIME") private Timestamp punishTime; - + /** + * 上一流程操作状态 判定节点操作是否可撤销 + */ + @TableField("PRE_STATE") + private String preState; @Override protected Serializable pkVal() { return this.id; diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java index 38a7c95..8be4b8e 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java @@ -6,6 +6,7 @@ import com.casic.missiles.modular.cwscase.model.CwsCase; import com.casic.missiles.modular.cwscase.model.QueryCondition; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; import java.util.List; import java.util.Map; @@ -40,4 +41,6 @@ List> workList(@Param("page") Page page,@Param("groupId")String groupId,@Param("onedeptid")String onedeptid,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); List> completedList(@Param("page") Page page,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); + @Update("update dcm_cws_case set CASE_STATE = PRE_STATE where id = #{bizId}") + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java index 5dcdcf0..02ea4e8 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java @@ -39,4 +39,10 @@ List> workList(Page page,String groupId,String onedeptid,String actUserId, QueryCondition queryCondition); List> completedList(Page page,String actUserId, QueryCondition queryCondition); + + /** + * 案件撤销 + * @param bizId + */ + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java index a650580..0b3d192 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java @@ -487,6 +487,15 @@ return results; } + /** + * 案件撤销 + * @param bizId 案卷ID + */ + @Override + public void cancelCaseState(String bizId) { + this.baseMapper.cancelCaseState(bizId); + } + //包装大小类 private Map warpper(Map m) { diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java index c1e0675..5564b36 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.modular.flowable.service.ICwsSuportService; import com.casic.missiles.modular.system.model.Dict; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.Serializable; @@ -276,4 +277,8 @@ public CwsCase selectCaseById(Serializable id) { return cwsCaseService.selectById(id); } + @Override + public void cancelCaseState(String bizId) { + cwsCaseService.cancelCaseState(bizId); + } } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java index 3d9ac58..a45ce55 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java @@ -76,6 +76,11 @@ return ResponseData.success(processId); } + @PostMapping(value = "/cancelTask") + public Object cancelTask(String bizId,String processId,String caseState) { + caseFlowService.cancelActivity(bizId,processId,caseState); + return ResponseData.success(); + } /** * 案件处理接口 @@ -112,7 +117,7 @@ @GetMapping(value = "/historicalRecords") @ResponseBody public Object historicalRecords(String processId) { - HistoricActivityInstanceQuery query = processEngine.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId(processId).activityType("userTask"); + HistoricActivityInstanceQuery query = processEngine.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId(processId).activityType("userTask").orderByHistoricActivityInstanceEndTime().asc(); List list = query.list(); List processRecords = new ArrayList<>(); for (HistoricActivityInstance task : list) { diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java index b1545a4..850f065 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java @@ -6,12 +6,19 @@ import com.casic.missiles.core.common.service.ICommonPermissionService; import com.casic.missiles.core.exception.GunsException; import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.cwscase.model.CwsCase; import com.casic.missiles.modular.dictexpand.model.DictExpand; +import com.casic.missiles.modular.flowable.dto.FlowUserDto; import com.casic.missiles.modular.flowable.dto.ProcessDcmsDto; import com.casic.missiles.modular.flowable.service.IBmsSuportService; import com.casic.missiles.modular.flowable.service.ICaseFlowService; +import com.casic.missiles.modular.flowable.service.ICwsSuportService; import com.casic.missiles.modular.flowable.util.BizFlowUtil; import com.casic.missiles.modular.flowable.util.FlowDcmsUserFactory; +import org.flowable.engine.ProcessEngine; +import org.flowable.engine.history.HistoricActivityInstance; +import org.flowable.engine.impl.persistence.entity.ExecutionEntity; +import org.flowable.task.api.Task; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -20,7 +27,9 @@ import org.springframework.transaction.annotation.Transactional; import java.sql.Timestamp; +import java.util.Arrays; import java.util.Calendar; +import java.util.List; /** *

@@ -35,8 +44,10 @@ private static final Logger logger = LoggerFactory.getLogger(CaseFlowServiceImpl.class); @Autowired private ICommonPermissionService service; - - + @Autowired + private ICwsSuportService cwsSuportService; + @Value("${casic.case.cancelNodes}") + private String[] cancelNodes; @Autowired private IBmsSuportService caseSuportService; @@ -45,6 +56,8 @@ */ @Value("${casic.case.defaultLimitTime:120}") private Integer defaultLimitTime; + @Autowired + private ProcessEngine processEngine; /** * 启动案卷流程 @@ -110,5 +123,41 @@ // } } + @Transactional(rollbackFor = Exception.class) + @Override + public void cancelActivity(String bizId, String processId, String caseState) { + GunsException guns = new GunsException(BizExceptionEnum.SERVER_ERROR); + if (ToolUtil.isEmpty(caseState)) { + guns.setMessage("当前案卷状态不能为空"); + throw guns; + } + CwsCase cwsCase = cwsSuportService.selectCaseById(bizId); + List historicActivityInstances = BizFlowUtil.getFinishedHistorics(processId); + if (!String.valueOf(cwsCase.getCaseState()).equals(caseState) || historicActivityInstances.isEmpty()) { + guns.setMessage("当前节点状态已变更,请刷新重试"); + throw guns; + } + String nodeKey = cwsCase.getPreState() + "" + cwsCase.getCaseState(); + if (!Arrays.asList(cancelNodes).contains(nodeKey)) { + guns.setMessage("当前操作不允许撤销,请刷新重试"); + throw guns; + } + String assignee = historicActivityInstances.get(historicActivityInstances.size() - 1).getAssignee(); + if (!String.valueOf(service.getCurrLoginUser().getId()).equals(assignee)) { + guns.setMessage("非当前用户处理不允许撤销,请刷新重试"); + throw guns; + } + String preActivityId = historicActivityInstances.get(historicActivityInstances.size() - 1).getActivityId(); + + //恢复更新状态 + cwsSuportService.cancelCaseState(bizId); + FlowUserDto dto = FlowDcmsUserFactory.createFlowUser(service.getCurrLoginUser()); + Task task = processEngine.getTaskService().createTaskQuery().processInstanceId(processId).singleResult(); + ExecutionEntity currEntity = (ExecutionEntity) processEngine.getRuntimeService().createExecutionQuery().executionId(task.getExecutionId()).singleResult(); + // String preActivityId = BizFlowUtil.findPreActivity(currEntity.getActivityId(), processId); + //撤销流程 + BizFlowUtil.moveSingleActivityId(processId, task.getId(), currEntity.getActivityId(), preActivityId, dto.getDeptId(), dto.getRoleTip(), dto.getUserId()); + } + } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java index 99c5d64..be9fe8e 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java @@ -7,7 +7,6 @@ import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.flowable.dto.ProcessDcmsDto; -import com.casic.missiles.modular.flowable.dto.ProcessRecord; import com.casic.missiles.modular.flowable.service.IFlowNextnodeService; import com.casic.missiles.modular.system.model.FlowNextnode; import org.flowable.engine.history.HistoricActivityInstance; @@ -179,7 +178,11 @@ * @param targetTaskKey * @return */ - public static String moveSingleActivityId(String processInstanceId, String currentActivityId, String targetTaskKey) { - return FlowableUtil.moveSingleActivityId(processInstanceId, currentActivityId, targetTaskKey); + public static String moveSingleActivityId(String processInstanceId, String taskId, String currentActivityId, String targetTaskKey, String currDeptId, String roleTip, String currUserId) { + return FlowableUtil.moveSingleActivityId(processInstanceId, taskId, currentActivityId, targetTaskKey, currDeptId, roleTip, currUserId); + } + + public static List getFinishedHistorics(String processInstanceId) { + return FlowableUtil.getFinishedHistorics(processInstanceId); } } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java index 1a762d4..b838c47 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java @@ -3,7 +3,6 @@ import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.flowable.constant.FlowConstants; -import com.casic.missiles.modular.flowable.dto.ProcessRecord; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.FlowNode; import org.flowable.bpmn.model.SequenceFlow; @@ -110,6 +109,17 @@ return null; } + /** + * 获取已完成任务列表 + * + * @param processInstanceId 流程实例ID + * @return 已完成task结果集 + */ + public static List getFinishedHistorics(String processInstanceId) { + List historicActivityInstances = getProcessEngine().getHistoryService().createHistoricActivityInstanceQuery().finished().processInstanceId(processInstanceId).activityType("userTask").list(); +// historicActivityInstances.get(0) + return historicActivityInstances; + } /** * 查询流程记录 @@ -140,7 +150,17 @@ return sourceRef; } - public static String moveSingleActivityId(String processId, String currTaskActivityId, String targetTaskKey) { + public static String moveSingleActivityId(String processId, String taskId, String currTaskActivityId, String targetTaskKey, String currDeptId, String roleTip,String currUserId) { + //删除记录ID +// getProcessEngine().getHistoryService().deleteHistoricTaskInstance(taskId); + getProcessEngine().getTaskService().setAssignee(taskId,currUserId); + getProcessEngine().getTaskService().addComment(taskId, processId, "申请已撤销"); + getProcessEngine().getTaskService().addComment(taskId, processId, FlowConstants.OPERATION_TYPE, "申请已撤销"); + //保存当前操作用户节点 + getProcessEngine().getTaskService().addComment(taskId, processId, FlowConstants.DEPT_TYPE, currDeptId); + //当前处理人角色 + getProcessEngine().getTaskService().addComment(taskId, processId, FlowConstants.ROLE_TYPE, roleTip); + getProcessEngine().getRuntimeService().createChangeActivityStateBuilder() .processInstanceId(processId).cancelActivityId(currTaskActivityId) .startActivityId(targetTaskKey).changeState(); @@ -148,7 +168,7 @@ } public static Task getCurrTask(String processId) { - Task task = processEngine.getTaskService().createTaskQuery().processInstanceId(processId).singleResult(); + Task task = getProcessEngine().getTaskService().createTaskQuery().processInstanceId(processId).singleResult(); return task; } } diff --git a/casic-service-support/src/main/java/com/casic/missiles/modular/cwscase/model/CwsCase.java b/casic-service-support/src/main/java/com/casic/missiles/modular/cwscase/model/CwsCase.java index 0346784..7a45e99 100644 --- a/casic-service-support/src/main/java/com/casic/missiles/modular/cwscase/model/CwsCase.java +++ b/casic-service-support/src/main/java/com/casic/missiles/modular/cwscase/model/CwsCase.java @@ -260,7 +260,11 @@ private String punishImage; @TableField("PUNISH_TIME") private Timestamp punishTime; - + /** + * 上一流程操作状态 判定节点操作是否可撤销 + */ + @TableField("PRE_STATE") + private String preState; @Override protected Serializable pkVal() { return this.id; diff --git a/casic-service-support/src/main/java/com/casic/missiles/modular/flowable/service/ICaseFlowService.java b/casic-service-support/src/main/java/com/casic/missiles/modular/flowable/service/ICaseFlowService.java index a618843..0af73f3 100644 --- a/casic-service-support/src/main/java/com/casic/missiles/modular/flowable/service/ICaseFlowService.java +++ b/casic-service-support/src/main/java/com/casic/missiles/modular/flowable/service/ICaseFlowService.java @@ -15,12 +15,19 @@ * @param taskUserId 核实人员ID (城管通上报案件可不传) * @return 案件流程ID */ - String startCaseFlow(int source, int caseState, String taskUserId,String bizId); + String startCaseFlow(int source, int caseState, String taskUserId, String bizId); /** * 任务办理接口 * * @param dto */ - void completeCaseTask(ProcessDcmsDto dto) ; + void completeCaseTask(ProcessDcmsDto dto); + + /** + * shan + * + * @param processId + */ + void cancelActivity(String bizId,String processId, String caseState); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java index 38a7c95..8be4b8e 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java @@ -6,6 +6,7 @@ import com.casic.missiles.modular.cwscase.model.CwsCase; import com.casic.missiles.modular.cwscase.model.QueryCondition; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; import java.util.List; import java.util.Map; @@ -40,4 +41,6 @@ List> workList(@Param("page") Page page,@Param("groupId")String groupId,@Param("onedeptid")String onedeptid,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); List> completedList(@Param("page") Page page,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); + @Update("update dcm_cws_case set CASE_STATE = PRE_STATE where id = #{bizId}") + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java index 5dcdcf0..02ea4e8 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java @@ -39,4 +39,10 @@ List> workList(Page page,String groupId,String onedeptid,String actUserId, QueryCondition queryCondition); List> completedList(Page page,String actUserId, QueryCondition queryCondition); + + /** + * 案件撤销 + * @param bizId + */ + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java index a650580..0b3d192 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java @@ -487,6 +487,15 @@ return results; } + /** + * 案件撤销 + * @param bizId 案卷ID + */ + @Override + public void cancelCaseState(String bizId) { + this.baseMapper.cancelCaseState(bizId); + } + //包装大小类 private Map warpper(Map m) { diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java index c1e0675..5564b36 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.modular.flowable.service.ICwsSuportService; import com.casic.missiles.modular.system.model.Dict; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.Serializable; @@ -276,4 +277,8 @@ public CwsCase selectCaseById(Serializable id) { return cwsCaseService.selectById(id); } + @Override + public void cancelCaseState(String bizId) { + cwsCaseService.cancelCaseState(bizId); + } } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java index 3d9ac58..a45ce55 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java @@ -76,6 +76,11 @@ return ResponseData.success(processId); } + @PostMapping(value = "/cancelTask") + public Object cancelTask(String bizId,String processId,String caseState) { + caseFlowService.cancelActivity(bizId,processId,caseState); + return ResponseData.success(); + } /** * 案件处理接口 @@ -112,7 +117,7 @@ @GetMapping(value = "/historicalRecords") @ResponseBody public Object historicalRecords(String processId) { - HistoricActivityInstanceQuery query = processEngine.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId(processId).activityType("userTask"); + HistoricActivityInstanceQuery query = processEngine.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId(processId).activityType("userTask").orderByHistoricActivityInstanceEndTime().asc(); List list = query.list(); List processRecords = new ArrayList<>(); for (HistoricActivityInstance task : list) { diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java index b1545a4..850f065 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java @@ -6,12 +6,19 @@ import com.casic.missiles.core.common.service.ICommonPermissionService; import com.casic.missiles.core.exception.GunsException; import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.cwscase.model.CwsCase; import com.casic.missiles.modular.dictexpand.model.DictExpand; +import com.casic.missiles.modular.flowable.dto.FlowUserDto; import com.casic.missiles.modular.flowable.dto.ProcessDcmsDto; import com.casic.missiles.modular.flowable.service.IBmsSuportService; import com.casic.missiles.modular.flowable.service.ICaseFlowService; +import com.casic.missiles.modular.flowable.service.ICwsSuportService; import com.casic.missiles.modular.flowable.util.BizFlowUtil; import com.casic.missiles.modular.flowable.util.FlowDcmsUserFactory; +import org.flowable.engine.ProcessEngine; +import org.flowable.engine.history.HistoricActivityInstance; +import org.flowable.engine.impl.persistence.entity.ExecutionEntity; +import org.flowable.task.api.Task; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -20,7 +27,9 @@ import org.springframework.transaction.annotation.Transactional; import java.sql.Timestamp; +import java.util.Arrays; import java.util.Calendar; +import java.util.List; /** *

@@ -35,8 +44,10 @@ private static final Logger logger = LoggerFactory.getLogger(CaseFlowServiceImpl.class); @Autowired private ICommonPermissionService service; - - + @Autowired + private ICwsSuportService cwsSuportService; + @Value("${casic.case.cancelNodes}") + private String[] cancelNodes; @Autowired private IBmsSuportService caseSuportService; @@ -45,6 +56,8 @@ */ @Value("${casic.case.defaultLimitTime:120}") private Integer defaultLimitTime; + @Autowired + private ProcessEngine processEngine; /** * 启动案卷流程 @@ -110,5 +123,41 @@ // } } + @Transactional(rollbackFor = Exception.class) + @Override + public void cancelActivity(String bizId, String processId, String caseState) { + GunsException guns = new GunsException(BizExceptionEnum.SERVER_ERROR); + if (ToolUtil.isEmpty(caseState)) { + guns.setMessage("当前案卷状态不能为空"); + throw guns; + } + CwsCase cwsCase = cwsSuportService.selectCaseById(bizId); + List historicActivityInstances = BizFlowUtil.getFinishedHistorics(processId); + if (!String.valueOf(cwsCase.getCaseState()).equals(caseState) || historicActivityInstances.isEmpty()) { + guns.setMessage("当前节点状态已变更,请刷新重试"); + throw guns; + } + String nodeKey = cwsCase.getPreState() + "" + cwsCase.getCaseState(); + if (!Arrays.asList(cancelNodes).contains(nodeKey)) { + guns.setMessage("当前操作不允许撤销,请刷新重试"); + throw guns; + } + String assignee = historicActivityInstances.get(historicActivityInstances.size() - 1).getAssignee(); + if (!String.valueOf(service.getCurrLoginUser().getId()).equals(assignee)) { + guns.setMessage("非当前用户处理不允许撤销,请刷新重试"); + throw guns; + } + String preActivityId = historicActivityInstances.get(historicActivityInstances.size() - 1).getActivityId(); + + //恢复更新状态 + cwsSuportService.cancelCaseState(bizId); + FlowUserDto dto = FlowDcmsUserFactory.createFlowUser(service.getCurrLoginUser()); + Task task = processEngine.getTaskService().createTaskQuery().processInstanceId(processId).singleResult(); + ExecutionEntity currEntity = (ExecutionEntity) processEngine.getRuntimeService().createExecutionQuery().executionId(task.getExecutionId()).singleResult(); + // String preActivityId = BizFlowUtil.findPreActivity(currEntity.getActivityId(), processId); + //撤销流程 + BizFlowUtil.moveSingleActivityId(processId, task.getId(), currEntity.getActivityId(), preActivityId, dto.getDeptId(), dto.getRoleTip(), dto.getUserId()); + } + } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java index 99c5d64..be9fe8e 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java @@ -7,7 +7,6 @@ import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.flowable.dto.ProcessDcmsDto; -import com.casic.missiles.modular.flowable.dto.ProcessRecord; import com.casic.missiles.modular.flowable.service.IFlowNextnodeService; import com.casic.missiles.modular.system.model.FlowNextnode; import org.flowable.engine.history.HistoricActivityInstance; @@ -179,7 +178,11 @@ * @param targetTaskKey * @return */ - public static String moveSingleActivityId(String processInstanceId, String currentActivityId, String targetTaskKey) { - return FlowableUtil.moveSingleActivityId(processInstanceId, currentActivityId, targetTaskKey); + public static String moveSingleActivityId(String processInstanceId, String taskId, String currentActivityId, String targetTaskKey, String currDeptId, String roleTip, String currUserId) { + return FlowableUtil.moveSingleActivityId(processInstanceId, taskId, currentActivityId, targetTaskKey, currDeptId, roleTip, currUserId); + } + + public static List getFinishedHistorics(String processInstanceId) { + return FlowableUtil.getFinishedHistorics(processInstanceId); } } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java index 1a762d4..b838c47 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java @@ -3,7 +3,6 @@ import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.flowable.constant.FlowConstants; -import com.casic.missiles.modular.flowable.dto.ProcessRecord; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.FlowNode; import org.flowable.bpmn.model.SequenceFlow; @@ -110,6 +109,17 @@ return null; } + /** + * 获取已完成任务列表 + * + * @param processInstanceId 流程实例ID + * @return 已完成task结果集 + */ + public static List getFinishedHistorics(String processInstanceId) { + List historicActivityInstances = getProcessEngine().getHistoryService().createHistoricActivityInstanceQuery().finished().processInstanceId(processInstanceId).activityType("userTask").list(); +// historicActivityInstances.get(0) + return historicActivityInstances; + } /** * 查询流程记录 @@ -140,7 +150,17 @@ return sourceRef; } - public static String moveSingleActivityId(String processId, String currTaskActivityId, String targetTaskKey) { + public static String moveSingleActivityId(String processId, String taskId, String currTaskActivityId, String targetTaskKey, String currDeptId, String roleTip,String currUserId) { + //删除记录ID +// getProcessEngine().getHistoryService().deleteHistoricTaskInstance(taskId); + getProcessEngine().getTaskService().setAssignee(taskId,currUserId); + getProcessEngine().getTaskService().addComment(taskId, processId, "申请已撤销"); + getProcessEngine().getTaskService().addComment(taskId, processId, FlowConstants.OPERATION_TYPE, "申请已撤销"); + //保存当前操作用户节点 + getProcessEngine().getTaskService().addComment(taskId, processId, FlowConstants.DEPT_TYPE, currDeptId); + //当前处理人角色 + getProcessEngine().getTaskService().addComment(taskId, processId, FlowConstants.ROLE_TYPE, roleTip); + getProcessEngine().getRuntimeService().createChangeActivityStateBuilder() .processInstanceId(processId).cancelActivityId(currTaskActivityId) .startActivityId(targetTaskKey).changeState(); @@ -148,7 +168,7 @@ } public static Task getCurrTask(String processId) { - Task task = processEngine.getTaskService().createTaskQuery().processInstanceId(processId).singleResult(); + Task task = getProcessEngine().getTaskService().createTaskQuery().processInstanceId(processId).singleResult(); return task; } } diff --git a/casic-service-support/src/main/java/com/casic/missiles/modular/cwscase/model/CwsCase.java b/casic-service-support/src/main/java/com/casic/missiles/modular/cwscase/model/CwsCase.java index 0346784..7a45e99 100644 --- a/casic-service-support/src/main/java/com/casic/missiles/modular/cwscase/model/CwsCase.java +++ b/casic-service-support/src/main/java/com/casic/missiles/modular/cwscase/model/CwsCase.java @@ -260,7 +260,11 @@ private String punishImage; @TableField("PUNISH_TIME") private Timestamp punishTime; - + /** + * 上一流程操作状态 判定节点操作是否可撤销 + */ + @TableField("PRE_STATE") + private String preState; @Override protected Serializable pkVal() { return this.id; diff --git a/casic-service-support/src/main/java/com/casic/missiles/modular/flowable/service/ICaseFlowService.java b/casic-service-support/src/main/java/com/casic/missiles/modular/flowable/service/ICaseFlowService.java index a618843..0af73f3 100644 --- a/casic-service-support/src/main/java/com/casic/missiles/modular/flowable/service/ICaseFlowService.java +++ b/casic-service-support/src/main/java/com/casic/missiles/modular/flowable/service/ICaseFlowService.java @@ -15,12 +15,19 @@ * @param taskUserId 核实人员ID (城管通上报案件可不传) * @return 案件流程ID */ - String startCaseFlow(int source, int caseState, String taskUserId,String bizId); + String startCaseFlow(int source, int caseState, String taskUserId, String bizId); /** * 任务办理接口 * * @param dto */ - void completeCaseTask(ProcessDcmsDto dto) ; + void completeCaseTask(ProcessDcmsDto dto); + + /** + * shan + * + * @param processId + */ + void cancelActivity(String bizId,String processId, String caseState); } diff --git a/casic-service-support/src/main/java/com/casic/missiles/modular/flowable/service/ICwsSuportService.java b/casic-service-support/src/main/java/com/casic/missiles/modular/flowable/service/ICwsSuportService.java index 8d56451..2d39b28 100644 --- a/casic-service-support/src/main/java/com/casic/missiles/modular/flowable/service/ICwsSuportService.java +++ b/casic-service-support/src/main/java/com/casic/missiles/modular/flowable/service/ICwsSuportService.java @@ -89,4 +89,9 @@ */ CwsCase selectCaseById(Serializable id); + /** + * 案件处理状态撤销操作 + * @param bizId + */ + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java index 38a7c95..8be4b8e 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/dao/CwsCaseMapper.java @@ -6,6 +6,7 @@ import com.casic.missiles.modular.cwscase.model.CwsCase; import com.casic.missiles.modular.cwscase.model.QueryCondition; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; import java.util.List; import java.util.Map; @@ -40,4 +41,6 @@ List> workList(@Param("page") Page page,@Param("groupId")String groupId,@Param("onedeptid")String onedeptid,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); List> completedList(@Param("page") Page page,@Param("actUserId")String actUserId,@Param("queryCondition") QueryCondition queryCondition); + @Update("update dcm_cws_case set CASE_STATE = PRE_STATE where id = #{bizId}") + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java index 5dcdcf0..02ea4e8 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/ICwsCaseService.java @@ -39,4 +39,10 @@ List> workList(Page page,String groupId,String onedeptid,String actUserId, QueryCondition queryCondition); List> completedList(Page page,String actUserId, QueryCondition queryCondition); + + /** + * 案件撤销 + * @param bizId + */ + void cancelCaseState(String bizId); } diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java index a650580..0b3d192 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsCaseServiceImpl.java @@ -487,6 +487,15 @@ return results; } + /** + * 案件撤销 + * @param bizId 案卷ID + */ + @Override + public void cancelCaseState(String bizId) { + this.baseMapper.cancelCaseState(bizId); + } + //包装大小类 private Map warpper(Map m) { diff --git a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java index c1e0675..5564b36 100644 --- a/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java +++ b/casic-service-cws/casic-cws-case/src/main/java/com/casic/missiles/modular/cwscase/service/impl/CwsSuportServiceImpl.java @@ -13,6 +13,7 @@ import com.casic.missiles.modular.flowable.service.ICwsSuportService; import com.casic.missiles.modular.system.model.Dict; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.Serializable; @@ -276,4 +277,8 @@ public CwsCase selectCaseById(Serializable id) { return cwsCaseService.selectById(id); } + @Override + public void cancelCaseState(String bizId) { + cwsCaseService.cancelCaseState(bizId); + } } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java index 3d9ac58..a45ce55 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/controller/ProcessController.java @@ -76,6 +76,11 @@ return ResponseData.success(processId); } + @PostMapping(value = "/cancelTask") + public Object cancelTask(String bizId,String processId,String caseState) { + caseFlowService.cancelActivity(bizId,processId,caseState); + return ResponseData.success(); + } /** * 案件处理接口 @@ -112,7 +117,7 @@ @GetMapping(value = "/historicalRecords") @ResponseBody public Object historicalRecords(String processId) { - HistoricActivityInstanceQuery query = processEngine.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId(processId).activityType("userTask"); + HistoricActivityInstanceQuery query = processEngine.getHistoryService().createHistoricActivityInstanceQuery().processInstanceId(processId).activityType("userTask").orderByHistoricActivityInstanceEndTime().asc(); List list = query.list(); List processRecords = new ArrayList<>(); for (HistoricActivityInstance task : list) { diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java index b1545a4..850f065 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/service/impl/CaseFlowServiceImpl.java @@ -6,12 +6,19 @@ import com.casic.missiles.core.common.service.ICommonPermissionService; import com.casic.missiles.core.exception.GunsException; import com.casic.missiles.core.util.ToolUtil; +import com.casic.missiles.modular.cwscase.model.CwsCase; import com.casic.missiles.modular.dictexpand.model.DictExpand; +import com.casic.missiles.modular.flowable.dto.FlowUserDto; import com.casic.missiles.modular.flowable.dto.ProcessDcmsDto; import com.casic.missiles.modular.flowable.service.IBmsSuportService; import com.casic.missiles.modular.flowable.service.ICaseFlowService; +import com.casic.missiles.modular.flowable.service.ICwsSuportService; import com.casic.missiles.modular.flowable.util.BizFlowUtil; import com.casic.missiles.modular.flowable.util.FlowDcmsUserFactory; +import org.flowable.engine.ProcessEngine; +import org.flowable.engine.history.HistoricActivityInstance; +import org.flowable.engine.impl.persistence.entity.ExecutionEntity; +import org.flowable.task.api.Task; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -20,7 +27,9 @@ import org.springframework.transaction.annotation.Transactional; import java.sql.Timestamp; +import java.util.Arrays; import java.util.Calendar; +import java.util.List; /** *

@@ -35,8 +44,10 @@ private static final Logger logger = LoggerFactory.getLogger(CaseFlowServiceImpl.class); @Autowired private ICommonPermissionService service; - - + @Autowired + private ICwsSuportService cwsSuportService; + @Value("${casic.case.cancelNodes}") + private String[] cancelNodes; @Autowired private IBmsSuportService caseSuportService; @@ -45,6 +56,8 @@ */ @Value("${casic.case.defaultLimitTime:120}") private Integer defaultLimitTime; + @Autowired + private ProcessEngine processEngine; /** * 启动案卷流程 @@ -110,5 +123,41 @@ // } } + @Transactional(rollbackFor = Exception.class) + @Override + public void cancelActivity(String bizId, String processId, String caseState) { + GunsException guns = new GunsException(BizExceptionEnum.SERVER_ERROR); + if (ToolUtil.isEmpty(caseState)) { + guns.setMessage("当前案卷状态不能为空"); + throw guns; + } + CwsCase cwsCase = cwsSuportService.selectCaseById(bizId); + List historicActivityInstances = BizFlowUtil.getFinishedHistorics(processId); + if (!String.valueOf(cwsCase.getCaseState()).equals(caseState) || historicActivityInstances.isEmpty()) { + guns.setMessage("当前节点状态已变更,请刷新重试"); + throw guns; + } + String nodeKey = cwsCase.getPreState() + "" + cwsCase.getCaseState(); + if (!Arrays.asList(cancelNodes).contains(nodeKey)) { + guns.setMessage("当前操作不允许撤销,请刷新重试"); + throw guns; + } + String assignee = historicActivityInstances.get(historicActivityInstances.size() - 1).getAssignee(); + if (!String.valueOf(service.getCurrLoginUser().getId()).equals(assignee)) { + guns.setMessage("非当前用户处理不允许撤销,请刷新重试"); + throw guns; + } + String preActivityId = historicActivityInstances.get(historicActivityInstances.size() - 1).getActivityId(); + + //恢复更新状态 + cwsSuportService.cancelCaseState(bizId); + FlowUserDto dto = FlowDcmsUserFactory.createFlowUser(service.getCurrLoginUser()); + Task task = processEngine.getTaskService().createTaskQuery().processInstanceId(processId).singleResult(); + ExecutionEntity currEntity = (ExecutionEntity) processEngine.getRuntimeService().createExecutionQuery().executionId(task.getExecutionId()).singleResult(); + // String preActivityId = BizFlowUtil.findPreActivity(currEntity.getActivityId(), processId); + //撤销流程 + BizFlowUtil.moveSingleActivityId(processId, task.getId(), currEntity.getActivityId(), preActivityId, dto.getDeptId(), dto.getRoleTip(), dto.getUserId()); + } + } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java index 99c5d64..be9fe8e 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/BizFlowUtil.java @@ -7,7 +7,6 @@ import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.flowable.dto.ProcessDcmsDto; -import com.casic.missiles.modular.flowable.dto.ProcessRecord; import com.casic.missiles.modular.flowable.service.IFlowNextnodeService; import com.casic.missiles.modular.system.model.FlowNextnode; import org.flowable.engine.history.HistoricActivityInstance; @@ -179,7 +178,11 @@ * @param targetTaskKey * @return */ - public static String moveSingleActivityId(String processInstanceId, String currentActivityId, String targetTaskKey) { - return FlowableUtil.moveSingleActivityId(processInstanceId, currentActivityId, targetTaskKey); + public static String moveSingleActivityId(String processInstanceId, String taskId, String currentActivityId, String targetTaskKey, String currDeptId, String roleTip, String currUserId) { + return FlowableUtil.moveSingleActivityId(processInstanceId, taskId, currentActivityId, targetTaskKey, currDeptId, roleTip, currUserId); + } + + public static List getFinishedHistorics(String processInstanceId) { + return FlowableUtil.getFinishedHistorics(processInstanceId); } } diff --git a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java index 1a762d4..b838c47 100644 --- a/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java +++ b/casic-service-cws/casic-cws-flow/src/main/java/com/casic/missiles/modular/flowable/util/FlowableUtil.java @@ -3,7 +3,6 @@ import com.casic.missiles.core.util.SpringContextHolder; import com.casic.missiles.core.util.ToolUtil; import com.casic.missiles.modular.flowable.constant.FlowConstants; -import com.casic.missiles.modular.flowable.dto.ProcessRecord; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.FlowNode; import org.flowable.bpmn.model.SequenceFlow; @@ -110,6 +109,17 @@ return null; } + /** + * 获取已完成任务列表 + * + * @param processInstanceId 流程实例ID + * @return 已完成task结果集 + */ + public static List getFinishedHistorics(String processInstanceId) { + List historicActivityInstances = getProcessEngine().getHistoryService().createHistoricActivityInstanceQuery().finished().processInstanceId(processInstanceId).activityType("userTask").list(); +// historicActivityInstances.get(0) + return historicActivityInstances; + } /** * 查询流程记录 @@ -140,7 +150,17 @@ return sourceRef; } - public static String moveSingleActivityId(String processId, String currTaskActivityId, String targetTaskKey) { + public static String moveSingleActivityId(String processId, String taskId, String currTaskActivityId, String targetTaskKey, String currDeptId, String roleTip,String currUserId) { + //删除记录ID +// getProcessEngine().getHistoryService().deleteHistoricTaskInstance(taskId); + getProcessEngine().getTaskService().setAssignee(taskId,currUserId); + getProcessEngine().getTaskService().addComment(taskId, processId, "申请已撤销"); + getProcessEngine().getTaskService().addComment(taskId, processId, FlowConstants.OPERATION_TYPE, "申请已撤销"); + //保存当前操作用户节点 + getProcessEngine().getTaskService().addComment(taskId, processId, FlowConstants.DEPT_TYPE, currDeptId); + //当前处理人角色 + getProcessEngine().getTaskService().addComment(taskId, processId, FlowConstants.ROLE_TYPE, roleTip); + getProcessEngine().getRuntimeService().createChangeActivityStateBuilder() .processInstanceId(processId).cancelActivityId(currTaskActivityId) .startActivityId(targetTaskKey).changeState(); @@ -148,7 +168,7 @@ } public static Task getCurrTask(String processId) { - Task task = processEngine.getTaskService().createTaskQuery().processInstanceId(processId).singleResult(); + Task task = getProcessEngine().getTaskService().createTaskQuery().processInstanceId(processId).singleResult(); return task; } } diff --git a/casic-service-support/src/main/java/com/casic/missiles/modular/cwscase/model/CwsCase.java b/casic-service-support/src/main/java/com/casic/missiles/modular/cwscase/model/CwsCase.java index 0346784..7a45e99 100644 --- a/casic-service-support/src/main/java/com/casic/missiles/modular/cwscase/model/CwsCase.java +++ b/casic-service-support/src/main/java/com/casic/missiles/modular/cwscase/model/CwsCase.java @@ -260,7 +260,11 @@ private String punishImage; @TableField("PUNISH_TIME") private Timestamp punishTime; - + /** + * 上一流程操作状态 判定节点操作是否可撤销 + */ + @TableField("PRE_STATE") + private String preState; @Override protected Serializable pkVal() { return this.id; diff --git a/casic-service-support/src/main/java/com/casic/missiles/modular/flowable/service/ICaseFlowService.java b/casic-service-support/src/main/java/com/casic/missiles/modular/flowable/service/ICaseFlowService.java index a618843..0af73f3 100644 --- a/casic-service-support/src/main/java/com/casic/missiles/modular/flowable/service/ICaseFlowService.java +++ b/casic-service-support/src/main/java/com/casic/missiles/modular/flowable/service/ICaseFlowService.java @@ -15,12 +15,19 @@ * @param taskUserId 核实人员ID (城管通上报案件可不传) * @return 案件流程ID */ - String startCaseFlow(int source, int caseState, String taskUserId,String bizId); + String startCaseFlow(int source, int caseState, String taskUserId, String bizId); /** * 任务办理接口 * * @param dto */ - void completeCaseTask(ProcessDcmsDto dto) ; + void completeCaseTask(ProcessDcmsDto dto); + + /** + * shan + * + * @param processId + */ + void cancelActivity(String bizId,String processId, String caseState); } diff --git a/casic-service-support/src/main/java/com/casic/missiles/modular/flowable/service/ICwsSuportService.java b/casic-service-support/src/main/java/com/casic/missiles/modular/flowable/service/ICwsSuportService.java index 8d56451..2d39b28 100644 --- a/casic-service-support/src/main/java/com/casic/missiles/modular/flowable/service/ICwsSuportService.java +++ b/casic-service-support/src/main/java/com/casic/missiles/modular/flowable/service/ICwsSuportService.java @@ -89,4 +89,9 @@ */ CwsCase selectCaseById(Serializable id); + /** + * 案件处理状态撤销操作 + * @param bizId + */ + void cancelCaseState(String bizId); } diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index fa4e92d..bb511d3 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -27,6 +27,8 @@ url: jdbc:mysql://111.198.10.15:11102/dcms_flowable_cr?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull username: root password: Casic203! + case: + cancelNodes: 30303,030 #允许撤销的节点key logging: level.root: info level.com.casic: debug