Browse Source

Merge branch 'zx_saas_0303' of http://git.dayaedu.com/yonge/mec into master_saas

zouxuan 3 years ago
parent
commit
00efbd4454

+ 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 
     */
     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);
 }

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

@@ -113,4 +113,18 @@ public interface MusicGroupPaymentStudentCourseDetailDao extends BaseDAO<Long, M
     void updateByCourseType(@Param("courseType") String courseType,
                             @Param("musicGroupPaymentCalenderIds") String musicGroupPaymentCalenderIds,
                             @Param("courseCurrentPrice") BigDecimal courseCurrentPrice);
+
+    /**
+     * @description: 校验学员排课时长是否一致
+     * @param musicGroupId
+     * @param courseTypes
+     * @param studentIds
+     * @return void
+     * @author zx
+     * @date 2022/3/3 19:04
+     */
+    Integer checkCourseTimes(@Param("musicGroupId") String musicGroupId,
+                          @Param("courseTypes") List<CourseSchedule.CourseScheduleType> courseTypes,
+                          @Param("studentIds") List<Integer> studentIds);
+
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ClassGroup4MixDto.java

@@ -25,6 +25,9 @@ public class ClassGroup4MixDto implements Cloneable{
     @ApiModelProperty(value = "是否只生成班级")
     private Boolean onlyCreateClassGroup;
 
+    @ApiModelProperty(value = "是否继续提交")
+    private Boolean checkCourseTimesFlag = false;
+
     @ApiModelProperty(value = "学生ids", required = true)
     private List<Integer> students;
 
@@ -79,6 +82,14 @@ public class ClassGroup4MixDto implements Cloneable{
     @ApiModelProperty(value = "预排课学期编号")
     private Integer musicGroupSchoolTermCourseDetailId;
 
+    public Boolean getCheckCourseTimesFlag() {
+        return checkCourseTimesFlag;
+    }
+
+    public void setCheckCourseTimesFlag(Boolean checkCourseTimesFlag) {
+        this.checkCourseTimesFlag = checkCourseTimesFlag;
+    }
+
     public Integer getMusicGroupSchoolTermCourseDetailId() {
         return musicGroupSchoolTermCourseDetailId;
     }

+ 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.entity.*;
+import com.ym.mec.biz.dal.page.BaseOrganQueryInfo;
 import com.ym.mec.biz.dal.page.MusicGroupPaymentCalenderQueryInfo;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
@@ -218,4 +219,13 @@ public interface MusicGroupPaymentCalenderService extends BaseService<Long, Musi
 	* @date 2021/12/30 10:41
 	*/
 	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);
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -159,6 +159,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     private MusicGroupSchoolTermStudentCourseDetailDao musicGroupSchoolTermStudentCourseDetailDao;
     @Autowired
     private MusicGroupSchoolTermCourseDetailDao musicGroupSchoolTermCourseDetailDao;
+    @Autowired
+    private MusicGroupPaymentStudentCourseDetailDao musicGroupPaymentStudentCourseDetailDao;
 
     @Override
     public BaseDAO<Integer, ClassGroup> getDAO() {
@@ -2364,6 +2366,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         Date date = new Date();
         Integer classGroupId = classGroup4MixDtos.get(0).getClassGroupId();
         String musicGroupId = classGroup4MixDtos.get(0).getMusicGroupId();
+        Boolean checkCourseTimesFlag = classGroup4MixDtos.get(0).getCheckCourseTimesFlag();
         ClassGroup classGroup = classGroupDao.get(classGroupId);
         if (classGroup == null) {
             throw new BizException("班级不存在");
@@ -2444,6 +2447,14 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         //计算每节课的课酬
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
         List<CourseSchedule> courseScheduleList = new ArrayList<>();
+        List<CourseScheduleType> courseTypes = classGroup4MixDtos.stream().map(e -> e.getCourseType()).distinct().collect(Collectors.toList());
+        if(!checkCourseTimesFlag){
+            //校验剩余时长是否一致
+            Integer checkCourseTimes = musicGroupPaymentStudentCourseDetailDao.checkCourseTimes(musicGroupId, courseTypes, studentIds);
+            if(checkCourseTimes == null || checkCourseTimes == 0){
+                return BaseController.failed(HttpStatus.MULTI_STATUS,"班级剩余排课时长不一致,请再次确认");
+            }
+        }
 
         for (ClassGroup4MixDto classGroup4MixDto : classGroup4MixDtos) {
             List<ClassGroupTeacherMapper> teacherMappers = classGroup4MixDto.getClassGroupTeacherMapperList();

+ 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;
 			}
 		}
+		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);
 
 		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.MusicGroupStudentFee.PaymentStatus;
 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.event.source.GroupEventSource;
 import com.ym.mec.biz.event.source.SendSeoMessageSource;
@@ -1260,6 +1261,27 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
     }
 
     @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)
     public boolean autoUpdateMusicGroupPaymentCalenderStatus() {
         Date date = new Date();

+ 5 - 4
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -4010,11 +4010,12 @@
         LEFT JOIN `subject` sb ON sb.id_ = s.subject_id_list_
         LEFT JOIN sys_user su ON su.id_ = s.user_id_
         WHERE csts.user_id_ = #{teacherId} AND cs.evaluate_flag_ = 1 AND sa.qualified_flag_ = 0 AND sv.id_ IS NULL
-        <if test="startTime != null and startTime != ''">
-            AND cs.class_date_ >= #{startTime}
+        AND sa.status_ = 'NORMAL'
+        <if test="startDate != null and startDate != ''">
+            AND cs.class_date_ >= #{startDate}
         </if>
-        <if test="endTime != null and endTime != ''">
-            AND cs.class_date_ &lt;= #{endTime}
+        <if test="endDate != null and endDate != ''">
+            AND cs.class_date_ &lt;= #{endDate}
         </if>
         ORDER BY cs.class_date_ DESC,cs.start_class_time_ DESC
         <include refid="global.limit"/>

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

@@ -1009,4 +1009,50 @@
             AND FIND_IN_SET(mgpc.organ_id_,#{organIds})
         </if>
     </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>

+ 13 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentStudentCourseDetailMapper.xml

@@ -271,4 +271,17 @@
             AND user_id_ = #{userId}
         </if>
     </select>
+    <select id="checkCourseTimes" resultType="integer">
+        SELECT COUNT(DISTINCT mgpscd.course_type_) >= COUNT(mgpscd.total_course_minutes_) FROM music_group_payment_student_course_detail mgpscd
+        LEFT JOIN music_group_payment_calender mgpc ON mgpscd.music_group_payment_calender_id_ = mgpc.id_
+        WHERE mgpc.music_group_id_ = #{musicGroupId} AND mgpscd.used_course_minutes_ = 0
+        AND mgpscd.course_type_ IN
+        <foreach collection="courseTypes" item="courseType" open="(" close=")" separator=",">
+            #{studentId}
+        </foreach>
+        AND mgpscd.user_id_ IN
+        <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+            #{studentId}
+        </foreach>
+    </select>
 </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.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.MusicGroupPaymentCalenderDto;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 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.service.MusicGroupPaymentCalenderCourseSettingsService;
 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.entity.HttpResponseResult;
 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.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
@@ -169,4 +173,12 @@ public class MusicGroupPaymentCalenderController extends BaseController {
         }
         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));
+    }
 }