lmx 3 週間 前
コミット
ef8587af35

+ 3 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyVoiceRoboticBusinessMapper.java

@@ -3,6 +3,7 @@ package com.fs.company.mapper;
 import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.company.domain.CompanyVoiceRoboticBusiness;
+import com.fs.company.domain.CompanyVoiceRoboticCallees;
 import io.lettuce.core.dynamic.annotation.Param;
 
 import javax.validation.constraints.NotNull;
@@ -83,4 +84,6 @@ public interface CompanyVoiceRoboticBusinessMapper extends BaseMapper<CompanyVoi
                           @Param("wxClientId") Long wxClientId);
 
     CompanyVoiceRoboticBusiness selectCompanyVoiceRoboticBusinessByWorkflowInstanceId(String workflowInstanceId);
+
+    CompanyVoiceRoboticCallees selectCalleesByBusinessId(@Param("businessId") Long businessId);
 }

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

@@ -43,6 +43,7 @@ public interface ICompanyVoiceRoboticService extends IService<CompanyVoiceRoboti
     public int insertCompanyVoiceRobotic(CompanyVoiceRobotic companyVoiceRobotic);
     CalltaskcreateaiCustomizeResult addTask(CompanyVoiceRobotic companyVoiceRobotic);
     CalltaskcreateaiCustomizeResult callPhoneOne(Long roboticId,Long callerId);
+    CalltaskcreateaiCustomizeResult workflowCallPhoneOne(Long roboticId,Long callerId,String workflowInstanceId);
     void sendMsgOne(Long roboticId,Long callerId);
 
     /**

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

@@ -298,6 +298,82 @@ public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRobo
 
     }
 
+    /**
+     * 流程Ai呼叫 callOne
+     * @param roboticId
+     * @param callerId
+     * @param workflowInstanceId
+     * @return
+     */
+    @Override
+    public CalltaskcreateaiCustomizeResult workflowCallPhoneOne(Long roboticId, Long callerId, String workflowInstanceId) {
+        try {
+            CompanyVoiceRobotic robotic = companyVoiceRoboticMapper.selectById(roboticId);
+            CompanyVoiceRoboticCallees callees = companyVoiceRoboticCalleesMapper.selectById(callerId);
+            CalleeDomain build = CalleeDomain.builder().number(callees.getPhone()).userData(callees.getId().toString()).build();
+            List<CalleeDomain> mobileList = new ArrayList<>();
+            mobileList.add(build);
+
+            // 构建三方接口请求数据
+            CalltaskcreateaiCustomizeDomain param = new CalltaskcreateaiCustomizeDomain();
+            param.setRobot(robotic.getRobot());
+            param.setDialogID(robotic.getDialogId());
+            param.setMode(robotic.getMode());
+            param.setCallees(mobileList);
+            param.setTaskName(robotic.getName());
+            param.setMultiplier(robotic.getMultiplier());
+            param.setAutoRecall(robotic.getAutoRecall());
+            param.setRecallTimes(robotic.getRecallTimes());
+            if (StringUtils.isNotEmpty(robotic.getWeekDay1())) {
+                param.setWeekday1(Arrays.asList(robotic.getWeekDay1().split(",")));
+            }
+            if (StringUtils.isNotEmpty(robotic.getStartTime1())) {
+                param.setStartTime1(robotic.getStartTime1() + ":00");
+            }
+            if (StringUtils.isNotEmpty(robotic.getEndTime1())) {
+                param.setEndTime1(robotic.getEndTime1() + ":00");
+            }
+            param.setUserData(workflowInstanceId);
+            JSONObject runParam = (JSONObject) JSON.toJSON(param);
+            runParam.put("companyId", robotic.getCompanyId());
+            CompanyVoiceRoboticCallLogCallphone addLog = CompanyVoiceRoboticCallLogCallphone.initCallLog(
+                    runParam.toJSONString(), callerId, roboticId, robotic.getCompanyId());
+            // 请求外呼接口
+            CalltaskcreateaiCustomizeResult result = aiCallService.calltaskcreateaiCustomize(param, robotic.getCompanyId());
+            addLog.setStatus(1);
+            companyVoiceRoboticCallLogCallphoneService.asyncInsertCompanyVoiceRoboticCallLog(addLog);
+            // 设置返回数据
+//            robotic.setTaskId(result.getTaskID());
+//            robotic.setTaskName(result.getTaskName());
+//            companyVoiceRoboticMapper.updateById(robotic);
+            if (StringUtils.isNotBlank(callees.getRunTaskFlow())) {
+                callees.setRunTaskFlow(callees.getRunTaskFlow() + "," + Constants.CELL_PHONE);
+            } else {
+                callees.setRunTaskFlow(Constants.CELL_PHONE);
+            }
+            callees.setTaskId(result.getTaskID());
+            callees.setTaskName(result.getTaskName());
+            companyVoiceRoboticCalleesMapper.updateById(callees);
+            Integer unfulfilledTaskCount = companyVoiceRoboticCalleesMapper.getRoboticIsDoneByRoboticIdAndTaskFlow(roboticId, Constants.CELL_PHONE);
+            //全部完成才更新任务状态
+            if (unfulfilledTaskCount.compareTo(0) == 0) {
+                if (StringUtils.isNotBlank(robotic.getRunTaskFlow())) {
+                    robotic.setRunTaskFlow(robotic.getRunTaskFlow() + "," + Constants.CELL_PHONE);
+                } else {
+                    robotic.setRunTaskFlow(Constants.CELL_PHONE);
+                }
+                companyVoiceRoboticMapper.updateById(robotic);
+            }
+
+            return result;
+
+        } catch (Exception ex) {
+            log.error("callPhoneOne异常:", ex);
+        }
+        return null;
+
+    }
+
     @Synchronized
     public void sendMsgOne(Long roboticId,Long callerId){
         try{

+ 36 - 7
fs-service/src/main/java/com/fs/company/service/impl/call/node/AiCallTaskNode.java

@@ -1,13 +1,16 @@
 package com.fs.company.service.impl.call.node;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.fs.aicall.domain.result.CalltaskcreateaiCustomizeResult;
 import com.fs.common.utils.spring.SpringUtils;
 import com.fs.company.domain.CompanyAiWorkflowExec;
 import com.fs.company.domain.CompanyVoiceRoboticBusiness;
+import com.fs.company.domain.CompanyVoiceRoboticCallees;
 import com.fs.company.domain.CompanyWorkflowEdge;
 import com.fs.company.mapper.CompanyWorkflowNodeMapper;
 import com.fs.company.param.ExecutionContext;
+import com.fs.company.service.ICompanyVoiceRoboticService;
 import com.fs.company.service.impl.CompanyVoiceRoboticServiceImpl;
 import com.fs.company.vo.AiCallWorkflowConditionVo;
 import com.fs.company.vo.ExecutionResult;
@@ -23,31 +26,57 @@ import java.util.Map;
  */
 public class AiCallTaskNode extends AbstractWorkflowNode {
     private static final CompanyWorkflowNodeMapper companyWorkflowNodeMapper = SpringUtils.getBean(CompanyWorkflowNodeMapper.class);
-    private static final CompanyVoiceRoboticServiceImpl companyVoiceRoboticService = SpringUtils.getBean(CompanyVoiceRoboticServiceImpl.class);
+    private static final ICompanyVoiceRoboticService companyVoiceRoboticService = SpringUtils.getBean(ICompanyVoiceRoboticService.class);
 
     public AiCallTaskNode(String nodeKey, String nodeName, Map<String, Object> properties) {
         super(nodeKey, nodeName, properties);
     }
 
+    /**
+     * 收到回调以后,继续判定和执行下一步动作
+     *
+     * @param context
+     * @return
+     */
     @Override
     protected ExecutionResult doContinue(ExecutionContext context) {
+
+        CompanyAiWorkflowExec exec = companyAiWorkflowExecMapper.selectByWorkflowInstanceId(context.getWorkflowInstanceId());
+
+        List<CompanyWorkflowEdge> edges = companyWorkflowEdgeMapper.selectListByWorkflowIdAndNodeKey(exec.getWorkflowId(), nodeKey);
+        //获取外呼回调结果
+        CompanyVoiceRoboticCallees callees = super.companyVoiceRoboticBusinessMapper.selectCalleesByBusinessId(Long.valueOf(exec.getBusinessKey()));
+        edges.forEach(edge -> {
+            AiCallWorkflowConditionVo condition = JSONObject.parseObject(edge.getConditionExpr(), AiCallWorkflowConditionVo.class);
+            //未拨通
+            if (!condition.isCallConnected()) {
+                if (null != condition.getCallTime()) {
+
+                }
+            }
+            //拨通
+            else {
+
+            }
+        });
+        //加入到计时组
+
+        //同步监听回调回调
         return null;
     }
 
     @Override
     protected ExecutionResult doExecute(ExecutionContext context) {
-        if(isAsync()){
+        if (isAsync()) {
+
             //执行外呼逻辑 需要传入节点信息
             CompanyVoiceRoboticBusiness bus = super.getRoboticBusiness(context.getWorkflowInstanceId());
-            CalltaskcreateaiCustomizeResult result = companyVoiceRoboticService.callPhoneOne(bus.getRoboticId(), bus.getCalleeId());
-
-            //加入到计时组
+            CalltaskcreateaiCustomizeResult result = companyVoiceRoboticService.workflowCallPhoneOne(bus.getRoboticId(), bus.getCalleeId(), context.getWorkflowInstanceId());
 
-            //同步监听回调回调
 
             return ExecutionResult.paused()
                     .nextNodeKey(getNextNodeKey(context.getWorkflowInstanceId(), nodeKey)).build();
-        } else{
+        } else {
             return ExecutionResult.success()
                     .nextNodeKey(getNextNodeKey(context.getWorkflowInstanceId(), nodeKey)).build();
         }

+ 6 - 0
fs-service/src/main/resources/mapper/company/CompanyVoiceRoboticBusinessMapper.xml

@@ -134,4 +134,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                  INNER JOIN company_voice_robotic_business t2 on t1.business_key = t2.id
         where t1.workflow_instance_id = #{workflowInstanceId}
     </select>
+
+    <select id="selectCalleesByBusinessId" resultType="CompanyVoiceRoboticCallees">
+        SELECT t2.* FROM company_voice_robotic_business t1
+        inner join company_voice_robotic_callees t2 on t1.callee_id = t2.id
+        where t1.id = #{businessId}
+    </select>
 </mapper>