소스 검색

1、旧数据无报名时间判断
2、新增vip课程调整

Joburgess 5 년 전
부모
커밋
51e7247af5

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

@@ -97,4 +97,15 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
     List<Integer> findNotStartCourseStudentPaymentIdsWithClassGroupAndStudent(@Param("classGroupId") Integer classGroupId,
                                                                               @Param("userId") Integer userId);
 
+    /**
+     * @describe 获取小课指定形式下最后一节课的课程单价
+     * @author Joburgess
+     * @date 2019/12/5
+     * @param vipGroupId: 小课编号
+     * @param teachMode: 教学形式
+     * @return java.math.BigDecimal
+     */
+    BigDecimal findVipGroupCoursePrice(@Param("vipGroupId") Integer vipGroupId,
+                                       @Param("teachMode") String teachMode);
+
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ClassGroupStudentMapper.java

@@ -36,6 +36,16 @@ public class ClassGroupStudentMapper {
 	/**  */
 	private java.util.Date createTime;
 
+	private String userName;
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
 	public String getMusicGroupId() {
 		return musicGroupId;
 	}

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

@@ -367,7 +367,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			latestCourseSchedule = courseSchedules.stream().max(Comparator.comparing(CourseSchedule::getEndClassTime)).get();
 		}
 		//获取第一节课和最后一节课所包含的时间段内已存在的课程
-		List<CourseSchedule> existCourseSchedules = courseScheduleDao.findAllCourseByDateZone(firstCourseSchedule.getStartClassTime(), latestCourseSchedule.getEndClassTime());
+		List<CourseSchedule> existCourseSchedules = courseScheduleDao
+				.findAllCourseByDateZone(firstCourseSchedule.getStartClassTime(), latestCourseSchedule.getEndClassTime());
 
 		//只需要调整课程信息的课程编号列表
 		List<Long> updateCourseScheduleIds = courseSchedules

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

@@ -1549,22 +1549,45 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("指定的vip课不存在");
 		}
 		ClassGroup classGroup = classGroupDao.findByVipGroup(vipGroup.getId(), null);
+		if(Objects.isNull(classGroup)){
+			throw new BizException("班级不存在");
+		}
+
+		Date now=new Date();
+
+		BigDecimal onlineCoursePrice = courseScheduleStudentPaymentDao.findVipGroupCoursePrice(vipGroup.getId().intValue(),TeachModeEnum.ONLINE.getCode());
+		if(Objects.isNull(onlineCoursePrice)){
+			onlineCoursePrice = new BigDecimal(0);
+		}
+		BigDecimal offlineCoursePrice = courseScheduleStudentPaymentDao.findVipGroupCoursePrice(vipGroup.getId().intValue(),TeachModeEnum.OFFLINE.getCode());
+		if(Objects.isNull(offlineCoursePrice)){
+			offlineCoursePrice = new BigDecimal(0);
+		}
+
+		BigDecimal surplusCourseTotalPrice = new BigDecimal(0);
+
 		//课程信息调整
-		vipGroupApplyDto.getCourseSchedules().forEach(courseSchedule -> {
+		for (CourseSchedule courseSchedule : vipGroupApplyDto.getCourseSchedules()) {
 			courseSchedule.setSchoolId(vipGroup.getTeacherSchoolId());
 			courseSchedule.setTeacherId(vipGroup.getUserId());
 			courseSchedule.setActualTeacherId(vipGroup.getUserId());
 			courseSchedule.setStatus(CourseStatusEnum.NOT_START);
 			courseSchedule.setType(CourseSchedule.CourseScheduleType.VIP);
 			courseSchedule.setClassGroupId(classGroup.getId());
-			courseSchedule.setGroupType(GroupType.MUSIC);
+			courseSchedule.setGroupType(GroupType.VIP);
 			courseSchedule.setMusicGroupId(vipGroup.getId().toString());
-		});
+			if (courseSchedule.getTeachMode().equals(TeachModeEnum.ONLINE)) {
+				surplusCourseTotalPrice = surplusCourseTotalPrice.add(onlineCoursePrice);
+			} else if (courseSchedule.getTeachMode().equals(TeachModeEnum.OFFLINE)) {
+				surplusCourseTotalPrice = surplusCourseTotalPrice.add(offlineCoursePrice);
+			}
+		}
+
 		courseScheduleService.batchAddCourseSchedule(vipGroupApplyDto.getCourseSchedules());
 
 		TeacherDefaultVipGroupSalary byTeacherAndCategory = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(vipGroup.getUserId(), vipGroup.getVipGroupCategoryId());
 
-		BigDecimal onlineTeacherSalary=new BigDecimal(0),offlineTeacherSalary=new BigDecimal(0);
+		BigDecimal onlineTeacherSalary,offlineTeacherSalary;
 		if(Objects.nonNull(byTeacherAndCategory)){
 			onlineTeacherSalary=byTeacherAndCategory.getOnlineClassesSalary();
 			offlineTeacherSalary=byTeacherAndCategory.getOfflineClassesSalary();
@@ -1586,7 +1609,28 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		List<ImGroupMember> imGroupMemberList = new ArrayList<>();
 		//生成学生单课缴费信息
 		for (ClassGroupStudentMapper classGroupStudent : classGroupStudents) {
-			courseScheduleStudentPaymentService.createCourseScheduleStudentPaymentForVipGroup(vipGroup.getId(),classGroupStudent.getUserId());
+			SysUserCashAccount sysUserCashAccount = sysUserCashAccountService.get(classGroupStudent.getUserId());
+			if(sysUserCashAccount.getCourseBalance().compareTo(surplusCourseTotalPrice)<0){
+				throw new BizException("[{}]学生课程余额不足",classGroupStudent.getUserName());
+			}
+			List<CourseScheduleStudentPayment> courseScheduleStudentPayments=new ArrayList<>();
+			for (CourseSchedule vipGroupCourseSchedule : vipGroupApplyDto.getCourseSchedules()) {
+				CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
+				courseScheduleStudentPayment.setGroupType(GroupType.VIP);
+				courseScheduleStudentPayment.setMusicGroupId(vipGroup.getId().toString());
+				courseScheduleStudentPayment.setClassGroupId(vipGroupCourseSchedule.getClassGroupId());
+				courseScheduleStudentPayment.setCourseScheduleId(vipGroupCourseSchedule.getId());
+				courseScheduleStudentPayment.setUserId(classGroupStudent.getUserId());
+				if(vipGroupCourseSchedule.getTeachMode().equals(TeachModeEnum.ONLINE)){
+					courseScheduleStudentPayment.setExpectPrice(onlineCoursePrice);
+				}else if(vipGroupCourseSchedule.getTeachMode().equals(TeachModeEnum.OFFLINE)){
+					courseScheduleStudentPayment.setExpectPrice(offlineCoursePrice);
+				}
+				courseScheduleStudentPayment.setCreateTime(now);
+				courseScheduleStudentPayment.setUpdateTime(now);
+				courseScheduleStudentPayments.add(courseScheduleStudentPayment);
+			}
+			courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
 			imGroupMemberList.add(new ImGroupMember(classGroupStudent.getUserId().toString()));
 		}
 		ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
@@ -1742,6 +1786,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
             List<VipGroup> needUpdateVipGroups = new ArrayList<>();
             for (VipGroup vipGroup : normalVipGroupList) {
                 try {
+                	if(Objects.isNull(vipGroup.getRegistrationStartTime())){
+                		continue;
+					}
                     if(now.before(vipGroup.getRegistrationStartTime())){
                         vipGroup.setStatus(VipGroupStatusEnum.NOT_START);
                     }

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

@@ -13,6 +13,7 @@
         <result column="class_group_id_" property="classGroupId"/>
         <result column="user_id_" property="userId"/>
         <result column="create_time_" property="createTime"/>
+        <result column="username_" property="userName"/>
         <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     </resultMap>
 
@@ -175,8 +176,13 @@
         AND status_ = 'NORMAL'
     </select>
     <select id="findByClassGroup" resultMap="ClassGroupStudentMapper">
-        SELECT * FROM class_group_student_mapper WHERE class_group_id_ = #{classGroupId}
-        AND status_ = 'NORMAL'
+        SELECT
+          cgsm.*,
+	      su.username_
+        FROM class_group_student_mapper cgsm
+            LEFT JOIN sys_user su ON cgsm.user_id_ = su.id_
+        WHERE class_group_id_ = #{classGroupId}
+          AND status_ = 'NORMAL'
     </select>
 
     <!-- 查询班级某状态的所有学生 -->

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

@@ -166,7 +166,21 @@
 		SELECT id_ FROM course_schedule_student_payment WHERE class_group_id_=#{classGroupId} AND user_id_=#{userId}
 	</select>
 
-	<delete id="deleteStudentCourseSchedule">
+    <select id="findVipGroupCoursePrice" resultType="java.math.BigDecimal">
+		SELECT
+			cssp.expect_price_
+		FROM
+			course_schedule cs
+			LEFT JOIN course_schedule_student_payment cssp ON cs.id_ = cssp.course_schedule_id_
+		WHERE
+			cs.music_group_id_ = #{vipGroupId}
+			AND cs.teach_mode_ = #{teachMode}
+			AND cs.group_type_ = 'VIP'
+			AND cssp.expect_price_ IS NOT NULL
+		ORDER BY CONCAT(cs.class_date_,' ',cs.start_class_time_) DESC LIMIT 1
+	</select>
+
+    <delete id="deleteStudentCourseSchedule">
 		DELETE FROM course_schedule_student_payment WHERE user_id_ = #{userId} AND course_schedule_id_ IN
 		<foreach collection="courseScheduleList" item="courseSchedule" index="index" open="(" close=")" separator=",">
 			#{courseSchedule.id}