| 
					
				 | 
			
			
				@@ -45,6 +45,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	private VipGroupDefaultClassesUnitPriceDao vipGroupDefaultClassesUnitPriceDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	private VipGroupActivityDao vipGroupActivityDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private VipGroupCategoryDao vipGroupCategoryDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private SysUserFeignService sysUserFeignService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -53,6 +55,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private StudentPaymentOrderDao studentPaymentOrderDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private StudentVipGroupPaymentDao studentVipGroupPaymentDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private StudentApplyRefundsDao studentApplyRefundsDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private SysUserCashAccountDao sysUserCashAccountDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private SysUserCashAccountDetailDao sysUserCashAccountDetailDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	public BaseDAO<Long, VipGroup> getDAO() { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -78,7 +86,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupActivityId().intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		VipGroupApplyBaseInfoDto vipGroupApplyBaseInfoDto=vipGroup.getVipGroupApplyBaseInfo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		vipGroupDao.insert(vipGroupApplyBaseInfoDto); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupApplyBaseInfo().getVipGroupCategoryId().intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		ClassGroup classGroup=new ClassGroup(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		classGroup.setExpectStudentNum(vipGroupCategory.getStudentNum()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		classGroup.setName(vipGroupApplyBaseInfoDto.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		classGroup.setExpectStudentNum(vipGroupApplyBaseInfoDto.getExpectStudentNum()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		classGroup.setType(ClassGroupTypeEnum.VIP); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -207,14 +217,13 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             throw new BizException("该课程已结束报名!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         VipGroupActivity vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         StudentPaymentOrder studentPaymentOrder=new StudentPaymentOrder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         studentPaymentOrder.setUserId(user.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String orderNo=StringUtils.join(new String[]{user.getId().toString(),String.valueOf(System.currentTimeMillis())}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         studentPaymentOrder.setOrderNo(orderNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         studentPaymentOrder.setType(OrderTypeEnum.SMALL_CLASS_TO_BUY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        studentPaymentOrder.setExpectAmount(countVipGroupPredictFee(vipGroup)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        studentPaymentOrder.setExpectAmount(countVipGroupPredictFee(vipGroup,vipGroup.getOnlineClassesUnitPrice(),vipGroup.getOfflineClassesUnitPrice())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(vipGroupActivity.getType()==VipGroupActivityTypeEnum.DISCOUNT){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount().multiply(new BigDecimal(vipGroupActivity.getAttribute1()))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }else{ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -227,10 +236,21 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         StudentVipGroupPayment studentVipGroupPayment=new StudentVipGroupPayment(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         studentVipGroupPayment.setUserId(user.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        studentPaymentOrder.setMusicGroupId(vipGroup.getId().toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        studentPaymentOrder.setClassGroupId(vipGroupClassGroupMapper.getClassGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		studentVipGroupPayment.setVipGroupId(vipGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		studentVipGroupPayment.setClassGroupId(vipGroupClassGroupMapper.getClassGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         studentVipGroupPayment.setStudentPaymentOrderId(studentPaymentOrder.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         studentVipGroupPaymentDao.insert(studentVipGroupPayment); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		ClassGroup classGroup = classGroupDao.get(vipGroupClassGroupMapper.getClassGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		int classStudents = classGroupDao.countClassStudent(vipGroupClassGroupMapper.getClassGroupId().longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(classGroup.getExpectStudentNum()==classStudents){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			vipGroup.setStatus(VipGroupStatusEnum.FINISH); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			vipGroupDao.update(vipGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		classGroup.setStudentNum(classGroup.getStudentNum()+1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		classGroupDao.update(classGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		//生成回调地址 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -238,15 +258,72 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @Date: 2019/10/2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * 计算VIP课程预计收费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private BigDecimal countVipGroupPredictFee(VipGroup vipGroup){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroup(vipGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private BigDecimal countVipGroupPredictFee(VipGroup vipGroup,BigDecimal onlineClassesUnitPrice,BigDecimal offlineClassesUnitPrice){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         BigDecimal offlineClassNum=new BigDecimal(vipGroup.getOfflineClassesNum()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         BigDecimal onlineClassNum=new BigDecimal(vipGroup.getOnlineClassesNum()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BigDecimal onlineVipGroupCharge = vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice().multiply(onlineClassNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BigDecimal offlineVipGroupCharge = vipGroupDefaultClassesUnitPrice. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                getOfflineClassesUnitPrice(). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                multiply(offlineClassNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal onlineVipGroupCharge = onlineClassesUnitPrice.multiply(onlineClassNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal offlineVipGroupCharge = offlineClassesUnitPrice.multiply(offlineClassNum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return onlineVipGroupCharge.add(offlineVipGroupCharge); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void orderCallback(String callbackParams) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		根据回调信息调整订单状态及vip课程状态等相关信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void applyRefund(Long vipGroupId,Long studentId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    	if(null==studentId){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    		studentId=sysUserFeignService.queryUserInfo().getId().longValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		StudentApplyRefunds studentApplyRefunds=new StudentApplyRefunds(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDao.findByStudentVipGroup(vipGroupId,studentId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		VipGroup vipGroup=vipGroupDao.get(vipGroupId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		//剩余课时数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Map surplusClassTimes=MapUtil.convertMybatisMap(vipGroupDao.countSurplusClassTimes(vipGroupId)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		studentApplyRefunds.setExpectAmount(countVipGroupPredictFee(vipGroup, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				new BigDecimal(surplusClassTimes.get(TeachModeEnum.ONLINE.getMsg()).toString()), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				new BigDecimal(surplusClassTimes.get(TeachModeEnum.OFFLINE.getMsg()).toString()))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		studentApplyRefunds.setStatus(AuditStatusEnum.ING); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		String orderNo=StringUtils.join(new String[]{studentId.toString(),String.valueOf(System.currentTimeMillis())}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		studentApplyRefunds.setOrderNo(orderNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		studentApplyRefunds.setOrigPaymentOrderId(studentPaymentOrder.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		studentApplyRefunds.setUserId(studentId.intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		studentApplyRefundsDao.insert(studentApplyRefunds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void applyRefundAudit(StudentApplyRefunds studentApplyRefunds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		StudentApplyRefunds oldStudentApplyRefunds=studentApplyRefundsDao.get(studentApplyRefunds.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		oldStudentApplyRefunds.setStatus(studentApplyRefunds.getStatus()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(null==studentApplyRefunds.getActualAmount()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			oldStudentApplyRefunds.setActualAmount(oldStudentApplyRefunds.getExpectAmount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			oldStudentApplyRefunds.setActualAmount(studentApplyRefunds.getActualAmount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		oldStudentApplyRefunds.setRemark(studentApplyRefunds.getRemark()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		studentApplyRefundsDao.update(oldStudentApplyRefunds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		switch (studentApplyRefunds.getStatus()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			case PASS: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserCashAccountDao.incrAccount(oldStudentApplyRefunds.getUserId(),oldStudentApplyRefunds.getActualAmount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				SysUserCashAccount sysUserCashAccount = sysUserCashAccountDao.get(studentApplyRefunds.getId().intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				SysUserCashAccountDetail sysUserCashAccountDetail=new SysUserCashAccountDetail(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserCashAccountDetail.setUserId(studentApplyRefunds.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.REFUNDS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserCashAccountDetail.setStatus(DealStatusEnum.SUCCESS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserCashAccountDetail.setAmount(oldStudentApplyRefunds.getActualAmount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserCashAccountDetail.setBalance(sysUserCashAccount.getBalance()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserCashAccountDetail.setAttribute(oldStudentApplyRefunds.getId().toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserCashAccountDetailDao.insert(sysUserCashAccountDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			case REJECT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				throw new BizException("审核状态错误!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |