Jelajahi Sumber

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

Joburgess 3 tahun lalu
induk
melakukan
059037ae01

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -77,4 +78,6 @@ public interface CloudTeacherOrderDao extends BaseDAO<Long, CloudTeacherOrder> {
     String queryActiveOrderPage(@Param("userId") Integer userId,
                                                  @Param("activeRemark") Integer activeRemark,
                                                  @Param("remark") String remark);
+
+    List<Integer> getStudentIds();
 }

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

@@ -347,4 +347,10 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
      * @return
      */
     List<CloudTeacherActiveTargetDto> countCloudTeacherActive(Map<String, Object> params);
+
+    /**
+     * 获取各分部学员总人数
+     * @return
+     */
+    List<Map<String, Long>> countTotalStudentNum();
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java

@@ -687,4 +687,11 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
      * @return
      */
     List<Integer> queryHasMemberGroupStudent();
+
+    /**
+     * 获取云教练活动分部目标
+     * @return
+     */
+    List<CloudTeacherActiveTargetJsonDto> queryOrganTarget();
+
 }

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysCouponCodeDao.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.dto.HorseRaceLampDto;
 import com.ym.mec.biz.dal.dto.SysCouponCodeDto;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.biz.dal.entity.SysCouponCode;
@@ -26,4 +27,17 @@ public interface SysCouponCodeDao extends BaseDAO<Long, SysCouponCode> {
     List<SysCouponCodeDto> querySysCouponUseList(Map<String, Object> params);
     int countSysCouponUseList(Map<String, Object> params);
 
+    /**
+     * 获取优惠券跑马灯
+     * @param params
+     * @return
+     */
+    int countHorseRaceLampDtoList(Map<String, Object> params);
+
+    /**
+     * 获取优惠券跑马灯
+     * @param params
+     * @return
+     */
+    List<HorseRaceLampDto> queryHorseRaceLampDtoList(Map<String, Object> params);
 }

+ 35 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CloudTeacherActiveTargetJsonDto.java

@@ -0,0 +1,35 @@
+package com.ym.mec.biz.dal.dto;
+
+import java.math.BigDecimal;
+
+public class CloudTeacherActiveTargetJsonDto {
+	private Integer organId;
+
+	private Integer targetNum = 0;
+
+	private BigDecimal targetAmount = BigDecimal.ZERO;
+
+	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;
+	}
+}

+ 36 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/HorseRaceLampDto.java

@@ -0,0 +1,36 @@
+package com.ym.mec.biz.dal.dto;
+
+import java.math.BigDecimal;
+
+public class HorseRaceLampDto {
+
+    private Integer num;
+
+    private BigDecimal faceValue;
+
+    private String username;
+
+    public Integer getNum() {
+        return num;
+    }
+
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+
+    public BigDecimal getFaceValue() {
+        return faceValue;
+    }
+
+    public void setFaceValue(BigDecimal faceValue) {
+        this.faceValue = faceValue;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+}

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/OrganizationService.java

@@ -9,7 +9,7 @@ import java.util.*;
 
 public interface OrganizationService extends BaseService<Integer, Organization> {
 
-    Set<Integer>  EXCLUDE_ORGAN_IDS = new HashSet<>(Arrays.asList(36,39,41,42,43,44,45,46,47,48,49,50,52,54,55,56));
+    Set<Integer>  EXCLUDE_ORGAN_IDS = new HashSet<>(Arrays.asList(36,38,39,41,42,43,44,45,46,47,48,49,50,52,54,55,56));
 
     /**
      * 获取节点树状结构

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysCouponCodeService.java

@@ -1,9 +1,11 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.HorseRaceLampDto;
 import com.ym.mec.biz.dal.dto.SysCouponCodeDto;
 import com.ym.mec.biz.dal.entity.SysCouponCode;
 import com.ym.mec.biz.dal.page.SysCouponCodeQueryInfo;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
 
 public interface SysCouponCodeService extends BaseService<Long, SysCouponCode> {
@@ -29,4 +31,10 @@ public interface SysCouponCodeService extends BaseService<Long, SysCouponCode> {
      */
     PageInfo<SysCouponCodeDto> querySysCouponUseList(SysCouponCodeQueryInfo queryInfo);
 
+    /**
+     * 获取优惠券跑马灯
+     * @param queryInfo
+     * @return
+     */
+    PageInfo<HorseRaceLampDto> queryHorseRaceLampDtoList(QueryInfo queryInfo);
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MemberRankSettingServiceImpl.java

@@ -126,6 +126,9 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
 			return;
 		}
 		if(activeRemark.equals(202109)){
+			if(remark.equals("单月")){
+				return;
+			}
 			StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.findByUserAndActive(userId,activeRemark,remark,null);
 			if(studentPaymentOrder != null){
 				DealStatusEnum status = studentPaymentOrder.getStatus();

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
@@ -792,9 +793,16 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         //清除标记
         studentDao.cleanCountFlag();
         //打标记
+        List<Integer> studentIds = new ArrayList<>();
         //获取在会员团的学员
-        List<Integer> studentIds = studentRegistrationDao.queryHasMemberGroupStudent();
+        studentIds.addAll(studentRegistrationDao.queryHasMemberGroupStudent());
+        //获取购买过云教练(非活动)的学员
+        studentIds.addAll(cloudTeacherOrderDao.getStudentIds());
         studentDao.remarkCountFlag(studentIds);
+        //更新目标学员、目标金额
+        SysConfig config = sysConfigDao.findByParamName("cloud_teacher_active_target");
+        config.setParanValue(JSON.toJSONString(studentRegistrationDao.queryOrganTarget()));
+        sysConfigDao.update(config);
     }
 
     @Override
@@ -808,10 +816,17 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         }
         List<CloudTeacherActiveTargetDto> targetDtoList = JSONArray.parseArray(cloudTeacherActiveTarget, CloudTeacherActiveTargetDto.class);
         Map<Integer, List<CloudTeacherActiveTargetDto>> targetMap = targetDtoList.stream().collect(Collectors.groupingBy(e -> e.getOrganId()));
-
+        //获取各分部总人数
+        List<Map<String, Long>> maps = indexBaseMonthDataDao.countTotalStudentNum();
+        Map<String, Long> organStudentNumMap = new HashMap<>(20);
+        if(maps != null && maps.size() > 0){
+            organStudentNumMap = MapUtil.convertIntegerMap(maps);
+        }
         params.put("organIdList",organIdList);
         List<CloudTeacherActiveTargetDto> resultList = indexBaseMonthDataDao.countCloudTeacherActive(params);
         for (CloudTeacherActiveTargetDto dto : resultList) {
+            Long aLong = organStudentNumMap.get(dto.getOrganId().toString());
+            dto.setTotalNum(aLong==null?0:aLong.intValue());
             List<CloudTeacherActiveTargetDto> targetDtos = targetMap.get(dto.getOrganId());
             if(targetDtos != null && targetDtos.size() > 0){
                 CloudTeacherActiveTargetDto target = targetDtos.get(0);
@@ -819,7 +834,7 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
                 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).multiply(new BigDecimal(100));
+                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){
@@ -846,7 +861,7 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         resultMap.put("buyScale",0);
         resultMap.put("targetFinishScale",0);
         if(buyAmount.doubleValue() > 0d && buyNum > 0){
-            BigDecimal avgBuyAmount = buyAmount.divide(new BigDecimal(buyNum), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100));
+            BigDecimal avgBuyAmount = buyAmount.divide(new BigDecimal(buyNum), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
             resultMap.put("avgBuyAmount",avgBuyAmount);
         }
         if(totalNum > 0 && buyNum > 0){

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysCouponCodeServiceImpl.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.service.impl;
 import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
 import com.ym.mec.biz.dal.dao.SysCouponCodeDao;
 import com.ym.mec.biz.dal.dao.SysCouponDao;
+import com.ym.mec.biz.dal.dto.HorseRaceLampDto;
 import com.ym.mec.biz.dal.dto.SysCouponCodeDto;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.entity.SysCoupon;
@@ -13,6 +14,7 @@ import com.ym.mec.biz.service.SysCouponService;
 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.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
@@ -124,4 +126,21 @@ public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCod
 		pageInfo.setRows(dataList);
 		return pageInfo;
 	}
+
+    @Override
+    public PageInfo<HorseRaceLampDto> queryHorseRaceLampDtoList(QueryInfo queryInfo) {
+		PageInfo<HorseRaceLampDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<HorseRaceLampDto> dataList = new ArrayList<>();
+		int count = sysCouponCodeDao.countHorseRaceLampDtoList(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = sysCouponCodeDao.queryHorseRaceLampDtoList(params);
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+    }
 }

+ 6 - 3
mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml

@@ -249,15 +249,18 @@
         LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_ AND mg.status_ = 'PROGRESS'
         <include refid="queryCloudTeacherActiveDetailSql"/>
     </select>
-    <select id="queryActiveOrderPage" resultMap="CloudTeacherOrder">
+    <select id="queryActiveOrderPage" resultType="string">
         SELECT GROUP_CONCAT(DISTINCT cto.remark_) FROM cloud_teacher_order cto
         LEFT JOIN student_payment_order spo ON spo.id_ = cto.order_id_
-        WHERE spo.status_ IN ('ING','SUCCESS') AND cto.active_remark_ = #{activeRemark}
-        AND cto.student_id_ = #{userId}
+        WHERE spo.status_ = 'SUCCESS' AND cto.active_remark_ = #{activeRemark}
+        AND cto.student_id_ = #{userId} AND cto.remark_ != '单月'
         <if test="remark != null and remark != ''">
             AND cto.remark_ = #{remark}
         </if>
     </select>
+    <select id="getStudentIds" resultType="java.lang.Integer">
+        SELECT DISTINCT student_id_ FROM cloud_teacher_order WHERE active_remark_ IS NULL AND status_ != 0
+    </select>
     <sql id="queryCloudTeacherActiveDetailSql">
         <where>
             cto.status_ != 0 AND cto.active_remark_ = '202109'

+ 12 - 3
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -1826,14 +1826,17 @@
 		<result property="totalNum" column="total_num_"/>
 		<result property="buyAmount" column="buy_amount_"/>
 		<result property="buyNum" column="buy_num_"/>
+		<result property="targetAmount" column="target_amount_"/>
+		<result property="targetNum" column="target_num_"/>
 	</resultMap>
     <select id="countCloudTeacherActive" resultMap="CloudTeacherActiveTargetDto">
 		SELECT o.name_ organ_name_,o.id_ organ_id_,CASE WHEN SUM(cto.amount_) IS NULL THEN 0 ELSE SUM(cto.amount_) END buy_amount_,
-		COUNT(DISTINCT cto.student_id_) buy_num_,COUNT(s.user_id_) total_num_ FROM student s
-		LEFT JOIN sys_user su ON su.id_ = s.user_id_
+		COUNT(DISTINCT cto.student_id_) buy_num_
+		FROM student s
 		LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = s.user_id_ AND cto.status_ != 0 AND cto.active_remark_ = '202109'
+		LEFT JOIN sys_user su ON su.id_ = s.user_id_
 		LEFT JOIN organization o ON o.id_ = su.organ_id_
-		WHERE s.count_flag_ = 1
+		WHERE 1=1
 		<if test="organIdList != null and organIdList.size > 0">
 			AND su.organ_id_ IN
 			<foreach collection="organIdList" open="(" close=")" item="item" separator=",">
@@ -1842,4 +1845,10 @@
 		</if>
 		GROUP BY su.organ_id_
 	</select>
+	<select id="countTotalStudentNum" resultType="java.util.Map">
+		SELECT su.organ_id_ 'key',COUNT(DISTINCT s.user_id_) 'value' FROM student s
+		LEFT JOIN sys_user su ON su.id_ = s.user_id_
+		WHERE s.count_flag_ = 1
+		GROUP BY su.organ_id_
+	</select>
 </mapper>

+ 1 - 1
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml

@@ -999,7 +999,7 @@
     <select id="findByUserAndActive" resultMap="StudentPaymentOrder">
         SELECT spo.* FROM cloud_teacher_order cto
         LEFT JOIN student_payment_order spo ON spo.id_ = cto.order_id_
-        WHERE spo.status_ NOT ('SUCCESS','ING') AND cto.active_remark_ = #{activeRemark}
+        WHERE spo.status_ IN ('SUCCESS','ING') AND cto.active_remark_ = #{activeRemark}
         AND cto.remark_ = #{remark} AND cto.student_id_ = #{userId}
         <if test="status != null and status != ''">
             AND spo.status_ = #{status}

+ 29 - 0
mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml

@@ -1702,4 +1702,33 @@
         LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_
         WHERE sr.music_group_status_ != 'QUIT' AND mg.status_ NOT IN ('CANCELED','CLOSE') AND mg.course_view_type_ = 2
     </select>
+    <resultMap id="CloudTeacherActiveTargetJsonDto" type="com.ym.mec.biz.dal.dto.CloudTeacherActiveTargetJsonDto">
+        <result property="targetNum" column="target_num_"/>
+        <result property="targetAmount" column="target_amount_"/>
+        <result property="organId" column="organ_id_"/>
+    </resultMap>
+    <select id="queryOrganTarget" resultMap="CloudTeacherActiveTargetJsonDto">
+        SELECT su.organ_id_,COUNT(DISTINCT su.id_) target_num_,COUNT(DISTINCT su.id_) * 2040 target_amount_ FROM student_registration sr
+        LEFT JOIN sys_user su  ON sr.user_id_ = su.id_
+        LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_
+        -- 新用户
+        WHERE su.id_ NOT IN (SELECT DISTINCT(cssp.`user_id_`)  FROM `course_schedule_student_payment` cssp
+        LEFT JOIN course_schedule cs on cssp.`course_schedule_id_` = cs.`id_`
+        LEFT JOIN `music_group` mg on mg.`id_` = cssp.`music_group_id_`
+        WHERE cs.`group_type_` = 'MUSIC' AND cs.`status_` = 'OVER' AND mg.`status_` = 'PROGRESS'
+        GROUP BY cssp.`user_id_` HAVING COUNT(cs.`id_`) &lt;= 4)
+        -- 			非管乐
+        AND su.id_ NOT IN (SELECT user_id_ FROM student WHERE subject_id_list_ REGEXP '21|25|26|27|28|29')
+        -- 			声部排除
+        AND su.organ_id_ NOT IN (36,38,39,41,42,43,44,45,46,47,48,49,50,52,54,55,56,63)
+        -- 			购买了云教练
+        AND su.id_ NOT IN (SELECT DISTINCT student_id_ FROM cloud_teacher_order WHERE active_remark_ IS NULL AND status_ != 0)
+        -- 			未退团,不是会员团
+        AND su.id_ NOT IN (SELECT DISTINCT sr.user_id_ FROM student_registration sr
+        LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_
+        WHERE sr.music_group_status_ != 'QUIT' AND mg.course_view_type_ = 2)
+
+        AND sr.music_group_status_ = 'NORMAL' AND mg.course_view_type_ != 2 AND mg.`status_` = 'PROGRESS'
+        GROUP BY su.organ_id_
+    </select>
 </mapper>

+ 19 - 0
mec-biz/src/main/resources/config/mybatis/SysCouponCodeMapper.xml

@@ -190,4 +190,23 @@
 			LEFT JOIN organization organ ON su.organ_id_=organ.id_
 		<include refid="querySysCouponUseListCondition"></include>
 	</select>
+	<resultMap id="HorseRaceLampDto" type="com.ym.mec.biz.dal.dto.HorseRaceLampDto">
+		<result property="username" column="username_"/>
+		<result property="num" column="num_"/>
+		<result property="faceValue" column="face_value_"/>
+	</resultMap>
+	<select id="queryHorseRaceLampDtoList" resultMap="HorseRaceLampDto">
+		SELECT COUNT(suc.coupon_id_) num_,sc.face_value_,su.username_ FROM sys_coupon_code suc
+		LEFT JOIN sys_user su ON su.id_ = suc.user_id_
+		LEFT JOIN sys_coupon sc ON sc.id_ = suc.coupon_id_
+		GROUP BY suc.user_id_,suc.payment_order_id_,suc.coupon_id_
+		<include refid="global.limit"/>
+	</select>
+	<select id="countHorseRaceLampDtoList" resultType="java.lang.Integer">
+		SELECT COUNT(t.num_) FROM (
+		SELECT COUNT(suc.coupon_id_) num_,sc.face_value_,su.username_ FROM sys_coupon_code suc
+		LEFT JOIN sys_user su ON su.id_ = suc.user_id_
+		LEFT JOIN sys_coupon sc ON sc.id_ = suc.coupon_id_
+		GROUP BY suc.user_id_,suc.payment_order_id_,suc.coupon_id_)t
+	</select>
 </mapper>

+ 4 - 3
mec-student/src/main/java/com/ym/mec/student/controller/SysCouponCodeController.java

@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.page.SysCouponCodeQueryInfo;
 import com.ym.mec.biz.service.SysCouponCodeService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,9 +36,9 @@ public class SysCouponCodeController extends BaseController {
 		return succeed(sysCouponCodeService.querySysCouponUseList(queryInfo));
 	}
 
-	@ApiOperation("分页查询")
+	@ApiOperation("获取云教练活动跑马灯")
 	@RequestMapping(value = "queryPageAll")
-	public HttpResponseResult queryPageAll(SysCouponCodeQueryInfo queryInfo) {
-		return succeed(sysCouponCodeService.querySysCouponUseList(queryInfo));
+	public HttpResponseResult queryPageAll(QueryInfo queryInfo) {
+		return succeed(sysCouponCodeService.queryHorseRaceLampDtoList(queryInfo));
 	}
 }