|
@@ -329,6 +329,10 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
|
|
|
|
|
private final OrderDonUserDiscountPopularizeRecordMapper orderDonUserDiscountPopularizeRecordMapper;
|
|
private final OrderDonUserDiscountPopularizeRecordMapper orderDonUserDiscountPopularizeRecordMapper;
|
|
|
|
|
|
|
|
|
|
+ private final UserBenefitsMapper userBenefitsMapper;
|
|
|
|
|
+
|
|
|
|
|
+ private final UserBenefitsOrderRecordMapper userBenefitsOrderRecordMapper;
|
|
|
|
|
+
|
|
|
private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
|
|
private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
|
|
|
|
|
|
|
|
@Transactional(rollbackFor = Throwable.class)
|
|
@Transactional(rollbackFor = Throwable.class)
|
|
@@ -678,7 +682,20 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
recordOrderTrialTicketJumpPay(orderId,payRequest.getIsTrial());
|
|
recordOrderTrialTicketJumpPay(orderId,payRequest.getIsTrial());
|
|
|
//记录用户推广海报下单记录
|
|
//记录用户推广海报下单记录
|
|
|
recordPosterUserOrder(orderId, payRequest.getRid());
|
|
recordPosterUserOrder(orderId, payRequest.getRid());
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 记录用户权益下单
|
|
|
|
|
+ */
|
|
|
|
|
+ private void recordUserBenefitsOrderRelate(OrderDon orderDon, UserBenefits userBenefits) {
|
|
|
|
|
+ UserBenefitsOrderRecord userBenefitsOrderRecord = new UserBenefitsOrderRecord();
|
|
|
|
|
+ userBenefitsOrderRecord.setOrderId(orderDon.getId());
|
|
|
|
|
+ userBenefitsOrderRecord.setGoodsId(orderDon.getGoodsId());
|
|
|
|
|
+ userBenefitsOrderRecord.setSkuId(orderDon.getSkuId());
|
|
|
|
|
+ userBenefitsOrderRecord.setUserId(orderDon.getUserId());
|
|
|
|
|
+ userBenefitsOrderRecord.setType(userBenefits.getType().name());
|
|
|
|
|
+ userBenefitsOrderRecord.setBenefitsId(userBenefits.getId());
|
|
|
|
|
+ userBenefitsOrderRecordMapper.insert(userBenefitsOrderRecord);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private Boolean checkIsNeedGroupsRelation(GoodsDon goodsDon) {
|
|
private Boolean checkIsNeedGroupsRelation(GoodsDon goodsDon) {
|
|
@@ -3291,7 +3308,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
if (sku != null) {
|
|
if (sku != null) {
|
|
|
payTitle.append(sku.getSpecVal());
|
|
payTitle.append(sku.getSpecVal());
|
|
|
}
|
|
}
|
|
|
- if (isGiftCardPay.get()) {
|
|
|
|
|
|
|
+ if (isGiftCardPay != null && isGiftCardPay.get()) {
|
|
|
//礼品卡规格
|
|
//礼品卡规格
|
|
|
Map<Long, Integer> giftCardPayNumMap = new ConcurrentHashMap<>();
|
|
Map<Long, Integer> giftCardPayNumMap = new ConcurrentHashMap<>();
|
|
|
giftCards.stream().forEach(data -> {
|
|
giftCards.stream().forEach(data -> {
|
|
@@ -3897,6 +3914,137 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
return orderDon;
|
|
return orderDon;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public OrderDon userBenefitsSubmit(OrderPayRequest orderPayRequest) throws Exception {
|
|
|
|
|
+ Long userId = orderPayRequest.getUserId();
|
|
|
|
|
+ String ip = orderPayRequest.getIp();
|
|
|
|
|
+ Long benefitsId = orderPayRequest.getBenefitsId();
|
|
|
|
|
+ Assert.notNull(benefitsId, "下单错误");
|
|
|
|
|
+ UserBenefits userBenefits = userBenefitsMapper.selectOne(Wrappers.lambdaQuery(UserBenefits.class)
|
|
|
|
|
+ .eq(UserBenefits::getId, benefitsId)
|
|
|
|
|
+ .eq(UserBenefits::getStatus, true)
|
|
|
|
|
+ .last("limit 1"));
|
|
|
|
|
+ if (userBenefits == null) {
|
|
|
|
|
+ throw BusinessRuntimeException.getInstance("权益已不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+ User user = userMapper.selectById(userId);
|
|
|
|
|
+ List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, user);
|
|
|
|
|
+ Integer count = userBenefitsOrderRecordMapper.selectNoPaymentRecord(userIdList, benefitsId);
|
|
|
|
|
+ if (count > 0) {
|
|
|
|
|
+ throw BusinessRuntimeException.getInstance("存在待支付权益订单");
|
|
|
|
|
+ }
|
|
|
|
|
+ //用户是否满足该权益 并且未领取
|
|
|
|
|
+ checkUserBenefitsStatus(userBenefits, userIdList);
|
|
|
|
|
+ OrderDon orderDon = new OrderDon();
|
|
|
|
|
+ orderDon.setOrderNo(SEQUENCE.nextId().toString());
|
|
|
|
|
+ GoodsDonSku sku = goodsDonSkuMapper.selectById(userBenefits.getSkuId());
|
|
|
|
|
+ orderDon.setMoney(sku.getPrice());
|
|
|
|
|
+ GoodsDon goodsDon = goodsDonMapper.selectById(sku.getGoodsId());
|
|
|
|
|
+ Long relationId = 0l;
|
|
|
|
|
+ if (userBenefits.getType() == UserBenefits.Type.RENEW) {
|
|
|
|
|
+ relationId = orderPayRequest.getRelationId();
|
|
|
|
|
+ Assert.notNull(relationId, "请选择对应车票");
|
|
|
|
|
+ GroupsRelation relation = groupsRelationMapper.selectOne(Wrappers.lambdaQuery(GroupsRelation.class)
|
|
|
|
|
+ .eq(GroupsRelation::getId, relationId)
|
|
|
|
|
+ .in(GroupsRelation::getUserId, userIdList)
|
|
|
|
|
+ .isNotNull(GroupsRelation::getExpiryTime));
|
|
|
|
|
+ Assert.notNull(relation, "车票不存在");
|
|
|
|
|
+ GroupsTrips groupsTrips = groupsMapper.selectById(relation.getGroupsId());
|
|
|
|
|
+ if (groupsTrips.getSkuId().intValue() != userBenefits.getSkuId().intValue()) {
|
|
|
|
|
+ throw BusinessRuntimeException.getInstance("续费规格错误");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (relation != null && relation.getStatus() == GroupsRelation.Status.outside) {
|
|
|
|
|
+ orderDon.setIsOt(true);
|
|
|
|
|
+ }
|
|
|
|
|
+ //目前续费减免下单次数
|
|
|
|
|
+ Integer renewCount = userBenefitsOrderRecordMapper.selectUseComboRecordByUid(userIdList, userBenefits.getType(), userBenefits.getGoodsId(), userBenefits.getSkuId(), Constant.noOrderAllStatus, null);
|
|
|
|
|
+ String renewConfig = userBenefits.getRenewConfig();
|
|
|
|
|
+ List<UserBenefits.RenewConfig> renewConfigs = Jsons.parseList(renewConfig, UserBenefits.RenewConfig.class);
|
|
|
|
|
+ Integer start = userBenefits.getStart();
|
|
|
|
|
+ BigDecimal reduce;
|
|
|
|
|
+ if (renewCount > start) {
|
|
|
|
|
+ UserBenefits.RenewConfig thisLevel = renewConfigs.get(start);
|
|
|
|
|
+ reduce = thisLevel.getReduce();
|
|
|
|
|
+ } else {
|
|
|
|
|
+ Optional<UserBenefits.RenewConfig> first = renewConfigs.stream().filter(e -> e.getIndex() == renewCount + 1).findFirst();
|
|
|
|
|
+ if (!first.isPresent()) {
|
|
|
|
|
+ log.error("暂无skuId:{}目前等级:{}的权益", sku.getId(), renewCount + 1);
|
|
|
|
|
+ throw BusinessRuntimeException.getInstance("系统异常");
|
|
|
|
|
+ }
|
|
|
|
|
+ reduce = first.get().getReduce();
|
|
|
|
|
+ }
|
|
|
|
|
+ orderDon.setMoney(orderDon.getMoney().subtract(reduce));
|
|
|
|
|
+ }
|
|
|
|
|
+ if (orderDon.getMoney().compareTo(BigDecimal.ZERO) < 0) {
|
|
|
|
|
+ throw BusinessRuntimeException.getInstance("订单金额错误");
|
|
|
|
|
+ }
|
|
|
|
|
+ orderDon.setRealMoney(sku.getPrice());
|
|
|
|
|
+ orderDon.setOriMoney(sku != null ? sku.getPrice() : orderDon.getMoney());
|
|
|
|
|
+ //渠道链接id
|
|
|
|
|
+ if (orderPayRequest.getPopularizeId() != null) {
|
|
|
|
|
+ orderDon.setPopularizeId(orderPayRequest.getPopularizeId());
|
|
|
|
|
+ }
|
|
|
|
|
+ orderDon.setSkuId(sku.getId());
|
|
|
|
|
+ orderDon.setRelationId(relationId);
|
|
|
|
|
+ orderDon.setNum(1);
|
|
|
|
|
+ orderDon.setGoodsId(goodsDon.getId());
|
|
|
|
|
+ orderDon.setStatus(OrderDon.Status.noPayment);
|
|
|
|
|
+ orderDon.setUserId(user.getId());
|
|
|
|
|
+ orderDon.setType(OrderDon.Type.getType(orderPayRequest.getType()));
|
|
|
|
|
+ orderDon.setIsWebPay(orderPayRequest.getIsWebPay());
|
|
|
|
|
+ orderDon.setSource(orderPayRequest.getSource());
|
|
|
|
|
+ orderDon.setCouponExCode(orderPayRequest.getCouponExCode());
|
|
|
|
|
+
|
|
|
|
|
+ if (orderDon.getYhsId() == 0) {
|
|
|
|
|
+ //虚拟商品订单,是否是分销订单
|
|
|
|
|
+ setDistributeOrderMark(orderDon, goodsDon.getType(), user.getId());
|
|
|
|
|
+ }
|
|
|
|
|
+ BigDecimal balance = orderPayRequest.getBalance();
|
|
|
|
|
+ //存在余额
|
|
|
|
|
+ deductBalancePayOrderMoney(orderDon, balance, user);
|
|
|
|
|
+ orderDon.setPayDesc(goodsDon.getPayDesc());
|
|
|
|
|
+ //设置订单支付商品信息
|
|
|
|
|
+ setOrderDonPayTile(null, null, null, orderDon, goodsDon, sku, null);
|
|
|
|
|
+ this.saveOrUpdate(orderDon);
|
|
|
|
|
+ if (orderDon.getStatus() == OrderDon.Status.noPayment) {
|
|
|
|
|
+ jobManager.addJob(EXPIRY_TIME, () -> {
|
|
|
|
|
+ closeOrder(orderDon.getId(), null);
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ //统一处理订单记录操作
|
|
|
|
|
+ unifiedHandlerOrderRecordFunc(orderDon.getId(), orderPayRequest);
|
|
|
|
|
+ //记录用户权益下单
|
|
|
|
|
+ recordUserBenefitsOrderRelate(orderDon, userBenefits);
|
|
|
|
|
+ return orderDon;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private void checkUserBenefitsStatus(UserBenefits userBenefits, List<Long> userIdList) {
|
|
|
|
|
+ UserBenefits.Type type = userBenefits.getType();
|
|
|
|
|
+ int fhCount = 0;
|
|
|
|
|
+ if (type == UserBenefits.Type.COMBO) {
|
|
|
|
|
+ //是否已经购买实物
|
|
|
|
|
+ fhCount = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class).in(OrderDon::getUserId, userIdList).eq(OrderDon::getGoodsId, Constant.NF_EP_GID).notIn(OrderDon::getStatus, Constant.noOrderAllStatus));
|
|
|
|
|
+ if (fhCount > 0) {
|
|
|
|
|
+ //近一年是否已经使用过该权益
|
|
|
|
|
+ DateTime lastYear = DateUtil.offsetMonth(DateTime.now(), -12);
|
|
|
|
|
+ Integer comboCount = userBenefitsOrderRecordMapper.selectUseComboRecordByUid(userIdList, userBenefits.getType(), userBenefits.getGoodsId(), null, Constant.noOrderStatus, lastYear);
|
|
|
|
|
+ if (comboCount > 0) {
|
|
|
|
|
+ throw BusinessRuntimeException.getInstance("你今年已享受该套餐优惠");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } else if (type == UserBenefits.Type.RENEW) {
|
|
|
|
|
+ //是否购买过该规格套餐
|
|
|
|
|
+ Long skuId = userBenefits.getSkuId();
|
|
|
|
|
+ fhCount = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class).in(OrderDon::getUserId, userIdList).eq(OrderDon::getSkuId, skuId).notIn(OrderDon::getStatus, Constant.noOrderAllStatus));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ throw BusinessRuntimeException.getInstance("权益下单异常");
|
|
|
|
|
+ }
|
|
|
|
|
+ if (fhCount == 0) {
|
|
|
|
|
+ throw BusinessRuntimeException.getInstance("你未完成该权益目标");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 试用车票跳转购买正式车票订单记录
|
|
* 试用车票跳转购买正式车票订单记录
|
|
|
*/
|
|
*/
|