zhongrj
2023-04-24 c72f2110a469f603ff09f006aad3256e21523c9d
智能外呼调试
2 files modified
10 files added
412 ■■■■ changed files
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/controller/CallController.java 117 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/Head.java 9 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdBaseParam.java 11 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdCallDetailParam.java 9 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdCreateTaskParam.java 12 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdDetailParam.java 8 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdPartyResult.java 9 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdPlainResult.java 9 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdRequestHead.java 11 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdRequestParam.java 13 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/util/CallUtil.java 35 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/util/ThirdPartyValidate.java 169 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/controller/CallController.java
@@ -1,6 +1,9 @@
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;
@@ -18,6 +21,7 @@
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;
/**
 * 智能呼叫控制层
@@ -48,7 +52,66 @@
     * 创建任务
     * @return
     */
    public String createCallUtil(){
    @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.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);
        // 返回
        return httpPost;
    }
    /**
     * 创建任务
     * @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);
@@ -71,8 +134,33 @@
        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.httpPost(url, CallConstant.AppKey, timestamp, transId, token, map);
        String httpPost = HttpClientUtils.doPost(url, stringHashMap);
        // 返回
        return httpPost;
    }
@@ -84,31 +172,10 @@
//     * @param args
//     */
//    public static void main(String[] args) {
//        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);
//        map.put("p1",createCallUtil());
////        map.put("p1",createCallUtil());
//
//        String token = getToken(timestamp, transId, map);
//        String url = CallConstant.HOST + CallConstant.createTaskUrl1;
//        String httpPost = HttpClientUtils.httpPost(url, CallConstant.AppKey, timestamp, transId, token, map);
//        System.out.println("httpPost = " + httpPost);
//    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/Head.java
New file
@@ -0,0 +1,9 @@
package cn.gistack.sm.intelligentCall.entity;
import lombok.Data;
@Data
public class Head {
    private String appId;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdBaseParam.java
New file
@@ -0,0 +1,11 @@
package cn.gistack.sm.intelligentCall.entity;
import lombok.Data;
@Data
public class ThirdBaseParam {
    private ThirdRequestHead head;
    private String secretString;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdCallDetailParam.java
New file
@@ -0,0 +1,9 @@
package cn.gistack.sm.intelligentCall.entity;
import lombok.Data;
@Data
public class ThirdCallDetailParam {
    private String calleeNumber;
    private Integer taskId;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdCreateTaskParam.java
New file
@@ -0,0 +1,12 @@
package cn.gistack.sm.intelligentCall.entity;
import lombok.Data;
@Data
public class ThirdCreateTaskParam {
    private String taskName;
    private String scenesId;
    private String[] callingNumbers;
    private String calleeData;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdDetailParam.java
New file
@@ -0,0 +1,8 @@
package cn.gistack.sm.intelligentCall.entity;
import lombok.Data;
@Data
public class ThirdDetailParam {
    private String body;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdPartyResult.java
New file
@@ -0,0 +1,9 @@
package cn.gistack.sm.intelligentCall.entity;
import lombok.Data;
@Data
public class ThirdPartyResult {
    private String errorMessage;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdPlainResult.java
New file
@@ -0,0 +1,9 @@
package cn.gistack.sm.intelligentCall.entity;
import lombok.Data;
@Data
public class ThirdPlainResult {
    private String errorMessage;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdRequestHead.java
New file
@@ -0,0 +1,11 @@
package cn.gistack.sm.intelligentCall.entity;
import lombok.Data;
@Data
public class ThirdRequestHead {
    private String appId;
    private String timestamp;
    private String transId;
    private String token;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/ThirdRequestParam.java
New file
@@ -0,0 +1,13 @@
package cn.gistack.sm.intelligentCall.entity;
import lombok.Data;
import java.util.Map;
@Data
public class ThirdRequestParam {
    private Head head;
    private String body;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/util/CallUtil.java
@@ -2,6 +2,7 @@
import cn.gistack.sm.intelligentCall.constant.CallConstant;
import com.alibaba.fastjson.JSON;
import org.springframework.util.DigestUtils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
@@ -24,39 +25,11 @@
        builder.append(CallConstant.AppKey)
            .append("timestamp").append(timestamp)
            .append("transId").append(transId)
            .append(CallConstant.AppSecret);
//            .append(body).append(CallConstant.AppSecret);
        String formatString = builder.toString();
        // md5 小写,md5 生成token
        String token = encryption(formatString);
        // 返回
        return token;
    }
    /**
     * 计算token1
     * @param url
     * @return
     */
    public static String getToken1(String url){
        // 计算token
        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();
        // 请求参数拼接
        String body ="{\"callingumbers\":[\"01086394068\"], \"calleeData\":[{\"被叫号码\":\"15170720695\"\"bizId\":\"1\"}]"+
            ",\"scenesId\":2268,\"taskSchedulelime\":\"2023-04-23 16:30:00\",\"taskNamel\":\"thirdCreatelask7\"}";
        // 拼接
        StringBuilder builder = new StringBuilder("appId");
        builder.append(CallConstant.AppKey)
            .append("timestamp").append(timestamp)
            .append("transId").append(transId)
            .append(body).append(CallConstant.AppSecret);
        String formatString = builder.toString();
//        String formatString = builder.toString();
        // md5 小写,md5 生成token
        String token = encryption(formatString);
        String token = DigestUtils.md5DigestAsHex(builder.toString().getBytes());
//        String token = encryption(builder.toString());
        // 返回
        return token;
    }
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/util/ThirdPartyValidate.java
New file
@@ -0,0 +1,169 @@
package cn.gistack.sm.intelligentCall.util;
import cn.gistack.sm.intelligentCall.constant.CallConstant;
import cn.gistack.sm.intelligentCall.entity.*;
import com.alibaba.fastjson.JSON;
//import com.yunli.call.api.param.third.*;
//import com.yunli.call.code.CallValidateCodeEnum;
//import com.yunli.call.result.ThirdPartyResult;
//import com.yunli.call.result.ThirdPlainResult;
import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;
/**
 * @author conanzhang@木森
 * @description
 * @date 2019-12-02 16:37
 * @classname ThirdPartyValidate
 */
@Slf4j
public class ThirdPartyValidate {
    /**
     * 验证创建任务的参数
     *
     * @param requestParam
     * @param thirdPartyResult
     * @return
     */
    public static boolean createTaskValidate(ThirdRequestParam requestParam, ThirdPartyResult thirdPartyResult) {
        if (requestParam.getHead() == null || requestParam.getBody() == null) {
            thirdPartyResult.setErrorMessage("TOKEN_VALIDATE_ERROR");
            return true;
        }
        if (!StringUtils.hasText(requestParam.getHead().getAppId())) {
            thirdPartyResult.setErrorMessage("TOKEN_VALIDATE_ERROR");
            return true;
        }
        ThirdCreateTaskParam taskParam = JSON.parseObject(requestParam.getBody(), ThirdCreateTaskParam.class);
        if (!StringUtils.hasText(taskParam.getTaskName())) {
            thirdPartyResult.setErrorMessage("TASK_NAME_NOT_NULL");
            return true;
        }
        if (taskParam.getScenesId() == null) {
            thirdPartyResult.setErrorMessage("PARAM_SCENE_ID_IS_NULL");
            return true;
        }
        if (taskParam.getCallingNumbers() == null || ArrayUtils.isEmpty(taskParam.getCallingNumbers())) {
            thirdPartyResult.setErrorMessage("TASK_CALL_NUM_NOT_NULL");
            return true;
        }
        if (!StringUtils.hasText(taskParam.getCalleeData())) {
            log.info("param:{}", JSON.toJSONString(requestParam));
            thirdPartyResult.setErrorMessage("TOKEN_CALLEE_VALIDATE_ERROR");
            return true;
        }
        return false;
    }
    /**
     * token验证
     *
     * @param appSecret
     * @param thirdBaseParam
     * @param appSecret
     * @return boolean
     * @date 2019/12/5
     **/
    public static boolean validateToken(ThirdBaseParam thirdBaseParam, String appSecret, ThirdPartyResult thirdPartyResult) {
        if (!StringUtils.hasText(appSecret)) {
            log.info("param:{}", JSON.toJSONString(thirdBaseParam));
            thirdPartyResult.setErrorMessage("TOKEN_VALIDATE_ERROR");
            return true;
        }
        String signString = getThirdSignString(thirdBaseParam, appSecret);
        String sign = DigestUtils.md5DigestAsHex(signString.getBytes());
        if (!sign.equals(thirdBaseParam.getHead().getToken())) {
            log.info("appId:{},token:{},sign:{},param:{}", thirdBaseParam.getHead().getAppId(), thirdBaseParam.getHead().getToken(), sign, thirdBaseParam.getSecretString());
            thirdPartyResult.setErrorMessage("TOKEN_VALIDATE_ERROR");
            return true;
        }
        return false;
    }
    /**
     * 任务查询参数验证
     *
     * @param thirdDetailParam
     * @param thirdPlainResult
     * @return
     */
    public static boolean callDetail(ThirdDetailParam thirdDetailParam, ThirdPlainResult thirdPlainResult) {
        ThirdCallDetailParam callDetailParam = JSON.parseObject(thirdDetailParam.getBody(), ThirdCallDetailParam.class);
        if (callDetailParam == null) {
            thirdPlainResult.setErrorMessage("TOKEN_CALLEE_VALIDATE_ERROR");
            return true;
        }
        if (!StringUtils.hasText(callDetailParam.getCalleeNumber())) {
            thirdPlainResult.setErrorMessage("TOKEN_CALLEE_VALIDATE_ERROR");
            return true;
        }
        if (callDetailParam.getTaskId() == null || callDetailParam.getTaskId() == 0) {
            thirdPlainResult.setErrorMessage("TASK_ID_NOT_VALID");
            return true;
        }
        return false;
    }
    /**
     * 获取加密字符串
     *
     * @param thirdBaseParam
     * @param appSecret
     * @return java.lang.String
     * @date 2019/12/20
     **/
    private static String getThirdSignString(ThirdBaseParam thirdBaseParam, String appSecret) {
        ThirdRequestHead headParam = thirdBaseParam.getHead();
        StringBuilder sb = new StringBuilder("appId");
        sb.append(headParam.getAppId())
                .append("timestamp").append(headParam.getTimestamp())
                .append("transId").append(headParam.getTransId())
                .append(thirdBaseParam.getSecretString()!=null?thirdBaseParam.getSecretString():"").append(appSecret);
        return sb.toString();
    }
//    public static void main(String[] args) {
//        String body = "{\"callingNumbers\":[\"01086394068\"],\"calleeData\":[{\"被叫号码\":\"13387565100\",\"bizId\":\"1\"}]"+
//    ",\"scenesId\":2268,\"taskScheduleTime\":\"2020-07-22 00:00:00\",\"taskName\":\"thirdCreateTask7\"}";
//
//        StringBuilder sb = new StringBuilder("appId");
//        sb.append("zhonganinsurance")
//                .append("timestamp").append("1595314778")
//                .append("transId").append("22")
//                .append(body).append("ea3b23ecdb2247e9bcbccbdee7d5dbf4");
//        System.out.println(sb.toString());
//        String sign = DigestUtils.md5DigestAsHex(sb.toString().getBytes());
//        System.out.println(sign);
//
//        ThirdBaseParam thirdBaseParam = new ThirdBaseParam();
//        ThirdRequestHead thirdRequestHead = new ThirdRequestHead();
//        thirdRequestHead.setAppId("zhonganinsurance");
//        thirdRequestHead.setTimestamp("1595314778");
//        thirdRequestHead.setToken(sign);
//        thirdRequestHead.setTransId("22");
//        thirdBaseParam.setHead(thirdRequestHead);
//        thirdBaseParam.setSecretString(body);
//
//        // 验证token
//        boolean b = validateToken(thirdBaseParam, "ea3b23ecdb2247e9bcbccbdee7d5dbf4", new ThirdPartyResult());
//        System.out.println("b = " + b);
//
//        // 任务查询参数验证
//        ThirdRequestParam thirdRequestParam = new ThirdRequestParam();
//        Head head = new Head();
//        head.setAppId("zhonganinsurance");
//        thirdRequestParam.setHead(head);
//        thirdRequestParam.setBody(body);
//        boolean b1 = createTaskValidate(thirdRequestParam, new ThirdPartyResult());
//        System.out.println("b1 = " + b1);
//    }
}