|
@@ -12,6 +12,7 @@ import com.ym.mec.biz.dal.entity.ImGroup;
|
|
|
import com.ym.mec.biz.dal.entity.TempLittleArtistTrainingCamp;
|
|
|
import com.ym.mec.biz.dal.entity.TempLittleArtistTrainingCampUserRelation;
|
|
|
import com.ym.mec.biz.dal.vo.TempCampUserTrainingDetailVo;
|
|
|
+import com.ym.mec.biz.dal.vo.TempCampUserTrainingPlayTimeVo;
|
|
|
import com.ym.mec.biz.dal.vo.TempCampUserVo;
|
|
|
import com.ym.mec.biz.dal.vo.TempUserTrainingTimeDetailVo;
|
|
|
import com.ym.mec.biz.service.TempLittleArtistTrainingCampService;
|
|
@@ -31,6 +32,7 @@ import org.springframework.stereotype.Service;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.time.LocalDate;
|
|
|
import java.util.*;
|
|
|
+import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -61,9 +63,18 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
|
|
|
SysUser user = getUser();
|
|
|
TempLittleArtistTrainingCamp entity = new TempLittleArtistTrainingCamp();
|
|
|
BeanUtils.copyProperties(dto, entity);
|
|
|
- entity.setState(TempLittleArtistTrainingCamp.READY);
|
|
|
+ Date now = new Date();
|
|
|
+ //训练时间必需大于报名时间
|
|
|
+ if (dto.getTrainStartDate().getTime() > dto.getApplyStartDate().getTime()) {
|
|
|
+ throw new BizException("训练时间必需大于报名时间");
|
|
|
+ }
|
|
|
+ entity.setState(TempLittleArtistTrainingCamp.NOT_START);
|
|
|
+ //当前时间大于等于报名开始时间 当前时间小于等于报名结束时间
|
|
|
+ if (now.getTime() >= dto.getApplyStartDate().getTime() && now.getTime() <= dto.getApplyEndDate().getTime()) {
|
|
|
+ entity.setState(TempLittleArtistTrainingCamp.APPLY);
|
|
|
+ }
|
|
|
entity.setCreateBy(user.getId());
|
|
|
- entity.setCreateTime(new Date());
|
|
|
+ entity.setCreateTime(now);
|
|
|
this.save(entity);
|
|
|
}
|
|
|
|
|
@@ -226,12 +237,116 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
|
|
|
return baseMapper.queryCampImGroup(imGroupIds);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 查询训练营周期表
|
|
|
+ *
|
|
|
+ * @return result:
|
|
|
+ * <p>user 学员信息
|
|
|
+ * <p>campList 训练营信息
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Map<String, Object> queryCampCycle() {
|
|
|
+ SysUser user = getUser();
|
|
|
+ //查询未删除的训练营
|
|
|
+ List<TempLittleArtistTrainingCamp> campList = this.list(Wrappers.<TempLittleArtistTrainingCamp>lambdaQuery()
|
|
|
+ .eq(TempLittleArtistTrainingCamp::getDelFlag, 0));
|
|
|
+ //查询该学员是否购买过该训练营
|
|
|
+ TempLittleArtistTrainingCampUserRelation userRelation = tempLittleArtistTrainingCampUserRelationService.getOne(Wrappers.<TempLittleArtistTrainingCampUserRelation>lambdaQuery()
|
|
|
+ .eq(TempLittleArtistTrainingCampUserRelation::getUserId, user.getId()));
|
|
|
+ Map<String, Object> result = new HashMap<>();
|
|
|
+ result.put("user", userRelation);
|
|
|
+ if (CollectionUtils.isNotEmpty(campList)) {
|
|
|
+ campList.sort(Comparator.comparing(TempLittleArtistTrainingCamp::getApplyStartDate));
|
|
|
+ }
|
|
|
+ result.put("campList", campList);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 定时任务-修改训练营状态
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void checkCampState() {
|
|
|
+ //查询未结束 并 未删除的训练营
|
|
|
+ List<TempLittleArtistTrainingCamp> campList = this.list(Wrappers.<TempLittleArtistTrainingCamp>lambdaQuery()
|
|
|
+ .eq(TempLittleArtistTrainingCamp::getDelFlag, 0)
|
|
|
+ .ne(TempLittleArtistTrainingCamp::getState, TempLittleArtistTrainingCamp.END));
|
|
|
+ if (CollectionUtils.isEmpty(campList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Date now = DateUtil.stringToDate(LocalDate.now() + " 00:00:00");
|
|
|
+ //将训练营数据根据状态分组,未开始 NOT_START,报名中 APPLY,筹备中 READY,进行中 ING,已结束 END
|
|
|
+ Map<String, List<TempLittleArtistTrainingCamp>> stateMap = WrapperUtil.groupList(campList, TempLittleArtistTrainingCamp::getState);
|
|
|
+ //未开始 NOT_START 修改为 报名中 APPLY
|
|
|
+ opsState(now, stateMap, TempLittleArtistTrainingCamp.NOT_START, TempLittleArtistTrainingCamp::getApplyStartDate, TempLittleArtistTrainingCamp.APPLY);
|
|
|
+ //报名中 APPLY 修改为 筹备中 READY
|
|
|
+ opsState(now, stateMap, TempLittleArtistTrainingCamp.APPLY, TempLittleArtistTrainingCamp::getApplyEndDate, TempLittleArtistTrainingCamp.READY);
|
|
|
+ //筹备中 READY 修改为 进行中 ING
|
|
|
+ opsState(now, stateMap, TempLittleArtistTrainingCamp.READY, TempLittleArtistTrainingCamp::getTrainStartDate, TempLittleArtistTrainingCamp.ING);
|
|
|
+ //进行中 ING 修改为 已结束 END
|
|
|
+ opsState(now, stateMap, TempLittleArtistTrainingCamp.ING, TempLittleArtistTrainingCamp::getTrainEndDate, TempLittleArtistTrainingCamp.END);
|
|
|
+ //修改数据
|
|
|
+ campList.forEach(this::updateById);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改训练营状态
|
|
|
+ *
|
|
|
+ * @param now 当前时间
|
|
|
+ * @param stateMap 训练营状态分组
|
|
|
+ * @param oldState 原状态
|
|
|
+ * @param dateField 时间字段
|
|
|
+ * @param newState 新状态
|
|
|
+ */
|
|
|
+ private void opsState(Date now, Map<String, List<TempLittleArtistTrainingCamp>> stateMap, String oldState,
|
|
|
+ Function<TempLittleArtistTrainingCamp, Date> dateField, String newState) {
|
|
|
+ List<TempLittleArtistTrainingCamp> list = stateMap.get(oldState);
|
|
|
+ if (CollectionUtils.isNotEmpty(list)) {
|
|
|
+ list.forEach(camp -> {
|
|
|
+ if ( now.getTime() >= dateField.apply(camp).getTime()) {
|
|
|
+ camp.setState(newState);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 云教练训练是否达标
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public TempCampUserTrainingPlayTimeVo queryUserTrainingPlayTime() {
|
|
|
+ SysUser user = getUser();
|
|
|
+ //查询训练营人员关系
|
|
|
+ TempLittleArtistTrainingCampUserRelation campUser = tempLittleArtistTrainingCampUserRelationService.getOne(Wrappers.<TempLittleArtistTrainingCampUserRelation>lambdaQuery()
|
|
|
+ .eq(TempLittleArtistTrainingCampUserRelation::getUserId, user.getId()));
|
|
|
+ if (Objects.isNull(campUser)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ //查询训练营
|
|
|
+ TempLittleArtistTrainingCamp camp = this.getOne(Wrappers.<TempLittleArtistTrainingCamp>lambdaQuery()
|
|
|
+ .eq(TempLittleArtistTrainingCamp::getId, campUser.getActivityId())
|
|
|
+ .eq(TempLittleArtistTrainingCamp::getDelFlag, 0));
|
|
|
+ if (Objects.isNull(camp)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ TempCampUserTrainingPlayTimeVo vo = new TempCampUserTrainingPlayTimeVo();
|
|
|
+ Map<String, Object> param = new HashMap<>();
|
|
|
+ param.put("userId", user.getId());
|
|
|
+ param.put("startTime", DateUtil.dateToString(camp.getTrainStartDate()) + " 00:00:00");
|
|
|
+ param.put("endTime", DateUtil.dateToString(camp.getTrainEndDate()) + " 23:59:59");
|
|
|
+ Integer playTime = baseMapper.queryUserTrainingPlayTime(param);
|
|
|
+ vo.setPlayTime(playTime);
|
|
|
+ vo.setTrainStartDate(camp.getTrainStartDate());
|
|
|
+ vo.setTrainEndDate(camp.getTrainEndDate());
|
|
|
+ vo.setIsFinish(playTime >= 1200 ? 0 : 1);
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
private SysUser getUser() {
|
|
|
- //修改机构基础信息
|
|
|
return Optional.ofNullable(sysUserFeignService.queryUserInfo())
|
|
|
.orElseThrow(() -> new BizException("用户信息获取失败,请刷新页面或者重新登录!"));
|
|
|
}
|
|
|
|
|
|
-
|
|
|
}
|
|
|
|