|
|
@@ -137,6 +137,10 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
|
|
|
@Autowired
|
|
|
private ActivityUserMapperDao activityUserMapperDao;
|
|
|
@Autowired
|
|
|
+ private CloudTeacherOrderDao cloudTeacherOrderDao;
|
|
|
+ @Autowired
|
|
|
+ private StudentService studentService;
|
|
|
+ @Autowired
|
|
|
private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
|
|
|
|
|
|
private static Map<Integer, Map<Integer, List<Integer>>> schoolSubjectTeachersMap;
|
|
|
@@ -3828,6 +3832,203 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
|
|
+ public void activityOrderCallback(StudentPaymentOrder order) {
|
|
|
+ Integer userId = order.getUserId();
|
|
|
+ //更新订单状态
|
|
|
+ int updateCount = studentPaymentOrderService.update(order);
|
|
|
+ if (updateCount <= 0) {
|
|
|
+ throw new BizException("订单更新失败");
|
|
|
+ }
|
|
|
+ StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDao.lockOrder(order.getId());
|
|
|
+
|
|
|
+ if(!studentPaymentOrder.getStatus().equals(DealStatusEnum.ING)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (studentPaymentOrder.getStatus().equals(DealStatusEnum.SUCCESS)) {
|
|
|
+ Date now = new Date();
|
|
|
+ Student student = studentDao.get(order.getUserId());
|
|
|
+ Integer activityId = order.getActivityId();
|
|
|
+ VipGroupActivity activity = vipGroupActivityDao.get(activityId);
|
|
|
+ ActivityUserMapper activityUserMapper = new ActivityUserMapper();
|
|
|
+ activityUserMapper.setActivityId(activityId);
|
|
|
+ activityUserMapper.setUserId(order.getUserId());
|
|
|
+ activityUserMapper.setPaymentOrderId(order.getId());
|
|
|
+
|
|
|
+ if(activity.getActivityType() == 1){
|
|
|
+ //会员立即生效
|
|
|
+ Integer cloudTeacherType;
|
|
|
+ PeriodEnum periodEnum = activity.getPeriodEnum();
|
|
|
+ Integer cloudTime = activity.getMemberTime();
|
|
|
+ CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
|
|
|
+ Date addDate = now;
|
|
|
+ if (student.getMemberRankSettingId() == null || now.after(student.getMembershipEndTime())) {
|
|
|
+ cloudTeacherOrder.setStartTime(now);
|
|
|
+ } else {
|
|
|
+ addDate = student.getMembershipEndTime();
|
|
|
+ cloudTeacherOrder.setStartTime(DateUtil.addDays(addDate, 1));
|
|
|
+ }
|
|
|
+ switch (periodEnum){
|
|
|
+ case DAY:
|
|
|
+ cloudTeacherOrder.setEndTime(DateUtil.addDays(addDate, cloudTime));
|
|
|
+ cloudTeacherType = 1;
|
|
|
+ break;
|
|
|
+ case MONTH:
|
|
|
+ cloudTeacherType = 2;
|
|
|
+ cloudTeacherOrder.setEndTime(DateUtil.addMonths(addDate, cloudTime));
|
|
|
+ break;
|
|
|
+ case QUARTERLY:
|
|
|
+ cloudTeacherType = 2;
|
|
|
+ cloudTime = cloudTime * 3;
|
|
|
+ cloudTeacherOrder.setEndTime(DateUtil.addMonths(addDate, cloudTime * 3));
|
|
|
+ break;
|
|
|
+ case YEAR_HALF:
|
|
|
+ cloudTime = cloudTime * 6;
|
|
|
+ cloudTeacherOrder.setEndTime(DateUtil.addMonths(addDate, cloudTime * 6));
|
|
|
+ cloudTeacherType = 2;
|
|
|
+ break;
|
|
|
+ case YEAR:
|
|
|
+ cloudTeacherOrder.setEndTime(DateUtil.addYears(addDate, cloudTime));
|
|
|
+ cloudTeacherType = 3;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new BizException("不支持的周期类型");
|
|
|
+ }
|
|
|
+ cloudTeacherOrder.setRemark("营销活动购买会员");
|
|
|
+ cloudTeacherOrder.setStatus(2);
|
|
|
+ cloudTeacherOrder.setOrderId(order.getId());
|
|
|
+ cloudTeacherOrder.setType(cloudTeacherType);
|
|
|
+ cloudTeacherOrder.setAmount(order.getActualAmount());
|
|
|
+ cloudTeacherOrder.setLevel(activity.getMemberRankId());
|
|
|
+ cloudTeacherOrder.setStudentId(userId);
|
|
|
+ cloudTeacherOrder.setOrganId(order.getOrganId());
|
|
|
+ cloudTeacherOrder.setTime(cloudTime);
|
|
|
+ cloudTeacherOrderDao.insert(cloudTeacherOrder);
|
|
|
+ studentService.updateMemberRank(cloudTeacherOrder,periodEnum);
|
|
|
+ activityUserMapper.setMemberFlag(2);
|
|
|
+ activityUserMapper.setMemberOrderId(cloudTeacherOrder.getId());
|
|
|
+ }else {
|
|
|
+ if(activity.getCourseType().equals("VIP")){
|
|
|
+ activityUserMapper.setVipFlag(1);
|
|
|
+ }else {
|
|
|
+ activityUserMapper.setPracticeFlag(1);
|
|
|
+ }
|
|
|
+ if(activity.isPayToBalance()){
|
|
|
+ boolean appendCourseBalance = sysUserCashAccountService.appendCourseBalance(userId, studentPaymentOrder.getExpectAmount().subtract(studentPaymentOrder.getCouponRemitFee()), PlatformCashAccountDetailTypeEnum.RECHARGE, "通用营销活动购买");
|
|
|
+ if (!appendCourseBalance) {
|
|
|
+ throw new BizException("增加用户课程余额失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(activity.getGiveMemberTime() > 0){
|
|
|
+ //会员立即生效
|
|
|
+ Integer cloudTeacherType;
|
|
|
+ PeriodEnum periodEnum = activity.getGivePeriodEnum();
|
|
|
+ Integer cloudTime = activity.getGiveMemberTime();
|
|
|
+ CloudTeacherOrder cloudTeacherOrder = new CloudTeacherOrder();
|
|
|
+ Date addDate = now;
|
|
|
+ if (student.getMemberRankSettingId() == null || now.after(student.getMembershipEndTime())) {
|
|
|
+ cloudTeacherOrder.setStartTime(now);
|
|
|
+ } else {
|
|
|
+ addDate = student.getMembershipEndTime();
|
|
|
+ cloudTeacherOrder.setStartTime(DateUtil.addDays(addDate, 1));
|
|
|
+ }
|
|
|
+ switch (periodEnum){
|
|
|
+ case DAY:
|
|
|
+ cloudTeacherOrder.setEndTime(DateUtil.addDays(addDate, cloudTime));
|
|
|
+ cloudTeacherType = 1;
|
|
|
+ break;
|
|
|
+ case MONTH:
|
|
|
+ cloudTeacherType = 2;
|
|
|
+ cloudTeacherOrder.setEndTime(DateUtil.addMonths(addDate, cloudTime));
|
|
|
+ break;
|
|
|
+ case QUARTERLY:
|
|
|
+ cloudTeacherType = 2;
|
|
|
+ cloudTime = cloudTime * 3;
|
|
|
+ cloudTeacherOrder.setEndTime(DateUtil.addMonths(addDate, cloudTime * 3));
|
|
|
+ break;
|
|
|
+ case YEAR_HALF:
|
|
|
+ cloudTime = cloudTime * 6;
|
|
|
+ cloudTeacherOrder.setEndTime(DateUtil.addMonths(addDate, cloudTime * 6));
|
|
|
+ cloudTeacherType = 2;
|
|
|
+ break;
|
|
|
+ case YEAR:
|
|
|
+ cloudTeacherOrder.setEndTime(DateUtil.addYears(addDate, cloudTime));
|
|
|
+ cloudTeacherType = 3;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new BizException("不支持的周期类型");
|
|
|
+ }
|
|
|
+ cloudTeacherOrder.setRemark("营销活动赠送会员");
|
|
|
+ cloudTeacherOrder.setStatus(2);
|
|
|
+ cloudTeacherOrder.setOrderId(order.getId());
|
|
|
+ cloudTeacherOrder.setType(cloudTeacherType);
|
|
|
+ cloudTeacherOrder.setAmount(BigDecimal.ZERO);
|
|
|
+ cloudTeacherOrder.setLevel(activity.getGiveMemberRankId());
|
|
|
+ cloudTeacherOrder.setStudentId(userId);
|
|
|
+ cloudTeacherOrder.setOrganId(order.getOrganId());
|
|
|
+ cloudTeacherOrder.setTime(cloudTime);
|
|
|
+ cloudTeacherOrderDao.insert(cloudTeacherOrder);
|
|
|
+ studentService.updateMemberRank(cloudTeacherOrder,periodEnum);
|
|
|
+ activityUserMapper.setGiveMemberFlag(2);
|
|
|
+ activityUserMapper.setGiveMemberOrderId(cloudTeacherOrder.getId());
|
|
|
+ }else if(activity.getGiveCourseNum() > 0){
|
|
|
+ if(activity.getGiveCourseType().equals("VIP")){
|
|
|
+ activityUserMapper.setGiveVipFlag(1);
|
|
|
+ }else {
|
|
|
+ activityUserMapper.setGivePracticeFlag(1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ activityUserMapperDao.insert(activityUserMapper);
|
|
|
+ SysUserCashAccount sysUserCashAccount = sysUserCashAccountService.get(userId);
|
|
|
+ //插入缴费明细
|
|
|
+ //收入
|
|
|
+ SysUserCashAccountDetail sysUserIncomeCashAccountDetail = new SysUserCashAccountDetail();
|
|
|
+ sysUserIncomeCashAccountDetail.setUserId(order.getUserId());
|
|
|
+ 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(order.getUserId());
|
|
|
+ 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) {
|
|
|
+ sysUserIncomeCashAccountDetail.setComAmount(studentPaymentOrder.getComAmount().negate());
|
|
|
+ }
|
|
|
+ if (studentPaymentOrder.getPerAmount() != null) {
|
|
|
+ sysUserExpendCashAccountDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate());
|
|
|
+ }
|
|
|
+
|
|
|
+ sysUserCashAccountDetailService.insert(sysUserIncomeCashAccountDetail);
|
|
|
+ sysUserCashAccountDetailService.insert(sysUserExpendCashAccountDetail);
|
|
|
+
|
|
|
+// try {
|
|
|
+// contractService.transferPracticeCoursesContract(order.getUserId(), classGroup.getTotalClassTimes(), practiceGroup.getCoursesStartDate(), practiceGroup.getCoursesExpireDate(), order.getExpectAmount());
|
|
|
+// } catch (Exception e) {
|
|
|
+// LOGGER.error(MessageFormatter.arrayFormat("网管课[{}]购买协议错误:{}", order.getMusicGroupId(), e.getMessage()), e);
|
|
|
+// }
|
|
|
+ studentDao.updateStudentServiceTag(userId, null, YesOrNoEnum.YES.getCode());
|
|
|
+ }
|
|
|
+ if (studentPaymentOrder.getStatus().equals(DealStatusEnum.FAILED)) {
|
|
|
+ if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
+ sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "报名缴费失败");
|
|
|
+ }
|
|
|
+ sysCouponCodeService.quit(studentPaymentOrder.getCouponCodeId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
public List<PracticeCourseDto> findUserHistoryBuyPracticeGroups(Integer userId, Long groupId, PracticeGroupType type) {
|
|
|
List<PracticeCourseDto> userPracticeGroups;
|
|
|
if (Objects.nonNull(groupId)) {
|
|
|
@@ -4904,21 +5105,20 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
|
|
|
throw new BizException("当前活动最多课购买{}次,感谢您的参与",studentMaxUsedTimes);
|
|
|
}
|
|
|
}
|
|
|
- OrderTypeEnum orderTypeEnum;
|
|
|
+ GroupType groupType;
|
|
|
if(activity.getActivityType() == 1){
|
|
|
- orderTypeEnum = OrderTypeEnum.MEMBER;
|
|
|
+ groupType = GroupType.MEMBER;
|
|
|
}else {
|
|
|
if(activity.getCourseType().equals("VIP")){
|
|
|
- orderTypeEnum = OrderTypeEnum.SMALL_CLASS_TO_BUY;
|
|
|
+ groupType = GroupType.VIP;
|
|
|
}else {
|
|
|
- orderTypeEnum = OrderTypeEnum.PRACTICE_GROUP_BUY;
|
|
|
+ groupType = GroupType.PRACTICE;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//判断用户是否已存在订单
|
|
|
// 判断是否存在支付中的记录
|
|
|
- List<StudentPaymentOrder> list = studentPaymentOrderService
|
|
|
- .queryByCondition(GroupType.ACTIVITY,null,student.getUserId(),DealStatusEnum.ING,orderTypeEnum);
|
|
|
+ List<StudentPaymentOrder> list = studentPaymentOrderService.queryByCondition(groupType,null,student.getUserId(),DealStatusEnum.ING,OrderTypeEnum.ACTIVITY);
|
|
|
if (list.size() > 0) {
|
|
|
StudentPaymentOrder order = list.get(0);
|
|
|
// 查询订单状态
|
|
|
@@ -4942,20 +5142,8 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
|
|
|
return BaseController.failed(HttpStatus.CONTINUE,"您有待支付的订单");
|
|
|
}
|
|
|
}
|
|
|
- BigDecimal activityFee = BigDecimal.ZERO;
|
|
|
- GroupType groupType = GroupType.MEMBER;
|
|
|
+ BigDecimal activityFee = activity.getMarketPrice();
|
|
|
//计算订单金额
|
|
|
- switch (orderTypeEnum) {
|
|
|
- case MEMBER:
|
|
|
- groupType = GroupType.MEMBER;
|
|
|
- break;
|
|
|
- case SMALL_CLASS_TO_BUY:
|
|
|
- groupType = GroupType.VIP;
|
|
|
- break;
|
|
|
- case PRACTICE_GROUP_BUY:
|
|
|
- groupType = GroupType.PRACTICE;
|
|
|
- break;
|
|
|
- }
|
|
|
StudentPaymentOrder studentPaymentOrder = sysCouponCodeService.use(practiceGroupBuyParams.getCouponIdList(), activityFee, true);
|
|
|
activityFee = studentPaymentOrder.getActualAmount();
|
|
|
if(practiceGroupBuyParams.getAmount().compareTo(activityFee) != 0){
|
|
|
@@ -4986,7 +5174,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
|
|
|
studentPaymentOrder.setUserId(student.getUserId());
|
|
|
studentPaymentOrder.setGroupType(groupType);
|
|
|
studentPaymentOrder.setOrderNo(orderNo);
|
|
|
- studentPaymentOrder.setType(orderTypeEnum);
|
|
|
+ studentPaymentOrder.setType(OrderTypeEnum.ACTIVITY);
|
|
|
studentPaymentOrder.setStatus(DealStatusEnum.ING);
|
|
|
studentPaymentOrder.setRemitFee(BigDecimal.ZERO);
|
|
|
studentPaymentOrder.setCourseRemitFee(BigDecimal.ZERO);
|