|
@@ -1,9 +1,9 @@
|
|
package com.care.outcall.schedule;
|
|
package com.care.outcall.schedule;
|
|
|
|
|
|
|
|
|
|
-import com.care.outcall.entity.KoalaOlderDto;
|
|
|
|
-import com.care.outcall.entity.KoalaOutCallBill;
|
|
|
|
-import com.care.outcall.entity.KoalaLogDomain;
|
|
|
|
|
|
+import com.care.outcall.vo.CallOlderVO;
|
|
|
|
+import com.care.outcall.entity.CcTrafficBilled;
|
|
|
|
+import com.care.outcall.entity.CcKoalaLog;
|
|
import com.care.outcall.mapper.KoalaOutCallDao;
|
|
import com.care.outcall.mapper.KoalaOutCallDao;
|
|
import com.care.common.util.CommonConfUtil;
|
|
import com.care.common.util.CommonConfUtil;
|
|
import com.care.common.util.DateUtils;
|
|
import com.care.common.util.DateUtils;
|
|
@@ -62,59 +62,59 @@ public class KoalaOutCallBillSchuding {
|
|
* @throws Exception
|
|
* @throws Exception
|
|
*/
|
|
*/
|
|
private void buildBill() throws Exception {
|
|
private void buildBill() throws Exception {
|
|
- Map<String, List<KoalaLogDomain>> map = new HashMap();
|
|
|
|
|
|
+ Map<String, List<CcKoalaLog>> map = new HashMap();
|
|
List<Map<String, String>> idList = new ArrayList<>();
|
|
List<Map<String, String>> idList = new ArrayList<>();
|
|
List<String> makeCallIds = new ArrayList<>();
|
|
List<String> makeCallIds = new ArrayList<>();
|
|
//获取所有未计算的话单
|
|
//获取所有未计算的话单
|
|
- List<KoalaLogDomain> logList = koalaOutCallDao.getAllBillInfo();
|
|
|
|
|
|
+ List<CcKoalaLog> logList = koalaOutCallDao.getAllBillInfo();
|
|
//重新构建话单日志结构
|
|
//重新构建话单日志结构
|
|
reBuildBill(map, logList);
|
|
reBuildBill(map, logList);
|
|
|
|
|
|
//遍历每一条sessionId
|
|
//遍历每一条sessionId
|
|
for (String sid : map.keySet()) {
|
|
for (String sid : map.keySet()) {
|
|
- List<KoalaLogDomain> logDomains = map.get(sid);
|
|
|
|
|
|
+ List<CcKoalaLog> logDomains = map.get(sid);
|
|
//1:只拼接会话结束的日志,通话成功的
|
|
//1:只拼接会话结束的日志,通话成功的
|
|
//描述事件的生存周期:1.坐席振铃,2.坐席接通,3.客户振铃,4.客户接通,5.坐席挂断,6.客户挂断,7.未接通
|
|
//描述事件的生存周期:1.坐席振铃,2.坐席接通,3.客户振铃,4.客户接通,5.坐席挂断,6.客户挂断,7.未接通
|
|
if (logDomains.size() > 2) {
|
|
if (logDomains.size() > 2) {
|
|
//构建大有话单 关于成功话单部分
|
|
//构建大有话单 关于成功话单部分
|
|
- KoalaOutCallBill koalaOutCallBill = buildDataUBill(sid, logDomains);
|
|
|
|
- if (koalaOutCallBill == null) {
|
|
|
|
|
|
+ CcTrafficBilled ccTrafficBilled = buildDataUBill(sid, logDomains);
|
|
|
|
+ if (ccTrafficBilled == null) {
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
- if (StringUtils.isEmpty(koalaOutCallBill.getOutCallRadioStatus())) {
|
|
|
|
- koalaOutCallBill.setOutCallRadioStatus("1");
|
|
|
|
|
|
+ if (StringUtils.isEmpty(ccTrafficBilled.getOutCallRadioStatus())) {
|
|
|
|
+ ccTrafficBilled.setOutCallRadioStatus("1");
|
|
}
|
|
}
|
|
- koalaOutCallBill.setCallResultStatus("1");
|
|
|
|
|
|
+ ccTrafficBilled.setCallResultStatus("1");
|
|
//判断话单表是否已存在该数据,不存在则新增,存在则更新状态
|
|
//判断话单表是否已存在该数据,不存在则新增,存在则更新状态
|
|
- int count = koalaOutCallDao.checkSession(koalaOutCallBill.getSessionId());
|
|
|
|
|
|
+ int count = koalaOutCallDao.checkSession(ccTrafficBilled.getSessionId());
|
|
if (count == 0) {
|
|
if (count == 0) {
|
|
//不存在则新增
|
|
//不存在则新增
|
|
try {
|
|
try {
|
|
- koalaOutCallDao.addBill(koalaOutCallBill);
|
|
|
|
|
|
+ koalaOutCallDao.addBill(ccTrafficBilled);
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
logger.error("生成考拉话单异常,信息为:" + e.getMessage());
|
|
logger.error("生成考拉话单异常,信息为:" + e.getMessage());
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
- koalaOutCallDao.updatePhoneBillBySessionIdNew(koalaOutCallBill);
|
|
|
|
|
|
+ koalaOutCallDao.updatePhoneBillBySessionIdNew(ccTrafficBilled);
|
|
}
|
|
}
|
|
Map<String, String> idMap = new HashMap<>();
|
|
Map<String, String> idMap = new HashMap<>();
|
|
idMap.put("id", sid);
|
|
idMap.put("id", sid);
|
|
idList.add(idMap);
|
|
idList.add(idMap);
|
|
} else if (logDomains.size() >= 1 && logDomains.size() <= 2) {
|
|
} else if (logDomains.size() >= 1 && logDomains.size() <= 2) {
|
|
//构建大有话单 关于未接通的话单部分
|
|
//构建大有话单 关于未接通的话单部分
|
|
- KoalaOutCallBill koalaOutCallBill = buildDataUBill(sid, logDomains);
|
|
|
|
- if (koalaOutCallBill == null) {
|
|
|
|
|
|
+ CcTrafficBilled ccTrafficBilled = buildDataUBill(sid, logDomains);
|
|
|
|
+ if (ccTrafficBilled == null) {
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
- koalaOutCallBill.setOrigOutCallStatus("2");
|
|
|
|
- koalaOutCallBill.setOutCallRadioStatus("2");
|
|
|
|
- koalaOutCallBill.setOutCallStatus("2");
|
|
|
|
|
|
+ ccTrafficBilled.setOrigOutCallStatus("2");
|
|
|
|
+ ccTrafficBilled.setOutCallRadioStatus("2");
|
|
|
|
+ ccTrafficBilled.setOutCallStatus("2");
|
|
|
|
|
|
- int count = koalaOutCallDao.checkSession(koalaOutCallBill.getSessionId());
|
|
|
|
|
|
+ int count = koalaOutCallDao.checkSession(ccTrafficBilled.getSessionId());
|
|
if (count == 0) {
|
|
if (count == 0) {
|
|
- koalaOutCallDao.addBill(koalaOutCallBill);
|
|
|
|
|
|
+ koalaOutCallDao.addBill(ccTrafficBilled);
|
|
} else {
|
|
} else {
|
|
- koalaOutCallDao.updatePhoneBillBySessionIdNew(koalaOutCallBill);
|
|
|
|
|
|
+ koalaOutCallDao.updatePhoneBillBySessionIdNew(ccTrafficBilled);
|
|
}
|
|
}
|
|
Map<String, String> idMap = new HashMap<>();
|
|
Map<String, String> idMap = new HashMap<>();
|
|
idMap.put("id", sid);
|
|
idMap.put("id", sid);
|
|
@@ -130,9 +130,9 @@ public class KoalaOutCallBillSchuding {
|
|
}
|
|
}
|
|
|
|
|
|
//构建大有话单
|
|
//构建大有话单
|
|
- private synchronized KoalaOutCallBill buildDataUBill(String sessionId, List<KoalaLogDomain> logDomains) {
|
|
|
|
|
|
+ private synchronized CcTrafficBilled buildDataUBill(String sessionId, List<CcKoalaLog> logDomains) {
|
|
try {
|
|
try {
|
|
- KoalaOutCallBill koalaOutCallBill = new KoalaOutCallBill();
|
|
|
|
|
|
+ CcTrafficBilled ccTrafficBilled = new CcTrafficBilled();
|
|
|
|
|
|
//通话计费开始时间
|
|
//通话计费开始时间
|
|
String callStartTime = "";
|
|
String callStartTime = "";
|
|
@@ -158,12 +158,12 @@ public class KoalaOutCallBillSchuding {
|
|
String dialingTime = "";
|
|
String dialingTime = "";
|
|
//话单变量,标记该话单为正确话单
|
|
//话单变量,标记该话单为正确话单
|
|
boolean isBill = false;
|
|
boolean isBill = false;
|
|
- for (KoalaLogDomain logDomain : logDomains) {
|
|
|
|
|
|
+ for (CcKoalaLog logDomain : logDomains) {
|
|
tenantId = logDomain.getTenantId();
|
|
tenantId = logDomain.getTenantId();
|
|
calledNumber = logDomain.getPhone();
|
|
calledNumber = logDomain.getPhone();
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- for (KoalaLogDomain logDomain : logDomains) {
|
|
|
|
|
|
+ for (CcKoalaLog logDomain : logDomains) {
|
|
//通话计费开始时间
|
|
//通话计费开始时间
|
|
if ("1".equals(logDomain.getEventStatus())) {
|
|
if ("1".equals(logDomain.getEventStatus())) {
|
|
clientAlterTime = logDomain.getReceiveTime();
|
|
clientAlterTime = logDomain.getReceiveTime();
|
|
@@ -213,51 +213,51 @@ public class KoalaOutCallBillSchuding {
|
|
//构建考拉外呼录音文件路径
|
|
//构建考拉外呼录音文件路径
|
|
String audioUrl = audioUri + "/" + tenantId + "/" + audioCreateTime + "/" + sessionId + "_" + calledNumber + ".mp3";
|
|
String audioUrl = audioUri + "/" + tenantId + "/" + audioCreateTime + "/" + sessionId + "_" + calledNumber + ".mp3";
|
|
//根据 sessionId 获取 sessionId 对应的流水号,和电信任务的具体信息
|
|
//根据 sessionId 获取 sessionId 对应的流水号,和电信任务的具体信息
|
|
- List<KoalaOlderDto> koalaOlderDtoList = koalaOutCallDao.getOlderInfoBySessionId(sessionId);
|
|
|
|
- if (koalaOlderDtoList == null || koalaOlderDtoList.isEmpty()) {
|
|
|
|
|
|
+ List<CallOlderVO> callOlderVOList = koalaOutCallDao.getOlderInfoBySessionId(sessionId);
|
|
|
|
+ if (callOlderVOList == null || callOlderVOList.isEmpty()) {
|
|
logger.info("没有找到 sessionId={} 对应信息的流水号信息", sessionId);
|
|
logger.info("没有找到 sessionId={} 对应信息的流水号信息", sessionId);
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
- KoalaOlderDto koalaOlderDto = getNewOne(koalaOlderDtoList);
|
|
|
|
|
|
+ CallOlderVO callOlderVO = getNewOne(callOlderVOList);
|
|
|
|
|
|
//新增,内容----
|
|
//新增,内容----
|
|
//屏蔽内容 ----
|
|
//屏蔽内容 ----
|
|
- KoalaLogDomain logDomain = logDomains.get(0);
|
|
|
|
|
|
+ CcKoalaLog logDomain = logDomains.get(0);
|
|
//该会话的坐席号
|
|
//该会话的坐席号
|
|
String agentId = logDomain.getAgentId();
|
|
String agentId = logDomain.getAgentId();
|
|
//该会话的企业id
|
|
//该会话的企业id
|
|
- koalaOutCallBill.setPhone(koalaOlderDto.getPhone());
|
|
|
|
- koalaOutCallBill.setCallStartTime(callStartTime);
|
|
|
|
- koalaOutCallBill.setOutCallStatus("1");
|
|
|
|
- koalaOutCallBill.setOrigOutCallStatus("1");
|
|
|
|
- koalaOutCallBill.setCallResultStatus(callResultStatus);
|
|
|
|
- koalaOutCallBill.setCallEndTime(callEndTime);
|
|
|
|
- koalaOutCallBill.setAudioUrl(audioUrl);
|
|
|
|
- koalaOutCallBill.setOutCallRadioStatus("2");//录件获取状态。1未获取,2已获取
|
|
|
|
- koalaOutCallBill.setOlderId(koalaOlderDto.getOlderId());
|
|
|
|
- koalaOutCallBill.setOrderId(koalaOlderDto.getOrderId());
|
|
|
|
- koalaOutCallBill.setStationId(koalaOlderDto.getStationId());
|
|
|
|
- koalaOutCallBill.setCalledId(koalaOlderDto.getCalledId());
|
|
|
|
- koalaOutCallBill.setCalledType(koalaOlderDto.getCalledType());
|
|
|
|
- koalaOutCallBill.setSessionId(sessionId);
|
|
|
|
- koalaOutCallBill.setTeleAgentId(agentId);
|
|
|
|
|
|
+ ccTrafficBilled.setPhone(callOlderVO.getPhone());
|
|
|
|
+ ccTrafficBilled.setCallStartTime(callStartTime);
|
|
|
|
+ ccTrafficBilled.setOutCallStatus("1");
|
|
|
|
+ ccTrafficBilled.setOrigOutCallStatus("1");
|
|
|
|
+ ccTrafficBilled.setCallResultStatus(callResultStatus);
|
|
|
|
+ ccTrafficBilled.setCallEndTime(callEndTime);
|
|
|
|
+ ccTrafficBilled.setAudioUrl(audioUrl);
|
|
|
|
+ ccTrafficBilled.setOutCallRadioStatus("2");//录件获取状态。1未获取,2已获取
|
|
|
|
+ ccTrafficBilled.setOlderId(callOlderVO.getOlderId());
|
|
|
|
+ ccTrafficBilled.setOrderId(callOlderVO.getOrderId());
|
|
|
|
+ ccTrafficBilled.setStationId(callOlderVO.getStationId());
|
|
|
|
+ ccTrafficBilled.setCalledId(callOlderVO.getCalledId());
|
|
|
|
+ ccTrafficBilled.setCalledType(callOlderVO.getCalledType());
|
|
|
|
+ ccTrafficBilled.setSessionId(sessionId);
|
|
|
|
+ ccTrafficBilled.setTeleAgentId(agentId);
|
|
|
|
|
|
- koalaOutCallBill.setClientAlertStartTime(clientAlterTime);
|
|
|
|
|
|
+ ccTrafficBilled.setClientAlertStartTime(clientAlterTime);
|
|
if (callFlag && !unCalledFlag) {
|
|
if (callFlag && !unCalledFlag) {
|
|
- koalaOutCallBill.setCallDuration("0");
|
|
|
|
|
|
+ ccTrafficBilled.setCallDuration("0");
|
|
} else {
|
|
} else {
|
|
try {
|
|
try {
|
|
long callDuration = DateUtils.compute_yyyy_MM_ddHHmmssTime(callStartTime, callEndTime);
|
|
long callDuration = DateUtils.compute_yyyy_MM_ddHHmmssTime(callStartTime, callEndTime);
|
|
- koalaOutCallBill.setCallDuration(String.valueOf(callDuration));
|
|
|
|
|
|
+ ccTrafficBilled.setCallDuration(String.valueOf(callDuration));
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
logger.error("时间处理异常,异常信息为==>" + e.getMessage());
|
|
logger.error("时间处理异常,异常信息为==>" + e.getMessage());
|
|
- koalaOutCallBill.setCallDuration("0");
|
|
|
|
|
|
+ ccTrafficBilled.setCallDuration("0");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- koalaOutCallBill.setHangupType(hangupType);
|
|
|
|
- koalaOutCallBill.setOrgId(koalaOlderDto.getOrgId());
|
|
|
|
- return koalaOutCallBill;
|
|
|
|
|
|
+ ccTrafficBilled.setHangupType(hangupType);
|
|
|
|
+ ccTrafficBilled.setOrgId(callOlderVO.getOrgId());
|
|
|
|
+ return ccTrafficBilled;
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
logger.error("计算话单失败,失败原因={}", e.getMessage());
|
|
logger.error("计算话单失败,失败原因={}", e.getMessage());
|
|
//e.printStackTrace();
|
|
//e.printStackTrace();
|
|
@@ -266,19 +266,19 @@ public class KoalaOutCallBillSchuding {
|
|
}
|
|
}
|
|
|
|
|
|
//重新构建日志格式,去重
|
|
//重新构建日志格式,去重
|
|
- private void reBuildBill(Map<String, List<KoalaLogDomain>> map, List<KoalaLogDomain> logList) {
|
|
|
|
|
|
+ private void reBuildBill(Map<String, List<CcKoalaLog>> map, List<CcKoalaLog> logList) {
|
|
Set<String> set = new HashSet<>();
|
|
Set<String> set = new HashSet<>();
|
|
Map<String, Set<String>> noRepeatSetMap = new HashMap<>();
|
|
Map<String, Set<String>> noRepeatSetMap = new HashMap<>();
|
|
|
|
|
|
//所有sessionId放入内存
|
|
//所有sessionId放入内存
|
|
- for (KoalaLogDomain logDomain : logList) {
|
|
|
|
|
|
+ for (CcKoalaLog logDomain : logList) {
|
|
set.add(logDomain.getSessionId());
|
|
set.add(logDomain.getSessionId());
|
|
noRepeatSetMap.put(logDomain.getSessionId(), null);
|
|
noRepeatSetMap.put(logDomain.getSessionId(), null);
|
|
}
|
|
}
|
|
//遍历sessionId
|
|
//遍历sessionId
|
|
for (String sid : set) {
|
|
for (String sid : set) {
|
|
- List<KoalaLogDomain> resulList = new ArrayList<>();
|
|
|
|
- for (KoalaLogDomain logDomain : logList) {
|
|
|
|
|
|
+ List<CcKoalaLog> resulList = new ArrayList<>();
|
|
|
|
+ for (CcKoalaLog logDomain : logList) {
|
|
if (sid.equals(logDomain.getSessionId())) {
|
|
if (sid.equals(logDomain.getSessionId())) {
|
|
//去重
|
|
//去重
|
|
String apiMethod = logDomain.getApiMethod();
|
|
String apiMethod = logDomain.getApiMethod();
|
|
@@ -299,7 +299,7 @@ public class KoalaOutCallBillSchuding {
|
|
boolean isBill2 = false;
|
|
boolean isBill2 = false;
|
|
//判断是不是可计算的话单
|
|
//判断是不是可计算的话单
|
|
//同一个sessionId话单数据中,如果既有振铃又有挂断,则表示是可计算的话单
|
|
//同一个sessionId话单数据中,如果既有振铃又有挂断,则表示是可计算的话单
|
|
- for (KoalaLogDomain logDomain : resulList) {
|
|
|
|
|
|
+ for (CcKoalaLog logDomain : resulList) {
|
|
if ("4,5,6,7".contains(logDomain.getEventStatus())) {
|
|
if ("4,5,6,7".contains(logDomain.getEventStatus())) {
|
|
isBill1 = true;
|
|
isBill1 = true;
|
|
}
|
|
}
|
|
@@ -317,14 +317,14 @@ public class KoalaOutCallBillSchuding {
|
|
noRepeatSetMap.clear();
|
|
noRepeatSetMap.clear();
|
|
}
|
|
}
|
|
|
|
|
|
- private KoalaOlderDto getNewOne(List<KoalaOlderDto> koalaOlderDtoList) {
|
|
|
|
- koalaOlderDtoList.sort(new Comparator<KoalaOlderDto>() {
|
|
|
|
|
|
+ private CallOlderVO getNewOne(List<CallOlderVO> callOlderVOList) {
|
|
|
|
+ callOlderVOList.sort(new Comparator<CallOlderVO>() {
|
|
@Override
|
|
@Override
|
|
- public int compare(KoalaOlderDto o1, KoalaOlderDto o2) {
|
|
|
|
|
|
+ public int compare(CallOlderVO o1, CallOlderVO o2) {
|
|
return Integer.valueOf(String.valueOf(Long.parseLong(o2.getCreateTime()) - Long.parseLong(o1.getCreateTime())));
|
|
return Integer.valueOf(String.valueOf(Long.parseLong(o2.getCreateTime()) - Long.parseLong(o1.getCreateTime())));
|
|
}
|
|
}
|
|
});
|
|
});
|
|
- return koalaOlderDtoList.get(0);
|
|
|
|
|
|
+ return callOlderVOList.get(0);
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|