skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/constant/ProcessConstant.java
@@ -64,6 +64,16 @@ String TOTECH_KEY = "toTech"; /** * 转送给主管部门负责人标识 */ String TOSUPERVISOR_KEY = "toSupervisor"; /** * 转送给主管部门负责人标识 */ String TOADMIN_KEY = "toAdmin"; /** * 同意代号 */ String PASS_ALIAS = "ok"; skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/feign/IFlowClient.java
@@ -52,6 +52,8 @@ String DONE_LIST = "/done-list"; String GET_BLADEFLOW = "/getBladeFlow"; String HISTORY_FLOW_LIST = "/history-flow-list"; /** * 开启流程 * @@ -124,4 +126,9 @@ @PostMapping(DONE_LIST) R<BladeFlowPage> getDoneBladeFlowList(@RequestParam("size") Integer size, @RequestParam("current") Integer current, @RequestParam("currentUserId") String currentUserId, @RequestBody BladeFlowVO bladeFlow); @GetMapping(HISTORY_FLOW_LIST) R<List<BladeFlow>> historyFlowList(@RequestParam("processInstanceId") String processInstanceId,@RequestParam("startActivityId") String startActivityId,@RequestParam("endActivityId") String endActivityId); } skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/feign/IFlowClientFallback.java
@@ -74,4 +74,10 @@ return R.fail("远程调用失败"); } @Override public R<List<BladeFlow>> historyFlowList(String processInstanceId, String startActivityId, String endActivityId) { return R.fail("远程调用失败"); } } skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/feign/FlowClient.java
@@ -21,6 +21,7 @@ import cn.gistack.flow.core.feign.IFlowClient; import cn.gistack.flow.core.utils.TaskUtil; import cn.gistack.flow.core.vo.BladeFlowVO; import cn.gistack.flow.engine.service.FlowEngineService; import cn.gistack.sm.patrol.vo.BladeFlowPage; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.AllArgsConstructor; @@ -54,6 +55,7 @@ private final IdentityService identityService; private final TaskService taskService; private final FlowBusinessService flowBusinessService; private final FlowEngineService flowEngineService; @Override @PostMapping(START_PROCESS_INSTANCE_BY_ID) @@ -148,5 +150,12 @@ return R.data(bladeFlowPage); } @Override @GetMapping(HISTORY_FLOW_LIST) public R<List<BladeFlow>> historyFlowList(String processInstanceId, String startActivityId, String endActivityId) { List<BladeFlow> bladeFlows = flowEngineService.historyFlowList(processInstanceId, startActivityId, endActivityId); return R.data(bladeFlows); } } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/controller/PatrolRecordController.java
@@ -179,5 +179,17 @@ return R.data(detail); } /** * 获取处理情况 * @param patrolRecord * @return */ @GetMapping("getHandleRecord") public R getHandleRecord(PatrolRecord patrolRecord){ PatrolRecordVO res = patrolRecordService.getHandleRecord(patrolRecord); return R.data(res); } } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/controller/PatrolTaskController.java
@@ -208,6 +208,18 @@ } /** * 汛期、白蚁、大坝 责任人完成任务 */ @PostMapping("person-complete-task") @ApiOperation(value = "完成任务", notes = "传入流程信息") public R personCompleteTask(@RequestBody PatrolTaskVO patrolTaskVO) { return R.status(patrolTaskService.personCompleteTask(patrolTaskVO, patrolTaskVO.getCurrentUserId(), patrolTaskVO.getTaskUser())); } /** * 查询待办 * * @param patrolTask 任务 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/entity/PatrolTask.java
@@ -154,6 +154,9 @@ */ private String processInstanceId; //处理状态,1、巡查;2、处理中;3已处理 private String handleStatus; /** * 工作流标识 是否上报 */ skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolRecordMapper.java
@@ -27,4 +27,6 @@ List<PatrolGroupDTO> getHistoryRecord(@Param("vo") PatrolRecordVO patrolRecordVO); RecordVO getRecordVO(@Param("vo") RecordVO recordVO); PatrolRecordVO getHandleRecord(@Param("record") PatrolRecord patrolRecord); } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolRecordMapper.xml
@@ -35,6 +35,8 @@ <result column="city_name" property="cityName"/> <result column="county_name" property="countyName"/> <result column="town_name" property="townName"/> <result property="handleUser" column="handleUser"/> <result property="handleUserName" column="handleUserName"/> </resultMap> @@ -81,6 +83,9 @@ </if> <if test="patrolRecord.status !=null and patrolRecord.status != '' "> AND record.status = #{patrolRecord.status} </if> <if test="patrolRecord.solution !=null and patrolRecord.solution != '' "> AND record.solution = #{patrolRecord.solution} </if> <if test="patrolRecord.patrolType !=null and patrolRecord.patrolType !=''"> AND record.patrolType = #{patrolRecord.patrolType} @@ -202,6 +207,9 @@ <result property="taskId" column="taskId"/> <result property="solution" column="solution"/> <result property="content" column="content"/> <result property="state" column="state"/> <result property="recordType" column="recordType"/> <result property="handleUserName" column="handleUserName"/> </collection> </resultMap> @@ -217,11 +225,16 @@ R.ITEM_ID AS itemId, I.ITEMS_NAME AS itemsName, R.TASK_ID AS taskId , R.SOLUTION, R.CONTENT R.solution, R.CONTENT, R.STATE, R.record_type as recordType, R.UPDATE_USER as handleUser, BU.real_name as handleUserName FROM SM_PATROL_GROUP G LEFT JOIN SM_PATROL_GROUP_ITEM I ON I.GROUP_ID = G.ID LEFT JOIN SM_PATROL_RECORD R ON R.ITEM_ID = I.ID LEFT JOIN BLADE_USER BU ON BU.ID = R.UPDATE_USER WHERE G.IS_DELETED = 0 <if test="vo.flowTaskId != null and vo.flowTaskId !='' "> AND R.FLOW_TASK_ID = #{vo.flowTaskId} @@ -231,6 +244,15 @@ </if> <if test="vo.recordType !=null and vo.recordType !=''"> AND R.record_type = #{vo.recordType} </if> <if test="vo.status !=null and vo.status !=''"> AND R.status = #{vo.status} </if> <if test="vo.state !=null and vo.state !=''"> AND R.status = #{vo.state} </if> <if test="vo.solution !=null and vo.solution !=''"> AND R.status = #{vo.solution} </if> </select> @@ -306,7 +328,20 @@ LEFT JOIN YWXT.BLADE_USER BU ON BU.ID = handle.CREATE_USER </select> <select id="getHandleRecord" resultMap="selectPatrolRecordList"> SELECT SPR.*,SPR.update_user as handleUser,BU.real_name as handleUserName FROM SM_PATROL_RECORD SPR LEFT JOIN BLADE_USER BU ON BU.ID = SPR.UPDATE_USER WHERE SPR.IS_DELETED = 0 <if test="record.taskId != null and record.taskId != ''"> AND task_id = #{record.taskId} </if> <if test="record.itemId != null and record.itemId !=''"> AND item_id = #{record.itemId} </if> <if test="record.recordType != null and record.recordType != ''"> AND record_type = #{record.recordType} </if> </select> </mapper> skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolTaskMapper.xml
@@ -61,11 +61,17 @@ <if test="patrolTask.title !=null and patrolTask.title!=''"> AND spt.title LIKE CONCAT('%',#{patrolTask.title},'%') </if> <!-- <if test="patrolTask.startTime !=null and patrolTask.startTime !=''">--> <!-- AND spt.start_time >= #{patrolTask.startTime}--> <!-- </if>--> <!-- <if test="patrolTask.endTime !=null and patrolTask.endTime !=''">--> <!-- AND spt.end_time <= #{patrolTask.endTime}--> <!-- </if>--> <if test="patrolTask.startTime !=null and patrolTask.startTime !=''"> AND spt.start_time >= #{patrolTask.startTime} AND spt.create_time >= #{patrolTask.startTime} </if> <if test="patrolTask.endTime !=null and patrolTask.endTime !=''"> AND spt.end_time <= #{patrolTask.endTime} AND spt.create_time <= #{patrolTask.endTime} </if> <if test="patrolTask.projectId !=null and patrolTask.projectId !='' "> AND spt.project_id = #{patrolTask.projectId} skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/IPatrolRecordService.java
@@ -61,4 +61,6 @@ List<PatrolGroupDTO> getHistoryRecord(PatrolRecordVO patrolRecordVO); RecordVO getRecordVO(RecordVO recordVO); PatrolRecordVO getHandleRecord(PatrolRecord patrolRecord); } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/IPatrolTaskService.java
@@ -82,4 +82,13 @@ List<TaskStatusCount> getTaskStatusCountOptimize(PatrolTaskVO patrolTaskVO); TaskStatus getTaskStatus(PatrolTaskVO patrolTaskVO); /** * 汛期、白蚁、大坝 责任人完成任务 * @param patrolTaskVO * @param currentUserId * @param taskUser * @return */ boolean personCompleteTask(PatrolTaskVO patrolTaskVO, String currentUserId, String taskUser); } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolRecordServiceImpl.java
@@ -110,4 +110,9 @@ public RecordVO getRecordVO(RecordVO recordVO) { return baseMapper.getRecordVO(recordVO); } @Override public PatrolRecordVO getHandleRecord(PatrolRecord patrolRecord) { return baseMapper.getHandleRecord(patrolRecord); } } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolTaskServiceImpl.java
@@ -44,8 +44,15 @@ private final INkyClient nkyClient; private final IYwTermitesTaskService waterDataTermitesService; private final String PATROL_USER = "patrolUser"; private final String TECH_USER = "techUser"; private final String SUPERVISOR_USER = "supervisorUser"; private final String ADMIN_USER = "adminUser"; private final String DEPT_USER = "deptUser"; /** * 自定义分页查询 * * @param page * @param patrolTask * @return @@ -64,6 +71,7 @@ /** * 查询巡查人员统计数据信息 * * @param patrolTask * @return */ @@ -74,6 +82,7 @@ /** * 自定义编辑(空间坐标编辑) * * @param patrolTask * @return */ @@ -89,6 +98,7 @@ /** * 自定义添加 * * @param patrolTask * @return */ @@ -106,6 +116,7 @@ /** * 自定义通过id查询 * * @param id * @return */ @@ -120,11 +131,24 @@ String businessTable = FlowUtil.getBusinessTable(ProcessConstant.PATROL_KEY); if (Func.isEmpty(patrolTask.getId())) { save(patrolTask); // 启动流程 // Kv variables = Kv.create() // //设置创建人 // .set(ProcessConstant.TASK_VARIABLE_CREATE_USER, AuthUtil.getUserId()) // //指定任务处理人 // .set("taskUser", TaskUtil.getTaskUser(patrolTask.getToUserId())); // R<BladeFlow> result = flowClient.startProcessInstanceById(patrolTask.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(patrolTask.getId())), variables); Kv variables = Kv.create() //设置创建人 .set(ProcessConstant.TASK_VARIABLE_CREATE_USER, AuthUtil.getUserId()) //指定巡查责任人 .set(PATROL_USER, TaskUtil.getTaskUser(patrolTask.getToUserId())) .set("taskUser", TaskUtil.getTaskUser(patrolTask.getToUserId())); R<BladeFlow> result = flowClient.startProcessInstanceById(patrolTask.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(patrolTask.getId())), variables); if (result.isSuccess()) { log.debug("流程已启动,流程ID:" + result.getData().getProcessInstanceId()); // 返回流程id写入leave @@ -139,6 +163,50 @@ return patrolTask; } @Override public boolean personCompleteTask(PatrolTaskVO patrolTaskVO, String currentUserId, String taskUser) { String taskId = patrolTaskVO.getFlowTaskId(); String processInstanceId = patrolTaskVO.getProcessInstanceId(); String comment = patrolTaskVO.getComment(); //保存巡查记录 if (patrolTaskVO.getPatrolRecordList() != null && patrolTaskVO.getPatrolRecordList().size()>0){ patrolRecordService.saveBatch(patrolTaskVO.getPatrolRecordList()); } // 创建变量 Map<String, Object> variables = new HashMap<>(); if (variables == null) { variables = Kv.create(); } //指定了人就是上报,没指定就表示已经处理了 if (StringUtil.isNotBlank(taskUser)){ variables.put("taskUser",TaskUtil.getTaskUser(taskUser)); variables.put(ProcessConstant.REPORT_KEY,true); }else{ variables.put(ProcessConstant.REPORT_KEY,false); //查监测预警表,看是否有这个任务,有的话修改任务状态 Boolean finishDamTask = nkyClient.finishTask(patrolTaskVO.getId().toString()); if (!finishDamTask){ //查白蚁表,看是否有这个任务,有的话修改任务状态 Boolean finishTermitesTask = waterDataTermitesService.finishTask(patrolTaskVO.getId().toString()); } } flowClient.completeTask(taskId, processInstanceId, comment, variables); return updateById(patrolTaskVO); } @Override @Transactional(rollbackFor = Exception.class) public boolean patrolCompleteTask(PatrolTaskVO patrolTask,String currentUserId,String taskUser) { @@ -147,30 +215,25 @@ BladeFlow flow = res.getData(); String taskId = flow.getTaskId(); String processInstanceId = patrolTask.getProcessInstanceId(); // String comment = Func.toStr(flow.getComment(), ProcessConstant.PASS_COMMENT); String comment = "完成"; // String comment = patrolTask.getReport() ? "巡查任务发现问题" : "巡查任务完成,未发现问题"; String comment = patrolTask.getComment(); // 创建变量 Map<String, Object> variables = flow.getVariables(); if (variables == null) { variables = Kv.create(); } //设置是否上报标识 variables.put(ProcessConstant.REPORT_KEY,patrolTask.getReport()); variables.put("taskUser",StringUtil.format("{}{}", TASK_USR_PREFIX, taskUser)); // variables.put("taskUser",StringUtil.format("{}{}", TASK_USR_PREFIX, taskUser)); variables.put(TECH_USER, TaskUtil.getTaskUser(taskUser)); // 完成任务 flowClient.completeTask(taskId,processInstanceId,comment,variables); //保存巡查记录 if (patrolTask.getPatrolRecordList() != null && patrolTask.getPatrolRecordList().size() > 0){ patrolRecordService.saveBatch(patrolTask.getPatrolRecordList()); //保存上报 //停用 // saveReport(patrolTask); //查监测预警表,看是否有这个任务,有的话修改任务状态 Boolean finishDamTask = nkyClient.finishTask(patrolTask.getId().toString()); if (!finishDamTask){ //查白蚁表,看是否有这个任务,有的话修改任务状态 Boolean finishTermitesTask = waterDataTermitesService.finishTask(patrolTask.getId().toString()); } return baseMapper.updateById(patrolTask) >0; }else { @@ -180,39 +243,110 @@ @Override public boolean chargeCompletePerson(BladeFlowTask bladeFlowTask) { //判断是否上报 // boolean isReport = false; // List<PatrolReport> collect = bladeFlowTask.getPatrolReportList().stream().filter(report -> Func.equals(report.getStatus(), 2)).collect(Collectors.toList()); // if (collect.size()>0){ // if (StringUtil.isNoneBlank(bladeFlowTask.getTaskUser())){ // isReport = true; // } // //更新report表 // boolean update = patrolReportService.updateBatchById(bladeFlowTask.getPatrolReportList()); // // String taskId = bladeFlowTask.getTaskId(); // String processInstanceId = bladeFlowTask.getProcessInstanceId(); // String comment = "完成"; // // 创建变量 // Map<String, Object> variables = new HashMap<>(); // if (variables == null) { // variables = Kv.create(); // } // //指定下一个人 // variables.put("taskUser",StringUtil.format("{}{}", TASK_USR_PREFIX, bladeFlowTask.getTaskUser())); // //指定是否上报 // variables.put(ProcessConstant.REPORT_KEY,isReport); // //指定是否上报给部门 // variables.put(ProcessConstant.TODEPT_KEY,bladeFlowTask.getToDept()); // //指定是否转交 // variables.put(ProcessConstant.TOTECH_KEY,bladeFlowTask.getToTech()); // //完成任务 // flowClient.completeTask(taskId, processInstanceId, comment, variables); // return true; boolean isReport = false; if (StringUtil.isNoneBlank(bladeFlowTask.getTaskUser())){ isReport = true; } String taskId = bladeFlowTask.getTaskId(); String processInstanceId = bladeFlowTask.getProcessInstanceId(); String comment = "完成"; String comment = bladeFlowTask.getComment(); // 创建变量 Map<String, Object> variables = new HashMap<>(); if (variables == null) { variables = Kv.create(); } //指定下一个人 variables.put("taskUser",StringUtil.format("{}{}", TASK_USR_PREFIX, bladeFlowTask.getTaskUser())); //指定是否上报 //默认不上报 boolean isReport = false; if (StringUtil.isNoneBlank(bladeFlowTask.getTaskUser())) { //指定了下一个人,修改状态为上报 isReport = true; } //techPerson supervisorPerson adminPerson department //获取当前节点 BladeFlow currentNode = getFlowNode(processInstanceId, 1); switch (currentNode.getHistoryActivityId()) { case "techPerson": variables.put(bladeFlowTask.getToDept()?DEPT_USER:SUPERVISOR_USER,TaskUtil.getTaskUser(bladeFlowTask.getTaskUser())); break; case "supervisorPerson": variables.put(bladeFlowTask.getToDept()?DEPT_USER:ADMIN_USER,TaskUtil.getTaskUser(bladeFlowTask.getTaskUser())); break; case "adminPerson": variables.put(DEPT_USER,TaskUtil.getTaskUser(bladeFlowTask.getTaskUser())); break; case "department": //当前节点为水行政部门,需要指定回复给谁 //获取前一个节点 BladeFlow beforeNode = getFlowNode(processInstanceId, 2); String beforeId = beforeNode.getHistoryActivityId(); if (beforeId.equals("techPerson")) { //前一个节点是技术责任人 variables.put(ProcessConstant.TOTECH_KEY, true); }else if (beforeId.equals("supervisorPerson")){ variables.put(ProcessConstant.TOSUPERVISOR_KEY, true); }else if (beforeId.equals("adminPerson")){ variables.put(ProcessConstant.TOADMIN_KEY, true); } break; default: break; } variables.put(ProcessConstant.REPORT_KEY,isReport); //指定是否上报给部门 variables.put(ProcessConstant.TODEPT_KEY,bladeFlowTask.getToDept()); //指定是否转交 variables.put(ProcessConstant.TOTECH_KEY,bladeFlowTask.getToTech()); //完成任务 flowClient.completeTask(taskId, processInstanceId, comment, variables); return true; } /** * 获取节点信息,倒数第一个是自己,第二个是上一节点 * * @param processInstanceId * @param i 倒数第几 * @return */ private BladeFlow getFlowNode(String processInstanceId, int i) { R<List<BladeFlow>> res = flowClient.historyFlowList(processInstanceId, "start", "finish"); if (res.isSuccess()) { //历史流程 List<BladeFlow> data = res.getData(); //size减1为当前节点,-2为上一节点 BladeFlow bladeFlow = data.get(data.size() - i); return bladeFlow; } else { return null; } } @Override @@ -294,6 +428,7 @@ return taskStatus; } @Override public List<TaskStatusCount> getTaskTypeCount(PatrolTaskVO patrolTaskVO) { return baseMapper.getTaskTypeCount(patrolTaskVO); skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/BladeFlowTask.java
@@ -8,16 +8,17 @@ @Data public class BladeFlowTask { private List<PatrolReport> patrolReportList; //流程任务id private String taskId; //实例id private String processInstanceId; //指定人 private String taskUser; //上报给水行政部门 private Boolean toDept; private Boolean toTech; private String comment; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/PatrolRecordVO.java
@@ -79,4 +79,7 @@ private String endTime; private String adCode; private String handleUser; private String handleUserName; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/PatrolTaskVO.java
@@ -70,4 +70,9 @@ private String lon; private String lat; private String comment; //工作流taskId private String flowTaskId; }