吴树波 2 veckor sedan
förälder
incheckning
40e45ef01f

+ 4 - 4
fs-admin/src/main/resources/application.yml

@@ -4,11 +4,11 @@ server:
 # Spring配置
 spring:
   profiles:
-#    active: dev
-#    include: common,config-dev
+    active: dev
+    include: common,config-dev
 #    active: druid-hcl
 #    include: common,config-druid-hcl
 #    active: druid-hdt
 #    include: common,config-druid-hdt
-    active: druid-sxjz
-    include: common,config-druid-sxjz
+#    active: druid-sxjz
+#    include: common,config-druid-sxjz

+ 11 - 11
fs-company/src/main/java/com/fs/company/controller/company/CompanyWxUserGroupController.java

@@ -45,17 +45,6 @@ public class CompanyWxUserGroupController extends BaseController
         return getDataTable(list);
     }
 
-    //查询个微分组-添加sop任务-个微-选择的分组(不要权限版)
-    @GetMapping("/sopList")
-    public TableDataInfo sopList(CompanyWxUserGroup companyWxUserGroup)
-    {
-        startPage();
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        companyWxUserGroup.setCompanyId(loginUser.getCompany().getCompanyId());
-        List<CompanyWxUserGroup> list = companyWxUserGroupService.selectCompanyWxUserGroupList(companyWxUserGroup);
-        return getDataTable(list);
-    }
-
     /**
      * 导出个微 分组列表
      */
@@ -117,4 +106,15 @@ public class CompanyWxUserGroupController extends BaseController
     }
 
 
+    //查询个微分组-添加sop任务-个微-选择的分组(不要权限版)
+    @GetMapping("/sopList")
+    public TableDataInfo sopList(CompanyWxUserGroup companyWxUserGroup)
+    {
+        startPage();
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        companyWxUserGroup.setCompanyId(loginUser.getCompany().getCompanyId());
+        List<CompanyWxUserGroup> list = companyWxUserGroupService.selectCompanyWxUserGroupList(companyWxUserGroup);
+        return getDataTable(list);
+    }
+
 }

+ 21 - 0
fs-company/src/main/java/com/fs/company/controller/qw/QwFriendWelcomeController.java

@@ -13,12 +13,18 @@ import com.fs.framework.service.TokenService;
 import com.fs.qw.domain.QwFriendWelcome;
 import com.fs.qw.param.QwFriendWelcomeParam;
 import com.fs.qw.service.IQwFriendWelcomeService;
+import com.fs.qw.service.IQwUserService;
+import com.fs.qw.vo.QwOptionsVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 好友欢迎语Controller
@@ -35,6 +41,9 @@ public class QwFriendWelcomeController extends BaseController
 
     @Autowired
     private TokenService tokenService;
+
+    @Autowired
+    private IQwUserService qwUserService;
     /**
      * 查询好友欢迎语列表
      */
@@ -45,6 +54,18 @@ public class QwFriendWelcomeController extends BaseController
         startPage();
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         qwFriendWelcomeParam.setCompanyId(loginUser.getCompany().getCompanyId());
+        if(qwFriendWelcomeParam.getType() != null){
+            if(qwFriendWelcomeParam.getType() == 1){
+                List<QwOptionsVO> qwOptionsVOS = qwUserService.selectQwUserListOptionsVOByCompanyUserId(loginUser.getUser().getUserId());
+                qwFriendWelcomeParam.setQwUserIds(qwOptionsVOS.stream().map(QwOptionsVO::getDictValue).collect(Collectors.joining(",")));
+                if(StringUtils.isEmpty(qwFriendWelcomeParam.getQwUserIds())){
+                    return getDataTable(Collections.EMPTY_LIST);
+                }
+            }
+            if(qwFriendWelcomeParam.getType() == 2){
+
+            }
+        }
         List<QwFriendWelcome> list = qwFriendWelcomeService.selectQwFriendWelcomeListVO(qwFriendWelcomeParam);
         return getDataTable(list);
     }

+ 4 - 0
fs-company/src/main/java/com/fs/framework/security/SecurityUtils.java

@@ -86,4 +86,8 @@ public class SecurityUtils
     {
         return userId != null && 1L == userId;
     }
+
+    public static void main(String[] args) {
+        System.out.println(encryptPassword("ylrz147.."));
+    }
 }

+ 4 - 0
fs-service/src/main/java/com/fs/qw/param/QwFriendWelcomeParam.java

@@ -12,6 +12,10 @@ public class QwFriendWelcomeParam extends BaseEntity {
     private static final long serialVersionUID = 1L;
 
     private Long id;
+    /**
+     * 查询类型 null or 0 :全部 1:个人 2:部门
+     */
+    private Integer type;
 
     /** 用这条欢迎语的企微员工ids */
     @Excel(name = "用这条欢迎语的企微员工ids")

+ 33 - 2
fs-service/src/main/java/com/fs/qw/service/impl/QwFriendWelcomeServiceImpl.java

@@ -2,6 +2,7 @@ package com.fs.qw.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.fs.common.core.domain.R;
+import com.fs.common.core.redis.RedisCacheT;
 import com.fs.qw.domain.QwFriendWelcome;
 import com.fs.qw.mapper.QwFriendWelcomeItemMapper;
 import com.fs.qw.mapper.QwFriendWelcomeMapper;
@@ -12,6 +13,8 @@ import com.fs.qw.vo.QwFriendWelcomeDayPart;
 import com.fs.qw.vo.QwFriendWelcomeVO;
 import com.fs.qw.vo.QwUserVO;
 import com.fs.qwApi.Result.QwUploadImgResult;
+import com.fs.qwApi.Result.QwUploadResult;
+import com.fs.qwApi.param.QwWelcomeVideoParam;
 import com.fs.qwApi.param.SendWelcomeMsgParam;
 import com.fs.qwApi.service.QwApiService;
 import com.fs.voice.utils.StringUtil;
@@ -49,6 +52,9 @@ public class QwFriendWelcomeServiceImpl implements IQwFriendWelcomeService
     @Autowired
     private QwApiService qwApiService;
 
+    @Autowired
+    private RedisCacheT<QwWelcomeVideoParam> redisCache;
+
     /**
      * 查询好友欢迎语
      *
@@ -99,8 +105,7 @@ public class QwFriendWelcomeServiceImpl implements IQwFriendWelcomeService
      * @return 结果
      */
     @Override
-    public R insertQwFriendWelcomeVO(QwFriendWelcomeParam qwFriendWelcomeParam)
-    {
+    public R insertQwFriendWelcomeVO(QwFriendWelcomeParam qwFriendWelcomeParam){
         List<SendWelcomeMsgParam.Attachment> attachmentsAll = JSON.parseArray(qwFriendWelcomeParam.getAttachments(), SendWelcomeMsgParam.Attachment.class);
 
         if(attachmentsAll!=null && !attachmentsAll.isEmpty()){
@@ -122,6 +127,20 @@ public class QwFriendWelcomeServiceImpl implements IQwFriendWelcomeService
                     }
                 }
 
+                if (attachment.getMsgtype().equals("video")){
+
+                    try {
+                        QwUploadResult result = qwApiService.upload(new File(""), "video", qwFriendWelcomeParam.getCorpId());
+                        if (result.getErrCode()==0) {
+                            attachment.getVideo().setMedia_id(result.getMediaId());
+                        }else {
+                            return R.error("视频上传失败:"+result.getErrMsg());
+                        }
+                    } catch (Exception e) {
+                        return R.error("视频上传出错:"+e);
+                    }
+                }
+
                 if (attachment.getMsgtype().equals("link")){
                     String LinkPicUrl = attachment.getLink().getPicurl();
                     if (LinkPicUrl!=null && !LinkPicUrl.isEmpty()){
@@ -165,6 +184,18 @@ public class QwFriendWelcomeServiceImpl implements IQwFriendWelcomeService
                                 return R.error("分时段图片image上传出错:"+e);
                             }
                         }
+                        if (attachment.getMsgtype().equals("video")){
+                            try {
+                                QwUploadResult result = qwApiService.upload(new File(""), "video", qwFriendWelcomeParam.getCorpId());
+                                if (result.getErrCode()==0) {
+                                    attachment.getVideo().setMedia_id(result.getMediaId());
+                                }else {
+                                    return R.error("视频上传失败:"+result.getErrMsg());
+                                }
+                            } catch (Exception e) {
+                                return R.error("视频上传出错:"+e);
+                            }
+                        }
                         if (attachment.getMsgtype().equals("link")){
                             String linkPicurl = attachment.getLink().getPicurl();
                             if (linkPicurl!=null && !linkPicurl.isEmpty()){

+ 11 - 0
fs-service/src/main/java/com/fs/qwApi/param/QwWelcomeVideoParam.java

@@ -0,0 +1,11 @@
+package com.fs.qwApi.param;
+
+import lombok.Data;
+
+@Data
+public class QwWelcomeVideoParam {
+
+    private String url;
+    private String mediaId;
+
+}

+ 1 - 0
fs-service/src/main/java/com/fs/qwApi/param/SendWelcomeMsgParam.java

@@ -52,6 +52,7 @@ public class SendWelcomeMsgParam {
         // 内部类,用于视频附件
         public static class VideoAttachment {
             private String media_id; // 视频的媒体ID
+            private String url; // 视频的媒体ID
         }
         @Data
         // 内部类,用于文件附件

+ 1 - 0
fs-service/src/main/java/com/fs/sop/params/SendUserLogsInfoMsgParam.java

@@ -13,6 +13,7 @@ public class SendUserLogsInfoMsgParam {
     private Integer videoId;
     private Integer courseId;
     private Integer courseType;
+    private Integer sendType;
     private String setting;
     private String sopId;
     private String userIdParam;

+ 200 - 106
fs-service/src/main/java/com/fs/sop/service/impl/SopUserLogsInfoServiceImpl.java

@@ -21,12 +21,10 @@ import com.fs.course.param.FsCourseLinkCreateParam;
 import com.fs.course.service.IFsCourseLinkService;
 import com.fs.fastGpt.domain.FastGptChatReplaceWords;
 import com.fs.fastGpt.mapper.FastGptChatReplaceWordsMapper;
-import com.fs.qw.domain.QwCompany;
-import com.fs.qw.domain.QwExternalContact;
-import com.fs.qw.domain.QwGroupChat;
-import com.fs.qw.domain.QwUser;
+import com.fs.qw.domain.*;
 import com.fs.qw.mapper.QwExternalContactMapper;
 import com.fs.qw.mapper.QwGroupChatMapper;
+import com.fs.qw.mapper.QwGroupChatUserMapper;
 import com.fs.qw.mapper.QwUserMapper;
 import com.fs.qw.service.IQwCompanyService;
 import com.fs.qw.service.impl.AsyncSopTestService;
@@ -60,6 +58,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.validation.ConstraintViolationException;
+import java.io.Serializable;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -139,6 +138,8 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
 
     @Autowired
     private CompanyUserMapper companyUserMapper;
+    @Autowired
+    private QwGroupChatUserMapper qwGroupChatUserMapper;
 
     @Override
     public void save(SopUserLogsInfo sopUserLogsInfo) {
@@ -408,129 +409,229 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
         List<FastGptChatReplaceWords> words = fastGptChatReplaceWordsMapper.selectAllFastGptChatReplaceWords();
         String json = configService.selectConfigByKey("course.config");
         CourseConfig config = JSON.parseObject(json, CourseConfig.class);
-
+        Date createTime=new Date();
         if (config == null) {
             return R.error().put("msg","课程默认配置为空,请联系管理员");
         }
         List<QwSopLogs> sopLogsList;
         if(param.getFilterMode() != null && param.getFilterMode() == 2 && param.getChatIds() != null && param.getChatIds().length > 0){
             List<QwGroupChat> groupList = qwGroupChatMapper.selectQwGroupChatByChatIds(param.getChatIds());
-            sopLogsList = groupList.stream().map(groupChat -> {
-                QwUser qwUser = qwUserMapper.selectQwUserByIdByWeComeText(groupChat.getOwner(), groupChat.getCorpId());
-                QwSopLogs sopLogs = new QwSopLogs();
-
-                sopLogs.setQwUserid(qwUser.getQwUserId());
-                sopLogs.setExternalUserId(groupChat.getChatId());
-                sopLogs.setLogType(2);
-                sopLogs.setContentJson(param.getSetting());
-                sopLogs.setSendStatus(3L);
-                sopLogs.setSendTime(DateUtil.formatLocalDateTime(LocalDateTime.now()));
-                sopLogs.setCompanyId(qwSop.getCompanyId());
-                sopLogs.setReceivingStatus(0L);
-                sopLogs.setSopId(param.getSopId());
-                sopLogs.setCorpId(groupChat.getCorpId());
-                sopLogs.setSort(2);
-                sopLogs.setSendType(6);
-                sopLogs.setExternalUserName(groupChat.getName());
-
-                QwSopCourseFinishTempSetting setting = new QwSopCourseFinishTempSetting();
+            if(param.getSendType() != null && param.getSendType() == 2){
+                Map<String, QwGroupChat> groupMap = PubFun.listToMapByGroupObject(groupList, QwGroupChat::getChatId);
+                List<QwGroupChatUser> groupUserList = qwGroupChatUserMapper.selectQwGroupChatUserByChatIds(groupList.stream().map(QwGroupChat::getChatId).toArray(String[]::new));
+                List<String> groupChatUserIds = PubFun.listToNewList(groupUserList, QwGroupChatUser::getUserId);
+                if(!groupChatUserIds.isEmpty()){
+                    List<GroupUserExternalVo> userList = qwExternalContactMapper.selectByGroupUser(groupChatUserIds);
+                    Map<String, List<GroupUserExternalVo>> userMap = PubFun.listToMapByGroupList(userList, GroupUserExternalVo::getExternalUserId);
+                    groupUserList.forEach(e -> {
+                        e.setUserList(userMap.getOrDefault(e.getUserId(), Collections.emptyList()));
+                    });
+                }
+                sopLogsList = groupUserList.stream().map(groupUser -> {
+                    QwGroupChat qwGroupChat = groupMap.get(groupUser.getChatId());
+                    QwUser qwUser = qwUserMapper.selectQwUserByIdByWeComeText(qwGroupChat.getOwner(), qwGroupChat.getCorpId());
+                    if (qwUser == null) {
+                        throw new BaseException("企业微信用户不存在:" + qwGroupChat.getOwner());
+                    }
+                    Map<String, GroupUserExternalVo> userMap = PubFun.listToMapByGroupObject(groupUser.getUserList(), GroupUserExternalVo::getUserId);
+                    GroupUserExternalVo vo = userMap.get(qwGroupChat.getOwner());
+                    QwSopLogs sopLogs = new QwSopLogs();
+
+                    sopLogs.setQwUserid(qwUser.getQwUserId());
+                    sopLogs.setExternalUserId(vo.getExternalUserId());
+                    sopLogs.setLogType(2);
+                    sopLogs.setContentJson(param.getSetting());
+                    sopLogs.setSendStatus(3L);
+                    sopLogs.setSendTime(DateUtil.formatLocalDateTime(LocalDateTime.now()));
+                    sopLogs.setCompanyId(qwSop.getCompanyId());
+                    sopLogs.setReceivingStatus(0L);
+                    sopLogs.setSopId(param.getSopId());
+                    sopLogs.setCorpId(qwGroupChat.getCorpId());
+                    sopLogs.setSort(2);
+                    sopLogs.setSendType(6);
+                    sopLogs.setExternalUserName(groupUser.getName());
+                    //域名
+                    String companyUserId = qwUser.getCompanyUserId().toString();
+                    String domainName = companyUserMapper.selectDomainByUserId(Long.parseLong(companyUserId));
+                    if (StringUtils.isEmpty(domainName)) {
+                        domainName = config.getRealLinkDomainName();
+                    }
+                    QwSopCourseFinishTempSetting setting = new QwSopCourseFinishTempSetting();
+                    List<QwSopCourseFinishTempSetting.Setting> list = JSONArray.parseArray(param.getSetting(), QwSopCourseFinishTempSetting.Setting.class);
+                    for (QwSopCourseFinishTempSetting.Setting st : list) {
 
-                List<QwSopCourseFinishTempSetting.Setting> list = JSONArray.parseArray(param.getSetting(), QwSopCourseFinishTempSetting.Setting.class);
-//
-//            List<QwSopCourseFinishTempSetting.Setting> list = parseSettings(param.getSetting());
+                        //过滤违禁词
+                        if ("1".equals(st.getContentType())) {
+                            replaceContent(st.getContentType(), st.getValue(), st::setValue, words); // 替换 value
+                        }
+                        //过滤违禁词
+                        if ("3".equals(st.getContentType())) {
+                            replaceContent(st.getContentType(), st.getLinkTitle(), st::setLinkTitle, words); // 替换 linkTitle
+                            replaceContent(st.getContentType(), st.getLinkDescribe(), st::setLinkDescribe, words); // 替换 linkTitle
+                        }
 
-                for (QwSopCourseFinishTempSetting.Setting st : list) {
+                        switch (st.getContentType()) {
+                            //文字和短链一起
+                            case "1":
+                            case "3":
+                                if ("1".equals(st.getIsBindUrl())) {
+                                    String qwUserId = qwUser.getQwUserId();
+                                    String companyId = qwUser.getCompanyId().toString();
+                                    Long externalUserId = Long.parseLong(vo.getExternalUserId());
+                                    addWatchLogIfNeeded(param.getSopId(), param.getVideoId(), param.getCourseId(), null, qwUserId, companyUserId, companyId, externalUserId, param.getStartTime(), createTime);
+
+                                    String sortLink = generateShortLink(st, param.getCorpId(), createTime, param.getCourseId(), param.getVideoId(),
+                                            qwUserId, companyUserId, companyId, domainName, externalUserId, config);
+
+                                    if (StringUtils.isNotEmpty(sortLink)) {
+                                        if ("3".equals(st.getContentType())) {
+                                            st.setLinkUrl(sortLink);
+                                        } else {
+                                            String currentValue = st.getValue();
+                                            if (currentValue == null) {
+                                                st.setValue(sortLink);
+                                            } else {
+                                                st.setValue(currentValue.replaceAll("#销售称呼#", StringUtil.strIsNullOrEmpty(qwUser.getWelcomeText()) ? "" : qwUser.getWelcomeText()) + "\n" + sortLink);
+                                            }
+                                        }
+                                    } else {
+                                        log.warn("生成短链失败,跳过设置 URL。");
+                                    }
+                                }
+                                break;
+                            //小程序单独
+                            case "4":
+                                String linkByMiniApp = createLinkByMiniApp(st, param.getCorpId(), new Date(), param.getCourseId(), param.getVideoId(),
+                                        qwUser.getQwUserId(), qwUser.getCompanyUserId().toString(), qwUser.getCompanyId().toString(), null, config);
+
+                                if (StringUtil.strIsNullOrEmpty(config.getMiniprogramAppid())) {
+                                    log.error("配置中无小程序id,采用默认的");
+                                    st.setMiniprogramAppid("wxc84c6f789ba7f176");
+                                } else {
+                                    st.setMiniprogramAppid(config.getMiniprogramAppid());
+                                }
 
-                    //过滤违禁词
-                    if ("1".equals(st.getContentType())) {
-                        replaceContent(st.getContentType(), st.getValue(), st::setValue, words); // 替换 value
-                    }
-                    //过滤违禁词
-                    if ("3".equals(st.getContentType())) {
-                        replaceContent(st.getContentType(), st.getLinkTitle(), st::setLinkTitle, words); // 替换 linkTitle
-                        replaceContent(st.getContentType(), st.getLinkDescribe(), st::setLinkDescribe, words); // 替换 linkTitle
+                                st.setMiniprogramPage(linkByMiniApp);
+                                break;
+                        }
                     }
+                    setting.setSetting(list);
+                    setting.setType(2);
+                    setting.setVideoId(param.getVideoId());
+                    setting.setCourseId(param.getCourseId());
+                    setting.setCourseType(param.getCourseType());
+                    sopLogs.setContentJson(JSON.toJSONString(setting));
+                    return sopLogs;
+                }).collect(Collectors.toList());
+
+
+            }else{
+                sopLogsList = groupList.stream().map(groupChat -> {
+                    QwUser qwUser = qwUserMapper.selectQwUserByIdByWeComeText(groupChat.getOwner(), groupChat.getCorpId());
+                    QwSopLogs sopLogs = new QwSopLogs();
+
+                    sopLogs.setQwUserid(qwUser.getQwUserId());
+                    sopLogs.setExternalUserId(groupChat.getChatId());
+                    sopLogs.setLogType(2);
+                    sopLogs.setContentJson(param.getSetting());
+                    sopLogs.setSendStatus(3L);
+                    sopLogs.setSendTime(DateUtil.formatLocalDateTime(LocalDateTime.now()));
+                    sopLogs.setCompanyId(qwSop.getCompanyId());
+                    sopLogs.setReceivingStatus(0L);
+                    sopLogs.setSopId(param.getSopId());
+                    sopLogs.setCorpId(groupChat.getCorpId());
+                    sopLogs.setSort(2);
+                    sopLogs.setSendType(6);
+                    sopLogs.setExternalUserName(groupChat.getName());
+
+                    QwSopCourseFinishTempSetting setting = new QwSopCourseFinishTempSetting();
+
+                    List<QwSopCourseFinishTempSetting.Setting> list = JSONArray.parseArray(param.getSetting(), QwSopCourseFinishTempSetting.Setting.class);
+
+                    for (QwSopCourseFinishTempSetting.Setting st : list) {
+
+                        //过滤违禁词
+                        if ("1".equals(st.getContentType())) {
+                            replaceContent(st.getContentType(), st.getValue(), st::setValue, words); // 替换 value
+                        }
+                        //过滤违禁词
+                        if ("3".equals(st.getContentType())) {
+                            replaceContent(st.getContentType(), st.getLinkTitle(), st::setLinkTitle, words); // 替换 linkTitle
+                            replaceContent(st.getContentType(), st.getLinkDescribe(), st::setLinkDescribe, words); // 替换 linkTitle
+                        }
 
-                    switch (st.getContentType()) {
-                        //文字和短链一起
-                        case "1":
-                        case "3":
-                            if ("1".equals(st.getIsBindUrl())) {
-                                FsCourseLinkCreateParam createParam = new FsCourseLinkCreateParam();
-                                createParam.setCourseId(param.getCourseId().longValue());
-                                createParam.setVideoId(param.getVideoId().longValue());
-                                createParam.setCorpId(groupChat.getCorpId());
-                                createParam.setCompanyUserId(qwUser.getCompanyUserId());
-                                createParam.setCompanyId(qwUser.getCompanyId());
-                                createParam.setChatId(groupChat.getChatId());
-                                createParam.setQwUserId(qwUser.getQwUserId());
-                                createParam.setDays(st.getExpiresDays());
-                                R createLink = courseLinkService.createRoomLinkUrl(createParam);
-                                if (createLink.get("code").equals(500)) {
-                                    throw new BaseException("链接生成失败!");
-                                }
-                                String link = (String) createLink.get("url");
-                                if (StringUtils.isNotEmpty(link)) {
-                                    if ("3".equals(st.getContentType())) {
-                                        st.setLinkUrl(link);
-                                    } else {
-                                        String currentValue = st.getValue();
-                                        if (currentValue == null) {
-                                            st.setValue(link);
+                        switch (st.getContentType()) {
+                            //文字和短链一起
+                            case "1":
+                            case "3":
+                                if ("1".equals(st.getIsBindUrl())) {
+                                    FsCourseLinkCreateParam createParam = new FsCourseLinkCreateParam();
+                                    createParam.setCourseId(param.getCourseId().longValue());
+                                    createParam.setVideoId(param.getVideoId().longValue());
+                                    createParam.setCorpId(groupChat.getCorpId());
+                                    createParam.setCompanyUserId(qwUser.getCompanyUserId());
+                                    createParam.setCompanyId(qwUser.getCompanyId());
+                                    createParam.setChatId(groupChat.getChatId());
+                                    createParam.setQwUserId(qwUser.getQwUserId());
+                                    createParam.setDays(st.getExpiresDays());
+                                    R createLink = courseLinkService.createRoomLinkUrl(createParam);
+                                    if (createLink.get("code").equals(500)) {
+                                        throw new BaseException("链接生成失败!");
+                                    }
+                                    String link = (String) createLink.get("url");
+                                    if (StringUtils.isNotEmpty(link)) {
+                                        if ("3".equals(st.getContentType())) {
+                                            st.setLinkUrl(link);
                                         } else {
-//                                    setting.setValue(currentValue + "\n" + sortLink);
-                                            st.setValue(currentValue
-                                                    .replaceAll("#销售称呼#", StringUtil.strIsNullOrEmpty(qwUser.getWelcomeText()) ? "" : qwUser.getWelcomeText())
-                                                    + "\n" + link);
+                                            String currentValue = st.getValue();
+                                            if (currentValue == null) {
+                                                st.setValue(link);
+                                            } else {
+                                                st.setValue(currentValue
+                                                        .replaceAll("#销售称呼#", StringUtil.strIsNullOrEmpty(qwUser.getWelcomeText()) ? "" : qwUser.getWelcomeText())
+                                                        + "\n" + link);
+                                            }
                                         }
+                                    } else {
+                                        log.error("生成短链失败,跳过设置 URL。");
                                     }
-                                } else {
-                                    log.error("生成短链失败,跳过设置 URL。");
                                 }
-                            }
 
-                            break;
-                        //小程序单独
-                        case "4":
-                            String linkByMiniApp = createLinkByMiniApp(st, param.getCorpId(), new Date(), param.getCourseId(), param.getVideoId(),
-                                    qwUser.getQwUserId(), qwUser.getCompanyUserId().toString(), qwUser.getCompanyId().toString(), null, config);
+                                break;
+                            //小程序单独
+                            case "4":
+                                String linkByMiniApp = createLinkByMiniApp(st, param.getCorpId(), new Date(), param.getCourseId(), param.getVideoId(),
+                                        qwUser.getQwUserId(), qwUser.getCompanyUserId().toString(), qwUser.getCompanyId().toString(), null, config);
 
-                            if (StringUtil.strIsNullOrEmpty(config.getMiniprogramAppid())) {
-                                log.error("配置中无小程序id,采用默认的");
-                                st.setMiniprogramAppid("wxc84c6f789ba7f176");
-                            } else {
-                                st.setMiniprogramAppid(config.getMiniprogramAppid());
-                            }
+                                if (StringUtil.strIsNullOrEmpty(config.getMiniprogramAppid())) {
+                                    log.error("配置中无小程序id,采用默认的");
+                                    st.setMiniprogramAppid("wxc84c6f789ba7f176");
+                                } else {
+                                    st.setMiniprogramAppid(config.getMiniprogramAppid());
+                                }
 
-                            st.setMiniprogramPage(linkByMiniApp);
-                            break;
+                                st.setMiniprogramPage(linkByMiniApp);
+                                break;
+                        }
                     }
-                }
-                setting.setSetting(list);
-                setting.setType(2);
-                setting.setVideoId(param.getVideoId());
-                setting.setCourseId(param.getCourseId());
-                setting.setCourseType(param.getCourseType());
-                sopLogs.setContentJson(JSON.toJSONString(setting));
-                return sopLogs;
-            }).collect(Collectors.toList());
-
+                    setting.setSetting(list);
+                    setting.setType(2);
+                    setting.setVideoId(param.getVideoId());
+                    setting.setCourseId(param.getCourseId());
+                    setting.setCourseType(param.getCourseType());
+                    sopLogs.setContentJson(JSON.toJSONString(setting));
+                    return sopLogs;
+                }).collect(Collectors.toList());
+            }
         }else{
             sopLogsList = new ArrayList<>();
-            Date createTime=new Date();
-
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-
             List<SopUserLogsInfo> sopUserLogsInfos = sopUserLogsInfoMapper.selectSopUserLogsInfoByIds(param.getIds());
-
             String[] userKey = param.getUserIdParam().split("\\|");
             String qwUserId = userKey[0].trim();
             String companyUserId = userKey[1].trim();
             String companyId = userKey[2].trim();
-
-
             QwUser qwUser = qwUserMapper.selectQwUserByIdByWeComeText(Long.valueOf(qwUserId));
-
             if (qwUser == null) {
                 return R.error().put("msg","企业微信用户不存在:"+qwUserId);
             }
@@ -539,10 +640,6 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
             if (StringUtils.isEmpty(domainName)){
                 domainName = config.getRealLinkDomainName();
             }
-//        if (StringUtils.isEmpty(config.getMiniprogramPage())){
-//            return R.error().put("msg","课程默认配置小程序路径为空,请联系管理员");
-//        }
-
             String finalDomainName = domainName;
             sopUserLogsInfos.forEach(item->{
 
@@ -569,9 +666,6 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                 QwSopCourseFinishTempSetting setting=new    QwSopCourseFinishTempSetting();
 
                 List<QwSopCourseFinishTempSetting.Setting> list = JSONArray.parseArray(param.getSetting(),QwSopCourseFinishTempSetting.Setting.class);
-//
-//            List<QwSopCourseFinishTempSetting.Setting> list = parseSettings(param.getSetting());
-
                 for (QwSopCourseFinishTempSetting.Setting st : list) {
 
                     //过滤违禁词