|
@@ -0,0 +1,207 @@
|
|
|
|
+package com.ym.mec.biz.service.impl;
|
|
|
|
+
|
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
+import com.ym.mec.auth.api.client.SysUserFeignService;
|
|
|
|
+import com.ym.mec.auth.api.entity.SysUser;
|
|
|
|
+import com.ym.mec.biz.dal.dao.TempLittleArtistTrainingCampDao;
|
|
|
|
+import com.ym.mec.biz.dal.dto.TempLittleArtistTrainingCampDto;
|
|
|
|
+import com.ym.mec.biz.dal.entity.TempLittleArtistTrainingCamp;
|
|
|
|
+import com.ym.mec.biz.dal.entity.TempLittleArtistTrainingCampUserRelation;
|
|
|
|
+import com.ym.mec.biz.dal.vo.TempCampUserVo;
|
|
|
|
+import com.ym.mec.biz.dal.vo.TempUserTrainingTimeDetailVo;
|
|
|
|
+import com.ym.mec.biz.service.TempLittleArtistTrainingCampService;
|
|
|
|
+import com.ym.mec.biz.service.TempLittleArtistTrainingCampUserRelationService;
|
|
|
|
+import com.ym.mec.common.exception.BizException;
|
|
|
|
+import com.ym.mec.common.page.PageInfo;
|
|
|
|
+import com.ym.mec.common.page.PageUtil;
|
|
|
|
+import com.ym.mec.common.page.WrapperUtil;
|
|
|
|
+import com.ym.mec.util.date.DateUtil;
|
|
|
|
+import org.apache.commons.collections.CollectionUtils;
|
|
|
|
+import org.slf4j.Logger;
|
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
+import java.time.LocalDate;
|
|
|
|
+import java.util.*;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 小小艺术家训练营活动(TempLittleArtistTrainingCamp)表服务实现类
|
|
|
|
+ *
|
|
|
|
+ * @author hgw
|
|
|
|
+ * @since 2022-05-17 20:56:23
|
|
|
|
+ */
|
|
|
|
+@Service("tempLittleArtistTrainingCampService")
|
|
|
|
+public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLittleArtistTrainingCampDao, TempLittleArtistTrainingCamp> implements TempLittleArtistTrainingCampService {
|
|
|
|
+
|
|
|
|
+ private final static Logger log = LoggerFactory.getLogger(TempLittleArtistTrainingCampServiceImpl.class);
|
|
|
|
+ @Autowired
|
|
|
|
+ private SysUserFeignService sysUserFeignService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private TempLittleArtistTrainingCampUserRelationService tempLittleArtistTrainingCampUserRelationService;
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public TempLittleArtistTrainingCampDao getDao() {
|
|
|
|
+ return this.baseMapper;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 新建训练营
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public void add(TempLittleArtistTrainingCampDto dto) {
|
|
|
|
+ SysUser user = getUser();
|
|
|
|
+ TempLittleArtistTrainingCamp entity = new TempLittleArtistTrainingCamp();
|
|
|
|
+ BeanUtils.copyProperties(dto, entity);
|
|
|
|
+ entity.setState(TempLittleArtistTrainingCamp.READY);
|
|
|
|
+ entity.setCreateBy(user.getId());
|
|
|
|
+ entity.setCreateTime(new Date());
|
|
|
|
+ this.save(entity);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 修改训练营
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public void update(TempLittleArtistTrainingCampDto dto) {
|
|
|
|
+ SysUser user = getUser();
|
|
|
|
+ TempLittleArtistTrainingCamp entity = Optional.ofNullable(dto.getId())
|
|
|
|
+ .map(this::getById)
|
|
|
|
+ .orElseThrow(() -> new BizException("训练营不存在"));
|
|
|
|
+ entity.setName(dto.getName());
|
|
|
|
+ entity.setApplyStartDate(dto.getApplyStartDate());
|
|
|
|
+ entity.setApplyEndDate(dto.getApplyEndDate());
|
|
|
|
+ entity.setTrainStartDate(dto.getTrainStartDate());
|
|
|
|
+ entity.setTrainEndDate(dto.getTrainEndDate());
|
|
|
|
+ entity.setState(TempLittleArtistTrainingCamp.READY);
|
|
|
|
+ entity.setUpdateBy(user.getId());
|
|
|
|
+ entity.setUpdateTime(new Date());
|
|
|
|
+ this.updateById(entity);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 删除训练营
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public void delete(Integer id) {
|
|
|
|
+ TempLittleArtistTrainingCamp entity = Optional.ofNullable(id)
|
|
|
|
+ .map(this::getById)
|
|
|
|
+ .orElseThrow(() -> new BizException("训练营不存在"));
|
|
|
|
+ entity.setDelFlag(0);
|
|
|
|
+ this.updateById(entity);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 分页查询-训练营列表
|
|
|
|
+ *
|
|
|
|
+ * @param param 条件
|
|
|
|
+ * <p> - row 条数
|
|
|
|
+ * <p> - page 页数
|
|
|
|
+ * <p> - name 训练营标题-模糊搜索
|
|
|
|
+ * <p> - state 筹备中 READY,报名中 APPLY,未开始 NOT_START,进行中 ING,已结束 END
|
|
|
|
+ * <p> - applyStartDate 申请报名登记开始日期
|
|
|
|
+ * <p> - applyEndDate 申请报名登记结束日期
|
|
|
|
+ * <p> - trainStartDate 训练开始日期
|
|
|
|
+ * <p> - trainEndDate 训练结束日期
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public PageInfo<TempLittleArtistTrainingCamp> queryPageTrainingCamp(Map<String, Object> param) {
|
|
|
|
+ Page<TempLittleArtistTrainingCamp> page = PageUtil.getPageInfo(param);
|
|
|
|
+ page.setAsc("apply_start_date_");
|
|
|
|
+ IPage<TempLittleArtistTrainingCamp> pageList = this.page(page, Wrappers.<TempLittleArtistTrainingCamp>lambdaQuery()
|
|
|
|
+ .eq(WrapperUtil.strParamIsNull(param, "name"), TempLittleArtistTrainingCamp::getName, WrapperUtil.toStr(param, "name"))
|
|
|
|
+ .eq(WrapperUtil.strParamIsNull(param, "state"), TempLittleArtistTrainingCamp::getState, WrapperUtil.toStr(param, "state"))
|
|
|
|
+ .ge(Objects.nonNull(param.get("applyStartDate")), TempLittleArtistTrainingCamp::getApplyStartDate, param.get("applyStartDate"))
|
|
|
|
+ .le(Objects.nonNull(param.get("applyEndDate")), TempLittleArtistTrainingCamp::getApplyEndDate, param.get("applyEndDate"))
|
|
|
|
+ .ge(Objects.nonNull(param.get("trainStartDate")), TempLittleArtistTrainingCamp::getTrainStartDate, param.get("trainStartDate"))
|
|
|
|
+ .le(Objects.nonNull(param.get("trainEndDate")), TempLittleArtistTrainingCamp::getTrainEndDate, param.get("trainEndDate")));
|
|
|
|
+ return PageUtil.pageInfo(pageList);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 参与名单
|
|
|
|
+ *
|
|
|
|
+ * @param param 条件
|
|
|
|
+ * <p> - row 条数
|
|
|
|
+ * <p> - page 页数
|
|
|
|
+ * <p> - state 状态:未报名NOT_APPLY ,已报名 APPLY
|
|
|
|
+ * <p> - search 学员姓名/手机号/编号
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public PageInfo<TempCampUserVo> queryPageTrainingCampUser(Map<String, Object> param) {
|
|
|
|
+ Page<TempCampUserVo> pageInfo = PageUtil.getPageInfo(param);
|
|
|
|
+ pageInfo.setDesc("a.create_time_");
|
|
|
|
+ return PageUtil.pageInfo(baseMapper.queryCampUser(pageInfo, param));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 查询指定学生-训练营每日训练时长
|
|
|
|
+ *
|
|
|
|
+ * @param param 参数
|
|
|
|
+ * <p> - userId 用户id
|
|
|
|
+ */
|
|
|
|
+ public List<TempUserTrainingTimeDetailVo> queryUserTrainingTime(Map<String, Object> param) {
|
|
|
|
+ Integer userId = WrapperUtil.toInt(param, "userId", "学员id不能为空");
|
|
|
|
+ //查询训练营的训练时间段
|
|
|
|
+ TempLittleArtistTrainingCampUserRelation campUser = tempLittleArtistTrainingCampUserRelationService.getOne(Wrappers.<TempLittleArtistTrainingCampUserRelation>lambdaQuery()
|
|
|
|
+ .eq(TempLittleArtistTrainingCampUserRelation::getUserId, userId));
|
|
|
|
+ TempLittleArtistTrainingCamp camp = this.getOne(Wrappers.<TempLittleArtistTrainingCamp>lambdaQuery()
|
|
|
|
+ .eq(TempLittleArtistTrainingCamp::getId, campUser.getActivityId())
|
|
|
|
+ .eq(TempLittleArtistTrainingCamp::getDelFlag, 0));
|
|
|
|
+ String startDateStr = DateUtil.dateToString(camp.getTrainStartDate());
|
|
|
|
+ String endDateStr = DateUtil.dateToString(camp.getTrainEndDate());
|
|
|
|
+
|
|
|
|
+ //生成训练时间集合
|
|
|
|
+ List<TempUserTrainingTimeDetailVo> resultList = new ArrayList<>();
|
|
|
|
+ LocalDate generateDate = LocalDate.parse(startDateStr);
|
|
|
|
+ boolean flag = true;
|
|
|
|
+ while (flag) {
|
|
|
|
+ if (generateDate.toString().equals(endDateStr)) {
|
|
|
|
+ flag = false;
|
|
|
|
+ }
|
|
|
|
+ TempUserTrainingTimeDetailVo tempUserTrainingTimeDetailVo = new TempUserTrainingTimeDetailVo();
|
|
|
|
+ tempUserTrainingTimeDetailVo.setUserId(userId);
|
|
|
|
+ tempUserTrainingTimeDetailVo.setTrainingDate(camp.getTrainStartDate());
|
|
|
|
+ tempUserTrainingTimeDetailVo.setPlayTime(BigDecimal.ZERO);
|
|
|
|
+ tempUserTrainingTimeDetailVo.setIsFinish(0);
|
|
|
|
+ resultList.add(tempUserTrainingTimeDetailVo);
|
|
|
|
+ generateDate = generateDate.plusDays(1);
|
|
|
|
+ }
|
|
|
|
+ //查询每日训练时长
|
|
|
|
+ param.put("startTime", startDateStr + " 00:00:00");
|
|
|
|
+ param.put("endTime", endDateStr + " 23:59:59");
|
|
|
|
+ List<TempUserTrainingTimeDetailVo> userTrainingTimeList = baseMapper.queryUserTrainingTime(param);
|
|
|
|
+ //拼接数据
|
|
|
|
+ if (CollectionUtils.isNotEmpty(userTrainingTimeList)) {
|
|
|
|
+ Map<String, BigDecimal> nowTrainingTime = userTrainingTimeList.stream()
|
|
|
|
+ .collect(Collectors.toMap(k -> DateUtil.dateToString(k.getTrainingDate()), TempUserTrainingTimeDetailVo::getPlayTime));
|
|
|
|
+ resultList.forEach(vo -> {
|
|
|
|
+ String s = DateUtil.dateToString(vo.getTrainingDate());
|
|
|
|
+ BigDecimal t = nowTrainingTime.get(s);
|
|
|
|
+ if (Objects.nonNull(t)) {
|
|
|
|
+ vo.setPlayTime(t);
|
|
|
|
+ //大于1200秒
|
|
|
|
+ if (t.intValue() > 1200) {
|
|
|
|
+ vo.setIsFinish(1);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ return resultList;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private SysUser getUser() {
|
|
|
|
+ //修改机构基础信息
|
|
|
|
+ return Optional.ofNullable(sysUserFeignService.queryUserInfo())
|
|
|
|
+ .orElseThrow(() -> new BizException("用户信息获取失败,请刷新页面或者重新登录!"));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|