ソースを参照

Merge branch 'online1' of http://git.dayaedu.com/yonge/mec into practice_1129

yonge 3 年 前
コミット
f4a23e7c9e

+ 152 - 141
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -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().add(order.getBalancePaymentAmount()),
+						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);