소스 검색

解决mybatis 不支持乐观锁

周箭河 5 년 전
부모
커밋
bba675454e
1개의 변경된 파일23개의 추가작업 그리고 15개의 파일을 삭제
  1. 23 15
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

+ 23 - 15
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -193,11 +193,11 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     @Override
     @Transactional(rollbackFor = Exception.class)
     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("系统繁忙,请稍后再试");
-    	}
+        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());
@@ -248,7 +248,7 @@ 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;
     }
@@ -335,16 +335,24 @@ 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;
+            }
         }
-        int count = musicGroupSubjectPlanService.update(musicOneSubjectClassPlan);
-        if (count <= 0) {
-            throw new BizException("系统繁忙请重新");
+        if (!updateFlag) {
+            throw new BizException("系统繁忙,更新缴费人数失败");
         }
+
         return studentPaymentOrder;
     }
 
@@ -788,7 +796,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         if (studentPaymentOrder.getStatus().equals(DealStatusEnum.FAILED)) {
             musicOneSubjectClassPlan.setPaidStudentNum(musicOneSubjectClassPlan.getPaidStudentNum() - 1);
             int updateCount = musicGroupSubjectPlanService.update(musicOneSubjectClassPlan);
-            if(updateCount <= 0){
+            if (updateCount <= 0) {
                 throw new BizException("减去缴费人数失败");
             }
             //发送缴费成功通知(短信 + push)