Selaa lähdekoodia

Merge remote-tracking branch 'origin/master'

xyx 1 viikko sitten
vanhempi
commit
89f47da742

+ 2 - 0
fs-admin/src/main/java/com/fs/course/controller/FsUserCourseController.java

@@ -3,6 +3,7 @@ package com.fs.course.controller;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONUtil;
 import com.fs.common.annotation.Log;
+import com.fs.common.annotation.RepeatSubmit;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.domain.R;
@@ -339,6 +340,7 @@ public class FsUserCourseController extends BaseController {
      */
     @PreAuthorize("@ss.hasPermi('course:userCourseVideo:sync')")
     @Log(title = "同步课程模板", businessType = BusinessType.UPDATE)
+    @RepeatSubmit
     @PostMapping("/syncTemplate/{courseId}")
     public AjaxResult syncTemplate(@PathVariable Long courseId) {
         sopTempService.syncTemplate(courseId);

+ 49 - 0
fs-service/src/main/java/com/fs/course/domain/FsProjectAddressConfig.java

@@ -0,0 +1,49 @@
+package com.fs.course.domain;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class FsProjectAddressConfig {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 项目名称
+     */
+    private String name;
+
+    /**
+     * 唯一编码
+     */
+    private String code;
+
+    /**
+     * api接口地址
+     */
+    private String addressUrl;
+
+    /**
+     * 存储桶地址
+     */
+    private String bucketPath;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 修改时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 发送类型 1个微 2企微
+     */
+    private Integer sendType;
+}

+ 14 - 0
fs-service/src/main/java/com/fs/course/mapper/FsProjectAddressConfigMapper.java

@@ -0,0 +1,14 @@
+package com.fs.course.mapper;
+
+import com.fs.course.domain.FsProjectAddressConfig;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+public interface FsProjectAddressConfigMapper {
+
+    /**
+     * 根据code查询url
+     */
+    @Select("select * from fs_project_address_config where code = #{code}")
+    FsProjectAddressConfig selectDomainByCode(@Param("code") String code);
+}

+ 12 - 0
fs-service/src/main/java/com/fs/course/service/IFsProjectAddressConfigService.java

@@ -0,0 +1,12 @@
+package com.fs.course.service;
+
+
+import com.fs.course.domain.FsProjectAddressConfig;
+
+public interface IFsProjectAddressConfigService {
+
+    /**
+     * 根据code查询url
+     */
+    FsProjectAddressConfig selectDomainByCode(String code);
+}

+ 23 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsProjectAddressConfigServiceImpl.java

@@ -0,0 +1,23 @@
+package com.fs.course.service.impl;
+
+import com.fs.course.domain.FsProjectAddressConfig;
+import com.fs.course.mapper.FsProjectAddressConfigMapper;
+import com.fs.course.service.IFsProjectAddressConfigService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+@Service
+public class FsProjectAddressConfigServiceImpl implements IFsProjectAddressConfigService {
+
+    @Resource
+    private FsProjectAddressConfigMapper fsProjectAddressConfigMapper;
+
+    /**
+     * 根据code查询url
+     */
+    @Override
+    public FsProjectAddressConfig selectDomainByCode(String code) {
+        return fsProjectAddressConfigMapper.selectDomainByCode(code);
+    }
+}

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

@@ -687,10 +687,13 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
     private R handleRoom(FsUserCourseVideoAddKfUParam param,FsUser user) {
         //查询客户列表
         List<QwExternalContact> contacts = qwExternalContactMapper.selectQwExternalContactListVOByfsUserId(user.getUserId());
-        log.info("查出来的企微客户数量:"+contacts.size());
-        if (!contacts.isEmpty()){
+        List<QwExternalContact> nonNullContacts = contacts.stream()
+                .filter(Objects::nonNull)
+                .collect(Collectors.toList());
+        log.info("查出来的企微客户数量:"+nonNullContacts.size());
+        if (!nonNullContacts.isEmpty()){
             //找出对应销售匹配的客户
-            QwExternalContact matchedContact = contacts.stream()
+            QwExternalContact matchedContact = nonNullContacts.stream()
                     .filter(contact -> contact.getQwUserId().equals(Long.parseLong(param.getQwUserId())))
                     .findFirst()
                     .orElse(null);
@@ -706,9 +709,20 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
                     createWatchLog(param);
                 }
                 return R.error(567,"群聊通用链接").put("qwExternalId", matchedContact.getId());
+            }else {
+                QwExternalContact contact = nonNullContacts.get(0);
+                log.info("匹配到的第一个企微用户:"+contact.getUserId());
+                log.info("企微id:"+contact.getId());
+                log.info("用户:"+param.getVideoId());
+                log.info("企微用户:"+param.getQwUserId());
+                param.setQwExternalId(contact.getId());
+                FsCourseWatchLog log = courseWatchLogMapper.getWatchCourseVideoByExt(contact.getId(), param.getVideoId(),param.getQwUserId());
+                if (log==null){
+                    createWatchLog(param);
+                }
+                return R.error(567,"群聊通用链接").put("qwExternalId", contact.getId());
             }
         }
-
         String msg = "<div style=\"color: red;margin-bottom: 15px;font-weight: bold;\">本课程为群会员独享<br>请长按二维码</div>\n" +
                 "\t\t\t\t\t<div style=\"color: #999;font-size: 14px;font-weight: bold;\">添加伴学助手免费领取会员权限</div>";
 

+ 6 - 1
fs-service/src/main/java/com/fs/course/vo/FsCourseWatchLogStatisticsListVO.java

@@ -39,7 +39,7 @@ public class FsCourseWatchLogStatisticsListVO {
     @Excel(name = "员工名称")
     private String userName;
 
-    @Excel(name = "创建时间")
+    @Excel(name = "创建时间" ,dateFormat = "yyyy-MM-dd")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date createTime;
 
@@ -48,18 +48,23 @@ public class FsCourseWatchLogStatisticsListVO {
     private String companyUserName;
 
     /** 发课数 */
+    @Excel(name = "发课数")
     private String  sendNumber;
 
     /** 已注册用户待看课数 */
+    @Excel(name = "已注册用户待看课数")
     private String  isUserWaitNumber;
 
     /** 未注册用户待看课数 */
+    @Excel(name = "未注册用户待看课数")
     private String  noUserWaitNumber;
 
     /** 上线率 */
+    @Excel(name = "上线率")
     private String  onLineRate;
 
     /** 完课率 */
+    @Excel(name = "完课率")
     private String  finishedRate;
 
     /** 消耗红包金额 */

+ 9 - 1
fs-service/src/main/java/com/fs/sop/service/impl/QwSopTempServiceImpl.java

@@ -638,12 +638,20 @@ public class QwSopTempServiceImpl implements IQwSopTempService {
         if (CollectionUtils.isEmpty(tempIds)) {
             return;
         }
+        // 只弄课程模板的
         List<QwSopTemp> tempList = qwSopTempMapper.selectListByIds(tempIds);
         tempList = tempList.stream().filter(f -> Objects.equals(f.getStatus(), "1")).collect(Collectors.toList());
         if (CollectionUtils.isEmpty(tempList)) {
             return;
         }
-        List<QwSopTempContent> contentList = qwSopTempContentService.listByTempIds(tempIds);
+
+        // 获取这些规则关联的模板ID集合
+        Set<String> sopTempIds = tempList.stream()
+                .map(QwSopTemp::getId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
+
+        List<QwSopTempContent> contentList = qwSopTempContentService.listByTempIds(sopTempIds);
 
         qwSopTempDayService.removeByTempIds(tempIds);
         qwSopTempRulesService.removeByTempIds(tempIds);

+ 8 - 0
fs-service/src/main/resources/mapper/course/FsProjectAddressConfigMapper.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fs.course.mapper.FsProjectAddressConfigMapper">
+
+
+</mapper>

+ 1 - 1
fs-service/src/main/resources/mapper/sop/QwSopTempMapper.xml

@@ -68,7 +68,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         select * from qw_sop_temp_temp
     </select>
     <select id="selectListByIds" resultType="com.fs.sop.domain.QwSopTemp">
-        select * from qw_sop_temp  where id in
+        select * from qw_sop_temp  where send_type = 11 and id in
         <foreach item="id" collection="ids" open="(" separator="," close=")">
             #{id}
         </foreach>

+ 26 - 0
fs-user-app/src/main/java/com/fs/app/controller/CommonController.java

@@ -33,6 +33,8 @@ import com.fs.company.domain.CompanyMoneyLogs;
 import com.fs.company.service.ICompanyMoneyLogsService;
 import com.fs.core.utils.OrderCodeUtils;
 import com.fs.course.config.CourseConfig;
+import com.fs.course.domain.FsProjectAddressConfig;
+import com.fs.course.service.IFsProjectAddressConfigService;
 import com.fs.course.service.IHuaweiVodService;
 import com.fs.event.TemplateBean;
 import com.fs.event.TemplateEvent;
@@ -78,6 +80,7 @@ import org.springframework.web.multipart.MultipartFile;
 import java.io.*;
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 
 import static com.fs.common.utils.SecurityUtils.getUserId;
 
@@ -134,6 +137,8 @@ public class CommonController {
 
 	@Autowired
 	private IQwAppContactWayService qwAppContactWayService;
+	@Autowired
+	private IFsProjectAddressConfigService projectAddressConfigService;
 
 //	@Autowired
 //	private RocketMQTemplate rocketMQTemplate;
@@ -636,4 +641,25 @@ public class CommonController {
 		return ResponseResult.ok(config.getIsOpenIM());
 	}
 
+	@ApiOperation("获取项目对应api请求域名地址")
+	@GetMapping("/getDomain")
+	public R getDomain(@RequestParam String projectCode) {
+		String redisKey = "projectCode:" + projectCode;
+		FsProjectAddressConfig config = redisCache.getCacheObject(redisKey);
+		if (Objects.isNull(config)) {
+			config = projectAddressConfigService.selectDomainByCode(projectCode);
+			redisCache.setCacheObject(redisKey, config, 5, TimeUnit.MINUTES);
+		}
+		String addressUrl = "";
+		String imgPath = "";
+		Integer sendType = null;
+
+		if (Objects.nonNull(config)) {
+			addressUrl = config.getAddressUrl();
+			imgPath = config.getBucketPath();
+			sendType = config.getSendType();
+		}
+
+		return R.ok().put("addressUrl", addressUrl).put("imgpath", imgPath).put("sendType", sendType);
+	}
 }