xieb
2023-10-19 1dd5d8f8a616f5cf3caa7828d46989c7d3dcafc4
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/controller/CallController.java
@@ -1,23 +1,28 @@
package cn.gistack.sm.intelligentCall.controller;
import cn.gistack.sm.intelligentCall.constant.CallConstant;
import cn.gistack.sm.intelligentCall.entity.User;
import cn.gistack.sm.intelligentCall.util.HttpClientUtils;
import com.alibaba.fastjson.JSON;
import cn.gistack.sm.intelligentCall.entity.CallTaskResult;
import cn.gistack.sm.intelligentCall.entity.Scene;
import cn.gistack.sm.intelligentCall.excel.CallExcel;
import cn.gistack.sm.intelligentCall.listener.ExcelListener;
import cn.gistack.sm.intelligentCall.service.CallService;
import cn.gistack.sm.intelligentCall.service.ICallSmsNoticeTaskService;
import cn.gistack.sm.intelligentCall.vo.CallTaskResultVO;
import cn.gistack.sm.intelligentCall.vo.CallTaskStatistic;
import com.alibaba.excel.EasyExcel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
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 org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import static cn.gistack.sm.intelligentCall.util.CallUtil.getRandom;
import static cn.gistack.sm.intelligentCall.util.CallUtil.getToken;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
/**
 * 智能呼叫控制层
@@ -31,84 +36,184 @@
@AllArgsConstructor
public class CallController {
   /**
    * 创建任务
    * @return
    */
   @GetMapping("/createCall")
   public R createCall(){
      // 请求
      Map<String, Object> map = new HashMap<>();
      map.put("p1",createCallUtil());
      // 返回
      return R.data(map);
   }
   private final CallService callService;
   private final ICallSmsNoticeTaskService callSmsNoticeTaskService;
   /**
    * 创建任务
    * @return
    */
   public 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);
      String token = getToken(timestamp, transId, map);
      String url = CallConstant.HOST + CallConstant.createTaskUrl1;
      String httpPost = HttpClientUtils.httpPost(url, CallConstant.AppKey, timestamp, transId, token, map);
   @PostMapping("/createCall")
   public R createCall(@RequestBody Map<String,Object> map){
      List<String> task = callService.createTask(map);
      // 创建外呼短信发送任务记录
      createCallSmsNoticeTask(task);
      // 返回
      return httpPost;
      return R.data(task);
   }
   /**
    * 创建外呼短信发送任务记录
    * @param result
    */
   private Boolean createCallSmsNoticeTask(List<String> result) {
      Boolean flag = false;
      if (null != result && result.size() > 0) {
         if (result.get(2).equals("true")) {
            // 获取任务id
            String taskId = result.get(1);
            flag = callSmsNoticeTaskService.createCallSmsNoticeTask(taskId);
         }
      }
      return flag;
   }
   /**
    * 获取通话详情
    * @return
    */
   @GetMapping("/getCallDetail")
   public R getCallDetail(String taskId,String calleeNumber){
      // 返回
      return R.data(callService.getCallDetail(taskId,calleeNumber));
   }
   /**
    * 查询呼叫列表信息
    * @param callTask
    * @param query
    * @return
    */
   @GetMapping("/getCallListPage")
   public R getCallListPage(CallTaskStatistic callTask, Query query){
      // 返回
      return R.data(callService.getCallListPage(Condition.getPage(query),callTask));
   }
//   /**
//    * 测试
//    * @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);
//
//      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);
//   }
   /**
    * 查询呼叫详情列表信息
    * @param callTaskResult
    * @param query
    * @return
    */
   @GetMapping("/getCallTaskResultListPage")
   public R getCallTaskResultListPage(CallTaskResultVO callTaskResult, Query query){
      // 返回
      return R.data(callService.getCallTaskResultListPage(Condition.getPage(query),callTaskResult));
   }
   /**
    * 导出呼叫详情列表信息
    * @param callTaskResult
    * @return
    */
   @GetMapping("/getCallTaskResultList")
   public R getCallTaskResultList(CallTaskResultVO callTaskResult){
      // 返回
      return R.data(callService.getCallTaskResultList(callTaskResult));
   }
   /**
    * 查询智能外呼统计数据-按日期-行政区统计
    * @param callTaskStatistic
    * @param query
    * @return
    */
   @GetMapping("/getOutgoingStatisticList")
   public R getOutgoingStatisticList(CallTaskStatistic callTaskStatistic, Query query){
      // 返回
      return R.data(callService.getOutgoingStatisticList(Condition.getPage(query),callTaskStatistic));
   }
   /**
    * 查询智能外呼统计数据-行政区统计
    * @param callTaskStatistic
    * @return
    */
   @GetMapping("/getOutgoingStatisticByArea")
   public R getOutgoingStatisticByArea(CallTaskStatistic callTaskStatistic){
      // 返回
      return R.data(callService.getOutgoingStatisticByArea(callTaskStatistic));
   }
   /**
    * 根据条件自动创建外呼任务
    * @param params
    * @return
    */
   @PostMapping("/createCallTaskByParams")
   public R createCallTaskByParam(@RequestBody Map<String, Object> params){
      // 返回
      return R.data(callService.createCallTaskByParam(params));
   }
   /**
    * 查询未接通,拒接的呼叫结果详情列表信息
    * @param callTaskStatistic
    * @param query
    * @return
    */
   @GetMapping("/getCallNotConnectResultList")
   public R getCallNotConnectResultList(CallTaskStatistic callTaskStatistic, Query query){
      // 返回
      return R.data(callService.getCallNotConnectResultList(Condition.getPage(query),callTaskStatistic));
   }
   /**
    * 按日期行政区呼叫结果详情列表信息
    * @param callTaskStatistic
    * @param query
    * @return
    */
   @GetMapping("/getCallResultList")
   public R getCallResultList(CallTaskStatistic callTaskStatistic, Query query){
      // 返回
      return R.data(callService.getCallResultList(Condition.getPage(query),callTaskStatistic));
   }
   /**
    * 详情导出临时接口
    * @param callTaskResult
    * @param query
    * @return
    */
   @GetMapping("/getCallResultListTemp")
   public R getCallResultListTemp(CallTaskResultVO callTaskResult, Query query){
      // 返回
      return R.data(callService.getCallResultListTemp(Condition.getPage(query),callTaskResult));
   }
   /**
    * 导入表格发送智能外呼
    * @param file excel文件
    * @param time 呼叫时间(空的话默认选择当前时间)
    * @return
    */
   @PostMapping("/import-call")
   public R importCall(MultipartFile file,String time){
      ExcelListener<CallExcel> listener = new ExcelListener<>();
      //headRowNumber(1)从第2行开始读取,使用getDatas()方法取出数据
      try {
         EasyExcel.read(file.getInputStream(), CallExcel.class, listener).headRowNumber(1).sheet(0).doRead();
      } catch (IOException e) {
         e.printStackTrace();
      }
      List<CallExcel> list = listener.getDatas();
      // 导入并返回
      return R.data(callService.importCall(list,time));
   }
   /**
    * 导出模板
    */
   @GetMapping("/export-template")
   @ApiOperation(value = "导出模板")
   public void exportTemplate(HttpServletResponse response) {
      List<CallExcel> list = new ArrayList<>();
      ExcelUtil.export(response, "智能外呼数据模板", "智能外呼数据表", list, CallExcel.class);
   }
}