| 
					
				 | 
			
			
				@@ -2802,157 +2802,168 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		ClassGroup classGroup = classGroupDao.get(order.getClassGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if(studentPaymentOrder.getStatus() == DealStatusEnum.SUCCESS){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			VipGroup vipGroup = vipGroupDao.get(Long.parseLong(classGroup.getMusicGroupId())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//活动赠送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Integer activityUserMapperId = studentPaymentOrderService.activityGive(vipGroup.getVipGroupActivityId(),studentPaymentOrder, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					vipGroup.getId(),null,vipGroup.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//生成班级学员关联 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			ClassGroupStudentMapper classGroupStudentMapper = new ClassGroupStudentMapper(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			classGroupStudentMapper.setMusicGroupId(classGroup.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			classGroupStudentMapper.setClassGroupId(classGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			classGroupStudentMapper.setUserId(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			classGroupStudentMapper.setCreateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			classGroupStudentMapper.setGroupType(GroupType.VIP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			classGroupStudentMapperDao.insert(classGroupStudentMapper); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if(vipGroup.getStatus() == VipGroupStatusEnum.DELETE || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					vipGroup.getStatus() == VipGroupStatusEnum.CANCEL || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					vipGroup.getStatus() == VipGroupStatusEnum.PAUSE){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				//增加用户余额 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserCashAccountService.updateBalance(order.getUserId(), order.getActualAmount(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						PlatformCashAccountDetailTypeEnum.REFUNDS, "课程组关闭退还课程余额,订单号:" + order.getOrderNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				//退还优惠券 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysCouponCodeService.quit(order.getCouponCodeId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				//活动赠送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				Integer activityUserMapperId = studentPaymentOrderService.activityGive(vipGroup.getVipGroupActivityId(),studentPaymentOrder, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						vipGroup.getId(),null,vipGroup.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//获取班级实际人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Integer studentNum = classGroupStudentMapperDao.countGroupNormalStudentNum(VIP, classGroup.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//课程组人数已满,变更状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(studentNum.equals(classGroup.getExpectStudentNum())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				vipGroup.setStatus(VipGroupStatusEnum.PROGRESS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				classGroup.setDelFlag(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroupCategory(vipGroup.getVipGroupCategoryId(), vipGroup.getOrganId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				//生成班级学员关联 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				ClassGroupStudentMapper classGroupStudentMapper = new ClassGroupStudentMapper(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				classGroupStudentMapper.setMusicGroupId(classGroup.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				classGroupStudentMapper.setClassGroupId(classGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				classGroupStudentMapper.setUserId(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				classGroupStudentMapper.setCreateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				classGroupStudentMapper.setGroupType(GroupType.VIP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				classGroupStudentMapperDao.insert(classGroupStudentMapper); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				//获取班级实际人数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				Integer studentNum = classGroupStudentMapperDao.countGroupNormalStudentNum(VIP, classGroup.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				//课程组人数已满,变更状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if(studentNum.equals(classGroup.getExpectStudentNum())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					vipGroup.setStatus(VipGroupStatusEnum.PROGRESS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					classGroup.setDelFlag(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					VipGroupDefaultClassesUnitPrice vipGroupDefaultClassesUnitPrice = vipGroupDefaultClassesUnitPriceDao.getByVipGroupCategory(vipGroup.getVipGroupCategoryId(), vipGroup.getOrganId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					//生成课表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					List<CourseSchedule> courseSchedules = JSON.parseArray(vipGroup.getCourseSchedulesJson(),CourseSchedule.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					classGroup.setTotalClassTimes(courseSchedules.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					courseScheduleService.batchAddCourseSchedule(courseSchedules); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					//考勤信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					List<TeacherAttendance> teacherAttendances = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					//创建课酬信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					Map<String, BigDecimal> stringBigDecimalMap = countVipGroupPredictFee1(vipGroup, vipGroup.getUserId(), null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					for (CourseSchedule courseSchedule : courseSchedules) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						//创建教师课程薪水记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						courseScheduleTeacherSalary.setGroupType(courseSchedule.getGroupType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						courseScheduleTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						courseScheduleTeacherSalary.setUserId(courseSchedule.getActualTeacherId().intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						courseScheduleTeacherSalary.setClassGroupId(courseSchedule.getClassGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						courseScheduleTeacherSalary.setExpectSalary(stringBigDecimalMap.get("offlineTeacherSalary")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						courseScheduleTeacherSalary.setActualSalary(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						TeacherAttendance teacherAttendance = new TeacherAttendance(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						teacherAttendance.setGroupType(courseSchedule.getGroupType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						teacherAttendance.setClassGroupId(courseSchedule.getClassGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						teacherAttendance.setMusicGroupId(courseSchedule.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						teacherAttendance.setTeacherId(courseSchedule.getActualTeacherId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						teacherAttendance.setCourseScheduleId(courseSchedule.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						teacherAttendances.add(teacherAttendance); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					courseScheduleTeacherSalaryDao.batchInsert(courseScheduleTeacherSalaries); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					teacherAttendanceDao.batchInsert(teacherAttendances); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//生成课表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				List<CourseSchedule> courseSchedules = JSON.parseArray(vipGroup.getCourseSchedulesJson(),CourseSchedule.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				classGroup.setTotalClassTimes(courseSchedules.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					//群聊数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					Map<Integer,String> userRoleMap = new HashMap<Integer, String>(5); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if(Objects.nonNull(vipGroup.getEducationalTeacherId())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						userRoleMap.put(vipGroup.getEducationalTeacherId(),"乐团主管"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					userRoleMap.put(vipGroup.getUserId(),"指导老师"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					//生成课程学员关联 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					List<ClassGroupStudentMapper> classGroupStudents = classGroupStudentMapperDao.findByClassGroup(classGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					List<Integer> studentIdList = classGroupStudents.stream().map(e -> e.getUserId()).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					for (ClassGroupStudentMapper classGroupStudent : classGroupStudents) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						StudentPaymentOrder successOrder = studentPaymentOrderDao.findByStudentVipGroup(vipGroup.getId(), classGroupStudent.getUserId(), "SUCCESS"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						//实际支付金额,去除优惠券 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						BigDecimal actualPrice = successOrder.getExpectAmount(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						BigDecimal divide = actualPrice.divide(new BigDecimal(courseSchedules.size()), ROUND_DOWN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						BigDecimal firstAmount = actualPrice.subtract(divide.multiply(new BigDecimal(courseSchedules.size()))).add(divide); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						for (int i = 0; i < courseSchedules.size(); i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							CourseSchedule courseSchedule = courseSchedules.get(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							courseScheduleStudentPayment.setUserId(classGroupStudent.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							courseScheduleStudentPayment.setGroupType(courseSchedule.getGroupType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							courseScheduleStudentPayment.setMusicGroupId(courseSchedule.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							courseScheduleStudentPayment.setClassGroupId(courseSchedule.getClassGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if (i == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								courseScheduleStudentPayment.setExpectPrice(firstAmount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							}else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								courseScheduleStudentPayment.setExpectPrice(divide); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							courseScheduleStudentPayment.setOriginalPrice(TeachModeEnum.ONLINE.equals(courseSchedule.getTeachMode())?vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice():vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							courseScheduleStudentPayment.setActualPrice(courseScheduleStudentPayment.getExpectPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							courseScheduleStudentPayments.add(courseScheduleStudentPayment); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						userRoleMap.put(classGroupStudent.getUserId(),null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					studentDao.updateStudentServiceTag(null, studentIdList, YesOrNoEnum.YES.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				courseScheduleService.batchAddCourseSchedule(courseSchedules); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//				courseScheduleService.checkNewCourseSchedules(courseSchedules, false,false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//考勤信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				List<TeacherAttendance> teacherAttendances = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//创建课酬信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				Map<String, BigDecimal> stringBigDecimalMap = countVipGroupPredictFee1(vipGroup, vipGroup.getUserId(), null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				for (CourseSchedule courseSchedule : courseSchedules) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					//创建教师课程薪水记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					courseScheduleTeacherSalary.setGroupType(courseSchedule.getGroupType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					courseScheduleTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					courseScheduleTeacherSalary.setUserId(courseSchedule.getActualTeacherId().intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					courseScheduleTeacherSalary.setClassGroupId(courseSchedule.getClassGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					courseScheduleTeacherSalary.setExpectSalary(stringBigDecimalMap.get("offlineTeacherSalary")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					courseScheduleTeacherSalary.setActualSalary(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					TeacherAttendance teacherAttendance = new TeacherAttendance(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					teacherAttendance.setGroupType(courseSchedule.getGroupType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					teacherAttendance.setClassGroupId(courseSchedule.getClassGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					teacherAttendance.setMusicGroupId(courseSchedule.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					teacherAttendance.setTeacherId(courseSchedule.getActualTeacherId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					teacherAttendance.setCourseScheduleId(courseSchedule.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					teacherAttendances.add(teacherAttendance); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					imGroupService.create(classGroup.getId().longValue(), null, classGroup.getName(), classGroup.getName(), vipGroup.getName(), null, null, GroupType.VIP.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					imUserFriendService.refreshGroupImUserFriend(classGroup.getMusicGroupId(),classGroup.getGroupType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				courseScheduleTeacherSalaryDao.batchInsert(courseScheduleTeacherSalaries); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				teacherAttendanceDao.batchInsert(teacherAttendances); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//群聊数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				Map<Integer,String> userRoleMap = new HashMap<Integer, String>(5); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(Objects.nonNull(vipGroup.getEducationalTeacherId())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					userRoleMap.put(vipGroup.getEducationalTeacherId(),"乐团主管"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				SysUserCashAccount sysUserCashAccount = sysUserCashAccountService.get(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				//插入缴费明细 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				//收入 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				SysUserCashAccountDetail sysUserIncomeCashAccountDetail = new SysUserCashAccountDetail(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserIncomeCashAccountDetail.setUserId(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserIncomeCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.RECHARGE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserIncomeCashAccountDetail.setStatus(DealStatusEnum.SUCCESS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserIncomeCashAccountDetail.setAmount(order.getActualAmount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserIncomeCashAccountDetail.setBalance(sysUserCashAccount.getBalance().add(order.getActualAmount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserIncomeCashAccountDetail.setAttribute(order.getTransNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserIncomeCashAccountDetail.setChannel(studentPaymentOrder.getPaymentChannel()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserIncomeCashAccountDetail.setComAmount(studentPaymentOrder.getComAmount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserIncomeCashAccountDetail.setPerAmount(studentPaymentOrder.getPerAmount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				//支出 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				SysUserCashAccountDetail sysUserExpendCashAccountDetail = new SysUserCashAccountDetail(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserExpendCashAccountDetail.setUserId(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserExpendCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.PAY_FEE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserExpendCashAccountDetail.setStatus(DealStatusEnum.SUCCESS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserExpendCashAccountDetail.setAmount(order.getActualAmount().negate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserExpendCashAccountDetail.setBalance(sysUserCashAccount.getBalance()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserExpendCashAccountDetail.setAttribute(order.getTransNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserExpendCashAccountDetail.setChannel(studentPaymentOrder.getPaymentChannel()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if(studentPaymentOrder.getComAmount() != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					sysUserExpendCashAccountDetail.setComAmount(studentPaymentOrder.getComAmount().negate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				userRoleMap.put(vipGroup.getUserId(),"指导老师"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//生成课程学员关联 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				List<ClassGroupStudentMapper> classGroupStudents = classGroupStudentMapperDao.findByClassGroup(classGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				List<Integer> studentIdList = classGroupStudents.stream().map(e -> e.getUserId()).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				for (ClassGroupStudentMapper classGroupStudent : classGroupStudents) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					StudentPaymentOrder successOrder = studentPaymentOrderDao.findByStudentVipGroup(vipGroup.getId(), classGroupStudent.getUserId(), "SUCCESS"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					//实际支付金额,去除优惠券 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					BigDecimal actualPrice = successOrder.getExpectAmount(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					BigDecimal divide = actualPrice.divide(new BigDecimal(courseSchedules.size()), ROUND_DOWN); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					BigDecimal firstAmount = actualPrice.subtract(divide.multiply(new BigDecimal(courseSchedules.size()))).add(divide); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					for (int i = 0; i < courseSchedules.size(); i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						CourseSchedule courseSchedule = courseSchedules.get(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						courseScheduleStudentPayment.setUserId(classGroupStudent.getUserId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						courseScheduleStudentPayment.setGroupType(courseSchedule.getGroupType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						courseScheduleStudentPayment.setMusicGroupId(courseSchedule.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						courseScheduleStudentPayment.setClassGroupId(courseSchedule.getClassGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						if (i == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							courseScheduleStudentPayment.setExpectPrice(firstAmount); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						}else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							courseScheduleStudentPayment.setExpectPrice(divide); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						courseScheduleStudentPayment.setOriginalPrice(TeachModeEnum.ONLINE.equals(courseSchedule.getTeachMode())?vipGroupDefaultClassesUnitPrice.getOnlineClassesUnitPrice():vipGroupDefaultClassesUnitPrice.getOfflineClassesUnitPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						courseScheduleStudentPayment.setActualPrice(courseScheduleStudentPayment.getExpectPrice()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						courseScheduleStudentPayments.add(courseScheduleStudentPayment); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					userRoleMap.put(classGroupStudent.getUserId(),null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if(studentPaymentOrder.getPerAmount() != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					sysUserExpendCashAccountDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				studentDao.updateStudentServiceTag(null, studentIdList, YesOrNoEnum.YES.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//				courseScheduleService.checkNewCourseSchedules(courseSchedules, false,false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserCashAccountDetailService.insert(sysUserIncomeCashAccountDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysUserCashAccountDetailService.insert(sysUserExpendCashAccountDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				imGroupService.create(classGroup.getId().longValue(), null, classGroup.getName(), classGroup.getName(), vipGroup.getName(), null, null, GroupType.VIP.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				imUserFriendService.refreshGroupImUserFriend(classGroup.getMusicGroupId(),classGroup.getGroupType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			SysUserCashAccount sysUserCashAccount = sysUserCashAccountService.get(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//插入缴费明细 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//收入 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			SysUserCashAccountDetail sysUserIncomeCashAccountDetail = new SysUserCashAccountDetail(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysUserIncomeCashAccountDetail.setUserId(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysUserIncomeCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.RECHARGE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysUserIncomeCashAccountDetail.setStatus(DealStatusEnum.SUCCESS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysUserIncomeCashAccountDetail.setAmount(order.getActualAmount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysUserIncomeCashAccountDetail.setBalance(sysUserCashAccount.getBalance().add(order.getActualAmount())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysUserIncomeCashAccountDetail.setAttribute(order.getTransNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysUserIncomeCashAccountDetail.setChannel(studentPaymentOrder.getPaymentChannel()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysUserIncomeCashAccountDetail.setComAmount(studentPaymentOrder.getComAmount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysUserIncomeCashAccountDetail.setPerAmount(studentPaymentOrder.getPerAmount()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//支出 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			SysUserCashAccountDetail sysUserExpendCashAccountDetail = new SysUserCashAccountDetail(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysUserExpendCashAccountDetail.setUserId(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysUserExpendCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.PAY_FEE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysUserExpendCashAccountDetail.setStatus(DealStatusEnum.SUCCESS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysUserExpendCashAccountDetail.setAmount(order.getActualAmount().negate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysUserExpendCashAccountDetail.setBalance(sysUserCashAccount.getBalance()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysUserExpendCashAccountDetail.setAttribute(order.getTransNo()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysUserExpendCashAccountDetail.setChannel(studentPaymentOrder.getPaymentChannel()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(studentPaymentOrder.getComAmount() != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				sysUserExpendCashAccountDetail.setComAmount(studentPaymentOrder.getComAmount().negate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(studentPaymentOrder.getPerAmount() != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				sysUserExpendCashAccountDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysUserCashAccountDetailService.insert(sysUserIncomeCashAccountDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysUserCashAccountDetailService.insert(sysUserExpendCashAccountDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				Map<Integer,String> map = new HashMap<>(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				map.put(userId,userId.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_VIP_BUY, map, null, 0, "2","STUDENT", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						vipGroup.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Map<Integer,String> map = new HashMap<>(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			map.put(userId,userId.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_VIP_BUY, map, null, 0, "2","STUDENT", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					vipGroup.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//更新所属分部列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			List<Integer> organIds = classGroupDao.findStudentOrganIdsByClassGroup(classGroup.getId().longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			organIds.add(vipGroup.getOrganId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			HashSet<Integer> hashSet = new HashSet<>(organIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			String organIdsString = StringUtils.join(hashSet, ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			vipGroup.setOrganIdList(organIdsString); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			vipGroupDao.update(vipGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				contractService.transferVipGroupCoursesContract(userId,vipGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				LOGGER.error(MessageFormatter.arrayFormat("小课[{}]购买协议错误:{}", vipGroup.getId(), e.getMessage()), e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				//更新所属分部列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				List<Integer> organIds = classGroupDao.findStudentOrganIdsByClassGroup(classGroup.getId().longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				organIds.add(vipGroup.getOrganId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				HashSet<Integer> hashSet = new HashSet<>(organIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				String organIdsString = StringUtils.join(hashSet, ","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				vipGroup.setOrganIdList(organIdsString); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				vipGroupDao.update(vipGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					contractService.transferVipGroupCoursesContract(userId,vipGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					LOGGER.error(MessageFormatter.arrayFormat("小课[{}]购买协议错误:{}", vipGroup.getId(), e.getMessage()), e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			classGroup.setStudentNum(classGroup.getStudentNum() - 1); 
			 |