Joburgess 5 年之前
父节点
当前提交
25f56603c3

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -67,4 +67,13 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
      */
     BigDecimal countSurplusCourseFee(@Param("classGroupId") Integer classGroupId,
                                      @Param("userId") Integer userId);
+
+    /**
+     * @describe 统计所有课时的购买费用
+     * @author Joburgess
+     * @date 2019/11/27
+     * @param classGroupId: 班级编号
+     * @return java.math.BigDecimal
+     */
+    BigDecimal countAllCourseFee(@Param("classGroupId") Integer classGroupId);
 }

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

@@ -1622,7 +1622,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
             //主教老师
             List<CourseScheduleTeacherSalary> bishopTeachers = courseScheduleTeacherSalaryDao.findByCourseScheduleIdsAndTeacherRole(couseScheduleIds, "BISHOP");
-            Map<Long, CourseScheduleTeacherSalary> courseScheduleBishopTeacherMaps = bishopTeachers.stream().collect(Collectors.toMap(CourseScheduleTeacherSalary::getCourseScheduleId, courseScheduleTeacherSalary -> courseScheduleTeacherSalary));
+            Map<Long, List<CourseScheduleTeacherSalary>> courseScheduleBishopTeacherMaps = bishopTeachers.stream().collect(Collectors.groupingBy(CourseScheduleTeacherSalary::getCourseScheduleId));
 
             //助教老师
             List<CourseScheduleTeacherSalary> teachingTeachers = courseScheduleTeacherSalaryDao.findByCourseScheduleIdsAndTeacherRole(couseScheduleIds, "TEACHING");
@@ -1630,22 +1630,22 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
             dataList.forEach(e -> {
                 e.setMixClassGroupName(classGroupNames.get(e.getMixClassGroupId()));
-                CourseScheduleTeacherSalary currentBishopTeacher = courseScheduleBishopTeacherMaps.get(e.getCourseScheduleId().longValue());
-                if (!Objects.isNull(currentBishopTeacher)) {
-                    e.setMasterTeacherId(currentBishopTeacher.getUserId());
-                    e.setMasterTeacherName(currentBishopTeacher.getUserName());
+                List<CourseScheduleTeacherSalary> currentBishopTeacher = courseScheduleBishopTeacherMaps.get(e.getCourseScheduleId().longValue());
+                if (!Objects.isNull(currentBishopTeacher)&&!CollectionUtils.isEmpty(currentBishopTeacher)) {
+                    e.setMasterTeacherId(currentBishopTeacher.get(0).getUserId());
+                    e.setMasterTeacherName(currentBishopTeacher.get(0).getUserName());
                 }
                 List<CourseScheduleTeacherSalary> currentCourseTeachingTeachers = courseScheduleTeachingTeacherMaps.get(e.getCourseScheduleId().longValue());
-                if (CollectionUtils.isEmpty(currentCourseTeachingTeachers)) {
+                if (CollectionUtils.isEmpty(currentCourseTeachingTeachers)&&!CollectionUtils.isEmpty(currentBishopTeacher)) {
                     currentCourseTeachingTeachers = new ArrayList<>();
                     if (currentBishopTeacher != null) {
-                        currentCourseTeachingTeachers.add(currentBishopTeacher);
+                        currentCourseTeachingTeachers.add(currentBishopTeacher.get(0));
                     }
                     e.setTeacherNum(currentCourseTeachingTeachers.size());
                     e.setTeachingTeachers(currentCourseTeachingTeachers);
                 } else {
                     if (currentBishopTeacher != null) {
-                        currentCourseTeachingTeachers.add(currentBishopTeacher);
+                        currentCourseTeachingTeachers.add(currentBishopTeacher.get(0));
                     }
                     e.setTeachingTeachers(currentCourseTeachingTeachers);
                     e.setTeacherNum(currentCourseTeachingTeachers.size());

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

@@ -605,7 +605,33 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
 	@Override
 	public void courseAdjust(List<CourseSchedule> newCourseSchedules) {
+		//课程信息处理
+		List<Long> courseScheduleIds = newCourseSchedules.stream()
+				.map(CourseSchedule::getId)
+				.distinct().collect(Collectors.toList());
+		List<CourseSchedule> oldCourseScheduleIds = courseScheduleDao.findByCourseScheduleIds(courseScheduleIds);
+		Map<Long, List<CourseSchedule>> oldCourseScheduleMap = oldCourseScheduleIds.stream()
+				.collect(Collectors.groupingBy(CourseSchedule::getId));
+		newCourseSchedules.forEach(newCourseSchedule->{
+			CourseSchedule oldCourseSchedule=null;
+			if(Objects.isNull(newCourseSchedule.getActualTeacherId())){
+				List<CourseSchedule> oldCourseSchedules = oldCourseScheduleMap.get(newCourseSchedule.getId());
+				oldCourseSchedules.sort(Comparator.comparing(CourseSchedule::getStartClassTime).reversed());
+				oldCourseSchedule=oldCourseSchedules.get(0);
+				newCourseSchedule.setActualTeacherId(oldCourseSchedule.getActualTeacherId());
+			}
+			if(Objects.isNull(newCourseSchedule.getSchoolId())){
+				if(Objects.isNull(oldCourseSchedule)){
+					List<CourseSchedule> oldCourseSchedules = oldCourseScheduleMap.get(newCourseSchedule.getId());
+					oldCourseSchedules.sort(Comparator.comparing(CourseSchedule::getStartClassTime).reversed());
+					oldCourseSchedule=oldCourseSchedules.get(0);
+				}
+				newCourseSchedule.setSchoolId(oldCourseSchedule.getSchoolId());
+			}
+		});
+		//课程冲突检测
 		checkNewCourseSchedules(newCourseSchedules,false);
+		//课程调整
 		classStartDateAdjust(newCourseSchedules);
 	}
 
@@ -688,7 +714,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					courseScheduleTeacherSalaryService.createCourseScheduleTeacherVipSalary(byCourseSchedule,
 							courseSchedules,
 							onlineTeacherSalary,offlineTeacherSalary);
-					if(Objects.nonNull(oldCourseSchedule.getActualTeacherId())){
+					if(Objects.nonNull(oldCourseSchedule.getActualTeacherId())&&teacherIsChange){
 						beReplaceTeacherIds.add(oldCourseSchedule.getActualTeacherId().intValue());
 					}
 				}

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

@@ -96,13 +96,6 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 courseScheduleTeacherSalary.setClassGroupId(courseSchedules.get(i).getClassGroupId());
                 courseScheduleTeacherSalary.setSubsidy(school.getSubsidy());
 
-//                Map<String, BigDecimal> feeInfo = vipGroupService.countVipGroupPredictFee(vipGroup,
-//                        courseSchedules.get(i).getActualTeacherId().intValue(),
-//                        onlineTeacherSalary,
-//                        offlineTeacherSalary,
-//                        false,
-//                        true);
-
                 if (vipGroupActivity.getType() == VipGroupActivityTypeEnum.GIVE_CLASS
                         && vipGroup.getGiveTeachMode() == teachModeEnum
                         && i >= Integer.parseInt(vipGroupActivity.getAttribute1())
@@ -111,10 +104,8 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 } else {
                     if (teachModeEnum == TeachModeEnum.ONLINE) {
                         courseScheduleTeacherSalary.setExpectSalary(onlineTeacherSalary);
-//                        courseScheduleTeacherSalary.setExpectSalary(feeInfo.get("onlineTeacherSalary"));
                     } else {
                         courseScheduleTeacherSalary.setExpectSalary(offlineTeacherSalary);
-//                        courseScheduleTeacherSalary.setExpectSalary(feeInfo.get("offlineTeacherSalary"));
                     }
                 }
                 if(Objects.isNull(courseScheduleTeacherSalary.getId())){

+ 44 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -719,7 +719,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		BigDecimal classTimeDuty=new BigDecimal(vipGroup.getSingleClassMinutes()).divide(teacherSalaryTimeUnit,2,BigDecimal.ROUND_DOWN);
 		BigDecimal offlineClassNum=new BigDecimal(vipGroup.getOfflineClassesNum());
 		BigDecimal onlineClassNum=new BigDecimal(vipGroup.getOnlineClassesNum());
+		onlineClassesUnitPrice=Objects.isNull(onlineClassesUnitPrice)?new BigDecimal(0):onlineClassesUnitPrice;
 		BigDecimal onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum);
+		offlineClassesUnitPrice=Objects.isNull(offlineClassesUnitPrice)?new BigDecimal(0):offlineClassesUnitPrice;
 		BigDecimal offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum);
 		BigDecimal totalClassNum=offlineClassNum.add(onlineClassNum);
 		BigDecimal teacherOnlineSalary=null,teacherOfflineSalary=null;
@@ -797,7 +799,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 					totalPrice=totalPrice.multiply(discount).divide(new BigDecimal(100)).setScale(2,BigDecimal.ROUND_HALF_UP);
 					break;
 				case GIVE_CLASS:
-					if(vipGroup.getGiveTeachMode()==TeachModeEnum.OFFLINE){
+					if(totalClassNum.compareTo(new BigDecimal(vipGroupActivity.getAttribute1()))<0){
+
+					}else if(vipGroup.getGiveTeachMode()==TeachModeEnum.OFFLINE){
 						if(totalClassNum.compareTo(new BigDecimal(vipGroupActivity.getAttribute1()))>-1){
 							offlineClassNum=offlineClassNum.subtract(new BigDecimal(vipGroupActivity.getAttribute2()));
 						}
@@ -1148,6 +1152,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		courseScheduleService.batchDeleteMusicGroupCourseWithStudent(vipGroupId.toString(),studentId,GroupType.VIP);
 
+		classGroup.setStudentNum(classGroupStudentMapperDao.countClassGroupStudentNum(classGroup.getId()));
+		classGroupDao.update(classGroup);
+
 		//学员退出班级群
 		ImGroupMember[] imGroupMembers = new ImGroupMember[]{new ImGroupMember(studentId.toString())};
 		imFeignService.groupJoin(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, null));
@@ -1228,6 +1235,11 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				classStudentMapperByUserIdAndClassGroupId.setStatus(ClassGroupStudentStatusEnum.QUIT);
 				classGroupStudentMapperDao.update(classStudentMapperByUserIdAndClassGroupId);
 
+				ClassGroup classGroup=new ClassGroup();
+				classGroup.setId(classStudentMapperByUserIdAndClassGroupId.getClassGroupId());
+				classGroup.setStudentNum(classGroupStudentMapperDao.countClassGroupStudentNum(classGroup.getId()));
+				classGroupDao.update(classGroup);
+
 				courseScheduleService.batchDeleteMusicGroupCourseWithStudent(studentPaymentOrder.getMusicGroupId(),studentApplyRefunds.getUserId(),GroupType.VIP);
 
 				//学员退出班级群
@@ -1312,9 +1324,13 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		}else{
 			vipGroupSalaryBaseInfo.setTotalFeeDeduction(new BigDecimal(0));
 		}
-		BigDecimal studentNum=new BigDecimal(classGroup.getStudentNum());
+
+		BigDecimal totalCoursePrice= courseScheduleStudentPaymentDao.countAllCourseFee(classGroup.getId());
+		if(Objects.isNull(totalCoursePrice)){
+			totalCoursePrice=new BigDecimal(0);
+		}
 		//课程总价
-		vipGroupSalaryBaseInfo.setTotalCoursePrice(vipGroup.getTotalPrice().multiply(studentNum));
+		vipGroupSalaryBaseInfo.setTotalCoursePrice(totalCoursePrice);
 
 		List<Map<String, BigDecimal>> teacherSalaryCount = courseScheduleTeacherSalaryDao.countTeacherOnlineOfflineSalaryByClass(classGroup.getId());
 		Map<String,BigDecimal> teacherTeachModeSalaryMap = MapUtil.convertIntegerMap(teacherSalaryCount);
@@ -1527,6 +1543,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("选择的学生中存在此课程中已存在的学生");
 		}
 
+		Date now=new Date();
+
 		List<CourseSchedule> surplusCourses = courseScheduleDao.findByClassGroupAndStatus(classGroup.getId(), CourseStatusEnum.NOT_START.getCode());
 		if(CollectionUtils.isEmpty(surplusCourses)){
 			throw new BizException("此vip课程没有剩余课程计划");
@@ -1540,6 +1558,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				surplusCoursesPrice=surplusCoursesPrice.add(vipGroup.getOnlineClassesUnitPrice());
 			}
 		}
+		List<CourseSchedule> vipGroupCourseSchedules=courseScheduleDao.findVipGroupCourseSchedules(vipGroupId);
+
+		if(CollectionUtils.isEmpty(vipGroupCourseSchedules)){
+			throw new BizException("此vip课不存在课程");
+		}
+
 		List<ImGroupMember> imGroupMemberList = new ArrayList<>();
 		List<ClassGroupStudentMapper> classGroupStudentMappers=new ArrayList<>();
 		//生成学生单课缴费信息
@@ -1548,7 +1572,22 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			if(sysUserCashAccount.getCourseBalance().compareTo(surplusCoursesPrice)<0){
 				throw new BizException("存在课程余额不足的学生");
 			}
-			courseScheduleStudentPaymentService.createCourseScheduleStudentPaymentForVipGroup(vipGroupId,studentId);
+//			courseScheduleStudentPaymentService.createCourseScheduleStudentPaymentForVipGroup(vipGroupId,studentId);
+
+			List<CourseScheduleStudentPayment> courseScheduleStudentPayments=new ArrayList<>();
+			for (CourseSchedule vipGroupCourseSchedule : vipGroupCourseSchedules) {
+				CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
+				courseScheduleStudentPayment.setGroupType(GroupType.VIP);
+				courseScheduleStudentPayment.setMusicGroupId(vipGroupId.toString());
+				courseScheduleStudentPayment.setClassGroupId(vipGroupCourseSchedule.getClassGroupId());
+				courseScheduleStudentPayment.setCourseScheduleId(vipGroupCourseSchedule.getId());
+				courseScheduleStudentPayment.setUserId(studentId);
+				courseScheduleStudentPayment.setExpectPrice(new BigDecimal(0));
+				courseScheduleStudentPayment.setCreateTime(now);
+				courseScheduleStudentPayment.setUpdateTime(now);
+				courseScheduleStudentPayments.add(courseScheduleStudentPayment);
+			}
+			courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
 
 			sysUserCashAccountService.updateCourseBalance(studentId,sysUserCashAccount.getCourseBalance().subtract(surplusCoursesPrice));
 
@@ -1566,7 +1605,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		classGroupStudentMapperDao.classGroupStudentsInsert(classGroupStudentMappers);
 
-		classGroup.setStudentNum(classGroup.getStudentNum()+classGroupStudentMappers.size());
+		classGroup.setStudentNum(classGroupStudentMapperDao.countClassGroupStudentNum(classGroup.getId()));
 		classGroupDao.update(classGroup);
 
 		try {

+ 0 - 1
mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml

@@ -463,7 +463,6 @@
             LEFT JOIN school s ON vg.teacher_school_id_ = s.id_
         WHERE
             vg.user_id_ = #{teacherId}
-            AND cg.del_flag_ = 0
         GROUP BY
         vg.id_,cg.id_
     </select>

+ 1 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -373,6 +373,7 @@
         <foreach collection="courseScheduleIds" item="id" open="(" close=")" separator=",">
             #{id}
         </foreach>
+        ORDER BY csts.create_time_ DESC
     </select>
 
     <select id="findTeachingTeachers" resultMap="com.ym.mec.biz.dal.dao.CourseScheduleTeacherSalaryDao.CourseScheduleTeacherSalary">

+ 8 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

@@ -151,6 +151,14 @@
 			AND cs.status_ = 'NOT_START'
 			AND cs.class_group_id_ = #{classGroupId}
     </select>
+	<select id="countAllCourseFee" resultType="java.math.BigDecimal">
+		SELECT
+			SUM(expect_price_)
+		FROM
+			course_schedule_student_payment cssp
+			LEFT JOIN course_schedule cs ON cssp.course_schedule_id_ = cs.id_
+		WHERE cs.class_group_id_ = #{classGroupId}
+    </select>
 
     <delete id="deleteStudentCourseSchedule">
 		DELETE FROM course_schedule_student_payment WHERE user_id_ = #{userId} AND course_schedule_id_ IN

+ 8 - 8
mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml

@@ -53,7 +53,7 @@
 		UPDATE course_schedule_teacher_salary 
 		<set>
 			<if test="userId != null">
-			user_id_ = #{userId},
+				user_id_ = #{userId},
 			</if>
             <if test="groupType != null">
                 group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
@@ -62,28 +62,28 @@
                 music_group_id_ = #{musicGroupId},
             </if>
 			<if test="subsidy != null">
-			subsidy_ = #{subsidy},
+				subsidy_ = #{subsidy},
 			</if>
 			<if test="expectSalary != null">
 				expect_salary_ = #{expectSalary},
 			</if>
 			<if test="courseScheduleId != null">
-			course_schedule_id_ = #{courseScheduleId},
+				course_schedule_id_ = #{courseScheduleId},
 			</if>
 			<if test="settlementTime != null">
-			settlement_time_ = #{settlementTime},
+				settlement_time_ = #{settlementTime},
 			</if>
 			<if test="teacherRole != null">
-			teacher_role_ = #{teacherRole},
+				teacher_role_ = #{teacherRole},
 			</if>
 			<if test="updateTime != null">
-			update_time_ = now(),
+				update_time_ = now(),
 			</if>
 			<if test="actualSalary != null">
-			actual_salary_ = #{actualSalary},
+				actual_salary_ = #{actualSalary},
 			</if>
 			<if test="classGroupId != null">
-			class_group_id_ = #{classGroupId},
+				class_group_id_ = #{classGroupId},
 			</if>
 		</set> WHERE id_ = #{id} 
 	</update>

+ 2 - 1
mec-biz/src/main/resources/config/mybatis/VipGroupCategoryMapper.xml

@@ -31,8 +31,9 @@
 
 	<select id="findAllByOrgan" resultMap="VipGroupCategory">
 		SELECT vgc.*,vgdcup.online_classes_unit_price_,vgdcup.offline_classes_unit_price_ FROM vip_group_category vgc
-		LEFT JOIN vip_group_default_classes_unit_price_ vgdcup ON vgc.id_=vgdcup.vip_group_category_id_ AND FIND_IN_SET(vgdcup.organ_id_,#{organId})
+		LEFT JOIN vip_group_default_classes_unit_price_ vgdcup ON vgc.id_=vgdcup.vip_group_category_id_
 		WHERE vgc.del_flag_=0
+		AND FIND_IN_SET(vgdcup.organ_id_,#{organId})
 		ORDER BY id_
 	</select>
 

+ 1 - 1
mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml

@@ -305,7 +305,7 @@
             vg.status_!=3
             AND vg.audit_status_='PASS'
             AND vg.status_=1
-            AND vg.courses_expire_date_ &gt;= NOW()
+            AND vg.courses_expire_date_ &gt;= DATE_FORMAT(NOW(),'%Y%m%d')
             AND (select count(1) as num from student_payment_order where vg.id_ = music_group_id_ AND user_id_=#{userId} AND status_='SUCCESS') = 0
             <if test="subjectId!=null">
                AND FIND_IN_SET(#{subjectId},cg.subject_id_list_)