Selaa lähdekoodia

木易app 消息推送 看课标识调整

wangxy 1 viikko sitten
vanhempi
commit
99c6c5252c

+ 23 - 0
fs-company/src/main/java/com/fs/company/controller/common/CommonController.java

@@ -1,6 +1,8 @@
 package com.fs.company.controller.common;
 
 import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fs.common.config.FSConfig;
 import com.fs.common.constant.Constants;
 import com.fs.common.core.domain.AjaxResult;
@@ -21,13 +23,19 @@ import com.fs.framework.service.TokenService;
 import com.fs.his.domain.FsExportTask;
 import com.fs.his.dto.InquiryConfigDTO;
 import com.fs.his.service.IFsExportTaskService;
+import com.fs.his.service.IFsInquiryOrderMsgService;
+import com.fs.im.dto.OpenImMsgCallBackResponse;
 import com.fs.im.dto.OpenImResponseDTO;
 import com.fs.im.service.OpenIMService;
+import com.fs.im.vo.OpenImMsgCallBackVO;
 import com.fs.qw.service.IQwWorkTaskService;
 import com.fs.qwApi.service.QwApiService;
 import com.fs.system.oss.CloudStorageService;
 import com.fs.system.oss.OSSFactory;
 import com.fs.system.service.ISysConfigService;
+import com.google.gson.Gson;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -90,6 +98,9 @@ public class CommonController
     @Autowired
     private IQwWorkTaskService qwWorkTaskService;
 
+    @Autowired
+    private IFsInquiryOrderMsgService inquiryOrderMsgService;
+
     @PostMapping("common/test")
     public R test() throws Exception
     {
@@ -363,5 +374,17 @@ public class CommonController
         return AjaxResult.success(inquirySelect);
     }
 
+    @ApiOperation("openIm聊天数据回调")
+    @PostMapping(value = "/app/common/callbackAfterSendSingleMsgCommand")
+    public OpenImMsgCallBackResponse openImMsgCallBack(@RequestBody String body, HttpServletRequest request) throws JsonProcessingException {
+
+        Gson gson = new Gson();
+        OpenImMsgCallBackVO messageInfo = gson.fromJson(body, OpenImMsgCallBackVO.class);
+
+        //openIMService.AiAutoReply(messageInfo);
+
+        log.info("收到的参数{}", JSON.toJSONString(messageInfo));
+        return inquiryOrderMsgService.openImSaveMsg(messageInfo);
+    }
 
 }

+ 20 - 0
fs-company/src/main/java/com/fs/company/controller/company/CompanyProfileController.java

@@ -163,4 +163,24 @@ public class CompanyProfileController extends BaseController
         }
         return AjaxResult.error("上传图片异常,请联系管理员");
     }
+
+    /**
+     * 头像上传
+     */
+    @Log(title = "用户头像地址保存", businessType = BusinessType.UPDATE)
+    @PostMapping("/avatarNew")
+    public AjaxResult avatarNew(@RequestParam("avatarUrl") String avatarUrl)
+    {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        if (userService.updateUserAvatar(loginUser.getUsername(), avatarUrl)>0)
+        {
+            AjaxResult ajax = AjaxResult.success();
+            ajax.put("imgUrl", avatarUrl);
+            // 更新缓存用户头像
+            loginUser.getUser().setAvatar(avatarUrl);
+            tokenService.setLoginUser(loginUser);
+            return ajax;
+        }
+        return AjaxResult.error("保存图片异常,请联系管理员");
+    }
 }

+ 1 - 0
fs-company/src/main/java/com/fs/framework/config/SecurityConfig.java

@@ -133,6 +133,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 .antMatchers("/qw/data/**").anonymous()
                 .antMatchers("/qw/user/selectCloudByCompany").anonymous()
                 .antMatchers("/live/LiveMixLiuTestOpen/**").anonymous()
+                .antMatchers("/app/common/callbackAfterSendSingleMsgCommand").anonymous()
                 // 除上面外的所有请求全部需要鉴权认证
                 .anyRequest().authenticated()
                 .and()

+ 5 - 0
fs-service/src/main/java/com/fs/course/param/FsUserCourseVideoAddKfUParam.java

@@ -70,4 +70,9 @@ public class FsUserCourseVideoAddKfUParam implements Serializable {
 
     private Integer isOpenCourse;
 
+    /**
+     * 1 app 2 小程序
+     */
+    private Integer typeFlag;
+
 }

+ 13 - 4
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -1036,7 +1036,11 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
         log.setQwUserId(Long.valueOf(param.getQwUserId()));
         log.setCreateTime(new Date());
         log.setLogType(3);
-        log.setWatchType(2);
+       if(param.getTypeFlag()==1){
+           log.setWatchType(1);
+       }else {
+           log.setWatchType(2);
+       }
         logger.info("【群聊生成看课记录】:{}", param);
         courseWatchLogMapper.insertFsCourseWatchLog(log);
     }
@@ -3207,7 +3211,6 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
                                      Long fsUserId, QwUser qwUser, Long externalId,Integer watchType) {
 
         try {
-
             FsCourseWatchLog watchLog = new FsCourseWatchLog();
             watchLog.setVideoId(videoId);
             watchLog.setQwExternalContactId(externalId);
@@ -3220,13 +3223,14 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
             watchLog.setCreateTime(new Date());
             watchLog.setUpdateTime(new Date());
             watchLog.setLogType(3);
-            watchLog.setWatchType(watchType);
             if (fsUserId == null) {
                 fsUserId = 0L;
             }
 
             watchLog.setUserId(fsUserId);
-
+            if(!CloudHostUtils.hasCloudHostName("木易华康")){
+                watchLog.setWatchType(watchType);
+            }
             //存看课记录
             courseWatchLogMapper.insertOrUpdateFsCourseWatchLog(watchLog);
 
@@ -3779,6 +3783,11 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
             log.setDuration(0L);
             log.setCreateTime(new Date());
             log.setLogType(3);
+            if(param.getTypeFlag()==1){
+                log.setWatchType(1);
+            }else {
+                log.setWatchType(2);
+            }
             logger.info("【群聊生成看课记录】:{}", param);
             courseWatchLogMapper.insertFsCourseWatchLog(log);
         } catch (BeansException e) {

+ 245 - 4
fs-service/src/main/java/com/fs/gtPush/service/impl/uniPush2ServiceImpl.java

@@ -9,12 +9,16 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fs.common.core.domain.R;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
+import com.fs.company.domain.CompanyUser;
+import com.fs.company.mapper.CompanyUserMapper;
 import com.fs.gtPush.domain.PushReqBean;
 import com.fs.gtPush.domain.PushResult;
 import com.fs.gtPush.domain.UniPushLog;
 import com.fs.gtPush.service.UniPushLogService;
 import com.fs.gtPush.service.uniPush2Service;
+import com.fs.im.config.IMConfig;
 import com.fs.im.service.OpenIMService;
+import lombok.extern.slf4j.Slf4j;
 import com.fs.system.domain.SysConfig;
 import com.fs.system.service.ISysConfigService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -29,6 +33,7 @@ import java.util.HashMap;
 import java.util.Map;
 
 @Service
+@Slf4j
 public class uniPush2ServiceImpl implements uniPush2Service {
     @Autowired
     private OpenIMService openIMService;
@@ -45,6 +50,9 @@ public class uniPush2ServiceImpl implements uniPush2Service {
     @Autowired
     private ISysConfigService iSysConfigService;
 
+    @Autowired
+    private CompanyUserMapper companyUserMapper;
+
     @Override
     public PushResult pushMessage(PushReqBean push) {
         SysConfig config = iSysConfigService.selectConfigByConfigKey("his.config");
@@ -53,10 +61,8 @@ public class uniPush2ServiceImpl implements uniPush2Service {
         if (StringUtils.isBlank(url)) {
             throw new RuntimeException("his.config 中未配置 appPushUrl");
         }
-
-        String result = HttpUtil.post(url, push.toString());
-        PushResult pushResult = JSONUtil.toBean(result, PushResult.class);
-        return pushResult;
+        String result = HttpUtil.post(url, JSON.toJSONString(push));
+        return JSONUtil.toBean(result, PushResult.class);
     }
     @Override
     public void pushSopAppLinkMsgByExternalIM(String cropId, String linkTile, String linkDescribe,String linkImageUrl, String link, Long companyUserId,Long fsUserId) throws JsonProcessingException {
@@ -67,6 +73,241 @@ public class uniPush2ServiceImpl implements uniPush2Service {
 
     }
 
+    @Override
+    public void pushIm(Long userId, Long businessId, String purl, String title, String content, Float type, Integer desType, String imJsonString) {
+        try {
+            // 构造推送参数
+            PushReqBean param = getImParam(userId, purl, title, content, type, desType, imJsonString);
+            if (param == null) {
+                // 用户无 clientId 或参数非法时,走离线推送兜底
+                log.warn("pushIm 参数不合法或用户无 jpushId,取消推送");
+                //pushImOffline(userId, businessId, purl, title, content, type, desType, imJsonString);
+                return;
+            }
+
+            // 强制系统通知,即使 App 在后台或被杀也能显示通知
+            param.setForce_notification(true);
+
+            // payload 附加参数(不会影响通知栏展示)
+            if (param.getPayload() == null) {
+                param.setPayload(new HashMap<>());
+            }
+            param.getPayload().put("url", purl);
+            if (StringUtils.isNotBlank(imJsonString)) {
+                param.getPayload().put("extra", imJsonString);
+            }
+
+            // category 通道标签(区分业务类型,方便厂商识别)
+            Map<String, String> category = new HashMap<>();
+            category.put("harmony", "WORK");
+            category.put("huawei", "WORK");
+            category.put("vivo", "TODO");
+            category.put("oppo", "IM");
+            category.put("xiaomi", "IM");
+            param.setCategory(category);
+
+            // options:各厂商定制推送配置(保证后台能弹出通知)
+            Map<String, Object> options = new HashMap<>();
+            Map<String, Object> android = new HashMap<>();
+
+            // 小米
+            Map<String, Object> xm = new HashMap<>();
+            xm.put("/extra.channel_id", "133892");
+            xm.put("/extra.notify_foreground", true);
+            android.put("XM", xm);
+
+            // OPPO
+            Map<String, Object> op = new HashMap<>();
+            op.put("/channel_id", "push_oplus_category_content");
+            op.put("/category", "IM");
+            op.put("/notify_level", 16);
+            op.put("/off_line", true);
+            android.put("OP", op);
+
+            // VIVO
+            Map<String, Object> vv = new HashMap<>();
+            vv.put("/classification", 1); // 系统通知
+            vv.put("/category", "IM");
+            vv.put("/notify_foreground", true);
+            android.put("VV", vv);
+
+            // 华为
+            Map<String, Object> hw = new HashMap<>();
+            hw.put("/message/android/category", "WORK");
+            hw.put("/message/android/notification/importance", "HIGH");
+            hw.put("/message/android/notification/visibility", "PUBLIC");
+            hw.put("/message/android/notification/channel_id", "133892");
+            android.put("HW", hw);
+
+            // 鸿蒙
+            Map<String, Object> ho = new HashMap<>();
+            ho.put("/android/notification/importance", "NORMAL");
+            ho.put("/android/notification/badge/badgeClass", "io.dcloud.PandoraEntry");
+            android.put("HO", ho);
+
+            // iOS 苹果
+            Map<String, Object> ios = new HashMap<>();
+            Map<String, Object> apns = new HashMap<>();
+            // APNs 配置
+            apns.put("/headers/apns-push-type", "alert");
+            apns.put("/headers/apns-priority", 10);
+            apns.put("/headers/apns-topic", "com.mytek.rtlive");
+
+            // 通知内容配置
+            Map<String, Object> alert = new HashMap<>();
+            alert.put("title", title);
+            alert.put("body", content);
+
+            // 声音配置
+            Map<String, Object> sound = new HashMap<>();
+            sound.put("name", "default");
+            sound.put("critical", 0);
+            sound.put("volume", 1.0);
+
+            // APS 配置
+            Map<String, Object> aps = new HashMap<>();
+            aps.put("alert", alert);
+            aps.put("sound", sound);
+            aps.put("badge", 1);
+            aps.put("mutable-content", 1);
+            aps.put("category", "IM");
+
+            apns.put("/aps", aps);
+
+            // 自定义数据
+            Map<String, Object> payload = new HashMap<>();
+            payload.put("url", purl);
+            if (StringUtils.isNotBlank(imJsonString)) {
+                payload.put("extra", imJsonString);
+            }
+            apns.put("/payload", payload);
+
+            ios.put("APNS", apns);
+
+            options.put("android", android);
+            options.put("harmony", new HashMap<>());
+            options.put("ios", ios);
+            param.setOptions(options);
+
+            // 执行推送param = {PushReqBean@19565} "PushReqBean(push_clientid=68e47070636684b4c6763b4198571821, title=im付成键1, content=图片消息, force_notification=true, category={harmony=WORK, huawei=WORK, xiaomi=IM, oppo=IM, vivo=IM}, payload={data={"sendID":"C9576","callbackCommand":"callbackAfterSendSingleMsgCommand","serverMsgID":"187e71c76ad72e4d180e034b4a3941cb","clientMsgID":"428d7691790232a7892244796f5623ed","operationID":"9ed33f7a-2b88-47ee-8509-5f8eecf42e7f","senderPlatformID":5,"senderNickname":"im付成键1","sessionType":1,"msgFrom":100,"contentType":102,"status":1,"sendTime":null,"createTime":null,"content":"{\"sourcePath\":\"微信图片_20251022163452_134_133.png\",\"sourcePicture\":{\"uuid\":\"1f53a2a8-8e70-4584-a9b0-44d4fd1cce40/微信图片_20251022163452_134_133.png\",\"type\":\"image/png\",\"size\":4756,\"width\":200,\"height\":200,\"url\":\"https://web.im.cdwjyyh.com/api/object/C9576/msg_picture_428d7691790232a7892244796f5623ed.png\"},\"bigPicture\":{\"uuid\":\"\",\"type\":\"\",\"size\":0,\"width\":0,\"height\":0,\"url\":\"\"},\"snapshotPic"… View
+            PushResult pushResult = pushMessage(param);
+            if (pushResult == null) {
+                log.error("pushIm 推送失败,返回为空 userId:{}", userId);
+                return;
+            }
+
+            // 构造日志对象
+            UniPushLog pushLog = new UniPushLog();
+            pushLog.setJpushId(param.getPush_clientid() != null ? param.getPush_clientid().toString() : null);
+            pushLog.setPushMsg(JSON.toJSONString(param));
+            pushLog.setType(type);
+            pushLog.setDesType(desType);
+            pushLog.setUserId(userId);
+            pushLog.setBusinessId(businessId);
+            pushLog.setCreateTime(DateUtils.getNowDate());
+
+            // 保存推送日志
+            logService.insertUniPushLog(PushUtils.returnMsg(pushResult, pushLog));
+
+            if (pushResult.getErrCode() != null && (pushResult.getErrCode() == 0 || pushResult.getErrCode() == 200)) {
+                log.info("pushIm 推送成功 userId:{} msg:{}", userId, pushResult.getErrMsg());
+            } else {
+                log.error("pushIm 推送失败 userId:{} msg:{}", userId, pushResult.getErrMsg());
+            }
+        } catch (Exception e) {
+            log.error("pushIm 异常 userId:{} title:{} content:{}", userId, title, content, e);
+        }
+    }
+
+    /**
+     * 专用于 pushIm 的参数构建方法
+     */
+    private PushReqBean getImParam(Long userId, String purl, String title, String content,
+                                   Float type, Integer desType, String imJsonString) {
+        if (userId == null) return null;
+        String jpushId = "";
+        FsUser fsUser = userService.selectFsUserByUserId(userId);
+        if (fsUser == null){
+            CompanyUser companyUser = companyUserMapper.selectCompanyUserById(userId);
+            if (companyUser == null){
+                return null;
+            }
+            jpushId = companyUser.getJpushId();
+        } else {
+            jpushId = fsUser.getJpushId();
+        }
+
+        if (StringUtils.isBlank(jpushId) || "0".equals(jpushId) || "string".equals(jpushId)) {
+            return null;
+        }
+
+        if (title.length() > 20 || content.length() > 50) {
+            log.warn("pushIm 参数非法:title 或 content 超过长度限制 userId:{}", userId);
+            return null;
+        }
+
+        // payload
+        Map<String, Object> payload = new HashMap<>();
+        if (StringUtils.isNotBlank(purl)) {
+            payload.put("url", purl);
+        }
+        if (StringUtils.isNotEmpty(imJsonString)) {
+            payload.put("data", imJsonString);
+        }
+        payload.put("title", title);
+        payload.put("body", content);
+
+        // category
+        Map<String, String> category = new HashMap<>();
+        category.put("harmony", "WORK");
+        category.put("huawei", "WORK");
+        category.put("vivo", "TODO");
+
+        // options.android
+        Map<String, Object> android = new HashMap<>();
+
+        // 小米
+        Map<String, Object> xm = new HashMap<>();
+        xm.put("/extra.channel_id", "133892");
+        android.put("XM", xm);
+
+        // OPPO
+        Map<String, Object> op = new HashMap<>();
+        op.put("/channel_id", "push_oplus_category_content");
+        op.put("/category", "CONTENT");
+        op.put("/notify_level", 16);
+        android.put("OP", op);
+
+        // VIVO
+        Map<String, Object> vv = new HashMap<>();
+        vv.put("/classification", 1);
+        vv.put("/category", "IM");
+        android.put("VV", vv);
+
+        // 华为
+        Map<String, Object> hw = new HashMap<>();
+        hw.put("/message/android/category", "WORK");
+        hw.put("/message/android/notification/badge/class", "io.dcloud.PandoraEntry");
+        hw.put("/message/android/notification/badge/add_num", 1);
+        android.put("HW", hw);
+
+        // 鸿蒙
+        Map<String, Object> ho = new HashMap<>();
+        ho.put("/android/notification/importance", "NORMAL");
+        ho.put("/android/notification/badge/badgeClass", "io.dcloud.PandoraEntry");
+        android.put("HO", ho);
+
+        Map<String, Object> options = new HashMap<>();
+        options.put("android", android);
+
+        PushReqBean bean = new PushReqBean(jpushId, title, content, payload, options);
+        bean.setForce_notification(false);
+        bean.setCategory(category);
+        bean.setBadge("+1");
+
+        return bean;
+    }
+
     @Override
     public void pushOne(Long userId, Long businessId, String purl, String title, String content, Float type, Integer desType) {
         PushReqBean param = getParam(userId, purl,title,content,type,desType,"");

+ 1 - 1
fs-service/src/main/java/com/fs/gtPush/service/uniPush2Service.java

@@ -12,5 +12,5 @@ public interface uniPush2Service {
 
     PushReqBean getParam(Long userId,String purl,String title,String content,Float type,Integer desType,String imJsonString);
     void pushSopAppLinkMsgByExternalIM(String cropId,String linkTile,String linkDescribe,String linkImageUrl,String link,Long companyUserId,Long fsUserId) throws JsonProcessingException;
-
+    void pushIm(Long userId, Long businessId, String purl, String title, String content, Float type, Integer desType,String imJsonString);
 }

+ 232 - 108
fs-service/src/main/java/com/fs/his/service/impl/FsInquiryOrderMsgServiceImpl.java

@@ -4,10 +4,10 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
+import cn.hutool.http.HttpRequest;
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonNode;
@@ -16,13 +16,17 @@ import com.fasterxml.jackson.databind.json.JsonMapper;
 import com.fs.common.service.impl.SmsServiceImpl;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
+import com.fs.company.domain.CompanyUser;
+import com.fs.company.mapper.CompanyUserMapper;
 import com.fs.event.TemplateBean;
 import com.fs.event.TemplateEvent;
 import com.fs.event.TemplateListenEnum;
 import com.fs.event.TemplateListener;
+import com.fs.gtPush.service.uniPush2Service;
 import com.fs.his.domain.*;
 import com.fs.his.dto.FsInquiryOrderPatientDTO;
 import com.fs.his.dto.PayloadDTO;
+import com.fs.his.enums.PushLogDesTypeEnum;
 import com.fs.his.mapper.*;
 import com.fs.his.param.FsFollowReportParam;
 import com.fs.his.param.FsInquiryOrderMsgListDParam;
@@ -33,7 +37,10 @@ import com.fs.his.vo.FsInquiryOrderMsgListDVO;
 import com.fs.im.config.IMConfig;
 import com.fs.im.dto.OpenImMsgCallBackResponse;
 import com.fs.im.service.IImService;
+import com.fs.im.service.OpenIMService;
+import com.fs.im.service.impl.OpenIMServiceImpl;
 import com.fs.im.vo.OpenImMsgCallBackVO;
+import com.fs.im.vo.OpenImResponseDTOTest;
 import com.fs.system.oss.CloudStorageService;
 import com.fs.system.oss.OSSFactory;
 import com.fs.watch.domain.WatchDeviceInfo;
@@ -83,6 +90,14 @@ public class FsInquiryOrderMsgServiceImpl implements IFsInquiryOrderMsgService
     @Autowired
     private DeviceSetUpService deviceSetUpService;
 
+    @Autowired
+    private uniPush2Service uniPush2Service;
+
+    @Autowired
+    private OpenIMService openIMService;
+    @Autowired
+    private CompanyUserMapper companyUserMapper;
+
 //    @Autowired
 //    TemplateListener publisher;
     Logger logger= LoggerFactory.getLogger(getClass());
@@ -335,36 +350,36 @@ public class FsInquiryOrderMsgServiceImpl implements IFsInquiryOrderMsgService
         OpenImMsgCallBackResponse openImMsgCallBackResponse = new OpenImMsgCallBackResponse();
         ObjectMapper objectMapper = new ObjectMapper();
         try {
-            if (openImMsgCallBackVO.getCallbackCommand().equals("callbackBeforeAfterMsgCommand")){
+            if (openImMsgCallBackVO.getCallbackCommand().equals("callbackBeforeAfterMsgCommand")) {
                 fsInquiryOrderMsgMapper.deleteFsInquiryOrderMsgByMsgKey(openImMsgCallBackVO.getClientMsgID());
                 return openImMsgCallBackResponse;
             }
-            String send =openImMsgCallBackVO.getSendID();
-            String to =openImMsgCallBackVO.getRecvID();
-            Long time =openImMsgCallBackVO.getSendTime();
+            String send = openImMsgCallBackVO.getSendID();
+            String to = openImMsgCallBackVO.getRecvID();
+            Long time = openImMsgCallBackVO.getSendTime();
             Date date = new Date(time);
             String content = openImMsgCallBackVO.getContent();
 
 
-            String userId="";
-            String doctorId="";
-            String companyUserId="";
-            String msgType="2";
+            String userId = "";
+            String doctorId = "";
+            String companyUserId = "";
+            String msgType = "2";
             //用户发送消息
-            if (send.contains("U")){
-                msgType="1";
-                userId=send.replace("U","");
-                if (to.contains("D")){
-                    doctorId=to.replace("D","");
-                    fsFollowReportService.addReport(userId,doctorId);
-                }else if (to.contains("C")){
-                    companyUserId=to.replace("C","");
+            if (send.contains("U")) {
+                msgType = "1";
+                userId = send.replace("U", "");
+                if (to.contains("D")) {
+                    doctorId = to.replace("D", "");
+                    fsFollowReportService.addReport(userId, doctorId);
+                } else if (to.contains("C")) {
+                    companyUserId = to.replace("C", "");
                 }
                 //医生发送消息
-            }else if (send.contains("D")){
-                doctorId=send.replace("D","");
-                if (to.contains("U")){
-                    userId=to.replace("U","");
+            } else if (send.contains("D")) {
+                doctorId = send.replace("D", "");
+                if (to.contains("U")) {
+                    userId = to.replace("U", "");
                     TemplateBean templateBean = TemplateBean.builder()
                             .title("您收到咨询回复")
                             .remark("您的咨询已回复")
@@ -372,31 +387,31 @@ public class FsInquiryOrderMsgServiceImpl implements IFsInquiryOrderMsgService
                             .templateType(TemplateListenEnum.TYPE_5.getValue())
                             .build();
                     publisher.publishEvent(new TemplateEvent(this, templateBean));
-                    if (openImMsgCallBackVO.getContentType()==101){
-                        if (content.contains("您的信息我已收到")){
+                    if (openImMsgCallBackVO.getContentType() == 101) {
+                        if (content.contains("您的信息我已收到")) {
                             long doctorIdL = Long.parseLong(doctorId);
                             long userIdL = Long.parseLong(userId);
                             int count = fsFollowReportMapper.selectFollowByUserIdAndDoctorIdAndType(userIdL, doctorIdL);
-                            if (count==0){
+                            if (count == 0) {
                                 FsUser fsUser = fsUserMapper.selectFsUserByUserId(userIdL);
-                                if (fsUser!=null&&fsUser.getPhone()!=null){
+                                if (fsUser != null && fsUser.getPhone() != null) {
                                     FsInquiryOrder order = fsFollowReportMapper.selectFsInquiryOrderByUserAndDoc(userIdL, doctorIdL);
-                                    if (order!=null){
-                                        FsInquiryOrderPatientDTO patientDTO = JSON.parseObject(order.getPatientJson(),FsInquiryOrderPatientDTO.class);
-                                        if (patientDTO!=null&&patientDTO.getPatientName()!=null){
-                                            FsDoctor doctor=doctorMapper.selectFsDoctorByDoctorId(doctorIdL);
-                                            if (doctor.getDeptId()!=null&&doctor.getDeptId().compareTo(39L)==0){
-                                                logger.info("药师回复发送短信:"+fsUser.getPhone()+patientDTO.getPatientName());
+                                    if (order != null) {
+                                        FsInquiryOrderPatientDTO patientDTO = JSON.parseObject(order.getPatientJson(), FsInquiryOrderPatientDTO.class);
+                                        if (patientDTO != null && patientDTO.getPatientName() != null) {
+                                            FsDoctor doctor = doctorMapper.selectFsDoctorByDoctorId(doctorIdL);
+                                            if (doctor.getDeptId() != null && doctor.getDeptId().compareTo(39L) == 0) {
+                                                logger.info("药师回复发送短信:" + fsUser.getPhone() + patientDTO.getPatientName());
                                                 smsService.sendUserSms(fsUser.getPhone(), patientDTO.getPatientName(), "7");
-                                            }else {
-                                                logger.info("医生回复发送短信:"+patientDTO.getMobile()+patientDTO.getPatientName());
+                                            } else {
+                                                logger.info("医生回复发送短信:" + patientDTO.getMobile() + patientDTO.getPatientName());
                                                 smsService.sendUserSms(fsUser.getPhone(), patientDTO.getPatientName(), "4");
                                             }
                                         }
-                                    }else {
+                                    } else {
                                         FsFollow fo = fsFollowReportMapper.selectFsFollowById(userIdL, doctorIdL);
-                                        if (fo!=null&&fo.getPatientName()!=null){
-                                            logger.info("药师回复发送短信:"+fsUser.getPhone()+fo.getPatientName());
+                                        if (fo != null && fo.getPatientName() != null) {
+                                            logger.info("药师回复发送短信:" + fsUser.getPhone() + fo.getPatientName());
                                             smsService.sendUserSms(fsUser.getPhone(), fo.getPatientName(), "7");
                                         }
                                     }
@@ -406,34 +421,78 @@ public class FsInquiryOrderMsgServiceImpl implements IFsInquiryOrderMsgService
                             }
                         }
                     }
-                }else {
-                    companyUserId = to.replace("C","");
+                } else {
+                    companyUserId = to.replace("C", "");
                 }
-                //销售发送消息
-            }else if (send.contains("C")){
-                companyUserId=send.replace("C","");
-                if (to.contains("U")){
-                    userId=to.replace("U","");
-                }else {
-                    doctorId = to.replace("D","");
+                //客服发送消息
+            } else if (send.contains("C")) {
+                companyUserId = send.replace("C", "");
+                if (to.contains("U")) {
+                    userId = to.replace("U", "");
+                } else {
+                    doctorId = to.replace("D", "");
                 }
             }
             Long orderId = fsInquiryOrderMsgMapper.selectFsInquiryOrderMsgOrderId(doctorId, userId);
-            if (orderId==null){
-                orderId = fsInquiryOrderMsgMapper.selectFsInquiryOrderMsgOrderIdByDate(doctorId, userId,date);
+            if (orderId == null) {
+                orderId = fsInquiryOrderMsgMapper.selectFsInquiryOrderMsgOrderIdByDate(doctorId, userId, date);
             }
 
             Integer msgContentType = openImMsgCallBackVO.getContentType();
-            Integer type=0;
-            String cont="";
+            Integer type = 0;
+            String cont = "";
             JsonNode jsonNode = null;
-            if (msgContentType != null ) {
+            String a = "";
+            openImMsgCallBackVO.setType("im");
+            if (send.contains("C") && StringUtils.isEmpty(openImMsgCallBackVO.getSenderNickname())) {
+                CompanyUser companyUser = companyUserMapper.selectCompanyUserById(Long.parseLong(openImMsgCallBackVO.getSendID().replace("C", "")));
+                openImMsgCallBackVO.setSenderNickname(StringUtils.isNotEmpty(companyUser.getImNickName()) ? companyUser.getImNickName() : companyUser.getNickName());
+            }
+            if (send.contains("D")) {
+                FsDoctor fsDoctor = doctorMapper.selectFsDoctorByDoctorId(Long.parseLong(openImMsgCallBackVO.getSendID().replace("D", "")));
+                openImMsgCallBackVO.setSenderNickname(fsDoctor.getDoctorName());
+
+            }
+            String jsonStr = objectMapper.writeValueAsString(openImMsgCallBackVO);
+            if (msgContentType != null) {
+                if (to.startsWith("U")) {
+                    a = to.replace("U", "");
+                } else if (to.startsWith("C")) {
+                    a = to.replace("C", "");
+                }
                 switch (msgContentType) {
+                    case 1601:
+                        log.info("执行音视频通话推送");
+                        cont = "通话消息";
+                        type = 1;
+                        //jsonNode = objectMapper.readTree(content);
+                        String adminToken = openIMService.getAdminToken();
+                        Map<String, Object> paramMap = new HashMap<>();
+                        ArrayList<String> userIDs = new ArrayList<>();
+                        userIDs.add(send);
+                        paramMap.put("userIDs", userIDs);
+
+                        String jsonBody = JSONUtil.toJsonStr(paramMap);
+                        String result1 = HttpRequest.post("https://web.im.cdwjyyh.com/api/user/get_users_info")
+                                .header("operationID", String.valueOf(time))
+                                .header("token", adminToken)
+                                .body(jsonBody)
+                                .execute()
+                                .body();
+                        OpenIMServiceImpl.UpdateUserInfo updateUserInfo = new OpenIMServiceImpl.UpdateUserInfo();
+                        OpenImResponseDTOTest responseDTO1 = JSONUtil.toBean(result1, OpenImResponseDTOTest.class);
+                        List<OpenIMServiceImpl.UserInfo> users = responseDTO1.getData().getUsersInfo();
+
+                        uniPush2Service.pushIm(Long.parseLong(a), 0l, "", users.get(0).getNickname(), "通话消息", 1f, PushLogDesTypeEnum.IM_MSG.getValue(), jsonStr);
+
+                        break;
                     //普通消息
                     case 101:
-                        type=1;
+                        type = 1;
                         jsonNode = objectMapper.readTree(content);
-                        cont=jsonNode.get("content").asText();
+                        cont = jsonNode.get("content").asText();
+                        uniPush2Service.pushIm(Long.parseLong(a), 0l, "", openImMsgCallBackVO.getSenderNickname(), cont, 1f, PushLogDesTypeEnum.IM_MSG.getValue(), jsonStr);
+
                         break;
                     //语音消息
                     case 103:
@@ -442,24 +501,25 @@ public class FsInquiryOrderMsgServiceImpl implements IFsInquiryOrderMsgService
                         try {
                             // 创建URL对象
                             URL url = new URL(soundUrl);
-                            InputStream in =  url.openStream();
+                            InputStream in = url.openStream();
                             CloudStorageService storage = OSSFactory.build();
                             cont = storage.uploadSuffix(in, ".m4a");
                         } catch (IOException e) {
                             e.printStackTrace();
                         }
-                        type=2;
-                        //医生发送的语音消息,这一段是同步语音消息到腕表的
-                        /*if (send.contains("D")){
-                            WatchDeviceInfo u = watchDeviceInfoMapper.selectByUserId(to.replace("U", ""));
-                            if (u!=null&& StringUtils.isNotEmpty(u.getDeviceNumber())){
-                                DeviceSendParam deviceSendParam = new DeviceSendParam();
-                                deviceSendParam.setDeviceId(u.getDeviceNumber());
-                                deviceSendParam.setFileUrl(soundUrl);
-                                deviceSendParam.setSendUserName(openImMsgCallBackVO.getSenderNickname());
-                                deviceSetUpService.sendMp3(deviceSendParam);
-                            }
-                        }*/
+                        type = 2;
+                        //医生发送的语音消息
+//                        if (send.contains("D")) {
+//                            WatchDeviceInfo u = watchDeviceInfoMapper.selectByUserId(to.replace("U", ""));
+//                            if (u != null && StringUtils.isNotEmpty(u.getDeviceNumber())) {
+//                                DeviceSendParam deviceSendParam = new DeviceSendParam();
+//                                deviceSendParam.setDeviceId(u.getDeviceNumber());
+//                                deviceSendParam.setFileUrl(soundUrl);
+//                                deviceSendParam.setSendUserName(openImMsgCallBackVO.getSenderNickname());
+////                                deviceSetUpService.sendMp3(deviceSendParam);
+//                            }
+//                        }
+                        uniPush2Service.pushIm(Long.parseLong(a), 0l, "", openImMsgCallBackVO.getSenderNickname(), "语音消息", 1f, PushLogDesTypeEnum.IM_MSG.getValue(), jsonStr);
                         break;
                     //图片消息
                     case 102:
@@ -467,13 +527,16 @@ public class FsInquiryOrderMsgServiceImpl implements IFsInquiryOrderMsgService
                         String imgUrl = jsonNode.get("sourcePicture").get("url").asText();
                         try {
                             URL url = new URL(imgUrl);
-                            InputStream in =  url.openStream();
+                            InputStream in = url.openStream();
                             CloudStorageService storage = OSSFactory.build();
                             cont = storage.uploadSuffix(in, ".jpg");
                         } catch (IOException e) {
                             e.printStackTrace();
                         }
-                        type=3;
+                        openImMsgCallBackVO.setContent("");
+                        jsonStr = objectMapper.writeValueAsString(openImMsgCallBackVO);
+                        type = 3;
+                        uniPush2Service.pushIm(Long.parseLong(a), 0l, "", openImMsgCallBackVO.getSenderNickname(), "图片消息", 1f, PushLogDesTypeEnum.IM_MSG.getValue(), jsonStr);
                         break;
                     //视频消息
                     case 104:
@@ -481,77 +544,139 @@ public class FsInquiryOrderMsgServiceImpl implements IFsInquiryOrderMsgService
                         String videoUrl = jsonNode.get("videoUrl").asText();
                         try {
                             URL url = new URL(videoUrl);
-                            InputStream in =  url.openStream();
+                            InputStream in = url.openStream();
                             CloudStorageService storage = OSSFactory.build();
-                            cont = storage.uploadSuffix(in, "."+jsonNode.get("videoType").asText());
+                            cont = storage.uploadSuffix(in, "." + jsonNode.get("videoType").asText());
                         } catch (IOException e) {
                             e.printStackTrace();
                         }
-                        type=4;
+                        openImMsgCallBackVO.setContent("");
+                        jsonStr = objectMapper.writeValueAsString(openImMsgCallBackVO);
+                        type = 4;
+                        uniPush2Service.pushIm(Long.parseLong(a), 0l, "", openImMsgCallBackVO.getSenderNickname(), "视频消息", 1f, PushLogDesTypeEnum.IM_MSG.getValue(), jsonStr);
+                        break;
+                    //文件消息
+                    case 105:
+                        jsonNode = objectMapper.readTree(content); // 转为 JsonNode
+                        cont = jsonNode.get("fileName").asText();
+                        type = 4;
+                        openImMsgCallBackVO.setContent("");
+                        jsonStr = objectMapper.writeValueAsString(openImMsgCallBackVO);
+                        uniPush2Service.pushIm(Long.parseLong(a), 0l, "", openImMsgCallBackVO.getSenderNickname(), "文件消息", 1f, PushLogDesTypeEnum.IM_MSG.getValue(), jsonStr);
                         break;
                     //自定义消息
                     case 110:
-                        PayloadDTO payloadDTO = objectMapper.readValue(content, PayloadDTO.class);
-
-                        jsonNode = objectMapper.readTree(payloadDTO.getData());
-                        JsonNode payload = jsonNode.get("payload");
+                        JsonNode rootNode = objectMapper.readTree(content);
+                        String dataStr = rootNode.get("data").asText();
+                        JsonNode innerNode = objectMapper.readTree(dataStr);
+                        JsonNode payload = innerNode.get("payload");
                         String data = payload.get("data").asText();
                         JsonNode extension = payload.get("extension");
-                        if (data.equals("prescribe")){
+                        FsUser user = null;
+                        if (data.equals("prescribe")) {
                             String prescribeId = extension.get("prescribeId").asText();
                             FsPrescribe fsPrescribe = fsPrescribeMapper.selectFsPrescribeByPrescribeId(Long.parseLong(prescribeId));
-                            cont=objectMapper.writeValueAsString(fsPrescribe);
+                            cont = objectMapper.writeValueAsString(fsPrescribe);
                             //orderId = fsPrescribe.getInquiryOrderId();
-                            type=5;
+                            type = 5;
+                            user = fsUserMapper.selectFsUserByUserId(Long.parseLong(a));
+                            if (StringUtils.isNotEmpty(user.getJpushId())) {
+                                uniPush2Service.pushIm(Long.parseLong(a), 0l, "", openImMsgCallBackVO.getSenderNickname(), "电子处方单", 1f, PushLogDesTypeEnum.IM_MSG.getValue(), jsonStr);
+                            }
                             break;
-                        }else if (data.equals("report")){
+                        } else if (data.equals("report")) {
 
                             String description = payload.get("description").asText();
                             FsInquiryOrderReport fsInquiryOrderReport = fsInquiryOrderReportService.selectFsInquiryOrderReportByOrderId(Long.parseLong(description));
-                            if (fsInquiryOrderReport!=null){
+                            if (fsInquiryOrderReport != null) {
                                 cont = fsInquiryOrderReport.getOrderId().toString();
                             }
-                            type=6;
+                            type = 6;
+                            user = fsUserMapper.selectFsUserByUserId(Long.parseLong(a));
+                            if (StringUtils.isNotEmpty(user.getJpushId())) {
+                                uniPush2Service.pushIm(Long.parseLong(a), 0l, "", openImMsgCallBackVO.getSenderNickname(), "问诊报告单", 1f, PushLogDesTypeEnum.IM_MSG.getValue(), jsonStr);
+                            }
                             break;
-                        }else if (data.equals("follow")){
-                            cont=payload.get("extension").get("followId").asText();
-                            type= 7;
+                        } else if (data.equals("follow")) {
+                            cont = payload.get("extension").get("followId").asText();
+                            type = 7;
                             //orderId = payload.get("extension").get("followId").asLong();
+                            user = fsUserMapper.selectFsUserByUserId(Long.parseLong(a));
+                            if (StringUtils.isNotEmpty(user.getJpushId())) {
+                                uniPush2Service.pushIm(Long.parseLong(a), 0l, "", openImMsgCallBackVO.getSenderNickname(), "随访单", 1f, PushLogDesTypeEnum.IM_MSG.getValue(), jsonStr);
+                            }
                             break;
-                        }else if (data.equals("drugReport")){
-                            cont=payload.get("description").asText();
+                        } else if (data.equals("drugReport")) {
+                            cont = payload.get("description").asText();
                             //orderId = payload.get("description").asLong();
-                            type= 8;
+                            type = 8;
+                            user = fsUserMapper.selectFsUserByUserId(Long.parseLong(a));
+                            if (StringUtils.isNotEmpty(user.getJpushId())) {
+                                uniPush2Service.pushIm(Long.parseLong(a), 0l, "", openImMsgCallBackVO.getSenderNickname(), "用药报告单", 1f, PushLogDesTypeEnum.IM_MSG.getValue(), jsonStr);
+                            }
                             break;
-                        } else if (data.equals("package")){
-                            cont=payload.get("extension").get("title").asText();
-                            //orderId = payload.get("description").asLong();
-                            type= 9;
+                        } else if (data.equals("package")) {
+                            cont = payload.get("extension").get("title").asText();
+                            openImMsgCallBackVO.setSendTime(null);
+                            openImMsgCallBackVO.setCreateTime(null);
+                            openImMsgCallBackVO.setFaceURL("");
+                            jsonStr = objectMapper.writeValueAsString(openImMsgCallBackVO);
+                            type = 9;
+                            user = fsUserMapper.selectFsUserByUserId(Long.parseLong(a));
+                            openImMsgCallBackVO.setContent("");
+                            jsonStr = objectMapper.writeValueAsString(openImMsgCallBackVO);
+                            if (StringUtils.isNotEmpty(user.getJpushId())) {
+                                uniPush2Service.pushIm(Long.parseLong(a), 0l, "", openImMsgCallBackVO.getSenderNickname(), "套餐包", 1f, PushLogDesTypeEnum.IM_MSG.getValue(), jsonStr);
+                            }
                             break;
-                        }else if (data.equals("couponPackage")){
-                            cont=payload.get("extension").get("title").asText();
+                        } else if (data.equals("couponPackage")) {
+                            cont = payload.get("extension").get("title").asText();
                             //orderId = payload.get("description").asLong();
-                            type= 10;
+                            type = 10;
+                            user = fsUserMapper.selectFsUserByUserId(Long.parseLong(a));
+                            openImMsgCallBackVO.setContent("");
+                            jsonStr = objectMapper.writeValueAsString(openImMsgCallBackVO);
+                            if (StringUtils.isNotEmpty(user.getJpushId())) {
+                                uniPush2Service.pushIm(Long.parseLong(a), 0l, "", openImMsgCallBackVO.getSenderNickname(), "私域疗法券", 1f, PushLogDesTypeEnum.IM_MSG.getValue(), jsonStr);
+                            }
                             break;
-                        }else if (data.equals("inquirySelect")){
-                            cont=payload.get("extension").get("title").asText();
+                        } else if (data.equals("inquirySelect")) {
+                            cont = payload.get("extension").get("title").asText();
                             //orderId = payload.get("description").asLong();
-                            type= 11;
+                            type = 11;
+                            user = fsUserMapper.selectFsUserByUserId(Long.parseLong(a));
+                            openImMsgCallBackVO.setContent("");
+                            jsonStr = objectMapper.writeValueAsString(openImMsgCallBackVO);
+                            if (StringUtils.isNotEmpty(user.getJpushId())) {
+                                uniPush2Service.pushIm(Long.parseLong(a), 0l, "", openImMsgCallBackVO.getSenderNickname(), "会诊", 1f, PushLogDesTypeEnum.IM_MSG.getValue(), jsonStr);
+                            }
                             break;
-                        }else if (data.equals("startInquiry")||data.equals("finishInquiry")){
-                            cont =payload.get("extension").get("title").asText();
-                            type=1;
+                        } else if (data.equals("startInquiry") || data.equals("finishInquiry")) {
+                            cont = payload.get("extension").get("title").asText();
+                            type = 1;
+                            user = fsUserMapper.selectFsUserByUserId(Long.parseLong(a));
+                            if (StringUtils.isNotEmpty(user.getJpushId())) {
+                                uniPush2Service.pushIm(Long.parseLong(a), 0l, "", openImMsgCallBackVO.getSenderNickname(), "接诊通知", 1f, PushLogDesTypeEnum.IM_MSG.getValue(), jsonStr);
+                            }
+                            break;
+                        } else if (data.equals("course")) {
+                            cont = payload.get("extension").get("title").asText();
+                            type = 1;
+                            user = fsUserMapper.selectFsUserByUserId(Long.parseLong(a));
+                            if (StringUtils.isNotEmpty(user.getJpushId())) {
+                                uniPush2Service.pushIm(Long.parseLong(a), 0l, "", openImMsgCallBackVO.getSenderNickname(), cont, 1f, PushLogDesTypeEnum.IM_MSG.getValue(), jsonStr);
+                            }
                             break;
                         }
 
 
                 }
             }
-            if (StringUtils.isEmpty(cont)){
+            if (StringUtils.isEmpty(cont)) {
                 openImMsgCallBackResponse.setErrMsg("无消息内容,未保存到数据库");
                 return openImMsgCallBackResponse;
             }
-            if (orderId==null&&StringUtils.isNotEmpty(openImMsgCallBackVO.getEx())){
+            if (orderId == null && StringUtils.isNotEmpty(openImMsgCallBackVO.getEx())) {
                 JsonNode exJson = objectMapper.readTree(openImMsgCallBackVO.getEx());
                 orderId = exJson.get("orderId").asLong();
             }
@@ -567,11 +692,11 @@ public class FsInquiryOrderMsgServiceImpl implements IFsInquiryOrderMsgService
             msg.setMsgType(msgType);
             fsInquiryOrderMsgMapper.insertFsInquiryOrderMsg(msg);
             // 极光推送
-            //String pushContent = (type == 1) ? content :"您有一条新消息";
-            //uniPush2Service.pushOne(Long.parseLong(to.replace("U","")), orderId, null, "新消息提醒", pushContent, PushLogTypeEnum.MARKET.getValue(), PushLogDesTypeEnum.MARKET_PUSH.getValue());
-            log.info("返回的参数 {}", JSON.toJSONString(openImMsgCallBackResponse));
+            String pushContent = (type == 1) ? content : "您有一条新消息";
+//            uniPush2Service.pushIm(Long.parseLong(to.replace("U","")), orderId, null, "新消息提醒", pushContent, PushLogTypeEnum.MARKET.getValue(), PushLogDesTypeEnum.IM_MSG.getValue());
+//            log.info("返回的参数 {}", JSON.toJSONString(openImMsgCallBackResponse));
             return openImMsgCallBackResponse;
-        } catch (Exception e){
+        } catch (Exception e) {
             openImMsgCallBackResponse.setActionCode(202);
             openImMsgCallBackResponse.setErrCode(100);
             openImMsgCallBackResponse.setErrDlt("");
@@ -579,7 +704,6 @@ public class FsInquiryOrderMsgServiceImpl implements IFsInquiryOrderMsgService
             log.info("返回的参数 {}", JSON.toJSONString(openImMsgCallBackResponse));
             return openImMsgCallBackResponse;
         }
-
     }
 
 }

+ 1 - 0
fs-service/src/main/java/com/fs/im/vo/OpenImMsgCallBackVO.java

@@ -25,4 +25,5 @@ public class OpenImMsgCallBackVO {
     private String faceURL;
     private String ex;
     private String recvID;
+    private String type;
 }

+ 30 - 26
fs-service/src/main/java/com/fs/qw/service/AsyncQwAiChatSopService.java

@@ -1,6 +1,7 @@
 package com.fs.qw.service;
 
 import com.alibaba.fastjson.JSON;
+import com.fs.common.utils.CloudHostUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.date.DateUtil;
 import com.fs.company.service.ICompanyMiniappService;
@@ -99,7 +100,7 @@ public class AsyncQwAiChatSopService {
 
 
         QwExternalContact contact;
-        if(externalId != null){
+        if (externalId != null) {
             contact = qwExternalContactMapper.selectById(externalId);
         } else {
             contact = null;
@@ -115,23 +116,23 @@ public class AsyncQwAiChatSopService {
 
         if (config == null) {
             log.error("配置为空-新客对话创建失败");
-            return ;
+            return;
         }
 
         QwCompany qwCompany = iQwCompanyService.getQwCompanyByRedis(qwUser.getCorpId());
 
-        if (qwCompany == null ) {
+        if (qwCompany == null) {
             log.error("企业微信主体未配置默认小程序-新客对话创建失败");
-            return ;
+            return;
         }
 
-        if (qwSopAiRuleTimeVOS != null && !qwSopAiRuleTimeVOS.isEmpty()){
+        if (qwSopAiRuleTimeVOS != null && !qwSopAiRuleTimeVOS.isEmpty()) {
 
-            qwSopAiRuleTimeVOS.forEach(item->{
+            qwSopAiRuleTimeVOS.forEach(item -> {
 
                 List<QwSopTempContent> tempContentList = qwSopTempContentMapper.selectQwSopTempContentByTempIdAndRules(item.getTempId());
 
-                tempContentList.forEach(content->{
+                tempContentList.forEach(content -> {
                     QwSopLogs sopLogs = new QwSopLogs();
                     sopLogs.setQwUserKey(qwUser.getId());
                     sopLogs.setQwUserid(userID);
@@ -148,7 +149,7 @@ public class AsyncQwAiChatSopService {
                     sopLogs.setSendType(4);
                     sopLogs.setExternalUserName(externalContactName);
 
-                    List<QwSopTempSetting.Content.Setting> settingList =new ArrayList<>();
+                    List<QwSopTempSetting.Content.Setting> settingList = new ArrayList<>();
                     QwSopTempSetting.Content.Setting setting = JSON.parseObject(content.getContent(), QwSopTempSetting.Content.Setting.class);
 
                     LocalDateTime dateTime = LocalDateTime.of(currentDate, localTime);
@@ -174,30 +175,30 @@ public class AsyncQwAiChatSopService {
 
                             if ("1".equals(setting.getContentType())) {
                                 String defaultName = "同学";
-                                if(contact != null && StringUtils.isNotEmpty(contact.getName()) && !"待同步客户".equals(contact.getName())){
+                                if (contact != null && StringUtils.isNotEmpty(contact.getName()) && !"待同步客户".equals(contact.getName())) {
                                     defaultName = contact.getName();
                                 }
                                 setting.setValue(setting.getValue()
                                         .replaceAll("#销售称呼#", StringUtil.strIsNullOrEmpty(qwUser.getWelcomeText()) ? "" : qwUser.getWelcomeText())
-                                        .replaceAll("#客户称呼#", contact == null || StringUtil.strIsNullOrEmpty(contact.getStageStatus())|| "0".equals(contact.getStageStatus())?defaultName:contact.getStageStatus()));
+                                        .replaceAll("#客户称呼#", contact == null || StringUtil.strIsNullOrEmpty(contact.getStageStatus()) || "0".equals(contact.getStageStatus()) ? defaultName : contact.getStageStatus()));
                             }
 
 
                             break;
                         //小程序单独
                         case "4":
-                            addWatchLogIfNeededByNewChat(item.getId(), content.getVideoId(), content.getCourseId(), fsUserId,qwUser.getId(), qwUser.getCompanyUserId(), qwUser.getCompanyId(),
-                                    externalId, sendTime, expirySendTime,2);
+                            addWatchLogIfNeededByNewChat(item.getId(), content.getVideoId(), content.getCourseId(), fsUserId, qwUser.getId(), qwUser.getCompanyUserId(), qwUser.getCompanyId(),
+                                    externalId, sendTime, expirySendTime, 2);
 
                             String linkByMiniApp = createLinkByMiniAppByNewChat(setting.getExpiresDays(), qwUser.getCorpId(), expirySendTime, content.getCourseId(), content.getVideoId(),
-                                    qwUser.getId(), String.valueOf(qwUser.getCompanyUserId()),String.valueOf(qwUser.getCompanyId()), externalId, config);
+                                    qwUser.getId(), String.valueOf(qwUser.getCompanyUserId()), String.valueOf(qwUser.getCompanyId()), externalId, config);
 
 
                             setting.setMiniprogramAppid(qwCompany.getMiniAppId());
 
                             String miniprogramTitle = setting.getMiniprogramTitle();
                             int maxLength = 17;
-                            setting.setMiniprogramTitle(miniprogramTitle.length() > maxLength ? miniprogramTitle.substring(0, maxLength)+"..." : miniprogramTitle);
+                            setting.setMiniprogramTitle(miniprogramTitle.length() > maxLength ? miniprogramTitle.substring(0, maxLength) + "..." : miniprogramTitle);
                             setting.setMiniprogramPage(linkByMiniApp);
                             break;
                         case "7":
@@ -211,7 +212,7 @@ public class AsyncQwAiChatSopService {
 
                     settingList.add(setting);
 
-                    QwSopTempSetting.Content clonedContent=new QwSopTempSetting.Content();
+                    QwSopTempSetting.Content clonedContent = new QwSopTempSetting.Content();
                     clonedContent.setContentType(setting.getContentType());
                     clonedContent.setCourseId(Long.valueOf(content.getCourseId()));
                     clonedContent.setVideoId(Long.valueOf(content.getVideoId()));
@@ -252,10 +253,11 @@ public class AsyncQwAiChatSopService {
             }
         }
     }
+
     //插入观看记录
     private Long addWatchLogIfNeededByNewChat(String sopId, Integer videoId, Integer courseId,
-                                     Long fsUserId, Long qwUserId, Long companyUserId,
-                                     Long companyId, Long externalId, String startTime, Date createTime,Integer watchType) {
+                                              Long fsUserId, Long qwUserId, Long companyUserId,
+                                              Long companyId, Long externalId, String startTime, Date createTime, Integer watchType) {
 
         try {
             FsCourseWatchLog watchLog = new FsCourseWatchLog();
@@ -272,7 +274,9 @@ public class AsyncQwAiChatSopService {
             watchLog.setUpdateTime(createTime);
             watchLog.setLogType(3);
             watchLog.setUserId(fsUserId);
-            watchLog.setWatchType(watchType);
+            if (!CloudHostUtils.hasCloudHostName("木易华康")) {
+                watchLog.setWatchType(watchType);
+            }
             watchLog.setCampPeriodTime(sopUserLogsInfoService.convertStringToDate(startTime, "yyyy-MM-dd HH:mm:ss"));
 
             //存看课记录
@@ -286,7 +290,7 @@ public class AsyncQwAiChatSopService {
 
     private String createLinkByMiniAppByNewChat(Integer expiresDays, String corpId, Date sendTime,
                                                 Integer courseId, Integer videoId, Long qwUserId,
-                                       String companyUserId, String companyId, Long externalId, CourseConfig config) {
+                                                String companyUserId, String companyId, Long externalId, CourseConfig config) {
 
         try {
             FsCourseLink link = sopUserLogsInfoService.createFsCourseLink(corpId, sendTime, courseId, videoId, qwUserId,
@@ -305,11 +309,11 @@ public class AsyncQwAiChatSopService {
             //存短链-
             fsCourseLinkMapper.insertFsCourseLink(link);
             return link.getRealLink();
-        }catch (Exception e){
+        } catch (Exception e) {
             log.error("创建新客对话短链失败:{}|{}|{}|{}|{}", corpId, sendTime, courseId, videoId, qwUserId);
-            log.error("e",e);
+            log.error("e", e);
         }
-            return null;
+        return null;
     }
 
     public Date createUpdateTimeByNewChat(Integer expiresDays, Date sendTime, CourseConfig config) {
@@ -334,7 +338,7 @@ public class AsyncQwAiChatSopService {
             setting.setVoiceUrl(qwSopTempVoice.getVoiceUrl());
             setting.setVoiceDuration(String.valueOf(qwSopTempVoice.getDuration()));
         } else if (qwSopTempVoice == null) {
-            if(companyUserId != null && setting.getValue() != null){
+            if (companyUserId != null && setting.getValue() != null) {
                 qwSopTempVoice = new QwSopTempVoice();
                 qwSopTempVoice.setCompanyUserId(companyUserId);
                 qwSopTempVoice.setVoiceTxt(setting.getValue());
@@ -348,15 +352,15 @@ public class AsyncQwAiChatSopService {
      * 在职转接 -AI用户信息 一起转
      */
     @Async("threadPoolTaskExecutor")
-    public void executeQwSopJobTransfer(Long externalContactId, Long externalId){
+    public void executeQwSopJobTransfer(Long externalContactId, Long externalId) {
         try {
             QwExternalContactInfo contactInfo = qwExternalContactInfoMapper.selectQwExternalContactInfoByExternalContactId(externalContactId);
             if (contactInfo != null) {
                 contactInfo.setExternalContactId(externalId);
                 qwExternalContactInfoMapper.insertQwExternalContactInfo(contactInfo);
             }
-        }catch (Exception e){
-            log.error("在职转接-转接客户AI信息失败:{},{}",externalContactId,externalId,e);
+        } catch (Exception e) {
+            log.error("在职转接-转接客户AI信息失败:{},{}", externalContactId, externalId, e);
         }
 
     }

+ 4 - 1
fs-service/src/main/java/com/fs/qw/service/impl/QwContactWayServiceImpl.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.fs.common.BeanCopyUtils;
 import com.fs.common.core.domain.R;
 import com.fs.common.exception.CustomException;
+import com.fs.common.utils.CloudHostUtils;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.course.domain.FsCourseWatchLog;
@@ -518,7 +519,9 @@ public class QwContactWayServiceImpl implements IQwContactWayService
         watchLog.setUpdateTime(new Date());
         watchLog.setLogType(3);
         watchLog.setUserId(0L);
-        watchLog.setWatchType(watchType);
+        if(!CloudHostUtils.hasCloudHostName("木易华康")){
+            watchLog.setWatchType(watchType);
+        }
         watchLogMapper.insertOrUpdateFsCourseWatchLog(watchLog);
     }
 

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 176 - 182
fs-service/src/main/java/com/fs/qw/service/impl/QwExternalContactServiceImpl.java


+ 3 - 1
fs-service/src/main/java/com/fs/sop/service/impl/SopUserLogsInfoServiceImpl.java

@@ -2121,7 +2121,9 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
             watchLog.setUpdateTime(createTime);
             watchLog.setLogType(3);
             watchLog.setUserId(fsUserId);
-            watchLog.setWatchType(watchType);
+            if(!CloudHostUtils.hasCloudHostName("木易华康")){
+                watchLog.setWatchType(watchType);
+            }
             watchLog.setCampPeriodTime(convertStringToDate(startTime,"yyyy-MM-dd"));
 
             //存看课记录

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä