|
|
@@ -1,10 +1,12 @@
|
|
|
package com.ym.mec.biz.service.impl;
|
|
|
|
|
|
import com.ym.mec.auth.api.entity.SysUser;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
import com.ym.mec.biz.dal.dao.*;
|
|
|
import com.ym.mec.biz.dal.dto.*;
|
|
|
import com.ym.mec.biz.dal.entity.*;
|
|
|
import com.ym.mec.biz.dal.enums.*;
|
|
|
+import com.ym.mec.biz.dal.page.CloudTeacherActiveQueryInfo;
|
|
|
import com.ym.mec.biz.dal.page.OrganCloudStudyStudentDataQueryInfo;
|
|
|
import com.ym.mec.biz.dal.page.StudentQueryInfo;
|
|
|
import com.ym.mec.biz.service.StudentService;
|
|
|
@@ -14,7 +16,6 @@ import com.ym.mec.common.constant.CommonConstants;
|
|
|
import com.ym.mec.common.dal.BaseDAO;
|
|
|
import com.ym.mec.common.exception.BizException;
|
|
|
import com.ym.mec.common.page.PageInfo;
|
|
|
-import com.ym.mec.common.page.QueryInfo;
|
|
|
import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
|
import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
|
|
|
import com.ym.mec.util.collection.MapUtil;
|
|
|
@@ -26,13 +27,13 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
-import sun.nio.cs.ext.Big5;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.time.LocalDate;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
|
|
|
import static com.ym.mec.biz.dal.enums.IndexDataType.CLOUD_NEW_STUDENT_NUM;
|
|
|
|
|
|
@@ -764,23 +765,6 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
|
|
|
organsNewCloudStudyNumMap = MapUtil.convertIntegerMap(organsNewCloudStudyNumMapList);
|
|
|
}
|
|
|
|
|
|
- //获取新增人数占比(已上乐团课小于等于4)
|
|
|
- //获取有在读学员的乐团编号
|
|
|
- //获取有在读学员的学员编号
|
|
|
-// List<String> musicGroupIds = studentRegistrationDao.findMusicGroupIds();
|
|
|
-// List<Integer> studentIdList = studentRegistrationDao.findStudentIds();
|
|
|
-// List<BaseMapDto<Integer, Long>> studentMusicCourseNum = studentDao.getOrganCloudNewStudentNum(musicGroupIds,studentIdList);
|
|
|
-// //获取有乐团没排课的数据
|
|
|
-// List<Integer> noCourseStudentIdList = studentRegistrationDao.findNoCourseStudentIds();
|
|
|
-// List<Integer> userIdList = new ArrayList<>();
|
|
|
-// if(!CollectionUtils.isEmpty(studentMusicCourseNum)){
|
|
|
-// List<BaseMapDto<Integer, Long>> collect = studentMusicCourseNum.stream().filter(e -> e.getValue() < 5).collect(Collectors.toList());
|
|
|
-// userIdList = collect.stream().map(e -> e.getKey()).collect(Collectors.toList());
|
|
|
-// }
|
|
|
-// userIdList.addAll(noCourseStudentIdList);
|
|
|
-// List<Map<Long, Long>> organsNewCloudNewStudentNumMapList = studentDao.groupOrganId(organIds,userIdList);
|
|
|
-// Map<String, Long> organsNewCloudNewStudentNumMap = MapUtil.convertIntegerMap(organsNewCloudNewStudentNumMapList);
|
|
|
-
|
|
|
List<IndexBaseMonthData> withDayAndDataType = indexBaseMonthDataDao.getWithDayAndDataType(LocalDate.now().toString(), CLOUD_NEW_STUDENT_NUM);
|
|
|
Map<Integer, Integer> organsNewCloudNewStudentNumMap = withDayAndDataType.stream().collect(Collectors.toMap(IndexBaseMonthData::getOrganId, e -> e.getActivateNum().intValue(), (e1, e2) -> e1));
|
|
|
|
|
|
@@ -796,9 +780,6 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
|
|
|
if(organsVipStudentNumMap.containsKey(organ.getId().toString())){
|
|
|
organStudentVipData.setVipStudentNum(organsVipStudentNumMap.get(organ.getId().toString()).intValue());
|
|
|
}
|
|
|
-// if(organsEVipStudentNumMap.containsKey(organ.getId().toString())){
|
|
|
-// organStudentVipData.seteVipStudentNum(organsEVipStudentNumMap.get(organ.getId().toString()).intValue());
|
|
|
-// }
|
|
|
if(organCloudStudyStudentNumMap.containsKey(organ.getId().toString())){
|
|
|
organStudentVipData.setCloudStudyUseStudentNum(organCloudStudyStudentNumMap.get(organ.getId().toString()).intValue());
|
|
|
}
|
|
|
@@ -925,4 +906,121 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
|
|
|
public void cleanStudentCloudStudySequenceDays() {
|
|
|
studentDao.cleanStudentCloudStudySequenceDays();
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void remarkCountFlag() {
|
|
|
+ //清除标记
|
|
|
+ studentDao.cleanCountFlag();
|
|
|
+ //打标记
|
|
|
+ studentDao.remarkCountFlag();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Object countCloudTeacherActive(List<Integer> organIdList, CloudTeacherActiveQueryInfo queryInfo) {
|
|
|
+ Map<String, Object> params = new HashMap<String, Object>();
|
|
|
+ MapUtil.populateMap(params, queryInfo);
|
|
|
+ //获取分部目标
|
|
|
+ String cloudTeacherActiveTarget = sysConfigDao.findConfigValue(SysConfigService.CLOUD_TEACHER_ACTIVE_TARGET);
|
|
|
+ if(StringUtils.isEmpty(cloudTeacherActiveTarget)){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ List<CloudTeacherActiveTargetDto> targetDtoList = JSONArray.parseArray(cloudTeacherActiveTarget, CloudTeacherActiveTargetDto.class);
|
|
|
+ Map<Integer, List<CloudTeacherActiveTargetDto>> targetMap = targetDtoList.stream().collect(Collectors.groupingBy(e -> e.getOrganId()));
|
|
|
+
|
|
|
+ params.put("organIdList",organIdList);
|
|
|
+ List<CloudTeacherActiveTargetDto> resultList = indexBaseMonthDataDao.countCloudTeacherActive(params);
|
|
|
+ for (CloudTeacherActiveTargetDto dto : resultList) {
|
|
|
+ List<CloudTeacherActiveTargetDto> targetDtos = targetMap.get(dto.getOrganId());
|
|
|
+ if(targetDtos != null && targetDtos.size() > 0){
|
|
|
+ CloudTeacherActiveTargetDto target = targetDtos.get(0);
|
|
|
+ dto.setTargetNum(target.getTargetNum());
|
|
|
+ dto.setTargetAmount(target.getTargetAmount());
|
|
|
+ }
|
|
|
+ if(dto.getBuyAmount().doubleValue() > 0d && dto.getBuyNum() > 0){
|
|
|
+ BigDecimal avgBuyAmount = dto.getBuyAmount().divide(new BigDecimal(dto.getBuyNum()), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
|
|
|
+ dto.setAvgBuyAmount(avgBuyAmount);
|
|
|
+ }
|
|
|
+ if(dto.getTotalNum() > 0 && dto.getBuyNum() > 0){
|
|
|
+ BigDecimal buyScale = new BigDecimal(dto.getBuyNum()).divide(new BigDecimal(dto.getTotalNum()), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
|
|
|
+ dto.setBuyScale(buyScale);
|
|
|
+ }
|
|
|
+ if(dto.getTargetNum() > 0 && dto.getBuyNum() > 0){
|
|
|
+ BigDecimal targetFinishScale = new BigDecimal(dto.getBuyNum()).divide(new BigDecimal(dto.getTargetNum()), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
|
|
|
+ dto.setTargetFinishScale(targetFinishScale);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Map<String,Object> resultMap = new HashMap<>(7);
|
|
|
+ BigDecimal buyAmount = resultList.stream().map(CloudTeacherActiveTargetDto::getBuyAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ resultMap.put("buyAmount",buyAmount);
|
|
|
+ Integer buyNum = resultList.stream().mapToInt(CloudTeacherActiveTargetDto::getBuyNum).sum();
|
|
|
+ resultMap.put("buyNum",buyNum);
|
|
|
+ Integer totalNum = resultList.stream().mapToInt(CloudTeacherActiveTargetDto::getTotalNum).sum();
|
|
|
+ resultMap.put("totalNum",totalNum);
|
|
|
+ Integer targetNum = resultList.stream().mapToInt(CloudTeacherActiveTargetDto::getTargetNum).sum();
|
|
|
+ resultMap.put("targetNum",targetNum);
|
|
|
+ if(buyAmount.doubleValue() > 0d && buyNum > 0){
|
|
|
+ BigDecimal avgBuyAmount = buyAmount.divide(new BigDecimal(buyNum), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
|
|
|
+ resultMap.put("avgBuyAmount",avgBuyAmount);
|
|
|
+ }
|
|
|
+ if(totalNum > 0 && buyNum > 0){
|
|
|
+ BigDecimal buyScale = new BigDecimal(buyNum).divide(new BigDecimal(totalNum), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
|
|
|
+ resultMap.put("buyScale",buyScale);
|
|
|
+ }
|
|
|
+ if(targetNum > 0 && buyNum > 0){
|
|
|
+ BigDecimal targetFinishScale = new BigDecimal(buyNum).divide(new BigDecimal(targetNum), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
|
|
|
+ resultMap.put("targetFinishScale",targetFinishScale);
|
|
|
+ }
|
|
|
+ Map<String,Object> result = new HashMap<>(2);
|
|
|
+ result.put("head",resultMap);
|
|
|
+ String sort = queryInfo.getSort();
|
|
|
+ if(StringUtils.isEmpty(sort)){
|
|
|
+ sort = "totalAmount";
|
|
|
+ }
|
|
|
+ String order = queryInfo.getOrder();
|
|
|
+ switch (sort){
|
|
|
+ case "totalAmount":
|
|
|
+ if("DESC".equalsIgnoreCase(order)){
|
|
|
+ resultList = resultList.stream().sorted(Comparator.comparing(CloudTeacherActiveTargetDto::getBuyAmount,Comparator.reverseOrder())).collect(Collectors.toList());
|
|
|
+ }else {
|
|
|
+ resultList = resultList.stream().sorted(Comparator.comparing(CloudTeacherActiveTargetDto::getBuyAmount)).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "buyNum":
|
|
|
+ if("DESC".equalsIgnoreCase(order)){
|
|
|
+ resultList = resultList.stream().sorted(Comparator.comparing(CloudTeacherActiveTargetDto::getBuyNum,Comparator.reverseOrder())).collect(Collectors.toList());
|
|
|
+ }else {
|
|
|
+ resultList = resultList.stream().sorted(Comparator.comparing(CloudTeacherActiveTargetDto::getBuyNum)).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "avgBuyAmount":
|
|
|
+ if("DESC".equalsIgnoreCase(order)){
|
|
|
+ resultList = resultList.stream().sorted(Comparator.comparing(CloudTeacherActiveTargetDto::getAvgBuyAmount,Comparator.reverseOrder())).collect(Collectors.toList());
|
|
|
+ }else {
|
|
|
+ resultList = resultList.stream().sorted(Comparator.comparing(CloudTeacherActiveTargetDto::getAvgBuyAmount)).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "buyScale":
|
|
|
+ if("DESC".equalsIgnoreCase(order)){
|
|
|
+ resultList = resultList.stream().sorted(Comparator.comparing(CloudTeacherActiveTargetDto::getBuyScale,Comparator.reverseOrder())).collect(Collectors.toList());
|
|
|
+ }else {
|
|
|
+ resultList = resultList.stream().sorted(Comparator.comparing(CloudTeacherActiveTargetDto::getBuyScale)).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "targetFinishScale":
|
|
|
+ if("DESC".equalsIgnoreCase(order)){
|
|
|
+ resultList = resultList.stream().sorted(Comparator.comparing(CloudTeacherActiveTargetDto::getTargetFinishScale,Comparator.reverseOrder())).collect(Collectors.toList());
|
|
|
+ }else {
|
|
|
+ resultList = resultList.stream().sorted(Comparator.comparing(CloudTeacherActiveTargetDto::getTargetFinishScale)).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ result.put("resultList",resultList);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Object countCloudTeacherActiveDetail(CloudTeacherActiveQueryInfo queryInfo) {
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
}
|