|  | @@ -17,6 +17,7 @@ import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.common.constant.SysConfigConstant;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.common.entity.HttpResponseResult;
 | 
	
		
			
				|  |  | +import com.yonge.cooleshow.common.enums.ActivityResourceEnum;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.common.enums.CacheNameEnum;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.common.enums.PostStatusEnum;
 | 
	
		
			
				|  |  |  import com.yonge.cooleshow.common.service.IdGeneratorService;
 | 
	
	
		
			
				|  | @@ -85,6 +86,12 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 | 
	
		
			
				|  |  |      private PaymentProperties paymentProperties;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  | +    private ActivityEvaluationRecordService activityEvaluationRecordService;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private ActivityRegistrationService activityRegistrationService;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  |      private ActivityPlanService activityPlanService;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      //验证订单是否可以下单,获取订单金额信息
 | 
	
	
		
			
				|  | @@ -297,12 +304,19 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 | 
	
		
			
				|  |  |              createRes.setGoodType(info.getGoodType());
 | 
	
		
			
				|  |  |              //todo 优惠券优惠金额,暂时为0
 | 
	
		
			
				|  |  |              BigDecimal couponAmount = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | +            if (createRes.getCouponAmount() != null) {
 | 
	
		
			
				|  |  | +                couponAmount = createRes.getCouponAmount();
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if (couponAmount.compareTo(createRes.getExpectPrice()) > 0 ){
 | 
	
		
			
				|  |  | +                couponAmount = createRes.getActualPrice();
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |              createRes.setActualPrice(createRes.getExpectPrice().subtract(couponAmount).setScale(2, RoundingMode.HALF_UP));
 | 
	
		
			
				|  |  |              createRes.setCouponAmount(couponAmount);
 | 
	
		
			
				|  |  |              //累计实际支付金额
 | 
	
		
			
				|  |  |              actualPrice = actualPrice.add(createRes.getActualPrice());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              info.setCreateRes(createRes);
 | 
	
		
			
				|  |  | +            orderReq.setActivityId(createRes.getActivityId());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          //验证金额
 | 
	
	
		
			
				|  | @@ -532,6 +546,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 | 
	
		
			
				|  |  |      private UserOrderVo insertOrder(OrderReq orderReq) {
 | 
	
		
			
				|  |  |          UserOrder userOrder = new UserOrder();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        userOrder.setActivityId(orderReq.getActivityId());
 | 
	
		
			
				|  |  |          userOrder.setOrderNo(orderReq.getOrderNo());
 | 
	
		
			
				|  |  |          userOrder.setUserId(orderReq.getUserId());
 | 
	
		
			
				|  |  |          userOrder.setOrderName(orderReq.getOrderName());
 | 
	
	
		
			
				|  | @@ -601,10 +616,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 | 
	
		
			
				|  |  |              userOrder.setPlantformFee(userOrder.getPlantformFee().add(orderDetail.getPlantformFee()));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        //todo 优惠券优惠金额,暂时为0
 | 
	
		
			
				|  |  | -        BigDecimal couponAmount = BigDecimal.ZERO;
 | 
	
		
			
				|  |  | -        userOrder.setActualPrice(userOrder.getActualPrice().subtract(couponAmount));
 | 
	
		
			
				|  |  | -        userOrder.setCouponAmount(userOrder.getCouponAmount().add(couponAmount));
 | 
	
		
			
				|  |  | +        userOrder.setActualPrice(userOrder.getActualPrice());
 | 
	
		
			
				|  |  | +        userOrder.setCouponAmount(userOrder.getCouponAmount());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (userOrder.getActualPrice().subtract(orderReq.getActualPrice()).abs()
 | 
	
		
			
				|  |  |                  .compareTo(new BigDecimal("0.01")) > 0) {
 | 
	
	
		
			
				|  | @@ -774,6 +787,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 | 
	
		
			
				|  |  |              orderDetailVo.setUserId(detail.getUserId());
 | 
	
		
			
				|  |  |              orderDetailVo.setOrderId(detail.getId());
 | 
	
		
			
				|  |  |              orderDetailVo.setRecomUserId(detail.getRecomUserId());
 | 
	
		
			
				|  |  | +            orderDetailVo.setActivityId(detail.getActivityId());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              //调用业务
 | 
	
		
			
				|  |  |              Consumer<UserOrderDetailVo> userOrderVoConsumer = orderSuccess.get(orderDetailVo.getGoodType());
 | 
	
		
			
				|  |  |              if (!Objects.isNull(userOrderVoConsumer)) {
 | 
	
	
		
			
				|  | @@ -786,6 +801,9 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 | 
	
		
			
				|  |  |              if (merchId != null && merchId != 0) {
 | 
	
		
			
				|  |  |                  redissonClient.getBucket(CacheNameEnum.TEACHER_TOTAL.getRedisKey(merchId)).delete();
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // 记录活动参与
 | 
	
		
			
				|  |  | +            saveActivityRecord(orderDetailVo);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          //清除买家统计缓存
 | 
	
		
			
				|  |  |          if (ClientEnum.STUDENT.getCode().equals(detail.getPaymentClient())) {
 | 
	
	
		
			
				|  | @@ -795,6 +813,21 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    private void saveActivityRecord(UserOrderDetailVo orderDetailVo) {
 | 
	
		
			
				|  |  | +        if (orderDetailVo.getActivityId() == null || orderDetailVo.getActivityId() == 0) {
 | 
	
		
			
				|  |  | +            return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        ActivityRegistration activityRegistration = new ActivityRegistration();
 | 
	
		
			
				|  |  | +        activityRegistration.setActivityId(orderDetailVo.getActivityId());
 | 
	
		
			
				|  |  | +        activityRegistration.setOrderNo(orderDetailVo.getOrderNo());
 | 
	
		
			
				|  |  | +        activityRegistration.setSubOrderNo(orderDetailVo.getSubOrderNo());
 | 
	
		
			
				|  |  | +        activityRegistration.setUserId(orderDetailVo.getUserId());
 | 
	
		
			
				|  |  | +        activityRegistration.setCreateTime(new Date());
 | 
	
		
			
				|  |  | +        activityRegistrationService.save(activityRegistration);
 | 
	
		
			
				|  |  | +        activityEvaluationRecordService.saveActivityRecord(orderDetailVo.getActivityId(), orderDetailVo.getUserId(),
 | 
	
		
			
				|  |  | +                                                           orderDetailVo.getRecomUserId(), ActivityResourceEnum.TEACHER);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  |       * 记录平台收入和用户分润收入
 | 
	
		
			
				|  |  |       *
 | 
	
	
		
			
				|  | @@ -817,6 +850,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 | 
	
		
			
				|  |  |              platformFeeRate = BigDecimal.ONE;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          BigDecimal platformFee = expectPrice.multiply(platformFeeRate).setScale(2, RoundingMode.HALF_UP);
 | 
	
		
			
				|  |  | +        platformFee = platformFee.subtract(orderDetailVo.getCouponAmount());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (platformFee.compareTo(BigDecimal.ZERO) > 0) {
 | 
	
		
			
				|  |  |              PlatformCashAccountRecord platformCashAccountRecord;
 | 
	
	
		
			
				|  | @@ -831,31 +865,32 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 | 
	
		
			
				|  |  |                          orderDetailVo.getOrderNo(), accountPeriodTime);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              platformCashAccountRecordService.save(platformCashAccountRecord);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        //卖家不能分润自己
 | 
	
		
			
				|  |  | -        if (null != orderDetailVo.getRecomUserId()
 | 
	
		
			
				|  |  | -                && !orderDetailVo.getRecomUserId().equals(orderDetailVo.getMerchId())) {
 | 
	
		
			
				|  |  | -            //获取分润收益费率
 | 
	
		
			
				|  |  | -            BigDecimal shareFeeRate = getShareFreeByGoodType(orderDetailVo.getGoodType()
 | 
	
		
			
				|  |  | -                    , orderDetailVo.getBizId());
 | 
	
		
			
				|  |  | -            //入老师账户
 | 
	
		
			
				|  |  | -            BigDecimal shareFee = expectPrice.multiply(shareFeeRate).setScale(2, RoundingMode.HALF_UP);
 | 
	
		
			
				|  |  | -            if (shareFee.compareTo(BigDecimal.ZERO) > 0) {
 | 
	
		
			
				|  |  | -                AccountBizTypeEnum bizTypeEnum = AccountBizTypeEnum.valueOf(orderDetailVo.getGoodType().getCode() + "_SHARE");
 | 
	
		
			
				|  |  | -                if (null != bizTypeEnum) {
 | 
	
		
			
				|  |  | -                    //插入分润老师账户变更记录-分润老师预收
 | 
	
		
			
				|  |  | -                    HttpResponseResult<UserAccountRecord> recomRecordRes = userAccountService.accountRecord(
 | 
	
		
			
				|  |  | -                            new UserAccountRecordDto(orderDetailVo.getRecomUserId(), PostStatusEnum.WAIT, shareFee, InOrOutEnum.IN,
 | 
	
		
			
				|  |  | -                                    bizTypeEnum, orderDetailVo.getBizId(), bizTypeEnum.getMsg(), orderDetailVo.getOrderNo(), orderDetailVo.getUserId(), accountPeriodTime));
 | 
	
		
			
				|  |  | -                    if (recomRecordRes.getStatus()) {
 | 
	
		
			
				|  |  | -                        //插入平台预支
 | 
	
		
			
				|  |  | -                        PlatformCashAccountRecord platformCashAccountRecord = new PlatformCashAccountRecord(orderDetailVo.getRecomUserId(), shareFee,
 | 
	
		
			
				|  |  | -                                InOrOutEnum.OUT, PostStatusEnum.WAIT, bizTypeEnum, orderDetailVo.getBizId(), orderDetailVo.getOrderNo(), accountPeriodTime);
 | 
	
		
			
				|  |  | -                        platformCashAccountRecordService.save(platformCashAccountRecord);
 | 
	
		
			
				|  |  | +            //卖家不能分润自己
 | 
	
		
			
				|  |  | +            if (null != orderDetailVo.getRecomUserId()
 | 
	
		
			
				|  |  | +                    && !orderDetailVo.getRecomUserId().equals(orderDetailVo.getMerchId())) {
 | 
	
		
			
				|  |  | +                //获取分润收益费率
 | 
	
		
			
				|  |  | +                BigDecimal shareFeeRate = getShareFreeByGoodType(orderDetailVo.getGoodType()
 | 
	
		
			
				|  |  | +                        , orderDetailVo.getBizId());
 | 
	
		
			
				|  |  | +                //入老师账户
 | 
	
		
			
				|  |  | +                BigDecimal shareFee = platformFee.multiply(shareFeeRate).setScale(2, RoundingMode.HALF_UP);
 | 
	
		
			
				|  |  | +                if (shareFee.compareTo(BigDecimal.ZERO) > 0) {
 | 
	
		
			
				|  |  | +                    AccountBizTypeEnum bizTypeEnum = AccountBizTypeEnum.valueOf(orderDetailVo.getGoodType().getCode() + "_SHARE");
 | 
	
		
			
				|  |  | +                    if (null != bizTypeEnum) {
 | 
	
		
			
				|  |  | +                        //插入分润老师账户变更记录-分润老师预收
 | 
	
		
			
				|  |  | +                        HttpResponseResult<UserAccountRecord> recomRecordRes = userAccountService.accountRecord(
 | 
	
		
			
				|  |  | +                                new UserAccountRecordDto(orderDetailVo.getRecomUserId(), PostStatusEnum.WAIT, shareFee, InOrOutEnum.IN,
 | 
	
		
			
				|  |  | +                                        bizTypeEnum, orderDetailVo.getBizId(), bizTypeEnum.getMsg(), orderDetailVo.getOrderNo(), orderDetailVo.getUserId(), accountPeriodTime));
 | 
	
		
			
				|  |  | +                        if (recomRecordRes.getStatus()) {
 | 
	
		
			
				|  |  | +                            //插入平台预支
 | 
	
		
			
				|  |  | +                            platformCashAccountRecord = new PlatformCashAccountRecord(orderDetailVo.getRecomUserId(), shareFee,
 | 
	
		
			
				|  |  | +                                    InOrOutEnum.OUT, PostStatusEnum.WAIT, bizTypeEnum, orderDetailVo.getBizId(), orderDetailVo.getOrderNo(), accountPeriodTime);
 | 
	
		
			
				|  |  | +                            platformCashAccountRecordService.save(platformCashAccountRecord);
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 |