| 
					
				 | 
			
			
				@@ -3,7 +3,9 @@ package com.fs.sop.service.impl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.alibaba.fastjson.JSON; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.alibaba.fastjson.JSONArray; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.common.core.domain.R; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.common.exception.base.BaseException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.common.utils.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.common.utils.date.DateUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.company.mapper.CompanyUserMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.course.config.CourseConfig; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.course.domain.FsCourseDomainName; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -13,12 +15,15 @@ import com.fs.course.domain.FsCourseWatchLog; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.course.mapper.FsCourseDomainNameMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.course.mapper.FsCourseLinkMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.course.mapper.FsCourseWatchLogMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+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.QwExternalContact; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.fs.qw.domain.QwGroupChat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fs.qw.domain.QwUser; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 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.impl.AsyncSopTestService; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -57,6 +62,7 @@ import java.util.Date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.concurrent.ThreadLocalRandom; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.function.Consumer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import static com.fs.course.utils.LinkUtil.generateRandomStringWithLock; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -94,6 +100,11 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private QwUserMapper qwUserMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private QwGroupChatMapper qwGroupChatMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private IFsCourseLinkService courseLinkService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private QwSopMapper qwSopMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -358,179 +369,277 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public R sendUserLogsInfoMsg(SendUserLogsInfoMsgParam param) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Date createTime=new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         QwSop qwSop = qwSopMapper.selectQwSopById(param.getSopId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<FastGptChatReplaceWords> words = fastGptChatReplaceWordsMapper.selectAllFastGptChatReplaceWords(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String json = configService.selectConfigByKey("course.config"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CourseConfig config = JSON.parseObject(json, CourseConfig.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String[] userKey = param.getUserIdParam().split("\\|"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String qwUserId = userKey[0].trim(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String companyUserId = userKey[1].trim(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String companyId = userKey[2].trim(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<QwSopCourseFinishTempSetting.Setting> list = JSONArray.parseArray(param.getSetting(), QwSopCourseFinishTempSetting.Setting.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            List<QwSopCourseFinishTempSetting.Setting> list = parseSettings(param.getSetting()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        QwUser qwUser = qwUserMapper.selectQwUserByIdByWeComeText(Long.valueOf(qwUserId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (QwSopCourseFinishTempSetting.Setting st : list) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (qwUser == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return R.error().put("msg","企业微信用户不存在:"+qwUserId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //过滤违禁词 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                                    setting.setValue(currentValue + "\n" + sortLink); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                            st.setValue(currentValue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                    .replaceAll("#销售称呼#", StringUtil.strIsNullOrEmpty(qwUser.getWelcomeText()) ? "" : qwUser.getWelcomeText()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                    + "\n" + link); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 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, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            st.setMiniprogramPage(linkByMiniApp.replaceAll("^[\\s\\u2005]+", "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            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()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//        List<SopUserLogsInfo> sopUserLogsInfos = sopUserLogsInfoMapper.selectSopUserLogsInfoByIds(param.getIds()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        SopUserLogsInfoByIdsHasUserIdParam userIdParam=new SopUserLogsInfoByIdsHasUserIdParam(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        userIdParam.setIds(param.getIds()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        userIdParam.setIsRegister(param.getIsRegister()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        userIdParam.setQwUserId(qwUser.getQwUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<SopUserLogsInfo> sopUserLogsInfos; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(param.getFilterMode() == 1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sopUserLogsInfos = sopUserLogsInfoMapper.selectSopUserLogsInfoByIdsHasUserId(userIdParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sopUserLogsInfos = qwGroupChatUserMapper.selectByIdAndRegister(userIdParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(sopUserLogsInfos.isEmpty()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return R.ok(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String json = configService.selectConfigByKey("course.config"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        CourseConfig config = JSON.parseObject(json, CourseConfig.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sopLogsList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Date createTime=new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (config == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return R.error().put("msg","课程默认配置为空,请联系管理员"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //域名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String domainName = companyUserMapper.selectDomainByUserId(Long.parseLong(companyUserId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (StringUtils.isEmpty(domainName)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            domainName = config.getRealLinkDomainName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String finalDomainName = domainName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        List<SopUserLogsInfo> sopUserLogsInfos = sopUserLogsInfoMapper.selectSopUserLogsInfoByIds(param.getIds()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            SopUserLogsInfoByIdsHasUserIdParam userIdParam=new SopUserLogsInfoByIdsHasUserIdParam(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            userIdParam.setIds(param.getIds()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            userIdParam.setIsRegister(param.getIsRegister()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            userIdParam.setQwUserId(qwUser.getQwUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<SopUserLogsInfo> sopUserLogsInfos; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(param.getFilterMode() == 1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sopUserLogsInfos = sopUserLogsInfoMapper.selectSopUserLogsInfoByIdsHasUserId(userIdParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sopUserLogsInfos = qwGroupChatUserMapper.selectByIdAndRegister(userIdParam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(sopUserLogsInfos.isEmpty()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return R.ok(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (config == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return R.error().put("msg","课程默认配置为空,请联系管理员"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //域名 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String domainName = companyUserMapper.selectDomainByUserId(Long.parseLong(companyUserId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (StringUtils.isEmpty(domainName)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                domainName = config.getRealLinkDomainName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String finalDomainName = domainName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //        if (StringUtils.isEmpty(config.getMiniprogramPage())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //            return R.error().put("msg","课程默认配置小程序路径为空,请联系管理员"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<QwSopLogs> sopLogsList=new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sopUserLogsInfos.forEach(item->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        sopUserLogsInfos.forEach(item->{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                QwSopLogs sopLogs=new QwSopLogs(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            QwSopLogs sopLogs=new QwSopLogs(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sopLogs.setQwUserid(item.getQwUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sopLogs.setExternalUserId(item.getExternalContactId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sopLogs.setExternalId(item.getExternalId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sopLogs.setLogType(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sopLogs.setContentJson(param.getSetting()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sopLogs.setSendStatus(3L); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sopLogs.setSendTime(sdf.format(new Date())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sopLogs.setCompanyId(qwSop.getCompanyId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sopLogs.setReceivingStatus(0L); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sopLogs.setSopId(param.getSopId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sopLogs.setCorpId(item.getCorpId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sopLogs.setFsUserId(item.getFsUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sopLogs.setSort(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sopLogs.setSendType(5); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sopLogs.setExternalUserName(item.getExternalUserName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sopLogs.setQwUserid(item.getQwUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sopLogs.setExternalUserId(item.getExternalContactId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sopLogs.setExternalId(item.getExternalId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sopLogs.setLogType(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sopLogs.setContentJson(param.getSetting()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sopLogs.setSendStatus(3L); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sopLogs.setSendTime(sdf.format(new Date())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sopLogs.setCompanyId(qwSop.getCompanyId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sopLogs.setReceivingStatus(0L); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sopLogs.setSopId(param.getSopId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sopLogs.setCorpId(item.getCorpId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sopLogs.setFsUserId(item.getFsUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sopLogs.setSort(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sopLogs.setSendType(5); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sopLogs.setExternalUserName(item.getExternalUserName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                QwExternalContact contact = qwExternalContactMapper.selectQwExternalContactByIdForStageStatus(item.getExternalId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            QwExternalContact contact = qwExternalContactMapper.selectQwExternalContactByIdForStageStatus(item.getExternalId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                QwSopCourseFinishTempSetting setting=new    QwSopCourseFinishTempSetting(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            QwSopCourseFinishTempSetting setting=new    QwSopCourseFinishTempSetting(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            List<QwSopCourseFinishTempSetting.Setting> list = JSONArray.parseArray(param.getSetting(),QwSopCourseFinishTempSetting.Setting.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<QwSopCourseFinishTempSetting.Setting> list = JSONArray.parseArray(param.getSetting(),QwSopCourseFinishTempSetting.Setting.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //            List<QwSopCourseFinishTempSetting.Setting> list = parseSettings(param.getSetting()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for (QwSopCourseFinishTempSetting.Setting st : list) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                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 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //过滤违禁词 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    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())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    switch (st.getContentType()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //文字和短链一起 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        case "1": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        case "3": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if ("1".equals(st.getIsBindUrl())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            addWatchLogIfNeeded(param.getSopId(), param.getVideoId(), param.getCourseId(),item.getFsUserId(), qwUserId, companyUserId, companyId, item.getExternalId(),param.getStartTime(),createTime ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                addWatchLogIfNeeded(param.getSopId(), param.getVideoId(), param.getCourseId(),item.getFsUserId(), qwUserId, companyUserId, companyId, item.getExternalId(),param.getStartTime(),createTime ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            String sortLink = generateShortLink(st, param.getCorpId(), createTime, param.getCourseId(), param.getVideoId(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    qwUserId, companyUserId, companyId,finalDomainName, item.getExternalId(),config,contact.getFsUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                String sortLink = generateShortLink(st, param.getCorpId(), createTime, param.getCourseId(), param.getVideoId(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        qwUserId, companyUserId, companyId,finalDomainName, item.getExternalId(),config,contact.getFsUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (StringUtils.isNotEmpty(sortLink)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                if ("3".equals(st.getContentType())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    st.setLinkUrl(sortLink); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    String currentValue = st.getValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    if (currentValue == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                        st.setValue(sortLink); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if (StringUtils.isNotEmpty(sortLink)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    if ("3".equals(st.getContentType())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        st.setLinkUrl(sortLink); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                     } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                        st.setValue(currentValue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                .replaceAll("#销售称呼#",StringUtil.strIsNullOrEmpty(qwUser.getWelcomeText())?"":qwUser.getWelcomeText()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                .replaceAll("#客户称呼#",StringUtil.strIsNullOrEmpty(contact.getStageStatus())|| "0".equals(contact.getStageStatus())?"同学":contact.getStageStatus()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                + "\n" + sortLink); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        String currentValue = st.getValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        if (currentValue == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                            st.setValue(sortLink); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                            st.setValue(currentValue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                    .replaceAll("#销售称呼#",StringUtil.strIsNullOrEmpty(qwUser.getWelcomeText())?"":qwUser.getWelcomeText()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                    .replaceAll("#客户称呼#",StringUtil.strIsNullOrEmpty(contact.getStageStatus())|| "0".equals(contact.getStageStatus())?"同学":contact.getStageStatus()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                    + "\n" + sortLink); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    log.warn("生成短链失败,跳过设置 URL。"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if ("1".equals(st.getContentType())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    st.setValue(st.getValue() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                            .replaceAll("#销售称呼#",StringUtil.strIsNullOrEmpty(qwUser.getWelcomeText())?"":qwUser.getWelcomeText()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                            .replaceAll("#客户称呼#",StringUtil.strIsNullOrEmpty(contact.getStageStatus()) || "0".equals(contact.getStageStatus())?"同学":contact.getStageStatus())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                log.warn("生成短链失败,跳过设置 URL。"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if ("1".equals(st.getContentType())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                st.setValue(st.getValue() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                        .replaceAll("#销售称呼#",StringUtil.strIsNullOrEmpty(qwUser.getWelcomeText())?"":qwUser.getWelcomeText()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                        .replaceAll("#客户称呼#",StringUtil.strIsNullOrEmpty(contact.getStageStatus()) || "0".equals(contact.getStageStatus())?"同学":contact.getStageStatus())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    //小程序单独 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    case "4": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        addWatchLogIfNeeded(param.getSopId(), param.getVideoId(), param.getCourseId(),item.getFsUserId(), qwUserId, companyUserId, companyId, item.getExternalId(),param.getStartTime(),createTime ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        String linkByMiniApp = createLinkByMiniApp(st, param.getCorpId(), createTime, param.getCourseId(), param.getVideoId(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                qwUserId, companyUserId, companyId, item.getExternalId(), config,contact.getFsUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        st.setMiniprogramPage(linkByMiniApp.replaceAll("^[\\s\\u2005]+", "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    //app 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    case "9": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        addWatchLogIfNeeded(param.getSopId(), param.getVideoId(), param.getCourseId(),item.getFsUserId(), qwUserId, companyUserId, companyId, item.getExternalId(),param.getStartTime(),createTime ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        QwCreateLinkByAppVO linkByApp = createLinkByApp(st, param.getCorpId(), createTime, param.getCourseId(), param.getVideoId(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                qwUserId, companyUserId, companyId, item.getExternalId(), config,qwUser.getQwUserName(),contact.getFsUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        st.setLinkUrl(linkByApp.getSortLink().replaceAll("^[\\s\\u2005]+", "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        st.setAppLinkUrl(linkByApp.getAppMsgLink().replaceAll("^[\\s\\u2005]+", "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    //注册链接 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    case "10": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        String url=config.getRegisterDomainName()+registerLink+item.getExternalId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        st.setLinkUrl(url.replaceAll("^[\\s\\u2005]+", "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //小程序单独 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        case "4": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            addWatchLogIfNeeded(param.getSopId(), param.getVideoId(), param.getCourseId(),item.getFsUserId(), qwUserId, companyUserId, companyId, item.getExternalId(),param.getStartTime(),createTime ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            String linkByMiniApp = createLinkByMiniApp(st, param.getCorpId(), createTime, param.getCourseId(), param.getVideoId(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    qwUserId, companyUserId, companyId, item.getExternalId(), config,contact.getFsUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            st.setMiniprogramPage(linkByMiniApp.replaceAll("^[\\s\\u2005]+", "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //app 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        case "9": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            addWatchLogIfNeeded(param.getSopId(), param.getVideoId(), param.getCourseId(),item.getFsUserId(), qwUserId, companyUserId, companyId, item.getExternalId(),param.getStartTime(),createTime ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            QwCreateLinkByAppVO linkByApp = createLinkByApp(st, param.getCorpId(), createTime, param.getCourseId(), param.getVideoId(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    qwUserId, companyUserId, companyId, item.getExternalId(), config,qwUser.getQwUserName(),contact.getFsUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            st.setLinkUrl(linkByApp.getSortLink().replaceAll("^[\\s\\u2005]+", "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            st.setAppLinkUrl(linkByApp.getAppMsgLink().replaceAll("^[\\s\\u2005]+", "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //注册链接 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        case "10": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            String url=config.getRegisterDomainName()+registerLink+item.getExternalId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            st.setLinkUrl(url.replaceAll("^[\\s\\u2005]+", "")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            setting.setSetting(list); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            setting.setType(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            setting.setVideoId(param.getVideoId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            setting.setCourseId(param.getCourseId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            setting.setCourseType(param.getCourseType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                setting.setSetting(list); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                setting.setType(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                setting.setVideoId(param.getVideoId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                setting.setCourseId(param.getCourseId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                setting.setCourseType(param.getCourseType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sopLogs.setContentJson(JSON.toJSONString(setting)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sopLogs.setContentJson(JSON.toJSONString(setting)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sopLogsList.add(sopLogs); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sopLogsList.add(sopLogs); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //批量插入 发送记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (!sopLogsList.isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             processAndInsertQwSopLogsBySendMsg(sopLogsList); 
			 |