等待联通联调

master
李一帆 2025-08-09 19:07:50 +08:00
parent 4ff2c12d83
commit 61a5d43891
4 changed files with 346 additions and 100 deletions

View File

@ -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;

View File

@ -109,7 +109,23 @@ public class WarningResponder extends Model<WarningResponder> 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);

View File

@ -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<AutoCallTask> taskList;
AutoCallTask task;
warn = qxWarningMapper.selectOne(
new QueryWrapper<QXWarning>()
.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<QXWarning>()
.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<QXWarning>()
.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<QXWarning>()
.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<QXWarning>()
.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<QXWarning>()
.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<QXWarning>()
.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<QXWarning>()
.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<QXWarning>()
.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<QXWarning>()
.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<QXWarning>()
.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<QXWarning>()
.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<QXWarning>()
.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<QXWarning>()
.orderByDesc("WARNID")
.last("limit 1")
);
warn.setCtnm("荆州市");
warn.setCnnm("洪湖 ");
List<AutoCallTask> 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<QXWarning>()
// .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<QXWarning>()
.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<QXWarning>()
.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<String> numbers = Collections.singletonList(person.getUploadNumber());
AICCUploadTask uploadTask = aiccHelper.newTask(
person.getUploadRequestId(),
person.getUploadCustId(),
person.getUploadCustName(),
person.getUploadContent(),
numbers
);
AICCCallRespWrapper<AICCCallRespTask> 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<String> numbers = Collections.singletonList(person.getUploadNumber());
AICCUploadTask uploadTask = aiccHelper.newTask(
person.getUploadRequestId(),
person.getUploadCustId(),
person.getUploadCustName(),
person.getUploadContent(),
numbers
);
AICCCallRespWrapper<AICCCallRespTask> 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<AICCCallRespDetail> 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));

View File

@ -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<String, String> 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<AICCCallRespWrapper<AICCLogin>> type = new TypeReference<AICCCallRespWrapper<AICCLogin>>() {
@ -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<String, String> 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<AICCCallRespWrapper<AICCCallRespDetail>> type = new TypeReference<AICCCallRespWrapper<AICCCallRespDetail>>() {
};
AICCCallRespWrapper<AICCCallRespDetail> AICCCallRespWrapper = JSON.parseObject(resp, type);
if (AICCCallRespWrapper == null || !AICCCallRespWrapper.isSuccess()) {
AICCCallRespWrapper<AICCCallRespDetail> 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<String> numbers) {