From 5c7dab639fffc0fe7d453c5c5153ddb6036fe45a Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Mon, 24 Apr 2023 17:05:53 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/jtdev' into jtdev

---
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java |  166 +++++++++++++++++++++++++++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/controller/CallController.java    |  158 ++-----------------------
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/vo/CallBackDetailVO.java          |    9 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/CallService.java          |    8 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/SmApplication.java                                |    9 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/constant/CallConstant.java        |    9 +
 6 files changed, 217 insertions(+), 142 deletions(-)

diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/SmApplication.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/SmApplication.java
index 7af51fd..c04b14d 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/SmApplication.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/SmApplication.java
@@ -5,7 +5,10 @@
 import org.springblade.core.launch.BladeApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.web.client.RestTemplateBuilder;
 import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.Bean;
+import org.springframework.web.client.RestTemplate;
 
 @BladeCloudApplication
 @EnableFeignClients({"cn.gistack"})
@@ -14,4 +17,10 @@
 	public static void main(String[] args) {
 		BladeApplication.run("blade-sm", SmApplication.class, args);
 	}
+
+	@Bean
+	public RestTemplate restTemplate(RestTemplateBuilder builder){
+		return builder.build();
+	}
+
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/constant/CallConstant.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/constant/CallConstant.java
index 7affe6c..8944348 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/constant/CallConstant.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/constant/CallConstant.java
@@ -22,6 +22,15 @@
 	 */
 	public static final String AppSecret = "ea3b23ecdb2247e9bcbccbdee7d5dbf4";
 
+
+	public static final String scenesId = "230";
+
+
+	public static final String callingNumbers = "00862787222298";
+
+
+	public static final String empId = "24";
+
 	/**
 	 * 创建会话url
 	 */
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/controller/CallController.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/controller/CallController.java
index 144fdf1..6c27bfe 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/controller/CallController.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/controller/CallController.java
@@ -1,12 +1,6 @@
 package cn.gistack.sm.intelligentCall.controller;
 
-import cn.gistack.sm.intelligentCall.constant.CallConstant;
-import cn.gistack.sm.intelligentCall.entity.ThirdBaseParam;
-import cn.gistack.sm.intelligentCall.entity.ThirdPartyResult;
-import cn.gistack.sm.intelligentCall.entity.ThirdRequestHead;
-import cn.gistack.sm.intelligentCall.entity.User;
-import cn.gistack.sm.intelligentCall.util.HttpClientUtils;
-import com.alibaba.fastjson.JSON;
+import cn.gistack.sm.intelligentCall.service.CallService;
 import io.swagger.annotations.Api;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -14,14 +8,7 @@
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.text.SimpleDateFormat;
 import java.util.*;
-
-import static cn.gistack.sm.intelligentCall.util.CallUtil.getRandom;
-import static cn.gistack.sm.intelligentCall.util.CallUtil.getToken;
-import static cn.gistack.sm.intelligentCall.util.ThirdPartyValidate.validateToken;
 
 /**
  * 智能呼叫控制层
@@ -35,147 +22,36 @@
 @AllArgsConstructor
 public class CallController {
 
+	private final CallService callService;
+
 	/**
 	 * 创建任务
 	 * @return
 	 */
 	@GetMapping("/createCall")
 	public R createCall(){
-		// 请求
-		Map<String, Object> map = new HashMap<>();
-		map.put("p1",createCallUtil());
-		// 返回
-		return R.data(map);
-	}
-
-	/**
-	 * 创建任务
-	 * @return
-	 */
-	@GetMapping("/createCall1")
-	public R createCall1(){
-		// 请求
-		Map<String, Object> map = new HashMap<>();
-		map.put("p1",createCallUtil());
-		// 返回
-		return R.data(map);
-	}
-
-	/**
-	 * 创建任务
-	 * @return
-	 */
-	public static String createCallUtil(){
-		Date date = new Date();
-		String dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
-		String timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(date);
-		String transId = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(date) + getRandom();
-
-		Map<String, Object> map = new HashMap<>();
-		map.put("taskName","测试");
-		map.put("sceneId",230);
-		map.put("callingNumbers", Arrays.asList("00862787222298"));
-		map.put("taskScheduleTime",dateFormat);
-		List<Map<String,Object>> list = new ArrayList<>();
-		Map<String,Object> maps = new HashMap<>();
-		maps.put("被叫号码","15170720695");
-		maps.put("水库名称","测试水库");
-		maps.put("超汛限多少米","0");
-		maps.put("水库编码","1241241122");
-		maps.put("用户名","zrj");
-		maps.put("用户id","123456");
+		List<Map<String,String>> list = new ArrayList<>();
+		Map<String,String> maps = new HashMap<>();
+		maps.put("phone","15170720695");
+		maps.put("name","测试水库");
+		maps.put("over","1.2");
+		maps.put("code","1241241122");
+		maps.put("userName","zrj");
+		maps.put("userId","123456");
 		list.add(maps);
-		map.put("calleeData",list);
-
-		ThirdBaseParam thirdBaseParam = new ThirdBaseParam();
-		ThirdRequestHead thirdRequestHead = new ThirdRequestHead();
-		thirdRequestHead.setAppId(CallConstant.AppKey);
-		thirdRequestHead.setTimestamp(timestamp);
-		thirdRequestHead.setToken(getToken(timestamp, transId, map));
-		thirdRequestHead.setTransId(transId);
-		thirdBaseParam.setHead(thirdRequestHead);
-		thirdBaseParam.setSecretString(JSON.toJSONString(map));
-
-		// 验证token
-		boolean b = validateToken(thirdBaseParam, CallConstant.AppSecret, new ThirdPartyResult());
-		System.out.println("token 验证结果 = " + b);
-
-		String token = getToken(timestamp, transId, map);
-		String url = CallConstant.HOST + CallConstant.createTaskUrl1;
-		String httpPost = HttpClientUtils.httpPost(url, CallConstant.AppKey, timestamp, transId, token, map);
+		callService.createTask(list);
 		// 返回
-		return httpPost;
+		return R.status(true);
 	}
 
 	/**
-	 * 创建任务
+	 * 获取通话详情
 	 * @return
 	 */
-	public static String createCallUtil1(){
-		Date date = new Date();
-		String dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
-		String timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(date);
-		String transId = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(date) + getRandom();
-
-		Map<String, Object> map = new HashMap<>();
-		map.put("taskName","测试");
-		map.put("sceneId",230);
-		map.put("callingNumbers", Arrays.asList("00862787222298"));
-		map.put("taskScheduleTime",dateFormat);
-		List<Map<String,Object>> list = new ArrayList<>();
-		Map<String,Object> maps = new HashMap<>();
-		maps.put("被叫号码","15170720695");
-		maps.put("水库名称","测试水库");
-		maps.put("超汛限多少米","0");
-		maps.put("水库编码","1241241122");
-		maps.put("用户名","zrj");
-		maps.put("用户id","123456");
-		list.add(maps);
-		map.put("calleeData",list);
-
-		String token = getToken(timestamp, transId, map);
-		String jsonString = JSON.toJSONString(map);
-		HashMap<Object, Object> hashMap = new HashMap<>(4);
-		hashMap.put("appId",CallConstant.AppKey);
-		hashMap.put("timestamp",timestamp);
-		hashMap.put("transId",transId);
-		hashMap.put("token",token);
-
-		Map<String, String> stringHashMap = new HashMap<>();
-		stringHashMap.put("head",hashMap.toString());
-		stringHashMap.put("body",jsonString);
-
-		ThirdBaseParam thirdBaseParam = new ThirdBaseParam();
-		ThirdRequestHead thirdRequestHead = new ThirdRequestHead();
-		thirdRequestHead.setAppId(CallConstant.AppKey);
-		thirdRequestHead.setTimestamp(timestamp);
-		thirdRequestHead.setToken(token);
-		thirdRequestHead.setTransId(transId);
-		thirdBaseParam.setHead(thirdRequestHead);
-		thirdBaseParam.setSecretString(JSON.toJSONString(map));
-
-		// 验证token
-		boolean b = validateToken(thirdBaseParam, CallConstant.AppSecret, new ThirdPartyResult());
-		System.out.println("token 验证结果 = " + b);
-
-
-		String url = CallConstant.HOST + CallConstant.createTaskUrl1;
-		String httpPost = HttpClientUtils.doPost(url, stringHashMap);
+	@GetMapping("/getCallDetail")
+	public R getCallDetail(String taskId,String calleeNumber){
 		// 返回
-		return httpPost;
+		return R.data(callService.getCallDetail(taskId,calleeNumber));
 	}
-
-
-
-//	/**
-//	 * 测试
-//	 * @param args
-//	 */
-//	public static void main(String[] args) {
-//		Map<String, Object> map = new HashMap<>();
-//		map.put("p1",createCallUtil());
-////		map.put("p1",createCallUtil());
-//
-//	}
 
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/CallService.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/CallService.java
index 84460e4..f238175 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/CallService.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/CallService.java
@@ -1,4 +1,12 @@
 package cn.gistack.sm.intelligentCall.service;
 
+
+import java.util.List;
+import java.util.Map;
+
 public interface CallService {
+
+	void createTask(List<Map<String, String>> params);
+
+	Object getCallDetail(String taskId, String calleeNumber);
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java
index 985dff2..80f08be 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java
@@ -1,7 +1,171 @@
 package cn.gistack.sm.intelligentCall.service.impl;
 
+import cn.gistack.sm.intelligentCall.constant.CallConstant;
+import cn.gistack.sm.intelligentCall.service.CallService;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.RandomUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
+import org.springframework.util.DigestUtils;
+import org.springframework.web.client.RestTemplate;
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+import java.util.Map;
 
+@Slf4j
 @Service
-public class CallServiceImpl {
+public class CallServiceImpl implements CallService {
+
+	@Autowired
+	private RestTemplate restTemplate;
+
+//	@Value("${dial.task.url}")
+	private String url = CallConstant.HOST;
+
+//	@Value("${dial.task.empId}")
+	private String empId = CallConstant.empId;
+
+//	@Value("${dial.task.appId}")
+	private String appId = CallConstant.AppKey;
+
+//	@Value("${dial.task.appSecret}")
+	private String appSecret = CallConstant.AppSecret;
+
+//	@Value("${dial.task.scenesId}")
+	private String scenesId = CallConstant.scenesId;
+
+//	@Value("${dial.task.callingNumbers}")
+	private String callingNumbers = CallConstant.callingNumbers;
+
+	private static final String CONTENT_TYPE = "application/json; charset=UTF-8";
+	private static final String ACCEPT_TYPE = "application/json";
+	private static final String ACCEPT_ENCODING = "gzip";
+
+	private final static String CREATE_TASK_URL = "/api/task/createTask.json";
+	private final static String CALL_DETAIL_URL = "/api/task/callDetail.json";
+
+	@Override
+	public void createTask(List<Map<String, String>> params) {
+		String requestUrl = url + CREATE_TASK_URL;
+		LocalDateTime now = LocalDateTime.now();
+		String timestamp = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss SSS"));
+		String transId = generateTransId(now);
+		String taskName = now.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm")) + "智能外呼";
+		String[] numbers = StringUtils.split(callingNumbers,",");
+		String taskScheduleTime = LocalDateTime.now().plusHours(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+		JSONArray arr = getCalleeInfo(params);
+		HttpHeaders httpHeaders = new HttpHeaders();
+		httpHeaders.add("Content-Type", CONTENT_TYPE);
+		httpHeaders.add("Accept", ACCEPT_TYPE);
+		httpHeaders.add("Accept-Encoding", ACCEPT_ENCODING);
+		JSONObject paramJson = new JSONObject();
+		paramJson.put("taskName", taskName);
+		paramJson.put("scenesId", scenesId);
+		paramJson.put("callingNumbers", numbers);
+		paramJson.put("taskScheduleTime", taskScheduleTime);
+		paramJson.put("calleeData", arr);
+		paramJson.put("empId", empId);
+		String token = getToken(appId, timestamp, transId, appSecret, paramJson.toJSONString());
+		JSONObject headerJson = new JSONObject();
+		headerJson.put("appId", appId);
+		headerJson.put("timestamp", timestamp);
+		headerJson.put("transId", transId);
+		headerJson.put("token", token);
+		JSONObject bodyJson = new JSONObject();
+		bodyJson.put("head", headerJson);
+		bodyJson.put("body", paramJson);
+		HttpEntity<String> stringHttpEntity = new HttpEntity<>(bodyJson.toJSONString(), httpHeaders);
+		log.info("创建超汛限智能外呼任务请求参数:{}", bodyJson.toJSONString());
+		ResponseEntity<String> response = restTemplate.postForEntity(requestUrl, stringHttpEntity, String.class);
+		log.info("创建外呼任务请求结果:{}", response);
+		if (response.getStatusCode() != HttpStatus.OK) {
+			log.error("创建智能外呼任务失败:{}", response.getStatusCode());
+		}
+	}
+
+	@Override
+	public Object getCallDetail(String taskId, String calleeNumber) {
+		String requestUrl = url + CALL_DETAIL_URL;
+		LocalDateTime now = LocalDateTime.now();
+		String timestamp = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss SSS"));
+		String transId = generateTransId(now);
+		HttpHeaders httpHeaders = new HttpHeaders();
+		httpHeaders.add("Content-Type", CONTENT_TYPE);
+		httpHeaders.add("Accept", ACCEPT_TYPE);
+		httpHeaders.add("Accept-Encoding", ACCEPT_ENCODING);
+		JSONObject paramJson = new JSONObject();
+		paramJson.put("taskId", taskId);
+		paramJson.put("calleeNumber", calleeNumber);
+		JSONObject bodyJson = new JSONObject();
+		bodyJson.put("head", getHeadJson(appId, timestamp, transId, appSecret, paramJson.toJSONString()));
+		bodyJson.put("body", paramJson);
+		HttpEntity<String> stringHttpEntity = new HttpEntity<>(bodyJson.toJSONString(), httpHeaders);
+		ResponseEntity<String> response = restTemplate.postForEntity(requestUrl, stringHttpEntity, String.class);
+		log.info(response.toString());
+		if (response.getStatusCode() == HttpStatus.OK) {
+			JSONObject responseJson = (JSONObject) JSONObject.parse(response.getBody());
+			assert responseJson != null;
+//			return JSONObject.parseObject(responseJson.getString("data"), CallBackDetailVO.class);
+			return responseJson.getString("data");
+		}
+		return null;
+	}
+
+	private String getToken(String appId, String timestamp, String transId, String appSecret, String body) {
+		String sb = "appId" + appId + "timestamp" + timestamp + "transId" + transId + body + appSecret;
+		return DigestUtils.md5DigestAsHex(sb.getBytes());
+	}
+
+	private JSONObject getHeadJson(String appId, String timestamp, String transId, String appSecret, String body) {
+		String token = getToken(appId, timestamp, transId, appSecret, body);
+		JSONObject headerJson = new JSONObject();
+		headerJson.put("appId", appId);
+		headerJson.put("timestamp", timestamp);
+		headerJson.put("transId", transId);
+		headerJson.put("token", token);
+		return headerJson;
+	}
+
+	private String generateTransId(LocalDateTime now) {
+		String s = "000000" + RandomUtils.nextLong(0, 999999);
+		String randomStr = StringUtils.substring(s, -6);
+		return now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS")) + randomStr;
+	}
+
+	/**
+	 * 封装被呼人对象
+	 * @param params 被呼人信息
+	 * @return 被呼人数组
+	 */
+	private JSONArray getCalleeInfo(List<Map<String, String>> params) {
+		JSONArray arr = new JSONArray();
+		params.forEach(map -> {
+			String phone = map.get("phone");
+			String name = map.get("name");
+			String code = map.get("code");
+			String userName = map.get("userName");
+			String userId = map.get("userId");
+			String over = map.get("over");
+			if (StringUtils.isNotEmpty(phone) && StringUtils.isNotEmpty(name)) {
+				JSONObject json = new JSONObject();
+				json.put("被叫号码", phone);
+				json.put("水库名称", name);
+				json.put("水库编码", code);
+				json.put("用户名", userName);
+				json.put("用户id", userId);
+				json.put("超汛限多少米", over);
+				arr.add(json);
+			}
+		});
+		return arr;
+	}
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/vo/CallBackDetailVO.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/vo/CallBackDetailVO.java
new file mode 100644
index 0000000..9cc5140
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/vo/CallBackDetailVO.java
@@ -0,0 +1,9 @@
+package cn.gistack.sm.intelligentCall.vo;
+
+import lombok.Data;
+
+@Data
+public class CallBackDetailVO {
+
+
+}

--
Gitblit v1.9.3