Browse Source

系统收费

zouxuan 4 years ago
parent
commit
1d9d72273c

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

@@ -1472,7 +1472,8 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @author zouxuan
      */
     int batchUpdateLockByCourseIds(@Param("courseId") List<Long> courseId,
-                                   @Param("isLock") Integer isLock);
+                                   @Param("isLock") Integer isLock,
+                                   @Param("preCourseFlag") Integer preCourseFlag);
 
 
     /**
@@ -1858,8 +1859,15 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
 
     /**
      * 获取预排课程列表
+     * @param musicGroupId
+     * @return
+     */
+    List<CourseSchedule> queryPreCourseListByMusicGroupId(String musicGroupId);
+
+    /**
+     * 获取预排课程列表
      * @param classGroupId
      * @return
      */
-    List<CourseSchedule> queryPreCourseList(Integer classGroupId);
+    List<CourseSchedule> queryPreCourseListByClassGroupId(Integer classGroupId);
 }

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

@@ -41,4 +41,11 @@ public interface MusicGroupSchoolTermStudentCourseDetailDao extends BaseDAO<Long
      * @return
      */
     int getMaxMixCourseMinutes(@Param("courseDetailId") Integer musicGroupSchoolTermCourseDetailId, @Param("studentIds") List<Integer> studentIds);
+
+    /**
+     * 是否有学员课时没有消耗
+     * @param musicGroupSchoolTermCourseDetailId
+     * @return
+     */
+    boolean checkNoCourse(Integer musicGroupSchoolTermCourseDetailId);
 }

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

@@ -593,4 +593,11 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
      * @return
      */
     int getFirstPayNum(@Param("musicGroupId") String musicGroupId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+    /**
+     * 是否所有的学员都在班
+     * @param musicGroupId
+     * @return
+     */
+    boolean checkHasNotClass(@Param("musicGroupId") String musicGroupId);
 }

+ 69 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -2630,6 +2630,70 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     }
 
     @Override
+    public HttpResponseResult confirmPreCourseSchedule(Integer musicGroupSchoolTermCourseDetailId) {
+        MusicGroupSchoolTermCourseDetail termCourseDetail = musicGroupSchoolTermCourseDetailDao.get(musicGroupSchoolTermCourseDetailId);
+        //校验所有学员的课时都有消耗
+        if(musicGroupSchoolTermStudentCourseDetailDao.checkNoCourse(musicGroupSchoolTermCourseDetailId)){
+            throw new BizException("操作失败:请确保所有学员都已排课");
+        }
+        //获取所有预排课课程列表
+        List<CourseSchedule> courseSchedules = courseScheduleDao.queryPreCourseListByMusicGroupId(termCourseDetail.getMusicGroupId());
+        if(courseSchedules.size() == 0){
+            throw new BizException("操作失败:请先预排课");
+        }
+        Map<Integer, List<CourseSchedule>> courseMap = courseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getClassGroupId));
+        courseMap.keySet().forEach(e->{
+            //更新班级课程数
+            classGroupService.updateTotalClassTimes(e, courseMap.get(e).size());
+        });
+        List<Long> courseScheduleIds = courseSchedules.stream().map(e -> e.getId()).collect(Collectors.toList());
+        //取消预排课标记
+        courseScheduleDao.batchUpdateLockByCourseIds(courseScheduleIds,0,0);
+        //标记已排课
+        termCourseDetail.setCourseFlag(true);
+        musicGroupSchoolTermCourseDetailDao.update(termCourseDetail);
+        //更新学员服务指标
+        List<CourseScheduleStudentPayment> studentPayments = courseScheduleStudentPaymentDao.findByCourseScheduleIds(courseScheduleIds);
+        List<Integer> studentIds = studentPayments.stream().map(e -> e.getUserId()).collect(Collectors.toList());
+        studentDao.updateStudentServiceTag(null, studentIds, YesOrNoEnum.YES.getCode());
+        //初始化老师考勤表
+        List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByCourseSchedules(courseScheduleIds);
+        List<ClassGroup> byCourseSchedules = classGroupDao.findByCourseSchedules(courseScheduleIds);
+
+        Map<Integer, ClassGroup> classGroupMap = new HashMap<Integer, ClassGroup>();
+        for (ClassGroup classGroup : byCourseSchedules) {
+            if (!classGroupMap.containsKey(classGroup.getId())) {
+                classGroupMap.put(classGroup.getId(), classGroup);
+            }
+        }
+        List<TeacherAttendance> teacherIdByCourseSchedule = teacherAttendanceDao.findTeacherIdByCourseSchedule(courseScheduleIds);
+        Map<Long, List<TeacherAttendance>> courseScheduleTeacherAttendanceMap = teacherIdByCourseSchedule.stream()
+                .collect(Collectors.groupingBy(TeacherAttendance::getCourseScheduleId));
+        List<TeacherAttendance> teacherAttendances = new ArrayList<>();
+        courseScheduleTeacherSalaries.forEach(courseScheduleTeacherSalary -> {
+            List<TeacherAttendance> teacherAttendancesTemp = courseScheduleTeacherAttendanceMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
+            List<Integer> collect = new ArrayList<>();
+            if (!CollectionUtils.isEmpty(teacherAttendancesTemp)) {
+                collect = teacherAttendancesTemp.stream().map(TeacherAttendance::getTeacherId).collect(Collectors.toList());
+            }
+            TeacherAttendance teacherAttendance = new TeacherAttendance();
+            teacherAttendance.setGroupType(courseScheduleTeacherSalary.getGroupType());
+            teacherAttendance.setClassGroupId(courseScheduleTeacherSalary.getClassGroupId());
+            teacherAttendance.setMusicGroupId(courseScheduleTeacherSalary.getMusicGroupId());
+            if (CollectionUtils.isEmpty(collect) || !collect.contains(courseScheduleTeacherSalary.getUserId())) {
+                teacherAttendance.setTeacherId(courseScheduleTeacherSalary.getUserId());
+                teacherAttendance.setCourseScheduleId(courseScheduleTeacherSalary.getCourseScheduleId());
+                teacherAttendances.add(teacherAttendance);
+            }
+        });
+        if (!CollectionUtils.isEmpty(teacherAttendances)) {
+            teacherAttendanceDao.batchInsert(teacherAttendances);
+        }
+        imUserFriendService.refreshGroupImUserFriend(termCourseDetail.getMusicGroupId(),MUSIC);
+        return null;
+    }
+
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult preCourseSchedule(List<ClassGroup4MixDto> classGroup4MixDtos) {
         Date date = new Date();
@@ -2678,6 +2742,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         List<CourseSchedule> courseScheduleList = new ArrayList<>();
         MusicGroupSchoolTermCourseDetail schoolTermCourseDetail = musicGroupSchoolTermCourseDetailDao.get(musicGroupSchoolTermCourseDetailId);
         for (ClassGroup4MixDto classGroup4MixDto : classGroup4MixDtos) {
+            //更新学员的排课时长
             //3、插入班级排课信息
             LocalDateTime now = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).withNano(0);
 
@@ -4021,7 +4086,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             //冻结班级
             classGroupDao.batchUpdateLockByClassGroupIds(classGroupIds, 1);
             //冻结所选班级的课程
-            courseScheduleDao.batchUpdateLockByCourseIds(allLockCourseIds, 1);
+            courseScheduleDao.batchUpdateLockByCourseIds(allLockCourseIds, 1,null);
             httpResponseResult.setMsg("学员班级调整申请已提交,缴费项目审核中");
         }
         return httpResponseResult;
@@ -4452,7 +4517,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 //                冻结班级
             classGroupDao.batchUpdateLockByClassGroupIds(classGroupIds, 1);
 //                冻结所选班级的课程
-            courseScheduleDao.batchUpdateLockByCourseIds(allLockCourseIds, 1);
+            courseScheduleDao.batchUpdateLockByCourseIds(allLockCourseIds, 1,null);
             httpResponseResult.setMsg("操作成功:学员班级调整申请已提交,缴费项目审核中");
         }
         return httpResponseResult;
@@ -4488,7 +4553,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             courseScheduleDao.deleteMusicGroupCourseSchedulesWithStudents(courseIds, studentIds);
         }
         //解冻课程
-        courseScheduleDao.batchUpdateLockByCourseIds(allLockCourseIds, 0);
+        courseScheduleDao.batchUpdateLockByCourseIds(allLockCourseIds, 0,null);
         //解冻班级
         classGroupIds.add(masterClassGroupId);
         classGroupDao.batchUpdateLockByClassGroupIds(classGroupIds, 0);
@@ -4510,7 +4575,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
     @Override
     public List<CourseSchedule> queryPreCourseList(Integer classGroupId) {
-        List<CourseSchedule> courseSchedules = courseScheduleDao.queryPreCourseList(classGroupId);
+        List<CourseSchedule> courseSchedules = courseScheduleDao.queryPreCourseListByClassGroupId(classGroupId);
         if(courseSchedules.size() > 0){
             List<Long> courseIdList = courseSchedules.stream().map(e -> e.getId()).collect(Collectors.toList());
             Map<Long, String> bishopTeacherMap = MapUtil.convertMybatisMap(courseScheduleTeacherSalaryDao.queryTeacherIdMap(courseIdList,"BISHOP"));
@@ -4522,9 +4587,4 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         }
         return courseSchedules;
     }
-
-    @Override
-    public HttpResponseResult confirmPreCourseSchedule(Integer musicGroupSchoolTermCourseDetailId) {
-        return null;
-    }
 }

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

@@ -1163,7 +1163,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		courseScheduleDao.deleteMusicGroupCourseSchedulesWithStudents(courseIds,studentIds);
 		//解冻课程
 		List<Long> allCourseIds = JSON.parseArray(musicGroupStudentClassAdjust.getAllLockCourseIds(), Long.class);
-		courseScheduleDao.batchUpdateLockByCourseIds(allCourseIds,0);
+		courseScheduleDao.batchUpdateLockByCourseIds(allCourseIds,0,null);
 		//解冻班级
 		List<Integer> classGroupIds = JSON.parseArray(musicGroupStudentClassAdjust.getClassGroupIds(), Integer.class);
 		classGroupDao.batchUpdateLockByClassGroupIds(classGroupIds,0);

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupSchoolTermCourseDetailServiceImpl.java

@@ -47,6 +47,10 @@ public class MusicGroupSchoolTermCourseDetailServiceImpl extends BaseServiceImpl
 	public MusicGroupSchoolTermCourseDetail upset(MusicGroupSchoolTermCourseDetail musicGroupSchoolTermCourseDetail) {
 		Date startCourseDate = musicGroupSchoolTermCourseDetail.getStartCourseDate();
 		String musicGroupId = musicGroupSchoolTermCourseDetail.getMusicGroupId();
+		//校验当前乐团是否所有学员都在班
+		if(!studentRegistrationDao.checkHasNotClass(musicGroupId)){
+			throw new BizException("操作失败:请确保所有在读学员都在班级");
+		}
 		MusicGroupSchoolTermCourseDetail courseDetail = musicGroupSchoolTermCourseDetailDao.
 				findByCourseDateAndMusicGroupId(musicGroupId,startCourseDate);
 		Date date = DateUtil.stringToDate(DateUtil.format(new Date(),DateUtil.ISO_EXPANDED_DATE_FORMAT),DateUtil.ISO_EXPANDED_DATE_FORMAT);

+ 9 - 2
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -1364,6 +1364,9 @@
     <update id="batchUpdateLockByCourseIds">
         UPDATE course_schedule
         SET is_lock_ = #{isLock}, update_time_ = NOW()
+        <if test="preCourseFlag != null">
+            ,pre_course_flag_ = #{preCourseFlag}
+        </if>
         WHERE id_ IN
         <foreach collection="courseId" open="(" close=")" item="item" separator=",">
             #{item}
@@ -3870,7 +3873,11 @@
                 #{courseId}
             </foreach>
     </select>
-    <select id="queryPreCourseList" resultMap="CourseSchedule">
-        SELECT * FROM course_schedule WHERE class_group_id_ = 1 AND is_lock_ = 1 AND pre_course_flag_ = 1
+    <select id="queryPreCourseListByClassGroupId" resultMap="CourseSchedule">
+        SELECT * FROM course_schedule WHERE class_group_id_ = #{classGroupId} AND is_lock_ = 1 AND pre_course_flag_ = 1
+    </select>
+
+    <select id="queryPreCourseListByMusicGroupId" resultMap="CourseSchedule">
+        SELECT * FROM course_schedule WHERE music_group_id_ = #{musicGroupId} AND group_type_ = 'MUSIC' AND is_lock_ = 1 AND pre_course_flag_ = 1
     </select>
 </mapper>

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupSchoolTermStudentCourseDetailMapper.xml

@@ -133,4 +133,7 @@
 		</foreach>
 		GROUP BY music_group_school_term_course_detail_id_
 	</select>
+	<select id="checkNoCourse" resultType="java.lang.Boolean">
+		SELECT COUNT(id_) > 0 FROM music_group_school_term_student_course_detail WHERE music_group_school_term_course_detail_id_ = #{musicGroupSchoolTermCourseDetailId} AND pre_member_course_minutes_ = 0
+	</select>
 </mapper>

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

@@ -1492,4 +1492,10 @@
         </if>
         AND sr.music_group_status_ != 'QUIT'
     </select>
+    <select id="checkHasNotClass" resultType="java.lang.Boolean">
+        SELECT COUNT(DISTINCT sr.user_id_) = COUNT(DISTINCT cssm.user_id_) FROM student_registration sr
+        LEFT JOIN class_group_student_mapper cssm ON sr.music_group_id_ = cssm.music_group_id_
+        WHERE sr.music_group_id_ = #{musicGroupId} AND sr.music_group_status_ = 'NORMAL'
+        GROUP BY sr.music_group_id_
+    </select>
 </mapper>

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

@@ -20,7 +20,7 @@ public class MemberFeeSettingController extends BaseController {
 
     @ApiOperation(value = "根据会员等级编号和分部编号获取收费标准")
     @GetMapping("/findByRankId")
-    @PreAuthorize("@pcs.hasPermissions('memberPrivilegesItem/findByRankId')")
+    @PreAuthorize("@pcs.hasPermissions('memberFeeSetting/findByRankId')")
     public Object add(Integer organId,Integer rankId) {
         return succeed(memberFeeSettingService.findByRankIdAndOrganId(organId,rankId));
     }