Authored by TANLING

极速

... ... @@ -2,15 +2,13 @@ package com.yohoufo.order.event;
import com.yohobuy.ufo.model.order.resp.FastDeliveryReq;
import com.yohoufo.common.alarm.Event;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.*;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class FastDeliveryChangeEvent extends Event {
FastDeliveryReq fastDeliveryReq;
... ...
... ... @@ -30,6 +30,7 @@ import com.yohoufo.order.event.ErpBuyerOrderEvent;
import com.yohoufo.order.event.FastDeliveryChangeEvent;
import com.yohoufo.order.event.SellerCancelDeliverEvent;
import com.yohoufo.order.model.OperateTransferExpressInfo;
import com.yohoufo.order.model.dto.LimitTime;
import com.yohoufo.order.model.dto.PreSaleOrderConfig;
import com.yohoufo.order.model.request.PaymentRequest;
import com.yohoufo.order.model.response.PrepayResponse;
... ... @@ -251,9 +252,8 @@ public class BuyerOrderPaymentService extends AbstractOrderPaymentService {
private void processFastDelivery(BuyerOrder orderInfo, SellerOrderGoods sellerOrderGoods){
// 通知买家支付成功
int deliveryHours = deliveryMinutesService.getDeliverMinutesThird(sellerOrderGoods);
String unit = DateUtil.UNIT_HOURS;
buyerNoticeFacade.buyerFinishPaid(orderInfo, deliveryHours, unit);
int limitTime = deliveryMinutesService.getDeliverLimitTimeBySkupType(sellerOrderGoods, TimeUnit.HOURS);
buyerNoticeFacade.buyerFinishPaid(orderInfo, limitTime, DateUtil.UNIT_HOURS);
// 提醒卖家发货
sellerNoticeFacade.sellerSkupPaidByBuyerFastDelivery(sellerOrderGoods, orderInfo);
... ...
... ... @@ -35,15 +35,13 @@ public class FastDeliveryChangeHandler implements IEventHandler<FastDeliveryChan
.withStopStrategy(StopStrategies.stopAfterAttempt(2))
.withWaitStrategy(WaitStrategies.fixedWait(50, TimeUnit.MILLISECONDS)).build();
private ExecutorService executors = Executors.newFixedThreadPool(1);
@Autowired
private IExpressInfoService expressInfoService;
@Override
@Subscribe
public void handle(FastDeliveryChangeEvent event) {
logger.info("FastDeliveryChangeEvent {}", event);
if (event.getOpt() == null || event.getFastDeliveryReq()== null){
logger.warn("req required, please check param");
return;
... ...
... ... @@ -9,7 +9,6 @@ import com.yohoufo.dal.order.model.SellerOrderGoods;
import com.yohoufo.order.model.dto.LimitTime;
import com.yohoufo.order.service.impl.MetaConfigService;
import com.yohoufo.order.service.impl.OrderOverTimeService;
import lombok.Getter;
import org.apache.commons.collections.MapUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
... ... @@ -108,7 +107,7 @@ public class DeliveryMinutesService {
//订单维度 下单时刻的配置
int totalMinutes = getDeliverMinutesLimitTimeByOrder(orderCode);
if (totalMinutes<=0){//商品类型匹配,当前生效的全局配置(数据库)
totalMinutes = getDeliverMinutesLimitTimeBySkupType(sellerOrderGoods);
totalMinutes = getDeliverLimitTimeBySkupType(sellerOrderGoods, TimeUnit.MINUTES);
}
//配置文件(程序中)
if (totalMinutes<=0){
... ... @@ -170,14 +169,23 @@ public class DeliveryMinutesService {
return MINUTES_DELIVERNOTICE_SECOND;
}
private int getDeliverMinutesLimitTimeBySkupType(SellerOrderGoods sellerOrderGoods){
public int getDeliverLimitTimeBySkupType(SellerOrderGoods sellerOrderGoods, TimeUnit timeUnit){
Map<String, LimitTime> limitTimeMap = metaConfigService.getSellerDeliverLimitTimeConfig();
SkupType skupType = SkupType.getSkupType(sellerOrderGoods.getAttributes());
LimitTime limitTime = null;
if (MapUtils.isNotEmpty(limitTimeMap)
&& Objects.nonNull(limitTime = limitTimeMap.get(skupType.getLocalCacheKey()))) {
int limitTimeInt = getMinutes(limitTime);
logger.info("getDeliverMinutesLimitTimeBySkupType from special skupType {} {},limitTimeInt {}",
int limitTimeInt = 0;
if (timeUnit == TimeUnit.HOURS){
limitTimeInt = getHours(limitTime);
}else if (timeUnit == TimeUnit.MINUTES){
limitTimeInt = getMinutes(limitTime);
}
logger.info("getDeliverLimitTimeBySkupType from special skupType {} {},limitTimeInt {}",
limitTime,sellerOrderGoods, limitTimeInt);
return limitTimeInt;
}
... ... @@ -185,13 +193,7 @@ public class DeliveryMinutesService {
}
public int getDeliverMinutesThird(SellerOrderGoods sellerOrderGoods){
int limitTimeInt = getDeliverMinutesLimitTimeBySkupType(sellerOrderGoods);
if (limitTimeInt>0){
return limitTimeInt;
}
return minutes_deliverNotice_third;
}
/**
* it's dead line of seller deliver goods of buyer order
... ... @@ -200,7 +202,7 @@ public class DeliveryMinutesService {
* @return
*/
public int getDeliverMinutesThird(int ts, SellerOrderGoods sellerOrderGoods){
int limitTimeInt = getDeliverMinutesLimitTimeBySkupType(sellerOrderGoods);
int limitTimeInt = getDeliverLimitTimeBySkupType(sellerOrderGoods, TimeUnit.MINUTES);
if (limitTimeInt>0){
return limitTimeInt;
}
... ... @@ -212,6 +214,26 @@ public class DeliveryMinutesService {
return minutes_deliverNotice_third;
}
private static int getHours(LimitTime limitTime){
int hours;
TimeUnit timeUnit;
if (Objects.nonNull(timeUnit=limitTime.getTimeUnit())) {
switch (timeUnit) {
case HOURS:
default:
hours = limitTime.getLimitTime();
break;
case MINUTES:
hours = limitTime.getLimitTime()/60;
break;
}
}else{
hours = limitTime.getLimitTime();
}
return hours;
}
private static int getMinutes(LimitTime limitTime){
int minutes;
TimeUnit timeUnit;
... ...