|
@@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.google.common.collect.Lists;
|
|
import com.google.common.collect.Lists;
|
|
import com.ym.mec.auth.api.client.SysUserFeignService;
|
|
import com.ym.mec.auth.api.client.SysUserFeignService;
|
|
import com.ym.mec.auth.api.entity.SysUser;
|
|
import com.ym.mec.auth.api.entity.SysUser;
|
|
-import com.ym.mec.biz.dal.dao.TempLittleArtistTrainingCampDao;
|
|
|
|
|
|
+import com.ym.mec.biz.dal.dao.*;
|
|
import com.ym.mec.biz.dal.dto.ImGroupDto;
|
|
import com.ym.mec.biz.dal.dto.ImGroupDto;
|
|
import com.ym.mec.biz.dal.dto.TempLittleArtistTrainingCampDto;
|
|
import com.ym.mec.biz.dal.dto.TempLittleArtistTrainingCampDto;
|
|
import com.ym.mec.biz.dal.entity.*;
|
|
import com.ym.mec.biz.dal.entity.*;
|
|
@@ -20,6 +20,7 @@ import com.ym.mec.common.page.PageUtil;
|
|
import com.ym.mec.common.page.WrapperUtil;
|
|
import com.ym.mec.common.page.WrapperUtil;
|
|
import com.ym.mec.common.tenant.TenantContextHolder;
|
|
import com.ym.mec.common.tenant.TenantContextHolder;
|
|
import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
|
|
import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
|
|
|
|
+import com.ym.mec.util.collection.MapUtil;
|
|
import com.ym.mec.util.date.DateUtil;
|
|
import com.ym.mec.util.date.DateUtil;
|
|
import com.ym.mec.util.excel.POIUtil;
|
|
import com.ym.mec.util.excel.POIUtil;
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
@@ -64,6 +65,14 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
|
|
private SysConfigService sysConfigService;
|
|
private SysConfigService sysConfigService;
|
|
@Autowired
|
|
@Autowired
|
|
private SysMessageService sysMessageService;
|
|
private SysMessageService sysMessageService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private StudentDao studentDao;
|
|
|
|
+ @Autowired
|
|
|
|
+ private StudentRegistrationDao studentRegistrationDao;
|
|
|
|
+ @Autowired
|
|
|
|
+ private MusicGroupDao musicGroupDao;
|
|
|
|
+ @Autowired
|
|
|
|
+ private SysMusicCompareRecordDao sysMusicCompareRecordDao;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public TempLittleArtistTrainingCampDao getDao() {
|
|
public TempLittleArtistTrainingCampDao getDao() {
|
|
@@ -103,17 +112,22 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
|
|
TempLittleArtistTrainingCamp entity = Optional.ofNullable(dto.getId())
|
|
TempLittleArtistTrainingCamp entity = Optional.ofNullable(dto.getId())
|
|
.map(this::getById)
|
|
.map(this::getById)
|
|
.orElseThrow(() -> new BizException("训练营不存在"));
|
|
.orElseThrow(() -> new BizException("训练营不存在"));
|
|
- int count = tempLittleArtistTrainingCampUserRelationService.count(Wrappers.<TempLittleArtistTrainingCampUserRelation>lambdaQuery()
|
|
|
|
|
|
+ /*int count = tempLittleArtistTrainingCampUserRelationService.count(Wrappers.<TempLittleArtistTrainingCampUserRelation>lambdaQuery()
|
|
.eq(TempLittleArtistTrainingCampUserRelation::getActivityId, entity.getId()));
|
|
.eq(TempLittleArtistTrainingCampUserRelation::getActivityId, entity.getId()));
|
|
if (count > 0) {
|
|
if (count > 0) {
|
|
throw new BizException("训练营已有学生报名,无法修改");
|
|
throw new BizException("训练营已有学生报名,无法修改");
|
|
- }
|
|
|
|
|
|
+ }*/
|
|
entity.setName(dto.getName());
|
|
entity.setName(dto.getName());
|
|
entity.setApplyStartDate(dto.getApplyStartDate());
|
|
entity.setApplyStartDate(dto.getApplyStartDate());
|
|
entity.setApplyEndDate(dto.getApplyEndDate());
|
|
entity.setApplyEndDate(dto.getApplyEndDate());
|
|
entity.setTrainStartDate(dto.getTrainStartDate());
|
|
entity.setTrainStartDate(dto.getTrainStartDate());
|
|
entity.setTrainEndDate(dto.getTrainEndDate());
|
|
entity.setTrainEndDate(dto.getTrainEndDate());
|
|
entity.setPicUrl(dto.getPicUrl());
|
|
entity.setPicUrl(dto.getPicUrl());
|
|
|
|
+ entity.setEnableFlag(dto.getEnableFlag());
|
|
|
|
+ entity.setMusicGroupIds(dto.getMusicGroupIds());
|
|
|
|
+ entity.setOrganIds(dto.getOrganIds());
|
|
|
|
+ entity.setSignStandard(dto.getSignStandard());
|
|
|
|
+ entity.setStandardDays(dto.getStandardDays());
|
|
entity.setUpdateBy(user.getId());
|
|
entity.setUpdateBy(user.getId());
|
|
entity.setUpdateTime(new Date());
|
|
entity.setUpdateTime(new Date());
|
|
this.updateById(entity);
|
|
this.updateById(entity);
|
|
@@ -181,6 +195,7 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
|
|
.le(Objects.nonNull(param.get("applyEndDate")), TempLittleArtistTrainingCamp::getApplyEndDate, param.get("applyEndDate"))
|
|
.le(Objects.nonNull(param.get("applyEndDate")), TempLittleArtistTrainingCamp::getApplyEndDate, param.get("applyEndDate"))
|
|
.ge(Objects.nonNull(param.get("trainStartDate")), TempLittleArtistTrainingCamp::getTrainStartDate, param.get("trainStartDate"))
|
|
.ge(Objects.nonNull(param.get("trainStartDate")), TempLittleArtistTrainingCamp::getTrainStartDate, param.get("trainStartDate"))
|
|
.le(Objects.nonNull(param.get("trainEndDate")), TempLittleArtistTrainingCamp::getTrainEndDate, param.get("trainEndDate"))
|
|
.le(Objects.nonNull(param.get("trainEndDate")), TempLittleArtistTrainingCamp::getTrainEndDate, param.get("trainEndDate"))
|
|
|
|
+ .le(Objects.nonNull(param.get("enableFlag")), TempLittleArtistTrainingCamp::getEnableFlag, param.get("enableFlag"))
|
|
.orderByDesc(TempLittleArtistTrainingCamp::getId));
|
|
.orderByDesc(TempLittleArtistTrainingCamp::getId));
|
|
return PageUtil.pageInfo(pageList);
|
|
return PageUtil.pageInfo(pageList);
|
|
}
|
|
}
|
|
@@ -210,15 +225,10 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
|
|
@Override
|
|
@Override
|
|
public List<TempUserTrainingTimeDetailVo> queryUserTrainingTime(Map<String, Object> param) {
|
|
public List<TempUserTrainingTimeDetailVo> queryUserTrainingTime(Map<String, Object> param) {
|
|
Integer userId = WrapperUtil.toInt(param, "userId", "学员id不能为空");
|
|
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));
|
|
|
|
|
|
+ //获取训练营
|
|
|
|
+ TempLittleArtistTrainingCamp camp = this.lambdaQuery().eq(TempLittleArtistTrainingCamp::getId, param.get("campId")).one();
|
|
String startDateStr = DateUtil.dateToString(camp.getTrainStartDate());
|
|
String startDateStr = DateUtil.dateToString(camp.getTrainStartDate());
|
|
String endDateStr = DateUtil.dateToString(camp.getTrainEndDate());
|
|
String endDateStr = DateUtil.dateToString(camp.getTrainEndDate());
|
|
-
|
|
|
|
//生成训练时间集合
|
|
//生成训练时间集合
|
|
List<TempUserTrainingTimeDetailVo> resultList = new ArrayList<>();
|
|
List<TempUserTrainingTimeDetailVo> resultList = new ArrayList<>();
|
|
LocalDate generateDate = LocalDate.parse(startDateStr);
|
|
LocalDate generateDate = LocalDate.parse(startDateStr);
|
|
@@ -232,6 +242,8 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
|
|
tempUserTrainingTimeDetailVo.setTrainingDate(DateUtil.toDate(generateDate.toString()));
|
|
tempUserTrainingTimeDetailVo.setTrainingDate(DateUtil.toDate(generateDate.toString()));
|
|
tempUserTrainingTimeDetailVo.setPlayTime(BigDecimal.ZERO);
|
|
tempUserTrainingTimeDetailVo.setPlayTime(BigDecimal.ZERO);
|
|
tempUserTrainingTimeDetailVo.setIsFinish(0);
|
|
tempUserTrainingTimeDetailVo.setIsFinish(0);
|
|
|
|
+ tempUserTrainingTimeDetailVo.setSignStandard(camp.getSignStandard());
|
|
|
|
+ tempUserTrainingTimeDetailVo.setStandardDays(camp.getStandardDays());
|
|
resultList.add(tempUserTrainingTimeDetailVo);
|
|
resultList.add(tempUserTrainingTimeDetailVo);
|
|
generateDate = generateDate.plusDays(1);
|
|
generateDate = generateDate.plusDays(1);
|
|
}
|
|
}
|
|
@@ -249,7 +261,7 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
|
|
if (Objects.nonNull(t)) {
|
|
if (Objects.nonNull(t)) {
|
|
vo.setPlayTime(t);
|
|
vo.setPlayTime(t);
|
|
//大于1200秒
|
|
//大于1200秒
|
|
- if (t.intValue() > 600) {
|
|
|
|
|
|
+ if (t.intValue() > camp.getSignStandard() * 60) {
|
|
vo.setIsFinish(1);
|
|
vo.setIsFinish(1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -273,7 +285,63 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
|
|
queryUserTrainingDetailOpsParam(param);
|
|
queryUserTrainingDetailOpsParam(param);
|
|
Page<TempCampUserTrainingDetailVo> page = PageUtil.getPageInfo(param);
|
|
Page<TempCampUserTrainingDetailVo> page = PageUtil.getPageInfo(param);
|
|
page.setDesc("b.playDay");
|
|
page.setDesc("b.playDay");
|
|
- return PageUtil.pageInfo(baseMapper.queryUserTrainingDetail(page, param));
|
|
|
|
|
|
+ IPage<TempCampUserTrainingDetailVo> vos = baseMapper.queryUserTrainingDetail(page, param);
|
|
|
|
+ List<TempCampUserTrainingDetailVo> records = vos.getRecords();
|
|
|
|
+ if(CollectionUtils.isNotEmpty(records)){
|
|
|
|
+ List<Integer> studentIds = records.stream().map(e -> e.getId()).collect(Collectors.toList());
|
|
|
|
+ Map<Integer,String> subjectMap = MapUtil.convertIntegerMap(studentDao.getStudentSubjectMapList(studentIds));
|
|
|
|
+ Map<Integer,String> groupNameMap = MapUtil.convertMybatisMap(musicGroupDao.queryNormalGroupName(studentIds));
|
|
|
|
+ List<TempCampUserTrainingSequenceVo> sequenceDays = studentDao.getStudentCloudStudySequenceDays(studentIds,
|
|
|
|
+ param.get("startTime").toString(),param.get("endTime").toString());
|
|
|
|
+ Map<Integer, List<Long>> listMap = sequenceDays.stream().collect(Collectors.groupingBy(e -> e.getUserId(),
|
|
|
|
+ Collectors.collectingAndThen(Collectors.toList(),v->v.stream().map(e->e.getDayNum()).collect(Collectors.toList()))));
|
|
|
|
+ Integer standardDays = Integer.parseInt(param.get("standardDays").toString());
|
|
|
|
+ for (TempCampUserTrainingDetailVo record : records) {
|
|
|
|
+ record.setSubjectName(subjectMap.get(record.getId()));
|
|
|
|
+ record.setMusicGroupName(groupNameMap.get(record.getId()));
|
|
|
|
+ record.setStandardFlag(record.getPlayDay() >= standardDays);
|
|
|
|
+ List<Long> sequenceVos = listMap.get(record.getId());
|
|
|
|
+ if(CollectionUtils.isNotEmpty(sequenceVos)){
|
|
|
|
+ record.setCloudStudySequenceDays(getLongDay(sequenceVos));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return PageUtil.pageInfo(vos);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static long getLongDay(List<Long> list) {
|
|
|
|
+ List<Long> list2 = new ArrayList<>();// 存放中断元素的位置
|
|
|
|
+ List<Long> list3 = new ArrayList<>();
|
|
|
|
+ //先获取连续中断的位置,放在list2中
|
|
|
|
+ for (Integer i = 0; i < list.size(); i++ ) {
|
|
|
|
+ if (i == list.size() - 1) {
|
|
|
|
+ break;
|
|
|
|
+ } else if (list.get(i + 1) - list.get(i) != 1) {
|
|
|
|
+ list2.add(i.longValue());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //通过判断获取连续的个数,在list3中取最大值即可。
|
|
|
|
+ if (0 == list2.size()) {
|
|
|
|
+ // 没有中断 返回原集合长度
|
|
|
|
+ return list.size();
|
|
|
|
+ } else {
|
|
|
|
+ for (int i = 0; i < list2.size(); i++ ) {
|
|
|
|
+ if (1 == list2.size()) {
|
|
|
|
+ list3.add(list2.get(0) + 1);// 中断前的天数
|
|
|
|
+ list3.add(list.size() - 1 - list2.get(i));// 剩余的天数
|
|
|
|
+ } else {
|
|
|
|
+ if (i == 0) {
|
|
|
|
+ list3.add(list2.get(0) + 1);
|
|
|
|
+ list3.add(list2.get(i + 1) - list2.get(i));
|
|
|
|
+ } else if (i == list2.size() - 1) {
|
|
|
|
+ list3.add(list.size() - 1 - list2.get(i));
|
|
|
|
+ } else {
|
|
|
|
+ list3.add(list2.get(i + 1) - list2.get(i));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return Collections.max(list3);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -284,8 +352,10 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
|
|
TempLittleArtistTrainingCamp camp = this.getOne(Wrappers.<TempLittleArtistTrainingCamp>lambdaQuery()
|
|
TempLittleArtistTrainingCamp camp = this.getOne(Wrappers.<TempLittleArtistTrainingCamp>lambdaQuery()
|
|
.eq(TempLittleArtistTrainingCamp::getId, campId)
|
|
.eq(TempLittleArtistTrainingCamp::getId, campId)
|
|
.eq(TempLittleArtistTrainingCamp::getDelFlag, 0));
|
|
.eq(TempLittleArtistTrainingCamp::getDelFlag, 0));
|
|
- param.put("startTime", camp.getTrainStartDate());
|
|
|
|
- param.put("endTime", camp.getTrainEndDate());
|
|
|
|
|
|
+ param.put("startTime", DateUtil.format(camp.getTrainStartDate(),DateUtil.DEFAULT_PATTERN));
|
|
|
|
+ param.put("endTime", DateUtil.format(camp.getTrainEndDate(),DateUtil.DEFAULT_PATTERN));
|
|
|
|
+ param.put("signStandard", camp.getSignStandard() * 60);
|
|
|
|
+ param.put("standardDays", camp.getStandardDays());
|
|
param.put("state", TempLittleArtistTrainingCampUserRelation.APPLY);
|
|
param.put("state", TempLittleArtistTrainingCampUserRelation.APPLY);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -309,10 +379,12 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
|
|
@Override
|
|
@Override
|
|
public Map<String, Object> queryCampCycle() {
|
|
public Map<String, Object> queryCampCycle() {
|
|
SysUser user = getUser();
|
|
SysUser user = getUser();
|
|
- //查询未删除的训练营
|
|
|
|
- List<TempLittleArtistTrainingCamp> campList = this.list(Wrappers.<TempLittleArtistTrainingCamp>lambdaQuery()
|
|
|
|
- .eq(TempLittleArtistTrainingCamp::getDelFlag, 0)
|
|
|
|
- .orderByDesc(TempLittleArtistTrainingCamp::getId));
|
|
|
|
|
|
+ //获取学员可见训练营
|
|
|
|
+ //获取学员分部、乐团列表
|
|
|
|
+ Integer organId = user.getOrganId();
|
|
|
|
+ musicGroupDao.queryUserMusicGroups(user.getId());
|
|
|
|
+ List<String> musicGroupIds = studentRegistrationDao.queryStudentMusicGroup(user.getId());
|
|
|
|
+ List<TempLittleArtistTrainingCamp> campList = this.baseMapper.findTrainingByStudent(organId,StringUtils.join(musicGroupIds,","),user.getId());
|
|
//查询该学员是否购买过该训练营
|
|
//查询该学员是否购买过该训练营
|
|
TempLittleArtistTrainingCampUserRelation userRelation = tempLittleArtistTrainingCampUserRelationService.getOne(Wrappers.<TempLittleArtistTrainingCampUserRelation>lambdaQuery()
|
|
TempLittleArtistTrainingCampUserRelation userRelation = tempLittleArtistTrainingCampUserRelationService.getOne(Wrappers.<TempLittleArtistTrainingCampUserRelation>lambdaQuery()
|
|
.eq(TempLittleArtistTrainingCampUserRelation::getUserId, user.getId()));
|
|
.eq(TempLittleArtistTrainingCampUserRelation::getUserId, user.getId()));
|
|
@@ -541,22 +613,22 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
|
|
vo.setPlayTime(playTime);
|
|
vo.setPlayTime(playTime);
|
|
vo.setTrainStartDate(camp.getTrainStartDate());
|
|
vo.setTrainStartDate(camp.getTrainStartDate());
|
|
vo.setTrainEndDate(camp.getTrainEndDate());
|
|
vo.setTrainEndDate(camp.getTrainEndDate());
|
|
- vo.setIsFinish(playTime >= 600 ? 0 : 1);
|
|
|
|
|
|
+ vo.setIsFinish(playTime >= camp.getSignStandard() * 60 ? 0 : 1);
|
|
return vo;
|
|
return vo;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 导出小小训练营想详情
|
|
|
|
|
|
+ * 导出小小训练营详情
|
|
*/
|
|
*/
|
|
public void exportUserTrainingDetail(Map<String, Object> param, HttpServletResponse response) throws IOException {
|
|
public void exportUserTrainingDetail(Map<String, Object> param, HttpServletResponse response) throws IOException {
|
|
//训练营详情-查询条件时间设置
|
|
//训练营详情-查询条件时间设置
|
|
queryUserTrainingDetailOpsParam(param);
|
|
queryUserTrainingDetailOpsParam(param);
|
|
- List<TempCampUserTrainingDetailVo> list = baseMapper.queryUserTrainingDetail(param);
|
|
|
|
|
|
+ List<TempCampUserTrainingDetailVo> list = this.queryUserTrainingDetail(param).getRows();
|
|
OutputStream outputStream = response.getOutputStream();
|
|
OutputStream outputStream = response.getOutputStream();
|
|
HSSFWorkbook workbook = null;
|
|
HSSFWorkbook workbook = null;
|
|
try {
|
|
try {
|
|
- String[] header = {"学员编号", "学员姓名", "手机号", "群组", "打卡天数", "训练时长(分钟)"};
|
|
|
|
- String[] body = {"id", "username", "phone", "imGroupName", "playDay", "playTime"};
|
|
|
|
|
|
+ String[] header = {"学员编号", "学员姓名", "学员声部", "乐团", "手机号", "群组", "打卡天数", "训练时长(分钟)", "打卡状态"};
|
|
|
|
+ String[] body = {"id", "username", "subjectName", "musicGroupName", "phone", "imGroupName", "playDay", "playTime", "standardFlag?'达标':'未达标'"};
|
|
workbook = POIUtil.exportExcel(header, body, list);
|
|
workbook = POIUtil.exportExcel(header, body, list);
|
|
response.setContentType("application/octet-stream");
|
|
response.setContentType("application/octet-stream");
|
|
response.setHeader("Content-Disposition", "attachment;filename=replacement-" + DateUtil.getDate(new Date()) + ".xls");
|
|
response.setHeader("Content-Disposition", "attachment;filename=replacement-" + DateUtil.getDate(new Date()) + ".xls");
|
|
@@ -579,6 +651,11 @@ public class TempLittleArtistTrainingCampServiceImpl extends ServiceImpl<TempLit
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
+ public Integer getUserTrainingTime(Integer userId) {
|
|
|
|
+ return sysMusicCompareRecordDao.getUserTrainingTime(userId);
|
|
|
|
+ }
|
|
|
|
+
|
|
private SysUser getUser() {
|
|
private SysUser getUser() {
|
|
return Optional.ofNullable(sysUserFeignService.queryUserInfo())
|
|
return Optional.ofNullable(sysUserFeignService.queryUserInfo())
|
|
.orElseThrow(() -> new BizException("用户信息获取失败,请刷新页面或者重新登录!"));
|
|
.orElseThrow(() -> new BizException("用户信息获取失败,请刷新页面或者重新登录!"));
|