From 61a5d43891796eefcebbe73925a2508eeaa4471d Mon Sep 17 00:00:00 2001 From: lyf66 Date: Sat, 9 Aug 2025 19:07:50 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AD=89=E5=BE=85=E8=81=94=E9=80=9A=E8=81=94?= =?UTF-8?q?=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../whdc/component/AutoCallTaskScheduled.java | 17 +- .../whdc/model/entity/WarningResponder.java | 18 +- .../autocall/AutoCallTaskService2.java | 380 ++++++++++++++---- src/main/java/com/whdc/utils/AICCHelper.java | 31 +- 4 files changed, 346 insertions(+), 100 deletions(-) diff --git a/src/main/java/com/whdc/component/AutoCallTaskScheduled.java b/src/main/java/com/whdc/component/AutoCallTaskScheduled.java index b1bc099..245a228 100644 --- a/src/main/java/com/whdc/component/AutoCallTaskScheduled.java +++ b/src/main/java/com/whdc/component/AutoCallTaskScheduled.java @@ -28,7 +28,7 @@ import java.util.concurrent.atomic.AtomicBoolean; */ @Component @Slf4j -@Profile({"dev"}) +@Profile({"default"}) public class AutoCallTaskScheduled { @Autowired @@ -46,6 +46,9 @@ public class AutoCallTaskScheduled { @EventListener(ApplicationReadyEvent.class) public void initialize() throws Exception { autoCallHelper.getToken(); + log.info("token1 {}", autoCallHelper.getToken()); + autoCallHelper.getToken(); + log.info("token2 {}", autoCallHelper.getToken()); initialized.set(true); log.info("AutoCallTaskScheduled初始化完成"); } @@ -131,6 +134,7 @@ public class AutoCallTaskScheduled { int pendingDuration = 60 * 1000 * 2; int loopGap = 1000; boolean resultFetched = false; + AutoCallPerson _person = null; while (pendingDuration > 0) { try { Thread.sleep(loopGap); @@ -140,12 +144,15 @@ public class AutoCallTaskScheduled { } pendingDuration -= loopGap; - resultFetched = autoCallTaskService.step4QueryAICCTaskResult(person); + //联通确保tag和remark同时返回 + _person = autoCallTaskService.step4QueryAICCTaskResult(person); + if (_person != null && _person.getDetailRemark() != null) { + resultFetched = true; + } if (resultFetched) break; } - AutoCallPerson _person = autoCallTaskService.getPersonMapper().selectById(person.getId()); - person = _person; + if (_person != null) person = _person; if (resultFetched) { //获取到任务详情且有话术标签为已知晓,中断循环 @@ -161,7 +168,7 @@ public class AutoCallTaskScheduled { //重呼等15秒 try { - Thread.sleep(15*1000); + Thread.sleep(15 * 1000); } catch (InterruptedException ignore) { Thread.currentThread().interrupt(); break; diff --git a/src/main/java/com/whdc/model/entity/WarningResponder.java b/src/main/java/com/whdc/model/entity/WarningResponder.java index 9122733..d77d86e 100644 --- a/src/main/java/com/whdc/model/entity/WarningResponder.java +++ b/src/main/java/com/whdc/model/entity/WarningResponder.java @@ -109,7 +109,23 @@ public class WarningResponder extends Model implements Seriali public static void main(String[] args) { WarningResponder a = new WarningResponder(); - a.setPhone("18872619396"); + //徐 18507181623 13545369643移动 + //文 18627085672 13707166566移动苹果 + //梁 18507191089 + //18507181673,陆 + //18607181767。孔 + //18507181586,韩 + //18507191372 王书坦 + //18671662204 杨胜利 + //舒康18607181321 + //18607181503 冯阳 + //18607181960 汪登 + //18607181633 张梁 + //18607181867 陶亚明 + //18607251280 熊胜 + //18507191276 李陶 + //18607251169 王锐 + a.setPhone("18607251169"); a.encryptPhone(); System.out.println(a.salt); System.out.println(a.phone); diff --git a/src/main/java/com/whdc/service/autocall/AutoCallTaskService2.java b/src/main/java/com/whdc/service/autocall/AutoCallTaskService2.java index fc8fde2..e977b84 100644 --- a/src/main/java/com/whdc/service/autocall/AutoCallTaskService2.java +++ b/src/main/java/com/whdc/service/autocall/AutoCallTaskService2.java @@ -5,12 +5,12 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.whdc.mapper.*; import com.whdc.model.autocall.AutoCallPerson; import com.whdc.model.autocall.AutoCallTask; -import com.whdc.model.entity.QXWarning; -import com.whdc.model.entity.WarningResponder; import com.whdc.model.autocall.aicc.AICCCallRespDetail; import com.whdc.model.autocall.aicc.AICCCallRespTask; import com.whdc.model.autocall.aicc.AICCCallRespWrapper; import com.whdc.model.autocall.aicc.AICCUploadTask; +import com.whdc.model.entity.QXWarning; +import com.whdc.model.entity.WarningResponder; import com.whdc.utils.AICCHelper; import com.whdc.utils.SmsHelper; import lombok.Getter; @@ -26,7 +26,6 @@ import java.io.UnsupportedEncodingException; import java.security.GeneralSecurityException; import java.text.SimpleDateFormat; import java.util.*; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; /** @@ -56,15 +55,217 @@ public class AutoCallTaskService2 { private SmsHelper smsHelper; public void generateFakeCall() { - QXWarning warn = qxWarningMapper.selectOne( + QXWarning warn; + List taskList; + AutoCallTask task; + + + + warn = qxWarningMapper.selectOne( + new QueryWrapper() + .orderByDesc("WARNID") + .last("limit 1") + ); + warn.setCtnm("荆州市"); + warn.setCnnm("钟祥 "); + taskList = newTask(warn); + task = taskList.get(0); + task.setStatus(0); + task.setCreateTm(new Date()); + task.setWarnCnnm("钟祥 "); + taskMapper.insert(task); + generatePerson(task); + + warn = qxWarningMapper.selectOne( + new QueryWrapper() + .orderByDesc("WARNID") + .last("limit 1") + ); + warn.setCtnm("荆州市"); + warn.setCnnm("张湾 "); + taskList = newTask(warn); + task = taskList.get(0); + task.setStatus(0); + task.setCreateTm(new Date()); + task.setWarnCnnm("张湾 "); + taskMapper.insert(task); + generatePerson(task); + + warn = qxWarningMapper.selectOne( + new QueryWrapper() + .orderByDesc("WARNID") + .last("limit 1") + ); + warn.setCtnm("荆州市"); + warn.setCnnm("枣阳 "); + taskList = newTask(warn); + task = taskList.get(0); + task.setStatus(0); + task.setCreateTm(new Date()); + task.setWarnCnnm("枣阳 "); + taskMapper.insert(task); + generatePerson(task); + + warn = qxWarningMapper.selectOne( + new QueryWrapper() + .orderByDesc("WARNID") + .last("limit 1") + ); + warn.setCtnm("荆州市"); + warn.setCnnm("郧西 "); + taskList = newTask(warn); + task = taskList.get(0); + task.setStatus(0); + task.setCreateTm(new Date()); + task.setWarnCnnm("郧西 "); + taskMapper.insert(task); + generatePerson(task); + + warn = qxWarningMapper.selectOne( + new QueryWrapper() + .orderByDesc("WARNID") + .last("limit 1") + ); + warn.setCtnm("荆州市"); + warn.setCnnm("英山 "); + taskList = newTask(warn); + task = taskList.get(0); + task.setStatus(0); + task.setCreateTm(new Date()); + task.setWarnCnnm("英山 "); + taskMapper.insert(task); + generatePerson(task); + + warn = qxWarningMapper.selectOne( + new QueryWrapper() + .orderByDesc("WARNID") + .last("limit 1") + ); + warn.setCtnm("荆州市"); + warn.setCnnm("应城 "); + taskList = newTask(warn); + task = taskList.get(0); + task.setStatus(0); + task.setCreateTm(new Date()); + task.setWarnCnnm("应城 "); + taskMapper.insert(task); + generatePerson(task); + + warn = qxWarningMapper.selectOne( + new QueryWrapper() + .orderByDesc("WARNID") + .last("limit 1") + ); + warn.setCtnm("荆州市"); + warn.setCnnm("阳新 "); + taskList = newTask(warn); + task = taskList.get(0); + task.setStatus(0); + task.setCreateTm(new Date()); + task.setWarnCnnm("阳新 "); + taskMapper.insert(task); + generatePerson(task); + + warn = qxWarningMapper.selectOne( + new QueryWrapper() + .orderByDesc("WARNID") + .last("limit 1") + ); + warn.setCtnm("荆州市"); + warn.setCnnm("宣恩 "); + taskList = newTask(warn); + task = taskList.get(0); + task.setStatus(0); + task.setCreateTm(new Date()); + task.setWarnCnnm("宣恩 "); + taskMapper.insert(task); + generatePerson(task); + + warn = qxWarningMapper.selectOne( + new QueryWrapper() + .orderByDesc("WARNID") + .last("limit 1") + ); + warn.setCtnm("荆州市"); + warn.setCnnm("宜城 "); + taskList = newTask(warn); + task = taskList.get(0); + task.setStatus(0); + task.setCreateTm(new Date()); + task.setWarnCnnm("宜城 "); + taskMapper.insert(task); + generatePerson(task); + + warn = qxWarningMapper.selectOne( + new QueryWrapper() + .orderByDesc("WARNID") + .last("limit 1") + ); + warn.setCtnm("荆州市"); + warn.setCnnm("孝南 "); + taskList = newTask(warn); + task = taskList.get(0); + task.setStatus(0); + task.setCreateTm(new Date()); + task.setWarnCnnm("孝南 "); + taskMapper.insert(task); + generatePerson(task); + + warn = qxWarningMapper.selectOne( + new QueryWrapper() + .orderByDesc("WARNID") + .last("limit 1") + ); + warn.setCtnm("荆州市"); + warn.setCnnm("孝感 "); + taskList = newTask(warn); + task = taskList.get(0); + task.setStatus(0); + task.setCreateTm(new Date()); + task.setWarnCnnm("孝感 "); + taskMapper.insert(task); + generatePerson(task); + + warn = qxWarningMapper.selectOne( + new QueryWrapper() + .orderByDesc("WARNID") + .last("limit 1") + ); + warn.setCtnm("荆州市"); + warn.setCnnm("襄州 "); + taskList = newTask(warn); + task = taskList.get(0); + task.setStatus(0); + task.setCreateTm(new Date()); + task.setWarnCnnm("襄州 "); + taskMapper.insert(task); + generatePerson(task); + + warn = qxWarningMapper.selectOne( + new QueryWrapper() + .orderByDesc("WARNID") + .last("limit 1") + ); + warn.setCtnm("荆州市"); + warn.setCnnm("咸丰 "); + taskList = newTask(warn); + task = taskList.get(0); + task.setStatus(0); + task.setCreateTm(new Date()); + task.setWarnCnnm("咸丰 "); + taskMapper.insert(task); + generatePerson(task); + + + warn = qxWarningMapper.selectOne( new QueryWrapper() .orderByDesc("WARNID") .last("limit 1") ); warn.setCtnm("荆州市"); warn.setCnnm("洪湖 "); - List taskList = newTask(warn); - AutoCallTask task = taskList.get(0); + taskList = newTask(warn); + task = taskList.get(0); task.setStatus(0); task.setCreateTm(new Date()); task.setWarnCnnm("洪湖 "); @@ -86,20 +287,35 @@ public class AutoCallTaskService2 { taskMapper.insert(task); generatePerson(task); -// warn = qxWarningMapper.selectOne( -// new QueryWrapper() -// .orderByDesc("WARNID") -// .last("limit 1") -// ); -// warn.setCtnm("荆州市"); -// warn.setCnnm("竹溪 "); -// taskList = newTask(warn); -// task = taskList.get(0); -// task.setStatus(0); -// task.setCreateTm(new Date()); -// task.setWarnCnnm("竹溪 "); -// taskMapper.insert(task); -// generatePerson(task); + warn = qxWarningMapper.selectOne( + new QueryWrapper() + .orderByDesc("WARNID") + .last("limit 1") + ); + warn.setCtnm("荆州市"); + warn.setCnnm("竹溪 "); + taskList = newTask(warn); + task = taskList.get(0); + task.setStatus(0); + task.setCreateTm(new Date()); + task.setWarnCnnm("竹溪 "); + taskMapper.insert(task); + generatePerson(task); + + warn = qxWarningMapper.selectOne( + new QueryWrapper() + .orderByDesc("WARNID") + .last("limit 1") + ); + warn.setCtnm("荆州市"); + warn.setCnnm("竹山 "); + taskList = newTask(warn); + task = taskList.get(0); + task.setStatus(0); + task.setCreateTm(new Date()); + task.setWarnCnnm("竹山 "); + taskMapper.insert(task); + generatePerson(task); } public void markPersonDetailQueryTimeout(AutoCallPerson person) { @@ -341,60 +557,60 @@ public class AutoCallTaskService2 { // return; // } // try { - if (person.getUploadedTimes() == 2) { - cancelPerson(person); - try { - Thread.sleep(10000); - } catch (InterruptedException ignore) { - } - return; - } else if (person.getUploadedTimes() == 1) { - try { - Thread.sleep(10000); - } catch (InterruptedException ignore) { - } - resetPerson(person); - } - - List numbers = Collections.singletonList(person.getUploadNumber()); - AICCUploadTask uploadTask = aiccHelper.newTask( - person.getUploadRequestId(), - person.getUploadCustId(), - person.getUploadCustName(), - person.getUploadContent(), - numbers - ); - - AICCCallRespWrapper AICCCallRespWrapper = null; + if (person.getUploadedTimes() == 2) { + cancelPerson(person); try { - AICCCallRespWrapper = aiccHelper.apiUploadCallData(uploadTask); - } catch (GeneralSecurityException | UnsupportedEncodingException e) { - person.setStatus(AutoCallPerson.STATUS_CANCELLED); - person.setErrorCode(AutoCallPerson.ERRCODE_ENCODE); - person.setDetailRemark("平台异常"); - personMapper.updateById(person); - log.error("外呼任务编码异常", e); + Thread.sleep(10000); + } catch (InterruptedException ignore) { } - if (AICCCallRespWrapper == null) { - person.setStatus(AutoCallPerson.STATUS_CANCELLED); - person.setDetailRemark("提交外呼失败"); - person.setErrorCode(AutoCallPerson.ERRCODE_UPLOAD_FAIL); - personMapper.updateById(person); - } else { - String msg = AICCCallRespWrapper.getResult().getMsg(); - person.setStatus(AutoCallPerson.STATUS_UPLOADED); - person.setUploadRespMsg(msg); - person.setUploadedTimes(person.getUploadedTimes() + 1); - personMapper.updateById(person); - smsHelper.send(numbers, person.getSmsContent()); + return; + } else if (person.getUploadedTimes() == 1) { + try { + Thread.sleep(10000); + } catch (InterruptedException ignore) { } + resetPerson(person); + } + + List numbers = Collections.singletonList(person.getUploadNumber()); + AICCUploadTask uploadTask = aiccHelper.newTask( + person.getUploadRequestId(), + person.getUploadCustId(), + person.getUploadCustName(), + person.getUploadContent(), + numbers + ); + + AICCCallRespWrapper AICCCallRespWrapper = null; + try { + AICCCallRespWrapper = aiccHelper.apiUploadCallData(uploadTask); + } catch (GeneralSecurityException | UnsupportedEncodingException e) { + person.setStatus(AutoCallPerson.STATUS_CANCELLED); + person.setErrorCode(AutoCallPerson.ERRCODE_ENCODE); + person.setDetailRemark("平台异常"); + personMapper.updateById(person); + log.error("外呼任务编码异常", e); + } + if (AICCCallRespWrapper == null) { + person.setStatus(AutoCallPerson.STATUS_CANCELLED); + person.setDetailRemark("提交外呼失败"); + person.setErrorCode(AutoCallPerson.ERRCODE_UPLOAD_FAIL); + personMapper.updateById(person); + } else { + String msg = AICCCallRespWrapper.getResult().getMsg(); + person.setStatus(AutoCallPerson.STATUS_UPLOADED); + person.setUploadRespMsg(msg); + person.setUploadedTimes(person.getUploadedTimes() + 1); + personMapper.updateById(person); + smsHelper.send(numbers, person.getSmsContent()); + } // } // finally { // isCalling.set(false); // } } - public boolean step4QueryAICCTaskResult(AutoCallPerson person) { + public AutoCallPerson step4QueryAICCTaskResult(AutoCallPerson person) { person = personMapper.selectById(person.getId()); //切记要设置person的status和task的status AICCCallRespWrapper detail = aiccHelper.apiGetTaskCallDetail(person.getUploadRequestId(), person.getUploadCustId()); @@ -404,9 +620,10 @@ public class AutoCallTaskService2 { detail.getResult().getData() == null || detail.getResult().getData().getRecords() == null || detail.getResult().getData().getRecords().isEmpty() || - detail.getResult().getData().getRecords().get(0).getRemark() == null + detail.getResult().getData().getRecords().get(0).getTags() == null || + detail.getResult().getData().getRecords().get(0).getTags().isEmpty() ) { - return false; //remark为空代表联通平台还未或正在呼叫,还没有结果信息,应继续刷接口 + return null; //tags为空代表联通平台还未或正在呼叫,还没有结果信息,应继续刷接口 } Integer taskId = person.getTaskId(); @@ -419,30 +636,23 @@ public class AutoCallTaskService2 { person.setDetailSipTermCause(rawVarListMap.getSipTermCause()); fillTimeData(person, record); //话术部分 - String tag = null; - if (record.getTags() != null && - !record.getTags().isEmpty() && - record.getTags().get(0).getTagName() != null - ) { - tag = record.getTags().get(0).getTagName(); - person.setTag(tag); - } + String tag = record.getTags().get(record.getTags().size() - 1).getTagName(); + person.setTag(tag); + //再判断状态 // if ("接通".equals(dialRemark)) { // person.setStatus(AutoCallPerson.STATUS_PUT); // } else { - if (person.getUploadedTimes() < 2) { - person.setStatus(AutoCallPerson.STATUS_CALLED); - } else { - person.setStatus(AutoCallPerson.STATUS_CANCELLED); - } + if (person.getUploadedTimes() < 2) { + person.setStatus(AutoCallPerson.STATUS_CALLED); + } else { + person.setStatus(AutoCallPerson.STATUS_CANCELLED); + } // } personMapper.updateById(person); if ("已知晓".equals(tag)) { - if ("接通".equals(dialRemark)) { - person.setStatus(AutoCallPerson.STATUS_PUT); - personMapper.updateById(person); - } + person.setStatus(AutoCallPerson.STATUS_PUT); + personMapper.updateById(person); markRemnantPersonStatus(taskId); taskMapper.setTag(taskId, tag); taskMapper.setStatus(taskId, AutoCallTask.STATUS_ANY_SUCCESS); @@ -452,7 +662,7 @@ public class AutoCallTaskService2 { taskMapper.setStatus(taskId, AutoCallTask.STATUS_ALL_FAIL); } } - return true; + return person; // boolean done = false; // log.info("{}", JSON.toJSONString(record)); diff --git a/src/main/java/com/whdc/utils/AICCHelper.java b/src/main/java/com/whdc/utils/AICCHelper.java index aab1292..d00e3eb 100644 --- a/src/main/java/com/whdc/utils/AICCHelper.java +++ b/src/main/java/com/whdc/utils/AICCHelper.java @@ -55,6 +55,7 @@ public class AICCHelper { public void initToken() throws RuntimeException { if (isAcquiringToken.compareAndSet(false, true)) { + latch = new CountDownLatch(1); globalToken.set(null); try { String data = "{\"sysUserId\":\"" + sysUserId + "\",\"expire\":1000000}"; @@ -67,7 +68,7 @@ public class AICCHelper { JSONObject request = new JSONObject(); request.put("request", encrypt); Map headers = new HashMap<>(); - headers.put("X-Access-Token", getToken()); +// headers.put("X-Access-Token", getToken()); String resp = httpHelper.postJsonString("https://aicc.cuopen.net:9801/aicc-api/ssb/callout/thirdParty/login", request.toJSONString(), headers); TypeReference> type = new TypeReference>() { @@ -80,11 +81,12 @@ public class AICCHelper { AICCLogin result = AICCCallRespWrapper.getResult(); String token = result.getToken(); - if (token != null && !token.isEmpty()) { +// if (token != null && !token.isEmpty()) { globalToken.set(token); - } +// } } finally { isAcquiringToken.set(false); + latch.countDown(); } } else { try { @@ -161,22 +163,33 @@ public class AICCHelper { Map headers = new HashMap<>(); headers.put("X-Access-Token", token); String resp = httpHelper.postJsonString("https://aicc.cuopen.net:9801/aicc-api/ssb/callout/thirdParty/task/getTaskCallDetail", request.toJSONString(),headers); - + log.info("apiGetTaskCallDetail: {}", resp); TypeReference> type = new TypeReference>() { }; - AICCCallRespWrapper AICCCallRespWrapper = JSON.parseObject(resp, type); - if (AICCCallRespWrapper == null || !AICCCallRespWrapper.isSuccess()) { + AICCCallRespWrapper aICCCallRespWrapper = null; + try { + aICCCallRespWrapper = JSON.parseObject(resp, type); + } catch (Exception e) { + log.error("apiGetTaskCallDetail first time: {}", resp); + log.error("error: ", e); + } + if (aICCCallRespWrapper == null || !aICCCallRespWrapper.isSuccess()) { initToken(); headers.put("X-Access-Token", getToken()); resp = httpHelper.postJsonString("https://aicc.cuopen.net:9801/aicc-api/ssb/callout/thirdParty/task/getTaskCallDetail", request.toJSONString(), headers); - AICCCallRespWrapper = JSON.parseObject(resp, type); + try { + aICCCallRespWrapper = JSON.parseObject(resp, type); + } catch (Exception e) { + log.error("apiGetTaskCallDetail second time: {}", resp); + log.error("error: ", e); + } } - if (AICCCallRespWrapper == null || !AICCCallRespWrapper.isSuccess()) { + if (aICCCallRespWrapper == null || !aICCCallRespWrapper.isSuccess()) { log.info("获取任务详情失败:{}", resp); return null; } - return AICCCallRespWrapper; + return aICCCallRespWrapper; } public AICCUploadTask newTask(String requestId, String custId, String custName, String content, List numbers) {