Forráskód Böngészése

Merge remote-tracking branch 'origin/cloud_teacher_active_2021_09' into cloud_teacher_active_2021_09

Joburgess 4 éve
szülő
commit
830600a969

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.dto.CloudTeacherActiveTargetDto;
 import com.ym.mec.biz.dal.dto.OrganVipGroupCategoryCourseNumDto;
 import com.ym.mec.biz.dal.dto.StudentErrorLeaveDto;
 import com.ym.mec.biz.dal.dto.StudentLeaveCourseDto;
@@ -339,4 +340,11 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
     List<IndexBaseMonthData> getCloudStudyLivelyStudentNumData(@Param("dayStr") String dayStr);
 
     List<IndexBaseMonthData> getCloudStudyNewStudentNumData(@Param("dayStr") String dayStr);
+
+    /**
+     * 云教练活动分部统计
+     * @param params
+     * @return
+     */
+    List<CloudTeacherActiveTargetDto> countCloudTeacherActive(Map<String, Object> params);
 }

+ 105 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CloudTeacherActiveTargetDto.java

@@ -0,0 +1,105 @@
+package com.ym.mec.biz.dal.dto;
+
+import java.math.BigDecimal;
+
+public class CloudTeacherActiveTargetDto{
+	private Integer organId;
+
+	private String organName;
+
+	private Integer targetNum = 0;
+
+	private BigDecimal targetAmount = BigDecimal.ZERO;
+
+	private Integer buyNum = 0;
+
+	private Integer totalNum = 0;
+
+	private BigDecimal buyAmount = BigDecimal.ZERO;
+
+	private BigDecimal avgBuyAmount = BigDecimal.ZERO;
+
+	private BigDecimal buyScale = BigDecimal.ZERO;
+
+	private BigDecimal targetFinishScale = BigDecimal.ZERO;
+
+	public String getOrganName() {
+		return organName;
+	}
+
+	public void setOrganName(String organName) {
+		this.organName = organName;
+	}
+
+	public Integer getBuyNum() {
+		return buyNum;
+	}
+
+	public void setBuyNum(Integer buyNum) {
+		this.buyNum = buyNum;
+	}
+
+	public Integer getTotalNum() {
+		return totalNum;
+	}
+
+	public void setTotalNum(Integer totalNum) {
+		this.totalNum = totalNum;
+	}
+
+	public BigDecimal getBuyAmount() {
+		return buyAmount;
+	}
+
+	public void setBuyAmount(BigDecimal buyAmount) {
+		this.buyAmount = buyAmount;
+	}
+
+	public BigDecimal getAvgBuyAmount() {
+		return avgBuyAmount;
+	}
+
+	public void setAvgBuyAmount(BigDecimal avgBuyAmount) {
+		this.avgBuyAmount = avgBuyAmount;
+	}
+
+	public BigDecimal getBuyScale() {
+		return buyScale;
+	}
+
+	public void setBuyScale(BigDecimal buyScale) {
+		this.buyScale = buyScale;
+	}
+
+	public BigDecimal getTargetFinishScale() {
+		return targetFinishScale;
+	}
+
+	public void setTargetFinishScale(BigDecimal targetFinishScale) {
+		this.targetFinishScale = targetFinishScale;
+	}
+
+	public Integer getOrganId() {
+		return organId;
+	}
+
+	public void setOrganId(Integer organId) {
+		this.organId = organId;
+	}
+
+	public Integer getTargetNum() {
+		return targetNum;
+	}
+
+	public void setTargetNum(Integer targetNum) {
+		this.targetNum = targetNum;
+	}
+
+	public BigDecimal getTargetAmount() {
+		return targetAmount;
+	}
+
+	public void setTargetAmount(BigDecimal targetAmount) {
+		this.targetAmount = targetAmount;
+	}
+}

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CloudTeacherActiveQueryInfo.java

@@ -0,0 +1,16 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+
+public class CloudTeacherActiveQueryInfo extends QueryInfo {
+
+    private String organIds;
+
+    public String getOrganIds() {
+        return organIds;
+    }
+
+    public void setOrganIds(String organIds) {
+        this.organIds = organIds;
+    }
+}

+ 10 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/StudentService.java

@@ -12,6 +12,7 @@ import com.ym.mec.biz.dal.entity.CooperationOrgan;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.enums.GradeTypeEnum;
 import com.ym.mec.biz.dal.enums.PeriodEnum;
+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.common.page.PageInfo;
@@ -131,9 +132,16 @@ public interface StudentService extends BaseService<Integer, Student> {
 
     /**
      * 云教练活动统计
-     * @param ids
+     * @param organIds
      * @param queryInfo
      * @return
      */
-    Object countCloudTeacherActive(List<Integer> ids, OrganCloudStudyStudentDataQueryInfo queryInfo);
+    Object countCloudTeacherActive(List<Integer> organIds, CloudTeacherActiveQueryInfo queryInfo);
+
+    /**
+     * 云教练活动统计详情
+     * @param queryInfo
+     * @return
+     */
+    Object countCloudTeacherActiveDetail(CloudTeacherActiveQueryInfo queryInfo);
 }

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupTrainPlanServiceImpl.java

@@ -150,6 +150,10 @@ public class MusicGroupTrainPlanServiceImpl extends BaseServiceImpl<Integer, Mus
 		return musicGroupTrainPlanSaveDto;
 	}
 
+	public static void main(String[] args) {
+
+	}
+
 	@Override
 	public MusicGroupTrainPlanSaveDto getSchoolTerm(CourseSchedule courseSchedule){
 		MusicGroupTrainPlanSaveDto musicGroupTrainPlanSaveDto = new MusicGroupTrainPlanSaveDto();

+ 105 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -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;
     }

+ 22 - 0
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -1820,4 +1820,26 @@
 		HAVING MIN(DATE( smcr.create_time_ ))= #{dayStr}) t
 		GROUP BY t.organ_id_
 	</select>
+	<resultMap id="CloudTeacherActiveTargetDto" type="com.ym.mec.biz.dal.dto.CloudTeacherActiveTargetDto">
+		<result property="organId" column="organ_id_"/>
+		<result property="organName" column="organ_name_"/>
+		<result property="totalNum" column="total_num_"/>
+		<result property="buyAmount" column="buy_amount_"/>
+		<result property="buyNum" column="buy_num_"/>
+	</resultMap>
+    <select id="countCloudTeacherActive" resultMap="CloudTeacherActiveTargetDto">
+		SELECT o.name_ organ_name_,o.id_ organ_id_,CASE WHEN SUM(spo.actual_amount_) IS NULL THEN 0 ELSE SUM(spo.actual_amount_) END buy_amount_,
+		COUNT(DISTINCT spo.user_id_) buy_num_,COUNT(s.user_id_) total_num_ FROM student s
+		LEFT JOIN sys_user su ON su.id_ = s.user_id_
+		LEFT JOIN student_payment_order spo ON spo.user_id_ = s.user_id_ AND spo.type_ = 'RENEW' AND spo.status_ = 'SUCCESS'
+		LEFT JOIN organization o ON o.id_ = su.organ_id_
+		WHERE s.count_flag_ = 1
+		<if test="organIdList != null and organIdList.size > 0">
+			AND su.organ_id_ IN
+			<foreach collection="organIdList" open="(" close=")" item="item" separator=",">
+				#{item}
+			</foreach>
+		</if>
+		GROUP BY su.organ_id_
+	</select>
 </mapper>

+ 18 - 7
mec-web/src/main/java/com/ym/mec/web/controller/StudentManageController.java

@@ -465,10 +465,17 @@ public class StudentManageController extends BaseController {
         return succeed(studentService.queryOrganStudentOverView(ids, queryInfo));
     }
 
+    @ApiOperation(value = "云教练学员数据")
+    @GetMapping("/organStudentData")
+    @PreAuthorize("@pcs.hasPermissions('studentManage/organStudentData')")
+    public HttpResponseResult<StatDto> organStudentData(StudentQueryInfo queryInfo){
+        return succeed(studentService.organStudentData(queryInfo));
+    }
+
     @ApiOperation(value = "云教练活动统计")
-    @GetMapping("/organStudentOverView")
+    @GetMapping("/countCloudTeacherActive")
     @PreAuthorize("@pcs.hasPermissions('studentManage/countCloudTeacherActive')")
-    public Object countCloudTeacherActive(OrganCloudStudyStudentDataQueryInfo queryInfo) throws Exception {
+    public Object countCloudTeacherActive(CloudTeacherActiveQueryInfo queryInfo) throws Exception {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             return failed("用户信息获取失败");
@@ -484,10 +491,14 @@ public class StudentManageController extends BaseController {
         return succeed(studentService.countCloudTeacherActive(ids, queryInfo));
     }
 
-    @ApiOperation(value = "云教练学员数据")
-    @GetMapping("/organStudentData")
-    @PreAuthorize("@pcs.hasPermissions('studentManage/organStudentData')")
-    public HttpResponseResult<StatDto> organStudentData(StudentQueryInfo queryInfo){
-        return succeed(studentService.organStudentData(queryInfo));
+    @ApiOperation(value = "云教练活动统计详情")
+    @GetMapping("/countCloudTeacherActiveDetail")
+    @PreAuthorize("@pcs.hasPermissions('studentManage/countCloudTeacherActiveDetail')")
+    public Object countCloudTeacherActiveDetail(CloudTeacherActiveQueryInfo queryInfo) throws Exception {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        return succeed(studentService.countCloudTeacherActiveDetail(queryInfo));
     }
 }