|
|
|
@ -44,7 +44,6 @@ public class TelephoneCallServiceImpl implements TelephoneCallService {
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private AxbRequest axbRequest;
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private DoubleCallReq doubleCallReq;
|
|
|
|
|
@Resource
|
|
|
|
@ -56,7 +55,7 @@ public class TelephoneCallServiceImpl implements TelephoneCallService {
|
|
|
|
|
@Resource
|
|
|
|
|
private SourceClueClient sourceClueClient;
|
|
|
|
|
@Resource
|
|
|
|
|
private ExtensionNumberRepository extensionNumberRepository;
|
|
|
|
|
private ExtensionUserRepository extensionUserRepository;
|
|
|
|
|
@Resource
|
|
|
|
|
private ExtensionDisplayRepository extensionDisplayRepository;
|
|
|
|
|
@Resource
|
|
|
|
@ -206,58 +205,71 @@ public class TelephoneCallServiceImpl implements TelephoneCallService {
|
|
|
|
|
telephoneCallReqDTO.setRequestId(requestId);
|
|
|
|
|
if (telephoneCallReqDTO.getDisplay() == null || telephoneCallReqDTO.getTelA() == null) {
|
|
|
|
|
//获取分机号
|
|
|
|
|
//TODO 新需求,外显号多个
|
|
|
|
|
ExtensionNumber extensionNumber = extensionNumberRepository.selectByMemberId(telephoneCallReqDTO.getMemberId());
|
|
|
|
|
if (extensionNumber == null) {
|
|
|
|
|
log.error("未配置分机号");
|
|
|
|
|
return CommonResponse.createByErrorMessage("未配置分机号");
|
|
|
|
|
Integer number = extensionUserRepository.findNumberByMemberId(telephoneCallReqDTO.getMemberId());
|
|
|
|
|
if (number == null) {
|
|
|
|
|
return CommonResponse.createByErrorMessage("未分配分机号");
|
|
|
|
|
}
|
|
|
|
|
ExtensionDisplay extensionDisplay = extensionDisplayRepository.findExtensionDisplayByCompanyId(extensionNumber.getCompanyId());
|
|
|
|
|
ExtensionDisplay extensionDisplay = extensionDisplayRepository.findExtensionDisplayByCompanyId(companyId);
|
|
|
|
|
if (ObjectUtil.isNull(extensionDisplay)) {
|
|
|
|
|
return CommonResponse.createByErrorMessage("未配置去显号");
|
|
|
|
|
}
|
|
|
|
|
telephoneCallReqDTO.setTelA(String.valueOf(extensionNumber.getNumber()));
|
|
|
|
|
|
|
|
|
|
telephoneCallReqDTO.setTelA(String.valueOf(number));
|
|
|
|
|
//获取去显号
|
|
|
|
|
Long display;
|
|
|
|
|
if (telephoneCallReqDTO.getClueType() == DefaultNumberConstants.THREE_NUMBER) {
|
|
|
|
|
if (extensionDisplay.getDyDisplay() == null) {
|
|
|
|
|
return CommonResponse.createByErrorMessage("未配置抖音去显号");
|
|
|
|
|
}
|
|
|
|
|
display = extensionDisplay.getDyDisplay();
|
|
|
|
|
} else if (telephoneCallReqDTO.getClueType() == DefaultNumberConstants.FOUR_NUMBER) {
|
|
|
|
|
if (extensionDisplay.getDeliveryDisplay() == null) {
|
|
|
|
|
return CommonResponse.createByErrorMessage("未配置投流去显号");
|
|
|
|
|
}
|
|
|
|
|
display = extensionDisplay.getDeliveryDisplay();
|
|
|
|
|
} else if (telephoneCallReqDTO.getClueType() == DefaultNumberConstants.FIVE_NUMBER) {
|
|
|
|
|
if (extensionDisplay.getTokerDisplay() == null) {
|
|
|
|
|
return CommonResponse.createByErrorMessage("未配置拓客去显号");
|
|
|
|
|
}
|
|
|
|
|
display = extensionDisplay.getTokerDisplay();
|
|
|
|
|
} else {
|
|
|
|
|
if (extensionDisplay.getDisplay() == null) {
|
|
|
|
|
return CommonResponse.createByErrorMessage("未配置去显号");
|
|
|
|
|
}
|
|
|
|
|
display = extensionDisplay.getDisplay();
|
|
|
|
|
switch (telephoneCallReqDTO.getClueType()) {
|
|
|
|
|
case DefaultNumberConstants.THREE_NUMBER:
|
|
|
|
|
if (extensionDisplay.getDyDisplay() == null) {
|
|
|
|
|
return CommonResponse.createByErrorMessage("未配置抖音去显号");
|
|
|
|
|
}
|
|
|
|
|
display = extensionDisplay.getDyDisplay();
|
|
|
|
|
break;
|
|
|
|
|
case DefaultNumberConstants.FOUR_NUMBER:
|
|
|
|
|
if (extensionDisplay.getDeliveryDisplay() == null) {
|
|
|
|
|
return CommonResponse.createByErrorMessage("未配置投流去显号");
|
|
|
|
|
}
|
|
|
|
|
display = extensionDisplay.getDeliveryDisplay();
|
|
|
|
|
break;
|
|
|
|
|
case DefaultNumberConstants.FIVE_NUMBER:
|
|
|
|
|
if (extensionDisplay.getTokerDisplay() == null) {
|
|
|
|
|
return CommonResponse.createByErrorMessage("未配置拓客去显号");
|
|
|
|
|
}
|
|
|
|
|
display = extensionDisplay.getTokerDisplay();
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
if (extensionDisplay.getDisplay() == null) {
|
|
|
|
|
return CommonResponse.createByErrorMessage("未配置去显号");
|
|
|
|
|
}
|
|
|
|
|
display = extensionDisplay.getDisplay();
|
|
|
|
|
}
|
|
|
|
|
//设置去显号
|
|
|
|
|
telephoneCallReqDTO.setDisplay(display);
|
|
|
|
|
}
|
|
|
|
|
//获取线索号
|
|
|
|
|
|
|
|
|
|
//获取被叫号
|
|
|
|
|
Clue body;
|
|
|
|
|
try {
|
|
|
|
|
body = sourceClueClient.queryDetails(Long.parseLong(telephoneCallReqDTO.getUserData())).getBody();
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error("Method 【rollCallReq】query clue error:{},time:{} ", e.getMessage(), DateUtil.now());
|
|
|
|
|
throw new BadRequestException("查询线索错误");
|
|
|
|
|
log.error("获取被叫号错误:{},time:{} ", e.getMessage(), DateUtil.now());
|
|
|
|
|
throw new BadRequestException("呼叫失败");
|
|
|
|
|
}
|
|
|
|
|
if (ObjectUtil.isNull(body) || StrUtil.isEmpty(body.getNid())) {
|
|
|
|
|
log.error("未获取到号码");
|
|
|
|
|
return CommonResponse.createByErrorMessage("未获取到号码");
|
|
|
|
|
}
|
|
|
|
|
telephoneCallReqDTO.setTelB("474" + telephoneCallReqDTO.getDisplay() + body.getNid());
|
|
|
|
|
//请求呼叫
|
|
|
|
|
String reqId = rollCallReq.startReq(telephoneCallReqDTO);
|
|
|
|
|
|
|
|
|
|
//保存呼叫记录
|
|
|
|
|
CallClueInfo clueInfo = new CallClueInfo();
|
|
|
|
|
clueInfo.setClueId(Long.parseLong(telephoneCallReqDTO.getUserData()));
|
|
|
|
|
clueInfo.setTeamId(telephoneCallReqDTO.getTeamId());
|
|
|
|
|
clueInfo.setMemberId(telephoneCallReqDTO.getMemberId());
|
|
|
|
|
clueInfo.setStatus(DefaultNumberConstants.ONE_NUMBER);
|
|
|
|
|
clueInfo.setTaskId(telephoneCallReqDTO.getTaskId());
|
|
|
|
|
clueInfo.setCompanyId(companyId);
|
|
|
|
|
callClueRepository.save(clueInfo);
|
|
|
|
|
//保存呼叫详情
|
|
|
|
|
AllCallInfo allCallInfo = new AllCallInfo();
|
|
|
|
|
allCallInfo.setSessionId(requestId);
|
|
|
|
|
allCallInfo.setRequestId(requestId);
|
|
|
|
@ -267,16 +279,8 @@ public class TelephoneCallServiceImpl implements TelephoneCallService {
|
|
|
|
|
allCallInfo.setStatus(DefaultNumberConstants.ONE_NUMBER);
|
|
|
|
|
allCallInfo.setType(DefaultNumberConstants.TWO_NUMBER);
|
|
|
|
|
allCallInfo.setRecordFlag(DefaultNumberConstants.ZERO_NUMBER);
|
|
|
|
|
|
|
|
|
|
CallClueInfo clueInfo = new CallClueInfo();
|
|
|
|
|
clueInfo.setClueId(Long.parseLong(telephoneCallReqDTO.getUserData()));
|
|
|
|
|
clueInfo.setTeamId(telephoneCallReqDTO.getTeamId());
|
|
|
|
|
clueInfo.setMemberId(telephoneCallReqDTO.getMemberId());
|
|
|
|
|
clueInfo.setStatus(DefaultNumberConstants.ONE_NUMBER);
|
|
|
|
|
clueInfo.setTaskId(telephoneCallReqDTO.getTaskId());
|
|
|
|
|
clueInfo.setCompanyId(companyId);
|
|
|
|
|
allCallInfoRepository.save(allCallInfo);
|
|
|
|
|
callClueRepository.save(clueInfo);
|
|
|
|
|
|
|
|
|
|
TelephoneCallStopDTO telephoneCallStopDTO = new TelephoneCallStopDTO();
|
|
|
|
|
telephoneCallStopDTO.setSessionid(reqId);
|
|
|
|
|
telephoneCallStopDTO.setCallId(requestId);
|
|
|
|
@ -303,20 +307,21 @@ public class TelephoneCallServiceImpl implements TelephoneCallService {
|
|
|
|
|
String otherLeg = rollCallBackDTO.getOtherLeg();
|
|
|
|
|
|
|
|
|
|
AllCallInfo allCallInfo = allCallInfoRepository.findBySessionId(otherLeg);
|
|
|
|
|
// int status = DefaultNumberConstants.ONE_NUMBER;
|
|
|
|
|
if (ObjectUtil.isNotEmpty(allCallInfo)) {
|
|
|
|
|
//相同说明是分机号的回调
|
|
|
|
|
if (sessionId.equals(otherLeg) && StrUtil.isNotBlank(rollCallBackDTO.getRecord_file_url())) {
|
|
|
|
|
log.info("分机回调-点呼:sessionId:{},详情:{}", sessionId, rollCallBackDTO);
|
|
|
|
|
allCallInfoRepository.updateByRecord(DefaultNumberConstants.ONE_NUMBER, rollCallBackDTO.getRecord_file_url(), allCallInfo.getId());
|
|
|
|
|
} else {
|
|
|
|
|
log.info("被叫回调-点呼:sessionId:{},详情:{}", sessionId, rollCallBackDTO);
|
|
|
|
|
//拨打线索号的回调
|
|
|
|
|
if (StrUtil.isNotBlank(rollCallBackDTO.getCallee_answer_time())) {
|
|
|
|
|
//表示接通
|
|
|
|
|
//表示接通,更新线索状态
|
|
|
|
|
callClueRepository.updateByStatus(DefaultNumberConstants.TWO_NUMBER, allCallInfo.getClueId());
|
|
|
|
|
allCallInfoRepository.updateByDurationAndStatus(DefaultNumberConstants.TWO_NUMBER, Integer.valueOf(rollCallBackDTO.getDuration()), allCallInfo.getId());
|
|
|
|
|
//更新资源通话状态
|
|
|
|
|
CompletableFuture.runAsync(() -> updateSourceCallStatus(allCallInfo.getClueId(), DefaultNumberConstants.TWO_NUMBER, allCallInfo.getClueType()));
|
|
|
|
|
//TODO 实时扣除话费
|
|
|
|
|
//实时扣除话费
|
|
|
|
|
callCostCount(allCallInfo.getMemberId(), allCallInfo.getClueId(), allCallInfo.getClueType(), Integer.valueOf(rollCallBackDTO.getDuration()), 2);
|
|
|
|
|
} else {
|
|
|
|
|
//更新资源通话状态
|
|
|
|
|