From fc030d197a869d5fecab582d36ff17be7e67cc3f Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Mon, 24 Apr 2023 15:41:22 +0800
Subject: [PATCH] 巡查工作流接入

---
 skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/feign/IFlowClientFallback.java        |   12 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/controller/PatrolGroupController.java       |   16 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolTaskMapper.java                |    2 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolReportServiceImpl.java   |   17 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/PatrolReportVO.java                      |   28 ++
 skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/utils/FlowUtil.java                   |    1 
 skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/feign/FlowClient.java                     |   28 ++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/PatrolTaskVO.java                        |    5 
 skjcmanager/skjcmanager-service-api/skjcmanager-user-api/src/main/java/cn/gistack/system/user/vo/UserVO.java                  |    5 
 skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/controller/UserController.java          |   24 ++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/entity/PatrolReport.java                    |   49 +++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/BladeFlowTask.java                       |   23 +
 skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/mapper/UserMapper.xml                   |    5 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolTaskMapper.xml                 |    8 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolTaskServiceImpl.java     |  141 +++++++++++
 skjcmanager/skjcmanager-service/skjcmanager-sm/pom.xml                                                                        |    6 
 skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/mapper/UserMapper.java                  |    2 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/dto/PatrolGroupDTO.java                     |   15 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolRecordMapper.xml               |    2 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/IPatrolGroupService.java            |    5 
 skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/service/IUserService.java               |    2 
 skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/service/impl/UserServiceImpl.java       |    5 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolGroupServiceImpl.java    |   11 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/entity/PatrolTask.java                      |   33 ++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/IPatrolTaskService.java             |   20 +
 skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/service/FlowBusinessService.java          |   11 
 skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/service/impl/FlowBusinessServiceImpl.java |   47 +++
 skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/constant/ProcessConstant.java         |   20 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/controller/PatrolTaskController.java        |   75 ++++++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolGroupMapper.java               |    5 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolGroupMapper.xml                |   38 +++
 skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/feign/IFlowClient.java                |   21 +
 32 files changed, 664 insertions(+), 18 deletions(-)

diff --git a/skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/constant/ProcessConstant.java b/skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/constant/ProcessConstant.java
index e7c028b..5e851c0 100644
--- a/skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/constant/ProcessConstant.java
+++ b/skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/constant/ProcessConstant.java
@@ -24,6 +24,11 @@
 public interface ProcessConstant {
 
 	/**
+	 * 巡查流程标识
+	 */
+	String PATROL_KEY = "Patrol";
+
+	/**
 	 * 请假流程标识
 	 */
 	String LEAVE_KEY = "Leave";
@@ -39,6 +44,21 @@
 	String PASS_KEY = "pass";
 
 	/**
+	 * 上报标识
+	 */
+	String REPORT_KEY = "report";
+
+	/**
+	 * 上报至部门标识
+	 */
+	String TODEPT_KEY = "toDept";
+
+	/**
+	 * 转送给技术负责人标识
+	 */
+	String TOTECH_KEY = "toTech";
+
+	/**
 	 * 同意代号
 	 */
 	String PASS_ALIAS = "ok";
diff --git a/skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/feign/IFlowClient.java b/skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/feign/IFlowClient.java
index b5c0c89..baab1d8 100644
--- a/skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/feign/IFlowClient.java
+++ b/skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/feign/IFlowClient.java
@@ -16,6 +16,7 @@
  */
 package cn.gistack.flow.core.feign;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.launch.constant.AppConstant;
 import org.springblade.core.tool.api.R;
 import cn.gistack.flow.core.entity.BladeFlow;
@@ -25,6 +26,7 @@
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -44,6 +46,8 @@
 	String COMPLETE_TASK = API_PREFIX + "/complete-task";
 	String TASK_VARIABLE = API_PREFIX + "/task-variable";
 	String TASK_VARIABLES = API_PREFIX + "/task-variables";
+	String TODO_LIST = "/todo-list";
+	String GET_BLADEFLOW = "/getBladeFlow";
 
 	/**
 	 * 开启流程
@@ -97,4 +101,21 @@
 	 */
 	@GetMapping(TASK_VARIABLES)
 	R<Map<String, Object>> taskVariables(@RequestParam("taskId") String taskId);
+
+	/**
+	 * 获取流程变量集合
+	 *
+	 * @param businessId 业务id
+	 * @return R
+	 */
+	@GetMapping(GET_BLADEFLOW)
+	R<BladeFlow> getBladeFlow(@RequestParam("businessId") String businessId,@RequestParam("currentUserId") String currentUserId);
+
+	/**
+	 * 获取待办业务
+	 *
+	 * @return R
+	 */
+	@PostMapping(TODO_LIST)
+	R<List<BladeFlow>> getTodoBladeFlowList(@RequestParam("size") Integer size,@RequestParam("current") Integer current,@RequestParam("currentUserId") String currentUserId,@RequestBody BladeFlow bladeFlow);
 }
diff --git a/skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/feign/IFlowClientFallback.java b/skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/feign/IFlowClientFallback.java
index a8149be..b3facad 100644
--- a/skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/feign/IFlowClientFallback.java
+++ b/skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/feign/IFlowClientFallback.java
@@ -16,10 +16,12 @@
  */
 package cn.gistack.flow.core.feign;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.tool.api.R;
 import cn.gistack.flow.core.entity.BladeFlow;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -55,4 +57,14 @@
 		return R.fail("远程调用失败");
 	}
 
+	@Override
+	public R<BladeFlow> getBladeFlow(String businessId,String currentUserId) {
+		return R.fail("远程调用失败");
+	}
+
+	@Override
+	public R<List<BladeFlow>> getTodoBladeFlowList(Integer size, Integer current, String currentUserId, BladeFlow bladeFlow) {
+		return R.fail("远程调用失败");
+	}
+
 }
diff --git a/skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/utils/FlowUtil.java b/skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/utils/FlowUtil.java
index 05b9eb4..b547a47 100644
--- a/skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/utils/FlowUtil.java
+++ b/skjcmanager/skjcmanager-ops-api/skjcmanager-flow-api/src/main/java/cn/gistack/flow/core/utils/FlowUtil.java
@@ -37,6 +37,7 @@
 
 	static {
 		BUSINESS_TABLE.put(ProcessConstant.LEAVE_KEY, "blade_process_leave");
+		BUSINESS_TABLE.put(ProcessConstant.PATROL_KEY,"sm_patrol_task");
 	}
 
 	/**
diff --git a/skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/feign/FlowClient.java b/skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/feign/FlowClient.java
index 1960028..17edaa9 100644
--- a/skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/feign/FlowClient.java
+++ b/skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/feign/FlowClient.java
@@ -16,24 +16,26 @@
  */
 package cn.gistack.flow.business.feign;
 
+import cn.gistack.flow.business.service.FlowBusinessService;
 import cn.gistack.flow.core.entity.BladeFlow;
 import cn.gistack.flow.core.feign.IFlowClient;
 import cn.gistack.flow.core.utils.TaskUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import lombok.AllArgsConstructor;
 import org.flowable.engine.IdentityService;
 import org.flowable.engine.RuntimeService;
 import org.flowable.engine.TaskService;
 import org.flowable.engine.runtime.ProcessInstance;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.support.Kv;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringUtil;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -49,6 +51,7 @@
 	private final RuntimeService runtimeService;
 	private final IdentityService identityService;
 	private final TaskService taskService;
+	private final FlowBusinessService flowBusinessService;
 
 	@Override
 	@PostMapping(START_PROCESS_INSTANCE_BY_ID)
@@ -104,4 +107,21 @@
 		return R.data(taskService.getVariables(taskId));
 	}
 
+	@Override
+	@GetMapping(GET_BLADEFLOW)
+	public R<BladeFlow> getBladeFlow(String businessId,String currentUserId) {
+		return R.data(flowBusinessService.getBladeFlowByBusinessId(businessId,currentUserId));
+	}
+
+	@Override
+	@PostMapping(TODO_LIST)
+	public R<List<BladeFlow>> getTodoBladeFlowList(Integer size, Integer current, String currentUserId, BladeFlow bladeFlow) {
+		Query query = new Query();
+		query.setCurrent(current);
+		query.setSize(size);
+		IPage<BladeFlow> bladeFlowIPage = flowBusinessService.selectTodoPage(Condition.getPage(query), bladeFlow, currentUserId);
+		return R.data(bladeFlowIPage.getRecords());
+	}
+
+
 }
diff --git a/skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/service/FlowBusinessService.java b/skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/service/FlowBusinessService.java
index e949540..f7a961d 100644
--- a/skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/service/FlowBusinessService.java
+++ b/skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/service/FlowBusinessService.java
@@ -45,6 +45,15 @@
 	IPage<BladeFlow> selectTodoPage(IPage<BladeFlow> page, BladeFlow bladeFlow);
 
 	/**
+	 * 流程待办列表
+	 *
+	 * @param page      分页工具
+	 * @param bladeFlow 流程类
+	 * @return
+	 */
+	IPage<BladeFlow> selectTodoPage(IPage<BladeFlow> page, BladeFlow bladeFlow,String currentUserId);
+
+	/**
 	 * 流程已发列表
 	 *
 	 * @param page      分页工具
@@ -69,4 +78,6 @@
 	 * @return boolean
 	 */
 	boolean completeTask(BladeFlow leave);
+
+	BladeFlow getBladeFlowByBusinessId(String businessId,String currentUserId);
 }
diff --git a/skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/service/impl/FlowBusinessServiceImpl.java b/skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/service/impl/FlowBusinessServiceImpl.java
index 2fcaecb..cfc36ac 100644
--- a/skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/service/impl/FlowBusinessServiceImpl.java
+++ b/skjcmanager/skjcmanager-ops/skjcmanager-flow/src/main/java/cn/gistack/flow/business/service/impl/FlowBusinessServiceImpl.java
@@ -32,6 +32,7 @@
 import org.flowable.task.api.TaskQuery;
 import org.flowable.task.api.history.HistoricTaskInstance;
 import org.flowable.task.api.history.HistoricTaskInstanceQuery;
+import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.support.Kv;
 import org.springblade.core.tool.utils.Func;
@@ -42,6 +43,8 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+
+import static org.springblade.core.launch.constant.FlowConstant.TASK_USR_PREFIX;
 
 /**
  * 流程业务实现类
@@ -90,6 +93,29 @@
 	@Override
 	public IPage<BladeFlow> selectTodoPage(IPage<BladeFlow> page, BladeFlow bladeFlow) {
 		String taskUser = TaskUtil.getTaskUser();
+		List<BladeFlow> flowList = new LinkedList<>();
+
+		// 已签收的任务
+		TaskQuery todoQuery = taskService.createTaskQuery().taskAssignee(taskUser).active()
+			.includeProcessVariables().orderByTaskCreateTime().desc();
+
+		// 构建列表数据
+		buildFlowTaskList(bladeFlow, flowList, todoQuery, FlowEngineConstant.STATUS_TODO);
+
+		// 计算总数
+		long count = todoQuery.count();
+		// 设置页数
+		page.setSize(count);
+		// 设置总数
+		page.setTotal(count);
+		// 设置数据
+		page.setRecords(flowList);
+		return page;
+	}
+
+	@Override
+	public IPage<BladeFlow> selectTodoPage(IPage<BladeFlow> page, BladeFlow bladeFlow,String currentUserId) {
+		String taskUser = StringUtil.format("{}{}", TASK_USR_PREFIX, currentUserId);
 		List<BladeFlow> flowList = new LinkedList<>();
 
 		// 已签收的任务
@@ -268,6 +294,27 @@
 		return true;
 	}
 
+	@Override
+	public BladeFlow getBladeFlowByBusinessId(String businessId,String target) {
+		String taskUser = StringUtil.format("{}{}", TASK_USR_PREFIX, target);
+		List<BladeFlow> flowList = new LinkedList<>();
+
+		// 已签收的任务
+		TaskQuery todoQuery = taskService.createTaskQuery().taskAssignee(taskUser).active()
+			.includeProcessVariables().orderByTaskCreateTime().desc();
+		BladeFlow bladeFlow = new BladeFlow();
+		// 构建列表数据
+		buildFlowTaskList(bladeFlow, flowList, todoQuery, FlowEngineConstant.STATUS_TODO);
+		BladeFlow flow = new BladeFlow();
+		flowList.forEach(e->{
+			if (Func.equals(e.getBusinessId(),businessId)){
+				flow.setTaskId(e.getTaskId());
+			}
+		});
+
+		return flow;
+	}
+
 	/**
 	 * 构建流程
 	 *
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-user-api/src/main/java/cn/gistack/system/user/vo/UserVO.java b/skjcmanager/skjcmanager-service-api/skjcmanager-user-api/src/main/java/cn/gistack/system/user/vo/UserVO.java
index 906c926..aa2bc79 100644
--- a/skjcmanager/skjcmanager-service-api/skjcmanager-user-api/src/main/java/cn/gistack/system/user/vo/UserVO.java
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-user-api/src/main/java/cn/gistack/system/user/vo/UserVO.java
@@ -81,4 +81,9 @@
 	 * 拓展信息
 	 */
 	private String userExt;
+
+	/**
+	 * 行政区划编码
+	 */
+	private String adCode;
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/pom.xml b/skjcmanager/skjcmanager-service/skjcmanager-sm/pom.xml
index 8feac3e..dcb42b2 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/pom.xml
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/pom.xml
@@ -41,6 +41,12 @@
             <artifactId>skjcmanager-sm-api</artifactId>
             <version>3.0.1.RELEASE</version>
         </dependency>
+        <dependency>
+            <groupId>cn.gistack</groupId>
+            <artifactId>skjcmanager-flow-api</artifactId>
+            <version>3.0.1.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/controller/PatrolGroupController.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/controller/PatrolGroupController.java
index 688c1bb..7b98be2 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/controller/PatrolGroupController.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/controller/PatrolGroupController.java
@@ -156,4 +156,20 @@
 	public R getAllPatrolGroupByTaskId(String taskId) {
 		return R.data(patrolGroupService.getAllPatrolGroupByTaskId(taskId));
 	}
+
+	/**
+	 * 根据任务id获取巡查组,返回组下的record
+	 */
+	@GetMapping(value = "/getPatrolGroupDTO")
+	public R getPatrolGroupDTO(String taskId) {
+		return R.data(patrolGroupService.getPatrolGroupDTO(taskId));
+	}
+
+	/**
+	 * 根据任务id获取巡查组
+	 */
+	@GetMapping(value = "/getPatrolGroupByTaskId")
+	public R getPatrolGroupByTaskId(String taskId) {
+		return R.data(patrolGroupService.getPatrolGroupByTaskId(taskId));
+	}
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/controller/PatrolTaskController.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/controller/PatrolTaskController.java
index 8877bae..8c6dff3 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/controller/PatrolTaskController.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/controller/PatrolTaskController.java
@@ -1,20 +1,33 @@
 package cn.gistack.sm.patrol.controller;
 
+import cn.gistack.flow.core.entity.BladeFlow;
+import cn.gistack.flow.core.feign.IFlowClient;
+import cn.gistack.sm.patrol.entity.PatrolReport;
 import cn.gistack.sm.patrol.entity.PatrolTask;
 import cn.gistack.sm.patrol.entity.PatrolTask;
 import cn.gistack.sm.patrol.service.IPatrolTaskService;
+import cn.gistack.sm.patrol.vo.BladeFlowTask;
 import cn.gistack.sm.patrol.vo.PatrolTaskVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.annotations.Param;
+import org.redisson.executor.TasksService;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springframework.web.bind.annotation.*;
 
+import javax.sound.midi.Soundbank;
+import java.net.http.HttpRequest;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
@@ -28,6 +41,7 @@
 @AllArgsConstructor
 public class PatrolTaskController extends BladeController {
    private IPatrolTaskService patrolTaskService;
+   private IFlowClient flowClient;
 
    /**
     * 分页列表查询
@@ -156,5 +170,66 @@
 		return R.data(patrolTaskService.getPatrolTaskStatistic(patrolTask));
 	}
 
+	/**====================工作流==========================**/
+	/**
+	 * 新增或修改
+	 *
+	 * @param patrolTask 任务
+	 */
+	@PostMapping("start-process")
+	public R startProcess(@RequestBody PatrolTask patrolTask) {
+		return R.status(patrolTaskService.startProcess(patrolTask));
+	}
+
+	/**
+	 * 巡查人员完成任务
+	 *
+	 * @param patrolTask 任务
+	 */
+	@PostMapping("patrol-complete-task")
+	@ApiOperation(value = "完成任务", notes = "传入流程信息")
+	public R completeTask(PatrolTask patrolTask, String currentUserId) {
+		return R.status(patrolTaskService.patrolCompleteTask(patrolTask,currentUserId));
+	}
+
+	/**
+	 * 责任人完成任务
+	 */
+	@PostMapping("charge-complete-task")
+	@ApiOperation(value = "完成任务", notes = "传入流程信息")
+	public R chargeCompletePerson(@RequestBody BladeFlowTask bladeFlowTask) {
+		return R.status(patrolTaskService.chargeCompletePerson(bladeFlowTask));
+	}
+
+	/**
+	 * 查询待办
+	 *
+	 * @param patrolTask 任务
+	 */
+	@PostMapping("patrol-todo-list")
+	@ApiOperation(value = "查询待办")
+	public R patrolTodoList(PatrolTaskVO patrolTask, Query query) {
+		BladeFlow bladeFlow2 = new BladeFlow();
+		R<List<BladeFlow>> res = flowClient.getTodoBladeFlowList(query.getSize(),query.getCurrent(),patrolTask.getCurrentUserId(), bladeFlow2);
+		IPage<PatrolTask> patrolTaskIPage = new Page<>();
+		List<PatrolTask> patrolTaskList = new ArrayList<>();
+
+		if (res.isSuccess()){
+			List<BladeFlow> data = res.getData();
+			data.forEach(bladeFlow -> {
+				PatrolTask byId = patrolTaskService.customizeGetById(bladeFlow.getBusinessId());
+				byId.setFlow(bladeFlow);
+				patrolTaskList.add(byId);
+			});
+		}
+		//设置数据集
+		patrolTaskIPage.setRecords(patrolTaskList);
+		//设置当前页
+		patrolTaskIPage.setCurrent(query.getCurrent());
+		//设置大小
+		patrolTaskIPage.setSize(query.getSize());
+
+		return R.data(patrolTaskIPage);
+	}
 
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/dto/PatrolGroupDTO.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/dto/PatrolGroupDTO.java
new file mode 100644
index 0000000..2e0826a
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/dto/PatrolGroupDTO.java
@@ -0,0 +1,15 @@
+package cn.gistack.sm.patrol.dto;
+
+import cn.gistack.sm.patrol.entity.PatrolGroup;
+import cn.gistack.sm.patrol.entity.PatrolRecord;
+import cn.gistack.sm.patrol.vo.PatrolRecordVO;
+import cn.gistack.sm.patrol.vo.PatrolReportVO;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PatrolGroupDTO extends PatrolGroup {
+
+	private List<PatrolReportVO> patrolReportList;
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/entity/PatrolReport.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/entity/PatrolReport.java
index c1b915f..a8393d7 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/entity/PatrolReport.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/entity/PatrolReport.java
@@ -1,6 +1,9 @@
 package cn.gistack.sm.patrol.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -12,27 +15,53 @@
  * @Description: 巡查类型
  */
 @Data
-@TableName("sm_patrol_report")
+@TableName( value = "sm_patrol_report",autoResultMap = true)
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
 @ApiModel(value = "sm_patrol_report", description = "巡查记录")
 public class PatrolReport extends BaseEntity {
 
 	/**
-	 * 水库id
+	 * 巡查现场图片
 	 */
-	@ApiModelProperty("水库id")
-	private String reservoirId;
+	@ApiModelProperty("处理图片")
+	@TableField(value = "images",typeHandler = FastjsonTypeHandler.class)
+	private Object[] images;
 
 	/**
-	 * 报告数量
+	 * 巡查现场视频
 	 */
-	@ApiModelProperty("报告数量")
-	private Integer groupNum;
+	@ApiModelProperty("处理视频")
+	@TableField(value = "videos",typeHandler = FastjsonTypeHandler.class)
+	private Object[] videos;
 
 	/**
-	 * 异常数量
+	 * 巡查内容
 	 */
-	@ApiModelProperty("异常数量")
-	private Integer errorNum;
+	@ApiModelProperty("处理内容")
+	private String content;
+
+	/**
+	 * 巡查记录id
+	 */
+	@ApiModelProperty("巡查记录id")
+	private String recordId;
+
+	/**
+	 * 任务id
+	 */
+	@ApiModelProperty("任务id")
+	private String taskId;
+
+	/**
+	 * 解决方案
+	 */
+	@ApiModelProperty("解决方案")
+	private String solution;
+
+	/**
+	 * 指标项id
+	 */
+	@ApiModelProperty("指标项id")
+	private String itemId;
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/entity/PatrolTask.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/entity/PatrolTask.java
index 2a16698..5ead2ed 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/entity/PatrolTask.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/entity/PatrolTask.java
@@ -1,5 +1,7 @@
 package cn.gistack.sm.patrol.entity;
 
+import cn.gistack.flow.core.entity.FlowEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
@@ -12,14 +14,14 @@
 import org.springframework.format.annotation.DateTimeFormat;
 
 /**
- * @Description: 巡查类型
+ * @Description: 巡查任务
  */
 @Data
 @TableName("sm_patrol_task")
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
 @ApiModel(value = "sm_patrol_task对象", description = "巡查任务")
-public class PatrolTask extends TenantEntity {
+public class PatrolTask extends FlowEntity {
 	/**
 	 * 标题
 	 */
@@ -124,4 +126,31 @@
 	 */
 	@ApiModelProperty(value = "问题数量")
 	private Integer problemCount;
+
+	/**
+	 * 流程定义id
+	 */
+	private String processDefinitionId;
+	/**
+	 * 流程实例id
+	 */
+	private String processInstanceId;
+
+	/**
+	 * 工作流标识 是否上报
+	 */
+	@TableField(exist = false)
+	private Boolean report;
+
+	/**
+	 * 工作流标识 是否上报至部门
+	 */
+	@TableField(exist = false)
+	private Boolean toDept;
+
+	/**
+	 * 工作流标识 是否转送至技术负责人
+	 */
+	@TableField(exist = false)
+	private Boolean toTech;
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolGroupMapper.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolGroupMapper.java
index ff2e964..1ed71cd 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolGroupMapper.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolGroupMapper.java
@@ -1,6 +1,7 @@
 package cn.gistack.sm.patrol.mapper;
 
 import cn.gistack.common.node.TreeNode;
+import cn.gistack.sm.patrol.dto.PatrolGroupDTO;
 import cn.gistack.sm.patrol.entity.PatrolGroup;
 import cn.gistack.sm.patrol.vo.PatrolGroupVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -32,4 +33,8 @@
     List<PatrolGroup> getPatrolGroupByItemId(@Param("itemIds") String itemIds);
 
 	List<PatrolGroupVO> getAllPatrolGroupByTaskId(@Param("taskId") String taskId);
+
+    List<PatrolGroupDTO> getPatrolGroupDTO(@Param("taskId") String taskId);
+
+	List<PatrolGroup> getPatrolGroupByTaskId(String taskId);
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolGroupMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolGroupMapper.xml
index 0650080..aabbe44 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolGroupMapper.xml
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolGroupMapper.xml
@@ -92,4 +92,42 @@
         WHERE IS_DELETED = 0
         ORDER BY G.CREATE_TIME
     </select>
+
+    <resultMap id="patrolGroupDTO" type="cn.gistack.sm.patrol.dto.PatrolGroupDTO">
+        <id property="id" column="id"/>
+        <result property="name" column="gname"/>
+        <collection property="patrolReportList" javaType="java.util.List" ofType="cn.gistack.sm.patrol.vo.PatrolReportVO">
+            <result property="id" column="rId"/>
+            <result property="videos" column="videos" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+            <result property="images" column="images" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
+            <result property="status" column="status"/>
+            <result property="isDeleted" column="isDeleted"/>
+            <result property="itemId" column="itemId"/>
+            <result property="itemsName" column="itemsName"/>
+            <result property="taskId" column="taskId"/>
+            <result property="solution" column="solution"/>
+            <result property="content" column="content"/>
+            <result property="recordId" column="recordId"/>
+        </collection>
+    </resultMap>
+
+
+    <select id="getPatrolGroupDTO" resultMap="patrolGroupDTO">
+       SELECT G.ID,G.NAME gname,
+        R.ID rId, R.VIDEOS,R.IMAGES,R.STATUS,R.IS_DELETED,R.ITEM_ID itemId,R.record_id recordId,
+        I.ITEMS_NAME itemsName,R.TASK_ID,R.SOLUTION,R.CONTENT FROM SM_PATROL_GROUP G
+       LEFT JOIN SM_PATROL_GROUP_ITEM I ON I.GROUP_ID = G.ID
+       LEFT JOIN SM_PATROL_REPORT R ON R.ITEM_ID = I.ID
+       WHERE G.IS_DELETED = 0
+       AND R.STATUS = 2
+       AND R.TASK_ID = #{taskId}
+    </select>
+    <select id="getPatrolGroupByTaskId" resultType="cn.gistack.sm.patrol.entity.PatrolGroup">
+       SELECT G.ID,G.NAME FROM SM_PATROL_GROUP G
+       LEFT JOIN SM_PATROL_GROUP_ITEM I ON I.GROUP_ID = G.ID
+       LEFT JOIN SM_PATROL_REPORT R ON R.ITEM_ID = I.ID
+       WHERE G.IS_DELETED = 0
+       AND R.STATUS = 2
+       AND R.TASK_ID = #{taskId}
+    </select>
 </mapper>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolRecordMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolRecordMapper.xml
index d624b74..7c64b14 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolRecordMapper.xml
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolRecordMapper.xml
@@ -34,7 +34,7 @@
 
     <select id="selectPatrolRecord" resultMap="selectPatrolRecordList">
         SELECT
-        record.id,record.patrol_type,record.device_ids,record.images,record.videos,record.content,record.status,record.item_id,record.task_id,record.patrol_route,record.update_time,record.solution
+        record.id,record.patrol_type,record.device_ids,record.images,record.videos,record.content,record.status,record.item_id,record.task_id,record.patrol_route,record.update_time,record.solution,
         task.route_coordinates taskRoute,item.items_name itemsName,item.description
         FROM SM_PATROL_RECORD record
         LEFT JOIN sm_patrol_type type ON type.id = record.patrol_type
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolTaskMapper.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolTaskMapper.java
index 66356b6..443b04e 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolTaskMapper.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolTaskMapper.java
@@ -46,4 +46,6 @@
 	 * @return
 	 */
 	PatrolTask getPatrolTaskById(@Param("id")String id);
+
+    PatrolTask customizeGetById(@Param("id") String id);
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolTaskMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolTaskMapper.xml
index 4270d4e..1e99b7f 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolTaskMapper.xml
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/mapper/PatrolTaskMapper.xml
@@ -127,4 +127,12 @@
         FROM sm_patrol_task spt
         where spt.id = #{id}
     </select>
+    <select id="customizeGetById" resultType="cn.gistack.sm.patrol.entity.PatrolTask">
+        SELECT T.ID,T.TITLE,T.TO_USER_ID,A.PROBLEM_COUNT,T.PROJECT_ID FROM SM_PATROL_TASK T
+        LEFT JOIN (
+            SELECT COUNT(*) PROBLEM_COUNT,R.TASK_ID FROM SM_PATROL_REPORT R WHERE R.TASK_ID = #{id} AND R.STATUS = 2 GROUP BY R.TASK_ID
+        )A ON A.TASK_ID = T.ID
+        WHERE T.ID = #{id}
+        AND T.IS_DELETED = 0
+    </select>
 </mapper>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/IPatrolGroupService.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/IPatrolGroupService.java
index 8f41d16..78de1a2 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/IPatrolGroupService.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/IPatrolGroupService.java
@@ -1,5 +1,6 @@
 package cn.gistack.sm.patrol.service;
 
+import cn.gistack.sm.patrol.dto.PatrolGroupDTO;
 import cn.gistack.sm.patrol.entity.PatrolGroup;
 import cn.gistack.sm.patrol.vo.PatrolGroupVO;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -36,4 +37,8 @@
 	List<PatrolGroup> getPatrolGroupByItemId(String itemIds);
 
 	List<PatrolGroupVO> getAllPatrolGroupByTaskId(String taskId);
+
+    List<PatrolGroupDTO> getPatrolGroupDTO(String taskId);
+
+	List<PatrolGroup> getPatrolGroupByTaskId(String taskId);
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/IPatrolTaskService.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/IPatrolTaskService.java
index 43aa44f..26c2c29 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/IPatrolTaskService.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/IPatrolTaskService.java
@@ -1,9 +1,15 @@
 package cn.gistack.sm.patrol.service;
 
+import cn.gistack.flow.core.entity.BladeFlow;
+import cn.gistack.sm.patrol.entity.PatrolReport;
 import cn.gistack.sm.patrol.entity.PatrolTask;
+import cn.gistack.sm.patrol.vo.BladeFlowTask;
 import cn.gistack.sm.patrol.vo.PatrolTaskVO;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.mp.base.BaseService;
+
+import java.net.http.HttpRequest;
+import java.util.List;
 
 public interface IPatrolTaskService extends BaseService<PatrolTask> {
 
@@ -42,4 +48,18 @@
 	 * @return
 	 */
 	PatrolTask getPatrolTaskById(String id);
+
+	/**
+	 * 开启流程
+	 *
+	 * @param patrolTask 任务实体
+	 * @return boolean
+	 */
+	boolean startProcess(PatrolTask patrolTask);
+
+	boolean patrolCompleteTask(PatrolTask patrolTask,String currentUserId);
+
+	boolean chargeCompletePerson(BladeFlowTask bladeFlowTask);
+
+	PatrolTask customizeGetById(String businessId);
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolGroupServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolGroupServiceImpl.java
index ffd28f5..5233283 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolGroupServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolGroupServiceImpl.java
@@ -3,6 +3,7 @@
 
 import cn.gistack.common.node.TreeNode;
 import cn.gistack.common.utils.NodeTreeUtil;
+import cn.gistack.sm.patrol.dto.PatrolGroupDTO;
 import cn.gistack.sm.patrol.entity.PatrolGroup;
 import cn.gistack.sm.patrol.mapper.PatrolGroupMapper;
 import cn.gistack.sm.patrol.service.IPatrolGroupService;
@@ -55,4 +56,14 @@
 	public List<PatrolGroupVO> getAllPatrolGroupByTaskId(String taskId) {
 		return baseMapper.getAllPatrolGroupByTaskId(taskId);
 	}
+
+	@Override
+	public List<PatrolGroupDTO> getPatrolGroupDTO(String taskId) {
+		return baseMapper.getPatrolGroupDTO(taskId);
+	}
+
+	@Override
+	public List<PatrolGroup> getPatrolGroupByTaskId(String taskId) {
+		return baseMapper.getPatrolGroupByTaskId(taskId);
+	}
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolReportServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolReportServiceImpl.java
index 665692a..667f30c 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolReportServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolReportServiceImpl.java
@@ -3,15 +3,32 @@
 import cn.gistack.sm.patrol.entity.PatrolConfig;
 import cn.gistack.sm.patrol.entity.PatrolReport;
 import cn.gistack.sm.patrol.mapper.PatrolReportMapper;
+import cn.gistack.sm.patrol.service.IPatrolRecordService;
 import cn.gistack.sm.patrol.service.IPatrolReportService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.AllArgsConstructor;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.tool.utils.Func;
 import org.springframework.stereotype.Service;
 
 @Service
+@AllArgsConstructor
 public class PatrolReportServiceImpl  extends BaseServiceImpl<PatrolReportMapper, PatrolReport> implements IPatrolReportService {
+	private final IPatrolRecordService patrolRecordService;
+
 	@Override
 	public IPage<PatrolConfig> selectPatrolReport(IPage<PatrolReport> page, PatrolConfig patrolConfig) {
 		return null;
 	}
+
+	@Override
+	public boolean save(PatrolReport entity) {
+		if (Func.equals(entity.getStatus(),1)){
+
+		}
+
+
+
+		return super.save(entity);
+	}
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolTaskServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolTaskServiceImpl.java
index 031c5d5..ae73771 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolTaskServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolTaskServiceImpl.java
@@ -1,26 +1,51 @@
 package cn.gistack.sm.patrol.service.impl;
 
+import cn.gistack.flow.core.constant.ProcessConstant;
+import cn.gistack.flow.core.entity.BladeFlow;
+import cn.gistack.flow.core.feign.IFlowClient;
+import cn.gistack.flow.core.utils.FlowUtil;
+import cn.gistack.flow.core.utils.TaskUtil;
+import cn.gistack.sm.patrol.entity.PatrolRecord;
+import cn.gistack.sm.patrol.entity.PatrolReport;
 import cn.gistack.sm.patrol.entity.PatrolTask;
 import cn.gistack.sm.patrol.mapper.PatrolTaskMapper;
+import cn.gistack.sm.patrol.service.IPatrolRecordService;
+import cn.gistack.sm.patrol.service.IPatrolReportService;
 import cn.gistack.sm.patrol.service.IPatrolTaskService;
 import cn.gistack.sm.patrol.util.EnhancementServicesTool;
 import cn.gistack.sm.patrol.util.IdWorker;
+import cn.gistack.sm.patrol.vo.BladeFlowTask;
 import cn.gistack.sm.patrol.vo.PatrolTaskVO;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import lombok.AllArgsConstructor;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.mp.support.Condition;
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.net.http.HttpRequest;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static org.springblade.core.launch.constant.FlowConstant.TASK_USR_PREFIX;
 
 @Service
 @AllArgsConstructor
 public class PatrolTaskServiceImpl extends BaseServiceImpl<PatrolTaskMapper, PatrolTask> implements IPatrolTaskService {
-
+	private final IFlowClient flowClient;
+	private final IPatrolRecordService patrolRecordService;
+	private final IPatrolReportService patrolReportService;
 
 	/**
 	 * 自定义分页查询
@@ -85,4 +110,118 @@
 	public PatrolTask getPatrolTaskById(String id) {
 		return baseMapper.getPatrolTaskById(id);
 	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean startProcess(PatrolTask patrolTask) {
+		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);
+			if (result.isSuccess()) {
+				log.debug("流程已启动,流程ID:" + result.getData().getProcessInstanceId());
+				// 返回流程id写入leave
+				patrolTask.setProcessInstanceId(result.getData().getProcessInstanceId());
+				updateById(patrolTask);
+			} else {
+				throw new ServiceException("开启流程失败");
+			}
+		} else {
+			updateById(patrolTask);
+		}
+		return true;
+	}
+
+	@Override
+	@Transactional
+	public boolean patrolCompleteTask(PatrolTask patrolTask,String currentUserId) {
+		R<BladeFlow> res = flowClient.getBladeFlow(patrolTask.getId().toString(),currentUserId);
+		if (res.isSuccess()){
+			BladeFlow flow = res.getData();
+			String taskId = flow.getTaskId();
+			String processInstanceId = patrolTask.getProcessInstanceId();
+//			String comment = Func.toStr(flow.getComment(), ProcessConstant.PASS_COMMENT);
+			String comment = "完成";
+			// 创建变量
+			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, "1650048152667467777"));
+			// 完成任务
+			flowClient.completeTask(taskId,processInstanceId,comment,variables);
+			saveReport(patrolTask);
+			return baseMapper.updateById(patrolTask) >0;
+		}else {
+			return  false;
+		}
+	}
+
+	@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){
+			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 update;
+	}
+
+	@Override
+	public PatrolTask customizeGetById(String businessId) {
+		return baseMapper.customizeGetById(businessId);
+	}
+
+	public void saveReport(PatrolTask patrolTask){
+		//拿到当前任务下的异常巡查记录
+		PatrolRecord patrolRecord = new PatrolRecord();
+		patrolRecord.setTaskId(patrolTask.getId().toString());
+		patrolRecord.setStatus(2);
+		patrolRecord.setSolution("2");
+		List<PatrolRecord> list = patrolRecordService.list(Condition.getQueryWrapper(patrolRecord));
+
+		//向上报表中添加数据
+		list.forEach(record->{
+			PatrolReport patrolReport = new PatrolReport();
+			patrolReport.setContent(record.getContent());
+			patrolReport.setImages(record.getImages());
+			patrolReport.setVideos(record.getVideos());
+			patrolReport.setItemId(record.getItemId());
+			patrolReport.setSolution(record.getSolution());
+			patrolReport.setTaskId(record.getTaskId());
+			patrolReport.setRecordId(record.getId().toString());
+			patrolReport.setStatus(record.getStatus());
+
+			patrolReportService.save(patrolReport);
+		});
+	}
+
+
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/BladeFlowTask.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/BladeFlowTask.java
new file mode 100644
index 0000000..4437919
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/BladeFlowTask.java
@@ -0,0 +1,23 @@
+package cn.gistack.sm.patrol.vo;
+
+import cn.gistack.flow.core.entity.BladeFlow;
+import cn.gistack.sm.patrol.entity.PatrolReport;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class BladeFlowTask {
+
+	private List<PatrolReport> patrolReportList;
+
+	private String taskId;
+
+	private String processInstanceId;
+
+	private String taskUser;
+
+	private Boolean toDept;
+
+	private Boolean toTech;
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/PatrolReportVO.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/PatrolReportVO.java
new file mode 100644
index 0000000..a3ab4b7
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/PatrolReportVO.java
@@ -0,0 +1,28 @@
+package cn.gistack.sm.patrol.vo;
+
+import cn.gistack.sm.patrol.entity.PatrolReport;
+import lombok.Data;
+
+@Data
+public class PatrolReportVO extends PatrolReport {
+	/**
+	 * 组名称
+	 */
+	private String groupName;
+
+	/**
+	 * 组id
+	 */
+	private String groupId;
+
+	/**
+	 * 项名称
+	 */
+	private String itemsName;
+
+	/**
+	 * 项描述
+	 */
+	private String description;
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/PatrolTaskVO.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/PatrolTaskVO.java
index dc19ec2..f6dffa5 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/PatrolTaskVO.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/vo/PatrolTaskVO.java
@@ -31,4 +31,9 @@
 	 * 角色名
 	 */
 	private String roleName;
+
+	/**
+	 * 当前用户id
+	 */
+	private String currentUserId;
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/controller/UserController.java b/skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/controller/UserController.java
index f1792d4..820cce9 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/controller/UserController.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/controller/UserController.java
@@ -98,6 +98,30 @@
 		return R.data(UserWrapper.build().entityVO(detail));
 	}
 
+
+
+	/**
+	 * 查询单条
+	 */
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "查看详情", notes = "传入id")
+	@GetMapping("/customizeGetDetail")
+	public R<User> customizeGetDetail(User user) {
+		User detail = userService.getOne(Condition.getQueryWrapper(user));
+		return R.data(UserWrapper.build().entityVO(detail));
+	}
+
+	/**
+	 * 自定义查询用户列表
+	 * @param user
+	 * @return
+	 */
+	@GetMapping("/customizeGetList")
+	public R<List<User>> customizeGetList(UserVO user){
+		List<User> userList = userService.customizeGetList(user);
+		return R.data(userList);
+	}
+
 	/**
 	 * 用户列表
 	 */
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/mapper/UserMapper.java b/skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/mapper/UserMapper.java
index 804f14f..8a2f9e3 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/mapper/UserMapper.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/mapper/UserMapper.java
@@ -18,6 +18,7 @@
 
 import cn.gistack.system.user.entity.User;
 import cn.gistack.system.user.excel.UserExcel;
+import cn.gistack.system.user.vo.UserVO;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -60,4 +61,5 @@
 	 */
 	List<UserExcel> exportUser(@Param("ew") Wrapper<User> queryWrapper);
 
+    List<User> customizeGetList(@Param("user") UserVO user);
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/mapper/UserMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/mapper/UserMapper.xml
index 8c85979..7bca0b4 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/mapper/UserMapper.xml
+++ b/skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/mapper/UserMapper.xml
@@ -72,5 +72,10 @@
     <select id="exportUser" resultType="cn.gistack.system.user.excel.UserExcel">
         SELECT id, tenant_id, user_type, account, name, real_name, email, phone, birthday, role_id, dept_id, post_id FROM blade_user ${ew.customSqlSegment}
     </select>
+    <select id="customizeGetList" resultType="cn.gistack.system.user.entity.User">
+        select U.* from BLADE_USER U
+        left join BLADE_DEPT D on D.ID = U.DEPT_ID
+        where D.AD_CODE = #{user.adCode} and U.ROLE_ID like CONCAT('%',(select id from BLADE_ROLE where ROLE_ALIAS = 'qxgly'),'%')
+    </select>
 
 </mapper>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/service/IUserService.java b/skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/service/IUserService.java
index 872ed86..5b0bede 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/service/IUserService.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/service/IUserService.java
@@ -205,4 +205,6 @@
 	 * @return
 	 */
 	UserVO platformDetail(User user);
+
+    List<User> customizeGetList(UserVO user);
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/service/impl/UserServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/service/impl/UserServiceImpl.java
index 9df26ef..8d5523a 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/service/impl/UserServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/service/impl/UserServiceImpl.java
@@ -430,4 +430,9 @@
 		return userVO;
 	}
 
+	@Override
+	public List<User> customizeGetList(UserVO user) {
+		return baseMapper.customizeGetList(user);
+	}
+
 }

--
Gitblit v1.9.3