Explorar el Código

Merge branch 'master' of http://1.14.104.71:10880/root/ylrz_his_scrm_java

caoliqin hace 1 semana
padre
commit
2c08bd5db6

+ 3 - 0
fs-service/src/main/java/com/fs/company/param/AddWxActionParam.java

@@ -13,6 +13,9 @@ import lombok.Data;
 public class AddWxActionParam extends AddWxVo {
 
     private String wxId;
+
     private Long serverId;
 
+
+
 }

+ 16 - 0
fs-service/src/main/java/com/fs/company/service/easycall/EasyCallServiceImpl.java

@@ -1,13 +1,16 @@
 package com.fs.company.service.easycall;
 
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.fs.common.utils.StringUtils;
 import com.fs.company.mapper.CompanyMapper;
+import com.fs.company.vo.CidConfigVO;
 import com.fs.company.vo.easycall.*;
 import cn.hutool.http.HttpRequest;
 import cn.hutool.http.HttpUtil;
+import com.fs.system.service.ISysConfigService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -31,6 +34,8 @@ import java.util.stream.Collectors;
 @Slf4j
 public class EasyCallServiceImpl implements IEasyCallService {
 
+    @Autowired
+    private ISysConfigService configService;
     /**
      * EasyCallCenter365 服务器基础地址,从配置文件 easycall.base-url 读取
      */
@@ -104,8 +109,19 @@ public class EasyCallServiceImpl implements IEasyCallService {
             if(StringUtils.isNotBlank(gateWayList)){
                 List<Long> collect = Arrays.stream(gateWayList.split(",")).map(item -> Long.valueOf(item.trim())).collect(Collectors.toList());
                 resList = resList.stream().filter(item -> collect.contains(item.getId())).collect(Collectors.toList());
+            }else{
+                String json = configService.selectConfigByKey("cid.config");
+                if (StringUtils.isNotBlank(json)) {
+                    JSONObject obj = JSONObject.parseObject(json);
+                    if(null != obj && obj.containsKey("showGatewayIds")){
+                        List<Long> showGatewayIds = obj.getJSONArray("showGatewayIds").stream().map(item -> Long.valueOf(item.toString())).collect(Collectors.toList());
+                        resList = resList.stream().filter(item -> showGatewayIds.contains(item.getId())).collect(Collectors.toList());
+                    }
+                }
             }
         }
+
+
         return resList;
     }
 

+ 25 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyWorkflowEngineImpl.java

@@ -68,6 +68,9 @@ public class CompanyWorkflowEngineImpl implements CompanyWorkflowEngine {
     @Autowired
     CompanySiptaskInfoMapper companySiptaskInfoMapper;
 
+    @Autowired
+    CompanyWxAccountMapper companyWxAccountMapper;
+
     /**
      * 初始化工作流
      * 创建工作流实例并保存初始状态
@@ -588,6 +591,8 @@ public class CompanyWorkflowEngineImpl implements CompanyWorkflowEngine {
                 createParam.setVoiceSource(callConfigVo.getVoiceSource());
                 // 技能组(转人工客服分组,可选)
                 createParam.setGroupId(callConfigVo.getBusiGroupId());
+                // 模型参数
+                createParam.setTtsModels(callConfigVo.getTtsModels());
 
                 EasyCallTaskVO task = easyCallService.createTask(createParam, null);
                 if (task == null || task.getBatchId() == null) {
@@ -609,4 +614,24 @@ public class CompanyWorkflowEngineImpl implements CompanyWorkflowEngine {
         return null;
     }
 
+    /**
+     * 加微成功后流程唤醒操作
+     * @param workflowInstanceId
+     * @param nodeKey
+     * @param accountId
+     * @param remark
+     */
+    @Async("cidWorkFlowExecutor")
+    public void addWxSuccess(String workflowInstanceId, String nodeKey,Long accountId,String remark){
+        if(StringUtils.isBlank(remark) || StringUtils.isBlank(workflowInstanceId) || StringUtils.isBlank(nodeKey) || accountId == null){
+            log.error("addWxSuccess: 参数错误,workflowInstanceId:{},nodeKey:{},accountId:{},remark:{}", workflowInstanceId, nodeKey, accountId, remark);
+            return;
+        }
+        CompanyWxAccount companyWxAccount = companyWxAccountMapper.selectCompanyWxAccountById(accountId);
+        if(null != companyWxAccount && !remark.equals(companyWxAccount.getRemark())){
+            companyWxAccount.setRemark( remark);
+            companyWxAccountMapper.updateCompanyWxAccount(companyWxAccount);
+        }
+    }
+
 }

+ 50 - 41
fs-service/src/main/java/com/fs/company/service/impl/call/node/AiAddWxTaskNewNode.java

@@ -5,7 +5,6 @@ import com.fs.common.constant.Constants;
 import com.fs.common.core.redis.RedisCacheT;
 import com.fs.common.exception.CustomException;
 import com.fs.common.utils.StringUtils;
-import com.fs.common.utils.http.HttpUtils;
 import com.fs.common.utils.spring.SpringUtils;
 import com.fs.company.domain.*;
 import com.fs.company.mapper.*;
@@ -20,10 +19,10 @@ import com.fs.crm.service.impl.CrmCustomerServiceImpl;
 import com.fs.enums.ExecutionStatusEnum;
 import com.fs.enums.NodeTypeEnum;
 import com.fs.system.service.ISysConfigService;
-import com.fs.wxcid.domain.CidIpadServer;
 import com.fs.wxcid.domain.WxContact;
 import com.fs.wxcid.mapper.CidIpadServerMapper;
 import com.fs.wxcid.mapper.WxContactMapper;
+import com.fs.wxwork.service.WxIpadService;
 import lombok.extern.slf4j.Slf4j;
 
 import java.util.Date;
@@ -50,7 +49,8 @@ public class AiAddWxTaskNewNode extends AbstractWorkflowNode {
     private static final ObjectPlaceholderResolver objectPlaceholderResolver = SpringUtils.getBean(ObjectPlaceholderResolver.class);
     private static final ISysConfigService sysConfigService = SpringUtils.getBean(ISysConfigService.class);
     private static final CidIpadServerMapper cidIpadServerMapper = SpringUtils.getBean(CidIpadServerMapper.class);
-    private static final String ADDWX_POST_URL = "/app/common/addWxAction";
+    private static final WxIpadService wxService = SpringUtils.getBean(WxIpadService.class);
+//    private static final String ADDWX_POST_URL = "/app/common/addWxAction";
     /**
      * 默认加微超时时间(分钟)
      */
@@ -104,8 +104,12 @@ public class AiAddWxTaskNewNode extends AbstractWorkflowNode {
             update.setId(roboticBusiness.getWxClientId());
             companyWxClientMapper.updateCompanyWxClient(update);
             super.asyncWorkflowForBlockingNode(context.getWorkflowInstanceId(), context.getCurrentNodeKey(), context, ExecutionStatusEnum.PAUSED);
-            pendingAddWx(wxQuery.getAccountId(),wxQuery.getRemark(),wxQuery.getPhone(),addWxConfig.getDialogId(),wxQuery.getCrmUserId());
-            doneAddwx(context.getWorkflowInstanceId());
+            pendingAddWx(wxQuery.getAccountId(), wxQuery.getRemark(),
+                    wxQuery.getPhone(),
+                    addWxConfig.getDialogId(),
+                    wxQuery.getCrmUserId(),
+                    context.getWorkflowInstanceId(),
+                    context.getCurrentNodeKey());
             return ExecutionResult.paused()
                     .outputData(context.getVariables())
                     .nextNodeKey("").build();
@@ -262,48 +266,53 @@ public class AiAddWxTaskNewNode extends AbstractWorkflowNode {
 
     /**
      * 发起加微请求
-     * @param accountId 微信账号ID
-     * @param remark 备注
-     * @param phone 手机号
-     * @param dialogId 话术ID
-     * @param crmUserId CRM用户ID
+     * @param accountId
+     * @param remark
+     * @param phone
+     * @param dialogId
+     * @param crmUserId
+     * @param instanceId
+     * @param nodeKey
      */
-    private void pendingAddWx(Long accountId, String remark, String phone, Long dialogId, Long crmUserId) {
-        // 1. 获取基础数据
-        CompanyWxAccount companyWxAccount = companyWxAccountMapper.selectCompanyWxAccountById(accountId);
-        if (companyWxAccount == null) {
-            throw new CustomException("未找到对应的微信账号配置, accountId: " + accountId);
-        }
+    private void pendingAddWx(Long accountId, String remark, String phone, Long dialogId, Long crmUserId,String instanceId,String nodeKey) {
+        try {
+            // 1. 获取基础数据
+            CompanyWxAccount companyWxAccount = companyWxAccountMapper.selectCompanyWxAccountById(accountId);
+            if (companyWxAccount == null) {
+                throw new CustomException("未找到对应的微信账号配置, accountId: " + accountId);
+            }
 
-        CompanyWxDialog dialog = companyWxDialogMapper.selectCompanyWxDialogById(dialogId);
-        if (dialog == null) {
-            throw new CustomException("未找到对应的对话模板, dialogId: " + dialogId);
-        }
+            CompanyWxDialog dialog = companyWxDialogMapper.selectCompanyWxDialogById(dialogId);
+            if (dialog == null) {
+                throw new CustomException("未找到对应的对话模板, dialogId: " + dialogId);
+            }
 
-        CrmCustomer crmCustomer = crmCustomerService.selectCrmCustomerById(crmUserId);
+            CrmCustomer crmCustomer = crmCustomerService.selectCrmCustomerById(crmUserId);
 
-        // 2. 解析话术模板
-        String newTxt = objectPlaceholderResolver.resolvePlaceholders(crmCustomer, dialog.getTemplateDetails());
+            // 2. 解析话术模板
+            String newTxt = objectPlaceholderResolver.resolvePlaceholders(crmCustomer, dialog.getTemplateDetails());
 
-        // 3. 构建请求参数
-        AddWxActionParam param = new AddWxActionParam();
-        param.setWxId(companyWxAccount.getWxNo());
-        param.setRemark(remark);
-        param.setPhone(phone);
-        param.setApplyMsg(newTxt);
-        CidIpadServer cidIpadServer = cidIpadServerMapper.selectCidIpadServerById(companyWxAccount.getServerId());
-        if (null == cidIpadServer || StringUtils.isBlank(cidIpadServer.getUrl())) {
-            throw new CustomException("加微接口地址未配置");
+            // 3. 构建请求参数
+            AddWxActionParam param = new AddWxActionParam();
+            param.setWxId(companyWxAccount.getWxNo());
+            param.setRemark(remark);
+            param.setPhone(phone);
+            param.setApplyMsg(newTxt);
+            param.setServerId(companyWxAccount.getServerId());
+            JSONObject bizJson = new JSONObject()
+                    .fluentPut("instanceId",instanceId)
+                    .fluentPut("nodeKey",nodeKey)
+                    .fluentPut("accountId",companyWxAccount.getId());
+            param.setBizJson(bizJson.toJSONString());
+            wxService.addWx(param);
+        } catch (Exception ex) {
+            throw new CustomException("发起加微请求异常, phone: " + phone + ", error: " + ex.getMessage());
         }
-        // 4. 从系统配置获取加微接口地址
-        String addWxUrl = cidIpadServer.getUrl() + ADDWX_POST_URL;
+    }
 
-        // 5. 发送 HTTP 请求
-        try {
-            String result = HttpUtils.sendPost(addWxUrl, JSONObject.toJSONString(param));
-            log.info("pendingAddWx: 加微任务提交成功, phone: {}, result: {}", phone, result);
-        } catch (Exception e) {
-            throw new CustomException("发起加微请求异常, phone: " + phone + ", error: " + e.getMessage());
-        }
+    @Override
+    protected void postExecute(ExecutionContext context, ExecutionResult result) {
+        super.postExecute(context, result);
+        doneAddwx(context.getWorkflowInstanceId());
     }
 }

+ 2 - 0
fs-service/src/main/java/com/fs/company/vo/AiCallConfigVO.java

@@ -55,6 +55,8 @@ public class AiCallConfigVO {
      * 音色来源(音色列表接口返回的 voiceSource,如 aliyun_tts)
      */
     private String voiceSource;
+
+    private String ttsModels;
     /**
      * tts厂商 / 技能组 id(技能组列表接口返回的 groupId)
      */

+ 2 - 0
fs-service/src/main/java/com/fs/company/vo/easycall/EasyCallCreateTaskParam.java

@@ -33,4 +33,6 @@ public class EasyCallCreateTaskParam {
     private Double avgCallTalkTimeLen;
     /** 平均事后处理时长(taskType=0时必填,单位秒) */
     private Double avgCallEndProcessTimeLen;
+
+    private String ttsModels;
 }

+ 4 - 0
fs-service/src/main/java/com/fs/company/vo/easycall/EasyCallVoiceCodeVO.java

@@ -13,4 +13,8 @@ public class EasyCallVoiceCodeVO {
     private String voiceName;
     /** 声音源:aliyun_tts */
     private String voiceSource;
+    /**
+     * 音色模型
+     */
+    private String ttsModels;
 }

+ 1 - 0
fs-service/src/main/java/com/fs/wxcid/vo/wxvo/AddResultWxVo.java

@@ -10,4 +10,5 @@ import lombok.NoArgsConstructor;
 public class AddResultWxVo {
     private String remark;
     private String userName;
+    private String bizJson;
 }

+ 2 - 0
fs-service/src/main/java/com/fs/wxcid/vo/wxvo/AddWxVo.java

@@ -14,4 +14,6 @@ public class AddWxVo {
     private String phone;
     // 加微申请文案
     private String applyMsg;
+    // 业务参数
+    private String bizJson;
 }

+ 2 - 2
fs-wx-api/src/main/java/com/fs/app/controller/CommonController.java

@@ -67,7 +67,7 @@ public class CommonController {
         wxContact.setCompanyUserId(companyWxAccount.getCompanyUserId());
         wxContact.setFriends(0);
         wxContactMapper.insert(wxContact);
-        webSocketServer.sendMessage(session, ResultMsgVo.<AddWxVo>builder().cmd(CmdType.ADD_WX).data(new AddWxVo("", phone, remark)).build());
+        webSocketServer.sendMessage(session, ResultMsgVo.<AddWxVo>builder().cmd(CmdType.ADD_WX).data(new AddWxVo("", phone, remark,"")).build());
         return R.ok();
     }
 
@@ -75,7 +75,7 @@ public class CommonController {
     public R addWxAction(@RequestBody AddWxActionParam param){
         String wxId = param.getWxId();
         Session session = WebSocketServer.sessionPools.get(wxId);
-        webSocketServer.sendMessage(session, ResultMsgVo.<AddWxVo>builder().cmd(CmdType.ADD_WX).data(new AddWxVo(param.getRemark(), param.getPhone(), param.getApplyMsg())).build());
+        webSocketServer.sendMessage(session, ResultMsgVo.<AddWxVo>builder().cmd(CmdType.ADD_WX).data(new AddWxVo(param.getRemark(), param.getPhone(), param.getApplyMsg(), param.getBizJson())).build());
         return R.ok();
     }