فهرست منبع

Merge remote-tracking branch 'origin/test' into test

zhaoxian 2 سال پیش
والد
کامیت
0b9ea038e5

+ 3 - 4
ruixuan-salesLeads/src/main/java/com.ruixuan.salesLeads/controller/SaleClueInfoController.java

@@ -251,10 +251,9 @@ public class SaleClueInfoController extends BaseController {
 
     @ApiOperation(value = "回调地址",notes = "回调地址")
     @PostMapping(value = "/robotCallbackUrl")
-    public JSONObject robotCallbackUrl(@RequestBody JSONObject json){
-        saleClueCallRecordService.SaleClueCallRecordMapper(json.toJSONString());
-        log.info("callBackUrl----->>>{}",json);
-        return json;
+    public ResultResponse robotCallbackUrl(@RequestBody JSONObject json){
+        log.info("=======推送数据信息开始========");
+        return saleClueCallRecordService.saveClueCallInfo(json);
     }
 
 

+ 22 - 0
ruixuan-salesLeads/src/main/java/com.ruixuan.salesLeads/mapper/SaleClueCallResultMapper.java

@@ -0,0 +1,22 @@
+package com.ruixuan.salesLeads.mapper;
+
+import com.ruixuan.salesLeads.pojo.SaleClueCallRecordPojo;
+import com.ruixuan.salesLeads.pojo.SaleClueCallResultPojo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * ***************************************************
+ *
+ * @Auther: zianY
+ * @Descipion: 通话记录
+ * @CreateDate: 2022-05-19
+ * ****************************************************
+ */
+public interface SaleClueCallResultMapper {
+
+
+    void addSaleCallResult(SaleClueCallResultPojo callResultPojo);
+
+}

+ 146 - 0
ruixuan-salesLeads/src/main/java/com.ruixuan.salesLeads/pojo/SaleClueCallResultPojo.java

@@ -0,0 +1,146 @@
+package com.ruixuan.salesLeads.pojo;
+
+
+import com.ruixuan.salesLeads.utils.CsvImportUtil;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.commons.codec.binary.Base64;
+
+import javax.crypto.Cipher;
+import java.security.Key;
+import java.security.KeyFactory;
+import java.security.KeyStore;
+import java.security.PrivateKey;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * ***************************************************
+ *
+ * @Auther: zianY
+ * @Descipion: 销售线索通话记录
+ * @CreateDate: 2022-05-19
+ * ****************************************************
+ */
+
+@Data
+@ApiModel(value = "saleClueCallResultPojo", description = "销售线索通话记录")
+public class SaleClueCallResultPojo {
+
+    private int id;
+
+    @ApiModelProperty("企业ID")
+    private Long organizationId;
+
+    @ApiModelProperty("企业名称")
+    private String organizationName;
+
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    @ApiModelProperty("用户姓名")
+    private String userName;
+
+   @ApiModelProperty("客户ID")
+    private Long customerId;
+
+    @ApiModelProperty("客户姓名")
+    private String customerName;
+
+    @ApiModelProperty("客户电话")
+    private String customerPhone;
+
+    @ApiModelProperty("客户公司名称")
+    private String customerCompanyName;
+
+    @ApiModelProperty("标签")
+    private String labelType;
+
+    @ApiModelProperty("开始拨打时间")
+    private String startedAt;
+
+    @ApiModelProperty("通话时长")
+    private Long duration;
+
+    @ApiModelProperty("录音地址")
+    private String recordUrl;
+
+    @ApiModelProperty("话术名称id")
+    private Long surveyId;
+
+    @ApiModelProperty("话术名称")
+    private String surveyName;
+
+    @ApiModelProperty("外呼计划id")
+    private Long groupId;
+
+    @ApiModelProperty("外呼计划名称")
+    private String groupName;
+
+    @ApiModelProperty("通话唯一标示")
+    private Long jobId;
+
+    @ApiModelProperty("客户关注点")
+    private String focus;
+
+    @ApiModelProperty("对话内容")
+    private String content;
+
+    @ApiModelProperty("创建时间")
+    private Date createTime;
+
+
+    //电话号码 解密
+    public static String decryptPhone(String phone){
+        //String phone = "c9Xk2jegP5sH54hMJRIumWIWTUnXKsiUHJuX3LZTuWhua7ZU+5Xse8KEPKWqjadHH73a/TT/hi0NmObyHTJjVvvx0VcSCDCnXSUZJxW4wK5kUrwo9btHU8gLf7OhOdfYG99OxNzwfogk/1PShmgVls6wZMybtu3PDTGvAwFeuWo=";
+        String privateKeyPerm =
+                "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAL6ZRBim0vwPsOCq\n" +
+                        "Z/3zV8a+f26j4w1P6vZyobNuR91k9NZYCDyLljZ9mIaT9GDqbwFZeZwcXOJ4QJRI\n" +
+                        "3wN04drsj1/3N8itchT5DkmG3RhWqMdLkBxW5YXSFe/NWtkp2zfTNRhSzsA7D8l6\n" +
+                        "nXrum96QZw2SlGhzROz2fvx7QJD1AgMBAAECgYBYl2jdhH1BCBIQ+2QG2BsOl/En\n" +
+                        "finFQEZYcwPSIQpqT8i18IkzizYw8cP5mb/XZGBgYjRyaYSLB5YM1qpCMwvfJqSt\n" +
+                        "yP9t7U0rxHOmTDYxEwduQnMXqJLH/eQsGiA1Vj7zO0cfXhAmPCQBN0wqFJv9FjMN\n" +
+                        "h3k9MFhOKGXVEHk/AQJBAOrz7mNBgvp8OVYerYuD8LnapSPfgpXiTc19Z/ox0QAd\n" +
+                        "isI3MgI2Qadg+xL13KQ+AW6sknuAJO1XRo+FaLPgRNUCQQDPrC4/oH6A3SQ3QM02\n" +
+                        "juDolmNJT5oK4RgcbY2SE+ix6l9YVonpiL41eRO56t8lOIT00Rbx1+a7C5jqnSfR\n" +
+                        "z6uhAkEA0GYBIsTu+mLJMJwRbthe41sOc11DJNMQE56SZZdePG33sADpOJELdv1M\n" +
+                        "dirhxETDXHlxjF3DY0mwaoj4r+PS6QJAPgDrYgXaH0FnYbPQUVzBW9Ai3q2MkXj5\n" +
+                        "SOuQnC+jhxMx2l8kF/zCxZZbxGOSsjs4vxt6XUSX1/qzckDvtZ3qYQJASJa1t4zg\n" +
+                        "PcEapVMbOoV1IFUgkL3GY6eqwS3MtZOwYeZ3pioisc738MYPor4WyS3orGOfhhTC\n" +
+                        "pi5AWGavBZaH7A==";
+        PrivateKey privateKey = str2PrivateKey(privateKeyPerm);
+        return decrypt(phone,privateKey);
+    }
+
+
+    public static PrivateKey str2PrivateKey(String privateKeyPerm) {
+        try {
+            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyPerm));
+            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
+            return keyFactory.generatePrivate(keySpec);
+        } catch (Exception var3) {
+            return null;
+        }
+    }
+    public static String decrypt(String enText, Key privateKey) {
+        try {
+
+            Cipher cipher = Cipher.getInstance("RSA");
+            cipher.init(Cipher.DECRYPT_MODE, privateKey);
+            byte[] data = cipher.doFinal(Base64.decodeBase64(enText));
+            return new String(data);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+
+
+    public static void main(String[] args) {
+
+
+    }
+
+}

+ 6 - 1
ruixuan-salesLeads/src/main/java/com.ruixuan.salesLeads/service/ISaleClueCallRecordService.java

@@ -1,5 +1,6 @@
 package com.ruixuan.salesLeads.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.ruixuan.common.core.domain.ResultResponse;
 
 /**
@@ -13,7 +14,11 @@ import com.ruixuan.common.core.domain.ResultResponse;
 public interface ISaleClueCallRecordService {
 
 
-    void SaleClueCallRecordMapper(String str);
+    ResultResponse saveClueCallInfo(JSONObject json);
+
+
+
+
 
 
 }

+ 36 - 2
ruixuan-salesLeads/src/main/java/com.ruixuan.salesLeads/service/impl/SaleClueCallRecordServiceImpl.java

@@ -1,12 +1,18 @@
 package com.ruixuan.salesLeads.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.ruixuan.common.core.domain.ResultResponse;
 import com.ruixuan.common.utils.PageUtils;
+import com.ruixuan.common.utils.StringUtils;
 import com.ruixuan.salesLeads.mapper.SaleClueCallRecordMapper;
+import com.ruixuan.salesLeads.mapper.SaleClueCallResultMapper;
 import com.ruixuan.salesLeads.mapper.TestMapper;
+import com.ruixuan.salesLeads.pojo.SaleClueCallResultPojo;
 import com.ruixuan.salesLeads.pojo.TestPojo;
 import com.ruixuan.salesLeads.service.ISaleClueCallRecordService;
 import com.ruixuan.salesLeads.service.ITestService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -21,15 +27,43 @@ import java.util.List;
  * ****************************************************
  */
 @Service
+@Slf4j
 public class SaleClueCallRecordServiceImpl implements ISaleClueCallRecordService {
 
 
     @Autowired
     private SaleClueCallRecordMapper saleClueCallRecordMapper;
 
+    @Autowired
+    private SaleClueCallResultMapper saleClueCallResultMapper;
+
 
+    /**
+     *
+     * @description: 推送结果记录信息
+     * 包括 导入号码记录 和 通话记录
+     * @param json
+     * @return: com.ruixuan.common.core.domain.ResultResponse
+     * @author: zianY
+     */
     @Override
-    public void SaleClueCallRecordMapper(String str) {
-        saleClueCallRecordMapper.addSaleCallRecord(str);
+    public ResultResponse saveClueCallInfo(JSONObject json) {
+        log.info("callBackUrl--------->>>{}",json);
+        if (StringUtils.isNull(json)){
+            return ResultResponse.error("callBackUrl--->>>没有接收到有效数据");
+        }
+        //返回参数包含 代表是 导入数据信息
+        if (json.containsKey("success") && json.containsKey("error")){
+            log.info("callBackUrl-----type----{}----->>>{}","importPhone",json);
+            //保存 导入号码的 回调信息
+            saleClueCallRecordMapper.addSaleCallRecord(json.toJSONString());
+            return ResultResponse.successMsg("callBackUrl--->>>导入号码回调信息成功",json);
+        }
+        log.info("callBackUrl-----type----{}----->>>{}","phoneResult",json);
+        //保存通话记录
+        SaleClueCallResultPojo callResultPojo = JSON.parseObject(json.toJSONString(), SaleClueCallResultPojo.class);
+        callResultPojo.setCustomerPhone(SaleClueCallResultPojo.decryptPhone(callResultPojo.getCustomerPhone()));
+        saleClueCallResultMapper.addSaleCallResult(callResultPojo);
+        return ResultResponse.successMsg("callBackUrl--->>>保存通话记录信息成功",json);
     }
 }

+ 83 - 0
ruixuan-salesLeads/src/main/resources/mapper/salesLeads/SaleClueCallResultMapper.xml

@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruixuan.salesLeads.mapper.SaleClueCallResultMapper">
+
+
+	<!-- 保存通话记录 -->
+	<insert id="addSaleCallResult">
+		replace into sale_clue_call_result(
+		`organization_id`,
+		`organization_name`,
+		`user_id`,
+		`user_name`,
+		`customer_id`,
+		`customer_name`,
+		`customer_phone`,
+		`customer_company_name`,
+		`label_type`,
+		`started_at`,
+		`duration`,
+		`recordUrl`,
+		`survey_id`,
+		`survey_name`,
+		`group_id`,
+		`group_name`,
+		`job_id`,
+		`focus`,
+		`content`,
+		`create_time`
+	)
+		values
+			(
+			#{organizationId},
+			#{organizationName},
+			#{userId},
+			#{userName},
+			#{customerId},
+			#{customerName},
+			#{customerPhone},
+			#{customerCompanyName},
+			#{labelType},
+			#{startedAt},
+			#{duration},
+			#{recordUrl},
+			#{surveyId},
+			#{surveyName},
+			#{groupId},
+			#{groupName},
+			#{jobId},
+			#{focus},
+			#{content},
+			NOW()
+			)
+
+
+	</insert>
+
+
+<!-- 查询 导入记录-->
+	<select id="getSaleClueCallRecordInfo" resultType="com.ruixuan.salesLeads.pojo.SaleClueCallRecordPojo">
+		SELECT
+		id,content,create_user_id,
+		(SELECT u.nick_name from sys_user u where u.user_id = create_user_id) createUserName
+		FROM
+		sale_clue_call_record
+		ORDER BY create_time DESC
+	</select>
+
+
+	<!-- 修改用户id -->
+	<update id="updateCallRecordUser">
+		UPDATE sale_clue_call_record
+		SET create_user_id = #{userId},
+		    task_id = #{taskId}
+			ORDER BY
+		create_time DESC
+		LIMIT 1
+	</update>
+
+
+
+</mapper>