From 03b2e2034f73abfe5f865a72361fee9fa5c1feec Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Mon, 25 Sep 2023 16:20:54 +0800
Subject: [PATCH] 根据超汛限和病险对水库下发巡查任务

---
 skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/PatrolXxlJob.java             |   22 +++++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResManagePersonMapper.java            |    2 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/AttResManagePersonServiceImpl.java |    6 +
 skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/patrol/feign/PatrolTaskClient.java             |   16 ++++
 skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/patrol/feign/PatrolTaskClientFallback.java     |    5 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/IAttResManagePersonService.java         |    7 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/feign/PatrolTaskImplClient.java                 |  135 +++++++++++++++++++++++++++++++++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResManagePersonMapper.xml             |   27 ++++++
 8 files changed, 219 insertions(+), 1 deletions(-)

diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/patrol/feign/PatrolTaskClient.java b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/patrol/feign/PatrolTaskClient.java
index 7b2ca07..70313a6 100644
--- a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/patrol/feign/PatrolTaskClient.java
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/patrol/feign/PatrolTaskClient.java
@@ -20,6 +20,8 @@
 	String API_PREFIX = "/client";
 	String CREATE_TASK_JOB_HANDLER = API_PREFIX + "/createTaskJobHandler";
 
+	String CREATE_TASK_JOB_BY_CONDITION_HANDLER = API_PREFIX+"/createTaskJobByConditionHandler";
+
 	/**
 	 * 给巡查责任人定时创建任务执行器
 	 * @param processDefinitionId
@@ -33,4 +35,18 @@
 									   @RequestParam("taskType") String taskType,
 									   @RequestParam("title") String title,
 									   @RequestParam("content") String content);
+
+	/**
+	 * 给巡查责任人定时创建任务执行器
+	 * @param processDefinitionId
+	 * @param taskType
+	 * @param title
+	 * @param content
+	 * @return
+	 */
+	@GetMapping(CREATE_TASK_JOB_BY_CONDITION_HANDLER)
+	List<Integer> createTaskJobByConditionHandler(@RequestParam("processDefinitionId") String processDefinitionId,
+									   @RequestParam("taskType") String taskType,
+									   @RequestParam("title") String title,
+									   @RequestParam("content") String content);
 }
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/patrol/feign/PatrolTaskClientFallback.java b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/patrol/feign/PatrolTaskClientFallback.java
index 7f79808..e52b548 100644
--- a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/patrol/feign/PatrolTaskClientFallback.java
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/patrol/feign/PatrolTaskClientFallback.java
@@ -16,4 +16,9 @@
 	public List<Integer> createTaskJobHandler(String processDefinitionId, String taskType, String title, String content) {
 		return null;
 	}
+
+	@Override
+	public List<Integer> createTaskJobByConditionHandler(String processDefinitionId, String taskType, String title, String content) {
+		return null;
+	}
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/feign/PatrolTaskImplClient.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/feign/PatrolTaskImplClient.java
index c3d9458..1d0bb6e 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/feign/PatrolTaskImplClient.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/feign/PatrolTaskImplClient.java
@@ -1,23 +1,33 @@
 package cn.gistack.sm.patrol.feign;
 
+import cn.gistack.sm.intelligentCall.constant.ZtConstant;
 import cn.gistack.sm.intelligentCall.service.CallService;
 import cn.gistack.sm.patrol.entity.PatrolTask;
 import cn.gistack.sm.patrol.service.IPatrolTaskService;
 import cn.gistack.sm.sjztmd.entity.PatrolResponsiblePerson;
 import cn.gistack.sm.sjztmd.service.IAttResManagePersonService;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.utils.DateUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.util.MultiValueMap;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
 import springfox.documentation.annotations.ApiIgnore;
 
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 
 /**
@@ -33,9 +43,25 @@
 @Slf4j
 public class PatrolTaskImplClient implements PatrolTaskClient {
 
+	//本地测试
+	private static final String LOCAL = "https://sk.hubeishuiyi.cn";
+	//线上
+	private static final String ONLINE = "http://10.42.6.192";
 	private final IPatrolTaskService patrolTaskService;
-
 	private final IAttResManagePersonService attResManagePersonService;
+
+	@Autowired
+	private RestTemplate restTemplate;
+
+	/**
+	 * 超汛限(包含汛限值0)
+	 */
+	private static final String GET_OVER_RZ =ONLINE +  "/services/1234567890ABCDEFGHIJKLMN/over_z_last/patr_person/api?start_over=0&pageNo=1&pageSize=2000";
+	/**
+	 * 病险水库
+	 */
+	private static final String GET_ILL_RESERVOIR =ONLINE +  "/services/1234567890ABCDEFGHIJKLMN/res/main_st/rsvr?eng_scal=&res_nm=&is_danger=true&res_cds=&is_video=&flag=&data_sta=&gate=&is_order=1&label=&bas_nm=&pageNo=1&pageSize=10000";
+
 
 	/**
 	 * 给巡查责任人定时创建任务执行器
@@ -52,6 +78,111 @@
 											  String title,
 											  String content) {
 		List<PatrolResponsiblePerson> patrolResponsiblePersonList =  attResManagePersonService.getPatrolResponsiblePersonAll();
+		List<Integer> taskJob = createTaskJob(processDefinitionId, taskType, title, content, patrolResponsiblePersonList);
+		return taskJob;
+	}
+
+	@Override
+	@GetMapping(CREATE_TASK_JOB_BY_CONDITION_HANDLER)
+	public List<Integer> createTaskJobByConditionHandler(String processDefinitionId, String taskType, String title, String content) {
+
+		List<String> reservoirList = new ArrayList<>();
+
+		//获取病险水库数据
+		JSONArray overList = apiRequestResult(null, GET_OVER_RZ);
+		for (int i = 0; i < overList.size(); i++) {
+			JSONObject reservoir = overList.getJSONObject(i);
+			reservoirList.add(reservoir.getString("res_cd"));
+		}
+
+		JSONArray illList = apiRequestData(null, GET_ILL_RESERVOIR);
+		for (int i = 0; i < illList.size(); i++) {
+			JSONObject reservoir = illList.getJSONObject(i);
+			reservoirList.add(reservoir.getString("res_cd"));
+		}
+
+		List<PatrolResponsiblePerson> patrolResponsiblePersonList =  attResManagePersonService.getPatrolResponsiblePersonByResCdList(reservoirList);
+
+		List<Integer> taskJob = createTaskJob(processDefinitionId, taskType, title, content, patrolResponsiblePersonList);
+
+		return taskJob;
+	}
+
+
+	/**
+	 * 请求中台接口,返回resultList结果集
+	 * @param params
+	 * @return
+	 */
+	private JSONArray apiRequestResult(Map<String, Object> params,String url) {
+		//设置请求头
+		HttpHeaders headers = new HttpHeaders();
+		headers.add(ZtConstant.header_key, ZtConstant.header_value);
+		//封装请求头
+		HttpEntity<MultiValueMap<String, Object>> formEntity = new HttpEntity<MultiValueMap<String, Object>>(headers);
+		try {
+			//有请求头,有参数请求
+			ResponseEntity<String> responseEntity =
+				restTemplate.exchange(url,
+					HttpMethod.GET,
+					formEntity,
+					String.class);
+			JSONObject jsonObject = JSON.parseObject(responseEntity.getBody());
+			JSONArray jsonArray = JSONArray.parseArray(jsonObject.get("resultList").toString());
+			// 返回
+			return jsonArray;
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	/**
+	 * 请求中台接口,返回data结果集
+	 * @param params
+	 * @return
+	 */
+	private JSONArray apiRequestData(Map<String, Object> params,String url) {
+		//设置请求头
+		HttpHeaders headers = new HttpHeaders();
+		headers.add(ZtConstant.header_key, ZtConstant.header_value);
+		//封装请求头
+		HttpEntity<MultiValueMap<String, Object>> formEntity = new HttpEntity<MultiValueMap<String, Object>>(headers);
+		try {
+			//有请求头,有参数请求
+			ResponseEntity<String> responseEntity =
+				restTemplate.exchange(url,
+					HttpMethod.GET,
+					formEntity,
+					String.class);
+			JSONObject jsonObject = JSON.parseObject(responseEntity.getBody());
+			JSONObject data = JSON.parseObject(jsonObject.get("data").toString());
+
+			JSONArray dataList = data.getJSONArray("data");
+
+			// 返回
+			return dataList;
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+
+
+	/**
+	 * 创建任务的方法
+	 * @param processDefinitionId
+	 * @param taskType
+	 * @param title
+	 * @param content
+	 * @param patrolResponsiblePersonList
+	 * @return
+	 */
+	public List<Integer> createTaskJob(String processDefinitionId,
+									   String taskType,
+									   String title,
+									   String content,List<PatrolResponsiblePerson> patrolResponsiblePersonList){
 		AtomicInteger failureCount = new AtomicInteger();
 		patrolResponsiblePersonList.forEach(item -> {
 			log.info("当前创建任务对象:" + JSON.toJSONString(item));
@@ -83,4 +214,6 @@
 		// 返回
 		return list;
 	}
+
+
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResManagePersonMapper.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResManagePersonMapper.java
index bb4eda1..1eeb77e 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResManagePersonMapper.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResManagePersonMapper.java
@@ -61,4 +61,6 @@
     List<PersonVO> getCityCountyPersonListByResGuid(@Param("adCode") String res_cd,
 													@Param("roleAlias") String roleAlias,
 													@Param("type") String type);
+
+	List<PatrolResponsiblePerson> getPatrolResponsiblePersonByResCdList(@Param("ids") List<String> reservoirList);
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResManagePersonMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResManagePersonMapper.xml
index 91c86ac..f646860 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResManagePersonMapper.xml
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResManagePersonMapper.xml
@@ -185,5 +185,32 @@
         and bd.ad_code = #{adCode}
         limit 3
     </select>
+    <select id="getPatrolResponsiblePersonByResCdList"
+            resultType="cn.gistack.sm.sjztmd.entity.PatrolResponsiblePerson">
+
+        select DISTINCT a."res_guid", c."name", b.id as user_id
+        from "SJZT_MD"."att_res_manage_person" a,
+             "BLADE_USER" b,
+             "SJZT_MD"."att_res_base" c
+        WHERE a."user_phone" = b.PHONE
+          and a."res_guid" = c."guid"
+          and a."type" = 5
+        <choose>
+            <when test="ids!=null and ids.size()>0">
+                and "res_guid" in
+                <foreach collection="ids" item="id" open="(" close=")" separator=",">
+                    #{id}
+                </foreach>
+            </when>
+            <otherwise>
+                and "res_guid" in ('')
+            </otherwise>
+        </choose>
+
+
+
+
+
+    </select>
 
 </mapper>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/IAttResManagePersonService.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/IAttResManagePersonService.java
index 5542f4d..434f7d3 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/IAttResManagePersonService.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/IAttResManagePersonService.java
@@ -69,4 +69,11 @@
 	 * @return
 	 */
     List<PersonVO> getCityCountyPersonListByResGuid(String res_cd);
+
+	/**
+	 * 根据水库id集合查询巡查责任人
+	 * @param reservoirList
+	 * @return
+	 */
+    List<PatrolResponsiblePerson> getPatrolResponsiblePersonByResCdList(List<String> reservoirList);
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/AttResManagePersonServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/AttResManagePersonServiceImpl.java
index bad299c..1ba0b03 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/AttResManagePersonServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/AttResManagePersonServiceImpl.java
@@ -172,4 +172,10 @@
 		// 返回
 		return personVOList;
 	}
+
+	@DS("master")
+	@Override
+	public List<PatrolResponsiblePerson> getPatrolResponsiblePersonByResCdList(List<String> reservoirList) {
+		return baseMapper.getPatrolResponsiblePersonByResCdList(reservoirList);
+	}
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/PatrolXxlJob.java b/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/PatrolXxlJob.java
index bcfb89e..2014861 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/PatrolXxlJob.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/PatrolXxlJob.java
@@ -44,4 +44,26 @@
 		XxlJobLogger.log("总数量:<span style='color:red'>" + taskJobHandler.get(0) + "</span> ... 失败数量:<span style='color:red'>" + taskJobHandler.get(1)  + "</span> ");
 		return ReturnT.SUCCESS;
 	}
+
+	/**
+	 * 给巡查责任人定时创建任务执行器
+	 * @param param
+	 * @return
+	 * @throws Exception
+	 */
+	@XxlJob("createTaskJobByConditionHandler")
+	public ReturnT<String> createTaskJobByConditionHandler(String param){
+		XxlJobLogger.log("开始自动创建任务...");
+		JSONObject jsonParam = JSON.parseObject(param);
+		String processDefinitionId = jsonParam.getString("processDefinitionId");
+		String taskType = jsonParam.getString("taskType");
+		String title = jsonParam.getString("title");
+		String content = jsonParam.getString("content");
+		// 远程调用
+		List<Integer> taskJobHandler = patrolTasClient.createTaskJobByConditionHandler(processDefinitionId, taskType, title, content);
+		// 打印响应数据
+		XxlJobLogger.log("结束自动创建任务...");
+		XxlJobLogger.log("总数量:<span style='color:red'>" + taskJobHandler.get(0) + "</span> ... 失败数量:<span style='color:red'>" + taskJobHandler.get(1)  + "</span> ");
+		return ReturnT.SUCCESS;
+	}
 }

--
Gitblit v1.9.3