瀏覽代碼

Merge branch 'refs/heads/master' into master_feat_job_20250507

xdd 1 月之前
父節點
當前提交
7aef18be45
共有 21 個文件被更改,包括 333 次插入32 次删除
  1. 15 0
      fs-admin/src/main/java/com/fs/course/controller/FsUserCoursePeriodController.java
  2. 29 0
      fs-admin/src/main/java/com/fs/task/period/PeriodTask.java
  3. 10 1
      fs-common/src/main/java/com/fs/common/utils/date/DateUtil.java
  4. 1 1
      fs-qw-task/src/main/java/com/fs/app/taskService/impl/SopLogsTaskServiceImpl.java
  5. 12 1
      fs-service-system/src/main/java/com/fs/course/domain/FsUserCoursePeriodDays.java
  6. 12 0
      fs-service-system/src/main/java/com/fs/course/mapper/FsUserCoursePeriodDaysMapper.java
  7. 16 0
      fs-service-system/src/main/java/com/fs/course/mapper/FsUserCoursePeriodMapper.java
  8. 7 0
      fs-service-system/src/main/java/com/fs/course/param/newfs/FsUserCourseVideoLinkParam.java
  9. 8 0
      fs-service-system/src/main/java/com/fs/course/service/IFsUserCoursePeriodDaysService.java
  10. 13 1
      fs-service-system/src/main/java/com/fs/course/service/IFsUserCoursePeriodService.java
  11. 7 6
      fs-service-system/src/main/java/com/fs/course/service/impl/FsCourseQuestionBankServiceImpl.java
  12. 46 9
      fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCoursePeriodDaysServiceImpl.java
  13. 63 7
      fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCoursePeriodServiceImpl.java
  14. 42 0
      fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java
  15. 19 0
      fs-service-system/src/main/java/com/fs/course/vo/UpdateCourseTimeVo.java
  16. 8 1
      fs-service-system/src/main/java/com/fs/course/vo/newfs/FsUserCourseVideoLinkDetailsVO.java
  17. 3 0
      fs-service-system/src/main/java/com/fs/course/vo/newfs/FsUserCourseVideoPageListVO.java
  18. 3 1
      fs-service-system/src/main/java/com/fs/sop/service/impl/CompanySopRoleServiceImpl.java
  19. 16 2
      fs-service-system/src/main/resources/mapper/course/FsUserCoursePeriodDaysMapper.xml
  20. 1 1
      fs-service-system/src/main/resources/mapper/course/FsUserCourseTrainingCampMapper.xml
  21. 2 1
      fs-service-system/src/main/resources/mapper/course/FsUserCourseVideoMapper.xml

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

@@ -19,6 +19,7 @@ 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.his.vo.OptionsVO;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
@@ -142,6 +143,14 @@ public class FsUserCoursePeriodController extends BaseController {
     public R addCourse(@RequestBody FsUserCoursePeriodDays entity){
         return fsUserCoursePeriodDaysService.addCourse(entity);
     }
+    @PostMapping("/updateCourseTime")
+    public R updateCourseTime(@RequestBody UpdateCourseTimeVo vo){
+        return fsUserCoursePeriodDaysService.updateCourseTime(vo);
+    }
+    @PostMapping("/updateCourseDate")
+    public R updateCourseDate(@RequestBody UpdateCourseTimeVo vo){
+        return fsUserCoursePeriodDaysService.updateCourseDate(vo);
+    }
     @PostMapping("/updateListCourseData")
     public R updateListCourseData(@RequestBody List<FsUserCoursePeriodDays> entity){
         return fsUserCoursePeriodDaysService.updateListCourseData(entity);
@@ -217,5 +226,11 @@ public class FsUserCoursePeriodController extends BaseController {
         return fsUserCoursePeriodDaysService.periodCourseMove(id, targetId);
     }
 
+    @ApiOperation("结束营期")
+    @PostMapping("/closePeriod")
+    public R closePeriod(Long id) {
+        fsUserCoursePeriodService.closePeriod(id);
+        return R.ok();
+    }
 
 }

+ 29 - 0
fs-admin/src/main/java/com/fs/task/period/PeriodTask.java

@@ -0,0 +1,29 @@
+package com.fs.task.period;
+
+import com.fs.course.service.IFsUserCoursePeriodDaysService;
+import com.fs.course.service.IFsUserCoursePeriodService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component("periodTask")
+public class PeriodTask {
+
+    @Autowired
+    private IFsUserCoursePeriodService userCoursePeriodService;
+    @Autowired
+    private IFsUserCoursePeriodDaysService userCoursePeriodDaysService;
+
+    /**
+     * 更新营期状态
+     */
+    public void refreshPeriod() {
+        userCoursePeriodService.changePeriodStatus();
+    }
+
+    /**
+     * 更新营期课程状态
+     */
+    public void refreshPeriodDays() {
+        userCoursePeriodDaysService.changePeriodCourseStatus();
+    }
+}

+ 10 - 1
fs-common/src/main/java/com/fs/common/utils/date/DateUtil.java

@@ -493,5 +493,14 @@ public final class DateUtil {
 		return itemEdate;
 	}
 
-
+	public static boolean isWithinRangeSafe(LocalDate targetDate, LocalDate startDate, LocalDate endDate) {
+		LocalDate actualStart = startDate.isBefore(endDate) ? startDate : endDate;
+		LocalDate actualEnd = startDate.isBefore(endDate) ? endDate : startDate;
+		return !targetDate.isBefore(actualStart) && !targetDate.isAfter(actualEnd);
+	}
+	public static boolean isWithinRangeSafe(LocalDateTime targetDate, LocalDateTime startDate, LocalDateTime endDate) {
+		LocalDateTime actualStart = startDate.isBefore(endDate) ? startDate : endDate;
+		LocalDateTime actualEnd = startDate.isBefore(endDate) ? endDate : startDate;
+		return !targetDate.isBefore(actualStart) && !targetDate.isAfter(actualEnd);
+	}
 }

+ 1 - 1
fs-qw-task/src/main/java/com/fs/app/taskService/impl/SopLogsTaskServiceImpl.java

@@ -676,7 +676,7 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
                 groupChat.getChatUserList().forEach(user -> {
                     ruleTimeVO.setSendType(2);
                     ruleTimeVO.setRemark("客户群催课");
-                    QwSopLogs sopLogs = createBaseLog(formattedSendTime, logVo, ruleTimeVO, user.getId().toString(), user.getName(), null);
+                    QwSopLogs sopLogs = createBaseLog(formattedSendTime, logVo, ruleTimeVO, user.getUserId(), user.getName(), null);
                     handleLogBasedOnType(sopLogs, content, logVo, sendTime, courseId, videoId,
                             type, qwUserId, companyUserId, companyId, user.getId().toString(), welcomeText, qwUserName, null, false);
                 });

+ 12 - 1
fs-service-system/src/main/java/com/fs/course/domain/FsUserCoursePeriodDays.java

@@ -3,6 +3,7 @@ package com.fs.course.domain;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.util.Date;
 import java.util.List;
 
@@ -47,11 +48,15 @@ public class FsUserCoursePeriodDays extends BaseEntityTow {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime startDateTime;
-
     /** 结束时间 */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime endDateTime;
+    /** 领取红包时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "领取红包时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime lastJoinTime;
+
 
     /** 课程ID */
     @Excel(name = "课程ID")
@@ -75,4 +80,10 @@ public class FsUserCoursePeriodDays extends BaseEntityTow {
     private String courseName;
     @TableField(exist = false)
     private String videoName;
+    @TableField(exist = false)
+    private LocalTime startTime;
+    @TableField(exist = false)
+    private LocalTime endTime1;
+    @TableField(exist = false)
+    private LocalTime joinTime;
 }

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

@@ -5,6 +5,7 @@ import com.fs.course.domain.FsUserCoursePeriodDays;
 import com.fs.his.vo.OptionsVO;
 import org.apache.ibatis.annotations.Param;
 
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -83,4 +84,15 @@ public interface FsUserCoursePeriodDaysMapper extends BaseMapper<FsUserCoursePer
      */
     void batchUpdateCoursePeriodDays(List<FsUserCoursePeriodDays> fsUserCoursePeriodDaysList);
 
+    /**
+     * 开启课程
+     * @param now  时间
+     */
+    void startPeriodCourse(@Param("now") LocalDateTime now);
+
+    /**
+     * 关闭课程
+     * @param now  时间
+     */
+    void endPeriodCourse(@Param("now") LocalDateTime now);
 }

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

@@ -6,7 +6,9 @@ import com.fs.course.vo.FsUserCoursePeriodVO;
 import com.fs.course.vo.PeriodRedPacketVO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
 
+import java.time.LocalDate;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -111,4 +113,18 @@ public interface FsUserCoursePeriodMapper
      * @return  count
      */
     int countPeriodByCampIds(@Param("params") Map<String, Object> params);
+
+    /**
+     * 开营
+     * @param now   当前日期
+     */
+    @Update("update fs_user_course_period set period_status = 2, update_time = now() where period_status = 1 and period_starting_time >= #{now}")
+    void startPeriod(@Param("now") LocalDate now);
+
+    /**
+     * 关营
+     * @param now   当前日期
+     */
+    @Update("update fs_user_course_period set period_status = 3, update_time = now() where period_status = 2 and period_end_time < #{now}")
+    void endPeriod(@Param("now") LocalDate now);
 }

+ 7 - 0
fs-service-system/src/main/java/com/fs/course/param/newfs/FsUserCourseVideoLinkParam.java

@@ -24,4 +24,11 @@ public class FsUserCourseVideoLinkParam implements Serializable {
     @NotNull(message = "销售id不能为空")
     @ApiModelProperty(value = "销售id")
     private Long companyUserId;
+
+    @ApiModelProperty(value = "营期课程ID")
+    private Long id;
+
+    @ApiModelProperty(value = "营期id")
+    private Long periodId;
+
 }

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

@@ -7,6 +7,7 @@ import com.fs.course.param.CompanyRedPacketParam;
 import com.fs.course.param.PeriodCountParam;
 import com.fs.course.vo.FsPeriodCountVO;
 import com.fs.course.vo.PeriodRedPacketVO;
+import com.fs.course.vo.UpdateCourseTimeVo;
 import com.fs.his.vo.OptionsVO;
 
 import java.util.List;
@@ -109,4 +110,11 @@ public interface IFsUserCoursePeriodDaysService extends IService<FsUserCoursePer
      */
     R periodCourseMove(Long id, Long targetId);
 
+    R updateCourseTime(UpdateCourseTimeVo vo);
+
+    R updateCourseDate(UpdateCourseTimeVo vo);
+    /**
+     * 更新营期课程状态
+     */
+    void changePeriodCourseStatus();
 }

+ 13 - 1
fs-service-system/src/main/java/com/fs/course/service/IFsUserCoursePeriodService.java

@@ -1,9 +1,10 @@
 package com.fs.course.service;
 
-import java.util.List;
 import com.fs.course.domain.FsUserCoursePeriod;
 import com.fs.course.vo.FsUserCoursePeriodVO;
 
+import java.util.List;
+
 /**
  * 会员营期Service接口
  *
@@ -66,4 +67,15 @@ public interface IFsUserCoursePeriodService
      * @return vo
      */
     List<FsUserCoursePeriodVO> selectFsUserCoursePeriodPage(FsUserCoursePeriod fsUserCoursePeriod);
+
+    /**
+     * 结束营期
+     * @param id    营期ID
+     */
+    void closePeriod(Long id);
+
+    /**
+     * 更新营期状态
+     */
+    void changePeriodStatus();
 }

+ 7 - 6
fs-service-system/src/main/java/com/fs/course/service/impl/FsCourseQuestionBankServiceImpl.java

@@ -148,7 +148,8 @@ public class FsCourseQuestionBankServiceImpl implements IFsCourseQuestionBankSer
         //日志id
         Long logId = null;
 
-        FsCourseAnswerLogs rightLog = new FsCourseAnswerLogs();
+        new FsCourseAnswerLogs();
+        FsCourseAnswerLogs rightLog;
         //判断短链类型
         if (param.getLinkType()!=null&&param.getLinkType()==1){
             rightLog = courseAnswerLogsMapper.selectRightLogByCourseVideo(param.getVideoId(), param.getUserId(),null);
@@ -174,11 +175,11 @@ public class FsCourseQuestionBankServiceImpl implements IFsCourseQuestionBankSer
 
             rightLog = courseAnswerLogsMapper.selectRightLogByCourseVideo(param.getVideoId(), param.getUserId(), param.getQwUserId());
             if (rightLog != null) {
-                if (log.getRewardType() != null) {
-                    return R.error("该课程已答题完成,不可重复答题");
-                } else {
-                    return R.ok("答题成功");
-                }
+//                if (log.getRewardType() != null) {
+//                    return R.error("该课程已答题完成,不可重复答题");
+//                } else {
+//                }
+                return R.error("该课程已答题完成,不可重复答题");
             }
             errorCount = courseAnswerLogsMapper.selectErrorCountByCourseVideo(param.getVideoId(), param.getUserId(),param.getQwUserId());
         }

+ 46 - 9
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCoursePeriodDaysServiceImpl.java

@@ -1,14 +1,5 @@
 package com.fs.course.service.impl;
 
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.sql.Wrapper;
-import java.time.LocalDate;
-import java.util.*;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fs.common.core.domain.R;
@@ -24,6 +15,7 @@ import com.fs.course.param.PeriodCountParam;
 import com.fs.course.service.IFsUserCoursePeriodDaysService;
 import com.fs.course.vo.FsPeriodCountVO;
 import com.fs.course.vo.PeriodRedPacketVO;
+import com.fs.course.vo.UpdateCourseTimeVo;
 import com.fs.course.vo.newfs.FsCourseAnalysisCountVO;
 import com.fs.his.vo.OptionsVO;
 import com.fs.store.mapper.FsUserMapper;
@@ -32,9 +24,13 @@ import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -153,6 +149,9 @@ public class FsUserCoursePeriodDaysServiceImpl extends ServiceImpl<FsUserCourseP
             day.setLesson(dayList.size() + i.getAndIncrement());
             day.setDayDate(period.getPeriodStartingTime().plusDays(day.getLesson()));
             day.setCourseId(entity.getCourseId());
+            day.setStartDateTime(LocalDateTime.of(day.getDayDate(), entity.getStartTime()));
+            day.setEndDateTime(LocalDateTime.of(day.getDayDate(), entity.getEndTime1()));
+            day.setLastJoinTime(LocalDateTime.of(day.getDayDate(), entity.getJoinTime()));
             day.setVideoId(e);
             day.setCreateTime(new Date());
             // 默认开启今天及以后的两天
@@ -271,6 +270,44 @@ public class FsUserCoursePeriodDaysServiceImpl extends ServiceImpl<FsUserCourseP
         return R.ok();
     }
 
+    @Override
+    public R updateCourseTime(UpdateCourseTimeVo vo) {
+        List<FsUserCoursePeriodDays> list = fsUserCoursePeriodDaysMapper.selectBatchIds(vo.getIds());
+        list.forEach(day -> {
+            day.setStartDateTime(LocalDateTime.of(day.getDayDate(), vo.getStartTime()));
+            day.setEndDateTime(LocalDateTime.of(day.getDayDate(), vo.getEndTime1()));
+            day.setLastJoinTime(LocalDateTime.of(day.getDayDate(), vo.getJoinTime()));
+            fsUserCoursePeriodDaysMapper.updateById(day);
+        });
+        return R.ok();
+    }
+
+    @Override
+    public R updateCourseDate(UpdateCourseTimeVo vo) {
+        FsUserCoursePeriodDays day = getById(vo.getId());
+        FsUserCoursePeriod period = fsUserCoursePeriodMapper.selectFsUserCoursePeriodById(day.getPeriodId());
+        if(!DateUtil.isWithinRangeSafe(vo.getDayDate(), period.getPeriodStartingTime(), period.getPeriodEndTime())) return R.error("时间不在营期范围内");
+        day.setDayDate(vo.getDayDate());
+        day.setStartDateTime(LocalDateTime.of(day.getDayDate(), day.getStartDateTime().toLocalTime()));
+        day.setEndDateTime(LocalDateTime.of(day.getDayDate(), day.getEndDateTime().toLocalTime()));
+        day.setLastJoinTime(LocalDateTime.of(day.getDayDate(), day.getLastJoinTime().toLocalTime()));
+        updateById(day);
+        return R.ok();
+    }
+
+    /**
+     * 更新营期课程状态
+     */
+    @Transactional(rollbackFor = RuntimeException.class)
+    @Override
+    public void changePeriodCourseStatus() {
+        // 开启
+        fsUserCoursePeriodDaysMapper.startPeriodCourse(LocalDateTime.now());
+
+        // 关闭
+        fsUserCoursePeriodDaysMapper.endPeriodCourse(LocalDateTime.now());
+    }
+
     private static FsCourseAnalysisCountVO getCourseAnalysisCountVO(FsUserCoursePeriodDays v, Map<Long, FsCourseAnalysisCountVO> courseMap, Map<Long, FsCourseAnalysisCountVO> redPacketMap, Map<Long, FsCourseAnalysisCountVO> answerMap) {
         FsCourseAnalysisCountVO countVO = new FsCourseAnalysisCountVO();
         FsCourseAnalysisCountVO courseVO = courseMap.getOrDefault(v.getVideoId(), countVO);

+ 63 - 7
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCoursePeriodServiceImpl.java

@@ -1,15 +1,23 @@
 package com.fs.course.service.impl;
 
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.util.List;
-import com.fs.common.utils.DateUtils;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fs.common.exception.ServiceException;
+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.service.IFsUserCoursePeriodService;
 import com.fs.course.vo.FsUserCoursePeriodVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.fs.course.mapper.FsUserCoursePeriodMapper;
-import com.fs.course.domain.FsUserCoursePeriod;
-import com.fs.course.service.IFsUserCoursePeriodService;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Objects;
 
 /**
  * 会员营期Service业务层处理
@@ -22,6 +30,8 @@ public class FsUserCoursePeriodServiceImpl implements IFsUserCoursePeriodService
 {
     @Autowired
     private FsUserCoursePeriodMapper fsUserCoursePeriodMapper;
+    @Resource
+    private FsUserCoursePeriodDaysMapper fsUserCoursePeriodDaysMapper;
 
     /**
      * 查询会员营期
@@ -109,4 +119,50 @@ public class FsUserCoursePeriodServiceImpl implements IFsUserCoursePeriodService
     public List<FsUserCoursePeriodVO> selectFsUserCoursePeriodPage(FsUserCoursePeriod fsUserCoursePeriod) {
         return fsUserCoursePeriodMapper.selectFsUserCoursePeriodPage(fsUserCoursePeriod);
     }
+
+    /**
+     * 结束营期
+     * @param id    营期ID
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void closePeriod(Long id) {
+        // 修改营期结束时间
+        FsUserCoursePeriod fsUserCoursePeriod = fsUserCoursePeriodMapper.selectFsUserCoursePeriodById(id);
+        if (Objects.isNull(fsUserCoursePeriod)) {
+            throw new ServiceException("结束营期失败:营期不存在");
+        }
+
+        if (fsUserCoursePeriod.getPeriodStatus() == 1) {
+            throw new ServiceException("结束营期失败:营期未开始不能进行结束操作!");
+        }
+
+        if (fsUserCoursePeriod.getPeriodStatus() == 3) {
+            throw new ServiceException("结束营期失败:营期已结束不能进行结束操作!");
+        }
+
+        fsUserCoursePeriod.setPeriodEndTime(LocalDate.now());
+        fsUserCoursePeriodMapper.updateFsUserCoursePeriod(fsUserCoursePeriod);
+
+        // 修改大于当前时间的课程状态
+        Wrapper<FsUserCoursePeriodDays> updateWrapper = Wrappers.<FsUserCoursePeriodDays>lambdaUpdate()
+        .set(FsUserCoursePeriodDays::getStatus, 2)
+        .eq(FsUserCoursePeriodDays::getPeriodId, fsUserCoursePeriod.getPeriodId())
+        .eq(FsUserCoursePeriodDays::getStatus, 0)
+        .gt(FsUserCoursePeriodDays::getDayDate, LocalDate.now());
+        fsUserCoursePeriodDaysMapper.update(null, updateWrapper);
+    }
+
+    /**
+     * 更新营期状态
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void changePeriodStatus() {
+        // 开营
+        fsUserCoursePeriodMapper.startPeriod(LocalDate.now());
+
+        // 关营
+        fsUserCoursePeriodMapper.endPeriod(LocalDate.now());
+    }
 }

+ 42 - 0
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -9,6 +9,7 @@ import com.fs.common.core.domain.ResponseResult;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
+import com.fs.common.utils.date.DateUtil;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.mapper.CompanyUserMapper;
 import com.fs.course.config.CourseConfig;
@@ -57,6 +58,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
@@ -135,6 +137,12 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
     @Autowired
     private FsUserCourseMapper fsUserCourseMapper;
 
+    @Autowired
+    private FsUserCoursePeriodMapper fsUserCoursePeriodMapper;
+
+    @Autowired
+    private FsUserCoursePeriodDaysMapper fsUserCoursePeriodDaysMapper;
+
     /**
      * 查询课堂视频
      *
@@ -728,6 +736,20 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
      * @return 处理结果
      */
     private R sendRedPacketReward(FsCourseSendRewardUParam param, FsUser user, FsCourseWatchLog log, FsUserCourseVideo video, CourseConfig config) {
+        // 判断是否属于领取红包时间(会员看课发放红包)
+        FsUserCoursePeriodDays periodDays = new FsUserCoursePeriodDays();
+        periodDays.setVideoId(param.getVideoId());
+        periodDays.setPeriodId(param.getPeriodId());
+        //正常情况是只能查询到一条,之前可能存在重复的脏数据,暂使用查询list的方式
+        List<FsUserCoursePeriodDays> fsUserCoursePeriodDays = fsUserCoursePeriodDaysMapper.selectFsUserCoursePeriodDaysList(periodDays);
+        if(fsUserCoursePeriodDays != null && !fsUserCoursePeriodDays.isEmpty()){
+            periodDays = fsUserCoursePeriodDays.get(0);
+        }
+
+        if(periodDays != null && periodDays.getLastJoinTime() !=null && LocalDateTime.now().isAfter(periodDays.getLastJoinTime())) {
+            R.error(403,"已超过领取红包时间");
+        }
+
         // 确定红包金额
         BigDecimal amount = BigDecimal.ZERO;
         FsUserCourseVideoRedPackage redPackage = fsUserCourseVideoRedPackageMapper.selectRedPacketByCompanyId(param.getVideoId(), param.getCompanyId(), param.getPeriodId());
@@ -774,6 +796,7 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
             redPacketLog.setCreateTime(new Date());
             redPacketLog.setAmount(amount);
             redPacketLog.setWatchLogId(log.getLogId() != null ? log.getLogId() : null);
+            redPacketLog.setPeriodId(param.getPeriodId());
             redPacketLogMapper.insertFsCourseRedPacketLog(redPacketLog);
 
             // 更新观看记录的奖励类型
@@ -954,6 +977,19 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
 
     @Override
     public ResponseResult<FsUserCourseVideoLinkDetailsVO> getLinkCourseVideoDetails(FsUserCourseVideoLinkParam param) {
+        //判断营期的课程状态是否是进行中
+        FsUserCoursePeriodDays periodDays = new FsUserCoursePeriodDays();
+        periodDays.setVideoId(param.getVideoId());
+        periodDays.setPeriodId(param.getPeriodId());
+        //正常情况是只能查询到一条,之前可能存在重复的脏数据,暂使用查询list的方式
+        List<FsUserCoursePeriodDays> fsUserCoursePeriodDays = fsUserCoursePeriodDaysMapper.selectFsUserCoursePeriodDaysList(periodDays);
+        if(fsUserCoursePeriodDays != null && !fsUserCoursePeriodDays.isEmpty()){
+            periodDays = fsUserCoursePeriodDays.get(0);
+        }
+        if(periodDays.getStatus() != 1){
+            ResponseResult.fail(403, "当前课程未开始或已结束,暂不能看课");
+        }
+
         String json = configService.selectConfigByKey("course.config");
         CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
 
@@ -1002,6 +1038,12 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         }
         vo.setIsFinish(isFinish);
         vo.setPlayDuration(duration);
+        if(param.getId() != null){
+            FsUserCoursePeriodDays days = fsUserCoursePeriodDaysMapper.selectById(param.getId());
+            vo.setStartDateTime(days.getStartDateTime());
+            vo.setEndDateTime(days.getEndDateTime());
+            vo.setRang(DateUtil.isWithinRangeSafe(LocalDateTime.now(), days.getStartDateTime(), days.getEndDateTime()));
+        }
         return ResponseResult.ok(vo);
     }
 

+ 19 - 0
fs-service-system/src/main/java/com/fs/course/vo/UpdateCourseTimeVo.java

@@ -0,0 +1,19 @@
+package com.fs.course.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalTime;
+import java.util.List;
+
+@Data
+public class UpdateCourseTimeVo {
+
+    private List<Long> ids;
+    private Long id;
+    private LocalTime startTime;
+    private LocalTime endTime1;
+    private LocalTime joinTime;
+    private LocalDate dayDate;
+}

+ 8 - 1
fs-service-system/src/main/java/com/fs/course/vo/newfs/FsUserCourseVideoLinkDetailsVO.java

@@ -1,10 +1,13 @@
 package com.fs.course.vo.newfs;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fs.course.config.CourseConfig;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.time.LocalDateTime;
+
 @Data
 @ApiModel
 public class FsUserCourseVideoLinkDetailsVO {
@@ -20,5 +23,9 @@ public class FsUserCourseVideoLinkDetailsVO {
 
     @ApiModelProperty(value = "看课时长")
     private Long playDuration;
-
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime startDateTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime endDateTime;
+    private boolean isRang;
 }

+ 3 - 0
fs-service-system/src/main/java/com/fs/course/vo/newfs/FsUserCourseVideoPageListVO.java

@@ -46,5 +46,8 @@ public class FsUserCourseVideoPageListVO extends BaseEntity {
     @ApiModelProperty(value = "营期id")
     private Long periodId;
 
+    @ApiModelProperty(value = "营期课程ID")
+    private Long id;
+
 
 }

+ 3 - 1
fs-service-system/src/main/java/com/fs/sop/service/impl/CompanySopRoleServiceImpl.java

@@ -51,7 +51,9 @@ public class CompanySopRoleServiceImpl extends ServiceImpl<CompanySopRoleMapper,
      */
     @Override
     public List<Company> selectCompanySopRoleList(CompanySopRole companySopRole){
-        List<Company> companyList = companyService.selectCompanyList(new Company());
+        Company company = new Company();
+        company.setIsDel(0);
+        List<Company> companyList = companyService.selectCompanyList(company);
         List<Long> companyIdList = PubFun.listToNewList(companyList, Company::getCompanyId);
         companySopRole.setCompanyIds(companyIdList);
         List<CompanySopRole> roleList = baseMapper.selectCompanySopRoleList(companySopRole);

+ 16 - 2
fs-service-system/src/main/resources/mapper/course/FsUserCoursePeriodDaysMapper.xml

@@ -31,8 +31,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         inner join fs_user_course_video c on a.video_id = c.video_id
         <where>
             <if test="periodId != null "> and period_id = #{periodId}</if>
-            <if test="courseId != null "> and course_id = #{courseId}</if>
-            <if test="videoId != null "> and video_id = #{videoId}</if>
+            <if test="courseId != null "> and a.course_id = #{courseId}</if>
+            <if test="videoId != null "> and a.video_id = #{videoId}</if>
             <if test="videoIds != null and videoIds.size > 0">
                 and a.video_id in
                 <foreach collection="videoIds" open="(" close=")" separator="," item="videoId">
@@ -157,4 +157,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{item.id}
         </foreach>
     </update>
+
+    <update id="startPeriodCourse">
+        update fs_user_course_period_days ucpd
+        set ucpd.status = 1, ucpd.update_time = #{now}
+        where ucpd.status = 0 and ucpd.start_date_time >= #{now}
+    </update>
+
+    <update id="endPeriodCourse">
+        update fs_user_course_period_days ucpd
+        set ucpd.status = 2, ucpd.update_time = #{now}
+        <![CDATA[
+        where ucpd.status = 1 and ucpd.end_date_time < #{now}
+        ]]>
+    </update>
 </mapper>

+ 1 - 1
fs-service-system/src/main/resources/mapper/course/FsUserCourseTrainingCampMapper.xml

@@ -10,7 +10,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             ctc.training_camp_id,
             ctc.training_camp_name,
             ctc.order_number,
-            min(if(ctp.period_starting_time > now(), ctp.period_starting_time, null)) as recent_date,
+            min(if(ctp.period_starting_time >= CURDATE(), ctp.period_starting_time, null)) as recent_date,
             count(distinct ctp.period_id) as period_count,
             count(distinct cu.user_id)  as vip_count
         from fs_user_course_training_camp ctc

+ 2 - 1
fs-service-system/src/main/resources/mapper/course/FsUserCourseVideoMapper.xml

@@ -237,7 +237,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             video.STATUS,
             video.course_sort,
             course.course_name,
-            fcpd.period_id
+            fcpd.period_id,
+            fcpd.id
         FROM `fs_user_course_video` video
         left join fs_user_course_period_days fcpd on fcpd.video_id = video.video_id
         left join fs_user_course_period fcp on fcp.period_id = fcpd.period_id