浏览代码

update 学生增加服务指标,运营指标标记

周箭河 5 年之前
父节点
当前提交
8fceac45f1

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleEvaluateDao.java

@@ -122,7 +122,7 @@ public interface CourseScheduleEvaluateDao extends BaseDAO<Long, CourseScheduleE
      * @param studentIds
      * @return
      */
-    List<Practice4OrganDto> getPracticeTryNums(@Param("studentIds") String studentIds);
+    List<Practice4OrganDto> getPracticeTryNums(@Param("studentIds") int[] studentIds);
 
     /**
      * vip课体验人数
@@ -138,7 +138,7 @@ public interface CourseScheduleEvaluateDao extends BaseDAO<Long, CourseScheduleE
      * @param studentIds
      * @return
      */
-    List<Practice4OrganDto> getPracticeBuyNums(@Param("classDate") Date classDate, @Param("endDate") Date endDate, @Param("studentIds") String studentIds);
+    List<Practice4OrganDto> getPracticeBuyNums(@Param("classDate") Date classDate, @Param("endDate") Date endDate, @Param("studentIds") int[] studentIds);
 
     /**
      * VIP课转化人数

+ 18 - 15
mec-biz/src/main/resources/config/mybatis/CourseScheduleEvaluateMapper.xml

@@ -334,7 +334,10 @@
         LEFT JOIN student s ON s.user_id_ = pg.student_id_
         WHERE pg.group_status_ IN ('NORMAL', 'FINISH')
         <if test="studentIds != null">
-            AND FIND_IN_SET(pg.student_id_,#{studentIds})
+            AND pg.student_id_ IN
+            <foreach collection="studentIds" item="studentId" open="(" separator="," close=")">
+                #{studentId}
+            </foreach>
         </if>
         AND pg.buy_months_ >=1
         AND s.operating_tag_ = 0
@@ -356,15 +359,15 @@
     </select>
 
     <select id="getVipBuyNums" resultMap="practice4Organ">
-        SELECT vg.organ_id_, COUNT(DISTINCT cssp.user_id_) vip_num_
+        SELECT vg.organ_id_, COUNT(DISTINCT cssp.user_id_) vip_num_, GROUP_CONCAT(DISTINCT cssp.user_id_) student_ids_
         FROM course_schedule_student_payment cssp
         LEFT JOIN vip_group vg ON cssp.music_group_id_ = vg.id_ AND cssp.group_type_ = 'VIP'
         LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_ AND cs.teach_mode_ = 'ONLINE'
-        WHERE CONCAT(cs.class_date_, ' ', cs.end_class_time_) >= #{classDate}
+        WHERE vg.organ_id_ >= 1
+        AND CONCAT(cs.class_date_, ' ', cs.end_class_time_) >= #{classDate}
         <if test="endDate != null">
             <![CDATA[AND CONCAT(cs.class_date_, ' ', cs.end_class_time_) < #{endDate}]]>
         </if>
-        AND vg.organ_id_ >= 1
         AND (cs.is_lock_ IS NULL OR cs.is_lock_=0)
         AND cs.teach_mode_ = 'ONLINE'
         GROUP BY vg.organ_id_
@@ -380,25 +383,25 @@
         <if test="endDate != null">
             <![CDATA[AND CONCAT(cs.class_date_, ' ', cs.end_class_time_) < #{endDate}]]>
         </if>
+        <if test="studentIds != null">
+            AND cssp.user_id_ IN
+            <foreach collection="studentIds" item="studentId" open="(" separator="," close=")">
+                #{studentId}
+            </foreach>
+        </if>
         AND pg.buy_months_ >= 1
         AND (cs.is_lock_ IS NULL OR cs.is_lock_=0)
         GROUP BY pg.organ_id_
     </select>
 
     <select id="getPracticeAndVipNums" resultMap="practice4Organ">
-        SELECT pg.organ_id_, COUNT(DISTINCT cssp2.user_id_) practice_num_
+        SELECT pg.organ_id_, COUNT(DISTINCT cssp.user_id_) practice_num_
         FROM course_schedule_student_payment cssp
-        LEFT JOIN course_schedule_student_payment cssp2 ON cssp.user_id_ = cssp2.user_id_ AND cssp2.group_type_ = 'VIP'
-        LEFT JOIN practice_group pg ON cssp.music_group_id_ = pg.id_ AND cssp.group_type_ = 'PRACTICE'
-        LEFT JOIN course_schedule cs ON cs.id_ = cssp2.course_schedule_id_ AND cs.teach_mode_ = 'ONLINE'
+                 LEFT JOIN course_schedule_student_payment cssp2
+                           ON cssp.user_id_ = cssp2.user_id_ AND cssp2.group_type_ = 'VIP'
+                 LEFT JOIN practice_group pg ON cssp.music_group_id_ = pg.id_ AND cssp.group_type_ = 'PRACTICE'
+                 LEFT JOIN course_schedule cs ON cs.id_ = cssp2.course_schedule_id_ AND cs.teach_mode_ = 'ONLINE'
         WHERE cssp.group_type_ = 'PRACTICE'
-        AND cs.teach_mode_ = 'ONLINE'
-        AND CONCAT(cs.class_date_, ' ', cs.end_class_time_) >= #{classDate}
-        <if test="endDate != null">
-            <![CDATA[AND CONCAT(cs.class_date_, ' ', cs.end_class_time_) < #{endDate}]]>
-        </if>
-        AND pg.buy_months_ >=1
-        AND (cs.is_lock_ IS NULL OR cs.is_lock_=0)
         GROUP by pg.organ_id_
     </select>
 </mapper>

+ 47 - 8
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -4,6 +4,7 @@ import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.OrderTypeEnum;
 import com.ym.mec.util.date.DateUtil;
+import freemarker.template.utility.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -492,18 +493,36 @@ public class StudentOrderController extends BaseController {
 
     @GetMapping("/getPracticeStatis")
     public HttpResponseResult getPracticeStatis() {
+        Date nowDate = new Date();
         List<Organization> organs = organizationDao.findAllOrgans();
         //除去禁止的体验人数
         List<Practice4OrganDto> organTryNums = courseScheduleEvaluateDao.getTryNums();
         List<Practice4OrganDto> organPracticeTryNums = courseScheduleEvaluateDao.getPracticeTryNums(null);
         List<Practice4OrganDto> organVipTryNums = courseScheduleEvaluateDao.getVipTryNums();
         String studentIds = organVipTryNums.stream().map(Practice4OrganDto::getStudentIds).collect(Collectors.joining(","));
-        List<Practice4OrganDto> organPracticeAndVipTryNums = courseScheduleEvaluateDao.getPracticeTryNums(studentIds);
-        List<Practice4OrganDto> practiceBuyNums = courseScheduleEvaluateDao.getPracticeBuyNums(new Date(), null, null);
-        List<Practice4OrganDto> vipBuyNums = courseScheduleEvaluateDao.getVipBuyNums(new Date(), null);
-
-        List<Practice4OrganDto> practiceAndVipBuyNums = courseScheduleEvaluateDao.getPracticeAndVipNums(new Date(), null);
-        Date startTime = DateUtil.getFirstDayOfMonth(new Date());
+        List<Practice4OrganDto> organPracticeAndVipTryNums = new ArrayList<>();
+        if(!studentIds.isEmpty()) {
+            String[] studentIdsArr = studentIds.split(",");
+            int[] userIds = new int[studentIdsArr.length];
+            for (int i = 0; i < studentIdsArr.length; i++) {
+                userIds[i] = Integer.parseInt(studentIdsArr[i]);
+            }
+            organPracticeAndVipTryNums = courseScheduleEvaluateDao.getPracticeTryNums(userIds);
+        }
+        List<Practice4OrganDto> practiceBuyNums = courseScheduleEvaluateDao.getPracticeBuyNums(nowDate, null, null);
+        List<Practice4OrganDto> vipBuyNums = courseScheduleEvaluateDao.getVipBuyNums(nowDate, null);
+
+        List<Practice4OrganDto> practiceAndVipBuyNums = new ArrayList<>();
+        studentIds = vipBuyNums.stream().filter(practice4OrganDto -> practice4OrganDto.getOrganId() != null).map(Practice4OrganDto::getStudentIds).collect(Collectors.joining(","));
+        if (!studentIds.isEmpty()) {
+            String[] studentIdsArr = studentIds.split(",");
+            int[] userIds = new int[studentIdsArr.length];
+            for (int i = 0; i < studentIdsArr.length; i++) {
+                userIds[i] = Integer.parseInt(studentIdsArr[i]);
+            }
+            practiceAndVipBuyNums = courseScheduleEvaluateDao.getPracticeBuyNums(nowDate, null, userIds);
+        }
+        Date startTime = DateUtil.getFirstDayOfMonth(nowDate);
         Date endTime = DateUtil.addMonths(startTime, 1);
 
 
@@ -517,13 +536,33 @@ public class StudentOrderController extends BaseController {
         //本月总人数
         List<Practice4OrganDto> nowMonthPracticeBuyNums = courseScheduleEvaluateDao.getPracticeBuyNums(startTime, endTime, null);
         List<Practice4OrganDto> nowMonthVipBuyNums = courseScheduleEvaluateDao.getVipBuyNums(startTime, endTime);
-        List<Practice4OrganDto> nowMonthPracticeAndVipBuyNums = courseScheduleEvaluateDao.getPracticeAndVipNums(startTime, endTime);
+        List<Practice4OrganDto> nowMonthPracticeAndVipBuyNums = new ArrayList<>();
+
+        studentIds = vipBuyNums.stream().filter(practice4OrganDto -> practice4OrganDto.getOrganId() != null).map(Practice4OrganDto::getStudentIds).collect(Collectors.joining(","));
+        if (!studentIds.isEmpty()) {
+            String[] studentIdsArr = studentIds.split(",");
+            int[] userIds = new int[studentIdsArr.length];
+            for (int i = 0; i < studentIdsArr.length; i++) {
+                userIds[i] = Integer.parseInt(studentIdsArr[i]);
+            }
+            nowMonthPracticeAndVipBuyNums = courseScheduleEvaluateDao.getPracticeBuyNums(startTime, endTime, userIds);
+        }
 
         //上月总人数
         Date lastMonthStartTime = DateUtil.addMonths(startTime, -1);
         List<Practice4OrganDto> lastMonthPracticeBuyNums = courseScheduleEvaluateDao.getPracticeBuyNums(lastMonthStartTime, startTime, null);
         List<Practice4OrganDto> lastMonthVipBuyNums = courseScheduleEvaluateDao.getVipBuyNums(lastMonthStartTime, startTime);
-        List<Practice4OrganDto> lastMonthPracticeAndVipBuyNums = courseScheduleEvaluateDao.getPracticeAndVipNums(lastMonthStartTime, startTime);
+        List<Practice4OrganDto> lastMonthPracticeAndVipBuyNums = new ArrayList<>();
+
+        studentIds = vipBuyNums.stream().filter(practice4OrganDto -> practice4OrganDto.getOrganId() != null).map(Practice4OrganDto::getStudentIds).collect(Collectors.joining(","));
+        if (!studentIds.isEmpty()) {
+            String[] studentIdsArr = studentIds.split(",");
+            int[] userIds = new int[studentIdsArr.length];
+            for (int i = 0; i < studentIdsArr.length; i++) {
+                userIds[i] = Integer.parseInt(studentIdsArr[i]);
+            }
+            lastMonthPracticeAndVipBuyNums = courseScheduleEvaluateDao.getPracticeBuyNums(lastMonthStartTime, startTime, userIds);
+        }
 
         List<Practice4OrganDto> practice4Organs = new ArrayList<>();
         for (Organization organ : organs) {