Browse Source

系统收费优化

zouxuan 4 years ago
parent
commit
b064cc6b8f

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java

@@ -251,4 +251,10 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
     void cleanStudentMember();
 
     void cleanMember(Integer userId);
+
+    /**
+     * 清空乐团会员时长
+     * @param userId
+     */
+    void cleanMusicMember(@Param("userId") Integer userId);
 }

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

@@ -74,11 +74,6 @@ public interface StudentService extends BaseService<Integer, Student> {
     void updateMemberRank(CloudTeacherOrder cloudTeacherOrder, PeriodEnum periodEnum);
 
     /**
-     * 更新学员会员信息
-     */
-    void batchUpdateMemberRank(List<Integer> studentIds, Integer rankSettingId, PeriodEnum periodEnum, int quantityPerPeriod);
-
-    /**
      * 更新服务指标
      * @param studentId
      * @param studentIds

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

@@ -2004,7 +2004,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.QUIT, new ArrayList<>(Arrays.asList(userId)));
 
             }
-
+            //删除乐团会员时长
+            studentDao.cleanMusicMember(userId);
             if(isRefundMemberFee){
                 //退云教练费用
                 if (cloudTeacherAmount != null) {
@@ -2277,6 +2278,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             //统计变更学员数
             groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.QUIT, new ArrayList<>(Arrays.asList(userId)));
         }
+        //删除乐团会员时长
+        studentDao.cleanMusicMember(userId);
         if (isRefundMemberFee){
             //退云教练费用
             if (cloudTeacherAmount != null) {

+ 40 - 85
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -4,14 +4,8 @@ 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;
-import com.ym.mec.biz.dal.enums.FivePlusGradeEnum;
-import com.ym.mec.biz.dal.enums.GradeTypeEnum;
-import com.ym.mec.biz.dal.enums.PeriodEnum;
-import com.ym.mec.biz.dal.enums.SixPlusGradeEnum;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.StudentQueryInfo;
 import com.ym.mec.biz.service.StudentService;
 import com.ym.mec.common.dal.BaseDAO;
@@ -271,7 +265,7 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         if (student == null) {
             throw new BizException("学员信息不存在");
         }
-        student.setMemberMusicGroupId(cloudTeacherOrder.getMusicGroupId());
+
         Date nowDate = new Date();
         if (student.getMemberRankSettingId() == null || nowDate.after(student.getMembershipEndTime())) {
         	switch (periodEnum) {
@@ -306,89 +300,50 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     			break;
     		}
         }
-        if (student.getMusicMembershipEndTime() == 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;
-    		}
+        if(StringUtils.isNotEmpty(cloudTeacherOrder.getMusicGroupId())){
+            StudentRegistration registration = studentRegistrationDao.findStudentByMusicGroupIdAndUserId(cloudTeacherOrder.getMusicGroupId(), cloudTeacherOrder.getStudentId());
+            if(registration != null && registration.getMusicGroupStatus() == StudentMusicGroupStatusEnum.NORMAL){
+                student.setMemberMusicGroupId(cloudTeacherOrder.getMusicGroupId());
+                if (student.getMusicMembershipEndTime() == 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);
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void batchUpdateMemberRank(List<Integer> studentIds, Integer rankSettingId, PeriodEnum periodEnum, int quantityPerPeriod) {
-        // 添加会员有效时长
-        List<Student> studentList = studentDao.findByStudentIds(studentIds);
-        Date nowDate = new Date();
-        for (Student student : studentList) {
-            if (student.getMemberRankSettingId() == null || nowDate.after(student.getMembershipEndTime())) {
-                switch (periodEnum) {
-                    case DAY:
-                        student.setMembershipEndTime(DateUtil.addDays(nowDate, quantityPerPeriod));
-                        break;
-                    case MONTH:
-                    case YEAR_HALF:
-                        student.setMembershipEndTime(DateUtil.addMonths(nowDate, quantityPerPeriod));
-                        break;
-                    case YEAR:
-                        student.setMembershipEndTime(DateUtil.addYears(nowDate, quantityPerPeriod));
-                        break;
-                    default:
-                        break;
-                }
-                student.setMembershipStartTime(nowDate);
-            } else {
-                switch (periodEnum) {
-                    case DAY:
-                        student.setMembershipEndTime(DateUtil.addMonths(student.getMembershipEndTime(), quantityPerPeriod));
-                        break;
-                    case MONTH:
-                    case YEAR_HALF:
-                        student.setMembershipEndTime(DateUtil.addMonths(student.getMembershipEndTime(), quantityPerPeriod));
-                        break;
-                    case YEAR:
-                        student.setMembershipEndTime(DateUtil.addMonths(student.getMembershipEndTime(), quantityPerPeriod));
-                        break;
-
-                    default:
-                        break;
-                }
-            }
-            student.setMemberRankSettingId(rankSettingId);
-            student.setUpdateTime(nowDate);
-        }
-        studentDao.batchUpdate(studentList);
-    }
-
-    @Override
     public void updateStudentServiceTag(Integer studentId,List<Integer> studentIds,Integer serviceTag) {
         studentDao.updateStudentServiceTag(studentId, studentIds, serviceTag);
     }

+ 2 - 0
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -773,10 +773,12 @@
 			COUNT(DISTINCT mgpc.music_group_id_,mgpcd.user_id_)
 		FROM
 		music_group_payment_calender_detail mgpcd
+		LEFT JOIN student s ON s.user_id_ = mgpcd.user_id_
 		LEFT JOIN music_group_payment_calender mgpc ON mgpcd.music_group_payment_calender_id_ = mgpc.id_
 		LEFT JOIN music_group mg ON mgpc.music_group_id_ = mg.id_
 		WHERE
 		mg.status_ = 'PROGRESS'
+		AND ((mgpc.member_rank_setting_id_ IS NOT NULL AND (DATEDIFF(s.music_membership_end_time_,NOW()) &lt; 0 OR s.music_membership_end_time_ IS NULL)) OR mgpc.member_rank_setting_id_ IS NULL)
 		<if test="noPaymentType==null or noPaymentType==0">
 			AND DATE_FORMAT(NOW(),'%Y-%m-%d') > mgpc.deadline_payment_date_
 		</if>

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

@@ -400,8 +400,10 @@
 	<select id="queryNoPaymentTotalAmount" resultType="java.util.Map">
 		SELECT mgpcd.user_id_ 'key',SUM(mgpcd.expect_amount_ + mgpcd.expect_member_amount_) 'value' FROM music_group_payment_calender_detail mgpcd
 		LEFT JOIN music_group_payment_calender mgpc ON mgpcd.music_group_payment_calender_id_ = mgpc.id_
+		LEFT JOIN student s ON s.user_id_ = mgpcd.user_id_
 		WHERE mgpc.batch_no_ IS NOT NULL AND mgpcd.payment_status_ = 'NON_PAYMENT' AND (mgpcd.expect_amount_ + mgpcd.expect_member_amount_) > 0
 		AND mgpc.music_group_id_ = #{musicGroupId} AND mgpc.status_ IN ('OPEN','OVER','PAID') AND mgpc.pay_user_type_ = 'STUDENT'
+		AND ((mgpc.member_rank_setting_id_ IS NOT NULL AND (DATEDIFF(s.music_membership_end_time_,NOW()) &lt; 0 OR s.music_membership_end_time_ IS NULL)) OR mgpc.member_rank_setting_id_ IS NULL)
 		GROUP BY mgpcd.user_id_
 	</select>
 
@@ -437,6 +439,7 @@
 	<sql id="queryArrearageStudentsCondition">
 		<where>
 			mg.status_ = 'PROGRESS'
+			AND ((mgpc.member_rank_setting_id_ IS NOT NULL AND (DATEDIFF(s.music_membership_end_time_,NOW()) &lt; 0 OR s.music_membership_end_time_ IS NULL)) OR mgpc.member_rank_setting_id_ IS NULL)
 			<if test="noPaymentType==null or noPaymentType==0">
 				AND DATE_FORMAT(NOW(),'%Y-%m-%d') > mgpc.deadline_payment_date_
 			</if>
@@ -485,6 +488,7 @@
 			su.phone_ phone_
 		FROM
 			music_group_payment_calender_detail mgpcd
+			LEFT JOIN student s ON s.user_id_ = mgpcd.user_id_
 			LEFT JOIN music_group_payment_calender mgpc ON mgpcd.music_group_payment_calender_id_ = mgpc.id_
 			LEFT JOIN music_group mg ON mgpc.music_group_id_ = mg.id_
 			LEFT JOIN student_registration sr ON sr.music_group_id_ = mgpc.music_group_id_
@@ -506,6 +510,7 @@
 			COUNT(DISTINCT mgpc.music_group_id_,mgpcd.user_id_)
 		FROM
 			music_group_payment_calender_detail mgpcd
+			LEFT JOIN student s ON s.user_id_ = mgpcd.user_id_
 			LEFT JOIN music_group_payment_calender mgpc ON mgpcd.music_group_payment_calender_id_ = mgpc.id_
 			LEFT JOIN music_group mg ON mgpc.music_group_id_ = mg.id_
 			<if test="search!=null and search!=''">

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

@@ -772,7 +772,7 @@
     <select id="queryAutoCreateStudentMap" resultType="java.util.Map">
         SELECT GROUP_CONCAT(s.user_id_) 'value',s.member_music_group_id_ 'key' FROM student s
         LEFT JOIN cloud_teacher_order cto ON cto.student_id_ = s.user_id_ AND cto.status_ = 1 AND cto.music_group_id_ IS NOT NULL
-        WHERE DATEDIFF(s.music_membership_end_time_,NOW()) = #{pushMemberRenew} AND cto.id_ IS NULL
+        WHERE DATEDIFF(s.music_membership_end_time_,NOW()) = #{pushMemberRenew} AND cto.music_group_id_ = s.member_music_group_id_ AND cto.id_ IS NULL
         GROUP BY s.member_music_group_id_
     </select>
 
@@ -798,4 +798,8 @@
         UPDATE student SET member_rank_setting_id_ = NULL,membership_start_time_ = NULL,membership_end_time_ = NULL
         WHERE user_id_ = #{userId}
     </update>
+    <update id="cleanMusicMember">
+        UPDATE student SET member_music_group_id_ = NULL,music_membership_end_time_ = NULL
+        WHERE user_id_ = #{userId}
+    </update>
 </mapper>