Bladeren bron

fix 虚拟实物多组合优惠加购

zoujiajian 3 jaren geleden
bovenliggende
commit
9ad09da3cc

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/OrderDiscountPlusPurchaseSkuRelation.java

@@ -22,4 +22,9 @@ public class OrderDiscountPlusPurchaseSkuRelation extends BaseEntity{
 	private String plusSkuIds;
 
 	private String relationIds;
+
+	/**
+	 * 额外订单ids
+	 */
+	private String plusOrderIds;
 }

+ 19 - 0
netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java

@@ -284,6 +284,13 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
         String refundType = refundReq.getRefundType();
         //校验订单是否符合退款
         checkOrderRefund(orderDon, goodsDon, sku, refundReq);
+        //空订单关闭
+        if (orderDon.getMoney().compareTo(BigDecimal.ZERO) == 0 && orderDon.getBalance().compareTo(BigDecimal.ZERO) == 0
+                && orderDon.getRelationId() == 0) {
+            orderDon.setStatus(OrderDon.Status.refund);
+            orderDonMapper.updateById(orderDon);
+            return;
+        }
         OrderDon.Type type = orderDon.getType();
         String outNo = StrUtil.EMPTY;
         if (type == OrderDon.Type.WeChat && !refundType.equals(OrderDon.Type.BALANCE.getType())) {
@@ -676,6 +683,18 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
                         } catch (Exception e) {
                         }
                     }
+                    String plusOrderIds = discountPlusPurchaseSkuRelation.getPlusOrderIds();
+                    if (StrUtil.isNotBlank(plusOrderIds)) {
+                        try {
+                            log.info("关闭优惠加购orderId:{}关联实物订单", orderDon.getId());
+                            List<Long> plusOrderIdList = Jsons.parseList(plusOrderIds, Long.class);
+                            orderDonMapper.update(null, Wrappers.lambdaUpdate(OrderDon.class)
+                                    .set(OrderDon::getStatus, OrderDon.Status.refund)
+                                    .in(OrderDon::getId, plusOrderIdList)
+                                    .ne(OrderDon::getStatus, OrderDon.Status.refund));
+                        } catch (Exception e) {
+                        }
+                    }
                 }
             }
         });

+ 52 - 14
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -296,9 +296,6 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 		List<Long> dpSkuIds = payRequest.getDpSkuIds();
 		if (CollUtil.isNotEmpty(dpSkuIds)) {
-			if (dpSkuIds.size() > 1) {
-				throw BusinessRuntimeException.getInstance("暂只支持优惠加购一件商品");
-			}
 			//是否满足关联
 			List<GoodsDiscountPlusPurchaseRelation> ds_relations = discountPlusPurchaseRelationMapper.selectList(Wrappers.lambdaQuery(GoodsDiscountPlusPurchaseRelation.class)
 					.eq(GoodsDiscountPlusPurchaseRelation::getSkuId, sku.getId())
@@ -608,11 +605,11 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			}
 		});
 
-		TASK_POOL.execute(()->{
+		TASK_POOL.execute(() -> {
 			try {
 				orderDonPostService.postData((order.getId()));
 			} catch (Exception e) {
-				log.error("回传错误 {}",StringUtil.getErrorText(e));
+				log.error("回传错误 {}", StringUtil.getErrorText(e));
 			}
 		});
 	}
@@ -959,11 +956,11 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			}
 		});
 
-		TASK_POOL.execute(()->{
+		TASK_POOL.execute(() -> {
 			try {
 				orderDonPostService.postData((orderDon.getId()));
 			} catch (Exception e) {
-				log.error("回传错误 {}",StringUtil.getErrorText(e));
+				log.error("回传错误 {}", StringUtil.getErrorText(e));
 			}
 		});
 	}
@@ -1236,19 +1233,39 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 						try {
 							List<Long> plusSkuIds = Jsons.parseList(plusSkuIdsStr, Long.class);
 							//发送优惠加购 规格车票
-							List<Long> dis_relation_ids = new ArrayList<>();
-							plusSkuIds.forEach(plus_skuId -> {
+							List<Long> dis_relation_ids = null;
+							List<Long> plus_order_ids = null;
+							OrderDonTransport orderDonTransport = null;
+							for (Long plus_skuId : plusSkuIds) {
 								GoodsDonSku plus_sku = goodsDonSkuMapper.selectById(plus_skuId);
 								if (plus_sku == null) {
 									log.error("订单id:{}优惠加购规格已被删除 skuId:{},车票未发送", order.getId(), plus_skuId);
 									return;
 								}
+								GoodsDon plus_goods = goodsDonMapper.selectById(plus_sku.getGoodsId());
+								if (plus_goods.getType() != 1) {
+									log.info("orderId:{}存在非虚拟规格加购,添加{}发货信息", order.getId(), plus_goods.getTitle());
+									if (plus_order_ids == null) {
+										plus_order_ids = new ArrayList<>();
+									}
+									if (orderDonTransport == null) {
+										orderDonTransport = transportMapper.selectOne(Wrappers.lambdaQuery(OrderDonTransport.class)
+												.eq(OrderDonTransport::getOrderId, order.getId()).last("limit 1"));
+									}
+									//生成实物订单 0元实物订单
+									createRealOrderAndTransport(order.getUserId(), orderDonTransport, plus_goods, plus_sku, plus_order_ids);
+									return;
+								}
+								if (dis_relation_ids == null) {
+									dis_relation_ids = new ArrayList<>();
+								}
 								GroupsRelation relationNoOrder = exchangeCodeService.getRelationNoOrder(plus_sku, order.getUserId());
 								dis_relation_ids.add(relationNoOrder.getId());
-							});
+							}
 							//保存订单关联优惠加购车票
 							orderDiscountPlusPurchaseSkuRelationMapper.update(null, Wrappers.lambdaUpdate(OrderDiscountPlusPurchaseSkuRelation.class)
-									.set(OrderDiscountPlusPurchaseSkuRelation::getRelationIds, dis_relation_ids.toString())
+									.set(CollUtil.isNotEmpty(dis_relation_ids), OrderDiscountPlusPurchaseSkuRelation::getRelationIds, dis_relation_ids.toString())
+									.set(CollUtil.isNotEmpty(plus_order_ids), OrderDiscountPlusPurchaseSkuRelation::getPlusOrderIds, plus_order_ids.toString())
 									.eq(OrderDiscountPlusPurchaseSkuRelation::getOrderId, order.getId())
 									.isNull(OrderDiscountPlusPurchaseSkuRelation::getRelationIds));
 						} catch (Exception e) {
@@ -1957,14 +1974,14 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			relation = groupRelationFrontService.getSimilarExpiredGroupRelation(sku.getId(), sku.getDays(), sku.getMonths(), null);
 			if (relation == null) {
 				//TODO 如果没指定座位,等待逻辑确认
-				GroupsTrips groups = groupsMapper.selectOne( Wrappers.lambdaQuery(GroupsTrips.class)
+				GroupsTrips groups = groupsMapper.selectOne(Wrappers.lambdaQuery(GroupsTrips.class)
 						.eq(GroupsTrips::getSkuId, sku.getId())
 						.gt(GroupsTrips::getAvailableNum, 0).last("limit 1")
 						.eq(GroupsTrips::getStatus, GroupsTrips.Status.validity)
 						.orderByAsc(GroupsTrips::getAvailableNum));
 				//待发车
 				if (groups == null) {
-					groups = groupsMapper.selectOne( Wrappers.lambdaQuery(GroupsTrips.class)
+					groups = groupsMapper.selectOne(Wrappers.lambdaQuery(GroupsTrips.class)
 							.eq(GroupsTrips::getSkuId, sku.getId())
 							.gt(GroupsTrips::getAvailableNum, 0).last("limit 1")
 							.eq(GroupsTrips::getStatus, GroupsTrips.Status.waiting)
@@ -2072,7 +2089,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 
 	@Override
-	public void orderNotify(OrderDon orderDon){
+	public void orderNotify(OrderDon orderDon) {
 		Long goodsId = orderDon.getGoodsId();
 		if (orderDon.getIsNoLogin()) {
 			orderDon.setExCode(exchangeCodeService.getExCode(goodsId, orderDon.getSkuId(), 1));
@@ -2133,4 +2150,25 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			}
 		});
 	}
+
+	/**
+	 * 生成实物订单
+	 */
+	public void createRealOrderAndTransport(Long userId, OrderDonTransport transport, GoodsDon goodsDon, GoodsDonSku sku, List<Long> plusOrderIds) {
+		OrderDon orderDon = new OrderDon();
+		orderDon.setUserId(userId);
+		orderDon.setRelationId(0l);
+		orderDon.setMoney(BigDecimal.ZERO);
+		orderDon.setIsDp(true);
+		orderDon.setSkuId(sku.getId());
+		orderDon.setGoodsId(goodsDon.getId());
+		orderDon.setPayTitle(goodsDon.getTitle() + sku.getSpecVal());
+		orderDon.setStatus(OrderDon.Status.hasPayment);
+		orderDonMapper.insert(orderDon);
+		//处理收货地址
+		transport.setOrderId(orderDon.getId());
+		transportMapper.insert(transport);
+
+		plusOrderIds.add(orderDon.getId());
+	}
 }