소스 검색

系统收费优化

zouxuan 4 년 전
부모
커밋
bf0703efd8

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Student.java

@@ -70,6 +70,28 @@ public class Student extends SysUser {
 	@ApiModelProperty(value = "活动排课信息")
 	private String activityCourseDetail;
 
+	//乐团会员有效期截止时间
+	private Date musicMembershipEndTime;
+
+	//会员团编号
+	private String memberMusicGroupId;
+
+	public Date getMusicMembershipEndTime() {
+		return musicMembershipEndTime;
+	}
+
+	public void setMusicMembershipEndTime(Date musicMembershipEndTime) {
+		this.musicMembershipEndTime = musicMembershipEndTime;
+	}
+
+	public String getMemberMusicGroupId() {
+		return memberMusicGroupId;
+	}
+
+	public void setMemberMusicGroupId(String memberMusicGroupId) {
+		this.memberMusicGroupId = memberMusicGroupId;
+	}
+
 	public Student(Integer userId, String subjectIdList) {
 		this.userId = userId;
 		this.subjectIdList = subjectIdList;

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

@@ -3,6 +3,7 @@ package com.ym.mec.biz.service;
 import java.text.ParseException;
 import java.util.List;
 
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
 import com.ym.mec.biz.dal.entity.CooperationOrgan;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.enums.GradeTypeEnum;
@@ -70,7 +71,7 @@ public interface StudentService extends BaseService<Integer, Student> {
     /**
      * 更新学员会员信息
      */
-    void updateMemberRank(Integer userId, Integer rankSettingId, PeriodEnum periodEnum, int quantityPerPeriod);
+    void updateMemberRank(CloudTeacherOrder cloudTeacherOrder, PeriodEnum periodEnum);
 
     /**
      * 更新学员会员信息

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

@@ -1,19 +1,8 @@
 package com.ym.mec.biz.service.impl;
 
-import java.math.BigDecimal;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
 import com.ym.mec.biz.dal.dao.CloudTeacherDao;
 import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
 import com.ym.mec.biz.dal.dao.CourseScheduleDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDetailDao;
 import com.ym.mec.biz.dal.dto.CloudTeacherOrderDto;
 import com.ym.mec.biz.dal.entity.CloudTeacher;
 import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
@@ -26,6 +15,15 @@ import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.date.DateUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 @Service
 public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTeacherOrder> implements CloudTeacherOrderService {
@@ -33,8 +31,6 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
     @Autowired
     private CloudTeacherOrderDao cloudTeacherOrderDao;
     @Autowired
-    private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
-    @Autowired
     private CourseScheduleDao courseScheduleDao;
     @Autowired
     private CloudTeacherDao cloudTeacherDao;
@@ -104,7 +100,7 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
 			break;
 		}
         //更新student表信息
-        studentService.updateMemberRank(cloudTeacherOrder.getStudentId(), cloudTeacherOrder.getLevel(), periodEnum, cloudTeacherOrder.getTime());
+        studentService.updateMemberRank(cloudTeacherOrder,periodEnum);
         
         if (cloudTeacher == null) {
             cloudTeacher = new CloudTeacher();

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

@@ -332,7 +332,7 @@ public class MemberRankSettingServiceImpl extends BaseServiceImpl<Integer, Membe
 
 			cloudTeacherOrderService.update(cloudTeacherOrder);
 			// 添加会员有效时长
-			studentService.updateMemberRank(userId,cloudTeacherOrder.getLevel(), periodEnum, cloudTeacherOrder.getTime());
+			studentService.updateMemberRank(cloudTeacherOrder, periodEnum);
 
 			// 插入交易明细
 			BigDecimal amount = studentPaymentOrder.getActualAmount();

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

@@ -177,8 +177,9 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 					cloudTeacherOrder.setStartTime(date);
 					cloudTeacherOrder.setEndTime(DateUtil.addMonths(date,calender.getMemberValidDate()));
 					cloudTeacherOrder.setRemark("进行中乐团加学生,缴费金额改为0元");
+					cloudTeacherOrder.setMusicGroupId(calender.getMusicGroupId());
 					cloudTeacherOrderDao.insert(cloudTeacherOrder);
-					studentService.updateMemberRank(e.getUserId(),calender.getMemberRankSettingId(),PeriodEnum.MONTH,calender.getMemberValidDate());
+					studentService.updateMemberRank(cloudTeacherOrder,PeriodEnum.MONTH);
 				}
 				calender.setActualNum((calender.getActualNum()==null?0:calender.getActualNum()) + 1);
 				e.setPaymentStatus(PAID_COMPLETED);

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

@@ -156,7 +156,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		List<MusicGroupPaymentDateRange> musicGroupPaymentDateRangeList = musicGroupPaymentCalenderDto.getMusicGroupPaymentDateRangeList();
 
 		if(musicGroupPaymentCalenderDto.getMemberRankSettingId() != null){
-			if(paymentType != ADD_STUDENT && paymentType != MUSIC_APPLY){
+			if(paymentType != ADD_STUDENT && paymentType != MUSIC_APPLY && paymentType != MUSIC_RENEW){
 				throw new BizException("操作失败:{} 不支持会员收费",paymentType.getDesc());
 			}
 		}
@@ -582,7 +582,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		List<MusicGroupPaymentDateRange> musicGroupPaymentDateRangeList = musicGroupPaymentCalenderDto.getMusicGroupPaymentDateRangeList();
 
 		if(musicGroupPaymentCalenderDto.getMemberRankSettingId() != null){
-			if(paymentType != ADD_STUDENT && paymentType != MUSIC_APPLY){
+			if(paymentType != ADD_STUDENT && paymentType != MUSIC_APPLY && paymentType != MUSIC_RENEW){
 				throw new BizException("操作失败:{} 不支持会员收费",paymentType.getDesc());
 			}
 		}
@@ -1035,8 +1035,9 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 						cloudTeacherOrder.setStartTime(date);
 						cloudTeacherOrder.setEndTime(DateUtil.addMonths(date,musicGroupPaymentCalender.getMemberValidDate()));
 						cloudTeacherOrder.setRemark("进行中乐团0元加学生");
+						cloudTeacherOrder.setMusicGroupId(musicGroup.getId());
 						cloudTeacherOrderDao.insert(cloudTeacherOrder);
-						studentService.updateMemberRank(Integer.parseInt(studentId),musicGroupPaymentCalender.getMemberRankSettingId(),PeriodEnum.MONTH,musicGroupPaymentCalender.getMemberValidDate());
+						studentService.updateMemberRank(cloudTeacherOrder,PeriodEnum.MONTH);
 					}
 					MusicGroupStudentFee musicGroupStudentFee = musicGroupStudentFeeDao.findByUser(Integer.parseInt(studentId), musicGroupPaymentCalender.getMusicGroupId());
 					if (musicGroupStudentFee != null) {

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

@@ -7,6 +7,7 @@ import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
 import com.ym.mec.biz.service.MusicGroupSchoolTermCourseDetailService;
 import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.SysMessageService;
@@ -63,6 +64,10 @@ public class MusicGroupSchoolTermCourseDetailServiceImpl extends BaseServiceImpl
 	private MemberFeeSettingDao memberFeeSettingDao;
 	@Autowired
 	private OrganizationDao organizationDao;
+	@Autowired
+	private MusicGroupPaymentCalenderService musicGroupPaymentCalenderService;
+	@Autowired
+	private MusicGroupPaymentStudentCourseDetailDao musicGroupPaymentStudentCourseDetailDao;
 
 	private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
@@ -211,6 +216,18 @@ public class MusicGroupSchoolTermCourseDetailServiceImpl extends BaseServiceImpl
 		if(studentMusicMap.size() > 0){
 			for (String musicGroupId : studentMusicMap.keySet()) {
 				MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
+				// 所有缴费项目已完成排课才能创建下一个缴费项目
+				String orignBatchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, null, null,null);
+				if (StringUtils.isNoneBlank(orignBatchNo)) {
+					logger.error("自动创建缴费项目失败,{} 乐团存在未排课的缴费项目",musicGroup.getName());
+					continue;
+				}
+				MemberFeeSetting memberFee = memberFeeSettingDao.findByRankIdAndOrganId(musicGroup.getOrganId(), memberRankSetting.getId());
+				if(memberFee == null){
+					Organization organization = organizationDao.get(musicGroup.getOrganId());
+					logger.error("自动创建缴费项目失败,{} 分部会员收费标准未配置",organization.getName());
+					continue;
+				}
 				//创建缴费项目
 				MusicGroupPaymentCalenderDto musicGroupPaymentCalenderDto = new MusicGroupPaymentCalenderDto();
 				musicGroupPaymentCalenderDto.setMusicGroupId(musicGroupId);
@@ -220,19 +237,20 @@ public class MusicGroupSchoolTermCourseDetailServiceImpl extends BaseServiceImpl
 				musicGroupPaymentCalenderDto.setPayUserType(MusicGroupPaymentCalender.PayUserType.STUDENT);
 				musicGroupPaymentCalenderDto.setPaymentType(MusicGroupPaymentCalender.PaymentType.MUSIC_RENEW);
 				musicGroupPaymentCalenderDto.setPaymentPattern(1);
-				//会员价格是否变动
-				MemberFeeSetting memberFee = memberFeeSettingDao.findByRankIdAndOrganId(musicGroup.getOrganId(), memberRankSetting.getId());
-				if(memberFee == null){
-					Organization organization = organizationDao.get(musicGroup.getOrganId());
-					logger.error("自动创建缴费项目失败,{} 分部会员收费标准未配置",organization.getName());
-					continue;
-				}
 				musicGroupPaymentCalenderDto.setMemberPaymentAmount(memberFee.getCurrentHalfYearFee().setScale(0, BigDecimal.ROUND_HALF_UP));
-				List<MusicGroupPaymentCalenderDto.MusicGroupPaymentDateRange> musicGroupPaymentDateRangeList = new ArrayList<MusicGroupPaymentCalenderDto.MusicGroupPaymentDateRange>();
+				List<MusicGroupPaymentCalenderDto.MusicGroupPaymentDateRange> musicGroupPaymentDateRangeList = new ArrayList<>();
 				MusicGroupPaymentCalenderDto.MusicGroupPaymentDateRange range = new MusicGroupPaymentCalenderDto().new MusicGroupPaymentDateRange();
 				range.setStartPaymentDate(date);
 				range.setDeadlinePaymentDate(DateUtil.addMonths(date,1));
 				musicGroupPaymentDateRangeList.add(range);
+				musicGroupPaymentCalenderDto.setMusicGroupPaymentDateRangeList(musicGroupPaymentDateRangeList);
+
+				try {
+					musicGroupPaymentCalenderService.create(musicGroupPaymentCalenderDto);
+				}catch (Exception e){
+					logger.error("{} 乐团自动创建缴费项目失败,失败原因:{}",musicGroup.getName(),e.getMessage());
+					continue;
+				}
 			}
 		}
 

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

@@ -758,6 +758,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     		cloudTeacherOrder.setLevel(musicGroupRegCalender.getMemberRankSettingId() == null ? 1 : musicGroupRegCalender.getMemberRankSettingId());
     		cloudTeacherOrder.setAmount(cloudTeacherPrice);
     		cloudTeacherOrder.setStatus(0);
+            cloudTeacherOrder.setMusicGroupId(musicGroup.getId());
         }
 
         if (amount.compareTo(orderAmount) != 0) {
@@ -992,6 +993,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     		cloudTeacherOrder.setLevel(musicGroupRegCalender.getMemberRankSettingId() == null ? 1 : musicGroupRegCalender.getMemberRankSettingId());
     		cloudTeacherOrder.setAmount(musicGroupRegCalender.getMemberPaymentAmount() == null ? cloudTeacherPrice : musicGroupRegCalender.getMemberPaymentAmount());
     		cloudTeacherOrder.setStatus(0);
+            cloudTeacherOrder.setMusicGroupId(musicGroup.getId());
         }
 
         if (amount.compareTo(orderAmount) != 0) {
@@ -2443,6 +2445,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     		cloudTeacherOrder.setOrderId(studentPaymentOrder.getId());
     		cloudTeacherOrder.setCreateTime(date);
     		cloudTeacherOrder.setUpdateTime(date);
+            cloudTeacherOrder.setMusicGroupId(calender.getMusicGroupId());
     		cloudTeacherOrderService.insert(cloudTeacherOrder);
         }
 
@@ -2616,7 +2619,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
 				cloudTeacherOrderService.update(cloudTeacherOrder);
 				// 添加会员有效时长
-				studentService.updateMemberRank(userId,cloudTeacherOrder.getLevel(), periodEnum, cloudTeacherOrder.getTime());
+				studentService.updateMemberRank(cloudTeacherOrder, periodEnum);
 				
 				//添加订单明细
 				StudentPaymentOrderDetail studentPaymentOrderDetail = new StudentPaymentOrderDetail();

+ 42 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -9,6 +9,7 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -279,25 +280,25 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void updateMemberRank(Integer userId, Integer rankSettingId, PeriodEnum periodEnum, int quantityPerPeriod) {
+    public void updateMemberRank(CloudTeacherOrder cloudTeacherOrder, PeriodEnum periodEnum) {
         // 添加会员有效时长
-        Student student = this.get(userId);
+        Student student = this.get(cloudTeacherOrder.getStudentId());
         if (student == null) {
             throw new BizException("学员信息不存在");
         }
-        
+        student.setMemberMusicGroupId(cloudTeacherOrder.getMusicGroupId());
         Date nowDate = new Date();
         if (student.getMemberRankSettingId() == null || nowDate.after(student.getMembershipEndTime())) {
         	switch (periodEnum) {
     		case DAY:
-                student.setMembershipEndTime(DateUtil.addDays(nowDate, quantityPerPeriod));
+                student.setMembershipEndTime(DateUtil.addDays(nowDate, cloudTeacherOrder.getTime()));
     			break;
     		case MONTH:
     		case YEAR_HALF:
-                student.setMembershipEndTime(DateUtil.addMonths(nowDate, quantityPerPeriod));
+                student.setMembershipEndTime(DateUtil.addMonths(nowDate, cloudTeacherOrder.getTime()));
     			break;
     		case YEAR:
-                student.setMembershipEndTime(DateUtil.addYears(nowDate, quantityPerPeriod));
+                student.setMembershipEndTime(DateUtil.addYears(nowDate, cloudTeacherOrder.getTime()));
     			break;
 
     		default:
@@ -307,21 +308,52 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         } else {
         	switch (periodEnum) {
     		case DAY:
-            	student.setMembershipEndTime(DateUtil.addDays(student.getMembershipEndTime(), quantityPerPeriod));
+            	student.setMembershipEndTime(DateUtil.addDays(student.getMembershipEndTime(), cloudTeacherOrder.getTime()));
     			break;
     		case MONTH:
     		case YEAR_HALF:
-            	student.setMembershipEndTime(DateUtil.addMonths(student.getMembershipEndTime(), quantityPerPeriod));
+            	student.setMembershipEndTime(DateUtil.addMonths(student.getMembershipEndTime(), cloudTeacherOrder.getTime()));
     			break;
     		case YEAR:
-            	student.setMembershipEndTime(DateUtil.addYears(student.getMembershipEndTime(), quantityPerPeriod));
+            	student.setMembershipEndTime(DateUtil.addYears(student.getMembershipEndTime(), cloudTeacherOrder.getTime()));
     			break;
 
     		default:
     			break;
     		}
         }
-        student.setMemberRankSettingId(rankSettingId);
+        if (student.getMemberRankSettingId() == null || nowDate.after(student.getMusicMembershipEndTime())) {
+        	switch (periodEnum) {
+    		case DAY:
+                student.setMusicMembershipEndTime(DateUtil.addDays(nowDate, cloudTeacherOrder.getTime()));
+    			break;
+    		case MONTH:
+    		case YEAR_HALF:
+                student.setMusicMembershipEndTime(DateUtil.addMonths(nowDate, cloudTeacherOrder.getTime()));
+    			break;
+    		case YEAR:
+                student.setMusicMembershipEndTime(DateUtil.addYears(nowDate, cloudTeacherOrder.getTime()));
+    			break;
+    		default:
+    			break;
+    		}
+        } else {
+        	switch (periodEnum) {
+    		case DAY:
+            	student.setMusicMembershipEndTime(DateUtil.addDays(student.getMusicMembershipEndTime(), cloudTeacherOrder.getTime()));
+    			break;
+    		case MONTH:
+    		case YEAR_HALF:
+            	student.setMusicMembershipEndTime(DateUtil.addMonths(student.getMusicMembershipEndTime(), cloudTeacherOrder.getTime()));
+    			break;
+    		case YEAR:
+            	student.setMusicMembershipEndTime(DateUtil.addYears(student.getMusicMembershipEndTime(), cloudTeacherOrder.getTime()));
+    			break;
+    		default:
+    			break;
+    		}
+        }
+        student.setMemberRankSettingId(cloudTeacherOrder.getLevel());
         student.setUpdateTime(nowDate);
         this.update(student);
     }