Authored by chenchao

Merge branch 'test6.9.5' of http://git.yoho.cn/ufo/yohoufo-fore into test6.9.5

... ... @@ -105,11 +105,13 @@ public class ChargeService {
.build();
chargeResult.setActivityCutResult(activityCutResult);
logger.info("[{}] step activity charge,goodsPrice:{},realPrice:{},oldFinalAmount:{},newFinalAmount:{},activityCutResult:{}",
logger.info("[{}] step activity charge,goodsPrice:{},realPrice:{},oldFinalAmount:{},newFinalAmount:{},activityPrice:{},activityCutResult:{}",
chargeContext.getChargeParam().getUid(),
chargeGoods.getGoodsPrice(),
chargeGoods.getRealPrice(),
oldFinalAmount, chargeResult.getFinalAmount(), chargeResult.getActivityCutResult());
oldFinalAmount, chargeResult.getFinalAmount(),
activityPrice,
chargeResult.getActivityCutResult());
}
... ...
... ... @@ -17,7 +17,7 @@ import com.yohoufo.dal.order.BuyerOrderMetaMapper;
import com.yohoufo.dal.order.SellerOrderGoodsMapper;
import com.yohoufo.dal.order.model.*;
import com.yohoufo.order.constants.MetaKey;
import com.yohoufo.order.event.BuyerOrderChangeEvent;
import com.yohoufo.order.service.listener.BuyerOrderChangeEvent;
import com.yohoufo.order.event.DeliverNoticeEvent;
import com.yohoufo.order.event.ErpBuyerOrderEvent;
import com.yohoufo.order.event.SellerCancelDeliverEvent;
... ...
... ... @@ -22,7 +22,7 @@ import com.yohoufo.order.common.RefundCase;
import com.yohoufo.order.common.TransferCase;
import com.yohoufo.order.constants.AlarmConfig;
import com.yohoufo.order.event.BillLogEvent;
import com.yohoufo.order.event.BuyerOrderChangeEvent;
import com.yohoufo.order.service.listener.BuyerOrderChangeEvent;
import com.yohoufo.order.event.BuyerRefundCouponEvent;
import com.yohoufo.order.model.request.PaymentRequest;
import com.yohoufo.order.model.request.TranseferCellNode;
... ...
... ... @@ -39,6 +39,7 @@ import com.yohoufo.order.service.cache.CacheCleaner;
import com.yohoufo.order.service.cache.CacheKeyBuilder;
import com.yohoufo.order.service.cache.OrderCacheService;
import com.yohoufo.order.service.handler.BuyerCancelCompensateComputeHandler;
import com.yohoufo.order.service.listener.BuyerOrderChangeEvent;
import com.yohoufo.order.service.listener.OrderChangeListenerContainer;
import com.yohoufo.order.service.pay.AbstractPayService;
import com.yohoufo.order.service.proxy.InBoxFacade;
... ...
... ... @@ -37,6 +37,7 @@ import com.yohoufo.order.service.handler.RefundGoodsMoneyHandler;
import com.yohoufo.order.service.handler.penalty.PenaltyResult;
import com.yohoufo.order.service.handler.penalty.SellerEarnestMoney2BuyerPenaltyCalculator;
import com.yohoufo.order.service.impl.visitor.*;
import com.yohoufo.order.service.listener.BuyerOrderChangeEvent;
import com.yohoufo.order.service.listener.OrderChangeListenerContainer;
import com.yohoufo.order.service.pay.AbstractPayService;
import com.yohoufo.order.service.proxy.InBoxFacade;
... ...
... ... @@ -4,21 +4,20 @@ import com.google.common.collect.Lists;
import com.yoho.core.rest.client.ServiceCaller;
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.*;
import com.yohobuy.ufo.model.order.constants.ChangePriceStatus;
import com.yohobuy.ufo.model.order.constants.SkupType;
import com.yohoufo.common.alarm.EventBusPublisher;
import com.yohoufo.common.alarm.SmsAlarmEvent;
import com.yohoufo.common.exception.UfoServiceException;
import com.yohoufo.common.utils.AddressUtil;
import com.yohoufo.dal.order.SellerChangePriceRecordMapper;
import com.yohoufo.dal.order.SellerOrderGoodsMapper;
import com.yohoufo.dal.order.SellerOrderMapper;
import com.yohoufo.dal.order.model.BuyerOrder;
import com.yohoufo.dal.order.model.SellerChangePriceRecord;
import com.yohoufo.dal.order.model.SellerOrder;
import com.yohoufo.dal.order.model.SellerOrderGoods;
import com.yohobuy.ufo.model.order.common.OrderCodeType;
import com.yohobuy.ufo.model.order.common.SkupStatus;
import com.yohobuy.ufo.model.order.common.TabType;
import com.yohobuy.ufo.model.order.constants.OrderConstant;
import com.yohoufo.order.charge.ChargeContext;
import com.yohoufo.order.charge.ChargeService;
... ... @@ -43,6 +42,8 @@ import com.yohoufo.order.service.ISubmitOrderService;
import com.yohoufo.order.service.IShoppingService;
import com.yohoufo.order.service.cache.CacheCleaner;
import com.yohoufo.order.service.cache.CacheKeyBuilder;
import com.yohoufo.order.service.listener.BuyerOrderChangeEvent;
import com.yohoufo.order.service.listener.OrderChangeListenerContainer;
import com.yohoufo.order.service.proxy.BargainProxyService;
import com.yohoufo.order.service.proxy.InBoxFacade;
import com.yohoufo.order.service.proxy.UserProxyService;
... ... @@ -118,6 +119,9 @@ public class ShoppingServiceImpl implements IShoppingService {
@Autowired
private BargainProxyService bargainProxyService;
@Autowired
private OrderChangeListenerContainer orderChangeListenerContainer;
/**
* 结算页数据
* @param request
... ... @@ -246,7 +250,8 @@ public class ShoppingServiceImpl implements IShoppingService {
//活动价格
ActivityPrice activityPrice = checkAndGetActivityPrice(request, skupGood);
//todo 活动价是否需要处理
//todo 活动价是否需要处理 目前ufo只有砍价不支持券,前端会屏蔽,暂时不处理
//构建算费
ChargeContext chargeContext = buildChargeContext(request, skupGood, activityPrice);
... ... @@ -380,6 +385,13 @@ public class ShoppingServiceImpl implements IShoppingService {
//inBoxFacade.buyerOrderNotPayed(shoppingRequest.getUid(), orderCode);
if (submitResult != null){
//创建事件
BuyerOrder buyerOrder = new BuyerOrder();
buyerOrder.setUid(uid);
buyerOrder.setOrderCode(orderCode);
buyerOrder.setAmount(orderBuilder.getAmount());
orderChangeListenerContainer.fireAsyncEvent(new BuyerOrderChangeEvent(buyerOrder, BuyerOrderChangeEvent.BizCase.CREATE, OrderStatus.HAS_PAYED));
//clean cache
// merge clean key
cacheCleaner.cleanList(uid, TabType.BUY.getValue());
... ...
package com.yohoufo.order.service.listener;
import com.yohoufo.order.event.BuyerOrderChangeEvent;
import com.yohoufo.order.service.listener.processor.BuyerOrderChangeBusinessPostProcessor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
... ... @@ -18,6 +17,9 @@ public class BuyOrderChangeListener implements IOrderChangeListener<BuyerOrderCh
public void apply(BuyerOrderChangeEvent changeEvent) {
BuyerOrderChangeEvent.BizCase bizCase = changeEvent.getBizCase();
switch (bizCase) {
case CREATE:
businessPostProcessor.create(changeEvent.getBuyerOrder(), changeEvent.getBizCase(), changeEvent.getTargetStatus());
break;
case CANCEL_BYSYSAUTO:
case CANCEL_BYBUYER:
case CANCEL_BYCS:
... ...
package com.yohoufo.order.event;
package com.yohoufo.order.service.listener;
import com.yohobuy.ufo.model.order.common.OrderCodeType;
import com.yohobuy.ufo.model.order.common.OrderStatus;
import com.yohoufo.dal.order.model.BuyerOrder;
import com.yohoufo.order.service.listener.OrderChangeEvent;
/**
* Created by jiexiang.wu on 2019/5/23.
... ... @@ -52,6 +53,8 @@ public class BuyerOrderChangeEvent extends OrderChangeEvent {
}
public enum BizCase {
//create
CREATE,
//cancel
CANCEL_BYBUYER, CANCEL_BYCS, CANCEL_BYSYSAUTO, CANCEL_BYSELLER,
//paySuccess
... ...
package com.yohoufo.order.service.listener;
import com.yohoufo.order.event.OrderChangeEvent;
/**
* Created by jiexiang.wu on 2019/5/23.
*/
... ...
package com.yohoufo.order.event;
package com.yohoufo.order.service.listener;
import com.yohobuy.ufo.model.order.common.OrderCodeType;
import com.yohoufo.common.alarm.Event;
... ... @@ -6,6 +6,7 @@ import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
/**
* Created by jiexiang.wu on 2019/5/23.
* 防止该事件及其子类被误用,没有放在event包下
* 订单状态发生变化后,有很多事情需要处理,其他有一些可以异步处理,异步服务可以对该类事件进行监控
* @implNote 该直接只能被OrderChangeListenerContainer处理
*/
... ...
... ... @@ -5,8 +5,6 @@ import com.yohobuy.ufo.model.order.common.OrderCodeType;
import com.yohoufo.common.alarm.EventBusPublisher;
import com.yohoufo.common.alarm.IEventHandler;
import com.yohoufo.common.alarm.SmsAlarmEvent;
import com.yohoufo.order.event.BuyerOrderChangeEvent;
import com.yohoufo.order.event.OrderChangeEvent;
import com.yohoufo.order.utils.LoggerUtils;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
... ...
... ... @@ -7,7 +7,7 @@ import com.yohoufo.common.alarm.SmsAlarmEvent;
import com.yohoufo.dal.order.model.BuyerOrder;
import com.yohoufo.order.constants.ActivityTypeEnum;
import com.yohoufo.order.constants.MetaKey;
import com.yohoufo.order.event.BuyerOrderChangeEvent;
import com.yohoufo.order.service.listener.BuyerOrderChangeEvent;
import com.yohoufo.order.model.bo.ActivityBo;
import com.yohoufo.order.service.proxy.BargainProxyService;
import com.yohoufo.order.service.support.BuyerOrderMetaMapperSupport;
... ... @@ -38,10 +38,33 @@ public class BuyerOrderChangeBusinessPostProcessor {
//业务处理器
private List<BusinessProcessor> processors = Lists.newArrayList(
new DefaultBusinessProcessor(),
//砍价
new BargainBusinessProcessor()
);
/**
* 订单创建
*
* @param buyerOrder
* @param bizCase
* @param targetStatus
*/
public void create(BuyerOrder buyerOrder, BuyerOrderChangeEvent.BizCase bizCase, OrderStatus targetStatus) {
BusinessProcessorContext context = buildBusinessProcessorContext(buyerOrder, bizCase, targetStatus);
for (BusinessProcessor processor : processors) {
try {
processor.create(context);
} catch (Exception ex) {
logger.warn("{} create error,context:{}", processor.getClass().getName(), context, ex);
//告警
EventBusPublisher.publishEvent(
new SmsAlarmEvent("ufo.buyerOrderBusinessPostProcessor", "create_exception",
processor.getClass().getName() + "(" + buyerOrder.getOrderCode() + ")", ex)
);
}
}
}
/**
* 取消业务
... ... @@ -128,6 +151,9 @@ public class BuyerOrderChangeBusinessPostProcessor {
* 等等
*/
private interface BusinessProcessor {
//订单创建
void create(BusinessProcessorContext context);
//取消
void cancel(BusinessProcessorContext context);
... ... @@ -135,10 +161,41 @@ public class BuyerOrderChangeBusinessPostProcessor {
void paySuccess(BusinessProcessorContext context);
}
//默认业务处理
private class DefaultBusinessProcessor implements BusinessProcessor {
@Override
public void create(BusinessProcessorContext context) {
BuyerOrder buyerOrder = context.buyerOrder;
logger.debug("[{}] buyer order amount is {}", buyerOrder.getOrderCode(), buyerOrder.getAmount());
if (buyerOrder.getAmount().doubleValue() == 0) {
logger.warn("[{}] buyer order amount is zero", buyerOrder.getOrderCode());
//0元订单 告警一下
EventBusPublisher.publishEvent(
new SmsAlarmEvent("ufo.buyerOrder", "submit", buyerOrder.getOrderCode() + " amount is zero")
);
}
}
@Override
public void cancel(BusinessProcessorContext context) {
}
@Override
public void paySuccess(BusinessProcessorContext context) {
}
}
//砍价业务
private class BargainBusinessProcessor implements BusinessProcessor {
@Override
public void create(BusinessProcessorContext context) {
}
@Override
public void cancel(BusinessProcessorContext context) {
BuyerOrder buyerOrder = context.buyerOrder;
ActivityBo activityBo = context.activityBo;
... ...