Kaynağa Gözat

关闭营期、营期状态刷新、营期课程状态刷新

Long 1 ay önce
ebeveyn
işleme
8b3ae38628

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

@@ -226,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();
+    }
+}

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

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

+ 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);
 }

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

@@ -113,4 +113,8 @@ public interface IFsUserCoursePeriodDaysService extends IService<FsUserCoursePer
     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();
 }

+ 18 - 10
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCoursePeriodDaysServiceImpl.java

@@ -1,15 +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.time.LocalDateTime;
-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;
@@ -34,9 +24,14 @@ 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.time.LocalTime;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -301,6 +296,19 @@ public class FsUserCoursePeriodDaysServiceImpl extends ServiceImpl<FsUserCourseP
         return R.ok();
     }
 
+    /**
+     * 更新营期课程状态
+     */
+    @Transactional(rollbackFor = RuntimeException.class)
+    @Override
+    public void changePeriodCourseStatus() {
+        // 开启
+        fsUserCoursePeriodDaysMapper.startPeriodCourse(LocalDate.now(), LocalTime.now());
+
+        // 关闭
+        fsUserCoursePeriodDaysMapper.endPeriodCourse(LocalDate.now(), LocalTime.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());
+    }
 }

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

@@ -157,4 +157,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{item.id}
         </foreach>
     </update>
+
+    <update id="startPeriodCourse">
+        update fs_user_course_period_days ucpd
+        left join fs_user_course_period ucp on ucp.period_id = ucpd.period_id
+        set ucpd.status = 1, ucpd.update_time = now()
+        where ucpd.status = 0 and ucpd.day_date = #{date} and ucp.view_start_time >= #{time}
+    </update>
+
+    <update id="endPeriodCourse">
+        update fs_user_course_period_days ucpd
+        left join fs_user_course_period ucp on ucp.period_id = ucpd.period_id
+        set ucpd.status = 2, ucpd.update_time = now()
+        <![CDATA[
+        where ucpd.status = 1 and (ucpd.day_date > #{date} or ucp.view_end_time < #{time})
+        ]]>
+    </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