Compare commits

...

5 Commits

Author SHA1 Message Date
李一帆 36c8945201 refactor(autocall):优化任务和人员相关功能
- 修改 AICCCallRespDetail 中的 isComplete 字段为 isCompleted
- 移除 AICCHelper 中的 API 响应日志输出
- 新增按预警 ID 获取人员信息的功能
-优化人员列表查询逻辑,支持按级别排序
- 修复任务状态更新和标签设置的问题
-优化拨号备注和标签处理逻辑
2025-08-12 09:20:50 +08:00
李一帆 fc1f4e7383 Merge branch 'refs/heads/isComplete' into liantong 2025-08-10 08:53:21 +08:00
李一帆 e03374bf32 减少测试人员区县 2025-08-09 20:09:01 +08:00
李一帆 1368e2edfa add isComplete 2025-08-09 19:12:42 +08:00
李一帆 61a5d43891 等待联通联调 2025-08-09 19:08:19 +08:00
8 changed files with 388 additions and 105 deletions

View File

@ -28,7 +28,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
*/ */
@Component @Component
@Slf4j @Slf4j
@Profile({"dev"}) @Profile({"default"})
public class AutoCallTaskScheduled { public class AutoCallTaskScheduled {
@Autowired @Autowired
@ -46,6 +46,9 @@ public class AutoCallTaskScheduled {
@EventListener(ApplicationReadyEvent.class) @EventListener(ApplicationReadyEvent.class)
public void initialize() throws Exception { public void initialize() throws Exception {
autoCallHelper.getToken(); autoCallHelper.getToken();
log.info("token1 {}", autoCallHelper.getToken());
autoCallHelper.getToken();
log.info("token2 {}", autoCallHelper.getToken());
initialized.set(true); initialized.set(true);
log.info("AutoCallTaskScheduled初始化完成"); log.info("AutoCallTaskScheduled初始化完成");
} }
@ -130,7 +133,8 @@ public class AutoCallTaskScheduled {
//fetch status //fetch status
int pendingDuration = 60 * 1000 * 2; int pendingDuration = 60 * 1000 * 2;
int loopGap = 1000; int loopGap = 1000;
boolean resultFetched = false; boolean isComplete = false;
AutoCallPerson _person = null;
while (pendingDuration > 0) { while (pendingDuration > 0) {
try { try {
Thread.sleep(loopGap); Thread.sleep(loopGap);
@ -140,14 +144,17 @@ public class AutoCallTaskScheduled {
} }
pendingDuration -= loopGap; pendingDuration -= loopGap;
resultFetched = autoCallTaskService.step4QueryAICCTaskResult(person); //联通确保tag和remark同时返回
if (resultFetched) break; _person = autoCallTaskService.step4QueryAICCTaskResult(person);
if (_person != null && _person.getIsComplete() == 1) {
isComplete = true;
}
if (isComplete) break;
} }
AutoCallPerson _person = autoCallTaskService.getPersonMapper().selectById(person.getId()); if (_person != null) person = _person;
person = _person;
if (resultFetched) { if (isComplete) {
//获取到任务详情且有话术标签为已知晓,中断循环 //获取到任务详情且有话术标签为已知晓,中断循环
if (AutoCallPerson.TAG_DONE.equals(person.getTag())) break; if (AutoCallPerson.TAG_DONE.equals(person.getTag())) break;
} else { } else {
@ -161,7 +168,7 @@ public class AutoCallTaskScheduled {
//重呼等15秒 //重呼等15秒
try { try {
Thread.sleep(15*1000); Thread.sleep(15 * 1000);
} catch (InterruptedException ignore) { } catch (InterruptedException ignore) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
break; break;

View File

@ -163,8 +163,13 @@ public class AutoCallController {
} }
} }
@GetMapping("/newPerson") @GetMapping("/newPersonByWarn")
public ResultJson newPerson(@RequestParam("taskId") Integer taskId) { public ResultJson newPersonByWarn(@RequestParam("warnId") Integer warnId) {
return ResultJson.ok(autoCallTaskService2.getPersonByWarnId(warnId));
}
@GetMapping("/newPersonByTask")
public ResultJson newPersonByTask(@RequestParam("taskId") Integer taskId) {
AutoCallTask task = autoCallTaskService2.getTaskMapper().selectById(taskId); AutoCallTask task = autoCallTaskService2.getTaskMapper().selectById(taskId);
return ResultJson.ok(autoCallTaskService2.newPerson(task)); return ResultJson.ok(autoCallTaskService2.newPerson(task));
} }

View File

@ -71,6 +71,8 @@ public class AutoCallPerson {
private String detailSipTermCause; //例如”对方挂机“ private String detailSipTermCause; //例如”对方挂机“
@TableField(value = "__tag") @TableField(value = "__tag")
private String tag; //话术识别:未识别,已知晓 private String tag; //话术识别:未识别,已知晓
@TableField("__is_complete")
private Integer isComplete; //default 0
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@TableField(value = "__startring_at") @TableField(value = "__startring_at")

View File

@ -36,6 +36,7 @@ public class AICCCallRespDetail {
private Integer status; //0进行中 2结束 4暂停 private Integer status; //0进行中 2结束 4暂停
private Integer totalCount; private Integer totalCount;
private Integer sendCount; private Integer sendCount;
private boolean isCompleted;
private RawVarListMap rawVarListMap; private RawVarListMap rawVarListMap;
private List<Tag> tags; private List<Tag> tags;

View File

@ -109,7 +109,24 @@ public class WarningResponder extends Model<WarningResponder> implements Seriali
public static void main(String[] args) { public static void main(String[] args) {
WarningResponder a = new WarningResponder(); 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 王锐
//杨喆 18872619396 15327337261
a.setPhone("15327337261");
a.encryptPhone(); a.encryptPhone();
System.out.println(a.salt); System.out.println(a.salt);
System.out.println(a.phone); 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.mapper.*;
import com.whdc.model.autocall.AutoCallPerson; import com.whdc.model.autocall.AutoCallPerson;
import com.whdc.model.autocall.AutoCallTask; 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.AICCCallRespDetail;
import com.whdc.model.autocall.aicc.AICCCallRespTask; import com.whdc.model.autocall.aicc.AICCCallRespTask;
import com.whdc.model.autocall.aicc.AICCCallRespWrapper; import com.whdc.model.autocall.aicc.AICCCallRespWrapper;
import com.whdc.model.autocall.aicc.AICCUploadTask; 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.AICCHelper;
import com.whdc.utils.SmsHelper; import com.whdc.utils.SmsHelper;
import lombok.Getter; import lombok.Getter;
@ -26,7 +26,6 @@ import java.io.UnsupportedEncodingException;
import java.security.GeneralSecurityException; import java.security.GeneralSecurityException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -56,20 +55,9 @@ public class AutoCallTaskService2 {
private SmsHelper smsHelper; private SmsHelper smsHelper;
public void generateFakeCall() { public void generateFakeCall() {
QXWarning warn = qxWarningMapper.selectOne( QXWarning warn;
new QueryWrapper<QXWarning>() List<AutoCallTask> taskList;
.orderByDesc("WARNID") AutoCallTask task;
.last("limit 1")
);
warn.setCtnm("荆州市");
warn.setCnnm("洪湖 ");
List<AutoCallTask> taskList = newTask(warn);
AutoCallTask task = taskList.get(0);
task.setStatus(0);
task.setCreateTm(new Date());
task.setWarnCnnm("洪湖 ");
taskMapper.insert(task);
generatePerson(task);
warn = qxWarningMapper.selectOne( warn = qxWarningMapper.selectOne(
new QueryWrapper<QXWarning>() new QueryWrapper<QXWarning>()
@ -77,14 +65,226 @@ public class AutoCallTaskService2 {
.last("limit 1") .last("limit 1")
); );
warn.setCtnm("荆州市"); warn.setCtnm("荆州市");
warn.setCnnm("秭归 "); warn.setCnnm("钟祥 ");
taskList = newTask(warn); taskList = newTask(warn);
task = taskList.get(0); task = taskList.get(0);
task.setStatus(0); task.setStatus(0);
task.setCreateTm(new Date()); task.setCreateTm(new Date());
task.setWarnCnnm("秭归 "); task.setWarnCnnm("钟祥 ");
taskMapper.insert(task); taskMapper.insert(task);
generatePerson(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("洪湖 ");
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( // warn = qxWarningMapper.selectOne(
// new QueryWrapper<QXWarning>() // new QueryWrapper<QXWarning>()
@ -99,6 +299,21 @@ public class AutoCallTaskService2 {
// task.setCreateTm(new Date()); // task.setCreateTm(new Date());
// task.setWarnCnnm("竹溪 "); // task.setWarnCnnm("竹溪 ");
// taskMapper.insert(task); // 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); // generatePerson(task);
} }
@ -140,6 +355,32 @@ public class AutoCallTaskService2 {
} }
} }
public List<AutoCallPerson> getPersonByWarnId(Integer warnId) {
QXWarning warn = qxWarningMapper.selectOne(
new QueryWrapper<QXWarning>()
.eq("warnid", warnId)
.last("limit 1")
);
List<Integer> warnLevels = mapWarnSignalLevel(warn.getWarnSignalLevel());
String cnnm = warn.getCnnm();
List<WarningResponder> wrList = warningResponderMapper.listByCnnmAndLevelOrderByLevelAsc(cnnm, warnLevels);
doSomethingWith(cnnm, wrList);
wrList.sort(Comparator.comparingInt(WarningResponder::getLevel));
List<AutoCallPerson> personList = new ArrayList<>();
for (WarningResponder wr : wrList) {
Integer wrLevel = wr.getLevel();
wr.decryptPhone();
AutoCallPerson person = new AutoCallPerson();
person.setUploadCustName(wr.getName());
person.setLevel(wrLevel);
person.setPosition(wr.getPosition());
person.setUploadNumber(wr.getPhone());
personList.add(person);
}
return personList;
}
private List<AutoCallTask> newTask(QXWarning warn) { private List<AutoCallTask> newTask(QXWarning warn) {
String cnnmStr = warn.getCnnm(); String cnnmStr = warn.getCnnm();
Integer warnId = warn.getWarnid(); Integer warnId = warn.getWarnid();
@ -186,6 +427,7 @@ public class AutoCallTaskService2 {
List<AutoCallPerson> personList = newPerson(task); List<AutoCallPerson> personList = newPerson(task);
if (personList.size() == 0) { if (personList.size() == 0) {
task.setRemark("未找到责任人"); task.setRemark("未找到责任人");
task.setTag("未找到责任人");
task.setStatus(AutoCallTask.STATUS_CANCELLED); task.setStatus(AutoCallTask.STATUS_CANCELLED);
task.setErrorCode(AutoCallTask.ERRCODE_NO_PERSON); task.setErrorCode(AutoCallTask.ERRCODE_NO_PERSON);
taskMapper.updateById(task); taskMapper.updateById(task);
@ -232,7 +474,7 @@ public class AutoCallTaskService2 {
return ret; return ret;
} }
private static final String[] excludeNames = new String[]{"高新", "开发", "自治", "技术", "旅游", "管理", "工业", "产业", "示范"}; private static final String[] excludeNames = new String[]{"高新", "开发", "技术", "旅游", "管理", "工业", "产业", "示范"};
private static void doSomethingWith(String cnmm, List<WarningResponder> wrList) { private static void doSomethingWith(String cnmm, List<WarningResponder> wrList) {
//预警包含高新等字符,可跳出 //预警包含高新等字符,可跳出
@ -297,7 +539,7 @@ public class AutoCallTaskService2 {
task.getWarnLevel() + task.getWarnLevel() +
"预警信号:" + "预警信号:" +
task.getWarnContent() + task.getWarnContent() +
"相关信息以短信发送给您。" "相关信息以短信发送给您。"
); );
person.setSmsContent( person.setSmsContent(
"我是省防办智能外呼系统," + "我是省防办智能外呼系统," +
@ -341,60 +583,60 @@ public class AutoCallTaskService2 {
// return; // return;
// } // }
// try { // try {
if (person.getUploadedTimes() == 2) { if (person.getUploadedTimes() == 2) {
cancelPerson(person); 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;
try { try {
AICCCallRespWrapper = aiccHelper.apiUploadCallData(uploadTask); Thread.sleep(10000);
} catch (GeneralSecurityException | UnsupportedEncodingException e) { } catch (InterruptedException ignore) {
person.setStatus(AutoCallPerson.STATUS_CANCELLED);
person.setErrorCode(AutoCallPerson.ERRCODE_ENCODE);
person.setDetailRemark("平台异常");
personMapper.updateById(person);
log.error("外呼任务编码异常", e);
} }
if (AICCCallRespWrapper == null) { return;
person.setStatus(AutoCallPerson.STATUS_CANCELLED); } else if (person.getUploadedTimes() == 1) {
person.setDetailRemark("提交外呼失败"); try {
person.setErrorCode(AutoCallPerson.ERRCODE_UPLOAD_FAIL); Thread.sleep(10000);
personMapper.updateById(person); } catch (InterruptedException ignore) {
} 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());
} }
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 { // finally {
// isCalling.set(false); // isCalling.set(false);
// } // }
} }
public boolean step4QueryAICCTaskResult(AutoCallPerson person) { public AutoCallPerson step4QueryAICCTaskResult(AutoCallPerson person) {
person = personMapper.selectById(person.getId()); person = personMapper.selectById(person.getId());
//切记要设置person的status和task的status //切记要设置person的status和task的status
AICCCallRespWrapper<AICCCallRespDetail> detail = aiccHelper.apiGetTaskCallDetail(person.getUploadRequestId(), person.getUploadCustId()); AICCCallRespWrapper<AICCCallRespDetail> detail = aiccHelper.apiGetTaskCallDetail(person.getUploadRequestId(), person.getUploadCustId());
@ -404,9 +646,9 @@ public class AutoCallTaskService2 {
detail.getResult().getData() == null || detail.getResult().getData() == null ||
detail.getResult().getData().getRecords() == null || detail.getResult().getData().getRecords() == null ||
detail.getResult().getData().getRecords().isEmpty() || detail.getResult().getData().getRecords().isEmpty() ||
detail.getResult().getData().getRecords().get(0).getRemark() == null !detail.getResult().getData().getRecords().get(0).isCompleted()
) { ) {
return false; //remark为空代表联通平台还未或正在呼叫,还没有结果信息,应继续刷接口 return null; //tags为空代表联通平台还未或正在呼叫,还没有结果信息,应继续刷接口
} }
Integer taskId = person.getTaskId(); Integer taskId = person.getTaskId();
@ -414,35 +656,32 @@ public class AutoCallTaskService2 {
String dialRemark = record.getRemark(); String dialRemark = record.getRemark();
AICCCallRespDetail.RawVarListMap rawVarListMap = record.getRawVarListMap(); AICCCallRespDetail.RawVarListMap rawVarListMap = record.getRawVarListMap();
//已产生结果信息 //已产生结果信息
person.setIsComplete(record.isCompleted() ? 1 : 0);
person.setDetailRemark(dialRemark); person.setDetailRemark(dialRemark);
person.setDetailTalkTimes(record.getTalkTimes()); person.setDetailTalkTimes(record.getTalkTimes());
person.setDetailSipTermCause(rawVarListMap.getSipTermCause()); person.setDetailSipTermCause(rawVarListMap.getSipTermCause());
fillTimeData(person, record); fillTimeData(person, record);
//话术部分 //话术部分
String tag = null; String tag = null;
if (record.getTags() != null && if (record.getTags() != null && record.getTags().size() > 0) {
!record.getTags().isEmpty() && tag = record.getTags().get(record.getTags().size() - 1).getTagName();
record.getTags().get(0).getTagName() != null
) {
tag = record.getTags().get(0).getTagName();
person.setTag(tag); person.setTag(tag);
} }
//再判断状态 //再判断状态
// if ("接通".equals(dialRemark)) { // if ("接通".equals(dialRemark)) {
// person.setStatus(AutoCallPerson.STATUS_PUT); // person.setStatus(AutoCallPerson.STATUS_PUT);
// } else { // } else {
if (person.getUploadedTimes() < 2) { if (person.getUploadedTimes() < 2) {
person.setStatus(AutoCallPerson.STATUS_CALLED); person.setStatus(AutoCallPerson.STATUS_CALLED);
} else { } else {
person.setStatus(AutoCallPerson.STATUS_CANCELLED); person.setStatus(AutoCallPerson.STATUS_CANCELLED);
} }
// } // }
personMapper.updateById(person); personMapper.updateById(person);
if ("已知晓".equals(tag)) { if ("已知晓".equals(tag)) {
if ("接通".equals(dialRemark)) { person.setStatus(AutoCallPerson.STATUS_PUT);
person.setStatus(AutoCallPerson.STATUS_PUT); personMapper.updateById(person);
personMapper.updateById(person);
}
markRemnantPersonStatus(taskId); markRemnantPersonStatus(taskId);
taskMapper.setTag(taskId, tag); taskMapper.setTag(taskId, tag);
taskMapper.setStatus(taskId, AutoCallTask.STATUS_ANY_SUCCESS); taskMapper.setStatus(taskId, AutoCallTask.STATUS_ANY_SUCCESS);
@ -452,7 +691,7 @@ public class AutoCallTaskService2 {
taskMapper.setStatus(taskId, AutoCallTask.STATUS_ALL_FAIL); taskMapper.setStatus(taskId, AutoCallTask.STATUS_ALL_FAIL);
} }
} }
return true; return person;
// boolean done = false; // boolean done = false;
// log.info("{}", JSON.toJSONString(record)); // log.info("{}", JSON.toJSONString(record));

View File

@ -55,6 +55,7 @@ public class AICCHelper {
public void initToken() throws RuntimeException { public void initToken() throws RuntimeException {
if (isAcquiringToken.compareAndSet(false, true)) { if (isAcquiringToken.compareAndSet(false, true)) {
latch = new CountDownLatch(1);
globalToken.set(null); globalToken.set(null);
try { try {
String data = "{\"sysUserId\":\"" + sysUserId + "\",\"expire\":1000000}"; String data = "{\"sysUserId\":\"" + sysUserId + "\",\"expire\":1000000}";
@ -67,7 +68,7 @@ public class AICCHelper {
JSONObject request = new JSONObject(); JSONObject request = new JSONObject();
request.put("request", encrypt); request.put("request", encrypt);
Map<String, String> headers = new HashMap<>(); 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); 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>>() { TypeReference<AICCCallRespWrapper<AICCLogin>> type = new TypeReference<AICCCallRespWrapper<AICCLogin>>() {
@ -80,11 +81,12 @@ public class AICCHelper {
AICCLogin result = AICCCallRespWrapper.getResult(); AICCLogin result = AICCCallRespWrapper.getResult();
String token = result.getToken(); String token = result.getToken();
if (token != null && !token.isEmpty()) { // if (token != null && !token.isEmpty()) {
globalToken.set(token); globalToken.set(token);
} // }
} finally { } finally {
isAcquiringToken.set(false); isAcquiringToken.set(false);
latch.countDown();
} }
} else { } else {
try { try {
@ -161,22 +163,32 @@ public class AICCHelper {
Map<String, String> headers = new HashMap<>(); Map<String, String> headers = new HashMap<>();
headers.put("X-Access-Token", token); 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); String resp = httpHelper.postJsonString("https://aicc.cuopen.net:9801/aicc-api/ssb/callout/thirdParty/task/getTaskCallDetail", request.toJSONString(),headers);
TypeReference<AICCCallRespWrapper<AICCCallRespDetail>> type = new TypeReference<AICCCallRespWrapper<AICCCallRespDetail>>() { TypeReference<AICCCallRespWrapper<AICCCallRespDetail>> type = new TypeReference<AICCCallRespWrapper<AICCCallRespDetail>>() {
}; };
AICCCallRespWrapper<AICCCallRespDetail> AICCCallRespWrapper = JSON.parseObject(resp, type); AICCCallRespWrapper<AICCCallRespDetail> aICCCallRespWrapper = null;
if (AICCCallRespWrapper == null || !AICCCallRespWrapper.isSuccess()) { 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(); initToken();
headers.put("X-Access-Token", getToken()); headers.put("X-Access-Token", getToken());
resp = httpHelper.postJsonString("https://aicc.cuopen.net:9801/aicc-api/ssb/callout/thirdParty/task/getTaskCallDetail", request.toJSONString(), headers); 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); log.info("获取任务详情失败:{}", resp);
return null; return null;
} }
return AICCCallRespWrapper; return aICCCallRespWrapper;
} }
public AICCUploadTask newTask(String requestId, String custId, String custName, String content, List<String> numbers) { public AICCUploadTask newTask(String requestId, String custId, String custName, String content, List<String> numbers) {

View File

@ -101,8 +101,8 @@
select * from ADDRESS_BOOK_OLD A select * from ADDRESS_BOOK_OLD A
where 1=1 where 1=1
<if test="cnnm != null and cnnm != '' "> <if test="cnnm != null and cnnm != '' ">
<!-- and A.CNNM like CONCAT('%',#{cnnm},'%')--> and A.CNNM like CONCAT('%',#{cnnm},'%')
and A.CNNM = #{cnnm} <!-- and A.CNNM = #{cnnm}-->
</if> </if>
and level in and level in
<foreach collection="levels" item="item" index="index" open="(" separator="," close=")"> <foreach collection="levels" item="item" index="index" open="(" separator="," close=")">