소스 검색

北京纯正:新增营期复制功能

liupeng 16 시간 전
부모
커밋
3c2b1a5a82

+ 8 - 1
fs-admin/src/main/java/com/fs/course/controller/FsUserCoursePeriodController.java

@@ -164,7 +164,7 @@ public class FsUserCoursePeriodController extends BaseController {
     @ApiOperation("一键批量添加课程小节")
     public R batchAddCourseSections(@Validated @RequestBody BatchAddCourseSectionParam param) {
         try {
-            logger.info("开始批量添加课程小节,营期ID:{},课程ID:{},视频数量:{},视频ID列表:{}", 
+            logger.info("开始批量添加课程小节,营期ID:{},课程ID:{},视频数量:{},视频ID列表:{}",
                 param.getPeriodId(), param.getCourseId(), param.getVideoIds().size(), param.getVideoIds());
             return fsUserCoursePeriodDaysService.batchAddCourseSections(param);
         } catch (Exception e) {
@@ -308,4 +308,11 @@ public class FsUserCoursePeriodController extends BaseController {
         return R.ok();
     }
 
+    @ApiOperation("复制创建成功的营期和对应营期中的看课")
+    @PostMapping("/copyExistCampPeriod")
+    public R copyExistCampPeriod(@RequestBody PeriodStatisticCountParam param){
+        R result = fsUserCoursePeriodService.copyFsUserCoursePeriodAndCourse(param);
+        return result;
+    }
+
 }

+ 62 - 4
fs-admin/src/main/java/com/fs/course/controller/FsUserCourseTrainingCampController.java

@@ -9,11 +9,15 @@ import com.fs.common.core.domain.model.LoginUser;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.SortUtils;
+import com.fs.common.utils.StringUtils;
 import com.fs.course.config.CourseConfig;
+import com.fs.course.domain.FsUserCoursePeriod;
 import com.fs.course.domain.FsUserCourseTrainingCamp;
 import com.fs.course.dto.FsUserCourseTrainingCampDTO;
 import com.fs.course.dto.FsUserCourseTrainingCampUpdateDTO;
+import com.fs.course.service.IFsUserCoursePeriodService;
 import com.fs.course.service.IFsUserCourseTrainingCampService;
+import com.fs.course.vo.FsUserCoursePeriodVO;
 import com.fs.course.vo.FsUserCourseTrainingCampVO;
 import com.fs.framework.web.service.TokenService;
 import com.fs.his.vo.OptionsVO;
@@ -25,10 +29,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 
 @RestController
 @RequestMapping("/course/trainingCamp")
@@ -39,6 +40,8 @@ public class FsUserCourseTrainingCampController {
     private final TokenService tokenService;
 
     private final ISysConfigService configService;
+    private final IFsUserCoursePeriodService fsUserCoursePeriodService;
+
     /**
      * 查询训练营列表
      */
@@ -147,4 +150,59 @@ public class FsUserCourseTrainingCampController {
         return R.ok().put("data", new PageInfo<>(campList));
     }
 
+
+    /**
+     * 通过训练营来筛选营期-展示创建成功的营期
+     *
+     * @return
+     */
+    @GetMapping("/getScreeningCampPeriod")
+    public R getScreeningCampPeriod(@RequestParam String campPeriodType,
+                                    @RequestParam(required = false) Long periodId,
+                                    @RequestParam(required = false) String campPeriodName) {
+        try {
+            // 获取用户和配置信息
+            LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+            Long userId = loginUser.getUser().getUserId();
+            CourseConfig config = getCourseConfig();
+            boolean needBindUser = config != null && config.getIsBound();
+            if ("2".equals(campPeriodType)) {
+                // 查询其他训练营
+                List<FsUserCoursePeriodVO> resultList = new ArrayList<>();
+                Map<String, Object> params = new HashMap<>();
+                params.put("scs", SortUtils.parseSort("order_number(desc),training_camp_id(desc)"));
+                if (needBindUser) params.put("userIds", userId);
+                List<FsUserCourseTrainingCampVO> fsUserCourseTrainingCampList= fsUserCourseTrainingCampService.selectFsUserCourseTrainingCampVOListByMap(params);
+                fsUserCourseTrainingCampList.stream().filter(camp -> !Objects.equals(camp.getTrainingCampId(), periodId))
+                        .forEach(camp -> {
+                            FsUserCoursePeriod query = new FsUserCoursePeriod();
+                            query.setTrainingCampId(camp.getTrainingCampId());
+                            List<FsUserCoursePeriodVO> periods = fsUserCoursePeriodService.selectFsUserCoursePeriodPage(query);
+                            if (periods != null && !periods.isEmpty()) {
+                                resultList.addAll(periods);
+                            }
+                        });
+                return R.ok().put("resultList", resultList);
+            } else if ("3".equals(campPeriodType)) {
+                // 新建训练营
+                if (StringUtils.isEmpty(campPeriodName)) {
+                    return R.error("训练营名称不能为空");
+                }
+                FsUserCourseTrainingCampDTO campDTO = new FsUserCourseTrainingCampDTO();
+                campDTO.setTrainingCampName(campPeriodName.trim());
+                return R.ok("训练营创建成功");
+            }
+            return R.error("不支持的训练营类型");
+        } catch (Exception e) {
+            return R.error("系统处理异常");
+        }
+    }
+    private CourseConfig getCourseConfig() {
+        try {
+            String json = configService.selectConfigByKey("course.config");
+            return JSONUtil.toBean(json, CourseConfig.class);
+        } catch (Exception e) {
+            return null;
+        }
+    }
 }

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

@@ -103,5 +103,5 @@ public interface IFsUserCoursePeriodService
     List<Long> selectFsUserCoursePeriodListByPeriodId(List<Long> periodIds,Long companyId);
 
     R insertFsUserCoursePeriodAndCourse(FsUserCoursePeriod fsUserCoursePeriod);
-
+    R copyFsUserCoursePeriodAndCourse(PeriodStatisticCountParam param);
 }

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

@@ -373,4 +373,39 @@ public class FsUserCoursePeriodServiceImpl implements IFsUserCoursePeriodService
     public List<Long> selectFsUserCoursePeriodListByPeriodId(List<Long> periodIds, Long companyId) {
         return fsUserCoursePeriodMapper.selectFsUserCoursePeriodListByPeriodId(periodIds,companyId);
     }
+
+    @Override
+    public R copyFsUserCoursePeriodAndCourse(PeriodStatisticCountParam param) {
+        if (param == null || param.getPeriodId() == null || param.getTrainingCampId() == null) {
+            return R.error("营期信息不完整");
+        }
+        //通过现有的营期Id查询,并查询到对应的营期看课
+        FsUserCoursePeriod fsUserCoursePeriod = selectFsUserCoursePeriodById(param.getPeriodId());
+        if (fsUserCoursePeriod == null) {
+            return R.error("未查询到当前营期");
+        }
+        //查询并复制当前营期所有的视频
+        FsUserCoursePeriodDays fsUserCoursePeriodDays = new FsUserCoursePeriodDays();
+        fsUserCoursePeriodDays.setPeriodId(param.getPeriodId());
+        List<FsUserCoursePeriodDays> fsUserCoursePeriodDayslist = fsUserCoursePeriodDaysService.selectFsUserCoursePeriodDaysList(fsUserCoursePeriodDays);
+        fsUserCoursePeriod.setTrainingCampId(param.getTrainingCampId());
+        fsUserCoursePeriod.setPeriodId(null);
+        if (insertFsUserCoursePeriod(fsUserCoursePeriod) <= 0) {
+            return R.error("营期创建失败");
+        }
+        // 定义重复使用的时间常量
+        LocalTime startTime = LocalTime.MIDNIGHT;
+        LocalTime endTime = LocalTime.of(23, 59, 59);
+        fsUserCoursePeriodDayslist.forEach(userCoursePeriodDays -> {
+            userCoursePeriodDays.setPeriodId(fsUserCoursePeriod.getPeriodId());
+            userCoursePeriodDays.setId(null);
+            userCoursePeriodDays.setStartTime(startTime);
+            userCoursePeriodDays.setEndTime1(endTime);
+            userCoursePeriodDays.setJoinTime(endTime);
+            userCoursePeriodDays.setVideoIds(Collections.singletonList(userCoursePeriodDays.getVideoId()));
+            fsUserCoursePeriodDaysService.addCourse(userCoursePeriodDays);
+        });
+        return R.ok();
+
+    }
 }

+ 33 - 8
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.fs.common.BeanCopyUtils;
+import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.constant.FsConstants;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
@@ -33,10 +34,7 @@ import com.fs.course.dto.CoursePackageDTO;
 import com.fs.course.mapper.*;
 import com.fs.course.param.*;
 import com.fs.course.param.newfs.*;
-import com.fs.course.service.IFsUserCompanyBindService;
-import com.fs.course.service.IFsUserCompanyUserService;
-import com.fs.course.service.IFsUserCourseVideoService;
-import com.fs.course.service.IFsVideoResourceService;
+import com.fs.course.service.*;
 import com.fs.course.vo.*;
 import com.fs.course.vo.newfs.*;
 import com.fs.his.domain.FsUser;
@@ -249,10 +247,14 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
     @Autowired
     private IFsUserCompanyBindService fsUserCompanyBindService;
 
+    @Autowired
+    private IFsUserCoursePeriodService fsUserCoursePeriodService;
     @Autowired
     private BalanceRollbackErrorMapper balanceRollbackErrorMapper;
 
 
+    @Autowired
+    private IFsUserCoursePeriodDaysService fsUserCoursePeriodDaysService;
 
     /**
      * 查询课堂视频
@@ -2305,11 +2307,11 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
             }
             vo.setStartDateTime(companyUserStartDateTime != null ? companyUserStartDateTime : days.getStartDateTime());
             vo.setEndDateTime(companyUserEndDateTime != null ? companyUserEndDateTime : days.getEndDateTime());
-            
+
             // 检查是否开启自由模式
             FsUserCoursePeriod period = fsUserCoursePeriodMapper.selectFsUserCoursePeriodById(param.getPeriodId());
             boolean canWatch;
-            
+
             if (period != null && period.getFreeMode() != null && period.getFreeMode() == 1) {
                 // 自由模式:不检查时间和状态,直接允许观看
                 canWatch = true;
@@ -2320,7 +2322,7 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
                         companyUserEndDateTime != null ? companyUserEndDateTime : days.getEndDateTime())
                         && days.getStatus() == 1;
             }
-            
+
             vo.setRang(canWatch);
         }
         return ResponseResult.ok(vo);
@@ -2405,8 +2407,31 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
             return entity;
         }).collect(Collectors.toList());
         fsUserCourseVideoMapper.insertBatchFsUserCourseVideo(collect);
-    }
 
+        //通过课程ID:查询使用课程id创建的营期来进进行关联(批量新增视频时关联到对应通过课程ID创建的营期)
+        FsUserCoursePeriod coursePeriod = new FsUserCoursePeriod();
+        coursePeriod.setCourseId(vo.getCourseId());
+        List<FsUserCoursePeriod> coursePeriodsList = fsUserCoursePeriodService.selectFsUserCoursePeriodList(coursePeriod);//获取当前课程创建的会员营期
+        //  处理对应课程安排
+        if (!coursePeriodsList.isEmpty()) {
+            LocalTime startTime = LocalTime.MIDNIGHT;
+            LocalTime endTime = LocalTime.of(23, 59, 59);
+            //获取营期数据
+            coursePeriodsList.stream().filter(e -> e.getPeriodStatus() != 3).forEach(video -> {
+                 //循环新增到对应营期中
+                collect.forEach(userCourseVideo->{
+                    FsUserCoursePeriodDays periodDaysEntity = new FsUserCoursePeriodDays();
+                    periodDaysEntity.setPeriodId(video.getPeriodId());//营期ID
+                    periodDaysEntity.setCourseId(video.getCourseId());//课程ID
+                    periodDaysEntity.setStartTime(startTime);
+                    periodDaysEntity.setVideoIds(Collections.singletonList(userCourseVideo.getVideoId()));
+                    periodDaysEntity.setEndTime1(endTime);
+                    periodDaysEntity.setJoinTime(endTime);
+                    fsUserCoursePeriodDaysService.addCourse(periodDaysEntity);
+                });
+            });
+        }
+    }
     @Override
     public void batchUpdateRed(List<BatchRedUpdate> list) {
         list.forEach(e -> {