CcCallTaskController.java 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523
  1. package com.ruoyi.aicall.controller;
  2. import java.io.InputStream;
  3. import java.math.BigDecimal;
  4. import java.text.DecimalFormat;
  5. import java.util.*;
  6. import com.alibaba.fastjson.JSONObject;
  7. import com.ruoyi.aicall.domain.CcCallPhone;
  8. import com.ruoyi.aicall.domain.CcLlmAgentProvider;
  9. import com.ruoyi.aicall.domain.CcTtsAliyun;
  10. import com.ruoyi.aicall.model.CallTaskStatModel;
  11. import com.ruoyi.aicall.service.ICcCallPhoneService;
  12. import com.ruoyi.aicall.service.ICcTtsAliyunService;
  13. import com.ruoyi.cc.service.ICcParamsService;
  14. import com.ruoyi.common.utils.DateUtils;
  15. import com.ruoyi.common.utils.ExceptionUtil;
  16. import com.ruoyi.common.utils.StringUtils;
  17. import com.ruoyi.common.utils.uuid.UuidGenerator;
  18. import com.ruoyi.framework.web.domain.server.Sys;
  19. import lombok.extern.slf4j.Slf4j;
  20. import org.apache.poi.ss.usermodel.Cell;
  21. import org.apache.poi.ss.usermodel.Row;
  22. import org.apache.poi.ss.usermodel.Sheet;
  23. import org.apache.poi.ss.usermodel.Workbook;
  24. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  25. import org.apache.shiro.authz.annotation.RequiresPermissions;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import org.springframework.core.io.ClassPathResource;
  28. import org.springframework.stereotype.Controller;
  29. import org.springframework.transaction.annotation.Transactional;
  30. import org.springframework.ui.ModelMap;
  31. import org.springframework.web.bind.annotation.*;
  32. import com.ruoyi.common.annotation.Log;
  33. import com.ruoyi.common.enums.BusinessType;
  34. import com.ruoyi.aicall.domain.CcCallTask;
  35. import com.ruoyi.aicall.service.ICcCallTaskService;
  36. import com.ruoyi.common.core.controller.BaseController;
  37. import com.ruoyi.common.core.domain.AjaxResult;
  38. import com.ruoyi.common.utils.poi.ExcelUtil;
  39. import com.ruoyi.common.core.page.TableDataInfo;
  40. import org.springframework.web.multipart.MultipartFile;
  41. import org.springframework.core.io.FileSystemResource;
  42. import org.springframework.core.io.Resource;
  43. import org.springframework.http.HttpHeaders;
  44. import org.springframework.http.MediaType;
  45. import org.springframework.http.ResponseEntity;
  46. import org.springframework.web.bind.annotation.GetMapping;
  47. import org.springframework.web.bind.annotation.RequestMapping;
  48. import org.springframework.web.bind.annotation.RestController;
  49. import java.io.File;
  50. /**
  51. * 外呼任务Controller
  52. *
  53. * @author ruoyi
  54. * @date 2025-05-29
  55. */
  56. @Controller
  57. @RequestMapping("/aicall/callTask")
  58. @Slf4j
  59. public class CcCallTaskController extends BaseController
  60. {
  61. private String prefix = "aicall/callTask";
  62. @Autowired
  63. private ICcCallTaskService ccCallTaskService;
  64. @Autowired
  65. private ICcCallPhoneService ccCallPhoneService;
  66. @Autowired
  67. private ICcTtsAliyunService ttsAliyunService;
  68. @Autowired
  69. private ICcParamsService paramsService;
  70. @RequiresPermissions("aicall:callTask:view")
  71. @GetMapping()
  72. public String callTask()
  73. {
  74. return prefix + "/callTask";
  75. }
  76. /**
  77. * 查询外呼任务列表
  78. */
  79. @RequiresPermissions("aicall:callTask:list")
  80. @PostMapping("/list")
  81. @ResponseBody
  82. public TableDataInfo list(CcCallTask ccCallTask)
  83. {
  84. startPage();
  85. List<CcCallTask> list = ccCallTaskService.selectCcCallTaskList(ccCallTask);
  86. TableDataInfo tableDataInfo = getDataTable(list);
  87. List<CcCallTask> records = (List<CcCallTask>) tableDataInfo.getRows();
  88. Integer allDelDays = Integer.valueOf(paramsService.getParamValueByCode("callTask_allowDel_days", "30"));
  89. for (CcCallTask data: records){
  90. CallTaskStatModel statModel = ccCallPhoneService.statByBatchId(data.getBatchId());
  91. data.setPhoneCount(statModel.getPhoneCount());
  92. data.setCallCount(statModel.getCallCount());
  93. data.setNoCallCount(statModel.getPhoneCount() - statModel.getCallCount());
  94. data.setConnectCount(statModel.getConnectCount());
  95. data.setNoConnectCount(statModel.getCallCount() - statModel.getConnectCount());
  96. if (data.getCallCount() > 0) {
  97. data.setRealConnectRate(data.getConnectCount()*1.0/data.getCallCount());
  98. } else {
  99. data.setRealConnectRate(0.0);
  100. }
  101. // if (StringUtils.isNotEmpty(data.getVoiceCode())) {
  102. // CcTtsAliyun ccTtsAliyun = ttsAliyunService.selectCcTtsAliyunByVoiceCode(data.getVoiceCode());
  103. // if (null != ccTtsAliyun) {
  104. // data.setVoiceSource(ccTtsAliyun.getVoiceSource());
  105. // data.setProvider(ccTtsAliyun.getProvider());
  106. // }
  107. // }
  108. data.setAllowDel(0);
  109. if (data.getIfcall() == 0
  110. && data.getStopTime() > 0
  111. && (System.currentTimeMillis() - allDelDays * 24*3600*1000L) > data.getStopTime()) {
  112. data.setAllowDel(1);
  113. }
  114. }
  115. tableDataInfo.setRows(records);
  116. return tableDataInfo;
  117. }
  118. /**
  119. * 导出外呼任务列表
  120. */
  121. @RequiresPermissions("aicall:callTask:export")
  122. @Log(title = "外呼任务", businessType = BusinessType.EXPORT)
  123. @PostMapping("/export")
  124. @ResponseBody
  125. public AjaxResult export(CcCallTask ccCallTask)
  126. {
  127. List<CcCallTask> list = ccCallTaskService.selectCcCallTaskList(ccCallTask);
  128. ExcelUtil<CcCallTask> util = new ExcelUtil<CcCallTask>(CcCallTask.class);
  129. return util.exportExcel(list, "外呼任务数据");
  130. }
  131. /**
  132. * 新增外呼任务
  133. */
  134. @GetMapping("/add")
  135. public String add(ModelMap mmap)
  136. {
  137. mmap.put("ccCallTask", new CcCallTask());
  138. return prefix + "/add";
  139. }
  140. /**
  141. * 新增保存外呼任务
  142. */
  143. @RequiresPermissions("aicall:callTask:add")
  144. @Log(title = "外呼任务", businessType = BusinessType.INSERT)
  145. @PostMapping("/add")
  146. @ResponseBody
  147. public AjaxResult addSave(CcCallTask ccCallTask)
  148. {
  149. // 外呼速率=1/接通率
  150. if (null != ccCallTask.getConntectRate() && ccCallTask.getConntectRate() > 0) {
  151. ccCallTask.setRate(ccCallTask.getConntectRate()/100.0);
  152. }
  153. ccCallTask.setCreatetime(System.currentTimeMillis());
  154. if ("acd".equals(ccCallTask.getAiTransferType())) {
  155. ccCallTask.setAiTransferData(ccCallTask.getAiTransferGroupId());
  156. } else if ("extension".equals(ccCallTask.getAiTransferType())) {
  157. ccCallTask.setAiTransferData(ccCallTask.getAiTransferExtNumber());
  158. } else if ("gateway".equals(ccCallTask.getAiTransferType())) {
  159. JSONObject aiTransferData = new JSONObject();
  160. aiTransferData.put("gatewayId", ccCallTask.getAiTransferGatewayId());
  161. aiTransferData.put("destNumber", ccCallTask.getAiTransferGatewayDestNumber());
  162. ccCallTask.setAiTransferData(JSONObject.toJSONString(aiTransferData));
  163. }
  164. return toAjax(ccCallTaskService.insertCcCallTask(ccCallTask));
  165. }
  166. /**
  167. * 修改外呼任务
  168. */
  169. @RequiresPermissions("aicall:callTask:edit")
  170. @GetMapping("/edit/{batchId}")
  171. public String edit(@PathVariable("batchId") Long batchId, ModelMap mmap)
  172. {
  173. CcCallTask ccCallTask = ccCallTaskService.selectCcCallTaskByBatchId(batchId);
  174. if (null != ccCallTask.getRate() && ccCallTask.getRate() > 0) {
  175. ccCallTask.setConntectRate((Double.valueOf(ccCallTask.getRate()*100.0).intValue()));
  176. }
  177. // if (StringUtils.isNotEmpty(ccCallTask.getVoiceCode())) {
  178. // CcTtsAliyun ccTtsAliyun = ttsAliyunService.selectCcTtsAliyunByVoiceCode(ccCallTask.getVoiceCode());
  179. // if (null != ccTtsAliyun) {
  180. // ccCallTask.setVoiceSource(ccTtsAliyun.getVoiceSource());
  181. // ccCallTask.setProvider(ccTtsAliyun.getProvider());
  182. // }
  183. // }
  184. if ("acd".equals(ccCallTask.getAiTransferType())) {
  185. ccCallTask.setAiTransferGroupId(ccCallTask.getAiTransferData());
  186. } else if ("extension".equals(ccCallTask.getAiTransferType())) {
  187. ccCallTask.setAiTransferExtNumber(ccCallTask.getAiTransferData());
  188. } else if ("gateway".equals(ccCallTask.getAiTransferType())) {
  189. if (StringUtils.isNotEmpty(ccCallTask.getAiTransferData())) {
  190. JSONObject aiTransferData = JSONObject.parseObject(ccCallTask.getAiTransferData());
  191. ccCallTask.setAiTransferGatewayId(aiTransferData.getString("gatewayId"));
  192. ccCallTask.setAiTransferGatewayDestNumber(aiTransferData.getString("destNumber"));
  193. }
  194. }
  195. mmap.put("ccCallTask", ccCallTask);
  196. return prefix + "/edit";
  197. }
  198. /**
  199. * 修改保存外呼任务
  200. */
  201. @RequiresPermissions("aicall:callTask:edit")
  202. @Log(title = "外呼任务", businessType = BusinessType.UPDATE)
  203. @PostMapping("/edit")
  204. @ResponseBody
  205. public AjaxResult editSave(CcCallTask ccCallTask)
  206. {
  207. if ("acd".equals(ccCallTask.getAiTransferType())) {
  208. ccCallTask.setAiTransferData(ccCallTask.getAiTransferGroupId());
  209. } else if ("extension".equals(ccCallTask.getAiTransferType())) {
  210. ccCallTask.setAiTransferData(ccCallTask.getAiTransferExtNumber());
  211. } else if ("gateway".equals(ccCallTask.getAiTransferType())) {
  212. JSONObject aiTransferData = new JSONObject();
  213. aiTransferData.put("gatewayId", ccCallTask.getAiTransferGatewayId());
  214. aiTransferData.put("destNumber", ccCallTask.getAiTransferGatewayDestNumber());
  215. ccCallTask.setAiTransferData(JSONObject.toJSONString(aiTransferData));
  216. }
  217. return toAjax(ccCallTaskService.updateCcCallTask(ccCallTask));
  218. }
  219. /**
  220. * 删除外呼任务
  221. */
  222. @RequiresPermissions("aicall:callTask:remove")
  223. @Log(title = "外呼任务", businessType = BusinessType.DELETE)
  224. @PostMapping( "/remove")
  225. @ResponseBody
  226. @Transactional
  227. public AjaxResult remove(String ids)
  228. {
  229. Long batchId = Long.valueOf(ids);
  230. // 备份拨打记录数据
  231. ccCallPhoneService.bakCallPhoneByBatchId(batchId);
  232. // 删除拨打记录数据
  233. ccCallPhoneService.delCallPhoneByBatchId(batchId);
  234. // 备份任务数据
  235. ccCallTaskService.bakCallTaskByBatchId(batchId);
  236. // 删除任务数据
  237. return toAjax(ccCallTaskService.deleteCcCallTaskByBatchId(batchId));
  238. }
  239. /**
  240. * 启动外呼任务
  241. */
  242. @RequiresPermissions("aicall:callTask:start")
  243. @Log(title = "启动任务", businessType = BusinessType.UPDATE)
  244. @PostMapping( "/start/{batchId}")
  245. @ResponseBody
  246. public AjaxResult start(@PathVariable("batchId") Long batchId)
  247. {
  248. CcCallTask ccCallTask = ccCallTaskService.selectCcCallTaskByBatchId(batchId);
  249. // 如果小于5分钟,则判断是否有未挂机通话
  250. if ((System.currentTimeMillis() - ccCallTask.getStopTime()) <= 5*60*1000L) {
  251. // 如果有未挂机通话,则不允许启动
  252. List<CcCallPhone> noHangupCalls = ccCallPhoneService.selectNoHangupCalls(batchId);
  253. if (noHangupCalls.size() > 0) {
  254. log.info("还有没挂机的通话,资源还未释放,无法启动");
  255. return AjaxResult.error("当前任务资源还未释放完成,无法启动,请2分钟后重试!");
  256. }
  257. // 有挂机不超过30秒的通话,则不允许启动
  258. Map<String, Object> params = new HashMap<>();
  259. params.put("callEndTimeStart", DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", new Date(System.currentTimeMillis() - 30*1000L)));
  260. List<CcCallPhone> ccCallPhoneList = ccCallPhoneService.selectCcCallPhoneList(new CcCallPhone().setBatchId(batchId).setParams(params));
  261. if (ccCallPhoneList.size() > 0) {
  262. log.info("最后一通电话挂机不超过30秒,资源还未释放,无法启动");
  263. return AjaxResult.error("当前任务资源还未释放完成,无法启动,请2分钟后重试!");
  264. }
  265. }
  266. ccCallTask.setIfcall(1);
  267. ccCallTask.setExecuting(0L);
  268. ccCallTask.setStopTime(0L);
  269. ccCallTaskService.updateCcCallTask(ccCallTask);
  270. return toAjax(1);
  271. }
  272. /**
  273. * 暂停外呼任务
  274. */
  275. @RequiresPermissions("aicall:callTask:pause")
  276. @Log(title = "暂停任务", businessType = BusinessType.UPDATE)
  277. @PostMapping( "/pause/{batchId}")
  278. @ResponseBody
  279. public AjaxResult pause(@PathVariable("batchId") Long batchId)
  280. {
  281. CcCallTask ccCallTask = ccCallTaskService.selectCcCallTaskByBatchId(batchId);
  282. ccCallTask.setIfcall(0);
  283. ccCallTask.setExecuting(0L);
  284. ccCallTask.setStopTime(System.currentTimeMillis());
  285. ccCallTaskService.updateCcCallTask(ccCallTask);
  286. return toAjax(1);
  287. }
  288. // 提供模板文件下载接口
  289. @GetMapping("/downloadTemplate")
  290. public ResponseEntity<Resource> downloadTemplate(@RequestParam (value = "taskType") Integer taskType) {
  291. String templateName = "AICallList.xlsx";
  292. if (null == taskType) {
  293. taskType = 1;
  294. } else if (taskType == 0) {
  295. templateName = "PredictiveCallList.xlsx";
  296. } else if (taskType == 2) {
  297. templateName = "ReminderCallList.xlsx";
  298. }
  299. // 模板文件路径
  300. String filePath = "static/templates/" + templateName; // 静态资源路径
  301. ClassPathResource resource = new ClassPathResource(filePath);
  302. // 检查文件是否存在
  303. if (!resource.exists()) {
  304. throw new RuntimeException("模板文件不存在!");
  305. }
  306. // 设置响应头
  307. HttpHeaders headers = new HttpHeaders();
  308. headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + templateName);
  309. // 返回文件
  310. return ResponseEntity.ok()
  311. .headers(headers)
  312. .contentType(MediaType.APPLICATION_OCTET_STREAM)
  313. .body(resource);
  314. }
  315. /**
  316. * 导入外呼任务数据
  317. */
  318. @RequiresPermissions("aicall:callTask:import")
  319. @Log(title = "外呼任务", businessType = BusinessType.IMPORT)
  320. @PostMapping("/importFile")
  321. @ResponseBody
  322. public AjaxResult importFile(@RequestParam("file") MultipartFile file, @RequestParam("batchId") Long batchId) throws Exception {
  323. if (file == null || file.isEmpty()) {
  324. return AjaxResult.error("上传文件不能为空!");
  325. }
  326. Long t0 = System.currentTimeMillis();
  327. CcCallTask ccCallTask = ccCallTaskService.selectCcCallTaskByBatchId(batchId);
  328. JSONObject ttsContentVariables = JSONObject.parseObject(paramsService.getParamValueByCode("tts_content_variables", "{}"));
  329. try (InputStream inputStream = file.getInputStream()) {
  330. // 使用 Apache POI 解析 Excel 文件
  331. Workbook workbook = new XSSFWorkbook(inputStream);
  332. Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表
  333. Integer rowCount = sheet.getLastRowNum();
  334. log.info("累计数据行数:{}", rowCount);
  335. List<CcCallPhone> phoneList = new ArrayList<>();
  336. Map<String, Integer> phoneMap = new HashMap<>();
  337. // 首行
  338. Row row0 = sheet.getRow(0);
  339. Integer idxCustName = -1;
  340. Integer idxPhoneNum = -1;
  341. Integer idxTtsText = -1;
  342. Map<Integer, String> idxMap = new HashMap<>();
  343. for (int i = 0; i < row0.getPhysicalNumberOfCells(); i++) {
  344. Cell cell = row0.getCell(i);
  345. if (null != cell) {
  346. String value = getCellValue(cell);
  347. if (StringUtils.isNotEmpty(value)) {
  348. if ("客户姓名".equals(value)) {
  349. idxCustName = i;
  350. } else if ("手机号码".equals(value)) {
  351. idxPhoneNum = i;
  352. } else if ("通知内容".equals(value)) {
  353. idxTtsText = i;
  354. } else {
  355. for (String var: ttsContentVariables.keySet()) {
  356. if (ttsContentVariables.getString(var).equals(value)) {
  357. idxMap.put(i, var);
  358. }
  359. }
  360. }
  361. }
  362. }
  363. }
  364. // 遍历工作表中的每一行
  365. Integer rowNum = 0;
  366. for (int i = 1; i <= rowCount; i++) {
  367. Row row = sheet.getRow(i);
  368. rowNum ++;
  369. JSONObject bizJson = new JSONObject();
  370. // 解析扩展字段
  371. for (Integer idx: idxMap.keySet()) {
  372. bizJson.put(idxMap.getOrDefault(idx, ""), getCellValue(row.getCell(idx)));
  373. }
  374. String phoneNumber = getCellValue(row.getCell(idxPhoneNum)); // 手机号码列
  375. String custName = "";
  376. if (idxCustName >= 0) {
  377. custName = getCellValue(row.getCell(idxCustName)); // 客户姓名列
  378. }
  379. String ttsText = "";
  380. if (idxTtsText >= 0) {
  381. ttsText = getCellValue(row.getCell(idxTtsText)); // 通知内容列
  382. }
  383. log.info("解析第{}行获取到的数据为,phoneNumber:{}, custName:{}, bizJson:{}", rowNum, phoneNumber, custName, bizJson);
  384. if (StringUtils.isNotEmpty(phoneNumber)) {
  385. phoneNumber = phoneNumber.replace(".00", "").replace(".0", "").replace("-", "").replace(" ", "");
  386. if (phoneNumber.matches("\\d+")) {
  387. if (null == phoneMap.get(phoneNumber)) {
  388. CcCallPhone callPhone = buildPhone(ccCallTask);
  389. callPhone.setTelephone(phoneNumber);
  390. callPhone.setCustName(custName);
  391. callPhone.setTtsText(ttsText);
  392. bizJson.put("custName", custName);
  393. if (phoneNumber.length() > 4) {
  394. bizJson.put("tailNum", phoneNumber.substring(phoneNumber.length()-4));
  395. } else {
  396. bizJson.put("tailNum", phoneNumber);
  397. }
  398. callPhone.setBizJson(JSONObject.toJSONString(bizJson));
  399. phoneList.add(callPhone);
  400. phoneMap.put(phoneNumber, rowNum);
  401. // 每200条入一次库
  402. if (phoneList.size() >= 200) {
  403. ccCallPhoneService.batchInsertCcCallPhone(phoneList);
  404. phoneList = new ArrayList<>();
  405. }
  406. } else {
  407. log.info("第{}行数据“{}”与第{}行重复,排除", rowNum, phoneNumber, phoneMap.get(phoneNumber));
  408. }
  409. } else {
  410. log.info("第{}行数据“{}”不是手机号码,排除", rowNum, phoneNumber);
  411. }
  412. }
  413. }
  414. // 解析后的手机号码入库
  415. if (phoneList.size() > 0) {
  416. ccCallPhoneService.batchInsertCcCallPhone(phoneList);
  417. }
  418. return AjaxResult.success("导入成功!共解析 " + phoneMap.keySet().size() + " 个手机号码。累计耗时" + (System.currentTimeMillis() - t0)/1000 + "秒");
  419. } catch (Exception e) {
  420. e.printStackTrace();
  421. return AjaxResult.error("导入失败:" + e.getMessage());
  422. }
  423. }
  424. private String getCellValue(Cell cell) {
  425. String cellValue = "";
  426. if (cell != null) {
  427. // 根据单元格类型获取值
  428. try {
  429. switch (cell.getCellType()) {
  430. case STRING:
  431. cellValue = cell.getStringCellValue();
  432. break;
  433. case NUMERIC:
  434. // 使用 BigDecimal 避免科学计数法并去掉多余的 .00
  435. BigDecimal numericValue = new BigDecimal(cell.getNumericCellValue());
  436. cellValue = numericValue.stripTrailingZeros().toPlainString();
  437. break;
  438. default:
  439. cellValue = "";
  440. }
  441. } catch (Exception e) {
  442. log.error("解析数据异常{}", ExceptionUtil.getExceptionMessage(e));
  443. }
  444. }
  445. return cellValue;
  446. }
  447. private CcCallPhone buildPhone(CcCallTask ccCallTask) {
  448. CcCallPhone callPhone = new CcCallPhone();
  449. callPhone.setId(UuidGenerator.GetOneUuid());
  450. callPhone.setGroupId("1");
  451. callPhone.setBatchId(ccCallTask.getBatchId());
  452. callPhone.setCreatetime(new Date().getTime());
  453. callPhone.setCallstatus(0);
  454. callPhone.setCalloutTime(0L);
  455. callPhone.setCallcount(0);
  456. callPhone.setCallEndTime(0L);
  457. callPhone.setTimeLen(0L);
  458. callPhone.setValidTimeLen(0L);
  459. callPhone.setUuid("");
  460. callPhone.setConnectedTime(0L);
  461. callPhone.setHangupCause("");
  462. callPhone.setAnsweredTime(0L);
  463. callPhone.setDialogue("");
  464. callPhone.setWavfile("");
  465. callPhone.setRecordServerUrl("");
  466. // callPhone.setBizJson("");
  467. callPhone.setDialogueCount(0L);
  468. callPhone.setAcdOpnum("");
  469. callPhone.setAcdQueueTime(0L);
  470. callPhone.setAcdWaitTime(0);
  471. if (ccCallTask.getTaskType() == 1) {
  472. callPhone.setIntent("");
  473. } else {
  474. callPhone.setIntent("-");
  475. }
  476. return callPhone;
  477. }
  478. @GetMapping("/all")
  479. @ResponseBody
  480. public AjaxResult all()
  481. {
  482. List<CcCallTask> list = ccCallTaskService.selectCcCallTaskList(new CcCallTask());
  483. return AjaxResult.success(list);
  484. }
  485. }