Kaynağa Gözat

Merge remote-tracking branch 'origin/master'

Joburgess 5 yıl önce
ebeveyn
işleme
e397b27292
25 değiştirilmiş dosya ile 355 ekleme ve 87 silme
  1. 15 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  2. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/VipGroupDao.java
  3. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ClassGroupStudentMapper.java
  4. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupStudentMapperService.java
  5. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  6. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupSubjectPlanService.java
  7. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentRegistrationService.java
  8. 10 22
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  9. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java
  10. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  11. 17 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  12. 19 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupSubjectPlanServiceImpl.java
  13. 154 35
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  14. 9 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  15. 5 5
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  16. 9 6
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  17. 4 0
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  18. 4 0
      mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java
  19. 5 0
      mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java
  20. 16 0
      mec-common/common-core/src/main/java/com/ym/mec/common/cache/Cache.java
  21. 23 0
      mec-common/common-core/src/main/java/com/ym/mec/common/redis/service/RedisCache.java
  22. 1 1
      mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupRegisterController.java
  23. 25 0
      mec-task/src/main/java/com/ym/mec/task/jobs/UpdateVipGroupToFinishedStatusTask.java
  24. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java
  25. 6 0
      mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

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

@@ -200,7 +200,21 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @author Joburgess
      * @date 2019/10/18
      */
-    int deleteCourseSchedulesByMusicGroupID(@Param("musicGroupID") Long musicGroupID);
+    int deleteCourseSchedulesByMusicGroupID(@Param("musicGroupID") String musicGroupID);
+
+    /**
+     * 逻辑删除乐团课程
+     * @param musicGroupID
+     * @return
+     */
+    int logicDeleteCourseSchedulesByMusicGroupID(@Param("musicGroupID") String musicGroupID);
+    
+    /**
+     * 恢复乐团课程
+     * @param musicGroupID
+     * @return
+     */
+    int resumeCourseScheduleByMusicGroupId(String musicGroupID);
 
     /**
      * @param musicGroupID: 乐团编号

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

@@ -303,4 +303,10 @@ public interface VipGroupDao extends BaseDAO<Long, VipGroup> {
 	 * @return com.ym.mec.biz.dal.dto.VipBuyResultDto
 	 */
 	VipBuyResultDto getVipBuyResultInfo(@Param("vipGroupId") Integer vipGroupId);
+	
+	/**
+	 * 查询需要结束的对象列表
+	 * @return
+	 */
+	List<VipGroup> queryRequiredOverList();
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ClassGroupStudentMapper.java

@@ -53,6 +53,13 @@ public class ClassGroupStudentMapper {
 		this.status = ClassGroupStudentStatusEnum.NORMAL;
 	}
 
+	public ClassGroupStudentMapper(String musicGroupId, Integer userId,GroupType groupType) {
+		this.musicGroupId = musicGroupId;
+		this.userId = userId;
+		this.groupType = groupType;
+		this.status = ClassGroupStudentStatusEnum.NORMAL;
+	}
+
 	public ClassGroupStudentMapper(String musicGroupId, int classGroupId, Integer userId, ClassGroupStudentStatusEnum status) {
 		this.musicGroupId = musicGroupId;
 		this.classGroupId = classGroupId;

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

@@ -3,6 +3,7 @@ package com.ym.mec.biz.service;
 import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
+import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.common.service.BaseService;
 
@@ -60,4 +61,8 @@ public interface ClassGroupStudentMapperService extends BaseService<Long, ClassG
      * @return
      */
     Object queryHoliday(String year) throws IOException;
+
+    List<ClassGroupStudentMapper> findMusicGroupClassGroupByType(String musicGroupId, ClassGroupTypeEnum type);
+
+    void classGroupStudentsInsert(List<ClassGroupStudentMapper> classGroupStudentMappers);
 }

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

@@ -90,7 +90,7 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @Date: 2019/9/17
 	 * 批量更新课程计划
 	 */
-	void batchUpdateCourseSchedule(List<CourseSchedule> courseSchedules, Long musicGroupID);
+	void batchUpdateCourseSchedule(List<CourseSchedule> courseSchedules, String musicGroupID);
 
 	/**
 	 * @Author: Joburgess

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

@@ -48,7 +48,7 @@ public interface MusicGroupSubjectPlanService extends BaseService<Integer, Music
      * @param musicGroupId
      * @param subjectId
      */
-    void addApplyStudentNum(String musicGroupId, Integer subjectId,int num);
+    void addApplyStudentNum(String musicGroupId, Integer subjectId,int num) throws Exception;
 
     /**
      * 批量修改声部规划费用

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

@@ -73,7 +73,7 @@ public interface StudentRegistrationService extends BaseService<Long, StudentReg
 	 * @param studentRegistration
 	 * @return
 	 */
-	StudentRegistration addStudent(StudentRegistration studentRegistration) throws IOException;
+	StudentRegistration addStudent(StudentRegistration studentRegistration) throws Exception;
 
 	/**
 	 * 查询学生信息

+ 10 - 22
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -700,6 +700,16 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         studentRegistrationDao.deleteClassGroup(classGroupId);
         //删除班级跟合奏班关系
         classGroupRelationDao.deleteBySubClassId(classGroupId);
+        //删除班级未开始课程
+        List<CourseSchedule> courseScheduleList = courseScheduleService.findNoStartCoursesByClassGroupId(classGroupId);
+        if (courseScheduleList.size() > 0) {
+            List<Long> courseScheduleIds = courseScheduleList.stream().map(courseSchedule -> courseSchedule.getId()).collect(Collectors.toList());
+            courseScheduleDao.batchDeleteCourseSchedules(courseScheduleIds);
+            courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
+            teacherAttendanceDao.batchDeleteByCourseSchedules(courseScheduleIds);
+            courseScheduleStudentPaymentDao.deleteByCourseSchedule(courseScheduleIds);
+        }
+
         //删除班级
         classGroupDao.delete(classGroupId);
         //删除im群组
@@ -1328,22 +1338,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         classGroupRelation.setCreateTime(date);
         classGroupRelationService.insert(classGroupRelation);
 
-        //6、添加学生未上合奏课课程
-        List<CourseSchedule> noStartCourses = courseScheduleDao.findNoStartCoursesByClassGroupId(classGroup4MixDto.getClassGroupId());
-        for (CourseSchedule noStartCourse : noStartCourses) {
-            for (StudentRegistration studentRegistration : studentList) {
-                CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
-                courseScheduleStudentPayment.setGroupType(classGroup.getGroupType());
-                courseScheduleStudentPayment.setMusicGroupId(classGroup.getMusicGroupId());
-                courseScheduleStudentPayment.setCourseScheduleId(noStartCourse.getId());
-                courseScheduleStudentPayment.setUserId(studentRegistration.getUserId());
-                courseScheduleStudentPayment.setExpectPrice(expectPrice);
-                courseScheduleStudentPayment.setCreateTime(date);
-                courseScheduleStudentPayment.setUpdateTime(date);
-                courseScheduleStudentPayment.setClassGroupId(noStartCourse.getClassGroupId());
-                courseScheduleStudentPaymentList.add(courseScheduleStudentPayment);
-            }
-        }
         //学生结算表
         courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPaymentList);
         return classGroup;
@@ -1529,12 +1523,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
             now = now.plusDays(1);
         }
-        //加入合奏班
-        ClassGroupRelation classGroupRelation = new ClassGroupRelation();
-        classGroupRelation.setClassGroupId(classGroup4MixDto.getMixClassGroupId());
-        classGroupRelation.setSubClassGroupId(classGroup.getId());
-        classGroupRelation.setCreateTime(date);
-        classGroupRelationService.insert(classGroupRelation);
 
         //老师结算表
         courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java

@@ -245,4 +245,14 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
     public Object queryHoliday(String year) throws IOException {
         return HttpUtil.get(holidayUrl + year,null);
     }
+
+    @Override
+    public List<ClassGroupStudentMapper> findMusicGroupClassGroupByType(String musicGroupId, ClassGroupTypeEnum type) {
+        return classGroupStudentMapperDao.findMusicGroupClassGroupByType(musicGroupId,type);
+    }
+
+    @Override
+    public void classGroupStudentsInsert(List<ClassGroupStudentMapper> classGroupStudentMappers) {
+        classGroupStudentMapperDao.classGroupStudentsInsert(classGroupStudentMappers);
+    }
 }

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

@@ -193,7 +193,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	}
 
 	@Override
-	public void batchUpdateCourseSchedule(List<CourseSchedule> courseSchedules, Long musicGroupID) {
+	public void batchUpdateCourseSchedule(List<CourseSchedule> courseSchedules, String musicGroupID) {
 		if(Objects.isNull(courseSchedules)&&courseSchedules.size()<=0){
 			throw new BizException("请选择需要调整的课程!");
 		}

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

@@ -252,7 +252,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (studentRegistration.getTemporaryCourseFee() != null) {
             List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailService.findUserApplyOrder(studentRegistration.getUserId(), DealStatusEnum.WAIT_PAY);
             for (StudentPaymentOrderDetail orderDetail : orderDetails) {
-                if (orderDetail == null || orderDetail.getPrice() == null){
+                if (orderDetail == null || orderDetail.getPrice() == null || orderDetail.getGoodsIdList() != null){
                     continue;
                 }
                 MusicGroupSubjectGoodsGroup musicGroupSubjectGoodsGroup = new MusicGroupSubjectGoodsGroup();
@@ -401,7 +401,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (studentRegistration.getTemporaryCourseFee() != null) {
             List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailService.findUserApplyOrder(studentRegistration.getUserId(), DealStatusEnum.WAIT_PAY);
             for (StudentPaymentOrderDetail orderDetail : orderDetails) {
-                if (orderDetail == null || orderDetail.getPrice() == null){
+                if (orderDetail == null || orderDetail.getPrice() == null || orderDetail.getGoodsIdList() != null){
                     continue;
                 }
                 MusicGroupSubjectGoodsGroup musicGroupSubjectGoodsGroup = new MusicGroupSubjectGoodsGroup();
@@ -802,6 +802,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         // 清除下次缴费时间
         musicGroupStudentFeeDao.updateNextPaymentDate(musicGroupId, null);
         musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId,"暂停乐团",sysUser.getId(),""));
+        
+        //删除课表
+        courseScheduleDao.logicDeleteCourseSchedulesByMusicGroupID(musicGroup.getId());
+        
         return true;
     }
 
@@ -828,6 +832,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         // 重新设置下次缴费时间
         musicGroupStudentFeeDao.updateNextPaymentDate(musicGroupId, musicGroupPaymentCalenderService.getNextPaymentDate(musicGroupId));
         musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId,"恢复乐团",sysUser.getId(),""));
+        
+        //恢复课表
+        courseScheduleDao.resumeCourseScheduleByMusicGroupId(musicGroup.getId());
+        
         return true;
     }
 
@@ -1005,13 +1013,18 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
 		musicGroupQuitDao.insert(musicGroupQuit);
 
-		classGroupStudentMapperDao.deleteStudentByMusicGroupId(musicGroupId, userId);
-
 		// 判断乐器是否是租赁
 		StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(userId, musicGroupId);
 		if (studentRegistration == null) {
 			throw new BizException("用户注册信息不存在");
 		}
+		//更新学员在班级的状态
+		classGroupStudentMapperDao.deleteStudentByMusicGroupId(musicGroupId, userId);
+		
+		//更新班级人数
+		List<Integer> classGroupIdList = classGroupStudentMapperDao.queryClassGroupIdList(musicGroupId, userId, GroupType.MUSIC);
+		classGroupDao.batchUpdateStudentNumMinusOne(classGroupIdList);
+		
 		// 删除未上课
 		courseScheduleService.batchDeleteMusicGroupCourseWithStudent(musicGroupId, userId, GroupType.MUSIC);
 		

+ 19 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupSubjectPlanServiceImpl.java

@@ -9,6 +9,7 @@ import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.GoodsType;
 import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
 import com.ym.mec.biz.service.*;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.util.collection.MapUtil;
 import org.snaker.engine.core.OrderService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -121,12 +122,22 @@ public class MusicGroupSubjectPlanServiceImpl extends BaseServiceImpl<Integer, M
     }
 
     @Override
-    public void addApplyStudentNum(String musicGroupId, Integer subjectId, int num) {
-        MusicGroupSubjectPlan musicOneSubjectClassPlan = musicGroupSubjectPlanDao.getMusicOneSubjectClassPlan(musicGroupId, subjectId);
-        int applyNum = musicOneSubjectClassPlan.getApplyStudentNum() == null ? 0 : musicOneSubjectClassPlan.getApplyStudentNum();
-        musicOneSubjectClassPlan.setApplyStudentNum(applyNum + num);
-        musicOneSubjectClassPlan.setUpdateTime(new Date());
-        musicGroupSubjectPlanDao.update(musicOneSubjectClassPlan);
+    public void addApplyStudentNum(String musicGroupId, Integer subjectId, int num) throws Exception {
+        boolean flag = false;
+        for (int i = 10; i >= 1; i--) {
+            MusicGroupSubjectPlan musicOneSubjectClassPlan = musicGroupSubjectPlanDao.getMusicOneSubjectClassPlan(musicGroupId, subjectId);
+            int applyNum = musicOneSubjectClassPlan.getApplyStudentNum() == null ? 0 : musicOneSubjectClassPlan.getApplyStudentNum();
+            musicOneSubjectClassPlan.setApplyStudentNum(applyNum + num);
+            musicOneSubjectClassPlan.setUpdateTime(new Date());
+            int updateCount = musicGroupSubjectPlanDao.update(musicOneSubjectClassPlan);
+            if (updateCount >= 0) {
+                flag = true;
+                break;
+            }
+        }
+        if (!flag) {
+            throw new BizException("系统繁忙,请重试");
+        }
     }
 
     @Override
@@ -150,7 +161,8 @@ public class MusicGroupSubjectPlanServiceImpl extends BaseServiceImpl<Integer, M
 
         List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailDao.findUserApplyOrder(studentRegistration.getUserId(), DealStatusEnum.WAIT_PAY);
         for (StudentPaymentOrderDetail orderDetail : orderDetails) {
-            if (orderDetail == null || orderDetail.getGoodsIdList() == null || orderDetail.getGoodsIdList().isEmpty()) continue;
+            if (orderDetail == null || orderDetail.getGoodsIdList() == null || orderDetail.getGoodsIdList().isEmpty())
+                continue;
             MusicGroupSubjectGoodsGroup musicGroupSubjectGoodsGroup = new MusicGroupSubjectGoodsGroup();
             if (orderDetail.getType().equals(OrderDetailTypeEnum.MUSICAL)) {
                 musicGroupSubjectGoodsGroup.setName("乐器");

+ 154 - 35
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -15,10 +15,13 @@ import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.StudentRegistrationQueryInfo;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.entity.ImGroupMember;
+import com.ym.mec.common.entity.ImGroupModel;
 import com.ym.mec.common.entity.ImResult;
 import com.ym.mec.common.entity.ImUserModel;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.redis.service.RedisCache;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.im.ImFeignService;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
@@ -48,15 +51,19 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     @Autowired
     private StudentPaymentOrderDetailService studentPaymentOrderDetailService;
     @Autowired
+    private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
+    @Autowired
+    private ClassGroupRelationService classGroupRelationService;
+    @Autowired
+    private CourseScheduleService courseScheduleService;
+    @Autowired
     private TeacherDao teacherDao;
     @Autowired
-    private ClassGroupDao classGroupDao;
+    private ClassGroupService classGroupDao;
     @Autowired
     private MusicGroupStudentFeeDao musicGroupStudentFeeDao;
     @Autowired
-    private ClassGroupStudentMapperDao classGroupStudentMapperDao;
-    @Autowired
-    private ClassGroupRelationDao classGroupRelationDao;
+    private ClassGroupStudentMapperService classGroupStudentMapperDao;
     @Autowired
     private SysMessageService sysMessageService;
     @Autowired
@@ -87,6 +94,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     private ClassGroupStudentMapperService classGroupStudentMapperService;
     @Autowired
     private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private RedisCache<String, Object> redisCache;
 
     @Override
     public BaseDAO<Long, StudentRegistration> getDAO() {
@@ -117,7 +126,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     @Transactional(rollbackFor = Exception.class)
     public Integer batchUpdateSubject(Integer userId, Integer subId, String musicGroupId) throws Exception {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null){
+        if (sysUser == null) {
             throw new BizException("获取用户信息失败");
         }
         //获取当前学员的当前声部
@@ -127,7 +136,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         }
         //批量调剂(未缴费学员)
         int i = studentRegistrationDao.batchUpdateSubject(userId, subId, musicGroupId);
-        if(i > 0){
+        if (i > 0) {
             //当前专业报名人数减一
             musicGroupSubjectPlanService.addApplyStudentNum(musicGroupId, studentRegistration.getActualSubjectId(), -1);
             //修改专业已报名人数
@@ -137,8 +146,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             roleIds.add(SysUserRole.SECTION_MANAGER);
             roleIds.add(SysUserRole.OPERATION_EXECUTIVE);
 
-    		String[] organIds = { musicGroup.getOrganId() + "" };
-            sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds,organIds), MessageTypeEnum.BACKSTAGE_STUDENT_SUBJECT_CHANGE, "", musicGroup.getName());
+            String[] organIds = {musicGroup.getOrganId() + ""};
+            sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, organIds), MessageTypeEnum.BACKSTAGE_STUDENT_SUBJECT_CHANGE, "", musicGroup.getName());
         }
         return i;
     }
@@ -183,7 +192,12 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public StudentRegistration addStudent(StudentRegistration studentRegistration) throws IOException {
+    public StudentRegistration addStudent(StudentRegistration studentRegistration) throws Exception {
+        String key = "_student_registration";
+        long threadId = Thread.currentThread().getId();
+        if (!redisCache.getLocked(key, threadId, 10)) {
+            throw new BizException("系统繁忙,请稍后再试");
+        }
         Date date = new Date();
         Integer userId = 0;
         SysUser sysUser = studentRegistrationDao.getSysUserByPhone(studentRegistration.getParentsPhone());
@@ -196,7 +210,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             sysUser.setDelFlag(com.ym.mec.auth.api.enums.YesOrNoEnum.NO);
             sysUser.setUserType(SysUserType.STUDENT);
             sysUser.setGender(studentRegistration.getGender());
-            if(studentRegistration.getOrganId() != null){
+            if (studentRegistration.getOrganId() != null) {
                 sysUser.setOrganId(studentRegistration.getOrganId());
             }
             sysUser.setRealName(studentRegistration.getParentsName());
@@ -218,8 +232,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         studentRegistration.setCreateTime(date);
         studentRegistration.setUpdateTime(date);
         studentRegistration.setUserId(sysUser.getId());
-        studentRegistrationDao.updateCurrentClass(studentRegistration);
         studentRegistrationDao.insert(studentRegistration);
+        studentRegistrationDao.updateCurrentClass(studentRegistration);
         //增加报名学生数
         musicGroupSubjectPlanService.addApplyStudentNum(studentRegistration.getMusicGroupId(), studentRegistration.getSubjectId(), 1);
         //报名成功后,发送短信
@@ -234,6 +248,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 MessageTypeEnum.SMS_APPLY_MESSAGE, map, null, 0, "",
                 studentRegistration.getParentsName(), subject.getName(), HttpUtil.getSortUrl(studentApplyUrl),
                 DateUtil.format(musicGroup.getApplyExpireDate(), DateUtil.DATE_FORMAT_MIN), serverPhone);
+
+        redisCache.releaseLocked(key, threadId);
         return studentRegistration;
     }
 
@@ -242,8 +258,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         return studentRegistrationDao.queryStudentInfo(userId);
     }
 
-    @Transactional(rollbackFor = Exception.class)
     @Override
+    @Transactional
     public StudentPaymentOrder addOrder(StudentRegistration studentRegistration, BigDecimal amount, String orderNo, String paymentChannel, BigDecimal courseFee, List<MusicGroupSubjectGoodsGroup> goodsGroups, List<Goods> goodsList, List<Goods> otherGoodsList) throws Exception {
         Date date = new Date();
         StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
@@ -319,18 +335,29 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetailList);
 
         //增加缴费学生数
-        MusicGroupSubjectPlan musicOneSubjectClassPlan = musicGroupSubjectPlanService.getMusicOneSubjectClassPlan(studentRegistration.getMusicGroupId(), studentRegistration.getSubjectId());
-        int paidNum = musicOneSubjectClassPlan.getPaidStudentNum() == null ? 0 : musicOneSubjectClassPlan.getPaidStudentNum();
-        musicOneSubjectClassPlan.setPaidStudentNum(paidNum + 1);
-        if (studentRegistration.getTemporaryCourseFee() == null && musicOneSubjectClassPlan.getPaidStudentNum() > musicOneSubjectClassPlan.getExpectedStudentNum()) {
-            throw new BizException("乐团人数已满");
+        boolean updateFlag = false;
+        for (int i = 0; i < 10; i++) {
+            MusicGroupSubjectPlan musicOneSubjectClassPlan = musicGroupSubjectPlanService.getMusicOneSubjectClassPlan(studentRegistration.getMusicGroupId(), studentRegistration.getSubjectId());
+            int paidNum = musicOneSubjectClassPlan.getPaidStudentNum() == null ? 0 : musicOneSubjectClassPlan.getPaidStudentNum();
+            musicOneSubjectClassPlan.setPaidStudentNum(paidNum + 1);
+            if (studentRegistration.getTemporaryCourseFee() == null && musicOneSubjectClassPlan.getPaidStudentNum() > musicOneSubjectClassPlan.getExpectedStudentNum()) {
+                throw new BizException("乐团人数已满");
+            }
+            int count = musicGroupSubjectPlanService.update(musicOneSubjectClassPlan);
+            if (count >= 1) {
+                updateFlag = true;
+                break;
+            }
         }
-        musicGroupSubjectPlanService.update(musicOneSubjectClassPlan);
+        if (!updateFlag) {
+            throw new BizException("系统繁忙,更新缴费人数失败");
+        }
+
         return studentPaymentOrder;
     }
 
-    @Transactional(rollbackFor = Exception.class)
     @Override
+    @Transactional
     public StudentPaymentOrder reAddOrder(Integer userId, BigDecimal amount, String orderNo, String paymentChannel, BigDecimal courseFee, List<MusicGroupSubjectGoodsGroup> goodsGroups, List<Goods> goodsList, List<Goods> otherGoodsList, String musicGroupId, StudentPaymentOrder oldOrder) {
         //关闭老订单
         oldOrder.setStatus(DealStatusEnum.CLOSE);
@@ -413,11 +440,12 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public StudentRegistration queryByUserIdAndMusicGroupId(Integer userId, String musicGroupId) {
         StudentRegistration registration = studentRegistrationDao.queryByUserIdAndMusicGroupId(userId, musicGroupId);
         SysUserCashAccount account = sysUserCashAccountDao.getLocked(userId);
         registration.setBalance(account.getBalance());
-        registration.setTransferStudent(registration.getTemporaryCourseFee() == null?0:1);
+        registration.setTransferStudent(registration.getTemporaryCourseFee() == null ? 0 : 1);
         return registration;
     }
 
@@ -477,8 +505,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             Set<Integer> roleIds = new HashSet<>(1);
             roleIds.add(SysUserRole.OPERATION_EXECUTIVE);
 
-    		String[] organIds = { musicGroup.getOrganId() + "" };
-            sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds,organIds), MessageTypeEnum.BACKSTAGE_MUSIC_GROUP_ADD_STUDENT, "", musicGroup.getName(), studentRegistration.getName());
+            String[] organIds = {musicGroup.getOrganId() + ""};
+            sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, organIds), MessageTypeEnum.BACKSTAGE_MUSIC_GROUP_ADD_STUDENT, "", musicGroup.getName(), studentRegistration.getName());
             //增加报名学生数
             musicGroupSubjectPlanService.addApplyStudentNum(musicGroupId, studentRegistration.getSubjectId(), 1);
             Integer classGroupId = studentRegistration.getClassGroupId();
@@ -497,13 +525,17 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                     throw new Exception("班级不存在");
                 }
                 //新增班级学生关系(单技班)
-                classGroupStudentMapperDao.insert(new ClassGroupStudentMapper(classGroupId, userId));
+//                ClassGroupStudentMapper classGroupStudentMapper = new ClassGroupStudentMapper(musicGroupId,userId,GroupType.MUSIC);
+//                classGroupStudentMapper.setClassGroupId(classGroupId);
+//                classGroupStudentMapperDao.insert(classGroupStudentMapper);
                 //新增班级学生关系(合奏班)
-                ClassGroupRelation classGroupRelation = classGroupRelationDao.findClassGroupRelation(classGroupId);
-                classGroupStudentMapperDao.insert(new ClassGroupStudentMapper(classGroupRelation.getClassGroupId(), userId));
-
+//                ClassGroupRelation classGroupRelation = classGroupRelationDao.findClassGroupRelation(classGroupId);
+//                classGroupStudentMapper.setClassGroupId(classGroupRelation.getClassGroupId());
+//                classGroupStudentMapperDao.insert(classGroupStudentMapper);
+                addStudents(classGroup, userId);
+                Date date = new Date();
                 //获取当前月
-                Integer month = Integer.parseInt(DateUtil.getMonth(new Date()));
+                Integer month = Integer.parseInt(DateUtil.getMonth(date));
                 //获取下次缴费月份
                 List<MusicGroupPaymentCalender> musicGroupPaymentCalenders = musicGroupPaymentCalenderDao.findByMusicGroupId(musicGroupId);
                 List<Integer> months = musicGroupPaymentCalenders.stream().map(e -> e.getPaymentMonth()).collect(Collectors.toList());
@@ -543,10 +575,13 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 studentPaymentOrderDetails.add(studentPaymentOrderDetail);
                 //汇总金额
                 BigDecimal reduce = studentPaymentOrderDetails.stream().map(e -> e.getPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
-                if(reduce == BigDecimal.ZERO){
+                if (reduce == BigDecimal.ZERO) {
                     studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
                     studentRegistration.setPaymentStatus(PaymentStatusEnum.YES);
+                    studentPaymentOrder.setActualAmount(reduce);
+                    studentPaymentOrder.setPayTime(date);
                 }
+                studentPaymentOrder.setExpectAmount(reduce);
                 studentRegistrationDao.insertBasic(studentRegistration);
                 studentPaymentOrderService.insert(studentPaymentOrder);
                 studentPaymentOrderDetails.forEach(e -> {
@@ -555,14 +590,95 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 studentPaymentOrderDetailService.batchAdd(studentPaymentOrderDetails);
             }
             studentRegistrationDao.updateCurrentClass(studentRegistration);
-            Map<Integer,String> receivers = new HashMap<>(1);
-            receivers.put(studentRegistration.getUserId(),studentRegistration.getParentsPhone());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI,MessageTypeEnum.SMS_MUSIC_GROUP_ADD_STUDENT,
-                    receivers,null,0,null,studentRegistration.getParentsName(),studentRegistration.getName(),musicGroup.getName());
+            Map<Integer, String> receivers = new HashMap<>(1);
+            receivers.put(studentRegistration.getUserId(), studentRegistration.getParentsPhone());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.SMS_MUSIC_GROUP_ADD_STUDENT,
+                    receivers, null, 0, null, studentRegistration.getParentsName(), studentRegistration.getName(), musicGroup.getName());
             return userId;
         }
     }
 
+    public void addStudents(ClassGroup classGroup, Integer userId) {
+        Date nowDate = new Date();
+        //1、班级关系添加
+        List<ClassGroupStudentMapper> classGroupStudentMappers = new ArrayList<>();
+        List<ImGroupMember> imGroupMemberList = new ArrayList<>();
+        Integer classGroupId = classGroup.getId();
+        ClassGroupRelation classGroupRelation = classGroupRelationService.findClassGroupRelation(classGroupId);
+
+        //校验是否存在历史记录
+        ClassGroupStudentMapper classGroupStudentMapper = classGroupStudentMapperDao.findClassStudentMapperByUserIdAndClassGroupId(userId, classGroupId);
+        if (classGroupStudentMapper != null) {
+            classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
+        } else {
+            classGroupStudentMapper = new ClassGroupStudentMapper();
+            classGroupStudentMapper.setMusicGroupId(classGroup.getMusicGroupId());
+            classGroupStudentMapper.setClassGroupId(classGroupId);
+            classGroupStudentMapper.setUserId(userId);
+            classGroupStudentMapper.setCreateTime(nowDate);
+            classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
+            classGroupStudentMapper.setGroupType(GroupType.MUSIC);
+            classGroupStudentMappers.add(classGroupStudentMapper);
+        }
+        //班级在合奏班中
+        if (classGroupRelation != null) {
+            classGroupStudentMapper = new ClassGroupStudentMapper();
+            classGroupStudentMapper.setMusicGroupId(classGroup.getMusicGroupId());
+            classGroupStudentMapper.setClassGroupId(classGroupRelation.getClassGroupId());
+            classGroupStudentMapper.setUserId(userId);
+            classGroupStudentMapper.setCreateTime(nowDate);
+            classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
+            classGroupStudentMapper.setGroupType(GroupType.MUSIC);
+            classGroupStudentMappers.add(classGroupStudentMapper);
+        }
+        imGroupMemberList.add(new ImGroupMember(userId.toString()));
+        if (classGroupStudentMappers.size() > 0) {
+            classGroupStudentMapperDao.classGroupStudentsInsert(classGroupStudentMappers);
+        }
+
+        //添加进IM群组
+        ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
+        imFeignService.groupJoin(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+
+        //2、班级人数调整
+        classGroupDao.updateClassStudentNum(classGroupId.longValue(), 1);
+
+        //3、学生加入新班级未开始课程
+        List<CourseSchedule> courseScheduleList = courseScheduleService.findNoStartCoursesByClassGroupId(classGroupId);
+
+        //4、班级在合奏班、添加合奏课程
+        if (classGroupRelation != null) {
+            //合奏班增加人数
+            classGroupDao.updateClassStudentNum(classGroupRelation.getClassGroupId().longValue(), 1);
+            List<CourseSchedule> mixCourseScheduleList = courseScheduleService.findNoStartCoursesByClassGroupId(classGroupRelation.getClassGroupId());
+            courseScheduleList.addAll(mixCourseScheduleList);
+
+            //添加进合奏班IM群组
+            imFeignService.groupJoin(new ImGroupModel(classGroupRelation.getClassGroupId().toString(), imGroupMembers, null));
+        }
+
+        BigDecimal coursePrice = new BigDecimal("0");
+
+        List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
+        for (CourseSchedule courseSchedule : courseScheduleList) {
+            CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
+            courseScheduleStudentPayment.setGroupType(classGroup.getGroupType());
+            courseScheduleStudentPayment.setMusicGroupId(classGroup.getMusicGroupId());
+            courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
+            courseScheduleStudentPayment.setUserId(userId);
+            courseScheduleStudentPayment.setExpectPrice(coursePrice);
+            courseScheduleStudentPayment.setClassGroupId(classGroupId);
+            courseScheduleStudentPayment.setCreateTime(nowDate);
+            courseScheduleStudentPayment.setUpdateTime(nowDate);
+            courseScheduleStudentPayments.add(courseScheduleStudentPayment);
+        }
+
+        if (courseScheduleStudentPayments.size() == 0) {
+            return;
+        }
+        courseScheduleStudentPaymentService.batchInsert(courseScheduleStudentPayments);
+    }
+
     @Override
     public List<StudentRegistration> findClassGroupStu(String musicGroupId, Integer classGroupId) {
         //获取所有声部
@@ -603,7 +719,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 waitPayOrder.setStatus(DealStatusEnum.CLOSE);
                 studentPaymentOrderService.update(waitPayOrder);
                 //添加学生
-                classGroupStudentMapperService.addStudents(waitPayOrder.getClassGroupId(), studentRegistration.getUserId().toString(), GroupType.MUSIC);
+                //classGroupStudentMapperService.addStudents(waitPayOrder.getClassGroupId(), studentRegistration.getUserId().toString(), GroupType.MUSIC);
             } else {
                 //获取当前月
                 Integer month = Integer.parseInt(DateUtil.getMonth(nowDate));
@@ -679,7 +795,10 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         //减去缴费人数
         if (studentPaymentOrder.getStatus().equals(DealStatusEnum.FAILED)) {
             musicOneSubjectClassPlan.setPaidStudentNum(musicOneSubjectClassPlan.getPaidStudentNum() - 1);
-            musicGroupSubjectPlanService.update(musicOneSubjectClassPlan);
+            int updateCount = musicGroupSubjectPlanService.update(musicOneSubjectClassPlan);
+            if (updateCount <= 0) {
+                throw new BizException("减去缴费人数失败");
+            }
             //发送缴费成功通知(短信 + push)
             String studentApplyUrl = sysConfigDao.findConfigValue(SysConfigService.STUDENT_APPLY_URL + studentRegistration.getMusicGroupId());
 
@@ -788,7 +907,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         List<ClassGroupStudentMapper> classGroupStudentMappers = classGroupStudentMapperDao.findMusicGroupClassGroupByType(musicGroupId, type);
         for (StudentRegistration student : students) {
             for (ClassGroupStudentMapper classGroupStudentMapper : classGroupStudentMappers) {
-                if(classGroupStudentMapper.getUserId().equals(student.getUserId())){
+                if (classGroupStudentMapper.getUserId().equals(student.getUserId())) {
                     students.remove(student);
                 }
             }

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

@@ -1665,7 +1665,15 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 	@Override
 	public void updateVipGroupStatusToFinished() {
-		
+		List<VipGroup> vipGroupList = vipGroupDao.queryRequiredOverList();
+		if (vipGroupList != null && vipGroupList.size() > 0) {
+			Date date = new Date();
+			for (VipGroup vipGroup : vipGroupList) {
+				vipGroup.setStatus(VipGroupStatusEnum.FINISHED);
+				vipGroup.setUpdateTime(date);
+			}
+			vipGroupDao.batchUpdate(vipGroupList);
+		}
 	}
 
 	@Override

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

@@ -522,14 +522,14 @@
 
     <select id="countStudyNum" resultType="java.util.Map">
         SELECT cgsm.class_group_id_ 'key',COUNT(cgsm.user_id_) 'value' FROM class_group_student_mapper cgsm
-        LEFT JOIN student_registration sr ON (sr.user_id_ = cgsm.user_id_ AND sr.music_group_id_ = cgsm.music_group_id_)
-        WHERE FIND_IN_SET(cgsm.class_group_id_,#{classGroupIds}) AND cgsm.status_ != 'QUIT' AND sr.music_group_status_ != 'QUIT' GROUP BY cgsm.class_group_id_
+        WHERE FIND_IN_SET(cgsm.class_group_id_,#{classGroupIds}) AND cgsm.status_ != 'QUIT'
+        GROUP BY cgsm.class_group_id_
     </select>
 
     <select id="countQuitNum" resultType="java.util.Map">
-        SELECT sr.class_group_id_ 'key',COUNT(sr.user_id_) 'value' FROM student_registration sr
-        WHERE FIND_IN_SET(sr.class_group_id_,#{classGroupIds}) AND sr.music_group_status_ = 'QUIT'
-        GROUP BY sr.class_group_id_
+        SELECT cgsm.class_group_id_ 'key',COUNT(cgsm.user_id_) 'value' FROM class_group_student_mapper cgsm
+        WHERE FIND_IN_SET(cgsm.class_group_id_,#{classGroupIds}) AND cgsm.status_ = 'QUIT'
+        GROUP BY cgsm.class_group_id_
     </select>
 
     <sql id="queryMusicGroupCourseScheduleSql">

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

@@ -190,13 +190,16 @@
     </delete>
 
     <delete id="deleteCourseSchedulesByMusicGroupID">
-        DELETE
-        cs
-        FROM
-        course_schedule cs
-        INNER JOIN class_group cg ON cs.class_group_id_=cg.id_
-        WHERE cg.music_group_id_=#{musicGroupID} AND cg.group_type_='MUSIC'
+        DELETE FROM course_schedule WHERE music_group_id_=#{musicGroupID} AND group_type_='MUSIC' and status_ = 'NOT_START'
     </delete>
+    
+    <update id="logicDeleteCourseSchedulesByMusicGroupID">
+    	update course_schedule set del_flag_ = '1' WHERE music_group_id_=#{musicGroupID} AND group_type_='MUSIC' and status_ = 'NOT_START'
+    </update>
+    
+    <update id="resumeCourseScheduleByMusicGroupId">
+    	update course_schedule set del_flag_ = '0' WHERE music_group_id_=#{musicGroupID} AND group_type_='MUSIC' and status_ = 'NOT_START' and del_flag_ = '1'
+    </update>
 
     <delete id="batchDeleteCourseSchedules">
         DELETE FROM course_schedule WHERE id_ IN

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

@@ -864,4 +864,8 @@
 	        WHERE id_ = #{item.id}
         </foreach>
     </update>
+    
+    <select id="queryRequiredOverList" resultMap="VipGroup">
+    	select vg.* from vip_group vg left join class_group cg on vg.id_ = cg.music_group_id_ where vg.status_ = 2 and cg.total_class_times_ = cg.current_class_times_ and cg.total_class_times_ &gt; 0
+    </select>
 </mapper>

+ 4 - 0
mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java

@@ -56,4 +56,8 @@ public interface TaskRemoteService {
 	@GetMapping("task/queryOrderStatus")
 	// 订单状态查询
 	public void queryOrderStatus();
+
+	@GetMapping("task/updateVipGroupToFinishedStatus")
+	// 更新VIP课程状态至已结束
+	public void updateVipGroupToFinishedStatus();
 }

+ 5 - 0
mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java

@@ -70,4 +70,9 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
 	public void queryOrderStatus() {
 		logger.info("查询订单状态的服务调用失败");
 	}
+
+	@Override
+	public void updateVipGroupToFinishedStatus() {
+		logger.info("更新VIP课程状态至已结束的服务调用失败");
+	}
 }

+ 16 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/cache/Cache.java

@@ -70,4 +70,20 @@ public interface Cache<K, V> {
 	 */
 	void expire(K key, int expireTimes);
 
+	/**
+	 * 获取分布式锁
+	 * @param key 业务唯一标识
+	 * @param threadId 线程编号
+	 * @param seconds 锁的有效期
+	 * @return
+	 */
+	boolean getLocked(K key, V threadId, int seconds);
+
+	/**
+	 * 释放分布式锁
+	 * @param key
+	 * @param threadId
+	 * @return
+	 */
+	boolean releaseLocked(K key, V threadId);
 }

+ 23 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/redis/service/RedisCache.java

@@ -72,4 +72,27 @@ public class RedisCache<K, V> implements Cache<K, V> {
 	public RedisTemplate<K, V> getRedisTemplate() {
 		return redisTemplate;
 	}
+
+	@Override
+	public boolean getLocked(K key, V threadId, int seconds) {
+		if (exists(key)) {
+			return false;
+		}
+
+		put(key, threadId, seconds);
+
+		return true;
+	}
+
+	@Override
+	public boolean releaseLocked(K key, V threadId) {
+		if (exists(key)) {
+			V v = get(key);
+			if (v.toString().equals(threadId.toString())) {
+				delete(key);
+				return true;
+			}
+		}
+		return false;
+	}
 }

+ 1 - 1
mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupRegisterController.java

@@ -35,7 +35,7 @@ public class MusicGroupRegisterController extends BaseController {
 
     @ApiOperation(value = "新增学生报名信息")
     @PostMapping("/add")
-    public HttpResponseResult add(@RequestBody StudentRegistration studentRegistration) throws IOException {
+    public HttpResponseResult add(@RequestBody StudentRegistration studentRegistration) throws Exception {
         Date date = new Date();
         MusicGroup musicGroup = musicGroupService.get(studentRegistration.getMusicGroupId());
         if (musicGroup == null) {

+ 25 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/UpdateVipGroupToFinishedStatusTask.java

@@ -0,0 +1,25 @@
+package com.ym.mec.task.jobs;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.ym.mec.task.TaskRemoteService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+
+
+/**
+ * 更新VIP课程状态至已结束
+ */
+@Service
+public class UpdateVipGroupToFinishedStatusTask extends BaseTask {
+
+	@Autowired
+	private TaskRemoteService taskRemoteService;
+
+	@Override
+	public void execute() throws TaskException {
+		taskRemoteService.updateVipGroupToFinishedStatus();
+	}
+
+}

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java

@@ -100,7 +100,7 @@ public class CourseScheduleController extends BaseController {
     @PostMapping("/batchUpdateCourseSchedule/{musicGroupID}")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/batchUpdateCourseSchedule')")
     public Object batchUpdateCourseSchedule(@RequestBody List<CourseSchedule> courseSchedules,
-                                            @ApiParam(value = "乐团编号", required = true) @PathVariable("musicGroupID") Long musicGroupID){
+                                            @ApiParam(value = "乐团编号", required = true) @PathVariable("musicGroupID") String musicGroupID){
         scheduleService.batchUpdateCourseSchedule(courseSchedules,musicGroupID);
         return succeed();
     }

+ 6 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -60,6 +60,12 @@ public class TaskController extends BaseController {
 		courseScheduleService.updateCourseScheduleToOverStatus();
 	}
 
+	@GetMapping("/updateVipGroupToFinishedStatus")
+	// 更新VIP课程状态至已结束
+	public void updateVipGroupToFinishedStatus() {
+		vipGroupService.updateVipGroupStatusToFinished();
+	}
+
 	@GetMapping("/pushNoSignOutMessage")
 	// 推送未签退消息提醒
 	public void pushNoSignOutMessage() {