浏览代码

Merge branch 'master' of http://1.14.104.71:10880/root/ylrz_scrm_java

# Conflicts:
#	fs-company-app/src/main/java/com/fs/app/controller/FsUserController.java
caoliqin 2 月之前
父节点
当前提交
c4d3fc4ac9
共有 20 个文件被更改,包括 368 次插入27 次删除
  1. 6 3
      fs-company-app/src/main/java/com/fs/app/controller/CompanyTagController.java
  2. 33 1
      fs-company-app/src/main/java/com/fs/app/controller/FsUserController.java
  3. 21 0
      fs-company-app/src/main/java/com/fs/app/controller/FsUserCourseVideoController.java
  4. 1 11
      fs-company-app/src/main/java/com/fs/app/exception/FSExceptionHandler.java
  5. 22 0
      fs-company-app/src/main/java/com/fs/app/param/FsUserTagUpdateParam.java
  6. 26 0
      fs-company-app/src/main/java/com/fs/app/param/FsUserUpdateParam.java
  7. 1 1
      fs-company/src/main/java/com/fs/company/controller/CompanyUserController.java
  8. 7 0
      fs-service-system/src/main/java/com/fs/company/mapper/CompanyTagMapper.java
  9. 6 0
      fs-service-system/src/main/java/com/fs/company/mapper/CompanyTagUserMapper.java
  10. 9 0
      fs-service-system/src/main/java/com/fs/company/service/ICompanyTagUserService.java
  11. 38 3
      fs-service-system/src/main/java/com/fs/company/service/impl/CompanyTagUserServiceImpl.java
  12. 1 1
      fs-service-system/src/main/java/com/fs/course/mapper/FsCourseLinkMapper.java
  13. 8 0
      fs-service-system/src/main/java/com/fs/course/mapper/FsUserCourseMapper.java
  14. 7 0
      fs-service-system/src/main/java/com/fs/course/service/IFsUserCourseService.java
  15. 22 0
      fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseServiceImpl.java
  16. 66 0
      fs-service-system/src/main/java/com/fs/course/vo/FsUserCourseParticipationRecordVO.java
  17. 7 4
      fs-service-system/src/main/java/com/fs/sop/service/impl/SopUserLogsInfoServiceImpl.java
  18. 13 2
      fs-service-system/src/main/resources/mapper/company/CompanyTagMapper.xml
  19. 10 1
      fs-service-system/src/main/resources/mapper/company/CompanyTagUserMapper.xml
  20. 64 0
      fs-service-system/src/main/resources/mapper/course/FsUserCourseMapper.xml

+ 6 - 3
fs-company-app/src/main/java/com/fs/app/controller/CompanyTagController.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.fs.app.annotation.Login;
 import com.fs.common.core.domain.R;
 import com.fs.common.exception.CustomException;
+import com.fs.common.utils.StringUtils;
 import com.fs.company.domain.CompanyTag;
 import com.fs.company.service.ICompanyTagService;
 import com.fs.company.service.ICompanyTagUserService;
@@ -42,8 +43,10 @@ public class CompanyTagController extends AppBaseController {
         log.debug("查询公司标签列表 keyword: {}, pageNum: {}, pageSize: {}", keyword, pageNum, pageSize);
 
         Map<String, Object> params = new HashMap<>();
-        params.put("keyword", keyword);
         params.put("companyId", getCompanyId());
+        if (StringUtils.isNotBlank(keyword)) {
+            params.put("keyword", keyword.split(","));
+        }
 
         PageHelper.startPage(pageNum, pageSize);
         List<CompanyTag> list = companyTagService.selectCompanyTagListByMap(params);
@@ -78,9 +81,9 @@ public class CompanyTagController extends AppBaseController {
     @Login
     @GetMapping("/tagSubUsers")
     @ApiOperation("标签下会员列表")
-    public R tagSubUsers(@RequestParam Long tagId) {
+    public R tagSubUsers(@RequestParam List<Long> tagId) {
         Map<String, Object> params = new HashMap<>();
-        params.put("tagId", tagId);
+        params.put("tagIds", tagId);
         params.put("companyId", getCompanyId());
         return R.ok().put("data", companyTagUserService.selectUserListByMap(params));
     }

+ 33 - 1
fs-company-app/src/main/java/com/fs/app/controller/FsUserController.java

@@ -1,16 +1,21 @@
 package com.fs.app.controller;
 
 
+import com.alibaba.fastjson.JSON;
 import com.fs.app.annotation.Login;
+import com.fs.app.param.FsUserTagUpdateParam;
+import com.fs.app.param.FsUserUpdateParam;
 import com.fs.app.utils.ValidateUtil;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
+import com.fs.common.exception.ServiceException;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.service.ICompanyTagUserService;
 import com.fs.company.service.ICompanyUserService;
 import com.fs.company.vo.CompanyQueryVo;
 import com.fs.course.vo.newfs.FsCourseAnalysisVO;
 import com.fs.store.param.h5.CourseAnalysisParam;
+import com.fs.store.domain.FsUser;
 import com.fs.store.param.h5.FsUserPageListParam;
 import com.fs.store.param.h5.TagListParam;
 import com.fs.store.param.h5.UserStatisticsCommonParam;
@@ -21,16 +26,19 @@ import com.github.pagehelper.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.Valid;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
-
+@Slf4j
 @Api(tags = "用户会员相关接口")
 @RestController
 @RequestMapping("/app/fs/user")
@@ -202,6 +210,30 @@ public class FsUserController extends AppBaseController {
         return ResponseResult.ok(list);
     }
 
+    @Login
+    @ApiOperation("修改用户备注、姓名")
+    @PostMapping("/changeUserInfo")
+    public ResponseResult<Object> changeUserInfo(@Valid @RequestBody FsUserUpdateParam param) {
+        log.debug("修改用户备注、姓名 param:{}", JSON.toJSONString(param));
+        FsUser fsUser = fsUserService.selectFsUserById(param.getFsUserId());
+        if (Objects.isNull(fsUser)) {
+            throw new ServiceException("用户不存在");
+        }
+
+        fsUser.setUsername(param.getUserName());
+        fsUser.setRemark(param.getRemark());
+        fsUserService.updateFsUser(fsUser);
+        return ResponseResult.ok();
+    }
+
+    @Login
+    @ApiOperation("修改用户标签")
+    @PostMapping("/changeUserTags")
+    public ResponseResult<Object> changeUserTags(@Valid @RequestBody FsUserTagUpdateParam param) {
+        companyTagUserService.changeUserTags(param.getFsUserId(), param.getTagIds());
+        return ResponseResult.ok();
+    }
+
     @GetMapping("/courseAnalysis")
     @ApiOperation("管理-课程分析-分页列表查询")
     public ResponseResult<PageInfo<FsCourseAnalysisVO>> courseAnalysisList(CourseAnalysisParam param) {

+ 21 - 0
fs-company-app/src/main/java/com/fs/app/controller/FsUserCourseVideoController.java

@@ -1,11 +1,13 @@
 package com.fs.app.controller;
 
+import com.fs.app.annotation.Login;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
 import com.fs.course.param.newfs.FsUserCourseListParam;
 import com.fs.course.param.newfs.UserCourseVideoPageParam;
 import com.fs.course.service.IFsUserCourseService;
 import com.fs.course.service.IFsUserCourseVideoService;
+import com.fs.course.vo.FsUserCourseParticipationRecordVO;
 import com.fs.course.vo.newfs.FsUserCourseListVO;
 import com.fs.course.vo.newfs.FsUserCourseVideoDetailsVO;
 import com.fs.course.vo.newfs.FsUserCourseVideoPageListVO;
@@ -70,4 +72,23 @@ public class FsUserCourseVideoController extends AppBaseController {
         PageInfo<FsUserVideoListVO> result = new PageInfo<>(listCourseVideo);
         return ResponseResult.ok(result);
     }
+
+    @Login
+    @ApiOperation("参与记录")
+    @GetMapping("/participationRecord")
+    public ResponseResult<Object> participationRecord(@RequestParam Long courseId,
+                                                      @RequestParam Integer type,
+                                                      @RequestParam(required = false) String keyword,
+                                                      @RequestParam(required = false, defaultValue = "1") Integer pageNum,
+                                                      @RequestParam(required = false, defaultValue = "10") Integer pageSize) {
+        log.debug("参与记录 keyword: {}, pageNum: {}, pageSize: {}", keyword, pageNum, pageSize);
+        Map<String, Object> params = new HashMap<>();
+        params.put("courseId", courseId);
+        params.put("type", type);
+        params.put("keyword", keyword);
+
+        PageHelper.startPage(pageNum, pageSize);
+        List<FsUserCourseParticipationRecordVO> record = fsUserCourseService.getParticipationRecordByMap(params);
+        return ResponseResult.ok(new PageInfo<>(record));
+    }
 }

+ 1 - 11
fs-company-app/src/main/java/com/fs/app/exception/FSExceptionHandler.java

@@ -54,17 +54,7 @@ public class FSExceptionHandler {
 	@ExceptionHandler(Exception.class)
 	public R handleException(Exception e){
 		logger.error(e.getMessage(), e);
-		if (e instanceof BindException){
-			BindException ex = (BindException)e;
-			List<ObjectError> allErrors = ex.getAllErrors();//捕获的所有错误对象
-			ObjectError error = allErrors.get(0);
-			String defaultMessage = error.getDefaultMessage();//异常内容
-
-			return R.error(defaultMessage);
-		}else {
-			return R.error(e.getMessage());
-		}
-
+		return R.error("系统异常");
 	}
 	@ExceptionHandler(BindException.class)
 	public R bindExceptionHandler(BindException e) {

+ 22 - 0
fs-company-app/src/main/java/com/fs/app/param/FsUserTagUpdateParam.java

@@ -0,0 +1,22 @@
+package com.fs.app.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Data
+public class FsUserTagUpdateParam {
+    /**
+     * 用户ID
+     */
+    @ApiModelProperty("用户ID")
+    @NotNull(message = "用户ID不能为空")
+    private Long fsUserId;
+    /**
+     * 标签ID
+     */
+    @ApiModelProperty("标签ID集合")
+    private List<Long> tagIds;
+}

+ 26 - 0
fs-company-app/src/main/java/com/fs/app/param/FsUserUpdateParam.java

@@ -0,0 +1,26 @@
+package com.fs.app.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+public class FsUserUpdateParam {
+    /**
+     * 用户ID
+     */
+    @ApiModelProperty("用户ID")
+    @NotNull(message = "用户ID不能为空")
+    private Long fsUserId;
+    /**
+     * 用户名称
+     */
+    @ApiModelProperty("用户名称")
+    private String userName;
+    /**
+     * 用户备注
+     */
+    @ApiModelProperty("用户备注")
+    private String remark;
+}

+ 1 - 1
fs-company/src/main/java/com/fs/company/controller/CompanyUserController.java

@@ -214,7 +214,7 @@ public class CompanyUserController extends BaseController
         CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
 
         // 生成二级域名
-        String subDomain =  DomainUtil.generateSubDomain(config.getCourseDomainName(), 6, String.valueOf(SecurityUtils.getLoginUser().getUser().getUserId()));
+        String subDomain =  "http://"+DomainUtil.generateSubDomain(config.getCourseDomainName(), 6, String.valueOf(SecurityUtils.getLoginUser().getUser().getUserId()));
 
         AjaxResult result = AjaxResult.success();
         result.put("data", subDomain);

+ 7 - 0
fs-service-system/src/main/java/com/fs/company/mapper/CompanyTagMapper.java

@@ -68,4 +68,11 @@ public interface CompanyTagMapper
      * @return list
      */
     List<CompanyTag> selectCompanyTagListByMap(@Param("params") Map<String, Object> params);
+
+    /**
+     * 查询用户标签列表
+     * @param userId    用户ID
+     * @return  list
+     */
+    List<CompanyTag> selectCompanyTagListByUserId(@Param("userId") Long userId);
 }

+ 6 - 0
fs-service-system/src/main/java/com/fs/company/mapper/CompanyTagUserMapper.java

@@ -73,4 +73,10 @@ public interface CompanyTagUserMapper
      * @return  list
      */
     List<CompanyTagUserVO> selectUserListByMap(@Param("params") Map<String, Object> params);
+
+    /**
+     * 删除用户标签
+     * @param params    条件
+     */
+    void deleteCompanyTagUserByMap(@Param("params") Map<String, Object> params);
 }

+ 9 - 0
fs-service-system/src/main/java/com/fs/company/service/ICompanyTagUserService.java

@@ -8,6 +8,8 @@ import com.fs.company.vo.CompanyTagUserVO;
 import com.fs.store.param.h5.TagListParam;
 import com.fs.store.vo.h5.CompanyUserTagListVO;
 
+import javax.validation.constraints.NotNull;
+
 /**
  * companyService接口
  *
@@ -77,4 +79,11 @@ public interface ICompanyTagUserService
      * @return  list
      */
     List<CompanyTagUserVO> selectUserListByMap(Map<String, Object> params);
+
+    /**
+     * 修改用户标签
+     * @param fsUserId 用户ID
+     * @param tagIds   标签ID集合
+     */
+    void changeUserTags(Long fsUserId, List<Long> tagIds);
 }

+ 38 - 3
fs-service-system/src/main/java/com/fs/company/service/impl/CompanyTagUserServiceImpl.java

@@ -1,15 +1,16 @@
 package com.fs.company.service.impl;
 
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
+import com.fs.common.exception.ServiceException;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.mapper.CompanyUserMapper;
 import com.fs.company.vo.CompanyTagUserVO;
+import com.fs.store.domain.FsUser;
+import com.fs.store.mapper.FsUserMapper;
 import com.fs.store.param.h5.TagListParam;
 import com.fs.store.vo.h5.CompanyUserTagListVO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -17,6 +18,7 @@ import org.springframework.stereotype.Service;
 import com.fs.company.mapper.CompanyTagUserMapper;
 import com.fs.company.domain.CompanyTagUser;
 import com.fs.company.service.ICompanyTagUserService;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * companyService业务层处理
@@ -32,6 +34,8 @@ public class CompanyTagUserServiceImpl implements ICompanyTagUserService
 
     @Autowired
     private CompanyUserMapper  companyUserMapper;
+    @Autowired
+    private FsUserMapper fsUserMapper;
 
     /**
      * 查询company
@@ -133,4 +137,35 @@ public class CompanyTagUserServiceImpl implements ICompanyTagUserService
     public List<CompanyTagUserVO> selectUserListByMap(Map<String, Object> params) {
         return companyTagUserMapper.selectUserListByMap(params);
     }
+
+    /**
+     * 修改用户标签
+     * @param fsUserId 用户ID
+     * @param tagIds   标签ID集合
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changeUserTags(Long fsUserId, List<Long> tagIds) {
+        FsUser fsUser = fsUserMapper.selectFsUserById(fsUserId);
+        if (Objects.isNull(fsUser)) {
+            throw new ServiceException("用户不存在");
+        }
+
+        // 删除原标签
+        Map<String, Object> params = new HashMap<>();
+        params.put("userId", fsUserId);
+        params.put("companyId", fsUser.getCompanyId());
+        params.put("companyUserId", fsUser.getCompanyUserId());
+        companyTagUserMapper.deleteCompanyTagUserByMap(params);
+
+        // 不为空则添加新标签
+        if (Objects.nonNull(tagIds) && !tagIds.isEmpty()) {
+            CompanyTagUser companyTagUser = new CompanyTagUser();
+            companyTagUser.setUserId(fsUserId);
+            companyTagUser.setCompanyId(fsUser.getCompanyId());
+            companyTagUser.setCompanyUserId(fsUser.getCompanyUserId());
+            companyTagUser.setTagIds(tagIds.stream().map(String::valueOf).collect(Collectors.joining(",")));
+            companyTagUserMapper.insertCompanyTagUser(companyTagUser);
+        }
+    }
 }

+ 1 - 1
fs-service-system/src/main/java/com/fs/course/mapper/FsCourseLinkMapper.java

@@ -62,7 +62,7 @@ public interface FsCourseLinkMapper
      */
     public int deleteFsCourseLinkByLinkIds(Long[] linkIds);
 
-    @Select("select link, real_link, update_time from fs_course_link where link = #{suffix} order by link_id desc limit 1 ")
+    @Select("select link, real_link, update_time,company_user_id from fs_course_link where link = #{suffix} order by link_id desc limit 1 ")
     FsCourseLink selectFsCourseLinkByLink(@Param("suffix") String suffix);
 
     void insertFsCourseLinkBatch(@Param("courseLinks")List<FsCourseLink> courseLinkToInsert);

+ 8 - 0
fs-service-system/src/main/java/com/fs/course/mapper/FsUserCourseMapper.java

@@ -1,6 +1,8 @@
 package com.fs.course.mapper;
 
 import java.util.List;
+import java.util.Map;
+
 import com.fs.course.domain.FsUserCourse;
 import com.fs.course.param.FsUserCourseAddStudyCourseParam;
 import com.fs.course.param.FsUserCourseListUParam;
@@ -231,4 +233,10 @@ public interface FsUserCourseMapper
 
     List<FsUserCourseListVO> getFsUserCourseList(FsUserCourseListParam param);
 
+    /**
+     * 查询用户参与记录
+     * @param params 条件
+     * @return  list
+     */
+    List<FsUserCourseParticipationRecordVO> getParticipationRecordByMap(@Param("params") Map<String, Object> params);
 }

+ 7 - 0
fs-service-system/src/main/java/com/fs/course/service/IFsUserCourseService.java

@@ -111,4 +111,11 @@ public interface IFsUserCourseService
      * @return
      */
     List<FsUserCourseListVO> getFsUserCourseList(FsUserCourseListParam param);
+
+    /**
+     * 查询用户参与记录
+     * @param params 条件
+     * @return  list
+     */
+    List<FsUserCourseParticipationRecordVO> getParticipationRecordByMap(Map<String, Object> params);
 }

+ 22 - 0
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseServiceImpl.java

@@ -5,6 +5,11 @@ import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.fs.common.core.domain.R;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.DictUtils;
+import com.fs.common.utils.StringUtils;
+import com.fs.company.domain.CompanyTag;
+import com.fs.company.domain.CompanyTagUser;
+import com.fs.company.mapper.CompanyTagMapper;
+import com.fs.company.mapper.CompanyTagUserMapper;
 import com.fs.course.domain.FsUserCourse;
 import com.fs.course.domain.FsUserCourseStudy;
 import com.fs.course.domain.FsUserCourseStudyLog;
@@ -46,6 +51,8 @@ public class FsUserCourseServiceImpl implements IFsUserCourseService
     private FsUserCourseStudyMapper fsUserCourseStudyMapper;
     @Autowired
     private FsUserCourseStudyLogMapper fsUserCourseStudyLogMapper;
+    @Autowired
+    private CompanyTagMapper companyTagMapper;
 
     /**
      * 查询课程
@@ -368,4 +375,19 @@ public class FsUserCourseServiceImpl implements IFsUserCourseService
     public List<FsUserCourseListVO> getFsUserCourseList(FsUserCourseListParam param) {
         return fsUserCourseMapper.getFsUserCourseList(param);
     }
+
+    /**
+     * 查询用户参与记录
+     * @param params 条件
+     * @return  list
+     */
+    @Override
+    public List<FsUserCourseParticipationRecordVO> getParticipationRecordByMap(Map<String, Object> params) {
+        List<FsUserCourseParticipationRecordVO> list = fsUserCourseMapper.getParticipationRecordByMap(params);
+        list.forEach(recordVO -> {
+            List<CompanyTag> companyTags = companyTagMapper.selectCompanyTagListByUserId(recordVO.getUserId());
+            recordVO.setTags(companyTags);
+        });
+        return list;
+    }
 }

+ 66 - 0
fs-service-system/src/main/java/com/fs/course/vo/FsUserCourseParticipationRecordVO.java

@@ -0,0 +1,66 @@
+package com.fs.course.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fs.company.domain.CompanyTag;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+public class FsUserCourseParticipationRecordVO {
+    /**
+     * 用户ID
+     */
+    private Long userId;
+    /**
+     * 课程ID
+     */
+    private Long courseId;
+    /**
+     * 用户昵称
+     */
+    private String nickName;
+    /**
+     * 用户名称
+     */
+    private String userName;
+    /**
+     * 头像
+     */
+    private String avatar;
+    /**
+     * 用户电话号码
+     */
+    private String phoneNumber;
+    /**
+     * 注册时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDateTime createTime;
+    /**
+     * 观看次数
+     */
+    private Integer watchCount;
+    /**
+     * 完播次数
+     */
+    private Integer finishCount;
+    /**
+     * 累计时长
+     */
+    private Integer watchTime;
+    /**
+     * 红包领取状态
+     */
+    private Integer redStatus;
+    /**
+     * 观看时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDateTime watchDate;
+    /**
+     * 标签
+     */
+    private List<CompanyTag> tags;
+}

+ 7 - 4
fs-service-system/src/main/java/com/fs/sop/service/impl/SopUserLogsInfoServiceImpl.java

@@ -448,7 +448,7 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                             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);
+                                    qwUserId, companyUserId, companyId,finalDomainName, item.getExternalId(),config,contact.getFsUserId());
 
                             if (StringUtils.isNotEmpty(sortLink)) {
                                 if ("3".equals(st.getContentType())) {
@@ -481,7 +481,7 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                         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);
+                                qwUserId, companyUserId, companyId, item.getExternalId(), config,contact.getFsUserId());
 
                         st.setMiniprogramPage(linkByMiniApp);
                         break;
@@ -602,7 +602,7 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
 
     private String generateShortLink(QwSopCourseFinishTempSetting.Setting setting, String corpId, Date sendTime,
                                      Integer courseId, Integer videoId, String qwUserId,
-                                     String companyUserId, String companyId,String domainName, Long externalId,CourseConfig config) {
+                                     String companyUserId, String companyId,String domainName, Long externalId,CourseConfig config,Long FsUserId) {
 
         // 手动创建 FsCourseLink 对象,避免使用 BeanUtils.copyProperties
 //        FsCourseLink link = new FsCourseLink();
@@ -633,6 +633,7 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
 
         FsCourseRealLink courseMap = new FsCourseRealLink();
         BeanUtils.copyProperties(link,courseMap);
+        courseMap.setFsUserId(FsUserId);
 
         String courseJson = JSON.toJSONString(courseMap);
         String realLinkFull = REAL_LINK_PREFIX + courseJson;
@@ -652,13 +653,14 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
 
     private String createLinkByMiniApp(QwSopCourseFinishTempSetting.Setting setting, String corpId, Date sendTime,
                                      Integer courseId, Integer videoId, String qwUserId,
-                                     String companyUserId, String companyId, Long externalId,CourseConfig config) {
+                                     String companyUserId, String companyId, Long externalId,CourseConfig config,Long FsUserId) {
 
         FsCourseLink link = createFsCourseLink(corpId, sendTime, courseId, videoId, qwUserId,
                                                 companyUserId, companyId, externalId,3);
 
         FsCourseRealLink courseMap = new FsCourseRealLink();
         BeanUtils.copyProperties(link,courseMap);
+        courseMap.setFsUserId(FsUserId);
 
         String courseJson = JSON.toJSONString(courseMap);
         String realLinkFull = miniappRealLink + courseJson;
@@ -682,6 +684,7 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
 
         FsCourseRealLink courseMap = new FsCourseRealLink();
         BeanUtils.copyProperties(link,courseMap);
+        courseMap.setFsUserId(fsUserId);
 
         String courseJson = JSON.toJSONString(courseMap);
         String realLinkFull = REAL_LINK_PREFIX + courseJson;

+ 13 - 2
fs-service-system/src/main/resources/mapper/company/CompanyTagMapper.xml

@@ -28,11 +28,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where tag_id = #{tagId}
     </select>
 
+    <!-- 查询标签列表 -->
     <select id="selectCompanyTagListByMap" resultType="com.fs.company.domain.CompanyTag">
         select ct.* from company_tag ct
         <where>
-            <if test="params.keyword != null and params.keyword != ''">
-                ct.tab like concat('%', #{params.keyword}, '%')
+            <if test="params.keyword != null and params.keyword.length > 0">
+                and
+                <foreach collection="params.keyword" item="item"  open="(" separator="or" close=")">
+                    ct.tag like concat('%',#{item},'%')
+                </foreach>
             </if>
             <if test="params.companyId != null">
                 and ct.company_id = #{params.companyId}
@@ -40,6 +44,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </where>
     </select>
 
+    <!-- 查询用户标签列表 -->
+    <select id="selectCompanyTagListByUserId" resultType="com.fs.company.domain.CompanyTag">
+        select ct.* from company_tag ct
+        inner join company_tag_user ctu on ctu.company_id = ct.company_id and find_in_set(ct.tag_id, ctu.tag_ids) > 0
+        where ctu.user_id = #{userId}
+    </select>
+
     <insert id="insertCompanyTag" parameterType="CompanyTag" useGeneratedKeys="true" keyProperty="tagId">
         insert into company_tag
         <trim prefix="(" suffix=")" suffixOverrides=",">

+ 10 - 1
fs-service-system/src/main/resources/mapper/company/CompanyTagUserMapper.xml

@@ -73,6 +73,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </foreach>
     </delete>
 
+    <!-- 删除用户标签 -->
+    <delete id="deleteCompanyTagUserByMap">
+        delete from company_tag_user
+        where user_id = #{params.userId} and company_id = #{params.companyId} and company_user_id = #{params.companyUserId}
+    </delete>
+
     <select id="getTagList" resultType="CompanyUserTagListVO">
         SELECT
         company_tag.tag as tagName,
@@ -102,7 +108,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             fu.nickname as userName
         from company_tag_user ctu
         inner join fs_user fu on fu.user_id = ctu.user_id
-        where ctu.company_id = #{params.companyId} and find_in_set(#{params.tagId}, ctu.tag_ids)
+        where ctu.company_id = #{params.companyId} and
+        <foreach collection="params.tagIds" item="tagId" open="(" separator="or" close=")">
+            find_in_set(#{tagId}, ctu.tag_ids)
+        </foreach>
     </select>
 
 </mapper>

+ 64 - 0
fs-service-system/src/main/resources/mapper/course/FsUserCourseMapper.xml

@@ -249,4 +249,68 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         ORDER BY
             c.course_id
     </select>
+
+    <!-- 查询用户参与记录 -->
+    <select id="getParticipationRecordByMap" resultType="com.fs.course.vo.FsUserCourseParticipationRecordVO">
+        select distinct
+            fu.user_id,
+            fuc.course_id,
+            fu.nickname as nickName,
+            fu.username as userName,
+            fu.avatar,
+            fu.phone as phoneNumber,
+            fu.create_time,
+            fcwl.create_time as watchDate,
+            ifnull(t1.watchCount, 0) as watchCount,
+            ifnull(t1.finishCount, 0) as finishCount,
+            ifnull(t1.watchTime, 0 ) as watchTime,
+            if(ifnull(t2.redcount, 0) > 0, 1, 0) AS redStatus
+        from fs_user_course fuc
+        inner join fs_course_watch_log fcwl on fcwl.course_id = fuc.course_id
+        inner join fs_user fu on fu.user_id = fcwl.user_id
+        left join (
+            select user_id,
+                count(log_id) AS watchCount,
+                count(case when log_type = 2 then log_id end) AS finishCount,
+                sum(duration) AS watchTime
+            from fs_course_watch_log
+            group by user_id
+        ) t1 on t1.user_id = fu.user_id
+        left join (
+            select user_id, course_id, count(log_id) as redcount
+            from fs_course_red_packet_log
+            group by user_id, course_id
+        ) t2 on t2.user_id = fu.user_id and t2.course_id = fuc.course_id
+        <if test="params.type == 0">
+            left join  (
+                select user_id, course_id, count(log_id) as count
+                from fs_course_answer_logs
+                where is_right = 1
+                group by user_id, course_id
+            ) t3 on t3.user_id = fu.user_id and t3.course_id = fuc.course_id
+        </if>
+        where fuc.course_id = #{params.courseId}
+        <if test="params.keyword != null and params.keyword != ''">
+            and (
+                fu.user_id = #{params.keyword}
+                or fu.nickname like concat('%', #{params.keyword}, '%')
+                or fu.username like concat('%', #{params.keyword}, '%')
+                or fu.phone = #{params.keyword}
+            )
+        </if>
+        <choose>
+            <when test="params.type == 0">
+                and t3.count > 0
+            </when>
+            <when test="params.type == 1">
+                and fcwl.log_type = 2
+            </when>
+            <when test="params.type == 2">
+                and fcwl.log_type in (1,4)
+            </when>
+            <otherwise>
+                and fcwl.log_type = 3
+            </otherwise>
+        </choose>
+    </select>
 </mapper>