Browse Source

feat:乐团费用改造

Joburgess 5 years ago
parent
commit
3674a415a9

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

@@ -325,4 +325,13 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
      * @return
      */
     List<RongyunBasicUserDto> queryNoJoinStu(@Param("roomId") String roomId, @Param("courseScheduleId") String courseScheduleId);
+
+    /**
+     * @describe 根据批次号获取学员课程缴费记录
+     * @author Joburgess
+     * @date 2020.10.30
+     * @param batchNo:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment>
+     */
+    List<CourseScheduleStudentPayment> findByBatchNo(@Param("batchNo") String batchNo);
 }

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

@@ -132,4 +132,13 @@ public interface MusicGroupPaymentCalenderDao extends BaseDAO<Long, MusicGroupPa
      * @return com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender
      */
     MusicGroupPaymentCalender getUnusedFirstPaymentCalenderWithCalenders(@Param("calenderIds") List<Long> calenderIds);
+
+    /**
+     * @describe 根据批次号获取缴费日历
+     * @author Joburgess
+     * @date 2020.10.30
+     * @param batchNo: 批次号
+     * @return java.util.List<com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender>
+     */
+    List<MusicGroupPaymentCalender> findByBatchNo(@Param("batchNo") String batchNo);
 }

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

@@ -138,6 +138,15 @@ public interface MusicGroupPaymentCalenderDetailDao extends BaseDAO<Long, MusicG
 	 */
 	List<MusicGroupPaymentCalenderDetail> getCalenderDetailWithCalender(@Param("calenderId") Long calenderId);
 
+	/**
+	 * @describe 获取指定缴费日历的详情
+	 * @author Joburgess
+	 * @date 2020.10.30
+	 * @param calenderIds:
+	 * @return java.util.List<com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail>
+	 */
+	List<MusicGroupPaymentCalenderDetail> getWithCalenderIds(@Param("calenderIds") List<Long> calenderIds);
+
     /**
      * @describe 获取乐团下未使用的缴费日历记录
      * @author Joburgess

+ 36 - 26
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java

@@ -12,8 +12,10 @@ import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.yqpay.DateUtils;
 import com.ym.mec.util.date.DateUtil;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
@@ -276,6 +278,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 	public void createForMusicGroup(String musicGroupId, List<CourseSchedule> courseSchedules, List<Integer> studentIds) {
 		MusicGroupPaymentCalender musicGroupUnusedFirstPaymentCalender = musicGroupPaymentCalenderDao.getMusicGroupUnusedFirstPaymentCalender(musicGroupId, studentIds);
 		if(Objects.isNull(musicGroupUnusedFirstPaymentCalender)){
@@ -302,6 +305,8 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 
 		Map<CourseSchedule.CourseScheduleType, MusicGroupPaymentCalenderCourseSettings> courseTypeCourseSettingMap = calenderCourseSettings.stream().collect(Collectors.toMap(MusicGroupPaymentCalenderCourseSettings::getCourseType, cs -> cs, (c1, c2) -> c1));
 
+		List<CourseScheduleStudentPayment> baseCourseScheduleStudentPayments = new ArrayList<>();
+
 		Map<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCourseMap = courseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getType));
 		for (Map.Entry<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCoursesEntry : typeCourseMap.entrySet()) {
 			MusicGroupPaymentCalenderCourseSettings musicGroupPaymentCalenderCourseSettings = courseTypeCourseSettingMap.get(typeCoursesEntry.getKey());
@@ -345,8 +350,10 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 			}
 			typeCourseStudentPayments.get(0).setOriginalPrice(typeCourseStudentPayments.get(0).getOriginalPrice().add(musicGroupPaymentCalenderCourseSettings.getCourseOriginalPrice().subtract(typeCourseTotalOriginalPrice)));
 			typeCourseStudentPayments.get(0).setExpectPrice(typeCourseStudentPayments.get(0).getExpectPrice().add(musicGroupPaymentCalenderCourseSettings.getCourseCurrentPrice().subtract(typeCourseTotalCurrentPrice)));
+			baseCourseScheduleStudentPayments.addAll(typeCourseStudentPayments);
 		}
 
+		List<MusicGroupPaymentCalenderDetail> needUpdateCalenderDetails = new ArrayList<>();
 		List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
 
 		for (Integer studentId : studentIds) {
@@ -358,42 +365,45 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 			if(!musicGroupPaymentCalenderDetail.getMusicGroupPaymentCalenderId().equals(musicGroupUnusedFirstPaymentCalender.getId())){
 				throw new BizException("缴费信息异常");
 			}
+			musicGroupPaymentCalenderDetail.setUseInCourse(1);
+			needUpdateCalenderDetails.add(musicGroupPaymentCalenderDetail);
 
-			List<StudentPaymentOrderDetail> studentPaymentOrderDetails = orderIdOrderDetailMap.get(musicGroupPaymentCalenderDetail.getPaymentOrderId());
-			for (CourseSchedule courseSchedule : courseSchedules) {
-				MusicGroupPaymentCalenderCourseSettings musicGroupPaymentCalenderCourseSettings = courseTypeCourseSettingMap.get(courseSchedule.getType());
-
-				//课程每分钟原价
-				BigDecimal unitMinuteOriginalPrice = musicGroupPaymentCalenderCourseSettings.getCourseOriginalPrice().divide(new BigDecimal(musicGroupPaymentCalenderCourseSettings.getCourseTotalMinuties()), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-				//课程每分钟现价
-				BigDecimal unitMinuteCurrentPrice = musicGroupPaymentCalenderCourseSettings.getCourseCurrentPrice().divide(new BigDecimal(musicGroupPaymentCalenderCourseSettings.getCourseTotalMinuties()), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-
-				//课程时长
-				int courseDuration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
-
-				//课程原价
-				BigDecimal courseOriginalPrice = unitMinuteOriginalPrice.multiply(new BigDecimal(courseDuration)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN);
-				//课程现价
-				BigDecimal courseCurrentPrice = unitMinuteCurrentPrice.multiply(new BigDecimal(courseDuration)).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_DOWN);
-
+			for (CourseScheduleStudentPayment baseCourseScheduleStudentPayment : baseCourseScheduleStudentPayments) {
 				CourseScheduleStudentPayment cssp = new CourseScheduleStudentPayment();
-				cssp.setGroupType(courseSchedule.getGroupType());
-				cssp.setMusicGroupId(courseSchedule.getMusicGroupId());
-				cssp.setCourseScheduleId(courseSchedule.getId());
-				cssp.setClassGroupId(courseSchedule.getClassGroupId());
+				BeanUtils.copyProperties(baseCourseScheduleStudentPayment, cssp);
 				cssp.setUserId(studentId);
-				cssp.setBatchNo(musicGroupUnusedFirstPaymentCalender.getBatchNo());
-				cssp.setOriginalPrice(courseOriginalPrice);
-				cssp.setExpectPrice(courseCurrentPrice);
-				cssp.setActualPrice(BigDecimal.ZERO);
 				courseScheduleStudentPayments.add(cssp);
 			}
 		}
 		courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
+		musicGroupPaymentCalenderDetailDao.batchUpdate(needUpdateCalenderDetails);
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 	public void updateForMusicGroupWithPaymentCalender(String batchNo) {
-
+		List<CourseScheduleStudentPayment> courseScheduleStudentPayments = courseScheduleStudentPaymentDao.findByBatchNo(batchNo);
+		if(CollectionUtils.isEmpty(courseScheduleStudentPayments)){
+			return;
+		}
+		List<MusicGroupPaymentCalender> musicGroupPaymentCalenders = musicGroupPaymentCalenderDao.findByBatchNo(batchNo);
+		if(CollectionUtils.isEmpty(musicGroupPaymentCalenders)){
+			return;
+		}
+		List<Long> calenderIds = musicGroupPaymentCalenders.stream().map(MusicGroupPaymentCalender::getId).collect(Collectors.toList());
+		List<MusicGroupPaymentCalenderDetail> calenderDetails = musicGroupPaymentCalenderDetailDao.getWithCalenderIds(calenderIds);
+		//学员总缴费金额
+		BigDecimal totalActualAmount = calenderDetails.stream().map(MusicGroupPaymentCalenderDetail::getActualAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+		for (CourseScheduleStudentPayment courseScheduleStudentPayment : courseScheduleStudentPayments) {
+			if(totalActualAmount.compareTo(courseScheduleStudentPayment.getExpectPrice())>=0){
+				courseScheduleStudentPayment.setActualPrice(courseScheduleStudentPayment.getExpectPrice());
+				totalActualAmount=totalActualAmount.subtract(courseScheduleStudentPayment.getExpectPrice());
+			}else{
+				courseScheduleStudentPayment.setActualPrice(totalActualAmount);
+				totalActualAmount=BigDecimal.ZERO;
+			}
+		}
+		courseScheduleStudentPaymentDao.batchUpdate(courseScheduleStudentPayments);
 	}
 }

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

@@ -521,4 +521,8 @@
 			AND cssp.music_group_id_ = #{groupId}
 			AND CONCAT( cs.class_date_, ' ', cs.start_class_time_ ) > NOW( )
 	</select>
+
+    <select id="findByBatchNo" resultMap="CourseScheduleStudentPayment">
+		SELECT * FROM course_schedule_student_payment WHERE batch_no_=#{batchNo}
+	</select>
 </mapper>

+ 12 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderDetailMapper.xml

@@ -330,4 +330,16 @@
 			mgpc.music_group_id_ = #{musicGroupId}
 			AND NOT EXISTS ( SELECT id_ FROM course_schedule_student_payment WHERE batch_no_ = mgpcd.music_group_payment_calender_id_ AND music_group_id_ = #{musicGroupId} )
 	</select>
+
+    <select id="getWithCalenderIds" resultType="com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail">
+		SELECT
+			mgpcd.*
+		FROM
+			music_group_payment_calender_detail mgpcd
+		WHERE
+			mgpc.music_group_payment_calender_id_ IN
+			<foreach collection="calenderIds" item="calenderId" open="(" close=")" separator=",">
+				#{calenderId}
+			</foreach>
+	</select>
 </mapper>

+ 4 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMapper.xml

@@ -336,4 +336,8 @@
         </foreach>
         ORDER BY create_time_ LIMIT 1;
     </select>
+
+    <select id="findByBatchNo" resultMap="MusicGroupPaymentCalender">
+        SELECT * FROM music_group_payment_calender WHERE batch_no_=#{batchNo}
+    </select>
 </mapper>