| | |
| | | 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.*; |
| | | |
| | | /** |
| | | * 智能呼叫控制层 |
| | |
| | | @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); |
| | | } |
| | | } |