Просмотр исходного кода

update 时间差列表的排序、统计

周箭河 4 лет назад
Родитель
Сommit
0ff6477d5c

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

@@ -569,4 +569,20 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
      * @return
      */
     RegisterDto getRegisterOrPreMinTime(@Param("musicGroupId") String musicGroupId);
+
+
+    /**
+     * 获取报名总人数
+     *
+     * @param musicGroupId
+     * @return
+     */
+    int getRegisterNum(@Param("musicGroupId") String musicGroupId);
+
+    /**
+     * 获取某时间段的缴费人数
+     *
+     * @return
+     */
+    int getFirstPayNum(@Param("musicGroupId") String musicGroupId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
 }

+ 64 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PageInfoReg.java

@@ -0,0 +1,64 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.common.page.PageInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+
+public class PageInfoReg<T> extends PageInfo<T> {
+
+    @ApiModelProperty(value = "报名人数")
+    private Integer regNum = 0;
+
+    @ApiModelProperty(value = "第一天缴费人数")
+    private Integer firstDayPayNum = 0;
+
+    @ApiModelProperty(value = "总缴费人数")
+    private Integer payNum = 0;
+
+    @ApiModelProperty(value = "首天缴费人数占比")
+    private BigDecimal payScale = BigDecimal.ZERO;
+
+    public PageInfoReg() {
+    }
+
+    public PageInfoReg(Integer pageNo) {
+        super(pageNo);
+    }
+
+    public PageInfoReg(Integer pageNo, int pageSize) {
+        super(pageNo, pageSize);
+    }
+
+    public Integer getRegNum() {
+        return regNum;
+    }
+
+    public void setRegNum(Integer regNum) {
+        this.regNum = regNum;
+    }
+
+    public Integer getFirstDayPayNum() {
+        return firstDayPayNum;
+    }
+
+    public void setFirstDayPayNum(Integer firstDayPayNum) {
+        this.firstDayPayNum = firstDayPayNum;
+    }
+
+    public Integer getPayNum() {
+        return payNum;
+    }
+
+    public void setPayNum(Integer payNum) {
+        this.payNum = payNum;
+    }
+
+    public BigDecimal getPayScale() {
+        return payScale;
+    }
+
+    public void setPayScale(BigDecimal payScale) {
+        this.payScale = payScale;
+    }
+}

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

@@ -403,7 +403,7 @@ public interface StudentRegistrationService extends BaseService<Long, StudentReg
      * @param queryInfo
      * @return
      */
-    PageInfo<RegisterDto> getRegisterOrPreList(RegistrationOrPreQueryInfo queryInfo);
+    PageInfoReg<RegisterDto> getRegisterOrPreList(RegistrationOrPreQueryInfo queryInfo);
 
 
     /**

+ 15 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -1825,8 +1825,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     }
 
     @Override
-    public PageInfo<RegisterDto> getRegisterOrPreList(RegistrationOrPreQueryInfo queryInfo) {
-        PageInfo<RegisterDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+    public PageInfoReg<RegisterDto> getRegisterOrPreList(RegistrationOrPreQueryInfo queryInfo) {
+        PageInfoReg<RegisterDto> pageInfo = new PageInfoReg<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<>();
         MapUtil.populateMap(params, queryInfo);
 
@@ -1835,10 +1835,22 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         if (queryInfo.getIsExport() && count > 50000) {
             throw new BizException("数据集太大,不能导出.最大数据集不能超过50000");
         }
+        int registerNum = studentRegistrationDao.getRegisterNum(queryInfo.getMusicGroupId());
+        pageInfo.setRegNum(registerNum);
+        RegisterDto registerOrPreMinTime = studentRegistrationDao.getRegisterOrPreMinTime(queryInfo.getMusicGroupId());
+        if(registerOrPreMinTime.getPayTime() != null){
+            Date startTime = DateUtil.trunc(registerOrPreMinTime.getPayTime());
+            Date endTime = DateUtil.getLastTimeWithDay(startTime);
+            int firstPayNum = studentRegistrationDao.getFirstPayNum(queryInfo.getMusicGroupId(), startTime, endTime);
+            int totalPayNum = studentRegistrationDao.getFirstPayNum(queryInfo.getMusicGroupId(), startTime,null);
+            pageInfo.setFirstDayPayNum(firstPayNum);
+            pageInfo.setPayNum(totalPayNum);
+            pageInfo.setPayScale(new BigDecimal(firstPayNum).divide(new BigDecimal(totalPayNum),2,BigDecimal.ROUND_HALF_UP));
+        }
+
         pageInfo.setTotal(count);
         params.put("offset", pageInfo.getOffset());
         if (queryInfo.getPage() <= pageInfo.getTotalPage()) {
-            RegisterDto registerOrPreMinTime = studentRegistrationDao.getRegisterOrPreMinTime(queryInfo.getMusicGroupId());
             Date firstPreTime = registerOrPreMinTime.getMinPerRegisterTime();
             Date firstPayTime = registerOrPreMinTime.getMinPayTime();
             dataList = studentRegistrationDao.getRegisterOrPreList(params);

+ 45 - 22
mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml

@@ -1343,22 +1343,22 @@
         SELECT u.user_id_ userId,
         su.username_ studentName,
         <if test="orderByPerRegister == null">
-            IFNULL(spr.create_time_,'2099-12-31') perRegisterTime,
+            IFNULL(spr.create_time_, '2099-12-31') perRegisterTime,
         </if>
-        <if test="orderByPerRegister != null and orderByPerRegister=='ASC'">
-            IFNULL(spr.create_time_,'2099-12-31') perRegisterTime,
+        <if test="orderByPerRegister != null and orderByPerRegister == 'ASC'">
+            IFNULL(spr.create_time_, '2099-12-31') perRegisterTime,
         </if>
-        <if test="orderByPerRegister != null and orderByPerRegister=='DESC'">
-            IFNULL(spr.create_time_,'1990-12-31') perRegisterTime,
+        <if test="orderByPerRegister != null and orderByPerRegister == 'DESC'">
+            IFNULL(spr.create_time_, '1990-12-31') perRegisterTime,
         </if>
         <if test="orderByPayTime == null">
-            IFNULL(o.payTime,'2099-12-31') payTime,
+            IFNULL(o.payTime, '2099-12-31') payTime,
         </if>
-        <if test="orderByPayTime != null and orderByPayTime=='ASC'">
-            IFNULL(o.payTime,'2099-12-31') payTime,
+        <if test="orderByPayTime != null and orderByPayTime == 'ASC'">
+            IFNULL(o.payTime, '2099-12-31') payTime,
         </if>
-        <if test="orderByPayTime != null and orderByPayTime=='DESC'">
-            IFNULL(o.payTime,'1990-12-31') payTime,
+        <if test="orderByPayTime != null and orderByPayTime == 'DESC'">
+            IFNULL(o.payTime, '1990-12-31') payTime,
         </if>
         IFNULL(s2.name_, s1.name_) actualSubjectName
         FROM (SELECT user_id_
@@ -1384,27 +1384,27 @@
         GROUP BY spo.user_id_
         ) o ON o.user_id_ = u.user_id_
         <where>
-        <if test="userIds != null">
-            AND u.user_id_ IN
-            <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
-                #{userId}
-            </foreach>
-        </if>
-        <if test="subjectId">
-            AND (sr.actual_subject_id_ = #{subjectId} OR spr.subject_first_ = #{subjectId})
-        </if>
+            <if test="userIds != null">
+                AND u.user_id_ IN
+                <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+                    #{userId}
+                </foreach>
+            </if>
+            <if test="subjectId">
+                AND (sr.actual_subject_id_ = #{subjectId} OR spr.subject_first_ = #{subjectId})
+            </if>
         </where>
         <if test="orderByPerRegister != null and orderByPayTime == null">
             ORDER BY perRegisterTime ${orderByPerRegister},u.user_id_ ASC
         </if>
         <if test="orderByPerRegister != null and orderByPayTime != null">
-            ORDER BY perRegisterTime ${orderByPerRegister},payTime ${orderByPayTime},u.user_id_ ASC
+            ORDER BY perRegisterTime ${orderByPerRegister}, payTime ${orderByPayTime}, u.user_id_ ASC
         </if>
         <if test="orderByPerRegister == null and orderByPayTime != null">
-            ORDER BY payTime ${orderByPayTime},u.user_id_ ASC
+            ORDER BY payTime ${orderByPayTime}, u.user_id_ ASC
         </if>
         <if test="orderByPerRegister == null and orderByPayTime == null">
-            ORDER BY perRegisterTime ASC,u.user_id_ ASC
+            ORDER BY perRegisterTime ASC, u.user_id_ ASC
         </if>
         <include refid="global.limit"/>
     </select>
@@ -1459,4 +1459,27 @@
         GROUP BY spo.user_id_
         ) o ON o.user_id_ = u.user_id_
     </select>
+
+    <select id="getRegisterNum" resultType="int">
+        SELECT * FROM student_registration WHERE music_group_id_ = #{musicGroupId} AND music_group_status_ != 'QUIT'
+    </select>
+
+    <select id="getFirstPayNum" resultType="int">
+        SELECT COUNT(*) FROM student_registration sr
+        LEFT JOIN (
+        SELECT spo.user_id_, MAX(spo.pay_time_) payTime
+        FROM student_payment_order spo
+        WHERE spo.music_group_id_ = #{musicGroupId}
+        AND type_ = 'APPLY'
+        GROUP BY spo.user_id_
+        ) o ON o.user_id_ = sr.user_id_
+        WHERE music_group_id_ = #{musicGroupId} AND sr.payment_status_=2
+        <if test="startTime != null">
+            AND o.payTime >= #{startTime}
+        </if>
+        <if test="endTime != null">
+            <![CDATA[ AND o.payTime <= #{endTime}]]>
+        </if>
+        AND music_group_status_ != 'QUIT'
+    </select>
 </mapper>

+ 2 - 1
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherController.java

@@ -2,6 +2,7 @@ package com.ym.mec.teacher.controller;
 
 import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
+import com.ym.mec.biz.dal.dto.PageInfoReg;
 import com.ym.mec.biz.dal.dto.RegisterDto;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.biz.service.*;
@@ -208,7 +209,7 @@ public class TeacherController extends BaseController {
 
     @ApiOperation(value = "获取报名/预报名列表")
     @GetMapping("/getRegisterOrPreList")
-    public HttpResponseResult<PageInfo<RegisterDto>> queryStudentApplyDetail(RegistrationOrPreQueryInfo queryInfo) {
+    public HttpResponseResult<PageInfoReg<RegisterDto>> queryStudentApplyDetail(RegistrationOrPreQueryInfo queryInfo) {
         if (StringUtils.isNotBlank(queryInfo.getSearch())) {
             List<BasicUserDto> users = studentPaymentOrderDao.getUsers(queryInfo.getSearch());
             List<Integer> userIds = users.stream().map(BasicUserDto::getUserId).collect(Collectors.toList());

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/controller/StudentRegistrationController.java

@@ -349,7 +349,7 @@ public class StudentRegistrationController extends BaseController {
     @ApiOperation(value = "获取报名/预报名列表")
     @GetMapping("/getRegisterOrPreList")
     @PreAuthorize("@pcs.hasPermissions('studentRegistration/getRegisterOrPreList')")
-    public HttpResponseResult<PageInfo<RegisterDto>> queryStudentApplyDetail(RegistrationOrPreQueryInfo queryInfo) {
+    public HttpResponseResult<PageInfoReg<RegisterDto>> queryStudentApplyDetail(RegistrationOrPreQueryInfo queryInfo) {
         if (StringUtils.isNotBlank(queryInfo.getSearch())) {
             List<BasicUserDto> users = studentPaymentOrderDao.getUsers(queryInfo.getSearch());
             List<Integer> userIds = users.stream().map(BasicUserDto::getUserId).collect(Collectors.toList());