Authored by LUOXC

修复超时取消补偿BUG

package com.yohoufo.order.controller;
import com.yohobuy.ufo.model.order.bo.MerchantOrderAttachInfo;
import com.yohobuy.ufo.model.order.common.OrderStatus;
import com.yohobuy.ufo.model.order.constants.OrderConstant;
import com.yohobuy.ufo.model.user.resp.AuthorizeResultRespVO;
import com.yohoufo.common.ApiResponse;
import com.yohoufo.common.annotation.IgnoreSession;
... ... @@ -14,15 +16,14 @@ import com.yohoufo.dal.order.model.BuyerOrderGoods;
import com.yohoufo.dal.order.model.SellerOrder;
import com.yohoufo.dal.order.model.SellerWalletDetail;
import com.yohoufo.order.common.RefundCase;
import com.yohoufo.order.constants.AlarmConfig;
import com.yohoufo.order.event.BillLogEvent;
import com.yohoufo.order.event.BuyerRefundCouponEvent;
import com.yohoufo.order.model.request.OrderRequest;
import com.yohoufo.order.model.request.PaymentRequest;
import com.yohoufo.order.model.request.TransferMoneyRequest;
import com.yohoufo.order.service.IBuyerOrderService;
import com.yohoufo.order.service.impl.BuyerOrderCancelService;
import com.yohoufo.order.service.impl.PayRefundService;
import com.yohoufo.order.service.impl.PaymentServiceImpl;
import com.yohoufo.order.service.impl.TransferService;
import com.yohoufo.order.service.impl.*;
import com.yohoufo.order.service.pay.alipay.AlipayOuyinService;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
... ... @@ -66,21 +67,6 @@ public class OrderHelpController {
@Autowired
private BuyerOrderGoodsMapper buyerOrderGoodsMapper;
/**
* 转账
*/
@IgnoreSession
@IgnoreSignature
@InnerApi
@RequestMapping(value = "/transfer")
public ApiResponse transfer(@RequestBody TransferMoneyRequest req) {
return new ApiResponse.ApiResponseBuilder()
.code(200)
.message(transferService.transfer(req) ? "ok" : "ko")
.build();
}
@Data
public static class RefundEarnestMoneyRequest {
private Integer uid;
... ... @@ -91,57 +77,15 @@ public class OrderHelpController {
@IgnoreSession
@IgnoreSignature
@InnerApi
@RequestMapping(value = "/refundEarnestMoney")
public ApiResponse refundEarnestMoney(@RequestBody RefundEarnestMoneyRequest request) {
BuyerOrderGoods orderGoods = buyerOrderGoodsMapper.selectByOrderCode(request.getUid(), request.getOrderCode());
Integer skup = orderGoods.getSkup();
SellerOrder sellerOrder = sellerOrderMapper.selectBySkup(skup);
PaymentRequest refundReq = PaymentRequest.builder()
.uid(sellerOrder.getUid())
.refundCase(RefundCase.SELLER_EARNEST_MONEY)
.orderCode(sellerOrder.getOrderCode())
.refundAmount(request.getRefundAmount().doubleValue())
.refundattch(MerchantOrderAttachInfo.builder().type(SellerWalletDetail.Type.SELLER_CAN_NOT_SEND_OUT.getValue()).build())
.build();
BillLogEvent.BillLogEventBuilder bleBuilder = BillLogEvent.builder()
.buyerUid(request.getUid())
.sellerUid(sellerOrder.getUid())
.orderCode(sellerOrder.getOrderCode())
.payType(sellerOrder.getPayment())
.refundCase(RefundCase.SELLER_EARNEST_MONEY)
.amount(request.getRefundAmount())
.skup(skup);
return new ApiResponse.ApiResponseBuilder()
.code(200)
.data(payRefundService.refund(refundReq, bleBuilder))
.message("处理成功")
.build();
}
/**
* 转账
*/
@IgnoreSession
@IgnoreSignature
@InnerApi
@RequestMapping(value = "/transAllEarnest")
public ApiResponse transAllEarnest(@RequestBody TransferAllEarnestRequest req) {
@RequestMapping(value = "/cancelForSellerSendOutTimeoutCompensation")
public ApiResponse refundEarnestMoney(@RequestBody OrderRequest request) {
buyerOrderCancelService.cancelForSellerSendOutTimeoutCompensation(request.getUid(), request.getOrderCode());
return new ApiResponse.ApiResponseBuilder()
.code(200)
.message(transferService.transAllEarnest(req.getOrderCode(), req.getUid(), req.getAmount(), req.getAliPayAccount()) ? "ok" : "ko")
.message("ok")
.build();
}
@Data
public static class TransferAllEarnestRequest {
long orderCode;
Integer uid;
BigDecimal amount;
AuthorizeResultRespVO aliPayAccount;
}
@RequestMapping(value = "/transferQueryAsOriginalResult")
public ApiResponse transferQuery(@RequestBody List<String> orderCodes) {
val result = orderCodes.stream().map(alipayService::transferQueryAsOriginalResult).collect(Collectors.toList());
... ...
... ... @@ -274,6 +274,35 @@ public class BuyerOrderCancelService {
.cancel();
}
/**
* 2020-03-13超时取消BUG修复数据使用
*
* @param uid
* @param orderCode
*/
public void cancelForSellerSendOutTimeoutCompensation(int uid, long orderCode) {
new BuyerOrderCancelHandler(uid, orderCode)
.withBuyerOrderSupplier(buyerOrderMapper, buyerOrderGoodsMapper)
.withSellerOrderSupplier(sellerOrderGoodsMapper, sellerOrderMetaMapper)
// 超时未发货取消 -> 超时未发货取消
.withStateTransition(OrderStatus.SEND_OUT_TIMEOUT, OrderStatus.SEND_OUT_TIMEOUT, null)
// 保证金分账给平台和买家
.withTransferEarnestMoney2Buyer(transferService, SellerWalletDetail.Type.SELLER_OVER_TIME)
// 退买家货款
.withRefundGoodsMoney(payRefundService::refund).refundCase(RefundCase.BUYER_GOODS_MONEY).and()
// 通知卖家商品发货超时
.withNoticeSeller((soa, buyerOrder) -> sellerNoticeFacade.sellerDeliverWithTimes(soa, buyerOrder, OrderConstant.SellerDeliverNotice.TIME_OF_CANCELED, 0, null)).and()
// 通知买家卖家商品发货超时
.withNoticeBuyer(buyerNoticeFacade::noticeBuyerOfSellerSendOutTimeout).and()
// 退优惠券
.withRefundCoupon(BuyerRefundCouponEvent.BizCase.SELLER_DELIVER_TIMEOUT)
.withCacheCleaner(cacheCleaner::delete)
.withFailAlarm(AlarmConfig.DELIVER_TIME_OUT)
.withOrderChangeListenerContainer(orderChangeListenerContainer)
.cancel();
}
public void cancelForSellerShamSendOut(int uid, long orderCode, OrderStatus targetStatus) {
if (serviceOrderProcessor.isGoodsServiceOrder(orderCode)) {
... ... @@ -317,9 +346,9 @@ public class BuyerOrderCancelService {
.withStateTransition(OrderStatus.HAS_PAYED, OrderStatus.SELLER_CAN_NOT_SEND_OUT, orderStatusFlowService)
// 退保证金给卖家
.withRefundEarnestMoney(payRefundService::refund, sellerOrderMapper::selectBySkup)
.refundCase(RefundCase.SELLER_EARNEST_MONEY)
.sellerWalletDetailType(SellerWalletDetail.Type.SELLER_CAN_NOT_SEND_OUT)
.and()
.refundCase(RefundCase.SELLER_EARNEST_MONEY)
.sellerWalletDetailType(SellerWalletDetail.Type.SELLER_CAN_NOT_SEND_OUT)
.and()
// 退买家货款
.withRefundGoodsMoney(payRefundService::refund).refundCase(RefundCase.BUYER_GOODS_MONEY).and()
// 通知买家卖家无法发货
... ... @@ -392,7 +421,7 @@ public class BuyerOrderCancelService {
inBoxFacade.buyerCancelBeforeDepotReceive(buyerOrder, penaltyAmount.toPlainString(), psog, useDepositGoods);
}
if (fastDeliveryProxyService.isFastDeliveryGoods(skup)){
if (fastDeliveryProxyService.isFastDeliveryGoods(skup)) {
fastDeliveryProxyService.cancel(psog.getUid(), skup, true);
}
... ... @@ -442,7 +471,7 @@ public class BuyerOrderCancelService {
int rows = buyerOrderMapper.updateStatusWithStatusList(orderCode, targetStatus.getCode(), statusList, DateUtil.getCurrentTimeSecond());
logger.info("in buyer order cancelByCS because pull wool, req {} updateStatusWithStatusList {}", request, rows);
if (rows > 0) {
asyncRefundSellerCoupon(pbo.getOrderCode(),targetStatus, preparedData.getSellerOrderGoods());
asyncRefundSellerCoupon(pbo.getOrderCode(), targetStatus, preparedData.getSellerOrderGoods());
asyncProcessPenalty(preparedData, targetStatus);
//clean cache
cacheCleaner.cleanSellerAndBuyerOrderDetailAndList(pbo.getSellerUid(), pbo.getUid(), orderCode);
... ... @@ -686,7 +715,7 @@ public class BuyerOrderCancelService {
}
public void asyncRefundSellerCoupon(long orderCode, OrderStatus targetStatus, SellerOrderGoods sellerOrderGoods){
public void asyncRefundSellerCoupon(long orderCode, OrderStatus targetStatus, SellerOrderGoods sellerOrderGoods) {
sellerOrderServiceDelegate.getSellerOrderService()
.asyncCancelWithCouponIfPresent(orderCode, targetStatus.getCode(), sellerOrderGoods);
}
... ...