|
|
@@ -43,6 +43,7 @@ import com.cyksj.enums.GatewayApiCode;
|
|
|
import com.cyksj.mapper.*;
|
|
|
import com.cyksj.mapper.channel.ChannelPopularizeMapper;
|
|
|
import com.cyksj.mapper.channel.ShopConfigMapper;
|
|
|
+import com.cyksj.mapper.channel.UserPayEquipmentAvailableBenefitsMapper;
|
|
|
import com.cyksj.mapper.corp.CorpInteractiveUserOrderRelationMapper;
|
|
|
import com.cyksj.mapper.corp.CorpUserMapper;
|
|
|
import com.cyksj.mapper.corp.CorpUserTagMapper;
|
|
|
@@ -81,10 +82,7 @@ import com.cyksj.service.groups.GroupsFuncService;
|
|
|
import com.cyksj.service.mange.coupon.CouponCommonService;
|
|
|
import com.cyksj.service.market.MarketFrontService;
|
|
|
import com.cyksj.service.market.task.TaskService;
|
|
|
-import com.cyksj.service.order.OrderCommonService;
|
|
|
-import com.cyksj.service.order.OrderDonPostService;
|
|
|
-import com.cyksj.service.order.OrderDonService;
|
|
|
-import com.cyksj.service.order.OrderRefundService;
|
|
|
+import com.cyksj.service.order.*;
|
|
|
import com.cyksj.service.pay.AliPayCommonService;
|
|
|
import com.cyksj.service.relation.GroupRelationClearService;
|
|
|
import com.cyksj.service.relation.GroupRelationFrontService;
|
|
|
@@ -331,6 +329,14 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
|
|
|
private final OrderDonIndependentRenewRecordMapper independentRenewRecordMapper;
|
|
|
|
|
|
+ private final UserBenefitsMapper userBenefitsMapper;
|
|
|
+
|
|
|
+ private final UserBenefitsOrderRecordMapper userBenefitsOrderRecordMapper;
|
|
|
+
|
|
|
+ private final UserRealOrderBenefitsService userRealOrderBenefitsService;
|
|
|
+
|
|
|
+ private final UserPayEquipmentAvailableBenefitsMapper userPayEquipmentAvailableBenefitsMapper;
|
|
|
+
|
|
|
private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
|
|
|
|
|
|
@Transactional(rollbackFor = Throwable.class)
|
|
|
@@ -579,7 +585,9 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
orderDon.setPhone(orderPhone);
|
|
|
this.saveOrUpdate(orderDon);
|
|
|
|
|
|
- if (orderDon.getIsDp()) {
|
|
|
+ Long orderId = orderDon.getId();
|
|
|
+ Long fUid = orderDon.getUserId();
|
|
|
+ if (orderDon.getIsDp() != null && orderDon.getIsDp()) {
|
|
|
//保存订单优惠加购规格 关系
|
|
|
OrderDiscountPlusPurchaseSkuRelation orderDiscountPlusPurchaseSkuRelation = new OrderDiscountPlusPurchaseSkuRelation();
|
|
|
orderDiscountPlusPurchaseSkuRelation.setOrderId(orderDon.getId());
|
|
|
@@ -592,7 +600,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
saveTransport(payRequest.getAddressId(), orderDon.getId());
|
|
|
}
|
|
|
//保存加购发货地址
|
|
|
- if (orderDon.getIsDp() && payRequest.getAddressId() != null) {
|
|
|
+ if (orderDon.getIsDp() != null && orderDon.getIsDp() && payRequest.getAddressId() != null) {
|
|
|
redisService.set(RedisService.key.PLUS_GOODS_ADDRESS_KEY.getName() + orderDon.getId(), payRequest.getAddressId(), RedisService.key.PLUS_GOODS_ADDRESS_KEY.getTimeout());
|
|
|
}
|
|
|
if (orderDon.getDiscountPopularizeRecord() != null) {
|
|
|
@@ -601,11 +609,6 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
discountPopularizeRecord.setIp(payRequest.getIp());
|
|
|
orderDonUserDiscountPopularizeRecordMapper.insert(discountPopularizeRecord);
|
|
|
}
|
|
|
- if (orderDon.getStatus() == OrderDon.Status.noPayment) {
|
|
|
- jobManager.addJob(EXPIRY_TIME, () -> {
|
|
|
- closeOrder(orderDon.getId(), null);
|
|
|
- });
|
|
|
- }
|
|
|
|
|
|
//数据回传
|
|
|
if (StringUtils.isNotBlank(payRequest.getCallback())) {
|
|
|
@@ -618,8 +621,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
try {
|
|
|
Optional.ofNullable(Jsons.parseObject(val, OrderDonPostDataDto.class))
|
|
|
.ifPresent(orderDonPostDataDto -> {
|
|
|
- log.info("用户ID:{}预下单 回传用户缓存 订单回传记录保存,callback:{},callbackType:{}", orderDon.getUserId(), orderDonPostDataDto.getCallback(), orderDonPostDataDto.getCallbackType());
|
|
|
- orderDonPostService.savePostData(orderDon.getId(), orderDonPostDataDto.getCallback(), orderDonPostDataDto.getCallbackType());
|
|
|
+ log.info("用户ID:{}预下单 回传用户缓存 订单回传记录保存,callback:{},callbackType:{}", fUid, orderDonPostDataDto.getCallback(), orderDonPostDataDto.getCallbackType());
|
|
|
+ orderDonPostService.savePostData(orderId, orderDonPostDataDto.getCallback(), orderDonPostDataDto.getCallbackType());
|
|
|
});
|
|
|
} catch (Exception e) {
|
|
|
log.error("解析用户缓存回传信息错误,msg:{}", StringUtil.getErrorText(e));
|
|
|
@@ -639,7 +642,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
//礼品卡现金使用记录
|
|
|
if (CollUtil.isNotEmpty(orderDon.getGcUseRecords())) {
|
|
|
orderDon.getGcUseRecords().forEach(data -> {
|
|
|
- data.setOrderId(orderDon.getId());
|
|
|
+ data.setOrderId(orderId);
|
|
|
});
|
|
|
giftCardOrderUseRecordService.saveBatch(orderDon.getGcUseRecords());
|
|
|
}
|
|
|
@@ -661,9 +664,26 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
informationClickUserRecord.setOrderId(orderDon.getId());
|
|
|
informationClickUserRecordMapper.insert(informationClickUserRecord);
|
|
|
}
|
|
|
+ if (goodsDon != null) {
|
|
|
+ orderDon.setGoodsDonType(goodsDon.getType());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (sku != null) {
|
|
|
+ orderDon.setIsMirror(sku.getIsMirror());
|
|
|
+ }
|
|
|
|
|
|
//统一处理订单记录操作
|
|
|
unifiedHandlerOrderRecordFunc(orderDon.getId(), payRequest);
|
|
|
+ //余额支付订单
|
|
|
+ if (orderDon.getMoney().compareTo(BigDecimal.ZERO) == 0) {
|
|
|
+ orderDon = orderDonMapper.selectById(orderId);
|
|
|
+ unifiedHandlerOrderNotify(orderDon, goodsDon, sku);
|
|
|
+ }
|
|
|
+ if (orderDon.getStatus() == OrderDon.Status.noPayment) {
|
|
|
+ jobManager.addJob(EXPIRY_TIME, () -> {
|
|
|
+ closeOrder(orderId, null);
|
|
|
+ });
|
|
|
+ }
|
|
|
return orderDon;
|
|
|
}
|
|
|
|
|
|
@@ -680,7 +700,20 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
recordOrderTrialTicketJumpPay(orderId,payRequest.getIsTrial());
|
|
|
//记录用户推广海报下单记录
|
|
|
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) {
|
|
|
@@ -1055,15 +1088,12 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
//扣除使用优惠券、余额的订单金额
|
|
|
deductOrderMoney(orderDon, couponUser, payRequest.getBalance(), user, sku.getPrice(), goodsDon.getType(), payRequest.getGcCash(), payRequest.getGcpIds(), false, null);
|
|
|
this.saveOrUpdate(orderDon);
|
|
|
- if (orderDon.getStatus() == OrderDon.Status.noPayment) {
|
|
|
- jobManager.addJob(EXPIRY_TIME, () -> {
|
|
|
- closeOrder(orderDon.getId(), null);
|
|
|
- });
|
|
|
- }
|
|
|
+
|
|
|
+ Long orderId = orderDon.getId();
|
|
|
//礼品卡现金使用记录
|
|
|
if (CollUtil.isNotEmpty(orderDon.getGcUseRecords())) {
|
|
|
orderDon.getGcUseRecords().forEach(data -> {
|
|
|
- data.setOrderId(orderDon.getId());
|
|
|
+ data.setOrderId(orderId);
|
|
|
});
|
|
|
giftCardOrderUseRecordService.saveBatch(orderDon.getGcUseRecords());
|
|
|
}
|
|
|
@@ -1122,27 +1152,13 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
}
|
|
|
//订单金额为0 且订单为已完成 更新虚物车票
|
|
|
if (orderDon.getMoney().compareTo(BigDecimal.ZERO) == 0) {
|
|
|
- OrderDon updateOrder = orderDonMapper.selectById(orderDon.getId());
|
|
|
- //mj镜像续费订单
|
|
|
- if(orderDon.getOrderType() == 2 && orderDon.getGoodsId() == 26){
|
|
|
- GroupsRelation groupsRelation = groupsRelationMapper.selectById(orderDon.getRelationId());
|
|
|
- if(groupsRelation != null){
|
|
|
- Date expiryTime = groupsRelation.getExpiryTime();
|
|
|
-
|
|
|
- //mj续费订单当天过期直接加次数
|
|
|
- if (expiryTime != null && DateUtil.isSameDay(new Date(), expiryTime)) {
|
|
|
- mjRenewOrder(orderDon);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- updateOrder.setStatus(goodsDon.getType() == 1 && goodsDon.getSecondType() == 2 ? OrderDon.Status.complete : OrderDon.Status.hasPayment);
|
|
|
- updateGroupsTicket(updateOrder, goodsDon, sku);
|
|
|
- orderDonMapper.updateById(updateOrder);
|
|
|
- //余额使用记录
|
|
|
- if (orderDon.getBalance().compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- userBenefitsService.recordBalanceBySource(orderDon.getUserId(), orderDon.getBalance().negate(), UserBalanceSourceRecord.Source.payment, orderDon.getId(), goodsDon.getTitle() + UserBalanceSourceRecord.Source.payment.getDesc());
|
|
|
- }
|
|
|
- return updateOrder;
|
|
|
+ orderDon = orderDonMapper.selectById(orderId);
|
|
|
+ unifiedHandlerOrderNotify(orderDon, goodsDon, sku);
|
|
|
+ }
|
|
|
+ if (orderDon.getStatus() == OrderDon.Status.noPayment) {
|
|
|
+ jobManager.addJob(EXPIRY_TIME, () -> {
|
|
|
+ closeOrder(orderId, null);
|
|
|
+ });
|
|
|
}
|
|
|
return orderDon;
|
|
|
}
|
|
|
@@ -1218,7 +1234,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
return;
|
|
|
}
|
|
|
Long goodsId = orderDon.getGoodsId();
|
|
|
- if (orderDon.getIsNoLogin()) {
|
|
|
+ if (orderDon.getIsNoLogin() != null && orderDon.getIsNoLogin()) {
|
|
|
orderDon.setExCode(exchangeCodeService.getExCode(goodsId, orderDon.getSkuId(), 1));
|
|
|
}
|
|
|
GoodsDonSku sku = null;
|
|
|
@@ -1441,7 +1457,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
return;
|
|
|
}
|
|
|
log.info("虚物订单orderNo:{}开始更新车票信息", order.getOrderNo());
|
|
|
- if (order.getIsDp()) {
|
|
|
+ if (order.getIsDp() != null && order.getIsDp()) {
|
|
|
//是否已经发送优惠加购车票
|
|
|
OrderDiscountPlusPurchaseSkuRelation purchaseSkuRelation = orderDiscountPlusPurchaseSkuRelationMapper.selectOne(Wrappers.lambdaQuery(OrderDiscountPlusPurchaseSkuRelation.class)
|
|
|
.eq(OrderDiscountPlusPurchaseSkuRelation::getOrderId, order.getId()));
|
|
|
@@ -1616,7 +1632,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
distributeWaitingSendPoints.setUserId(order.getUserId());
|
|
|
BigDecimal orderMoney = order.getMoney();
|
|
|
//是否是加购订单
|
|
|
- if (order.getIsDp()) {
|
|
|
+ if (order.getIsDp() != null && order.getIsDp()) {
|
|
|
//加购订单使用 主平台金额 分销
|
|
|
orderMoney = order.getOriMoney();
|
|
|
if (orderMoney.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
@@ -2482,7 +2498,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
* 更新车票状态
|
|
|
*/
|
|
|
public void updateGroupsTicket(OrderDon orderDon, GoodsDon goodsDon, GoodsDonSku sku) {
|
|
|
- if (orderDon.getOrderType() == 2 && orderDon.getIsChangeTicket()) {
|
|
|
+ if (orderDon.getOrderType() != null && orderDon.getOrderType() == 2 && orderDon.getIsChangeTicket() != null && orderDon.getIsChangeTicket()) {
|
|
|
//将奈飞月付车票更换成其他规格的车票
|
|
|
changeTicketAndRecord(orderDon, sku);
|
|
|
} else {
|
|
|
@@ -2547,7 +2563,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
@Override
|
|
|
public void orderNotify(OrderDon orderDon) {
|
|
|
Long goodsId = orderDon.getGoodsId();
|
|
|
- if (orderDon.getIsNoLogin()) {
|
|
|
+ if (orderDon.getIsNoLogin() != null && orderDon.getIsNoLogin()) {
|
|
|
orderDon.setExCode(exchangeCodeService.getExCode(goodsId, orderDon.getSkuId(), 1));
|
|
|
}
|
|
|
GoodsDonSku sku = null;
|
|
|
@@ -2563,6 +2579,14 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
*/
|
|
|
public void unifiedHandlerOrderNotify(OrderDon orderDon, GoodsDon goodsDon, GoodsDonSku sku) {
|
|
|
orderDon.setStatus(goodsDon.getType() == 1 && goodsDon.getSecondType() == 2 ? OrderDon.Status.complete : OrderDon.Status.hasPayment);
|
|
|
+ //实物权益优惠订单
|
|
|
+ if (orderDon.getGoodsId() == 15) {
|
|
|
+ Integer selectCount = userBenefitsOrderRecordMapper.selectCount(Wrappers.lambdaQuery(UserBenefitsOrderRecord.class)
|
|
|
+ .eq(UserBenefitsOrderRecord::getOrderId, orderDon.getId()));
|
|
|
+ if (selectCount > 0) {
|
|
|
+ orderDon.setStatus(OrderDon.Status.complete);
|
|
|
+ }
|
|
|
+ }
|
|
|
boolean isSuccess = update(Wrappers.lambdaUpdate(OrderDon.class)
|
|
|
.set(OrderDon::getStatus, orderDon.getStatus())
|
|
|
.in(OrderDon::getStatus, List.of(OrderDon.Status.noPayment, OrderDon.Status.close))
|
|
|
@@ -2572,25 +2596,29 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- if (orderDon.getIsNoLogin()) {
|
|
|
+ if (orderDon.getIsNoLogin() != null && orderDon.getIsNoLogin()) {
|
|
|
orderDon.setStatus(OrderDon.Status.hasPayment);
|
|
|
}
|
|
|
|
|
|
//mj镜像续费订单
|
|
|
- if(orderDon.getOrderType() == 2 && orderDon.getGoodsId() == 26){
|
|
|
+ if (orderDon.getOrderType() != null && orderDon.getOrderType() == 2 && orderDon.getGoodsId() == 26) {
|
|
|
GroupsRelation groupsRelation = groupsRelationMapper.selectById(orderDon.getRelationId());
|
|
|
- if(groupsRelation != null){
|
|
|
+ if (groupsRelation != null) {
|
|
|
Date expiryTime = groupsRelation.getExpiryTime();
|
|
|
|
|
|
//mj续费订单当天过期直接加次数
|
|
|
if (expiryTime != null && DateUtil.isSameDay(new Date(), expiryTime)) {
|
|
|
mjRenewOrder(orderDon);
|
|
|
}
|
|
|
+ //同步user时间
|
|
|
+ midjourneyUserMapper.update(null, Wrappers.lambdaUpdate(MidjourneyUser.class)
|
|
|
+ .set(MidjourneyUser::getExpireTime, DateUtil.offsetMonth(expiryTime, sku.getMonths()))
|
|
|
+ .eq(MidjourneyUser::getRelationId, orderDon.getRelationId()));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
Long goodsId = goodsDon.getId();
|
|
|
- if (!orderDon.getIsNoLogin() && sku != null) {
|
|
|
+ if (orderDon.getIsNoLogin() != null && !orderDon.getIsNoLogin() && sku != null) {
|
|
|
//更新座位信息
|
|
|
updateGroupsTicket(orderDon, goodsDon, sku);
|
|
|
if (goodsDon.getType() == 1) {
|
|
|
@@ -2719,6 +2747,23 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ //套餐优惠
|
|
|
+ if (orderDon.getGoodsId() == 15) {
|
|
|
+ Integer selectCount = userBenefitsOrderRecordMapper.selectCount(Wrappers.lambdaQuery(UserBenefitsOrderRecord.class)
|
|
|
+ .eq(UserBenefitsOrderRecord::getOrderId, orderDon.getId()));
|
|
|
+ if (selectCount > 0) {
|
|
|
+ //发放用户车票套餐
|
|
|
+ if (StrUtil.isNotEmpty(sku.getBenefitsList())) {
|
|
|
+ try {
|
|
|
+ List<GoodsDonSku> goodsDonSkus = Jsons.parseList(sku.getBenefitsList(), GoodsDonSku.class);
|
|
|
+ userRealOrderBenefitsService.sendUserBenefitsTicket(orderDon, goodsDonSkus);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("发放用户:{}车票权益套餐错误:{}", orderDon.getUserId(), StringUtil.getErrorText(e));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void setTripDownIfFull(OrderDon orderDon) {
|
|
|
@@ -3336,7 +3381,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
if (sku != null) {
|
|
|
payTitle.append(sku.getSpecVal());
|
|
|
}
|
|
|
- if (isGiftCardPay.get()) {
|
|
|
+ if (isGiftCardPay != null && isGiftCardPay.get()) {
|
|
|
//礼品卡规格
|
|
|
Map<Long, Integer> giftCardPayNumMap = new ConcurrentHashMap<>();
|
|
|
giftCards.stream().forEach(data -> {
|
|
|
@@ -3383,7 +3428,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
orderDon.setRealMoney(gift_card_pay_money);
|
|
|
}
|
|
|
}
|
|
|
- if (orderDon.getIsDp()) {
|
|
|
+ if (orderDon.getIsDp() != null && orderDon.getIsDp()) {
|
|
|
List<GoodsDonSkuView> dp_skuViewList = beanSearcher.searchAll(GoodsDonSkuView.class, MapUtils.builder().field(GoodsDonSkuView::getSkuId, dpSkuIds).op(Operator.InList).build());
|
|
|
if (dp_skuViewList.size() != dpSkuIds.size()) {
|
|
|
throw BusinessRuntimeException.getInstance("系统异常,请刷新页面重新下单");
|
|
|
@@ -3577,11 +3622,15 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
upgradeOrderDon.setType(UpgradeOrderDon.Type.ALI_PAY);
|
|
|
upgradeOrderDonMapper.insert(upgradeOrderDon);
|
|
|
|
|
|
- deductUpgradeBalancePayOrderMoney(upgradeOrderDon, payRequest.getBalance(),user );
|
|
|
-
|
|
|
+ deductUpgradeBalancePayOrderMoney(upgradeOrderDon, payRequest.getBalance(),user);
|
|
|
+ Long orderId = upgradeOrderDon.getId();
|
|
|
+ if (upgradeOrderDon.getMoney().compareTo(BigDecimal.ZERO) == 0) {
|
|
|
+ upgradeOrderDon = upgradeOrderDonMapper.selectById(orderId);
|
|
|
+ unifiedHandlerUpgradeOrderNotify(upgradeOrderDon, upgradePackage);
|
|
|
+ }
|
|
|
if (upgradeOrderDon.getStatus() == UpgradeOrderDon.Status.noPayment) {
|
|
|
jobManager.addJob(EXPIRY_TIME, () -> {
|
|
|
- closeUpgradeOrder(upgradeOrderDon.getId(), null);
|
|
|
+ closeUpgradeOrder(orderId, null);
|
|
|
});
|
|
|
}
|
|
|
return upgradeOrderDon;
|
|
|
@@ -3865,7 +3914,6 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
return beanSearcher.searchFirst(UpgradeOrderDetailView.class, builder.build());
|
|
|
}
|
|
|
|
|
|
-
|
|
|
@Override
|
|
|
public OrderDon submitRenewUpgrade(OrderPayRequest payRequest) {
|
|
|
Long packageId = payRequest.getPackageId();
|
|
|
@@ -3935,13 +3983,189 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
orderDonMapper.insert(orderDon);
|
|
|
//记录续费升级的规格
|
|
|
recordRenewOrderDon(orderDon, renewUpgradePackage, groupsTrips);
|
|
|
+ Long orderId = orderDon.getId();
|
|
|
+ if (orderDon.getMoney().compareTo(BigDecimal.ZERO) == 0) {
|
|
|
+ orderDon = orderDonMapper.selectById(orderId);
|
|
|
+ unifiedHandlerOrderNotify(orderDon, goodsDon, renewSku);
|
|
|
+ }
|
|
|
+ if (orderDon.getStatus() == OrderDon.Status.noPayment) {
|
|
|
+ jobManager.addJob(EXPIRY_TIME, () -> {
|
|
|
+ closeOrder(orderId, null);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return orderDon;
|
|
|
+ }
|
|
|
|
|
|
- jobManager.addJob(EXPIRY_TIME, () -> {
|
|
|
- closeOrder(orderDon.getId(), null);
|
|
|
- });
|
|
|
+ @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());
|
|
|
+ if (userBenefits.getType() == UserBenefits.Type.COMBO) {
|
|
|
+ if (orderPayRequest.getSkuId() == null) {
|
|
|
+ throw BusinessRuntimeException.getInstance("请选择对应套餐");
|
|
|
+ }
|
|
|
+ String comboSkuIds = userBenefits.getComboSkuIds();
|
|
|
+ if (!Jsons.parseList(comboSkuIds, Long.class).contains(orderPayRequest.getSkuId())) {
|
|
|
+ throw BusinessRuntimeException.getInstance("错误套餐");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ GoodsDonSku sku;
|
|
|
+ if (userBenefits.getType() == UserBenefits.Type.RENEW) {
|
|
|
+ sku = goodsDonSkuMapper.selectById(userBenefits.getSkuId());
|
|
|
+ } else {
|
|
|
+ sku = goodsDonSkuMapper.selectById(orderPayRequest.getSkuId());
|
|
|
+ }
|
|
|
+ orderDon.setMoney(sku.getPrice());
|
|
|
+ orderDon.setOrderType(1);
|
|
|
+ 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, relation.getStartTime(), relation.getId());
|
|
|
+ String renewConfig = userBenefits.getRenewConfig();
|
|
|
+ List<UserBenefits.RenewConfig> renewConfigs = Jsons.parseList(renewConfig, UserBenefits.RenewConfig.class);
|
|
|
+ Integer start = userBenefits.getStartRenew();
|
|
|
+ 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));
|
|
|
+ //续费订单
|
|
|
+ orderDon.setOrderType(2);
|
|
|
+ }
|
|
|
+ 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());
|
|
|
+ orderDon.setIsNoLogin(false);
|
|
|
+
|
|
|
+ String customId = orderPayRequest.getCustomId();
|
|
|
+ Long yhsId = yhShopFrontService.checkShopCustomIdAndReturnShopId(customId);
|
|
|
+ orderDon.setYhsId(yhsId);
|
|
|
+ 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);
|
|
|
+
|
|
|
+ //订单金额为0 且订单为已完成
|
|
|
+ if (orderDon.getMoney().compareTo(BigDecimal.ZERO) == 0) {
|
|
|
+ // 更改订单状态
|
|
|
+ orderDon.setPayTime(DateTime.now());
|
|
|
+ unifiedHandlerOrderNotify(orderDon, goodsDon, sku);
|
|
|
+ }
|
|
|
return orderDon;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public UserPayEquipmentAvailableBenefits getComboOptionalTicketRecord(long userId, Long orderId) {
|
|
|
+ List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
|
|
|
+ UserPayEquipmentAvailableBenefits userPayEquipmentAvailableBenefits = userPayEquipmentAvailableBenefitsMapper.selectOne(Wrappers.lambdaQuery(UserPayEquipmentAvailableBenefits.class)
|
|
|
+ .eq(UserPayEquipmentAvailableBenefits::getRealOrderId, orderId)
|
|
|
+ .in(UserPayEquipmentAvailableBenefits::getUserId, userIdList)
|
|
|
+ .eq(UserPayEquipmentAvailableBenefits::getDeleted, 1)
|
|
|
+ .last("limit 1"));
|
|
|
+ return userPayEquipmentAvailableBenefits;
|
|
|
+ }
|
|
|
+
|
|
|
+ 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, null, null);
|
|
|
+ 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("你未完成该权益目标");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 试用车票跳转购买正式车票订单记录
|
|
|
*/
|