TelephoneRobotServiceImpl.java 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. package com.ruixuan.salesLeads.service.impl;
  2. import com.alibaba.excel.EasyExcel;
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.JSONArray;
  5. import com.alibaba.fastjson.JSONObject;
  6. import com.github.pagehelper.PageInfo;
  7. import com.google.gson.JsonObject;
  8. import com.ruixuan.common.core.domain.ResultResponse;
  9. import com.ruixuan.common.core.page.TableDataInfo;
  10. import com.ruixuan.common.core.redis.RedisCache;
  11. import com.ruixuan.common.utils.DateUtils;
  12. import com.ruixuan.common.utils.PageUtils;
  13. import com.ruixuan.common.utils.StringUtils;
  14. import com.ruixuan.common.utils.file.FileTypeUtils;
  15. import com.ruixuan.common.utils.http.HttpUtil;
  16. import com.ruixuan.salesLeads.constant.RobotConstant;
  17. import com.ruixuan.salesLeads.listener.ImportExcelListener;
  18. import com.ruixuan.salesLeads.mapper.*;
  19. import com.ruixuan.salesLeads.pojo.*;
  20. import com.ruixuan.salesLeads.pojo.vo.SaleRecordVo;
  21. import com.ruixuan.salesLeads.pojo.vo.SaleTaskInfoVo;
  22. import com.ruixuan.salesLeads.service.ISaleClueInfoService;
  23. import com.ruixuan.salesLeads.service.ITelephoneRobotService;
  24. import com.ruixuan.salesLeads.utils.CsvImportUtil;
  25. import com.ruixuan.system.domain.SysAreaInfo;
  26. import com.ruixuan.system.domain.SysIndustryInfo;
  27. import com.ruixuan.system.mapper.SysAreaInfoMapper;
  28. import com.ruixuan.system.mapper.SysIndustryInfoMapper;
  29. import lombok.extern.slf4j.Slf4j;
  30. import org.apache.ibatis.annotations.Param;
  31. import org.springframework.beans.factory.annotation.Autowired;
  32. import org.springframework.beans.factory.annotation.Value;
  33. import org.springframework.stereotype.Service;
  34. import org.springframework.web.multipart.MultipartFile;
  35. import java.util.*;
  36. import java.util.concurrent.TimeUnit;
  37. /**
  38. * ***************************************************
  39. *
  40. * @Auther: zianY
  41. * @Descipion: 外呼机器人api
  42. * @CreateDate: 2022-07-01
  43. * ****************************************************
  44. */
  45. @Service
  46. @Slf4j
  47. public class TelephoneRobotServiceImpl implements ITelephoneRobotService {
  48. @Value("${telephoneRobot.appKey}")
  49. private String rebotAppkey;
  50. @Value("${telephoneRobot.secret}")
  51. private String rebotSecret;
  52. @Autowired
  53. private RedisCache redisCache;
  54. @Autowired
  55. private SaleClueInfoMapper saleClueInfoMapper;
  56. @Autowired
  57. private SaleClueCallRecordMapper saleClueCallRecordMapper;
  58. @Autowired
  59. private SaleClueCallResultMapper saleClueCallResultMapper;
  60. /**
  61. *
  62. * @description: 外呼机器人获取token
  63. *
  64. * @param
  65. * @return: com.ruixuan.common.core.domain.ResultResponse
  66. * @author: zianY
  67. */
  68. @Override
  69. public JSONObject getTelephoneRobotToken(){
  70. JSONObject tokenObj = redisCache.getCacheObject("salesLeads:robotToken:str");
  71. if (!StringUtils.isEmpty(tokenObj)){
  72. log.info("外呼机器人获取redis中的token信息----->>>{}",tokenObj);
  73. return tokenObj;
  74. }
  75. Map<String,Object> params = new HashMap<>();
  76. params.put("appKey",rebotAppkey);
  77. params.put("secret",rebotSecret);
  78. /*Map<String,String> headers = new HashMap<>();
  79. params.put("Auth-Token",);
  80. */
  81. String content = HttpUtil.httpPostRequest(RobotConstant.REFRESH_TOKEN,params,null);
  82. JSONObject jsonObject = JSONObject.parseObject(content);
  83. redisCache.setCacheObject("salesLeads:robotToken:str",jsonObject,2, TimeUnit.HOURS);
  84. log.info("外呼机器人获取token信息----->>>{}",jsonObject);
  85. return jsonObject;
  86. }
  87. /**
  88. *
  89. * @description: 外呼机器人-导入号码
  90. *
  91. * @param sellerIds
  92. * @param userId
  93. * @return: com.ruixuan.common.core.domain.ResultResponse
  94. * @author: zianY
  95. */
  96. @Override
  97. public ResultResponse importRobotTelephone(List<Long> sellerIds,String userId) throws Exception{
  98. Map<String,String> headers = new HashMap<>();
  99. Map<String,Object> result = new HashMap<>();
  100. //日期8位数 自增
  101. String flowCode = redisCache.getFlowCode();
  102. log.info("task------>>>>{}",flowCode);
  103. result.put("taskId",Integer.valueOf(flowCode));
  104. result.put("batchId",Integer.valueOf(flowCode));
  105. result.put("callBackUrl",RobotConstant.CALL_BACK_URL);
  106. result.put("canCover",true);
  107. List customerList = new ArrayList();
  108. for (Long sellerId : sellerIds) {
  109. //SaleRecordVo saleInfo = saleClueInfoMapper.selectSaleClueInfoBySellerId(sellerId);
  110. //销售线索id查询
  111. SaleRecordVo saleInfo = saleClueInfoMapper.selectSaleClueInfoById(sellerId.intValue());
  112. Map<String,Object> param = new HashMap<>();
  113. param.put("id",saleInfo.getId());
  114. param.put("name",saleInfo.getSellerId());
  115. param.put("companyName",saleInfo.getSellerName());
  116. param.put("phone","17778037644");
  117. param.put("website","");
  118. customerList.add(param);
  119. }
  120. result.put("customerList",customerList);
  121. //headers.put("Auth-Token","eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJndW95YW5saW5nIiwiZXhwIjoxNjU4MTMyMjEyfQ.OyhpastRRzBxAlSc8JOfdxO3rK3NG592U3Qlh752xDQ");
  122. JSONObject tokenObj = redisCache.getCacheObject("salesLeads:robotToken:str");
  123. if (!StringUtils.isEmpty(tokenObj)){
  124. log.info("导入时获取redis中的token信息----->>>{}",tokenObj);
  125. }else {
  126. tokenObj = getTelephoneRobotToken();
  127. log.info("导入时redis中的token信息已失效,重新获取token----->>>{}");
  128. }
  129. headers.put("Auth-Token",JSONObject.parseObject(tokenObj.getString("data")).getString("token"));
  130. String content = HttpUtil.httpPostRequest(RobotConstant.CUSTOMER_IMPORT,result,headers);
  131. log.info("调用第三方接口------入参---{}-----返回信息---》》》》{}",result,content);
  132. JSONObject jsonObject = JSONObject.parseObject(content);
  133. if (!"0".equals(jsonObject.getString("code"))){
  134. log.info("导入数据接口异常======>>>>>{}"+jsonObject);
  135. return ResultResponse.error("第三方接口异常,请稍候再试");
  136. }
  137. Thread.sleep(500);
  138. //更新最新的记录 用户信息
  139. //1分钟只能调取导入接口一次 所以可以保证最新的记录就是刚通过回调接口回来的数据信息
  140. saleClueCallRecordMapper.updateCallRecordUser(userId,flowCode);
  141. log.info("------更新操作用户-------");
  142. //查询 最新的记录
  143. SaleClueCallRecordPojo recordPojo = saleClueCallRecordMapper.selectCallRecordInfo();
  144. JSONObject jsonContent = JSONObject.parseObject(recordPojo.getContent());
  145. JSONArray success = jsonContent.getJSONArray("success");
  146. recordPojo.setSuccessList(success);
  147. JSONArray error = jsonContent.getJSONArray("error");
  148. recordPojo.setErrorList(error);
  149. return ResultResponse.successMsg("本次导入记录,成功"+ (StringUtils.isEmpty(success) ? 0 : success.size()) + "条;失败"+
  150. (StringUtils.isEmpty(error) ? 0 : error.size())+"条。",recordPojo);
  151. }
  152. /**
  153. *
  154. * @description: 外呼记录查询
  155. *
  156. * @param
  157. * @return: com.ruixuan.common.core.domain.ResultResponse
  158. * @author: zianY
  159. */
  160. @Override
  161. public ResultResponse getRobotTelephoneRecordList(){
  162. PageUtils.startPage();
  163. //查询导入记录
  164. List<SaleClueCallRecordPojo> callRecordList = saleClueCallRecordMapper.getSaleClueCallRecordInfo();
  165. for (SaleClueCallRecordPojo recordPojo : callRecordList) {
  166. String record = recordPojo.getContent();
  167. JSONObject recordJson = JSONObject.parseObject(record);
  168. recordPojo.setSuccessList(recordJson.getJSONArray("success"));
  169. recordPojo.setErrorList(recordJson.getJSONArray("error"));
  170. }
  171. return ResultResponse.successMsg("查询导入记录成功。",callRecordList);
  172. }
  173. /**
  174. *
  175. * @description: 通话记录
  176. *
  177. * @param createTime 创建时间
  178. * @param state 销售线索状态 1-未开始 2-进行中 3-已结束
  179. * @return: com.ruixuan.common.core.domain.ResultResponse
  180. * @author: zianY
  181. */
  182. @Override
  183. public ResultResponse getRobotTelephoneResultList(String createTime,Integer state){
  184. PageUtils.startPage();
  185. //查询导入记录
  186. List<SaleClueCallResultPojo> callResultList = saleClueCallResultMapper.getSaleClueCallResultList(createTime,state);
  187. return ResultResponse.successMsg("查询通话记录成功。",callResultList);
  188. }
  189. }