Authored by wujiexiang

优惠券优化 -- 订单详情

1 package com.yohoufo.dal.promotion.model; 1 package com.yohoufo.dal.promotion.model;
2 2
  3 +import lombok.ToString;
  4 +
  5 +@ToString
3 public class UserCoupon { 6 public class UserCoupon {
4 private Integer id; 7 private Integer id;
5 8
1 package com.yohoufo.order.model.bo; 1 package com.yohoufo.order.model.bo;
2 2
3 -import lombok.Builder;  
4 -import lombok.Getter;  
5 - 3 +import lombok.Data;
6 /** 4 /**
7 * Created by jiexiang.wu on 2019/6/10. 5 * Created by jiexiang.wu on 2019/6/10.
8 * 订单金额明细(用于展示明细),但不包含最终金额(实付金额、最终运费;这两项应该从订单主表获取) 6 * 订单金额明细(用于展示明细),但不包含最终金额(实付金额、最终运费;这两项应该从订单主表获取)
9 */ 7 */
10 -@Builder  
11 -@Getter 8 +@Data
12 public class AmountDetailBo { 9 public class AmountDetailBo {
13 10
14 /** 11 /**
@@ -36,6 +36,7 @@ import org.springframework.beans.factory.annotation.Autowired; @@ -36,6 +36,7 @@ import org.springframework.beans.factory.annotation.Autowired;
36 36
37 import java.util.ArrayList; 37 import java.util.ArrayList;
38 import java.util.List; 38 import java.util.List;
  39 +import java.util.Optional;
39 40
40 /** 41 /**
41 * Created by chenchao on 2018/9/20. 42 * Created by chenchao on 2018/9/20.
@@ -138,14 +139,22 @@ public abstract class AbsOrderDetailService extends AbsOrderViewService implemen @@ -138,14 +139,22 @@ public abstract class AbsOrderDetailService extends AbsOrderViewService implemen
138 throw new ServiceException(ServiceError.ORDER_ORDERS_GOODS_IS_EMPTY); 139 throw new ServiceException(ServiceError.ORDER_ORDERS_GOODS_IS_EMPTY);
139 } 140 }
140 141
141 - // 收货地址 and 用户信息  
142 - AddressInfo userAddress = getHiddenAddressInfo(uid, orderCode, sellerOrderGoods.getId()); 142 + //buyer_order_meta 批量查询
  143 + List<BuyerOrderMeta> buyerOrderMetas = getBuyerOrderMetas(uid, orderCode, Lists.newArrayList(MetaKey.BUYER_DELIVERY_HIDDEN_ADDRESS, MetaKey.AMOUNT_DETAIL));
  144 +
  145 + Optional<BuyerOrderMeta> buyerDeliveryHiddenAddressMetaOptional = buyerOrderMetas.stream().filter(meta -> StringUtils.equals(MetaKey.BUYER_DELIVERY_HIDDEN_ADDRESS, meta.getMetaKey())).findFirst();
  146 +
  147 + AddressInfo userAddress;
  148 + if (buyerDeliveryHiddenAddressMetaOptional.isPresent()) {
  149 + userAddress = BuyerOrderMetaMapperSupport.convert(buyerDeliveryHiddenAddressMetaOptional.get(), AddressInfo.class);
  150 + } else {
  151 + // 收货地址 and 用户信息
  152 + userAddress = getHiddenAddressInfo(uid, orderCode, sellerOrderGoods.getId());
  153 + }
  154 +
143 // 需要查询 时间点 and 物流定位 155 // 需要查询 时间点 and 物流定位
144 ExpressInfoDetail lastEID = getExpressInfoDetail(orderStatus, orderCode); 156 ExpressInfoDetail lastEID = getExpressInfoDetail(orderStatus, orderCode);
145 157
146 - //buyer_order_meta  
147 - List<BuyerOrderMeta> buyerOrderMetas = getBuyerOrderMetas(uid, orderCode, Lists.newArrayList(MetaKey.AMOUNT_DETAIL));  
148 -  
149 BuildNode buildNode = BuildNode.builder() 158 BuildNode buildNode = BuildNode.builder()
150 .tabType(actor) 159 .tabType(actor)
151 .buyerOrder(buyerOrder) 160 .buyerOrder(buyerOrder)
@@ -221,11 +230,10 @@ public abstract class AbsOrderDetailService extends AbsOrderViewService implemen @@ -221,11 +230,10 @@ public abstract class AbsOrderDetailService extends AbsOrderViewService implemen
221 230
222 OrderDetailInfo.PriceInfo priceInfo; 231 OrderDetailInfo.PriceInfo priceInfo;
223 //订单金额明细 232 //订单金额明细
224 - BuyerOrderMeta amountDetailMeta = buildNode.buyerOrderMetas.stream().filter(meta -> StringUtils.equals(meta.getMetaKey(), MetaKey.AMOUNT_DETAIL))  
225 - .findFirst().orElse(null); 233 + Optional<BuyerOrderMeta> buyerAmountDetailMetaOptional = buildNode.buyerOrderMetas.stream().filter(meta -> StringUtils.equals(meta.getMetaKey(), MetaKey.AMOUNT_DETAIL)).findFirst();
226 234
227 - if (amountDetailMeta != null) {  
228 - AmountDetailBo amountDetailBo = BuyerOrderMetaMapperSupport.convert(amountDetailMeta, AmountDetailBo.class); 235 + if (buyerAmountDetailMetaOptional.isPresent()) {
  236 + AmountDetailBo amountDetailBo = BuyerOrderMetaMapperSupport.convert(buyerAmountDetailMetaOptional.get(), AmountDetailBo.class);
229 //priceInfo 237 //priceInfo
230 priceInfo = OrderDetailInfo.PriceInfo.builder() 238 priceInfo = OrderDetailInfo.PriceInfo.builder()
231 .goodPrice(MathUtils.formatStr(amountDetailBo.getGoodsAmount())) 239 .goodPrice(MathUtils.formatStr(amountDetailBo.getGoodsAmount()))
@@ -10,7 +10,6 @@ import com.yohobuy.ufo.model.order.constants.ChangePriceStatus; @@ -10,7 +10,6 @@ import com.yohobuy.ufo.model.order.constants.ChangePriceStatus;
10 import com.yohobuy.ufo.model.order.constants.SkupType; 10 import com.yohobuy.ufo.model.order.constants.SkupType;
11 import com.yohobuy.ufo.model.promotion.constant.CouponTypeEnum; 11 import com.yohobuy.ufo.model.promotion.constant.CouponTypeEnum;
12 import com.yohoufo.common.alarm.EventBusPublisher; 12 import com.yohoufo.common.alarm.EventBusPublisher;
13 -import com.yohoufo.common.alarm.SmsAlarmEvent;  
14 import com.yohoufo.common.exception.UfoServiceException; 13 import com.yohoufo.common.exception.UfoServiceException;
15 import com.yohoufo.common.utils.AddressUtil; 14 import com.yohoufo.common.utils.AddressUtil;
16 import com.yohoufo.dal.order.SellerChangePriceRecordMapper; 15 import com.yohoufo.dal.order.SellerChangePriceRecordMapper;
@@ -26,7 +25,6 @@ import com.yohoufo.order.charge.ChargeService; @@ -26,7 +25,6 @@ import com.yohoufo.order.charge.ChargeService;
26 import com.yohoufo.order.charge.coupon.CouponService; 25 import com.yohoufo.order.charge.coupon.CouponService;
27 import com.yohoufo.order.charge.model.*; 26 import com.yohoufo.order.charge.model.*;
28 import com.yohoufo.order.constants.ActivityTypeEnum; 27 import com.yohoufo.order.constants.ActivityTypeEnum;
29 -import com.yohoufo.order.common.BlackTypeEnum;  
30 import com.yohoufo.order.event.BuyerCancelEvent; 28 import com.yohoufo.order.event.BuyerCancelEvent;
31 import com.yohoufo.order.event.ErpBuyerOrderEvent; 29 import com.yohoufo.order.event.ErpBuyerOrderEvent;
32 import com.yohoufo.order.event.NotPaidNoticeEvent; 30 import com.yohoufo.order.event.NotPaidNoticeEvent;
@@ -367,22 +365,6 @@ public class ShoppingServiceImpl implements IShoppingService { @@ -367,22 +365,6 @@ public class ShoppingServiceImpl implements IShoppingService {
367 logger.info("generate new orderCode:{}",orderCode); 365 logger.info("generate new orderCode:{}",orderCode);
368 366
369 //优惠券支付结果 367 //优惠券支付结果
370 -  
371 - Optional<CouponPayResult> tempPayResult;  
372 - //订单金额明细  
373 - AmountDetailBo amountDetailBo = AmountDetailBo.builder()  
374 - //商品金额  
375 - .goodsAmount(chargeResult.getGoodsAmount())  
376 - //运费原价  
377 - .shippingAmount(chargeResult.getShippingAmount())  
378 - //活动金额  
379 - .activityCutAmount(chargeResult.getActivityCutResult().getActivityCutAmount())  
380 - //活动券减免金额  
381 - .couponCutAmount((tempPayResult = chargeResult.getCouponPayResultList().getCouponPayResultByCouponType(CouponTypeEnum.ACTIVITY_COUPON.getCode())).isPresent() ? tempPayResult.get().getCouponAmount() : 0.00)  
382 - //运费券减免金额  
383 - .shippingCouponCutAmount((tempPayResult = chargeResult.getCouponPayResultList().getCouponPayResultByCouponType(CouponTypeEnum.SHIPPING_COUPON.getCode())).isPresent() ? tempPayResult.get().getCouponAmount() : 0.00)  
384 - .build();  
385 -  
386 List<CouponPayResult> couponPayResults = chargeResult.getCouponPayResultList().getCouponPayResults(); 368 List<CouponPayResult> couponPayResults = chargeResult.getCouponPayResultList().getCouponPayResults();
387 // 减库存,skup更新成不可售,入库 369 // 减库存,skup更新成不可售,入库
388 //BigDecimal shipFee = new BigDecimal(delivery_way_sf_cost); 370 //BigDecimal shipFee = new BigDecimal(delivery_way_sf_cost);
@@ -410,7 +392,7 @@ public class ShoppingServiceImpl implements IShoppingService { @@ -410,7 +392,7 @@ public class ShoppingServiceImpl implements IShoppingService {
410 .activityCutAmount(BigDecimal.valueOf(chargeResult.getActivityCutResult().getActivityCutAmount())) 392 .activityCutAmount(BigDecimal.valueOf(chargeResult.getActivityCutResult().getActivityCutAmount()))
411 .build() 393 .build()
412 ) 394 )
413 - .amountDetailBo(amountDetailBo) 395 + .amountDetailBo(buildOrderAmountDetailBo(chargeResult))
414 .build(); 396 .build();
415 397
416 BuyerOrderSubmitResult submitResult = ordeCreationService.doSubmitOrder(orderBuilder); 398 BuyerOrderSubmitResult submitResult = ordeCreationService.doSubmitOrder(orderBuilder);
@@ -495,6 +477,30 @@ public class ShoppingServiceImpl implements IShoppingService { @@ -495,6 +477,30 @@ public class ShoppingServiceImpl implements IShoppingService {
495 return orderAttributes; 477 return orderAttributes;
496 } 478 }
497 479
  480 + /**
  481 + * 订单金额明细
  482 + * @param chargeResult
  483 + * @return
  484 + */
  485 + protected AmountDetailBo buildOrderAmountDetailBo(ChargeResult chargeResult) {
  486 + //订单金额明细
  487 + AmountDetailBo amountDetailBo = new AmountDetailBo();
  488 + //商品金额
  489 + amountDetailBo.setGoodsAmount(chargeResult.getGoodsAmount());
  490 + //运费原价
  491 + amountDetailBo.setShippingAmount(chargeResult.getShippingAmount());
  492 + //活动金额
  493 + amountDetailBo.setActivityCutAmount(chargeResult.getActivityCutResult().getActivityCutAmount());
  494 +
  495 + Optional<CouponPayResult> tempPayResult;
  496 + //活动券减免金额
  497 + amountDetailBo.setCouponCutAmount((tempPayResult = chargeResult.getCouponPayResultList().getCouponPayResultByCouponType(CouponTypeEnum.ACTIVITY_COUPON.getCode())).isPresent() ? tempPayResult.get().getCouponAmount() : 0.00);
  498 + //运费券减免金额
  499 + amountDetailBo.setShippingCouponCutAmount((tempPayResult = chargeResult.getCouponPayResultList().getCouponPayResultByCouponType(CouponTypeEnum.SHIPPING_COUPON.getCode())).isPresent() ? tempPayResult.get().getCouponAmount() : 0.00);
  500 +
  501 + return amountDetailBo;
  502 + }
  503 +
498 protected int buildDeliveryWay() { 504 protected int buildDeliveryWay() {
499 return OrderConstant.DELIVERY_WAY_SF; 505 return OrderConstant.DELIVERY_WAY_SF;
500 } 506 }
@@ -271,6 +271,8 @@ public class CouponServiceImpl implements ICouponService { @@ -271,6 +271,8 @@ public class CouponServiceImpl implements ICouponService {
271 // 获取未使用未过期的优惠券 271 // 获取未使用未过期的优惠券
272 List<UserCoupon> list = userCouponMapper.selectUsableCouponByUid(uid, DateUtil.getCurrentTimeSecond()); 272 List<UserCoupon> list = userCouponMapper.selectUsableCouponByUid(uid, DateUtil.getCurrentTimeSecond());
273 273
  274 + logger.debug("[{}] unused coupons:{}", uid, list);
  275 +
274 if (CollectionUtils.isEmpty(list)){ 276 if (CollectionUtils.isEmpty(list)){
275 return UserCouponsListBo.builder().build(); 277 return UserCouponsListBo.builder().build();
276 } 278 }