Browse Source

缴费项目优化

zouxuan 3 years ago
parent
commit
46465ef3d3

+ 18 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java

@@ -477,4 +477,22 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
     * @date 2022/3/3 15:15 
     * @date 2022/3/3 15:15 
     */
     */
     List<String> queryHasSubCourseTimes(@Param("organIds") String organIds, @Param("tenantId") Integer tenantId);
     List<String> queryHasSubCourseTimes(@Param("organIds") String organIds, @Param("tenantId") Integer tenantId);
+
+    /**
+    * @description: 获取课程时间消耗异常的学员数
+     * @param params
+    * @return int
+    * @author zx
+    * @date 2022/3/4 11:22
+    */
+    Integer countHasFreeCourseTimes(Map<String, Object> params);
+
+    /**
+    * @description: 获取课程时间消耗异常的学员
+     * @param params
+    * @return java.util.List<com.ym.mec.biz.dal.dto.HasFreeCourseTimesDto>
+    * @author zx
+    * @date 2022/3/4 11:40
+    */
+    List<HasFreeCourseTimesDto> queryHasFreeCourseTimes(Map<String, Object> params);
 }
 }

+ 96 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/HasFreeCourseTimesDto.java

@@ -0,0 +1,96 @@
+package com.ym.mec.biz.dal.dto;
+
+
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import io.swagger.annotations.ApiModelProperty;
+
+public class HasFreeCourseTimesDto {
+
+    @ApiModelProperty(value = "乐团编号")
+    private String musicGroupId;
+
+    @ApiModelProperty(value = "乐团名称")
+    private String musicGroupName;
+
+    @ApiModelProperty(value = "学员编号")
+    private Integer userId;
+
+    @ApiModelProperty(value = "学员姓名")
+    private String username;
+
+    @ApiModelProperty(value = "总时长")
+    private Integer totalCourseMinutes;
+
+    @ApiModelProperty(value = "消耗时长")
+    private Integer usedCourseMinutes;
+
+    @ApiModelProperty(value = "未消耗时长")
+    private Integer freeCourseMinutes;
+
+    @ApiModelProperty(value = "课程类型")
+    private CourseSchedule.CourseScheduleType courseType;
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public String getMusicGroupName() {
+        return musicGroupName;
+    }
+
+    public void setMusicGroupName(String musicGroupName) {
+        this.musicGroupName = musicGroupName;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public Integer getTotalCourseMinutes() {
+        return totalCourseMinutes;
+    }
+
+    public void setTotalCourseMinutes(Integer totalCourseMinutes) {
+        this.totalCourseMinutes = totalCourseMinutes;
+    }
+
+    public Integer getUsedCourseMinutes() {
+        return usedCourseMinutes;
+    }
+
+    public void setUsedCourseMinutes(Integer usedCourseMinutes) {
+        this.usedCourseMinutes = usedCourseMinutes;
+    }
+
+    public Integer getFreeCourseMinutes() {
+        return freeCourseMinutes;
+    }
+
+    public void setFreeCourseMinutes(Integer freeCourseMinutes) {
+        this.freeCourseMinutes = freeCourseMinutes;
+    }
+
+    public CourseSchedule.CourseScheduleType getCourseType() {
+        return courseType;
+    }
+
+    public void setCourseType(CourseSchedule.CourseScheduleType courseType) {
+        this.courseType = courseType;
+    }
+}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderService.java

@@ -7,6 +7,7 @@ import java.util.Set;
 
 
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.page.BaseOrganQueryInfo;
 import com.ym.mec.biz.dal.page.MusicGroupPaymentCalenderQueryInfo;
 import com.ym.mec.biz.dal.page.MusicGroupPaymentCalenderQueryInfo;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageInfo;
@@ -218,4 +219,13 @@ public interface MusicGroupPaymentCalenderService extends BaseService<Long, Musi
 	* @date 2021/12/30 10:41
 	* @date 2021/12/30 10:41
 	*/
 	*/
 	MusicGroupPaymentCalender getApplyCalenderByMusicId(String musicGroupId);
 	MusicGroupPaymentCalender getApplyCalenderByMusicId(String musicGroupId);
+
+	/**
+	* @description: 学员已排课时长未消耗完
+	 * @param queryInfo
+	* @return com.ym.mec.common.page.PageInfo<com.ym.mec.biz.dal.dto.HasFreeCourseTimesDto>
+	* @author zx
+	* @date 2022/3/4 11:35
+	*/
+	PageInfo<HasFreeCourseTimesDto> queryHasFreeCourseTimesStudent(BaseOrganQueryInfo queryInfo);
 }
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -1220,6 +1220,15 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 				flag4 = true;
 				flag4 = true;
 			}
 			}
 		}
 		}
+		if(!flag4){
+			Map<String, Object> params = new HashMap<String, Object>(2);
+			params.put("organId",organIdsStr);
+			params.put("tenantId",tenantId);
+			Integer hasFreeCourseTimes = musicGroupDao.countHasFreeCourseTimes(params);
+			if(hasFreeCourseTimes != null && hasFreeCourseTimes > 0){
+				flag4 = true;
+			}
+		}
 		resultMap.put("attendanceServe",flag4);
 		resultMap.put("attendanceServe",flag4);
 
 
 		boolean flag5 = false;
 		boolean flag5 = false;

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -12,6 +12,7 @@ import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatus
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.page.BaseOrganQueryInfo;
 import com.ym.mec.biz.dal.page.MusicGroupPaymentCalenderQueryInfo;
 import com.ym.mec.biz.dal.page.MusicGroupPaymentCalenderQueryInfo;
 import com.ym.mec.biz.event.source.GroupEventSource;
 import com.ym.mec.biz.event.source.GroupEventSource;
 import com.ym.mec.biz.event.source.SendSeoMessageSource;
 import com.ym.mec.biz.event.source.SendSeoMessageSource;
@@ -1260,6 +1261,27 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
     }
     }
 
 
     @Override
     @Override
+    public PageInfo<HasFreeCourseTimesDto> queryHasFreeCourseTimesStudent(BaseOrganQueryInfo queryInfo) {
+        PageInfo<HasFreeCourseTimesDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<HasFreeCourseTimesDto> dataList = null;
+
+        int count = musicGroupDao.countHasFreeCourseTimes(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = musicGroupDao.queryHasFreeCourseTimes(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     public boolean autoUpdateMusicGroupPaymentCalenderStatus() {
     public boolean autoUpdateMusicGroupPaymentCalenderStatus() {
         Date date = new Date();
         Date date = new Date();

+ 46 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -1009,4 +1009,50 @@
             AND FIND_IN_SET(mgpc.organ_id_,#{organIds})
             AND FIND_IN_SET(mgpc.organ_id_,#{organIds})
         </if>
         </if>
     </select>
     </select>
+    <select id="countHasFreeCourseTimes" resultType="java.lang.Integer">
+        SELECT COUNT(mgpscd.user_id_)
+        FROM music_group_payment_student_course_detail mgpscd
+        LEFT JOIN music_group_payment_calender mgpc ON mgpc.id_ = mgpscd.music_group_payment_calender_id_
+        LEFT JOIN music_group mg ON mg.id_ = mgpc.music_group_id_
+        <include refid="queryHasFreeCourseTimesSql"/>
+    </select>
+    <resultMap id="HasFreeCourseTimesDto" type="com.ym.mec.biz.dal.dto.HasFreeCourseTimesDto">
+        <result property="userId" column="user_id_"/>
+        <result property="courseType" column="course_type_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="musicGroupName" column="music_group_name_"/>
+        <result property="musicGroupId" column="music_group_id_"/>
+        <result property="username" column="username_"/>
+        <result property="freeCourseMinutes" column="free_course_minutes_"/>
+        <result property="totalCourseMinutes" column="total_course_minutes_"/>
+        <result property="usedCourseMinutes" column="used_course_minutes_"/>
+    </resultMap>
+    <sql id="queryHasFreeCourseTimesSql">
+        <where>
+            mgpscd.used_course_minutes_ &lt; mgpscd.total_course_minutes_ AND mgpscd.used_course_minutes_ > 0
+            AND mg.status_ = 'PROGRESS'
+            <if test="tenantId != null">
+                AND mgpscd.tenant_id_ = #{tenantId}
+            </if>
+            <if test="organId != null and organId != ''">
+                AND FIND_IN_SET(mg.organ_id_,#{organId})
+            </if>
+            <if test="search != null and search != ''">
+                AND (mgpscd.user_id_ = #{search}
+                OR su.username_ LIKE CONCAT('%' ,#{search}, '%' )
+                OR mg.id_ LIKE CONCAT('%' ,#{search}, '%' )
+                OR mg.name_ LIKE CONCAT('%' ,#{search}, '%' ))
+            </if>
+        </where>
+    </sql>
+    <select id="queryHasFreeCourseTimes" resultMap="HasFreeCourseTimesDto">
+        SELECT mg.id_ music_group_id_,mg.name_ music_group_name_,mgpscd.user_id_,mgpscd.total_course_minutes_,
+        mgpscd.used_course_minutes_,mgpscd.total_course_minutes_ - mgpscd.used_course_minutes_ free_course_minutes_,su.username_
+        FROM music_group_payment_student_course_detail mgpscd
+        LEFT JOIN music_group_payment_calender mgpc ON mgpc.id_ = mgpscd.music_group_payment_calender_id_
+        LEFT JOIN music_group mg ON mg.id_ = mgpc.music_group_id_
+        LEFT JOIN sys_user su ON su.id_ = mgpscd.user_id_
+        <include refid="queryHasFreeCourseTimesSql"/>
+        ORDER BY mgpscd.update_time_ DESC
+        <include refid="global.limit"/>
+    </select>
 </mapper>
 </mapper>

+ 12 - 0
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderController.java

@@ -2,10 +2,12 @@ package com.ym.mec.web.controller;
 
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
 import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
+import com.ym.mec.biz.dal.dto.HasFreeCourseTimesDto;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentBaseCalender;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentBaseCalender;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderDto;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderDto;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
+import com.ym.mec.biz.dal.page.BaseOrganQueryInfo;
 import com.ym.mec.biz.dal.page.MusicGroupPaymentCalenderQueryInfo;
 import com.ym.mec.biz.dal.page.MusicGroupPaymentCalenderQueryInfo;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderCourseSettingsService;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderCourseSettingsService;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
@@ -13,6 +15,8 @@ import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -169,4 +173,12 @@ public class MusicGroupPaymentCalenderController extends BaseController {
         }
         }
         return succeed(musicGroupPaymentCalenderCourseSettingsService.getMusicCourseSettingsWithStudents(musicGroupId,studentIdList));
         return succeed(musicGroupPaymentCalenderCourseSettingsService.getMusicCourseSettingsWithStudents(musicGroupId,studentIdList));
     }
     }
+
+    @ApiOperation(value = "学员已排课时长未消耗完")
+    @GetMapping("/queryHasFreeCourseTimesStudent")
+    @PreAuthorize("@pcs.hasPermissions('musicGroupPaymentCalender/queryHasFreeCourseTimesStudent')")
+    public HttpResponseResult<PageInfo<HasFreeCourseTimesDto>> queryHasFreeCourseTimesStudent(BaseOrganQueryInfo queryInfo) {
+        queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
+        return succeed(musicGroupPaymentCalenderService.queryHasFreeCourseTimesStudent(queryInfo));
+    }
 }
 }