|
|
@@ -54,6 +54,7 @@ import java.util.stream.Collectors;
|
|
|
public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRoboticMapper, CompanyVoiceRobotic> implements ICompanyVoiceRoboticService {
|
|
|
|
|
|
private static final String NODE_RUN_KEY = "aicall:node:run:";
|
|
|
+ public static final String WORKFLOW_SMS_ONE_REDIS_KEY = "workflow:sms:one:";
|
|
|
|
|
|
private final CompanyVoiceRoboticMapper companyVoiceRoboticMapper;
|
|
|
private final AiCallService aiCallService;
|
|
|
@@ -393,6 +394,99 @@ public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRobo
|
|
|
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void workflowSendSmsOne(Long roboticId, Long callerId, ExecutionContext context) {
|
|
|
+ try {
|
|
|
+ CompanyVoiceRobotic robotic = companyVoiceRoboticMapper.selectById(roboticId);
|
|
|
+ CompanyVoiceRoboticCallees callees = companyVoiceRoboticCalleesMapper.selectById(callerId);
|
|
|
+ //callbackUuid(短信回执预留)
|
|
|
+ String callbackUuid = UUID.randomUUID().toString();
|
|
|
+ JSONObject userDataJson = new JSONObject();
|
|
|
+ userDataJson.put("callbackUuid", callbackUuid);
|
|
|
+ userDataJson.put("nodeKey", context.getCurrentNodeKey());
|
|
|
+ userDataJson.put("workflowInstanceId", context.getWorkflowInstanceId());
|
|
|
+ userDataJson.put("callerId", callerId);
|
|
|
+ context.setVariable("smsCallbackUuid", callbackUuid);
|
|
|
+ redisCache2.setCacheObject(WORKFLOW_SMS_ONE_REDIS_KEY + callbackUuid,userDataJson.toJSONString());
|
|
|
+ //构建短信参数
|
|
|
+ CompanyWxClient wxClient = companyWxClientMapper.selectOneByRoboticIdAndUserId(roboticId, callees.getUserId());
|
|
|
+ CompanyVoiceRoboticWx wx = companyVoiceRoboticWxService.getById(wxClient.getRoboticWxId());
|
|
|
+ CompanyWxAccount wxAccount = companyWxAccountService.selectCompanyWxAccountById(wxClient.getAccountId());
|
|
|
+ CompanySmsTemp temp = smsTempService.selectCompanySmsTempById(Long.valueOf(wx.getSmsTempId()));
|
|
|
+ if (temp != null && temp.getStatus().equals(1) && temp.getIsAudit().equals(1)) {
|
|
|
+ CompanySms sms=companySmsService.selectCompanySmsByCompanyId(wxAccount.getCompanyId());
|
|
|
+ if(sms!=null){
|
|
|
+ if(sms.getRemainSmsCount()>0){
|
|
|
+ SmsSendBatchParam smsSendBatchParam = new SmsSendBatchParam();
|
|
|
+ smsSendBatchParam.setCompanyId(wxAccount.getCompanyId());
|
|
|
+ smsSendBatchParam.setCompanyUserId(wxAccount.getCompanyUserId());
|
|
|
+ smsSendBatchParam.setSmsType(temp.getTempType());
|
|
|
+ smsSendBatchParam.setTempCode(temp.getTempCode());
|
|
|
+ smsSendBatchParam.setContent(temp.getContent());
|
|
|
+ smsSendBatchParam.setSenderName(wxAccount.getWxNickName());
|
|
|
+ smsSendBatchParam.setCustomerIds(new Long[]{callees.getUserId()});
|
|
|
+ //记录工作流级短信日志
|
|
|
+ JSONObject runParam = (JSONObject) JSON.toJSON(smsSendBatchParam);
|
|
|
+ runParam.put("temp", temp);
|
|
|
+ CompanyVoiceRoboticCallLogSendmsg addLog = CompanyVoiceRoboticCallLogSendmsg.initCallLog(
|
|
|
+ runParam.toJSONString(),
|
|
|
+ callerId,
|
|
|
+ roboticId,
|
|
|
+ wxAccount.getCompanyId(),
|
|
|
+ wxAccount.getCompanyUserId(),
|
|
|
+ temp.getTempId()
|
|
|
+ );
|
|
|
+ try{
|
|
|
+ sendMsgBatch(temp,smsSendBatchParam);
|
|
|
+ addLog.setStatus(1);
|
|
|
+ addLog.setCallbackUuid(callbackUuid);
|
|
|
+ } catch(Exception ex){
|
|
|
+ addLog.setStatus(3);
|
|
|
+ addLog.setResult(ex.getMessage());
|
|
|
+ log.error("sendMsgOne异常:",ex);
|
|
|
+ }
|
|
|
+ int smsContentLen = getSmsContentLen(smsSendBatchParam);
|
|
|
+ addLog.setContentLen(smsContentLen);
|
|
|
+ companyVoiceRoboticCallLogSendmsgService.asyncInsertCompanyVoiceRoboticCallLog(addLog);
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ log.error("剩余短信数量不足,请充值:task:{},companyId:{}",roboticId,wxAccount.getCompanyId());
|
|
|
+ throw new RuntimeException("剩余短信数量不足,请充值");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ log.error("请充值:task:{},companyId:{}",roboticId,robotic.getCompanyId());
|
|
|
+ throw new RuntimeException("请充值");
|
|
|
+ }
|
|
|
+
|
|
|
+ if(StringUtils.isNotBlank(callees.getRunTaskFlow())){
|
|
|
+ callees.setRunTaskFlow(callees.getRunTaskFlow() + "," + Constants.SEND_MSG);
|
|
|
+ callees.setIsSendMsg(1);
|
|
|
+ }else{
|
|
|
+ callees.setRunTaskFlow(Constants.SEND_MSG);
|
|
|
+ }
|
|
|
+ companyVoiceRoboticCalleesMapper.updateById(callees);
|
|
|
+ Integer unfulfilledTaskCount = companyVoiceRoboticCalleesMapper.getRoboticIsDoneByRoboticIdAndTaskFlow(roboticId, Constants.SEND_MSG);
|
|
|
+ //全部完成才更新任务状态
|
|
|
+ if(unfulfilledTaskCount.compareTo(0) == 0){
|
|
|
+ if(StringUtils.isNotBlank(robotic.getRunTaskFlow())){
|
|
|
+ robotic.setRunTaskFlow(robotic.getRunTaskFlow() + "," + Constants.SEND_MSG);
|
|
|
+ }else{
|
|
|
+ robotic.setRunTaskFlow(Constants.SEND_MSG);
|
|
|
+ }
|
|
|
+ companyVoiceRoboticMapper.updateById(robotic);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.error("模板未审核:task:{},smsTemp:{}", roboticId, temp);
|
|
|
+ throw new RuntimeException("模板未审核");
|
|
|
+ }
|
|
|
+ } catch (Exception ex) {
|
|
|
+ log.error("workflowSendSmsOne 异常 roboticId:{} callerId:{}",roboticId, callerId, ex);
|
|
|
+ throw new RuntimeException(ex);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
@Synchronized
|
|
|
public void sendMsgOne(Long roboticId,Long callerId){
|
|
|
try{
|