|
@@ -1,9 +1,11 @@
|
|
|
package com.ym.mec.biz.service.impl;
|
|
|
|
|
|
+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;
|
|
@@ -13,24 +15,22 @@ 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;
|
|
|
import com.ym.mec.util.date.DateUtil;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
-import org.apache.poi.ss.formula.functions.T;
|
|
|
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;
|
|
|
|
|
@@ -805,9 +805,110 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public Object countCloudTeacherActive(List<Integer> ids, OrganCloudStudyStudentDataQueryInfo queryInfo) {
|
|
|
+ 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;
|
|
|
}
|