|  | @@ -94,21 +94,32 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  | -    public Map payChange(Integer id, BigDecimal viewAmount, Boolean isUseBalancePayment) throws Exception {
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    public Map payChange(Integer id, BigDecimal viewAmount, Boolean isUseBalancePayment, Boolean isRepay) throws Exception {
 | 
	
		
			
				|  |  | +        Date date = new Date();
 | 
	
		
			
				|  |  |          SubjectChange subjectChange = subjectChangeDao.get(id);
 | 
	
		
			
				|  |  | +        if (isRepay) {
 | 
	
		
			
				|  |  | +            StudentPaymentOrder studentPaymentOrder = studentPaymentOrderService.get(subjectChange.getOrganId().longValue());
 | 
	
		
			
				|  |  | +            studentPaymentOrder.setStatus(DealStatusEnum.CLOSE);
 | 
	
		
			
				|  |  | +            studentPaymentOrder.setUpdateTime(date);
 | 
	
		
			
				|  |  | +            studentPaymentOrderService.update(studentPaymentOrder);
 | 
	
		
			
				|  |  | +            subjectChange.setStatus(SubjectChangeStatusEnum.WAIT_PAY);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (subjectChange.getStatus().equals(SubjectChangeStatusEnum.CANCELED)) {
 | 
	
		
			
				|  |  | +            throw new BizException("声部更改已取消,请勿缴费");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (subjectChange.getStatus().equals(SubjectChangeStatusEnum.SUCCESSED)) {
 | 
	
		
			
				|  |  | +            throw new BizException("声部更改已缴费,请勿重复缴费");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          MusicGroup musicGroup = musicGroupDao.get(subjectChange.getMusicGroupId());
 | 
	
		
			
				|  |  | -        if (musicGroup.getStatus().equals(MusicGroupStatusEnum.APPLY) && musicGroup.getStatus().equals(MusicGroupStatusEnum.PAY)) {
 | 
	
		
			
				|  |  | -            throw new BizException("乐团当前状态不能缴费");
 | 
	
		
			
				|  |  | +        if (!musicGroup.getStatus().equals(MusicGroupStatusEnum.APPLY) && !musicGroup.getStatus().equals(MusicGroupStatusEnum.PAY)) {
 | 
	
		
			
				|  |  | +            throw new BizException("乐团当前状态不能缴声部更改费用");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          BigDecimal amount = subjectChange.getGoodsMargin().add(subjectChange.getCourseMargin());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        Date date = new Date();
 | 
	
		
			
				|  |  |          studentDao.lockUser(subjectChange.getStudentId());
 | 
	
		
			
				|  |  | -        subjectChange.setUpdateTime(date);
 | 
	
		
			
				|  |  | -        subjectChange.setStatus(SubjectChangeStatusEnum.ING);
 | 
	
		
			
				|  |  | -        if (subjectChangeDao.update(subjectChange) <= 0) {
 | 
	
		
			
				|  |  | -            throw new BizException("下单失败,请重试");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          String orderNo = idGeneratorService.generatorId("payment") + "";
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -129,10 +140,21 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |          studentPaymentOrder.setRoutingOrganId(subjectChange.getOrganId());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          studentPaymentOrderService.insert(studentPaymentOrder);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        subjectChange.setOrderId(studentPaymentOrder.getId().intValue());
 | 
	
		
			
				|  |  | +        subjectChange.setOrderNo(orderNo);
 | 
	
		
			
				|  |  | +        subjectChange.setOrganId(studentPaymentOrder.getOrganId());
 | 
	
		
			
				|  |  | +        subjectChange.setUpdateTime(date);
 | 
	
		
			
				|  |  | +        subjectChange.setStatus(SubjectChangeStatusEnum.ING);
 | 
	
		
			
				|  |  | +        if (subjectChangeDao.update(subjectChange) <= 0) {
 | 
	
		
			
				|  |  | +            throw new BizException("下单失败,请重试");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          studentPaymentOrder.setVersion(0);
 | 
	
		
			
				|  |  |          if (amount.compareTo(viewAmount) != 0) {
 | 
	
		
			
				|  |  |              throw new BizException("价格异常");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          BigDecimal balance = BigDecimal.ZERO;
 | 
	
		
			
				|  |  |          if (isUseBalancePayment != null && isUseBalancePayment && amount.compareTo(BigDecimal.ZERO) > 0) {
 | 
	
		
			
				|  |  |              SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(subjectChange.getStudentId());
 | 
	
	
		
			
				|  | @@ -190,6 +212,10 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  |      public SubjectChange addChange(SubjectChange subjectChange) {
 | 
	
		
			
				|  |  | +        SubjectChange studentWaitPay = subjectChangeDao.getStudentWaitPay(subjectChange.getStudentId(), subjectChange.getMusicGroupId());
 | 
	
		
			
				|  |  | +        if(studentWaitPay != null){
 | 
	
		
			
				|  |  | +            throw new BizException("已有未支付的声部更改,请勿重复创建");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          Date nowDate = new Date();
 | 
	
		
			
				|  |  |          SubjectChange studentOriginal = getStudentOriginal(subjectChange.getStudentId(), subjectChange.getMusicGroupId());
 | 
	
		
			
				|  |  |          subjectChange.setOriginalCost(studentOriginal.getOriginalCost());
 | 
	
	
		
			
				|  | @@ -316,6 +342,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  |      public Boolean orderCallback(StudentPaymentOrder studentPaymentOrder) {
 | 
	
		
			
				|  |  |          Date nowDate = new Date();
 | 
	
		
			
				|  |  |          //更新订单信息
 | 
	
	
		
			
				|  | @@ -330,14 +357,15 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |          if (subjectChange == null) {
 | 
	
		
			
				|  |  |              throw new BizException("声部更换订单不存在");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        if (!subjectChange.getStatus().equals(SubjectChangeStatusEnum.WAIT_PAY)) {
 | 
	
		
			
				|  |  | +        if (!subjectChange.getStatus().equals(SubjectChangeStatusEnum.ING)) {
 | 
	
		
			
				|  |  |              return true;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        Integer userId = studentPaymentOrder.getUserId();
 | 
	
		
			
				|  |  | +        subjectChange.setUpdateTime(nowDate);
 | 
	
		
			
				|  |  | +        subjectChange.setTransNo(studentPaymentOrder.getTransNo());
 | 
	
		
			
				|  |  | +        subjectChange.setMerNo(studentPaymentOrder.getMerNos());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        //更新声部信息报名数量
 | 
	
		
			
				|  |  | -        studentRegistrationService.changeStudentSubject(subjectChange.getStudentId(), subjectChange.getMusicGroupId(), subjectChange.getOriginalSubjectId(), subjectChange.getChangeSubjectId());
 | 
	
		
			
				|  |  | +        Integer userId = studentPaymentOrder.getUserId();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          Map<Integer, String> map = new HashMap<>();
 | 
	
		
			
				|  |  |          map.put(userId, userId.toString());
 | 
	
	
		
			
				|  | @@ -348,10 +376,10 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |              } catch (Exception e) {
 | 
	
		
			
				|  |  |                  logger.error("产品协议生成失败", e);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +            //更新声部信息报名数量
 | 
	
		
			
				|  |  | +            studentRegistrationService.changeStudentSubject(subjectChange.getStudentId(), subjectChange.getMusicGroupId(), subjectChange.getOriginalSubjectId(), subjectChange.getChangeSubjectId());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              subjectChange.setStatus(SubjectChangeStatusEnum.SUCCESSED);
 | 
	
		
			
				|  |  | -            subjectChange.setUpdateTime(nowDate);
 | 
	
		
			
				|  |  | -            subjectChange.setSellTime(nowDate);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              //乐器辅件价差大于0时,有销售金额
 | 
	
		
			
				|  |  |              if (studentPaymentOrder.getActualAmount().compareTo(BigDecimal.ZERO) > 0) {
 | 
	
	
		
			
				|  | @@ -404,7 +432,6 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
 | 
	
		
			
				|  |  |              subjectChange.setStatus(SubjectChangeStatusEnum.WAIT_PAY);
 | 
	
		
			
				|  |  | -            subjectChange.setUpdateTime(nowDate);
 | 
	
		
			
				|  |  |              if (this.update(subjectChange) <= 0) {
 | 
	
		
			
				|  |  |                  throw new BizException("声部更改订单更新失败");
 | 
	
		
			
				|  |  |              }
 |