فهرست منبع

系统收费优化

zouxuan 4 سال پیش
والد
کامیت
bfbfc524a6

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java

@@ -6,6 +6,7 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     SMS_APPLY_MESSAGE("SMS_APPLY_MESSAGE", "报名通知"),
     SYSTEM_REMIND_EDUCATION_COURSE_TIME("SYSTEM_REMIND_EDUCATION_COURSE_TIME", "排课提醒"),
     STUDENT_MEMBER_RENEW_MESSAGE("STUDENT_MEMBER_RENEW_MESSAGE", "会员续费提醒"),
+    AUTO_STUDENT_MEMBER_RENEW_MESSAGE("AUTO_STUDENT_MEMBER_RENEW_MESSAGE", "会员续费提醒"),
     STUDENT_MEMBER_RENEW_QUIT_MESSAGE("STUDENT_MEMBER_RENEW_QUIT_MESSAGE", "会员续费提醒"),
     SMS_VERIFY_CODE_LOGIN("SMS_VERIFY_CODE_LOGIN", "验证码登录"),
     KAPTCHA_SESSION_KEY("KAPTCHA_SESSION_KEY", "登录图形验证码"),

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderService.java

@@ -174,4 +174,6 @@ public interface MusicGroupPaymentCalenderService extends BaseService<Long, Musi
 	 * @param batchNo
 	 */
 	void revoke(String batchNo);
+
+	List<MusicGroupPaymentCalender> findByBatchNo(String batchNo);
 }

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentStudentCourseDetailService.java

@@ -1,8 +1,13 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentStudentCourseDetail;
 import com.ym.mec.common.service.BaseService;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 public interface MusicGroupPaymentStudentCourseDetailService extends BaseService<Long, MusicGroupPaymentStudentCourseDetail> {
 
+    String getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(String musicGroupId,Integer studentId,CourseSchedule.CourseScheduleType courseType,List<String> batchNos);
 }

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

@@ -176,7 +176,11 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 					cloudTeacherOrder.setStatus(2);
 					cloudTeacherOrder.setStartTime(date);
 					cloudTeacherOrder.setEndTime(DateUtil.addMonths(date,calender.getMemberValidDate()));
-					cloudTeacherOrder.setRemark("进行中乐团加学生,缴费金额改为0元");
+					if(calender.getPaymentType() == MusicGroupPaymentCalender.PaymentType.ADD_STUDENT){
+						cloudTeacherOrder.setRemark("进行中乐团加学生,缴费金额改为0元");
+					}else {
+						cloudTeacherOrder.setRemark("乐团续费,缴费金额改为0元");
+					}
 					cloudTeacherOrder.setMusicGroupId(calender.getMusicGroupId());
 					cloudTeacherOrderDao.insert(cloudTeacherOrder);
 					studentService.updateMemberRank(cloudTeacherOrder,PeriodEnum.MONTH);

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

@@ -1474,6 +1474,11 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 	}
 
 	@Override
+	public List<MusicGroupPaymentCalender> findByBatchNo(String batchNo) {
+		return musicGroupPaymentCalenderDao.findByBatchNo(batchNo);
+	}
+
+	@Override
 	@Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
 	public boolean autoUpdateMusicGroupPaymentCalenderStatus() {
 		Date date = new Date();

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service.impl;
 
+import com.ym.mec.biz.dal.entity.CourseSchedule;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -9,6 +10,8 @@ import com.ym.mec.biz.service.MusicGroupPaymentStudentCourseDetailService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 
+import java.util.List;
+
 @Service
 public class MusicGroupPaymentStudentCourseDetailServiceImpl extends BaseServiceImpl<Long, MusicGroupPaymentStudentCourseDetail>  implements MusicGroupPaymentStudentCourseDetailService {
 	
@@ -19,5 +22,9 @@ public class MusicGroupPaymentStudentCourseDetailServiceImpl extends BaseService
 	public BaseDAO<Long, MusicGroupPaymentStudentCourseDetail> getDAO() {
 		return musicGroupPaymentStudentCourseDetailDao;
 	}
-	
+
+    @Override
+    public String getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(String musicGroupId, Integer studentId, CourseSchedule.CourseScheduleType courseType, List<String> batchNos) {
+        return musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, studentId, courseType, batchNos);
+    }
 }

+ 80 - 52
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupSchoolTermCourseDetailServiceImpl.java

@@ -7,10 +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;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -67,7 +64,9 @@ public class MusicGroupSchoolTermCourseDetailServiceImpl extends BaseServiceImpl
 	@Autowired
 	private MusicGroupPaymentCalenderService musicGroupPaymentCalenderService;
 	@Autowired
-	private MusicGroupPaymentStudentCourseDetailDao musicGroupPaymentStudentCourseDetailDao;
+	private MusicGroupPaymentCalenderDetailService musicGroupPaymentCalenderDetailService;
+	@Autowired
+	private MusicGroupPaymentStudentCourseDetailService musicGroupPaymentStudentCourseDetailService;
 
 	private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
@@ -167,6 +166,7 @@ public class MusicGroupSchoolTermCourseDetailServiceImpl extends BaseServiceImpl
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public void musicSchoolTermPush() {
 		String remindCourseTime = sysConfigDao.findConfigValue(SysConfigService.REMIND_COURSE_TIME);
 		if(StringUtils.isEmpty(remindCourseTime)){
@@ -206,54 +206,7 @@ public class MusicGroupSchoolTermCourseDetailServiceImpl extends BaseServiceImpl
 		if(memberRankSetting != null){
 			memberName = memberRankSetting.getName();
 		}
-		//会员结束前15天自动创建乐团续费(默认提前15天)
-		String autoCreateMemberRenew = sysConfigDao.findConfigValue(SysConfigService.AUTO_CREATE_MEMBER_RENEW);
-		if(StringUtils.isEmpty(autoCreateMemberRenew)){
-			autoCreateMemberRenew = "15";
-		}
 		Date date = new Date();
-		Map<String,String> studentMusicMap = MapUtil.convertMybatisMap(studentDao.queryAutoCreateStudentMap(autoCreateMemberRenew));
-		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);
-				musicGroupPaymentCalenderDto.setMemberValidDate(6);
-				musicGroupPaymentCalenderDto.setMemo("系统自动创建缴费项目");
-				musicGroupPaymentCalenderDto.setMemberRankSettingId(memberRankSetting.getId());
-				musicGroupPaymentCalenderDto.setPayUserType(MusicGroupPaymentCalender.PayUserType.STUDENT);
-				musicGroupPaymentCalenderDto.setPaymentType(MusicGroupPaymentCalender.PaymentType.MUSIC_RENEW);
-				musicGroupPaymentCalenderDto.setPaymentPattern(1);
-				musicGroupPaymentCalenderDto.setMemberPaymentAmount(memberFee.getCurrentHalfYearFee().setScale(0, BigDecimal.ROUND_HALF_UP));
-				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;
-				}
-			}
-		}
-
 		//会员结束前15天提醒学员续费
 		/*String pushMemberRenew = sysConfigDao.findConfigValue(SysConfigService.PUSH_MEMBER_RENEW);
 		if(StringUtils.isEmpty(pushMemberRenew)){
@@ -314,6 +267,81 @@ public class MusicGroupSchoolTermCourseDetailServiceImpl extends BaseServiceImpl
 					null,
 					"STUDENT",memberName,pushMemberRenewAgain);
 		}
+
+
+		//会员结束前15天自动创建乐团续费(默认提前15天)
+		String autoCreateMemberRenew = sysConfigDao.findConfigValue(SysConfigService.AUTO_CREATE_MEMBER_RENEW);
+		if(StringUtils.isEmpty(autoCreateMemberRenew)){
+			autoCreateMemberRenew = "15";
+		}
+		Map<String,String> studentMusicMap = MapUtil.convertMybatisMap(studentDao.queryAutoCreateStudentMap(autoCreateMemberRenew));
+		if(studentMusicMap.size() > 0){
+			for (String musicGroupId : studentMusicMap.keySet()) {
+				MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
+				// 所有缴费项目已完成排课才能创建下一个缴费项目
+				String orignBatchNo = musicGroupPaymentStudentCourseDetailService.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);
+				musicGroupPaymentCalenderDto.setMemberValidDate(6);
+				musicGroupPaymentCalenderDto.setMemo("系统自动创建缴费项目");
+				musicGroupPaymentCalenderDto.setMemberRankSettingId(memberRankSetting.getId());
+				musicGroupPaymentCalenderDto.setPayUserType(MusicGroupPaymentCalender.PayUserType.STUDENT);
+				musicGroupPaymentCalenderDto.setPaymentType(MusicGroupPaymentCalender.PaymentType.MUSIC_RENEW);
+				musicGroupPaymentCalenderDto.setPaymentPattern(1);
+				musicGroupPaymentCalenderDto.setMemberPaymentAmount(memberFee.getCurrentHalfYearFee().setScale(0, BigDecimal.ROUND_HALF_UP));
+				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);
+				String batchNo = "";
+				try {
+					batchNo = musicGroupPaymentCalenderService.create(musicGroupPaymentCalenderDto);
+				}catch (Exception e){
+					logger.error("{} 乐团自动创建缴费项目失败,失败原因:{}",musicGroup.getName(),e.getMessage());
+					continue;
+				}
+				MusicGroupPaymentCalender calender = musicGroupPaymentCalenderService.findByBatchNo(batchNo).get(0);
+				Set<Integer> userIdList = Arrays.stream(studentMusicMap.get(musicGroupId).split(",")).map(Integer::new).collect(Collectors.toSet());
+				musicGroupPaymentCalenderDetailService.batchAdd(calender.getId(),userIdList,musicGroup);
+				Map<Integer, String> studentPhoneMap = MapUtil.convertMybatisMap(teacherDao.queryPhoneByIds(studentMusicMap.get(musicGroupId)));
+				Map<Integer,String> userMap = new HashMap<>(userIdList.size());
+				Map<Integer,String> userMap1 = new HashMap<>(userIdList.size());
+				for (Integer studentId : userIdList) {
+					userMap.put(studentId,studentPhoneMap.get(studentId));
+					userMap1.put(studentId,studentId.toString());
+				}
+				String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
+				String pushUrl = baseApiUrl + "/#/musicGroupRenew?calenderId=" + calender.getId() + "&id=" + musicGroupId;
+				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS,
+						MessageTypeEnum.AUTO_STUDENT_MEMBER_RENEW_MESSAGE,
+						userMap,
+						null,
+						0,
+						pushUrl,
+						null,memberName,autoCreateMemberRenew);
+
+				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,
+						MessageTypeEnum.AUTO_STUDENT_MEMBER_RENEW_MESSAGE,
+						userMap1,
+						null,
+						0,
+						pushUrl,
+						"STUDENT",memberName,autoCreateMemberRenew);
+			}
+		}
 	}
 
 	private MusicGroupSchoolTermCourseDetail getCourseDetail(MusicGroupSchoolTermCourseDetail courseDetail){

+ 11 - 27
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -1,31 +1,10 @@
 package com.ym.mec.biz.service.impl;
 
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-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;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-
-import com.ym.mec.biz.dal.dao.CourseScheduleDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
-import com.ym.mec.biz.dal.dao.MusicGroupDao;
-import com.ym.mec.biz.dal.dao.PracticeGroupDao;
-import com.ym.mec.biz.dal.dao.StudentDao;
-import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.StudentClassInfoDto;
 import com.ym.mec.biz.dal.dto.StudentCourseTimesDto;
 import com.ym.mec.biz.dal.dto.StudentTeacherCourseDto;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
 import com.ym.mec.biz.dal.entity.CooperationOrgan;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.Student;
@@ -41,14 +20,20 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implements StudentService {
 
     @Autowired
     private StudentDao studentDao;
-    @Autowired
-    private CourseScheduleDao courseScheduleDao;
 
     @Autowired
     private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
@@ -317,12 +302,11 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     		case YEAR:
             	student.setMembershipEndTime(DateUtil.addYears(student.getMembershipEndTime(), cloudTeacherOrder.getTime()));
     			break;
-
     		default:
     			break;
     		}
         }
-        if (student.getMemberRankSettingId() == null || nowDate.after(student.getMusicMembershipEndTime())) {
+        if (student.getMusicMembershipEndTime() == null || nowDate.after(student.getMusicMembershipEndTime())) {
         	switch (periodEnum) {
     		case DAY:
                 student.setMusicMembershipEndTime(DateUtil.addDays(nowDate, cloudTeacherOrder.getTime()));

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

@@ -40,6 +40,7 @@
         <result column="expect_amount_" property="studentPaymentOrder.expectAmount"/>
         <result column="name_" property="memberRankSetting.name"/>
         <result column="icon_" property="memberRankSetting.icon"/>
+        <result column="music_group_id_" property="studentPaymentOrder.musicGroupId"/>
     </resultMap>
 
     <select id="get" resultMap="CloudTeacherOrder">
@@ -55,15 +56,17 @@
             useGeneratedKeys="true">
         <!--@mbg.generated-->
         insert into cloud_teacher_order (organ_id_,student_id_, type_, level_, time_, amount_, refund_amount_, status_,
-        order_id_,start_time_,end_time_,
-        remark_, create_time_, update_time_)
+        order_id_,start_time_,end_time_,remark_, create_time_, update_time_,music_group_id_)
         values (#{organId},#{studentId}, #{type},#{level}, #{time}, #{amount}, #{refundAmount},
-        #{status},#{orderId},#{startTime},#{endTime}, #{remark}, NOW(), NOW())
+        #{status},#{orderId},#{startTime},#{endTime}, #{remark}, NOW(), NOW(),#{musicGroupId})
     </insert>
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.CloudTeacherOrder">
         <!--@mbg.generated-->
         update cloud_teacher_order
         <set>
+            <if test="musicGroupId != null">
+                music_group_id_ = #{musicGroupId},
+            </if>
             <if test="organId != null">
                 organ_id_ = #{organId},
             </if>
@@ -188,8 +191,8 @@
 
     <select id="queryOrderInfoByOrderId" resultMap="CloudTeacherOrderDto">
         SELECT cto.*,spo.status_ trans_status_,spo.expect_amount_,mrs.name_,mrs.icon_ FROM cloud_teacher_order cto
-                                                                                               left join student_payment_order spo on cto.order_id_ = spo.id_
-                                                                                               left join member_rank_setting mrs on mrs.id_ = cto.level_
+       left join student_payment_order spo on cto.order_id_ = spo.id_
+       left join member_rank_setting mrs on mrs.id_ = cto.level_
         where spo.type_ = 'MEMBER' and order_id_ = #{orderId}
     </select>
 </mapper>

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

@@ -29,6 +29,8 @@
         <result column="organ_name_" property="organName"/>
         <result column="phone_" property="phone"/>
         <result column="username_" property="username"/>
+        <result column="music_membership_end_time_" property="musicMembershipEndTime"/>
+        <result column="member_music_group_id_" property="memberMusicGroupId"/>
     </resultMap>
 
     <!-- 根据主键查询一条记录 -->
@@ -96,6 +98,12 @@
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.Student">
         UPDATE student
         <set>
+            <if test="musicMembershipEndTime != null">
+                music_membership_end_time_ = #{musicMembershipEndTime},
+            </if>
+            <if test="memberMusicGroupId != null">
+                member_music_group_id_ = #{memberMusicGroupId},
+            </if>
             <if test="subjectIdList != null">
                 subject_id_list_ = #{subjectIdList},
             </if>