Authored by TANLING

fix fast delivery

... ... @@ -42,6 +42,7 @@ public class OrderBuilderFactory {
SkupType skupType = chargeGoods.getSkupType();
Integer businessClientCode = OrderAssist.findBusinessClientCode(businessClient);
return OrderBuilder.builder()
.productCode(chargeGoods.getShoppingProductInfo().getProductCode())
.uid(uid)
.skup(psog.getId())
.depositCode(goodsPrepareData.getDepositCode())
... ...
... ... @@ -20,6 +20,7 @@ import java.util.List;
@ToString
public class OrderBuilder {
String productCode;
int skup;
String depositCode;
int productId;
... ...
... ... @@ -16,6 +16,7 @@ import com.yohobuy.ufo.model.order.constants.DepotType;
import com.yohobuy.ufo.model.order.constants.OrderConstant;
import com.yohobuy.ufo.model.order.constants.SkupType;
import com.yohobuy.ufo.model.order.req.SellerDeliverToDepotReq;
import com.yohobuy.ufo.model.order.resp.FastDeliveryReq;
import com.yohoufo.common.alarm.EventBusPublisher;
import com.yohoufo.common.utils.DateUtil;
import com.yohoufo.dal.order.BuyerOrderGoodsMapper;
... ... @@ -206,7 +207,13 @@ public class BuyerOrderPaymentService extends AbstractOrderPaymentService {
try{
retryer.call(()->{
// 同时生成物流单号,通知第三方发货
fastDeliveryProxyService.delivery(orderInfo.getSellerUid(), orderInfo.getSkup(), wayBillCode, orderInfo.getOrderCode());
FastDeliveryReq fastDeliveryReq = FastDeliveryReq.builder()
.sellerUid(orderInfo.getSellerUid())
.skup(orderInfo.getSkup())
.waybillCode(wayBillCode)
.orderCode(orderInfo.getOrderCode())
.build();
fastDeliveryProxyService.delivery(fastDeliveryReq);
return null;
});
}catch (Exception e){
... ...
... ... @@ -13,6 +13,7 @@ import com.yohobuy.ufo.model.order.constants.CustomsClearanceResultType;
import com.yohobuy.ufo.model.order.constants.OrderConstant;
import com.yohobuy.ufo.model.order.constants.RegionEnum;
import com.yohobuy.ufo.model.order.req.BuyerOrderCancelReq;
import com.yohobuy.ufo.model.order.resp.FastDeliveryReq;
import com.yohobuy.ufo.model.promotion.request.CouponSendMqBean;
import com.yohoufo.common.alarm.EventBusPublisher;
import com.yohoufo.common.alarm.UfoInfluxdbEvent;
... ... @@ -393,7 +394,8 @@ public class BuyerOrderCancelService {
}
if (fastDeliveryProxyService.isFastDeliveryGoods(skup)) {
fastDeliveryProxyService.cancel(psog.getUid(), skup, true);
FastDeliveryReq req = FastDeliveryReq.builder().sellerUid(psog.getUid()).skup(skup).needReShelves(true).build();
fastDeliveryProxyService.cancel(req);
}
//整个过程异步去执行(考虑退费依赖订单状态)
... ...
... ... @@ -11,6 +11,7 @@ import com.yohobuy.ufo.model.order.req.BuyerOrderCancelReq;
import com.yohobuy.ufo.model.order.req.BuyerOrderMetaUpdateReq;
import com.yohobuy.ufo.model.order.req.SellerDeliverToDepotReq;
import com.yohobuy.ufo.model.order.resp.BuyerOrderNums;
import com.yohobuy.ufo.model.order.resp.FastDeliveryReq;
import com.yohobuy.ufo.model.order.vo.AddressInfo;
import com.yohoufo.common.alarm.EventBusPublisher;
import com.yohoufo.common.exception.UfoServiceException;
... ... @@ -452,7 +453,7 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
// 急速发货的场合,取消订单
if (fastDeliveryProxyService.isFastDeliveryGoods(skup)){
fastDeliveryProxyService.cancel(psog.getUid(), skup, false);
fastDeliveryProxyService.cancel(FastDeliveryReq.builder().sellerUid(psog.getUid()).skup(skup).needReShelves(false).build());
}
//如有用券则退券
... ...
... ... @@ -9,6 +9,7 @@ import com.yoho.error.ServiceError;
import com.yoho.error.exception.ServiceException;
import com.yohobuy.ufo.model.order.common.OrderAttributes;
import com.yohobuy.ufo.model.order.common.OrderStatus;
import com.yohobuy.ufo.model.order.resp.FastDeliveryReq;
import com.yohobuy.ufo.model.promotion.response.promotionActivity.PromotionActivityRspBo;
import com.yohoufo.common.alarm.CommonAlarmEventPublisher;
import com.yohoufo.common.exception.UfoServiceException;
... ... @@ -85,7 +86,14 @@ public class SubmitOrderServiceImpl implements ISubmitOrderService {
// 极速发货通知第三方
if (orderBuilder.getOriginalAttributes() == OrderAttributes.FAST_DELIVERY.getCode()){
fastDeliveryProxyService.lockSkup(orderBuilder.getSellerOrderGoods().getUid(), orderBuilder.getSkup());
FastDeliveryReq fastDeliveryReq = FastDeliveryReq.builder()
.price(orderBuilder.getSellerOrderGoods().getGoodsPrice())
.productCode(orderBuilder.getProductCode())
.sizeName(orderBuilder.getSellerOrderGoods().getSizeName())
.sellerUid(orderBuilder.getSellerOrderGoods().getUid())
.skup(orderBuilder.getSkup()).build();
fastDeliveryProxyService.lockSkup(fastDeliveryReq);
}
tryLockDepositGoodsIf(orderBuilder);
... ... @@ -136,7 +144,7 @@ public class SubmitOrderServiceImpl implements ISubmitOrderService {
productProxyService.returnStorage(orderBuilder.getSkup());
if (fastDeliveryProxyService.isFastDeliveryGoods(orderBuilder.getSkup())){
fastDeliveryProxyService.cancel(orderBuilder.getSellerOrderGoods().getUid(), orderBuilder.getSkup(), false);
fastDeliveryProxyService.cancel(FastDeliveryReq.builder().sellerUid(orderBuilder.getUid()).skup(orderBuilder.getSkup()).needReShelves(false).build());
}
}catch (Exception ex0){
... ...
... ... @@ -4,9 +4,9 @@ import com.alibaba.fastjson.JSONObject;
import com.yoho.core.config.ConfigReader;
import com.yoho.error.exception.ServiceException;
import com.yohobuy.ufo.model.order.common.OrderAttributes;
import com.yohobuy.ufo.model.order.resp.FastDeliveryReq;
import com.yohobuy.ufo.model.order.resp.FastDeliverySellerAccessInfo;
import com.yohoufo.common.ApiResponse;
import com.yohoufo.common.utils.StringUtil;
import com.yohoufo.dal.order.SellerOrderGoodsMapper;
import com.yohoufo.dal.order.model.SellerOrderGoods;
import org.apache.commons.lang3.StringUtils;
... ... @@ -29,7 +29,7 @@ public class FastDeliveryProxyService {
private final Logger logger = LoggerFactory.getLogger(getClass());
public FastDeliverySellerAccessInfo getFastDeliverySellerInfo(int sellerUid){
public FastDeliverySellerAccessInfo getConfigBySellerUid(int sellerUid){
String sellerAccessInfoJSON = configReader.getString("ufo.fast.delivery.seller.access.info", "");
if (StringUtils.isNotBlank(sellerAccessInfoJSON)){
... ... @@ -37,7 +37,7 @@ public class FastDeliveryProxyService {
JSONObject jsonObject = JSONObject.parseObject(sellerAccessInfoJSON);
return jsonObject.getObject(String.valueOf(sellerUid), FastDeliverySellerAccessInfo.class);
}catch (Exception e){
logger.warn("getFastDeliverySellerInfo error {}", e);
logger.warn("getConfigBySellerUid error {}", e);
}
}
... ... @@ -57,25 +57,27 @@ public class FastDeliveryProxyService {
* @param skup
* @return
*/
public ApiResponse lockSkup(int sellerUid, int skup) {
if (!isOnToThird()) {
public ApiResponse lockSkup(FastDeliveryReq fastDeliveryReq) {
if (!isOnToThird() || fastDeliveryReq.getSellerUid()==0 ||fastDeliveryReq.getSkup() == 0) {
return new ApiResponse();
}
FastDeliverySellerAccessInfo sellerAccessInfo = getFastDeliverySellerInfo(sellerUid);
FastDeliverySellerAccessInfo sellerAccessInfo = getConfigBySellerUid(fastDeliveryReq.getSellerUid());
if (sellerAccessInfo == null || StringUtils.isEmpty(sellerAccessInfo.getLockSkupUrl())) {
return new ApiResponse();
}
logger.info("fast delivery lockSkup, skup {}, url {}", skup, sellerAccessInfo.getLockSkupUrl());
fastDeliveryReq.setYhSecret(sellerAccessInfo.getYhSecret());
logger.info("[{}],[{}] start fast delivery lockSkup, url {}, body {}", fastDeliveryReq.getSellerUid(),
fastDeliveryReq.getSkup(), sellerAccessInfo.getLockSkupUrl(), fastDeliveryReq);
ApiResponse result = null;
try{
result = baseServiceCaller.doPost("fast.delivery.lockSkup", sellerAccessInfo.getLockSkupUrl(),
getParam(skup, null, null, sellerAccessInfo.getYhSecret()));
result = baseServiceCaller.doPost("fast.delivery.lockSkup", sellerAccessInfo.getLockSkupUrl(), fastDeliveryReq);
}catch (Exception e){
throw new ServiceException(403, "扣减库存失败");
}
logger.info("fast delivery lockSkup, skup {}, result {}", skup, result);
logger.info("[{}],[{}] end fast delivery lockSkup, result {}", fastDeliveryReq.getSellerUid(), fastDeliveryReq.getSkup(), result);
return result;
}
... ... @@ -86,21 +88,21 @@ public class FastDeliveryProxyService {
* @param waybillCode
* @return
*/
public ApiResponse delivery(int sellerUid, int skup, String waybillCode, Long orderCode){
if (!isOnToThird()){
public ApiResponse delivery(FastDeliveryReq fastDeliveryReq){
if (!isOnToThird()|| fastDeliveryReq.getSellerUid()==0 ||fastDeliveryReq.getSkup() == 0){
return new ApiResponse();
}
FastDeliverySellerAccessInfo sellerAccessInfo = getFastDeliverySellerInfo(sellerUid);
FastDeliverySellerAccessInfo sellerAccessInfo = getConfigBySellerUid(fastDeliveryReq.getSellerUid());
if (sellerAccessInfo == null || StringUtils.isEmpty(sellerAccessInfo.getDeliveryUrl()) ){
return new ApiResponse();
}
fastDeliveryReq.setYhSecret(sellerAccessInfo.getYhSecret());
logger.info("fast delivery delivery, skup {}, url {}", skup, sellerAccessInfo.getDeliveryUrl());
ApiResponse result = baseServiceCaller.doPost("fast.delivery.delivery", sellerAccessInfo.getDeliveryUrl(),
getParam(skup, waybillCode,orderCode, sellerAccessInfo.getYhSecret()));
logger.info("fast delivery delivery, skup {}, result {}", skup, result);
logger.info("[{}],[{}] start fast delivery delivery, url {}, body {}", fastDeliveryReq.getSellerUid(), fastDeliveryReq.getSkup(), sellerAccessInfo.getDeliveryUrl());
ApiResponse result = baseServiceCaller.doPost("fast.delivery.delivery", sellerAccessInfo.getDeliveryUrl(), fastDeliveryReq);
logger.info("[{}],[{}] end fast delivery delivery, result {}", fastDeliveryReq.getSellerUid(), fastDeliveryReq.getSkup(), result);
return result;
}
... ... @@ -112,24 +114,24 @@ public class FastDeliveryProxyService {
* @param needReShelves 是否需要重新上架
* @return
*/
public ApiResponse cancel(int sellerUid, int skup, boolean needReShelves){
if (!isOnToThird()){
public ApiResponse cancel(FastDeliveryReq fastDeliveryReq){
if (!isOnToThird() || fastDeliveryReq.getSellerUid()==0 ||fastDeliveryReq.getSkup() == 0){
return new ApiResponse();
}
FastDeliverySellerAccessInfo sellerAccessInfo = getFastDeliverySellerInfo(sellerUid);
FastDeliverySellerAccessInfo sellerAccessInfo = getConfigBySellerUid(fastDeliveryReq.getSellerUid());
if (sellerAccessInfo == null || StringUtils.isEmpty(sellerAccessInfo.getUnlockSkupUrl())){
return new ApiResponse();
}
logger.info("fast delivery cancel, skup {}, url {}", skup, sellerAccessInfo.getUnlockSkupUrl());
fastDeliveryReq.setYhSecret(sellerAccessInfo.getYhSecret());
logger.info("[{}],[{}] start fast delivery cancel, url {}, body {}", fastDeliveryReq.getSellerUid(), sellerAccessInfo.getUnlockSkupUrl());
JSONObject param = getParam(skup, null, null, sellerAccessInfo.getYhSecret());
param.put("needReShelves", needReShelves);
ApiResponse result = baseServiceCaller.doPost("fast.delivery.cancel", sellerAccessInfo.getUnlockSkupUrl(),
param);
logger.info("fast delivery cancel, skup {}, result {}", skup, result);
fastDeliveryReq);
logger.info("[{}],[{}] end fast delivery cancel, result {}", fastDeliveryReq.getSellerUid(), fastDeliveryReq.getSkup(), result);
return result;
}
... ... @@ -161,21 +163,6 @@ public class FastDeliveryProxyService {
}
public static JSONObject getParam(int skup, String waybillCode, Long orderCode, String yhSecret){
JSONObject param = new JSONObject();
param.put("yhSecret", yhSecret);
param.put("skup", skup);
if (StringUtils.isNoneBlank(waybillCode)){
param.put("waybill_code", waybillCode);
}
if (orderCode != null){
param.put("order_code", orderCode);
}
return param;
}
/**
* 判定该skup是否是极速发货的商品
* @param skup
... ...
... ... @@ -595,6 +595,7 @@ public class ProductProxyService extends AbsProxyService{
.brandId(productInfo.getBrandId())
.seriesId(productInfo.getSeriesId())
.categoryId(productInfo.getMidSortId())
.productCode(productInfo.getProductCode())
.build();
return shoppingProductInfo;
}
... ...