fix bug seller cancel concurrent buyer submit
Showing
1 changed file
with
37 additions
and
20 deletions
@@ -104,12 +104,12 @@ public class SellerOrderCancelService { | @@ -104,12 +104,12 @@ public class SellerOrderCancelService { | ||
104 | logger.warn("seller cancel orderCode illegal, req {}", event); | 104 | logger.warn("seller cancel orderCode illegal, req {}", event); |
105 | throw new ServiceException(ServiceError.ORDER_REQUEST_PARM_IS_EMPTY); | 105 | throw new ServiceException(ServiceError.ORDER_REQUEST_PARM_IS_EMPTY); |
106 | } | 106 | } |
107 | - OrderCodeType actor = OrderCodeType.getOrderCodeType(codeMeta.getType()); | ||
108 | - logger.info("in cancel uid {},orderCode {}, actor {}", uid, orderCode, actor); | 107 | + OrderCodeType codeType = OrderCodeType.getOrderCodeType(codeMeta.getType()); |
108 | + logger.info("in cancel uid {},orderCode {}, actor {}", uid, orderCode, codeType); | ||
109 | //case 1: 未支付时 | 109 | //case 1: 未支付时 |
110 | //case 2: 支付完成,没有买家下单 | 110 | //case 2: 支付完成,没有买家下单 |
111 | //case 3: 支付完成,有买家下单 | 111 | //case 3: 支付完成,有买家下单 |
112 | - cancel(uid, orderCode, actor); | 112 | + cancel(uid, orderCode, codeType); |
113 | } | 113 | } |
114 | 114 | ||
115 | private final static List<Integer> relatedBuyerStatusList = Arrays.asList(OrderStatus.WAITING_PAY.getCode(), | 115 | private final static List<Integer> relatedBuyerStatusList = Arrays.asList(OrderStatus.WAITING_PAY.getCode(), |
@@ -134,22 +134,22 @@ public class SellerOrderCancelService { | @@ -134,22 +134,22 @@ public class SellerOrderCancelService { | ||
134 | return buyerOrder; | 134 | return buyerOrder; |
135 | } | 135 | } |
136 | 136 | ||
137 | - public int cancel(int uid, long orderCode, OrderCodeType actor){ | 137 | + public int cancel(int uid, long orderCode, OrderCodeType codeType){ |
138 | int result = 0; | 138 | int result = 0; |
139 | SellerOrder sellerOrder = null; | 139 | SellerOrder sellerOrder = null; |
140 | BuyerOrder buyerOrder = null; | 140 | BuyerOrder buyerOrder = null; |
141 | Integer skup=null; | 141 | Integer skup=null; |
142 | //seller order code | 142 | //seller order code |
143 | - if (OrderCodeType.SELLER_TYPE.equals(actor)){ | 143 | + if (OrderCodeType.SELLER_TYPE.equals(codeType)){ |
144 | sellerOrder = sellerOrderMapper.selectByOrderCodeUid(orderCode, uid); | 144 | sellerOrder = sellerOrderMapper.selectByOrderCodeUid(orderCode, uid); |
145 | if (Objects.isNull(sellerOrder)){ | 145 | if (Objects.isNull(sellerOrder)){ |
146 | return result; | 146 | return result; |
147 | } | 147 | } |
148 | skup = sellerOrder.getSkup(); | 148 | skup = sellerOrder.getSkup(); |
149 | - buyerOrder = getBuyerOrderBySkup(skup, uid, orderCode, actor); | 149 | + buyerOrder = getBuyerOrderBySkup(skup, uid, orderCode, codeType); |
150 | } | 150 | } |
151 | //buyer order code | 151 | //buyer order code |
152 | - if (OrderCodeType.BUYER_TYPE.equals(actor)){ | 152 | + if (OrderCodeType.BUYER_TYPE.equals(codeType)){ |
153 | buyerOrder = buyerOrderMapper.selectByOrderCode(orderCode); | 153 | buyerOrder = buyerOrderMapper.selectByOrderCode(orderCode); |
154 | BuyerOrderGoods buyerOrderGoods = buyerOrderGoodsMapper.selectByOrderCode(buyerOrder.getUid(), orderCode); | 154 | BuyerOrderGoods buyerOrderGoods = buyerOrderGoodsMapper.selectByOrderCode(buyerOrder.getUid(), orderCode); |
155 | sellerOrder = sellerOrderMapper.selectBySkup(buyerOrderGoods.getSkup()); | 155 | sellerOrder = sellerOrderMapper.selectBySkup(buyerOrderGoods.getSkup()); |
@@ -187,7 +187,7 @@ public class SellerOrderCancelService { | @@ -187,7 +187,7 @@ public class SellerOrderCancelService { | ||
187 | //case 3: 支付完成,有买家下单 | 187 | //case 3: 支付完成,有买家下单 |
188 | if (SellerOrderStatus.HAS_PAYED.getCode() == status){ | 188 | if (SellerOrderStatus.HAS_PAYED.getCode() == status){ |
189 | logger.info("in seller cancel after paid, uid {} skup {} orderCode {}", uid, skup, orderCode); | 189 | logger.info("in seller cancel after paid, uid {} skup {} orderCode {}", uid, skup, orderCode); |
190 | - result = cancelAfterPayAction(sellerOrder, buyerOrder); | 190 | + result = cancelAfterPayAction(sellerOrder, buyerOrder, codeType); |
191 | } | 191 | } |
192 | 192 | ||
193 | return result; | 193 | return result; |
@@ -344,9 +344,15 @@ public class SellerOrderCancelService { | @@ -344,9 +344,15 @@ public class SellerOrderCancelService { | ||
344 | return result; | 344 | return result; |
345 | } | 345 | } |
346 | 346 | ||
347 | - | ||
348 | - | ||
349 | - private int cancelAfterPayExistBuyAction(SellerOrder sellerOrder, BuyerOrder buyerOrder){ | 347 | + /** |
348 | + * 卖家支付完成(上架成功),买家下单(状态未知) | ||
349 | + * | ||
350 | + * @param sellerOrder | ||
351 | + * @param buyerOrder | ||
352 | + * @param codeType | ||
353 | + * @return | ||
354 | + */ | ||
355 | + private int cancelAfterPayExistBuyAction(SellerOrder sellerOrder, BuyerOrder buyerOrder, OrderCodeType codeType){ | ||
350 | /** | 356 | /** |
351 | * case 3: 支付完成,有买家下单 | 357 | * case 3: 支付完成,有买家下单 |
352 | * actions as blow: | 358 | * actions as blow: |
@@ -356,16 +362,26 @@ public class SellerOrderCancelService { | @@ -356,16 +362,26 @@ public class SellerOrderCancelService { | ||
356 | * 4. 瓜分保证金 退货款 | 362 | * 4. 瓜分保证金 退货款 |
357 | */ | 363 | */ |
358 | Integer buyerOrderStatus = buyerOrder.getStatus(); | 364 | Integer buyerOrderStatus = buyerOrder.getStatus(); |
359 | - if (Objects.isNull(buyerOrderStatus) || !ActionStatusHold.sellerCanCancelBuyerOrder(buyerOrderStatus)){ | ||
360 | - throw new UfoServiceException(501, "买家支付中,不能取消"); | ||
361 | - } | ||
362 | - | ||
363 | final int sellerUid = sellerOrder.getUid(), buyerUid = buyerOrder.getUid(); | 365 | final int sellerUid = sellerOrder.getUid(), buyerUid = buyerOrder.getUid(); |
364 | final long sellerOrderCode = sellerOrder.getOrderCode(), buyerOrderCode = buyerOrder.getOrderCode(); | 366 | final long sellerOrderCode = sellerOrder.getOrderCode(), buyerOrderCode = buyerOrder.getOrderCode(); |
365 | - | ||
366 | logger.info("in seller cancel After Paid while Exist Buy Action, uid {}, orderCode {}, buyerOrderCode {}", | 367 | logger.info("in seller cancel After Paid while Exist Buy Action, uid {}, orderCode {}, buyerOrderCode {}", |
367 | sellerUid, sellerOrderCode, buyerOrderCode); | 368 | sellerUid, sellerOrderCode, buyerOrderCode); |
368 | - | 369 | + if (Objects.equals(buyerOrderStatus, OrderStatus.WAITING_PAY.getCode())){ |
370 | + logger.warn("cancelAfterPayExistBuyAction canceling order is waiting buyer pay, seller [uid:{} orderCode:{}],buyer [uid:{} orderCode:{}],buyerOrderStatus {}", | ||
371 | + sellerUid, sellerOrderCode, buyerUid, buyerOrderCode, buyerOrderStatus); | ||
372 | + throw new UfoServiceException(501, "买家支付中,不能取消"); | ||
373 | + } | ||
374 | + /** | ||
375 | + * 这种操作主要是买家下单 卖家停留在出售列表时的场景, | ||
376 | + * 此时此刻卖家不感知买家下单,不买了的入参是卖家订单号 | ||
377 | + * 根据codeType判断即可 | ||
378 | + */ | ||
379 | + if (OrderCodeType.getSellerTypes().contains(codeType)){ | ||
380 | + logger.warn("cancelAfterPayExistBuyAction canceling order buyer operated, seller [uid:{} orderCode:{}],buyer [uid:{} orderCode:{}] codeType {} buyerOrderStatus {}", | ||
381 | + sellerUid, sellerOrderCode, buyerUid, buyerOrderCode, codeType, buyerOrderStatus); | ||
382 | + String errorMsg = "您的商品已经被购买,不能下架该商品!"; | ||
383 | + throw new UfoServiceException(501, errorMsg); | ||
384 | + } | ||
369 | int result = 0; | 385 | int result = 0; |
370 | //actions of buyer order and related | 386 | //actions of buyer order and related |
371 | //update buyer Order | 387 | //update buyer Order |
@@ -433,7 +449,7 @@ public class SellerOrderCancelService { | @@ -433,7 +449,7 @@ public class SellerOrderCancelService { | ||
433 | return result; | 449 | return result; |
434 | } | 450 | } |
435 | 451 | ||
436 | - private int cancelAfterPayAction(SellerOrder sellerOrder, BuyerOrder buyerOrder){ | 452 | + private int cancelAfterPayAction(SellerOrder sellerOrder, BuyerOrder buyerOrder, OrderCodeType codeType){ |
437 | 453 | ||
438 | final int sellerUid = sellerOrder.getUid(); | 454 | final int sellerUid = sellerOrder.getUid(); |
439 | final long orderCode = sellerOrder.getOrderCode(); | 455 | final long orderCode = sellerOrder.getOrderCode(); |
@@ -463,8 +479,9 @@ public class SellerOrderCancelService { | @@ -463,8 +479,9 @@ public class SellerOrderCancelService { | ||
463 | * 4. 瓜分保证金 退货款给买家 | 479 | * 4. 瓜分保证金 退货款给买家 |
464 | */ | 480 | */ |
465 | //查询买家订单,状态是支付成功的 | 481 | //查询买家订单,状态是支付成功的 |
466 | - | ||
467 | - result = cancelAfterPayExistBuyAction(sellerOrder, buyerOrder); | 482 | + if (buyOrderCnt>0){ |
483 | + result = cancelAfterPayExistBuyAction(sellerOrder, buyerOrder, codeType); | ||
484 | + } | ||
468 | return result; | 485 | return result; |
469 | } | 486 | } |
470 | 487 |
-
Please register or login to post a comment