|
@@ -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) {
|
|
|
|
|
|
//过滤违禁词
|