Authored by chenchao

record customs clearance fail reason

... ... @@ -37,4 +37,6 @@ public interface MetaKey {
* 买家取消罚款
*/
String BUYER_CANCEL_PENALTY = "cancel_penalty";
String CUSTOMS_CLEARANCE = "customs_clearance";
}
... ...
... ... @@ -165,7 +165,7 @@ public class ErpGWOrderController {
@RequestMapping(value = "/cancelOverseasOrderForBuyerClearFail")
public ApiResponse cancelOverseasOrderForBuyerClearFail(@RequestBody BuyerOrderCancelReq request) {
LOG.info("api cancelClearFailOrderManual in, req is {}", request);
buyerOrderCancelService.cancelOverseasOrder(request.getOrderCode(), CutomsClearanceFailType.BUYER);
buyerOrderCancelService.cancelOverseasOrder(request.getOrderCode(), request.getCancelReason(), CutomsClearanceFailType.BUYER);
LOG.info("api cancelClearFailOrderManual out, req is {}", request);
return new ApiResponse.ApiResponseBuilder().code(200).message("取消海外直邮订单成功").build();
}
... ... @@ -193,7 +193,7 @@ public class ErpGWOrderController {
LOG.warn("in api cancelOverseasOrder CutomsClearanceFailType null, req {}", request);
return new ApiResponse.ApiResponseBuilder().code(400).message("param cancelType wrong").build();
}
buyerOrderCancelService.cancelOverseasOrder(request.getOrderCode(), ccft);
buyerOrderCancelService.cancelOverseasOrder(request.getOrderCode(), request.getCancelReason(), ccft);
LOG.info("api cancelOverseasOrder out, req is {}", request);
return new ApiResponse.ApiResponseBuilder().code(200).message("取消海外直邮订单成功").build();
}
... ...
... ... @@ -87,7 +87,7 @@ public class ExpressInfoController {
}
/**
* 鉴定中心地址
* 通知鉴定中心地址变更
* @param uid uid
* @return
*/
... ... @@ -96,7 +96,7 @@ public class ExpressInfoController {
@RequestParam(value="orderCode")Long orderCode) {
LOG.info("method=ufo.order.noticeAppraiseAddressChanged in, uid {}, orderCode {}", uid, orderCode);
AppraiseAddressResp appraiseAddressResp = expressInfoService.noticeAppraiseAddressChanged(uid, orderCode);
AppraiseAddressResp appraiseAddressResp = null;//expressInfoService.noticeAppraiseAddressChanged(uid, orderCode);
return new ApiResponse.ApiResponseBuilder().code(200).data(appraiseAddressResp).build();
}
}
... ...
package com.yohoufo.order.service;
import com.yohobuy.ufo.model.order.bo.CustomsClearanceResult;
import com.yohobuy.ufo.model.order.req.BuyerOrderMetaUpdateReq;
import com.yohobuy.ufo.model.order.vo.AddressInfo;
... ... @@ -11,4 +12,6 @@ public interface IBuyerOrderMetaService {
AddressInfo getAddressInfo(int uid, long orderCode);
AddressInfo getHiddenAddressInfo(int uid, long orderCode);
CustomsClearanceResult getCustomsClearanceResult(int uid, long orderCode);
}
... ...
... ... @@ -233,10 +233,30 @@ public abstract class AbsOrderDetailService extends AbsOrderViewService implemen
//user address
orderDetailInfo.setUserAddress(userAddress);
//
OrderDetailInfo.PriceInfo priceInfo = buildPriceInfo(buyerOrder, buyerOrderGoods, buildNode.buyerOrderMetas);
orderDetailInfo.setPriceInfo(priceInfo);
// 支付状态
setPayment(orderDetailInfo, buyerOrder.getPayment());
orderDetailInfo.setCreateTime(DateUtil.formatDate(buyerOrder.getCreateTime(), DateUtil.yyyy_MM_dd_HH_mm_SS));
orderDetailInfo.setSecendLevelCreateTime(buyerOrder.getCreateTime());
// 需要查询 时间点 and 物流定位
orderDetailInfo.setLastExpressInfo(buildNode.lastEID);
//只有卖家在查看买家的订单时才有
assembleSoldPrdCompute(orderDetailInfo, buyerOrder.getSellerUid(), buyerOrderGoods.getSkup());
orderDetailInfo.setAppraiseVideoUrl(buildNode.appraiseVideoUrl);
orderDetailInfo.setAttributes(buyerOrder.getAttributes());
orderDetailInfo.setIsAdvance(OrderAssist.getOrderIsAdvance(buyerOrder.getAttributes()));
return orderDetailInfo;
}
OrderDetailInfo.PriceInfo buildPriceInfo(BuyerOrder buyerOrder, BuyerOrderGoods buyerOrderGoods, List<BuyerOrderMeta> buyerOrderMetas){
OrderDetailInfo.PriceInfo priceInfo;
//订单金额明细
Optional<BuyerOrderMeta> buyerAmountDetailMetaOptional = buildNode.buyerOrderMetas.stream().filter(meta -> StringUtils.equals(meta.getMetaKey(), MetaKey.AMOUNT_DETAIL)).findFirst();
Optional<BuyerOrderMeta> buyerAmountDetailMetaOptional = buyerOrderMetas.stream()
.filter(meta -> StringUtils.equals(meta.getMetaKey(), MetaKey.AMOUNT_DETAIL))
.findFirst();
if (buyerAmountDetailMetaOptional.isPresent()) {
AmountDetailBo amountDetailBo = BuyerOrderMetaMapperSupport.convert(buyerAmountDetailMetaOptional.get(), AmountDetailBo.class);
... ... @@ -271,22 +291,11 @@ public abstract class AbsOrderDetailService extends AbsOrderViewService implemen
.realPayPrice(buyerOrder.getAmount() == null ? "0" : buyerOrder.getAmount().toPlainString())
.build();
}
orderDetailInfo.setPriceInfo(priceInfo);
// 支付状态
setPayment(orderDetailInfo, buyerOrder.getPayment());
orderDetailInfo.setCreateTime(DateUtil.formatDate(buyerOrder.getCreateTime(), DateUtil.yyyy_MM_dd_HH_mm_SS));
orderDetailInfo.setSecendLevelCreateTime(buyerOrder.getCreateTime());
// 需要查询 时间点 and 物流定位
orderDetailInfo.setLastExpressInfo(buildNode.lastEID);
//只有卖家在查看买家的订单时才有
assembleSoldPrdCompute(orderDetailInfo, buyerOrder.getSellerUid(), buyerOrderGoods.getSkup());
orderDetailInfo.setAppraiseVideoUrl(buildNode.appraiseVideoUrl);
orderDetailInfo.setAttributes(buyerOrder.getAttributes());
orderDetailInfo.setIsAdvance(OrderAssist.getOrderIsAdvance(buyerOrder.getAttributes()));
return orderDetailInfo;
return priceInfo;
}
/**
* 商品信息
* @param sellerOrderGoods
... ...
package com.yohoufo.order.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.yoho.core.rabbitmq.YhProducer;
import com.yohobuy.ufo.model.order.bo.CustomsClearanceResult;
import com.yohobuy.ufo.model.order.bo.MerchantOrderAttachInfo;
import com.yohobuy.ufo.model.order.common.OrderStatus;
import com.yohobuy.ufo.model.order.common.SellerOrderStatus;
import com.yohobuy.ufo.model.order.common.SkupStatus;
import com.yohobuy.ufo.model.order.common.TabType;
import com.yohobuy.ufo.model.order.constants.CustomsClearanceResultType;
import com.yohobuy.ufo.model.order.constants.RegionEnum;
import com.yohobuy.ufo.model.promotion.request.CouponSendMqBean;
import com.yohoufo.common.alarm.EventBusPublisher;
... ... @@ -21,6 +24,7 @@ import com.yohoufo.order.common.RefundCase;
import com.yohoufo.order.common.TransferCase;
import com.yohoufo.order.constants.AlarmConfig;
import com.yohoufo.order.constants.CutomsClearanceFailType;
import com.yohoufo.order.constants.MetaKey;
import com.yohoufo.order.event.*;
import com.yohoufo.order.model.PayRefundBo;
import com.yohoufo.order.model.dto.BuyerPenaltyCalResult;
... ... @@ -47,6 +51,7 @@ import lombok.Data;
import lombok.Setter;
import lombok.val;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
... ... @@ -115,6 +120,9 @@ public class BuyerOrderCancelService {
@Autowired
private OrderChangeListenerContainer orderChangeListenerContainer;
@Autowired
private BuyerOrderMetaMapper buyerOrderMetaMapper;
@Resource(name = "tradeMqProducer")
private YhProducer tradeMqProducer;
... ... @@ -332,14 +340,22 @@ public class BuyerOrderCancelService {
}
public void cancelOverseasOrder(long orderCode, CutomsClearanceFailType failType){
logger.info("step in cancelOverseasOrder orderCode {} CutomsClearanceFailType {}", orderCode, failType);
public void cancelOverseasOrder(long orderCode, String failReason, CutomsClearanceFailType failType){
logger.info("step in cancelOverseasOrder orderCode {} CutomsClearanceFailType {} failReason {}",
orderCode, failType, failReason);
if (failType == null){
logger.warn("in cancelOverseasOrder failType null, orderCode {}", orderCode);
return;
}
if (orderCode<= 0L){
logger.warn("in cancelOverseasOrder order code illegal, orderCode {}", orderCode);
return;
}
if (StringUtils.isBlank(failReason)){
logger.warn("in cancelOverseasOrder failReason illegal, orderCode {} failReason {}", orderCode, failReason);
return;
}
BuyerOrder buyerOrder = buyerOrderMapper.selectOnlyByOrderCode(orderCode);
if (buyerOrder == null){
logger.warn("in cancelOverseasOrder buyer Order not exist, orderCode {} CutomsClearanceFailType {}", orderCode, failType);
... ... @@ -381,6 +397,8 @@ public class BuyerOrderCancelService {
logger.warn("cancelOverseasOrder fail -> buyerOrderMapper.updateStatusByOrderCode, orderCode {}", orderCode);
return;
}
saveFailRecord(orderCode, failReason);
int sellerUid = buyerOrder.getSellerUid();
//clean cache
cacheCleaner.delete(Arrays.asList(CacheKeyBuilder.orderListKey(sellerUid, TabType.SELL.getValue()),
... ... @@ -414,6 +432,18 @@ public class BuyerOrderCancelService {
orderStatusFlowService.addAsy(orderCode,targetStatus.getCode());
}
private int saveFailRecord(long orderCode, String failReason){
BuyerOrderMeta record = new BuyerOrderMeta();
record.setOrderCode(orderCode);
record.setMetaKey(MetaKey.CUSTOMS_CLEARANCE);
CustomsClearanceResult ccr = CustomsClearanceResult.builder()
.type(CustomsClearanceResultType.fail.getCode())
.failReason(failReason)
.build();
record.setMetaValue(JSONObject.toJSONString(ccr));
return buyerOrderMetaMapper.insert(record);
}
/**
* 平台原因失败
* 货品平台自己吃了
... ...
package com.yohoufo.order.service.impl;
import com.yohobuy.ufo.model.order.bo.CustomsClearanceResult;
import com.yohobuy.ufo.model.order.bo.TimeoutBo;
import com.yohobuy.ufo.model.order.common.OrderAttributes;
import com.yohobuy.ufo.model.order.common.OrderStatus;
... ... @@ -131,6 +132,18 @@ public class BuyerOrderDetailService extends AbsOrderDetailService implements IO
formatParms[0] = tradeBillsService.queryBuyerPenaltyAmount(buyerOrder.getOrderCode());
detailDesc = MessageFormatter.arrayFormat(temp, formatParms).getMessage();
}
if (orderStatus == OrderStatus.BUYER_BLOWN_CUSTOMS_CLEARANCE.getCode()){
CustomsClearanceResult ccr;
if(Objects.nonNull(ccr=buyerOrderMetaService.getCustomsClearanceResult(buyerOrder.getUid(), buyerOrder.getOrderCode()))){
formatParms[0] = ccr.getFailReason();
detailDesc = MessageFormatter.arrayFormat(temp, formatParms).getMessage();
}else{
detailDesc = "清关不通过,已自动取消订单";
}
}
}catch (Exception ex){
getLogger().warn("in formatDetailDesc error buyerOrder {} temp {}", buyerOrder, temp, ex);
}
... ...
... ... @@ -3,6 +3,7 @@ package com.yohoufo.order.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yoho.error.exception.ServiceException;
import com.yohobuy.ufo.model.order.bo.CustomsClearanceResult;
import com.yohobuy.ufo.model.order.common.TabType;
import com.yohobuy.ufo.model.order.req.BuyerOrderMetaUpdateReq;
import com.yohoufo.common.utils.UserInfoHiddenHelper;
... ... @@ -20,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.Objects;
@Service
public class BuyerOrderMetaServiceImpl implements IBuyerOrderMetaService {
... ... @@ -127,4 +129,15 @@ public class BuyerOrderMetaServiceImpl implements IBuyerOrderMetaService {
return userAddress;
}
public CustomsClearanceResult getCustomsClearanceResult(int uid, long orderCode){
BuyerOrderMeta buyerOrderMeta = getBuyerOrderMeta(uid, orderCode, MetaKey.CUSTOMS_CLEARANCE);
String value;
CustomsClearanceResult ccr = null;
if (Objects.nonNull(buyerOrderMeta) && StringUtils.isNotBlank(value = buyerOrderMeta.getMetaValue())){
ccr = JSONObject.parseObject(value, CustomsClearanceResult.class);
}
return ccr;
}
}
... ...