lmx 3 天之前
父節點
當前提交
5a7cfac7e8

+ 3 - 0
fs-service/src/main/java/com/fs/common/service/impl/SmsServiceImpl.java

@@ -653,6 +653,9 @@ public class SmsServiceImpl implements ISmsService
             if(StringUtils.isNotEmpty(param.getCardUrl())){
                 content=content.replace("${sms.cardUrl}",param.getCardUrl());
             }
+            if(StringUtils.isNotEmpty(param.getCardUrl())){
+                content=content.replace("${sms.cardUrl}",param.getCardUrl());
+            }
 
             String urls= null;
             // 通知类的不加 退订回T 只有营销类的加

+ 2 - 0
fs-service/src/main/java/com/fs/company/domain/CompanyVoiceRobotic.java

@@ -117,4 +117,6 @@ public class CompanyVoiceRobotic {
 
     @TableField(exist = false)
     private Map<String, Object> params;
+    //配置短信模板id
+    private Integer smsTempId;
 }

+ 6 - 4
fs-service/src/main/java/com/fs/company/domain/CompanyVoiceRoboticCallees.java

@@ -49,12 +49,14 @@ public class CompanyVoiceRoboticCallees{
     private Integer result;
     @Excel(name = "通话记录")
     private String json;
-
+    //任务流程
     private String taskFlow;
-
+    //已经执行流程
     private String runTaskFlow;
-
+    //三方任务ID
     private Long taskId;
-
+    //三方任务名称
     private String taskName;
+    //是否已发送短信:-1:不需要发送, 0:未发送,1:已发送
+    private Integer isSendMsg;
 }

+ 1 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyWxClientMapper.java

@@ -74,4 +74,5 @@ public interface CompanyWxClientMapper extends BaseMapper<CompanyWxClient> {
     CompanyWxClient selectWx(@Param("accountId") Long accountId, @Param("v3") String v3);
 
     List<CompanyWxClient> selectListByRoboticId(@Param("roboticId") Long roboticId);
+    CompanyWxClient selectOneByRoboticIdAndUserId(@Param("roboticId") Long roboticId,@Param("customerId") Long customerId);
 }

+ 72 - 15
fs-service/src/main/java/com/fs/company/service/impl/CompanyVoiceRoboticServiceImpl.java

@@ -11,13 +11,17 @@ import com.fs.aicall.domain.result.CalltaskcreateaiCustomizeResult;
 import com.fs.aicall.service.AiCallService;
 import com.fs.common.annotation.DataScope;
 import com.fs.common.constant.Constants;
+import com.fs.common.core.domain.R;
 import com.fs.common.core.redis.RedisCacheT;
 import com.fs.common.exception.base.BaseException;
+import com.fs.common.service.impl.SmsServiceImpl;
 import com.fs.common.utils.*;
 import com.fs.company.domain.*;
 import com.fs.company.mapper.CompanyVoiceRoboticCalleesMapper;
 import com.fs.company.mapper.CompanyVoiceRoboticMapper;
 import com.fs.company.mapper.CompanyVoiceRoboticWxMapper;
+import com.fs.company.mapper.CompanyWxClientMapper;
+import com.fs.company.service.ICompanySmsService;
 import com.fs.company.service.ICompanyVoiceRoboticService;
 import com.fs.company.service.ICompanyWxAccountService;
 import com.fs.company.vo.AddWxClientVo;
@@ -26,10 +30,12 @@ import com.fs.company.vo.RoboticWxAccountVo;
 import com.fs.company.vo.RoboticWxVo;
 import com.fs.crm.domain.CrmCustomer;
 import com.fs.crm.mapper.CrmCustomerMapper;
+import com.fs.crm.param.SmsSendBatchParam;
 import com.fs.crm.service.impl.CrmCustomerServiceImpl;
 import com.fs.system.mapper.SysDictDataMapper;
 import com.fs.system.service.ISysConfigService;
 import lombok.AllArgsConstructor;
+import lombok.Synchronized;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
@@ -69,6 +75,10 @@ public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRobo
 
     private final SysDictDataMapper sysDictDataMapper;
 
+    private final SmsServiceImpl smsService;
+    private final CompanySmsTempServiceImpl smsTempService;
+    private final ICompanySmsService companySmsService;
+    private final CompanyWxClientMapper companyWxClientMapper;
     /**
      * 查询机器人外呼任务
      *
@@ -253,32 +263,79 @@ public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRobo
 
     }
 
+    @Synchronized
     public void sendMsgOne(Long roboticId,Long callerId){
         try{
             log.info("开始发送短信*************");
             CompanyVoiceRobotic robotic = companyVoiceRoboticMapper.selectById(roboticId);
             CompanyVoiceRoboticCallees callees = companyVoiceRoboticCalleesMapper.selectById(callerId);
+            CompanyWxClient wxClient = companyWxClientMapper.selectOneByRoboticIdAndUserId(roboticId,callees.getUserId());
+            CompanyWxAccount wxAccount = companyWxAccountService.selectCompanyWxAccountById(wxClient.getAccountId());
+            CompanySmsTemp temp= smsTempService.selectCompanySmsTempById(Long.valueOf(robotic.getSmsTempId()));
+            if(temp!=null&&temp.getStatus().equals(1)&&temp.getIsAudit().equals(1)){
+                CompanySms sms=companySmsService.selectCompanySmsByCompanyId(robotic.getCompanyId());
+                if(sms!=null){
+                    if(sms.getRemainSmsCount()>0){
+                        SmsSendBatchParam smsSendBatchParam=new SmsSendBatchParam();
+                        smsSendBatchParam.setSmsType(temp.getTempType());
+                        smsSendBatchParam.setCompanyId(robotic.getCompanyId());
+                        smsSendBatchParam.setCompanyUserId(robotic.getCompanyUserId());
+                        smsSendBatchParam.setTempCode(temp.getTempCode());
+                        Long[] ids=new Long[1];
+                        ids[0]=callees.getUserId();
+                        smsSendBatchParam.setCustomerIds(ids);
+                        smsSendBatchParam.setContent(temp.getContent());
+                        smsSendBatchParam.setSenderName(wxAccount.getWxNickName());
+                        sendMsgBatch(temp,smsSendBatchParam);
+                        //如果选择的是名片短链接模版  update by qxj 2023年05月26日10:45:28
+//                        if(StringUtils.isNotEmpty(param.getCardUrl())){
+//                            smsSendBatchParam.setCardUrl(param.getCardUrl());
+//                        }
+//                        batchSmsOp(temp,smsSendBatchParam);
+//                        return R.ok("短信提交成功,正在发送中...");
+                    }
+                    else{
+                        log.error("剩余短信数量不足,请充值:task:{},companyId:{}",roboticId,robotic.getCompanyId());
+                        throw new RuntimeException("剩余短信数量不足,请充值");
+                    }
+                }
+                else{
+                    log.error("请充值:task:{},companyId:{}",roboticId,robotic.getCompanyId());
+                    throw new RuntimeException("请充值");
+                }
 
-            //todo 发送短信逻辑
-
-
-            if(StringUtils.isNotBlank(callees.getRunTaskFlow())){
-                callees.setRunTaskFlow(callees.getRunTaskFlow() + "," + Constants.SEND_MSG);
-            }else{
-                callees.setRunTaskFlow(Constants.SEND_MSG);
+                if(StringUtils.isNotBlank(callees.getRunTaskFlow())){
+                    callees.setRunTaskFlow(callees.getRunTaskFlow() + "," + Constants.SEND_MSG);
+                    callees.setIsSendMsg(1);
+                }else{
+                    callees.setRunTaskFlow(Constants.SEND_MSG);
+                }
+                companyVoiceRoboticCalleesMapper.updateById(callees);
+                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("模板未审核");
             }
-            companyVoiceRoboticCalleesMapper.updateById(callees);
 
-            if(StringUtils.isNotBlank(robotic.getRunTaskFlow())){
-                robotic.setRunTaskFlow(robotic.getRunTaskFlow() + "," + Constants.SEND_MSG);
-            }else{
-                robotic.setRunTaskFlow(Constants.SEND_MSG);
-            }
-            companyVoiceRoboticMapper.updateById(robotic);
         }catch(Exception ex){
-
+            log.error("sendMsgOne异常,roboticId:{},callerId :{}\n",roboticId,callerId,ex);
+            throw new RuntimeException(ex);
         }
     }
+
+    /**
+     * 发送短信
+     * @param temp
+     * @param param
+     */
+    public void sendMsgBatch(CompanySmsTemp temp, SmsSendBatchParam param){
+        smsService.batchSmsOp(temp, param);
+    }
     /**
      * 修改机器人外呼任务
      *

+ 1 - 0
fs-service/src/main/java/com/fs/crm/param/SmsSendBatchParam.java

@@ -22,6 +22,7 @@ public class SmsSendBatchParam implements Serializable {
     private String content;
 
     private String cardUrl; //名片链接
+    private String senderName;
 
 
 }

+ 4 - 0
fs-service/src/main/resources/mapper/company/CompanyWxClientMapper.xml

@@ -167,4 +167,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectListByRoboticId" resultType="com.fs.company.domain.CompanyWxClient">
         select * from company_wx_client where robotic_id = #{roboticId}
     </select>
+
+    <select id="selectOneByRoboticIdAndUserId" resultType="com.fs.company.domain.CompanyWxClient">
+        select * from company_wx_client where robotic_id = #{roboticId} and customer_id = #{customerId}
+    </select>
 </mapper>

+ 15 - 10
fs-wx-task/src/main/java/com/fs/app/service/WxTaskService.java

@@ -393,19 +393,24 @@ public class WxTaskService {
         }
         log.info("单人单任务执行ROBOTIC-ID:{},caller_id:{},当前需要执行任务:{}", roboticId,callerId, nextTask);
         String nextTaskOptimized = null;
-           switch (nextTask) {
-               case Constants.CELL_PHONE:
-                   companyVoiceRoboticService.callPhoneOne(roboticId, callerId);
-                   nextTaskOptimized = getNextTaskOptimized(data.getTaskFlow(), data.getRunTaskFlow() + "," + Constants.CELL_PHONE);
-                   break;
+        try{
+            switch (nextTask) {
+                case Constants.CELL_PHONE:
+                    companyVoiceRoboticService.callPhoneOne(roboticId, callerId);
+                    nextTaskOptimized = getNextTaskOptimized(data.getTaskFlow(), data.getRunTaskFlow() + "," + Constants.CELL_PHONE);
+                    break;
 //            case Constants.ADD_WX:
 //                companyVoiceRoboticService.addWxOne();
 //                break;
-               case Constants.SEND_MSG:
-                   companyVoiceRoboticService.sendMsgOne(roboticId, callerId);
-                   nextTaskOptimized = getNextTaskOptimized(data.getTaskFlow(), data.getRunTaskFlow() + "," + Constants.SEND_MSG);
-                   break;
-           }
+                case Constants.SEND_MSG:
+                    companyVoiceRoboticService.sendMsgOne(roboticId, callerId);
+                    nextTaskOptimized = getNextTaskOptimized(data.getTaskFlow(), data.getRunTaskFlow() + "," + Constants.SEND_MSG);
+                    break;
+            }
+        } catch (Exception ex){
+            log.error("执行任务异常,roboticId:{},callerId:{},nextTask:{}",roboticId,callerId,nextTask,ex);
+        }
+
         if(StringUtils.isNotBlank(nextTaskOptimized)){
             return nextTaskOptimized;
         }else{