Pārlūkot izejas kodu

cid流程完善短信发送

zyy 2 nedēļas atpakaļ
vecāks
revīzija
48b9e791bf

+ 1 - 1
fs-service/src/main/java/com/fs/company/service/ICompanyVoiceRoboticService.java

@@ -48,7 +48,7 @@ public interface ICompanyVoiceRoboticService extends IService<CompanyVoiceRoboti
     CalltaskcreateaiCustomizeResult callPhoneOne(Long roboticId,Long callerId);
     CalltaskcreateaiCustomizeResult workflowCallPhoneOne(Long roboticId, Long callerId, ExecutionContext context, AiCallConfigVO callConfigVo);
     void sendMsgOne(Long roboticId,Long callerId);
-    void workflowSendSmsOne(Long roboticId, Long callerId, ExecutionContext context);
+    void workflowSendSmsOne(Long roboticId, Long callerId, ExecutionContext context,Long smsTempId);
 
     /**
      * 修改机器人外呼任务

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

@@ -392,7 +392,7 @@ public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRobo
     }
 
     @Override
-    public void workflowSendSmsOne(Long roboticId, Long callerId, ExecutionContext context) {
+    public void workflowSendSmsOne(Long roboticId, Long callerId, ExecutionContext context,Long smsTempId) {
         try {
             CompanyVoiceRobotic robotic = companyVoiceRoboticMapper.selectById(roboticId);
             CompanyVoiceRoboticCallees callees = companyVoiceRoboticCalleesMapper.selectById(callerId);
@@ -409,7 +409,7 @@ public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRobo
             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()));
+            CompanySmsTemp temp = smsTempService.selectCompanySmsTempById(smsTempId);
             if (temp != null && temp.getStatus().equals(1) && temp.getIsAudit().equals(1)) {
                 CompanySms sms=companySmsService.selectCompanySmsByCompanyId(wxAccount.getCompanyId());
                 if(sms!=null){

+ 29 - 21
fs-service/src/main/java/com/fs/company/service/impl/call/node/AiSendMsgTaskNode.java

@@ -1,6 +1,7 @@
 package com.fs.company.service.impl.call.node;
 
 import com.alibaba.fastjson.JSONObject;
+import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.spring.SpringUtils;
 import com.fs.company.domain.CompanyAiWorkflowExec;
 import com.fs.company.domain.CompanyVoiceRoboticBusiness;
@@ -11,15 +12,19 @@ import com.fs.company.param.ExecutionContext;
 import com.fs.company.service.ICompanyVoiceRoboticService;
 import com.fs.company.service.IWorkflowNode;
 import com.fs.company.vo.AiCallConfigVO;
+import com.fs.company.vo.AiCallWorkflowConditionVo;
+import com.fs.company.vo.AiSendMsgConfigVO;
 import com.fs.company.vo.ExecutionResult;
 import com.fs.enums.ExecutionStatusEnum;
 import com.fs.enums.NodeTypeEnum;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author MixLiu
@@ -30,7 +35,7 @@ import java.util.Map;
 public class AiSendMsgTaskNode extends AbstractWorkflowNode {
     private static final CompanyWorkflowNodeMapper companyWorkflowNodeMapper = SpringUtils.getBean(CompanyWorkflowNodeMapper.class);
 
-    private ICompanyVoiceRoboticService companyVoiceRoboticService;
+    private static final ICompanyVoiceRoboticService companyVoiceRoboticService = SpringUtils.getBean(ICompanyVoiceRoboticService.class);
 
     public AiSendMsgTaskNode(String nodeKey, String nodeName, Map<String, Object> properties) {
         super(nodeKey, nodeName, properties);
@@ -44,12 +49,24 @@ public class AiSendMsgTaskNode extends AbstractWorkflowNode {
      */
     @Override
     protected ExecutionResult doContinue(ExecutionContext context) {
-        // 短信发送不需要回调,直接执行下一个节点
-        List<CompanyWorkflowEdge> edges = companyWorkflowEdgeMapper.selectListByWorkflowIdAndNodeKey(
-                context.getVariable("workflowId", Long.class), nodeKey);
-        
-        if (edges != null && !edges.isEmpty()) {
-            super.runNextNode(context, edges.get(0));
+        CompanyAiWorkflowExec exec = companyAiWorkflowExecMapper.selectByWorkflowInstanceId(context.getWorkflowInstanceId());
+        List<CompanyWorkflowEdge> edges = companyWorkflowEdgeMapper.selectListByWorkflowIdAndNodeKey(exec.getWorkflowId(), nodeKey);
+        //发送短信成功
+        if (true){
+            List<CompanyWorkflowEdge> success = edges.stream().filter(a ->
+                            StringUtils.isNotBlank(a.getConditionExpr()) && JSONObject.parseArray(a.getConditionExpr(), AiCallWorkflowConditionVo.class).get(0).isSendStatus())
+                    .collect(Collectors.toList());
+            if (!success.isEmpty() && nodeKey.equals(exec.getCurrentNodeKey())) {
+                super.runNextNode(context, success.get(0));
+            }
+        }else {
+            //发送短信失败
+            List<CompanyWorkflowEdge> fail = edges.stream().filter(a ->
+                            StringUtils.isNotBlank(a.getConditionExpr()) && !JSONObject.parseArray(a.getConditionExpr(), AiCallWorkflowConditionVo.class).get(0).isSendStatus())
+                    .collect(Collectors.toList());
+            if (!fail.isEmpty() && nodeKey.equals(exec.getCurrentNodeKey())) {
+                super.runNextNode(context, fail.get(0));
+            }
         }
         return null;
     }
@@ -65,6 +82,10 @@ public class AiSendMsgTaskNode extends AbstractWorkflowNode {
     protected ExecutionResult doExecute(ExecutionContext context) {
         try {
             Thread.sleep(1000L);
+            //设置短信模版
+            CompanyWorkflowNode node = context.getVariable("currentNode", CompanyWorkflowNode.class)==null? getNodeByKey(nodeKey):context.getVariable("currentNode", CompanyWorkflowNode.class);
+            String nodeConfig = node.getNodeConfig();
+            AiSendMsgConfigVO configVO = JSONObject.parseObject(nodeConfig, AiSendMsgConfigVO.class);
             // 获取业务数据
             CompanyVoiceRoboticBusiness business = super.getRoboticBusiness(context.getWorkflowInstanceId());
             if (business == null) {
@@ -76,23 +97,10 @@ public class AiSendMsgTaskNode extends AbstractWorkflowNode {
                     context.getWorkflowInstanceId(), business.getRoboticId(), business.getCalleeId());
             
             // TODO: 这里可以添加实际的发送短信逻辑
-            companyVoiceRoboticService.workflowSendSmsOne(business.getRoboticId(), business.getCalleeId(),context);
-            // 更新业务表的发短信动作标记
-            companyVoiceRoboticBusinessMapper.updateActionCount(3, business.getRoboticId(),
-                    business.getCalleeId(), null);
-
-            //如果需要等待回调,可以在doContinue方法中处理回调逻辑,并在回调时执行下一个节点
-            if(false){
-                super.asyncWorkflowForBlockingNode(context.getWorkflowInstanceId(), context.getCurrentNodeKey(), context, ExecutionStatusEnum.PAUSED);
-                return ExecutionResult.paused()
-                        .outputData(context.getVariables())
-                        .nextNodeKey("").build();
-            }
-
+            companyVoiceRoboticService.workflowSendSmsOne(business.getRoboticId(), business.getCalleeId(),context,configVO.getSmsTempId());
             //如果不需要等待回调,直接执行下一个节点
             log.info("短信发送成功 - workflowInstanceId: {}", context.getWorkflowInstanceId());
             super.updateWorkflowStatus(context.getWorkflowInstanceId(), ExecutionStatusEnum.SUCCESS);
-            //CompanyVoiceRoboticServiceImpl.sendMsgOne()
             // 获取下一个节点并执行
             CompanyAiWorkflowExec exec = companyAiWorkflowExecMapper.selectByWorkflowInstanceId(context.getWorkflowInstanceId());
             List<CompanyWorkflowEdge> edges = companyWorkflowEdgeMapper.selectListByWorkflowIdAndNodeKey(

+ 18 - 0
fs-service/src/main/java/com/fs/company/vo/AiSendMsgConfigVO.java

@@ -0,0 +1,18 @@
+package com.fs.company.vo;
+
+import lombok.Data;
+
+/**
+ * @author MixLiu
+ * @date 2026/2/10 09:20
+ * @description
+ */
+@Data
+public class AiSendMsgConfigVO {
+
+    /**
+     * 使用话术
+     */
+    private Long smsTempId;
+
+}

+ 1 - 1
fs-user-app/src/main/java/com/fs/framework/aspectj/lock/DistributeLockAspect.java

@@ -5,7 +5,7 @@ import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.reflect.MethodSignature;
 import org.redisson.api.RLock;
-import org.redisson.api.;
+import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.core.StandardReflectionParameterNameDiscoverer;