Преглед изворни кода

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

zouxuan пре 2 година
родитељ
комит
70cf44f249

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/OperatingReportNewDao.java

@@ -20,7 +20,7 @@ public interface OperatingReportNewDao extends BaseDAO<Integer, OperatingReportN
 //    List<Map<Integer,BigDecimal>> sumCloudCourseAmount(@Param("firstDay") String firstDay, @Param("lastDay") String lastDay);
 
     //付费课程收入
-    List<Map<Integer,BigDecimal>> sumCourseAmount(@Param("firstDay") String firstDay, @Param("lastDay") String lastDay);
+    List<Map<Integer,BigDecimal>> sumCourseAmount(@Param("firstDay") String firstDay, @Param("lastDay") String lastDay, @Param("currentYear") String currentYear);
 
     //个人云教练服务收入
     List<Map<Integer,BigDecimal>> sumPersonalCloudAmount(@Param("month") String month, @Param("firstDay") String firstDay, @Param("lastDay") String lastDay);

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDetailDao.java

@@ -139,7 +139,8 @@ public interface StudentPaymentOrderDetailDao extends BaseDAO<Long, StudentPayme
      * @date 2020/12/7 0007
      */
     List<StudentPaymentOrderDetail> getWithUserAndOrderType(@Param("userId") Integer userId,
-                                                            @Param("orderType") OrderTypeEnum orderType);
+                                                            @Param("musicGroupId") String musicGroupId,
+                                                            @Param("orderDetailType") OrderDetailTypeEnum orderDetailType);
 
     List<StudentPaymentOrderDetail> getWithIds(@Param("paymentOrderIds") List<Long> paymentOrderIds);
 

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

@@ -757,4 +757,6 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
     * @date 2022/10/9 18:11
     */
     List<Map<Integer, String>> queryStudentEduMap(Integer userId);
+
+    void updateCourseFee(@Param("id") Long id, @Param("musicalFee") BigDecimal musicalFee);
 }

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

@@ -288,7 +288,7 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         cloudTeacherOrder.setAmount(cloudTeacherFee);
         cloudTeacherOrder.setStudentId(order.getUserId());
         cloudTeacherOrder.setStatus(1);
-        cloudTeacherOrder.setOperatingAmount(calenderMember.getIncome());
+        cloudTeacherOrder.setOperatingAmount(calenderMember.getIncome().compareTo(BigDecimal.ZERO) == 0?cloudTeacherFee:calenderMember.getIncome());
         /*MusicGroupPaymentCalender calender = musicGroupPaymentCalenderDao.get(order.getCalenderId());
         if(calender.getCloudTeacherPaymentFlag()){
             cloudTeacherOrder.setOperatingAmount(BigDecimal.ZERO);

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

@@ -446,10 +446,10 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
             classGroupService.addStudentToClassGroupAndCourseArranging(calenderAddStudent.getStudentIds(), calenderAddStudent.getClassGroupIds(),
                     batchNo, settingsList, musicGroup);
             //记录经营报表学员课程费用
-            if(CollectionUtils.isNotEmpty(settingsList)){
-                BigDecimal coursePrice = settingsList.stream().map(e -> e.getCourseCurrentPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
-                studentMusicCourseFeeService.addExpectPrice(calenderAddStudent.getStudentIds(),musicGroupId,coursePrice);
-            }
+//            if(CollectionUtils.isNotEmpty(settingsList)){
+//                BigDecimal coursePrice = settingsList.stream().map(e -> e.getCourseCurrentPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
+//                studentMusicCourseFeeService.addExpectPrice(calenderAddStudent.getStudentIds(),musicGroupId,coursePrice);
+//            }
             ExecutorService executor = Executors.newFixedThreadPool(5);
             CompletableFuture.runAsync(() -> {
                 imUserFriendService.refreshGroupImUserFriend(musicGroupId, GroupType.MUSIC);

+ 97 - 22
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentStudentCourseDetailServiceImpl.java

@@ -1,11 +1,10 @@
 package com.ym.mec.biz.service.impl;
 
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderCourseSettingsDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentStudentCourseDetailDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDetailDao;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderCourseSettings;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentStudentCourseDetail;
+import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dto.StudentApplyInstrumentDto;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
+import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
 import com.ym.mec.biz.service.MusicGroupPaymentStudentCourseDetailService;
 import com.ym.mec.biz.service.StudentMusicCourseFeeService;
 import com.ym.mec.common.dal.BaseDAO;
@@ -16,13 +15,11 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PayUserType.SCHOOL;
+import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PayUserType.STUDENT;
 
 @Service
 public class MusicGroupPaymentStudentCourseDetailServiceImpl extends BaseServiceImpl<Long, MusicGroupPaymentStudentCourseDetail>  implements MusicGroupPaymentStudentCourseDetailService {
@@ -35,6 +32,14 @@ public class MusicGroupPaymentStudentCourseDetailServiceImpl extends BaseService
 	private StudentMusicCourseFeeService studentMusicCourseFeeService;
 	@Autowired
 	private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
+	@Autowired
+	private MusicGroupDao musicGroupDao;
+	@Autowired
+	private StudentRegistrationDao studentRegistrationDao;
+	@Autowired
+	private ChargeTypeSubjectMapperDao chargeTypeSubjectMapperDao;
+	@Autowired
+	private StudentCourseFeeDetailDao studentCourseFeeDetailDao;
 
 	@Override
 	public BaseDAO<Long, MusicGroupPaymentStudentCourseDetail> getDAO() {
@@ -83,10 +88,10 @@ public class MusicGroupPaymentStudentCourseDetailServiceImpl extends BaseService
 					musicGroupPaymentStudentCourseDetailList.add(musicGroupPaymentStudentCourseDetail);
 					reduce = reduce.add(musicGroupPaymentStudentCourseDetail.getCourseCurrentPrice());
 				}
-				if(reduce.compareTo(BigDecimal.ZERO) > 0){
+//				if(reduce.compareTo(BigDecimal.ZERO) > 0){
 					//汇总学员乐团课费,如果有溢出的乐器费用、云教练费用,也一并汇总,用于计算经营报表
-					studentMusicCourseFeeService.addExpectPrice(studentId,musicGroupId,reduce);
-				}
+//					studentMusicCourseFeeService.addExpectPrice(studentId,musicGroupId,reduce);
+//				}
 			}
 			if (musicGroupPaymentStudentCourseDetailList.size() > 0) {
 				musicGroupPaymentStudentCourseDetailDao.batchInsert(musicGroupPaymentStudentCourseDetailList);
@@ -104,7 +109,40 @@ public class MusicGroupPaymentStudentCourseDetailServiceImpl extends BaseService
 			List<MusicGroupPaymentCalenderCourseSettings> courseSettingsList = musicGroupPaymentCalenderCourseSettingsDao
 					.getWithPaymentCalender(musicGroupPaymentCalender.getId());
 			Boolean cloudTeacherPaymentFlag = musicGroupPaymentCalender.getCloudTeacherPaymentFlag();
-			BigDecimal reduce = BigDecimal.ZERO;
+			String musicGroupId = musicGroupPaymentCalender.getMusicGroupId();
+			MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
+			//免费团,并且购买乐器
+			BigDecimal musicalFee = BigDecimal.ZERO;
+			if(musicGroup.getCourseViewType() == CourseViewTypeEnum.FREE){
+				StudentPaymentOrderDetail orderMusical = studentPaymentOrderDetailDao.findApplyOrderMusical(paymentOrderId);
+				if(Objects.nonNull(orderMusical)){
+					//如果是免费团,那么要处理乐器溢出的课程费用
+					CourseViewTypeEnum courseViewType = musicGroup.getCourseViewType();
+					StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(userId, musicGroupId);
+					Integer subjectId = studentRegistration.getActualSubjectId();
+					ChargeTypeSubjectMapper chargeType = chargeTypeSubjectMapperDao.findByViewTypeANdSubject(courseViewType,subjectId,musicGroup.getTenantId());
+					if(Objects.nonNull(chargeType) && chargeType.getFee() != null && orderMusical.getPrice().compareTo(BigDecimal.ZERO) > 0
+							&& chargeType.getFee().compareTo(orderMusical.getPrice()) < 0){
+						musicalFee = orderMusical.getPrice().subtract(chargeType.getFee());
+						//累加充值金额
+						studentRegistrationDao.updateCourseFee(studentRegistration.getId(),musicalFee);
+						//添加日志
+						StudentCourseFeeDetail studentCourseFeeDetail = new StudentCourseFeeDetail();
+						studentCourseFeeDetail.setTenantId(musicGroup.getTenantId());
+						studentCourseFeeDetail.setStudentRegistrationId(studentRegistration.getId());
+						studentCourseFeeDetail.setAmount(musicalFee);
+						studentCourseFeeDetail.setSurplusCourseFee(studentRegistration.getSurplusCourseFee().add(musicalFee));
+						studentCourseFeeDetail.setMemo("免费团,购买乐器赠送课费");
+						studentCourseFeeDetail.setOperator(userId);
+						studentCourseFeeDetailDao.insert(studentCourseFeeDetail);
+						List<MusicGroupPaymentStudentCourseDetail> courseDetails = musicGroupPaymentStudentCourseDetailDao.findByCalenderAndUserId(musicGroupPaymentCalender.getId().toString(), userId);
+						if(CollectionUtils.isNotEmpty(courseDetails)){
+							distributeTotalAmount(courseDetails,musicalFee);
+							musicGroupPaymentStudentCourseDetailDao.batchUpdate(courseDetails);
+						}
+					}
+				}
+			}
 			for (MusicGroupPaymentCalenderCourseSettings courseSetting : courseSettingsList) {
 				if (musicGroupPaymentCalender.getPayUserType().equals(MusicGroupPaymentCalender.PayUserType.STUDENT)
 						&& !orderDetailTypes.contains(courseSetting.getCourseType().getCode())) {
@@ -122,9 +160,9 @@ public class MusicGroupPaymentStudentCourseDetailServiceImpl extends BaseService
 				musicGroupPaymentStudentCourseDetail.setTotalCourseMinutes(courseSetting.getCourseTotalMinuties());
 				musicGroupPaymentStudentCourseDetail.setSubCourseMinutes(courseSetting.getCourseTotalMinuties());
 				musicGroupPaymentStudentCourseDetail.setCourseOriginalPrice(courseSetting.getCourseOriginalPrice());
-				musicGroupPaymentStudentCourseDetail.setCourseCurrentPrice(courseSetting.getOverflowCoursePrice());
+				musicGroupPaymentStudentCourseDetail.setCourseCurrentPrice(courseSetting.getOverflowCoursePrice().add(musicalFee));
 				musicGroupPaymentStudentCourseDetail.setSubCourseOriginalPrice(courseSetting.getCourseOriginalPrice());
-				musicGroupPaymentStudentCourseDetail.setSubCourseCurrentPrice(courseSetting.getOverflowCoursePrice());
+				musicGroupPaymentStudentCourseDetail.setSubCourseCurrentPrice(courseSetting.getOverflowCoursePrice().add(musicalFee));
 				if(musicGroupPaymentCalender.getPayUserType() == SCHOOL){
 					musicGroupPaymentStudentCourseDetail.setCourseCurrentPrice(BigDecimal.ZERO);
 					musicGroupPaymentStudentCourseDetail.setSubCourseCurrentPrice(BigDecimal.ZERO);
@@ -133,16 +171,53 @@ public class MusicGroupPaymentStudentCourseDetailServiceImpl extends BaseService
 				musicGroupPaymentStudentCourseDetail.setCloudTeacherPaymentFlag(cloudTeacherPaymentFlag);
 				musicGroupPaymentStudentCourseDetails.add(musicGroupPaymentStudentCourseDetail);
 			}
-			if(reduce.compareTo(BigDecimal.ZERO) > 0){
-				//汇总学员乐团课费,如果有溢出的乐器费用、云教练费用,也一并汇总,用于计算经营报表
-				studentMusicCourseFeeService.addExpectPrice(userId,musicGroupPaymentCalender.getMusicGroupId(),reduce);
-			}
 			if (musicGroupPaymentStudentCourseDetails.size() > 0) {
+				if(musicGroupPaymentCalender.getPayUserType() == STUDENT && musicGroup.getCourseViewType() == CourseViewTypeEnum.FREE) {
+					List<StudentPaymentOrderDetail> instrumentDtos = studentPaymentOrderDetailDao.getWithUserAndOrderType(userId, musicGroupId, OrderDetailTypeEnum.MUSICAL);
+					//是否买过乐器
+					if(CollectionUtils.isNotEmpty(instrumentDtos)){
+						StudentPaymentOrderDetail orderMusical = instrumentDtos.get(0);
+						//如果是免费团,那么要处理乐器溢出的课程费用
+						CourseViewTypeEnum courseViewType = musicGroup.getCourseViewType();
+						StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(userId, musicGroupId);
+						Integer subjectId = studentRegistration.getActualSubjectId();
+						ChargeTypeSubjectMapper chargeType = chargeTypeSubjectMapperDao.findByViewTypeANdSubject(courseViewType,subjectId,musicGroup.getTenantId());
+						if(Objects.nonNull(chargeType) && chargeType.getFee() != null && orderMusical.getPrice().compareTo(BigDecimal.ZERO) > 0
+								&& chargeType.getFee().compareTo(orderMusical.getPrice()) < 0){
+							musicalFee = orderMusical.getPrice().subtract(chargeType.getFee());
+							distributeTotalAmount(musicGroupPaymentStudentCourseDetails,musicalFee);
+						}
+					}
+				}
 				musicGroupPaymentStudentCourseDetailDao.batchInsert(musicGroupPaymentStudentCourseDetails);
 			}
 		}
 	}
 
+	public static void distributeTotalAmount(List<MusicGroupPaymentStudentCourseDetail> courseDetails, BigDecimal totalAmount) {
+		if(CollectionUtils.isEmpty(courseDetails) || BigDecimal.ZERO.compareTo(totalAmount) == 0){
+			return;
+		}
+		BigDecimal remainingAmount = totalAmount;
+		int lastIndex = courseDetails.size() - 1;
+		BigDecimal totalUnitPrice = courseDetails.stream().map(e -> e.getCourseOriginalPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+		// 分摊总金额
+		for (int i = 0; i < lastIndex; i++) {
+			MusicGroupPaymentStudentCourseDetail courseDetail = courseDetails.get(i);
+			BigDecimal ratio = courseDetail.getCourseOriginalPrice().divide(totalUnitPrice, 10, BigDecimal.ROUND_HALF_UP);
+			BigDecimal itemAmount = totalAmount.multiply(ratio).setScale(2, BigDecimal.ROUND_HALF_UP);
+			courseDetail.setCourseCurrentPrice(itemAmount.add(courseDetail.getCourseCurrentPrice()));
+			courseDetail.setSubCourseCurrentPrice(courseDetail.getCourseCurrentPrice());
+			remainingAmount = remainingAmount.subtract(itemAmount);
+		}
+
+		// 将剩余的金额放在最后一个Item对象中
+		MusicGroupPaymentStudentCourseDetail lastItem = courseDetails.get(lastIndex);
+		lastItem.setCourseCurrentPrice(lastItem.getCourseCurrentPrice().add(remainingAmount));
+		lastItem.setSubCourseCurrentPrice(lastItem.getCourseCurrentPrice());
+	}
+
 	@Override
 	public List<MusicGroupPaymentStudentCourseDetail> queryByMusicGroupPaymentStudentCourseDetailId(List<Long> musicGroupPaymentCalenderDetailIdList) {
 		return musicGroupPaymentStudentCourseDetailDao.queryByMusicGroupPaymentStudentCourseDetailId(musicGroupPaymentCalenderDetailIdList);
@@ -177,7 +252,7 @@ public class MusicGroupPaymentStudentCourseDetailServiceImpl extends BaseService
 			List<Long> courseDetailIds = courseDetails.stream().map(e -> e.getId()).collect(Collectors.toList());
 			musicGroupPaymentStudentCourseDetailDao.delByIds(courseDetailIds);
 			//汇总学员乐团课费,如果有溢出的乐器费用、云教练费用,也一并汇总,用于计算经营报表
-			courseDetails = courseDetails.stream().filter(e -> e.getCourseCurrentPrice().compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList());
+			/*courseDetails = courseDetails.stream().filter(e -> e.getCourseCurrentPrice().compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList());
 			if(CollectionUtils.isNotEmpty(courseDetails)){
 				Map<Integer, List<MusicGroupPaymentStudentCourseDetail>> userMap = courseDetails.stream().collect(Collectors.groupingBy(e -> e.getUserId()));
 				for (Integer userId : userMap.keySet()) {
@@ -188,7 +263,7 @@ public class MusicGroupPaymentStudentCourseDetailServiceImpl extends BaseService
 						studentMusicCourseFeeService.cutExpectPrice(userId,musicGroupId,priceMap.get(musicGroupId));
 					}
 				}
-			}
+			}*/
 		}
 	}
 }

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

@@ -50,6 +50,7 @@ public class OperatingReportNewServiceImpl extends BaseServiceImpl<Integer, Oper
 		String firstDayOfMonth = DateUtil.dateToString(DateUtil.getFirstDayOfMonth(month),DateUtil.ISO_EXPANDED_DATE_FORMAT);
 		String lastDayOfMonth = DateUtil.dateToString(DateUtil.getLastDayOfMonth(month),DateUtil.ISO_EXPANDED_DATE_FORMAT);
 		String currentMonth = DateUtil.dateToString(DateUtil.getLastDayOfMonth(month),DateUtil.ISO_YEAR_MONTH_FORMAT);
+		String currentYear = DateUtil.dateToString(DateUtil.getLastDayOfMonth(month),DateUtil.ISO_YEAR_FORMAT);
 		operatingReportNewDao.deleteByMonth(currentMonth);
 		List<OperatingReportNew> operatingList = operatingReportNewDao.initOperatingReport(currentMonth);
 		//更新团体云教练计费时间()
@@ -81,7 +82,7 @@ public class OperatingReportNewServiceImpl extends BaseServiceImpl<Integer, Oper
 		//亏损的云教练算到当月实际收入
 //		Map<Integer, BigDecimal> collect22 = MapUtil.convertIntegerMap(operatingReportNewDao.sumLossCloudAmount(currentMonth));
 		//付费课程实际收入
-		Map<Integer, BigDecimal> collect2 = MapUtil.convertIntegerMap(operatingReportNewDao.sumCourseAmount(firstDayOfMonth,lastDayOfMonth));
+		Map<Integer, BigDecimal> collect2 = MapUtil.convertIntegerMap(operatingReportNewDao.sumCourseAmount(firstDayOfMonth,lastDayOfMonth,currentYear));
 
 		//个人云教练当月收入
 		Map<Integer, BigDecimal> collect3 = MapUtil.convertIntegerMap(operatingReportNewDao.sumPersonalCloudAmount(currentMonth,firstDayOfMonth,lastDayOfMonth));

+ 9 - 28
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderDetailServiceImpl.java

@@ -665,13 +665,18 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
             studentCourseFeeDetail.setOperator(userId);
             studentCourseFeeDetailDao.insert(studentCourseFeeDetail);
             //记录用户实际课费
-            studentMusicCourseFeeService.addActualPrice(userId,musicGroupId,courseFee);
+//            studentMusicCourseFeeService.addActualPrice(userId,musicGroupId,courseFee);
         }
+        List<OrderDetailTypeEnum> detailTypeEnums = allDetails.stream().map(StudentPaymentOrderDetail::getType).collect(Collectors.toList());
+        //学生云教练处理
+        if (detailTypeEnums.contains(CLOUD_TEACHER) && studentPaymentOrder.getType() == OrderTypeEnum.APPLY) {
+            studentRegistration.setHasCloudTeacher(1);
+        }
+        studentRegistrationDao.update(studentRegistration);
 
         //缴费项目详情
         MusicGroupPaymentCalenderDetail paymentCalenderDetail = musicGroupPaymentCalenderDetailService.addCalenderDetail(studentPaymentOrder);
 
-        List<OrderDetailTypeEnum> detailTypeEnums = allDetails.stream().map(StudentPaymentOrderDetail::getType).collect(Collectors.toList());
         //销售订单详情
         if (allDetails.size() > 0 && (detailTypeEnums.contains(MUSICAL) || detailTypeEnums.contains(ACCESSORIES) || detailTypeEnums.contains(TEACHING))) {
             BigDecimal couponRemitFee = studentPaymentOrder.getCouponRemitFee();
@@ -712,29 +717,6 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
                 repair.setStudentInstrumentId(studentInstrumentId);
                 studentPaymentOrderDetailDao.update(repair);
             }
-            if(musicGroup.getCourseViewType() == CourseViewTypeEnum.FREE){
-                //如果是免费团,那么要处理乐器溢出的课程费用
-                CourseViewTypeEnum courseViewType = musicGroup.getCourseViewType();
-                Integer subjectId = studentRegistration.getActualSubjectId();
-                ChargeTypeSubjectMapper chargeType = chargeTypeSubjectMapperDao.findByViewTypeANdSubject(courseViewType,subjectId,musicGroup.getTenantId());
-                if(Objects.nonNull(chargeType) && chargeType.getFee() != null && musical.getPrice().compareTo(BigDecimal.ZERO) > 0
-                        && chargeType.getFee().compareTo(musical.getPrice()) < 0){
-                    BigDecimal musicalFee = musical.getPrice().subtract(chargeType.getFee());
-                    studentMusicCourseFeeService.addExpectPrice(studentRegistration.getUserId(),
-                            musicGroup.getId(),musicalFee);
-                    //累加充值金额
-                    studentRegistration.setSurplusCourseFee(studentRegistration.getSurplusCourseFee().add(musicalFee));
-                    //添加日志
-                    StudentCourseFeeDetail studentCourseFeeDetail = new StudentCourseFeeDetail();
-                    studentCourseFeeDetail.setTenantId(tenantId);
-                    studentCourseFeeDetail.setStudentRegistrationId(studentRegistration.getId());
-                    studentCourseFeeDetail.setAmount(musicalFee);
-                    studentCourseFeeDetail.setSurplusCourseFee(studentRegistration.getSurplusCourseFee());
-                    studentCourseFeeDetail.setMemo("免费团,购买乐器赠送课费");
-                    studentCourseFeeDetail.setOperator(userId);
-                    studentCourseFeeDetailDao.insert(studentCourseFeeDetail);
-                }
-            }
         }
 
         //学生云教练处理
@@ -751,13 +733,13 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
                 if(calenderMember.getActualAmount().compareTo(courseIncome) > 0){
                     BigDecimal subtract = calenderMember.getActualAmount().subtract(courseIncome);
                     //累加充值金额
-                    studentRegistration.setSurplusCourseFee(studentRegistration.getSurplusCourseFee().add(subtract));
+                    studentRegistrationDao.updateCourseFee(studentRegistration.getId(),subtract);
                     //添加日志
                     StudentCourseFeeDetail studentCourseFeeDetail = new StudentCourseFeeDetail();
                     studentCourseFeeDetail.setTenantId(tenantId);
                     studentCourseFeeDetail.setStudentRegistrationId(studentRegistration.getId());
                     studentCourseFeeDetail.setAmount(subtract);
-                    studentCourseFeeDetail.setSurplusCourseFee(studentRegistration.getSurplusCourseFee());
+                    studentCourseFeeDetail.setSurplusCourseFee(studentRegistration.getSurplusCourseFee().add(subtract));
                     studentCourseFeeDetail.setMemo("会员团,购买云教练赠送课费");
                     studentCourseFeeDetail.setOperator(userId);
                     studentCourseFeeDetailDao.insert(studentCourseFeeDetail);
@@ -768,7 +750,6 @@ public class StudentPaymentOrderDetailServiceImpl extends BaseServiceImpl<Long,
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
             cloudTeacherOrderService.addOrderDetail2CloudTeacher(studentPaymentOrder, cloudTeacherFee);
         }
-        studentRegistrationDao.update(studentRegistration);
     }
 
     @Override

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

@@ -4127,7 +4127,7 @@
     </select>
 
     <select id="checkCourseIsSettlementReport" resultType="int">
-        SELECT COUNT(*) course_schedule where settlement_report_flag_ = 1 and id_ = #{courseScheduleId}
+        SELECT COUNT(*) FROM course_schedule where settlement_report_flag_ = 1 and id_ = #{courseScheduleId}
     </select>
 
     <select id="queryTeacherServeHomeworkDetailV2"

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

@@ -115,7 +115,13 @@
     </delete>
 
     <select id="queryByMusicGroupOrganizationCourseSettingsId" resultMap="MusicGroupOrganizationCourseSettingsDetail">
-        SELECT * FROM music_group_organization_course_settings_detail
-        where music_group_organization_course_settings_id_ = #{musicGroupOrganizationCourseSettingsId}
+        SELECT mgocsd.id_, mgocsd.music_group_organization_course_settings_id_, mgocsd.course_type_, mgocsd.course_total_minuties_,
+               mgocsd.course_original_price_, mgocsd.course_current_price_, mgocsd.is_student_optional_, mgocsd.create_time_,
+               mgocsd.update_time_, mgocsd.tenant_id_,ocups.unit_price_ FROM music_group_organization_course_settings_detail mgocsd
+                                                                                 left join music_group_organization_course_settings mgocs ON mgocsd.music_group_organization_course_settings_id_ = mgocs.id_
+                                                                                 left join organization_course_unit_price_settings ocups ON ocups.course_view_type_ = mgocs.course_view_type_ AND ocups.course_type_ = mgocsd.course_type_
+        where mgocsd.music_group_organization_course_settings_id_ = #{musicGroupOrganizationCourseSettingsId}
+          AND ocups.course_view_type_ = mgocs.course_view_type_ AND ocups.course_type_ = mgocsd.course_type_ AND mgocsd.music_group_organization_course_settings_id_ = mgocs.id_
+          AND mgocs.organ_id_ = ocups.organ_id_
     </select>
 </mapper>

+ 3 - 2
mec-biz/src/main/resources/config/mybatis/OperatingReportNewMapper.xml

@@ -191,14 +191,15 @@
 		SELECT cs.organ_id_ 'key',SUM(cssp.actual_price_) 'value' FROM course_schedule cs
 		LEFT JOIN course_schedule_student_payment cssp ON cssp.course_schedule_id_ = cs.id_
 		where cs.del_flag_ = 0 AND cs.is_lock_ = 0 AND cs.pre_course_flag_ = 0 AND (cs.new_course_id_ IS NULL OR cs.new_course_id_ = cs.id_)
-		AND cssp.actual_price_ > 0 AND cs.class_date_ BETWEEN #{firstDay} AND #{lastDay} group by cs.organ_id_;
+		AND cssp.actual_price_ > 0 AND cs.class_date_ BETWEEN #{firstDay} AND #{lastDay}
+		AND DATE_FORMAT(cs.create_time_,'%Y') = #{currentYear} AND cs.settlement_report_flag_ = 0 group by cs.organ_id_;
 	</select>
 	<select id="sumPersonalCloudAmount" resultType="java.util.Map">
 		select cto.organ_id_ 'key',TRUNCATE(SUM(operating_amount_ / (TIMESTAMPDIFF(DAY,cto.start_time_,cto.end_time_) + 1) *
 		(TIMESTAMPDIFF(DAY,CASE WHEN start_time_ &lt; #{firstDay} THEN #{firstDay} ELSE DATE_FORMAT(start_time_,'%Y-%m-%d') END,
 		CASE WHEN DATE_FORMAT(end_time_,'%Y-%m') > #{month} THEN #{lastDay} ELSE DATE_FORMAT(end_time_,'%Y-%m-%d') END) + 1)),2) 'value'
 		from cloud_teacher_order cto
-		where operating_amount_ > 0 AND #{month} BETWEEN DATE_FORMAT(start_time_,'%Y-%m')
+		where operating_amount_ > 0 AND #{month} BETWEEN DATE_FORMAT(start_time_,'%Y-%m') AND cto.settlement_report_flag_ = 0 AND cto.status_ = 2
 		AND DATE_FORMAT(end_time_,'%Y-%m') group by cto.organ_id_;
 	</select>
 	<select id="sumGroupCloudAmount" resultType="java.util.Map">

+ 3 - 2
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderDetailMapper.xml

@@ -373,9 +373,10 @@
     <select id="getWithUserAndOrderType" resultMap="StudentPaymentOrderDetail">
         SELECT spod.* FROM student_payment_order_detail spod
         LEFT JOIN student_payment_order spo ON spo.id_=spod.payment_order_id_
-        WHERE spo.user_id_= #{userId}
-        AND spod.type_ = #{orderType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+        WHERE spo.user_id_= #{userId} AND spo.music_group_id_ = #{musicGroupId}
+        AND spod.type_ = #{orderDetailType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
         AND spo.status_='SUCCESS'
+        AND spo.type_ = 'APPLY'
     </select>
 
     <select id="getOrderDetailByOrderId" resultMap="StudentPaymentOrderDetail">

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

@@ -1362,6 +1362,9 @@
             AND music_group_id_ = #{musicGroupId}
         </if>
     </update>
+    <update id="updateCourseFee">
+        UPDATE student_registration SET surplus_course_fee_ = surplus_course_fee_ + #{musicalFee} WHERE id_ = #{id}
+    </update>
 
     <select id="countPayingNum" resultType="map">
         SELECT COUNT(DISTINCT user_id_) `value`, actual_subject_id_ `key`

+ 5 - 0
mec-util/src/main/java/com/ym/mec/util/date/DateUtil.java

@@ -51,6 +51,11 @@ public class DateUtil {
 	/**
 	 * ISO8601扩展日期格式 yyyy-MM-dd ,如:2002-12-25 代表2002年12月25日。
 	 */
+	public static final String ISO_YEAR_FORMAT = "yyyy";
+
+	/**
+	 * ISO8601扩展日期格式 yyyy-MM-dd ,如:2002-12-25 代表2002年12月25日。
+	 */
 	public static final String ISO_YEAR_MONTH_FORMAT = "yyyy-MM";
 
 	/**