浏览代码

Merge remote-tracking branch 'origin/master'

ct 5 天之前
父节点
当前提交
f2ecc01d0f

+ 2 - 0
fs-admin/src/main/java/com/fs/his/task/Task.java

@@ -565,10 +565,12 @@ public class Task {
     public void CreateOmsAndHis()
     {
         List<Long> omsList = fsStoreOrderMapper.selectFsStoreOrderNoCreateOms();
+        logger.info("推送订单id====>{}",omsList);
         for (Long l : omsList) {
             try {
                 fsStoreOrderService.createOmsOrder(l);
             } catch (Exception e) {
+                logger.error("推送订单异常:",e);
             }
         }
 //        List<Long> tuiOrderList = fsStoreOrderMapper.selectFsStoreOrderNoTuiOrder();

+ 6 - 1
fs-company/src/main/java/com/fs/company/controller/crm/CrmMsgController.java

@@ -64,7 +64,12 @@ public class CrmMsgController extends BaseController
     }
 
 
-
+    /**
+     * 获取站内销售消息列表
+     * @param request
+     * @param type
+     * @return
+     */
     @GetMapping("/getMsgList")
     public R getMsgList(
             HttpServletRequest request,

+ 5 - 2
fs-qw-api-msg/src/main/java/com/fs/app/controller/QwMsgController.java

@@ -330,6 +330,9 @@ public class QwMsgController {
                         WxwSpeechToTextEntityRespDTO data = dto.getData();
                         content = data.getText();
                         System.out.println("语音消息"+content);
+                        if(content == null || content.isEmpty()){
+                            content = "==语音转换失败==";
+                        }
                     }
                     else if (wxWorkMessageDTO.getMsgtype() == 101){
                         content = processImageMessage(serverId, wxWorkMessageDTO, wxWorkMsgResp);
@@ -357,7 +360,7 @@ public class QwMsgController {
                     }
                     Long receiver = wxWorkMessageDTO.getReceiver();
                     Long extId=null;
-                    Integer totalSeconds=0;
+                    Long totalSeconds=null;
                     if (2000000000000000L-receiver>0){
                          extId = wxWorkMessageDTO.getSender();
                         System.out.println("客户发起");
@@ -388,7 +391,7 @@ public class QwMsgController {
                                     minutes = Integer.parseInt(matcher.group(1));
                                     seconds = Integer.parseInt(matcher.group(2));
                                 }
-                                totalSeconds = hours * 3600 + minutes * 60 + seconds;
+                                totalSeconds = hours * 3600L + minutes * 60L + seconds;
                                 System.out.println("总通话秒数: " + totalSeconds);
                             }
                         }

+ 1 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsCourseLinkServiceImpl.java

@@ -389,6 +389,7 @@ public class FsCourseLinkServiceImpl implements IFsCourseLinkService
         }else {
             link.setLink(randomString);
         }
+        link.setProjectCode(cloudHostProper.getProjectCode());
 
         link.setCreateTime(sendTime);
 

+ 1 - 1
fs-service/src/main/java/com/fs/erp/http/JstErpHttpServiceImpl.java

@@ -110,7 +110,7 @@ public class JstErpHttpServiceImpl implements JstErpHttpService {
 
     @Override
     public OrderQueryResponseDTO query(OrderQueryRequestDTO dto) {
-        String url = BASE_URL + "/open/orders/single/query";
+        String url = BASE_URL + "open/orders/single/query";
         log.info("查询订单信息 - URL: {}, 请求体: {}", url, JSON.toJSONString(dto));
 
         HttpResponse response = executeJsonPost(url, dto);

+ 7 - 5
fs-service/src/main/java/com/fs/erp/service/impl/JSTErpOrderServiceImpl.java

@@ -77,7 +77,7 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
     @Override
     public ErpOrderResponse addOrder(ErpOrder order) {
         FsStoreOrder fsStoreOrder = fsStoreOrderService.selectFsStoreOrderByOrderCode(order.getPlatform_code());
-
+        log.info("ERP订单号: {}, 订单信息: {}",order.getPlatform_code(), JSON.toJSONString(fsStoreOrder));
         ErpOrderPayment erpOrderPayment = order.getPayments().get(0);
 
         ShopOrderDTO shopOrderDTO = new ShopOrderDTO();
@@ -182,7 +182,8 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
 
 
         // 如果是货到付款
-        if("2".equals(fsStoreOrder.getPayType()) || "3".equals(fsStoreOrder.getPayType())){
+        log.info("订单支付方式: {},\"2\".equals(fsStoreOrder.getPayType()) || \"3\".equals(fsStoreOrder.getPayType()):{}",fsStoreOrder.getPayType(),fsStoreOrder.getPayType() == 2 || fsStoreOrder.getPayType() == 3);
+        if(fsStoreOrder.getPayType() == 2 || fsStoreOrder.getPayType() == 3){
             shopOrderDTO.setIsCod(true);
             // 货到付款金额 = 物流代收金额-优惠金额
             shopOrderDTO.setBuyerPaidAmount(fsStoreOrder.getPayDelivery());
@@ -207,7 +208,7 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
             fsJstCodPush.setTaskStatus(TaskStatusEnum.PENDING.getCode());
             fsJstCodPushMapper.insert(fsJstCodPush);
 
-            shopOrderDTO.setPay(paymentDTO);
+            //shopOrderDTO.setPay(paymentDTO);
         }
 
         ErpOrderResponseDTO upload = jstErpHttpService.upload(shopOrderDTO);
@@ -227,6 +228,7 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
     @Override
     public ErpOrderResponse addOrderScrm(ErpOrder order) {
         FsStoreOrderScrm fsStoreOrder = fsStoreOrderScrmService.selectFsStoreOrderByOrderCode(order.getPlatform_code());
+        log.info("ERP订单号: {}, 订单信息: {}",order.getPlatform_code(), JSON.toJSONString(fsStoreOrder));
 
         ErpOrderPayment erpOrderPayment = order.getPayments().get(0);
 
@@ -294,6 +296,7 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
 //        }
 
         List<FsStoreOrderItemVO> fsStoreOrderItemVOS = fsStoreOrderItemScrmService.selectFsStoreOrderItemListByOrderId(fsStoreOrder.getId());
+        log.info("fsStoreOrderItemVOS==========>{}",fsStoreOrderItemVOS);
         for (FsStoreOrderItemVO item : fsStoreOrderItemVOS) {
             OrderItemDTO orderItemDTO = new OrderItemDTO();
             JSONObject jsonObject = JSON.parseObject(item.getJsonInfo());
@@ -328,7 +331,6 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
         paymentDTO.setSellerAccount("平台销售");
         shopOrderDTO.setPay(paymentDTO);
 
-
         // 如果是货到付款
         if("2".equals(fsStoreOrder.getPayType()) || "3".equals(fsStoreOrder.getPayType())){
             shopOrderDTO.setIsCod(true);
@@ -355,7 +357,7 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
             fsJstCodPush.setTaskStatus(TaskStatusEnum.PENDING.getCode());
             fsJstCodPushMapper.insert(fsJstCodPush);
 
-            shopOrderDTO.setPay(paymentDTO);
+            //shopOrderDTO.setPay(paymentDTO);
         }
 
         ErpOrderResponseDTO upload = jstErpHttpService.upload(shopOrderDTO);

+ 19 - 0
fs-service/src/main/java/com/fs/fastGpt/service/impl/AiHookServiceImpl.java

@@ -17,6 +17,8 @@ import com.fs.course.mapper.FsUserCourseVideoMapper;
 import com.fs.course.param.FsCourseLinkCreateParam;
 import com.fs.course.service.IFsCourseLinkService;
 import com.fs.course.vo.FsCourseWatchLogVO;
+import com.fs.crm.domain.CrmMsg;
+import com.fs.crm.service.ICrmMsgService;
 import com.fs.fastGpt.config.ModeConfig;
 import com.fs.fastGpt.domain.*;
 import com.fs.fastGpt.mapper.FastGptChatReplaceWordsMapper;
@@ -161,6 +163,8 @@ public class AiHookServiceImpl implements AiHookService {
     private CompanyConfigMapper companyConfigMapper;
     @Autowired
     private IFastGptChatReplaceTextService fastGptChatReplaceTextService;
+    @Autowired
+    private ICrmMsgService crmMsgService;
 
     private static final String AI_REPLY = "AI_REPLY:";
     private static final String AI_REPLY_TAG = "AI_REPLY_TAG:";
@@ -449,6 +453,12 @@ public class AiHookServiceImpl implements AiHookService {
                 log.info("不是图片"+type);
             }
 
+            if("==语音转换失败==".equals(qwContent)){
+                log.error("语音转换失败转人工:"+role.getRoleId()+":"+qwExternalContacts.getName() + ",uid" + uid);
+                notifyArtificial(fastGptChatSession.getSessionId(),user,qwExternalContacts.getName()," 语音转换失败转人工",qwExternalContacts.getId(),sender);
+                return R.ok();
+            }
+
             //对用户处理的内容做处理
             String maskedContent = processContent(qwContent);
             String contentEmj = replaceWxEmo(maskedContent);
@@ -1123,6 +1133,15 @@ public class AiHookServiceImpl implements AiHookService {
         sendQwAppMsg(user.getCorpId(),Integer.parseInt(qwCompany.getServerAgentId().trim()),user.getQwUserId(),"您的客户:"+name+"因"+reason+"  需要转人工,请及时回复");
         sendQwAppMsg(user.getCorpId(),Integer.parseInt(qwCompany.getServerAgentId().trim()),user.getQwUserId(),name);
         qwWorkTaskService.addQwWorkByAiNotifyArtificial(user,extId,"Ai转人工");
+        FastGptChatSession chatSession = fastGptChatSessionMapper.selectFastGptChatSessionBySessionId(sessionId);
+        CrmMsg crmMsg = new CrmMsg();
+        crmMsg.setMsgType(3);
+        crmMsg.setTitle("Ai转人工");
+        crmMsg.setContent("你的客户:" + chatSession.getNickName() + ", 因  \"" + reason + "\"  需要转人工,请及时回复");
+        crmMsg.setCompanyId(user.getCompanyId());
+        crmMsg.setCompanyUserId(user.getCompanyUserId());
+        crmMsgService.insertCrmMsg(crmMsg);
+
     }
 
     void sendQwAppMsg(String corpId, Integer agentId,String qwUserId,String content){

+ 1 - 1
fs-service/src/main/java/com/fs/qw/domain/QwUserVoiceLog.java

@@ -36,7 +36,7 @@ public class QwUserVoiceLog extends BaseEntity{
 
     /** 1接听 2未接 */
     @Excel(name = "1接听 2未接")
-    private Long status;
+    private Integer status;
 
     /** 企微id */
     @Excel(name = "企微id")

+ 1 - 1
fs-service/src/main/java/com/fs/qw/service/IQwUserVoiceLogService.java

@@ -64,5 +64,5 @@ public interface IQwUserVoiceLogService extends IService<QwUserVoiceLog>{
 
     List<QwUserVoiceLogTotalVo> selectQwUserVoiceLogTotalList(QwUserVoiceLogTotalVo qwUserVoiceLog);
 
-    void addQuUserVoiceByIpadCallback(Long id, Long extUserId, Integer recordType, Integer totalSeconds, String uuid);
+    void addQuUserVoiceByIpadCallback(Long id, Long extUserId, Integer recordType, Long totalSeconds, String uuid);
 }

+ 68 - 44
fs-service/src/main/java/com/fs/qw/service/impl/QwUserVoiceLogServiceImpl.java

@@ -155,57 +155,81 @@ public class QwUserVoiceLogServiceImpl extends ServiceImpl<QwUserVoiceLogMapper,
     }
 
     @Override
-    public void addQuUserVoiceByIpadCallback(Long id, Long extUserId, Integer recordType, Integer totalSeconds, String uuid) {
-        QwUser sendUser = qwUserMapper.selectQwUserById(id);
-        if (sendUser!=null){
-            String extId = getExtId(extUserId, uuid, sendUser.getServerId());
-            QwExternalContact qwExternalContacts = qwExternalContactMapper.selectQwExternalContactByExternalUserIdAndQwUserId(extId, sendUser.getCorpId(),sendUser.getQwUserId());
-            if (qwExternalContacts==null){
-                log.error("未找到外部联系人,qwUserId:" + id);
-                return ;
-            }
+    public void addQuUserVoiceByIpadCallback(Long id, Long extUserId, Integer recordType, Long totalSeconds, String uuid) {
+        // 参数校验
+        if (id == null || (extUserId == null && uuid == null)) {
+            log.error("参数校验失败: id={}, extUserId={}, uuid={}", id, extUserId, uuid);
+            return;
+        }
 
-            QwUserVoiceLog qwUserVoiceLog = new QwUserVoiceLog();
-            qwUserVoiceLog.setCorpId(sendUser.getCorpId());
-            qwUserVoiceLog.setExtId(qwExternalContacts.getId());
-            qwUserVoiceLog.setQwUserId(sendUser.getId());
-            qwUserVoiceLog.setCompanyId(qwExternalContacts.getCompanyId());
-            if(qwExternalContacts.getCompanyUserId() != null){
-                qwUserVoiceLog.setCompanyUserId(qwExternalContacts.getCompanyUserId());
-            }
+        try {
+            QwUser sendUser = qwUserMapper.selectQwUserById(id);
+            if (sendUser != null) {
+                String extId = getExtId(extUserId, uuid, sendUser.getServerId());
+                // 检查extId是否有效
+                if (extId == null || extId.isEmpty()) {
+                    log.error("获取外部联系人ID失败,qwUserId:" + id + ",extUserId:" + extUserId + ",uuid:" + uuid);
+                    return;
+                }
 
-            if(recordType == 2){//2是未接通的处理
-                qwUserVoiceLog.setStatus(Long.valueOf(recordType));
-                qwUserVoiceLog.setTitle("通话拒接");
-            }else{
-                qwUserVoiceLog.setStatus(1L);
-                if(totalSeconds != null){
-                    qwUserVoiceLog.setDuration(Long.valueOf(totalSeconds));
-                }else{
-                    qwUserVoiceLog.setDuration(0L);
+                QwExternalContact qwExternalContacts = qwExternalContactMapper.selectQwExternalContactByExternalUserIdAndQwUserId(extId, sendUser.getCorpId(), sendUser.getQwUserId());
+                if (qwExternalContacts == null) {
+                    log.error("未找到外部联系人,qwUserId:" + id + ",extId:" + extId);
+                    return;
                 }
-                qwUserVoiceLog.setTitle("通话已接听");
-            }
-            qwUserVoiceLog.setCreateTime(new Date());
-
-            int insert = baseMapper.insertQwUserVoiceLog(qwUserVoiceLog);
-            //插入成功的情况下就处理定时任务
-            if(insert == 1){
-                List<QwWorkTask> qwWorkTaskList = qwWorkTaskMapper.selectQwWorkTaskByExtIdAndQwUserId(qwUserVoiceLog);
-                if(qwWorkTaskList != null && !qwWorkTaskList.isEmpty()){
-                    for (QwWorkTask qwWorkTask : qwWorkTaskList) {
-                        if(qwUserVoiceLog.getStatus() == 1L){//接通电话
-                            qwWorkTask.setTrackType(3);//1正常处理 2 未接听 3 已接听
-                            qwWorkTask.setDuration(qwUserVoiceLog.getDuration());
-                        }else{
-                            qwWorkTask.setTrackType(2);//1正常处理 2 未接听 3 已接听
+
+                QwUserVoiceLog qwUserVoiceLog = new QwUserVoiceLog();
+                qwUserVoiceLog.setCorpId(sendUser.getCorpId());
+                qwUserVoiceLog.setExtId(qwExternalContacts.getId());
+                qwUserVoiceLog.setQwUserId(sendUser.getId());
+                qwUserVoiceLog.setCompanyId(qwExternalContacts.getCompanyId());
+                if (qwExternalContacts.getCompanyUserId() != null) {
+                    qwUserVoiceLog.setCompanyUserId(qwExternalContacts.getCompanyUserId());
+                }
+
+                if (recordType == 2) {//2是未接通的处理
+                    qwUserVoiceLog.setStatus(recordType);
+                    qwUserVoiceLog.setTitle("通话拒接");
+                } else {
+                    qwUserVoiceLog.setStatus(1);
+                    if (totalSeconds != null) {
+                        qwUserVoiceLog.setDuration(totalSeconds);
+                    } else {
+                        qwUserVoiceLog.setDuration(0L);
+                    }
+                    qwUserVoiceLog.setTitle("通话已接听");
+                }
+                qwUserVoiceLog.setCreateTime(new Date());
+
+                int insert = baseMapper.insertQwUserVoiceLog(qwUserVoiceLog);
+                // 插入成功的情况下就处理定时任务
+                if (insert == 1) {
+                    List<QwWorkTask> qwWorkTaskList = qwWorkTaskMapper.selectQwWorkTaskByExtIdAndQwUserId(qwUserVoiceLog);
+                    if (qwWorkTaskList != null && !qwWorkTaskList.isEmpty()) {
+                        for (QwWorkTask qwWorkTask : qwWorkTaskList) {
+                            try {
+                                if (qwUserVoiceLog.getStatus() == 1L) {//接通电话
+                                    qwWorkTask.setTrackType(3);//1正常处理 2 未接听 3 已接听
+                                    qwWorkTask.setDuration(qwUserVoiceLog.getDuration());
+                                } else {
+                                    qwWorkTask.setTrackType(2);//1正常处理 2 未接听 3 已接听
+                                }
+                                qwWorkTask.setStatus(1);//0 待处理 1 已处理 3 过期
+                                qwWorkTask.setUpdateTime(new Date());
+                                qwWorkTaskMapper.updateQwWorkTask(qwWorkTask);
+                            } catch (Exception e) {
+                                log.error("更新任务状态失败, taskId: " + qwWorkTask.getId(), e);
+                            }
                         }
-                        qwWorkTask.setStatus(1);//0 待处理 1 已处理 3 过期
-                        qwWorkTask.setUpdateTime(new Date());
-                        qwWorkTaskMapper.updateQwWorkTask(qwWorkTask);
                     }
+                } else {
+                    log.error("插入失败,qwUserId:" + id + ",extId:" + extUserId + ",uuid:" + uuid + ",totalSeconds" + totalSeconds);
                 }
+            } else {
+                log.error("未找到企微用户,id:" + id + ",extId:" + extUserId + ",uuid:" + uuid + ",totalSeconds" + totalSeconds);
             }
+        } catch (Exception e) {
+            log.error("处理通话回调异常, id:" + id + ",extUserId:" + extUserId + ",recordType:" + recordType + ",totalSeconds:" + totalSeconds + ",uuid:" + uuid, e);
         }
     }
 

+ 1 - 1
fs-service/src/main/java/com/fs/qw/vo/QwUserVoiceLogVo.java

@@ -42,7 +42,7 @@ public class QwUserVoiceLogVo extends BaseEntity {
 
     /** 1接听 2未接 */
     @Excel(name = "接听状态,1接听 2未接")
-    private Long status;
+    private Integer status;
 
     /** 企微id */
     @Excel(name = "企微id")

+ 2 - 2
fs-service/src/main/resources/application-config-druid-syysy.yml

@@ -42,8 +42,8 @@ wx:
       port: 6379
       timeout: 2000
     configs:
-      - appId: wx # 第一个公众号的appid  //公众号名称
-        secret: 5da9ae # 公众号的appsecret
+      - appId: wx17f36a56c701bdea # 第一个公众号的appid   //公众号名称
+        secret: 185030bbe7f8d7a0c16b94dd9d4ea542 # 公众号的appsecret
         token: PPKOdAlCoMO # 接口配置里的Token值
         aesKey: Eswa6VjwtVcw03qZy6Wllgrv5aytIA1SZPEU0kU2 # 接口配置里的EncodingAESKey值
 aifabu:  #爱链接