Sfoglia il codice sorgente

Merge remote-tracking branch 'origin/master'

吴树波 5 giorni fa
parent
commit
1869ea1ca7
19 ha cambiato i file con 470 aggiunte e 10 eliminazioni
  1. 21 4
      fs-admin/src/main/java/com/fs/course/controller/FsUserCoursePeriodController.java
  2. 2 0
      fs-admin/src/main/java/com/fs/course/controller/FsUserCourseTrainingCampController.java
  3. 39 0
      fs-admin/src/main/java/com/fs/his/controller/FsUserOperationLogController.java
  4. 15 0
      fs-company/src/main/java/com/fs/company/controller/course/FsUserCoursePeriodController.java
  5. 2 1
      fs-company/src/main/java/com/fs/company/controller/course/FsUserCourseTrainingCampController.java
  6. 35 0
      fs-company/src/main/java/com/fs/company/controller/course/FsUserOperationLogController.java
  7. 12 0
      fs-service/src/main/java/com/fs/course/mapper/FsUserCoursePeriodMapper.java
  8. 32 0
      fs-service/src/main/java/com/fs/course/param/PeriodStatisticCountParam.java
  9. 19 0
      fs-service/src/main/java/com/fs/course/service/IFsUserCoursePeriodService.java
  10. 50 0
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCoursePeriodServiceImpl.java
  11. 28 0
      fs-service/src/main/java/com/fs/course/vo/FsCourseStaticsCountVO.java
  12. 10 2
      fs-service/src/main/java/com/fs/his/mapper/FsUserOperationLogMapper.java
  13. 4 1
      fs-service/src/main/java/com/fs/his/service/IFsUserOperationLogService.java
  14. 23 2
      fs-service/src/main/java/com/fs/his/service/impl/FsUserOperationLogServiceImpl.java
  15. 19 0
      fs-service/src/main/java/com/fs/his/vo/FsUserOperationLogParamVo.java
  16. 19 0
      fs-service/src/main/java/com/fs/his/vo/FsUserOperationLogVo.java
  17. 125 0
      fs-service/src/main/resources/mapper/course/FsUserCoursePeriodMapper.xml
  18. 4 0
      fs-service/src/main/resources/mapper/course/FsUserCourseTrainingCampMapper.xml
  19. 11 0
      fs-service/src/main/resources/mapper/his/FsUserOperationLogMapper.xml

+ 21 - 4
fs-admin/src/main/java/com/fs/course/controller/FsUserCoursePeriodController.java

@@ -13,13 +13,11 @@ import com.fs.course.domain.FsUserCourseVideoRedPackage;
 import com.fs.course.param.CompanyRedPacketParam;
 import com.fs.course.param.FsBatchPeriodRedPackageParam;
 import com.fs.course.param.PeriodCountParam;
+import com.fs.course.param.PeriodStatisticCountParam;
 import com.fs.course.service.IFsUserCoursePeriodDaysService;
 import com.fs.course.service.IFsUserCoursePeriodService;
 import com.fs.course.service.IFsUserCourseVideoRedPackageService;
-import com.fs.course.vo.FsPeriodCountVO;
-import com.fs.course.vo.FsUserCoursePeriodVO;
-import com.fs.course.vo.PeriodRedPacketVO;
-import com.fs.course.vo.UpdateCourseTimeVo;
+import com.fs.course.vo.*;
 import com.fs.his.vo.OptionsVO;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
@@ -29,9 +27,12 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
 
 /**
@@ -45,6 +46,7 @@ import java.util.Map;
 @RequestMapping("/course/period")
 @Slf4j
 public class FsUserCoursePeriodController extends BaseController {
+
     private final IFsUserCoursePeriodService fsUserCoursePeriodService;
     private final IFsUserCoursePeriodDaysService fsUserCoursePeriodDaysService;
     private final IFsUserCourseVideoRedPackageService fsUserCourseVideoRedPackageService;
@@ -254,4 +256,19 @@ public class FsUserCoursePeriodController extends BaseController {
         return R.ok();
     }
 
+    @PostMapping("/periodCourseStatisticCount")
+    @ApiOperation("会员详情训练营数据总览")
+    public R periodCourseStatisticCount(@RequestBody PeriodStatisticCountParam param) {
+        if (param == null) {
+            return R.error("请求参数不能为空!");
+        }
+        return R.ok().put("data", fsUserCoursePeriodService.periodCourseStatisticCount(param));
+    }
+
+    @PostMapping("/periodlist")
+    public R periodList(@RequestBody PeriodStatisticCountParam param)
+    {
+        List<FsUserCoursePeriod> list = fsUserCoursePeriodService.selectFsPeriodlist(param);
+        return R.ok().put("data", list);
+    }
 }

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

@@ -36,6 +36,7 @@ public class FsUserCourseTrainingCampController {
     @PreAuthorize("@ss.hasPermi('course:trainingCamp:list')")
     @GetMapping("/list")
     public AjaxResult list(@RequestParam(required = false) String trainingCampName,
+                           @RequestParam(required = false) String userId,
                            @RequestParam String scs,
                            @RequestParam(required = false, defaultValue = "1") Integer pageNum,
                            @RequestParam(required = false, defaultValue = "10") Integer pageSize)
@@ -43,6 +44,7 @@ public class FsUserCourseTrainingCampController {
         Map<String, Object> params = new HashMap<>();
         params.put("trainingCampName", trainingCampName);
         params.put("scs", SortUtils.parseSort(scs));
+        params.put("userId", userId);
 
         PageHelper.startPage(pageNum, pageSize);
         List<FsUserCourseTrainingCampVO> list = fsUserCourseTrainingCampService.selectFsUserCourseTrainingCampVOListByMap(params);

+ 39 - 0
fs-admin/src/main/java/com/fs/his/controller/FsUserOperationLogController.java

@@ -0,0 +1,39 @@
+package com.fs.his.controller;
+
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.his.domain.FsUserOperationLog;
+import com.fs.his.service.IFsUserOperationLogService;
+import com.fs.his.vo.FsUserOperationLogParamVo;
+import com.fs.his.vo.FsUserOperationLogVo;
+import com.hc.openapi.tool.fastjson.JSON;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 用户操作日志对象
+ */
+@RestController
+@RequestMapping("/his/userOperationLog")
+public class FsUserOperationLogController extends BaseController {
+
+    @Autowired
+    private IFsUserOperationLogService fsUserOperationLogService;
+
+//    @PreAuthorize("@ss.hasPermi('his:userOperationLog:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FsUserOperationLog fsUserOperationLog)
+    {
+        startPage();
+        List<FsUserOperationLogVo> list = fsUserOperationLogService.selectFsUserOperationLogByList(fsUserOperationLog);
+
+        return getDataTable(list);
+    }
+}

+ 15 - 0
fs-company/src/main/java/com/fs/company/controller/course/FsUserCoursePeriodController.java

@@ -14,6 +14,7 @@ import com.fs.course.domain.FsUserCourseVideoRedPackage;
 import com.fs.course.param.CompanyRedPacketParam;
 import com.fs.course.param.FsBatchPeriodRedPackageParam;
 import com.fs.course.param.PeriodCountParam;
+import com.fs.course.param.PeriodStatisticCountParam;
 import com.fs.course.service.IFsUserCoursePeriodDaysService;
 import com.fs.course.service.IFsUserCoursePeriodService;
 import com.fs.course.service.IFsUserCourseVideoRedPackageService;
@@ -252,5 +253,19 @@ public class FsUserCoursePeriodController extends BaseController {
         fsUserCoursePeriodService.closePeriod(id);
         return R.ok();
     }
+    @PostMapping("/periodCourseStatisticCount")
+    @ApiOperation("会员详情训练营数据总览")
+    public R periodCourseStatisticCount(@RequestBody PeriodStatisticCountParam param) {
+        if (param == null) {
+            return R.error("请求参数不能为空!");
+        }
+        return R.ok().put("data", fsUserCoursePeriodService.periodCourseStatisticCount(param));
+    }
 
+    @PostMapping("/periodlist")
+    public R periodList(@RequestBody PeriodStatisticCountParam param)
+    {
+        List<FsUserCoursePeriod> list = fsUserCoursePeriodService.selectFsPeriodlist(param);
+        return R.ok().put("data", list);
+    }
 }

+ 2 - 1
fs-company/src/main/java/com/fs/company/controller/course/FsUserCourseTrainingCampController.java

@@ -39,6 +39,7 @@ public class FsUserCourseTrainingCampController {
     @PreAuthorize("@ss.hasPermi('course:trainingCamp:list')")
     @GetMapping("/list")
     public AjaxResult list(@RequestParam(required = false) String trainingCampName,
+                           @RequestParam(required = false) String userId,
                            @RequestParam String scs,
                            @RequestParam(required = false, defaultValue = "1") Integer pageNum,
                            @RequestParam(required = false, defaultValue = "10") Integer pageSize)
@@ -48,7 +49,7 @@ public class FsUserCourseTrainingCampController {
         params.put("trainingCampName", trainingCampName);
         params.put("scs", SortUtils.parseSort(scs));
         params.put("companyId", loginUser.getCompany().getCompanyId());
-
+        params.put("userId", userId);
         PageHelper.startPage(pageNum, pageSize);
         List<FsUserCourseTrainingCampVO> list = fsUserCourseTrainingCampService.selectFsUserCourseTrainingCampVOListByMap(params);
         return AjaxResult.success(new PageInfo<>(list));

+ 35 - 0
fs-company/src/main/java/com/fs/company/controller/course/FsUserOperationLogController.java

@@ -0,0 +1,35 @@
+package com.fs.company.controller.course;
+
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.his.domain.FsUserOperationLog;
+import com.fs.his.service.IFsUserOperationLogService;
+import com.fs.his.vo.FsUserOperationLogVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 用户操作日志对象
+ */
+@RestController
+@RequestMapping("/his/userOperationLog")
+public class FsUserOperationLogController extends BaseController {
+
+    @Autowired
+    private IFsUserOperationLogService fsUserOperationLogService;
+
+    @PreAuthorize("@ss.hasPermi('his:userOperationLog:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FsUserOperationLog fsUserOperationLog)
+    {
+        startPage();
+        List<FsUserOperationLogVo> list = fsUserOperationLogService.selectFsUserOperationLogByList(fsUserOperationLog);
+
+        return getDataTable(list);
+    }
+}

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

@@ -2,6 +2,7 @@ package com.fs.course.mapper;
 
 import com.fs.course.domain.FsUserCoursePeriod;
 import com.fs.course.param.CompanyRedPacketParam;
+import com.fs.course.param.PeriodStatisticCountParam;
 import com.fs.course.vo.FsUserCoursePeriodVO;
 import com.fs.course.vo.PeriodRedPacketVO;
 import org.apache.ibatis.annotations.MapKey;
@@ -9,6 +10,7 @@ import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.List;
 import java.util.Map;
@@ -145,5 +147,15 @@ public interface FsUserCoursePeriodMapper
     int updateBatchDelFlag(@Param("ids") Long [] ids, @Param("delFlag") Integer delFlag);
 
 
+    Long setlectCourseCompleteNum(PeriodStatisticCountParam param);
 
+    Long setlectCourseWatchNum(PeriodStatisticCountParam param);
+
+    Long setlectRedPacketCount(PeriodStatisticCountParam param);
+
+    BigDecimal setlectRedPacketAmount(PeriodStatisticCountParam param);
+
+    Long setlectCorrectAnswerNum(PeriodStatisticCountParam param);
+
+    List<FsUserCoursePeriod> selectFsPeriodlist(PeriodStatisticCountParam param);
 }

+ 32 - 0
fs-service/src/main/java/com/fs/course/param/PeriodStatisticCountParam.java

@@ -0,0 +1,32 @@
+package com.fs.course.param;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * 营期统计入参
+ */
+@Data
+public class PeriodStatisticCountParam implements Serializable {
+
+    @ApiModelProperty(value = "营期id")
+    private Long periodId;
+
+    /**
+     * 训练营Id
+     */
+    private Long trainingCampId;
+
+    /**
+     * 用户Id
+     */
+    private Long userId;
+
+}
+

+ 19 - 0
fs-service/src/main/java/com/fs/course/service/IFsUserCoursePeriodService.java

@@ -1,8 +1,11 @@
 package com.fs.course.service;
 
 import com.fs.course.domain.FsUserCoursePeriod;
+import com.fs.course.param.PeriodStatisticCountParam;
+import com.fs.course.vo.FsCourseStaticsCountVO;
 import com.fs.course.vo.FsUserCoursePeriodVO;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -78,4 +81,20 @@ public interface IFsUserCoursePeriodService
      * 更新营期状态
      */
     void changePeriodStatus();
+
+
+    /**
+     * 查询数据信息(查询总学习时长、正确答题数、答题红包金额、答题红包数)
+     * @param param
+     * @return
+     */
+    FsCourseStaticsCountVO periodCourseStatisticCount(PeriodStatisticCountParam param);
+
+    /**
+     * 查询自己的所有营期
+     *
+     * @param param
+     * @return
+     */
+    List<FsUserCoursePeriod> selectFsPeriodlist(PeriodStatisticCountParam param);
 }

+ 50 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsUserCoursePeriodServiceImpl.java

@@ -1,14 +1,20 @@
 package com.fs.course.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fs.common.core.domain.R;
+import com.fs.common.core.redis.RedisCache;
 import com.fs.common.exception.ServiceException;
+import com.fs.common.utils.StringUtils;
 import com.fs.course.domain.FsUserCoursePeriod;
 import com.fs.course.domain.FsUserCoursePeriodDays;
 import com.fs.course.mapper.FsUserCoursePeriodDaysMapper;
 import com.fs.course.mapper.FsUserCoursePeriodMapper;
 import com.fs.course.mapper.FsUserCourseVideoRedPackageMapper;
+import com.fs.course.param.PeriodStatisticCountParam;
 import com.fs.course.service.IFsUserCoursePeriodService;
+import com.fs.course.vo.FsCourseStaticsCountVO;
 import com.fs.course.vo.FsUserCoursePeriodVO;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,6 +22,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
@@ -23,6 +30,7 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -37,6 +45,8 @@ public class FsUserCoursePeriodServiceImpl implements IFsUserCoursePeriodService
     @Autowired
     private FsUserCoursePeriodMapper fsUserCoursePeriodMapper;
     @Resource
+    RedisCache redisCache;
+    @Resource
     private FsUserCoursePeriodDaysMapper fsUserCoursePeriodDaysMapper;
     @Resource
     private FsUserCourseVideoRedPackageMapper fsUserCourseVideoRedPackageMapper;
@@ -241,4 +251,44 @@ public class FsUserCoursePeriodServiceImpl implements IFsUserCoursePeriodService
         // 关营
         fsUserCoursePeriodMapper.endPeriod(LocalDate.now());
     }
+    @Override
+    public FsCourseStaticsCountVO periodCourseStatisticCount(PeriodStatisticCountParam param) {
+        String redisKey = "user:trainingCampId:periodId:" + param.getUserId() + ":" + param.getTrainingCampId();
+        if (ObjectUtil.isNotEmpty(param.getPeriodId())){
+            redisKey=redisKey+":"+param.getPeriodId();
+        }
+        FsCourseStaticsCountVO durationStr = redisCache.getCacheObject(redisKey);
+        if (ObjectUtil.isNotEmpty(durationStr)){
+            return durationStr;
+        }
+        FsCourseStaticsCountVO fsCourseStaticsCountVO = new FsCourseStaticsCountVO();
+        try {
+            Long courseCompleteNum = fsUserCoursePeriodMapper.setlectCourseCompleteNum(param);
+            fsCourseStaticsCountVO.setCourseCompleteNum(courseCompleteNum != null ? courseCompleteNum : 0L);
+
+            Long courseWatchNum = fsUserCoursePeriodMapper.setlectCourseWatchNum(param);
+            fsCourseStaticsCountVO.setCourseWatchNum(courseWatchNum != null ? courseWatchNum : 0L);
+
+            Long redPacketCount = fsUserCoursePeriodMapper.setlectRedPacketCount(param);
+            fsCourseStaticsCountVO.setRedPacketCount(redPacketCount != null ? redPacketCount : 0L);
+
+            BigDecimal redPacketAmount = fsUserCoursePeriodMapper.setlectRedPacketAmount(param);
+            fsCourseStaticsCountVO.setRedPacketAmount(redPacketAmount != null ? redPacketAmount : BigDecimal.ZERO);
+
+            Long correctAnswerNum = fsUserCoursePeriodMapper.setlectCorrectAnswerNum(param);
+            fsCourseStaticsCountVO.setCorrectAnswerNum(correctAnswerNum != null ? correctAnswerNum : 0L);
+            redisCache.setCacheObject(redisKey,fsCourseStaticsCountVO);
+            // 设置 Redis 记录的过期时间(例如 5 分钟)
+            redisCache.expire(redisKey, 600, TimeUnit.SECONDS);
+            return fsCourseStaticsCountVO;
+
+        } catch (Exception e) {
+            return fsCourseStaticsCountVO;
+        }
+    }
+
+    @Override
+    public List<FsUserCoursePeriod> selectFsPeriodlist(PeriodStatisticCountParam param) {
+        return fsUserCoursePeriodMapper.selectFsPeriodlist(param);
+    }
 }

+ 28 - 0
fs-service/src/main/java/com/fs/course/vo/FsCourseStaticsCountVO.java

@@ -0,0 +1,28 @@
+package com.fs.course.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+
+@Data
+public class FsCourseStaticsCountVO{
+
+    @ApiModelProperty(value = "总学习时长")
+    private Long courseWatchNum;
+
+    @ApiModelProperty(value = "到课数")
+    private Long courseCompleteNum;
+
+    @ApiModelProperty(value = "答题红包数")
+    private Long redPacketCount;
+
+    @ApiModelProperty(value = "答题红包金额")
+    private BigDecimal redPacketAmount;
+
+    @ApiModelProperty(value = "正确答题数")
+    private Long correctAnswerNum;
+
+}

+ 10 - 2
fs-service/src/main/java/com/fs/his/mapper/FsUserOperationLogMapper.java

@@ -4,7 +4,7 @@ import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.his.domain.FsUserOperationLog;
 import com.fs.his.param.FsUserOperationLogQueryParam;
-import com.fs.his.vo.FsUserOperationLogPageVo;
+import com.fs.his.vo.FsUserOperationLogVo;
 
 /**
  * 用户操作日志Mapper接口
@@ -19,7 +19,7 @@ public interface FsUserOperationLogMapper extends BaseMapper<FsUserOperationLog>
      * @param logId 用户操作日志主键
      * @return 用户操作日志
      */
-    FsUserOperationLog selectFsUserOperationLogByLogId(Long logId);
+    FsUserOperationLogVo selectFsUserOperationLogByLogId(Long logId);
 
     /**
      * 查询用户操作日志列表
@@ -29,6 +29,14 @@ public interface FsUserOperationLogMapper extends BaseMapper<FsUserOperationLog>
      */
     List<FsUserOperationLog> selectFsUserOperationLogList(FsUserOperationLogQueryParam fsUserOperationLog);
 
+    /**
+     * 查询用户操作日志列表
+     *
+     * @param fsUserOperationLog 用户操作日志
+     * @return 用户操作日志集合
+     */
+    List<FsUserOperationLogVo> selectFsUserOperationLogByList(FsUserOperationLog fsUserOperationLog);
+
     /**
      * 新增用户操作日志
      *

+ 4 - 1
fs-service/src/main/java/com/fs/his/service/IFsUserOperationLogService.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.his.domain.FsUserOperationLog;
 import com.fs.his.param.FsUserOperationLogQueryParam;
 import com.fs.his.vo.FsUserOperationLogPageVo;
+import com.fs.his.vo.FsUserOperationLogVo;
 
 /**
  * 用户操作日志Service接口
@@ -19,7 +20,7 @@ public interface IFsUserOperationLogService extends IService<FsUserOperationLog>
      * @param logId 用户操作日志主键
      * @return 用户操作日志
      */
-    FsUserOperationLog selectFsUserOperationLogByLogId(Long logId);
+    FsUserOperationLogVo selectFsUserOperationLogByLogId(Long logId);
 
     /**
      * 查询用户操作日志列表
@@ -60,4 +61,6 @@ public interface IFsUserOperationLogService extends IService<FsUserOperationLog>
      * @return 结果
      */
     int deleteFsUserOperationLogByLogId(Long logId);
+
+    List<FsUserOperationLogVo> selectFsUserOperationLogByList(FsUserOperationLog fsUserOperationLog);
 }

+ 23 - 2
fs-service/src/main/java/com/fs/his/service/impl/FsUserOperationLogServiceImpl.java

@@ -3,13 +3,18 @@ package com.fs.his.service.impl;
 import java.util.ArrayList;
 import java.util.List;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.fs.common.utils.DateUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fs.common.utils.StringUtils;
+import com.fs.course.domain.FsCourseRedPacketLog;
+import com.fs.course.mapper.FsCourseRedPacketLogMapper;
 import com.fs.course.vo.FsUserCourseVO;
 import com.fs.his.param.FsUserOperationLogQueryParam;
 import com.fs.his.vo.FsUserOperationLogPageVo;
+import com.fs.his.vo.FsUserOperationLogParamVo;
+import com.fs.his.vo.FsUserOperationLogVo;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -25,7 +30,8 @@ import com.fs.his.service.IFsUserOperationLogService;
  */
 @Service
 public class FsUserOperationLogServiceImpl extends ServiceImpl<FsUserOperationLogMapper, FsUserOperationLog> implements IFsUserOperationLogService {
-
+    @Autowired
+    private FsCourseRedPacketLogMapper fsCourseRedPacketLogMapper;
     /**
      * 查询用户操作日志
      *
@@ -33,7 +39,7 @@ public class FsUserOperationLogServiceImpl extends ServiceImpl<FsUserOperationLo
      * @return 用户操作日志
      */
     @Override
-    public FsUserOperationLog selectFsUserOperationLogByLogId(Long logId)
+    public FsUserOperationLogVo selectFsUserOperationLogByLogId(Long logId)
     {
         return baseMapper.selectFsUserOperationLogByLogId(logId);
     }
@@ -132,4 +138,19 @@ public class FsUserOperationLogServiceImpl extends ServiceImpl<FsUserOperationLo
     {
         return baseMapper.deleteFsUserOperationLogByLogId(logId);
     }
+
+    @Override
+    public List<FsUserOperationLogVo> selectFsUserOperationLogByList(FsUserOperationLog fsUserOperationLog) {
+        List<FsUserOperationLogVo> list = baseMapper.selectFsUserOperationLogByList(fsUserOperationLog);
+        list.forEach(e->{
+            FsUserOperationLogParamVo fsUserOperationLogParamVo = JSON.parseObject(e.getParam(), FsUserOperationLogParamVo.class);
+            e.setParamVo(fsUserOperationLogParamVo);
+            if (ObjectUtil.isEmpty(fsUserOperationLogParamVo)){
+                return;
+            }
+            FsCourseRedPacketLog fsCourseRedPacketLog = fsCourseRedPacketLogMapper.selectFsCourseRedPacketLogByTemporary(fsUserOperationLogParamVo.getVideoId(),e.getUserId());
+            e.setFsCourseRedPacketLog(fsCourseRedPacketLog);
+        });
+        return list;
+    }
 }

+ 19 - 0
fs-service/src/main/java/com/fs/his/vo/FsUserOperationLogParamVo.java

@@ -0,0 +1,19 @@
+package com.fs.his.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+/**
+ * 用户操作日志对象返回子参数
+ */
+@Data
+public class FsUserOperationLogParamVo {
+    private Integer courseId;
+    private String courseName;
+    private Integer periodId;
+    private String periodName;
+    private String title;
+    private Integer trainingCampId;
+    private String trainingCampName;
+    private Long videoId;
+}

+ 19 - 0
fs-service/src/main/java/com/fs/his/vo/FsUserOperationLogVo.java

@@ -0,0 +1,19 @@
+package com.fs.his.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fs.common.annotation.Excel;
+import com.fs.course.domain.FsCourseRedPacketLog;
+import com.fs.course.vo.FsCourseRedPacketLogListPVO;
+import com.fs.his.domain.FsUserOperationLog;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 用户操作日志对象返回参数
+ */
+@Data
+public class FsUserOperationLogVo extends FsUserOperationLog{
+
+    public FsUserOperationLogParamVo paramVo;
+    public FsCourseRedPacketLog fsCourseRedPacketLog;
+}

+ 125 - 0
fs-service/src/main/resources/mapper/course/FsUserCoursePeriodMapper.xml

@@ -262,4 +262,129 @@
         </foreach>
     </select>
 
+
+    <select id="setlectCourseCompleteNum" resultType="java.lang.Long">
+        select
+        count(watch.log_id)
+        from
+        fs_user_course_training_camp camp
+        left join fs_user_course_period period on
+        camp.training_camp_id = period.training_camp_id
+        left join fs_course_watch_log watch on
+        period.period_id = watch.period_id
+        <where>
+            `period`.del_flag = '0' and watch.log_type &lt;&gt; 3
+            <if test="trainingCampId != null">and camp.training_camp_id = #{trainingCampId}</if>
+            <if test="userId != null">and watch.user_id = #{userId}</if>
+            <if test="periodId != null">and `period`.period_id = #{periodId}</if>
+        </where>
+    </select>
+
+
+    <select id="setlectCourseWatchNum" resultType="java.lang.Long">
+        select
+        sum(watch.duration)
+        from
+        fs_user_course_training_camp camp
+        left join fs_user_course_period period on
+        camp.training_camp_id = period.training_camp_id
+        left join fs_course_watch_log watch on
+        period.period_id = watch.period_id
+        <where>
+           `period`.del_flag = '0' and watch.log_type &lt;&gt; 3
+            <if test="trainingCampId != null">and camp.training_camp_id = #{trainingCampId}</if>
+            <if test="userId != null">and watch.user_id = #{userId}</if>
+            <if test="periodId != null">and `period`.period_id = #{periodId}</if>
+        </where>
+
+
+    </select>
+
+    <select id="setlectRedPacketCount" resultType="java.lang.Long">
+        select
+            count(packet.log_id)
+        from
+            fs_user_course_training_camp camp
+                left join fs_user_course_period period on
+                camp.training_camp_id = period.training_camp_id
+                left join fs_course_red_packet_log packet on
+                period.period_id = packet.period_id
+        <where>
+            `period`.del_flag = '0' and packet.status =1
+            <if test="trainingCampId != null">and camp.training_camp_id = #{trainingCampId}</if>
+            <if test="userId != null">and packet.user_id = #{userId}</if>
+            <if test="periodId != null">and `period`.period_id = #{periodId}</if>
+        </where>
+    </select>
+
+    <select id="setlectRedPacketAmount" resultType="java.math.BigDecimal">
+        select
+            sum(packet.amount)
+        from
+            fs_user_course_training_camp camp
+                left join fs_user_course_period period on
+                camp.training_camp_id = period.training_camp_id
+                left join fs_course_red_packet_log packet on
+                period.period_id = packet.period_id
+        <where>
+            `period`.del_flag = '0' and packet.status =1
+            <if test="trainingCampId != null">and camp.training_camp_id = #{trainingCampId}</if>
+            <if test="userId != null">and packet.user_id = #{userId}</if>
+            <if test="periodId != null">and `period`.period_id = #{periodId}</if>
+        </where>
+    </select>
+
+    <select id="setlectCorrectAnswerNum" resultType="java.lang.Long">
+        select
+            count(answer.log_id)
+        from
+            fs_user_course_training_camp camp
+                left join fs_user_course_period period on
+                camp.training_camp_id = period.training_camp_id
+                left join fs_course_answer_logs answer on
+                period.period_id = answer.period_id
+        <where>
+            `period`.del_flag = '0' and answer.is_right =1
+            <if test="trainingCampId != null">and camp.training_camp_id = #{trainingCampId}</if>
+            <if test="userId != null">and answer.user_id = #{userId}</if>
+            <if test="periodId != null">and `period`.period_id = #{periodId}</if>
+        </where>
+    </select>
+
+
+    <select id="selectFsPeriodlist" resultMap="FsUserCoursePeriodResult">
+        select
+        period.period_id,
+        period.period_name,
+        period.company_id,
+        period.training_camp_id,
+        period.create_time,
+        period.update_time,
+        period.course_style,
+        period.live_room_style,
+        period.red_packet_grant_method,
+        period.period_type,
+        period.period_starting_time,
+        period.period_end_time,
+        period.period_status,
+        period.view_start_time,
+        period.view_end_time,
+        period.last_join_time,
+        period.max_view_num,
+        period.course_logo,
+        period.open_comment_status,
+        period.del_flag
+        from
+        fs_user_course_period period
+        left join fs_course_watch_log watch on
+        period.period_id = watch.period_id
+        <where>
+            `period`.del_flag = '0' and watch.log_type &lt;&gt; 3
+            <if test="trainingCampId != null">and `period`.training_camp_id = #{trainingCampId}</if>
+            <if test="userId != null">and watch.user_id = #{userId}</if>
+            <if test="periodId != null">and `period`.period_id = #{periodId}</if>
+        </where>
+        group by
+        `period`.period_id
+    </select>
 </mapper>

+ 4 - 0
fs-service/src/main/resources/mapper/course/FsUserCourseTrainingCampMapper.xml

@@ -24,6 +24,10 @@
             <if test="params.companyId != null and params.companyId != ''">
                 and ctp.company_id like concat('%',#{params.companyId},'%')
             </if>
+
+            <if test="params.userId != null and params.userId != ''">
+                and cu.user_id = #{params.userId}
+            </if>
         </where>
         group by ctc.training_camp_id, ctc.training_camp_name, ctc.order_number
         order by

+ 11 - 0
fs-service/src/main/resources/mapper/his/FsUserOperationLogMapper.xml

@@ -27,6 +27,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         order by create_time desc
     </select>
 
+    <select id="selectFsUserOperationLogByList" parameterType="FsUserOperationLog" resultType="com.fs.his.vo.FsUserOperationLogVo">
+        <include refid="selectFsUserOperationLogVo"/>
+        <where>
+            <if test="userId != null "> and user_id = #{userId}</if>
+            <if test="operationType != null  and operationType != ''"> and operation_type = #{operationType}</if>
+            <if test="details != null  and details != ''"> and details = #{details}</if>
+        </where>
+        order by create_time desc
+    </select>
+
+
     <select id="selectFsUserOperationLogByLogId" parameterType="Long" resultMap="FsUserOperationLogResult">
         <include refid="selectFsUserOperationLogVo"/>
         where log_id = #{logId}