Commit 47c9617c by shuhu.hou@freemud.cn

Merge branch 'hotfix/201191218_限时特价提示语修复' into develop

# Conflicts:
#	assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/service/order/OrderCenterSdkServiceImpl.java
#	order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
parents 91d77fb6 cfe7ab6d
...@@ -11,6 +11,10 @@ public class ConfirmOrderRequest extends BaseConfig { ...@@ -11,6 +11,10 @@ public class ConfirmOrderRequest extends BaseConfig {
private String partnerId; private String partnerId;
private String storeId; private String storeId;
/**
* 普通订单:普通订单单号
* 会员卡父子订单:父订单号
*/
private String orderId; private String orderId;
//老订单状态 //老订单状态
private Integer orderType; private Integer orderType;
...@@ -19,7 +23,16 @@ public class ConfirmOrderRequest extends BaseConfig { ...@@ -19,7 +23,16 @@ public class ConfirmOrderRequest extends BaseConfig {
private String payVoucher; private String payVoucher;
/**
* 订单类型为会员卡父子订单时,此字段赋值且为会员卡订单号
*/
private String completeOrderCode; private String completeOrderCode;
/**
* 商品订单单号
* 订单类型为普通订单时,此字段赋值且为普通订单订单号
* 订单类型为会员卡父子订单时,此字段赋值且为普通订单订单号
*/
private String productOrderCode;
private Integer timeout; private Integer timeout;
//实际支付金额 //实际支付金额
......
...@@ -238,12 +238,12 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService { ...@@ -238,12 +238,12 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService {
} }
request.setOrderSettlementDetailList(orderSettlementCreateReqs); request.setOrderSettlementDetailList(orderSettlementCreateReqs);
} }
request.setActualPayAmount(request.getActualPayAmount()); request.setActualPayAmount(confirmOrderRequest.getActualPayAmount());
request.setOperator(confirmOrderRequest.getOperator()); request.setOperator(confirmOrderRequest.getOperator());
QueryOrderByIdResponse orderByIdResponse=new QueryOrderByIdResponse(); QueryOrderByIdResponse orderByIdResponse=new QueryOrderByIdResponse();
BaseResponse<GetMemberExtendInfoResponse> extendInfo=new BaseResponse(); BaseResponse<GetMemberExtendInfoResponse> extendInfo=new BaseResponse();
try { try {
QueryByCodeResponse codeResponse = orderSdkService.getOrderInfo(confirmOrderRequest.getOrderId(), 0, confirmOrderRequest.getTrackingNo()); QueryByCodeResponse codeResponse = orderSdkService.getOrderInfo(confirmOrderRequest.getProductOrderCode(), 0, confirmOrderRequest.getTrackingNo());
orderByIdResponse = orderSdkAdapter.convent2QueryOrderByIdResponse(codeResponse); orderByIdResponse = orderSdkAdapter.convent2QueryOrderByIdResponse(codeResponse);
GetMemberExtendInfoRequest extendInfoRequest = new GetMemberExtendInfoRequest(); GetMemberExtendInfoRequest extendInfoRequest = new GetMemberExtendInfoRequest();
......
...@@ -344,6 +344,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -344,6 +344,7 @@ public class OrderServiceImpl implements Orderservice {
var1.setPartnerId(partnerId); var1.setPartnerId(partnerId);
var1.setStoreId(storeId); var1.setStoreId(storeId);
var1.setOrderType(orderBean.getType()); var1.setOrderType(orderBean.getType());
var1.setProductOrderCode(orderBean.getOid());
var1.setOperator(orderBean.getUserName()); var1.setOperator(orderBean.getUserName());
// 订单支付成功 // 订单支付成功
......
...@@ -133,12 +133,13 @@ public class SetMealServiceImpl implements IPromotionService { ...@@ -133,12 +133,13 @@ public class SetMealServiceImpl implements IPromotionService {
*/ */
private String getTotalAmount(CartGoods cartGoods, long productGroupAmount, Map<String, Integer> numberMap, Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsMap) { private String getTotalAmount(CartGoods cartGoods, long productGroupAmount, Map<String, Integer> numberMap, Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsMap) {
if (goodsMap.get(cartGoods.getGoodsId()).getDiscountAmount() == 0) { if (goodsMap.isEmpty()||goodsMap.get(cartGoods.getGoodsId()).getDiscountAmount() == 0) {
cartGoods.setAmount((cartGoods.getFinalPrice() + productGroupAmount) * cartGoods.getQty()); cartGoods.setAmount((cartGoods.getFinalPrice() + productGroupAmount) * cartGoods.getQty());
return ""; return "";
} }
if (numberMap.get(cartGoods.getGoodsId()) == null) { if (numberMap.get(cartGoods.getGoodsId()) == null) {
int actualGoodsNumber = goodsMap.get(cartGoods.getGoodsId()).getDiscounts().stream().mapToInt(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount::getActualGoodsNumber).min().getAsInt(); int actualGoodsNumber = goodsMap.get(cartGoods.getGoodsId()).getDiscounts().stream().mapToInt(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount::getActualGoodsNumber)
.min().orElse(goodsMap.get(cartGoods.getGoodsId()).getGoodsQuantity());
numberMap.put(cartGoods.getGoodsId(), actualGoodsNumber); numberMap.put(cartGoods.getGoodsId(), actualGoodsNumber);
} }
// 可优惠数量 // 可优惠数量
......
...@@ -47,7 +47,7 @@ public class TimeSalePromotionService implements IPromotionService { ...@@ -47,7 +47,7 @@ public class TimeSalePromotionService implements IPromotionService {
String toastMsg = null; String toastMsg = null;
Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsMap = goodsList.parallelStream() Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsMap = goodsList.parallelStream()
.collect(Collectors.toMap(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods::getGoodsId, Function.identity(), (k1, k2) -> k1)); .collect(Collectors.toMap(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods::getGoodsId, Function.identity(), (k1, k2) -> k1));
// 存储当前享受限时特价折扣的商品数量 // 存储当前享受限时特价折扣的商品数量,key:goodsId; value:可享受数量
Map<String, Integer> numberMap = new HashMap<>(); Map<String, Integer> numberMap = new HashMap<>();
for (CartGoods cartGoods : cartGoodsList) { for (CartGoods cartGoods : cartGoodsList) {
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods goods; ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods goods;
...@@ -58,48 +58,26 @@ public class TimeSalePromotionService implements IPromotionService { ...@@ -58,48 +58,26 @@ public class TimeSalePromotionService implements IPromotionService {
if (goodsDiscount == null) { if (goodsDiscount == null) {
continue; continue;
} }
// 设置商品原价与商品现价的初始值
cartGoods.setOriginalAmount(goods.getOriginalPrice() * cartGoods.getQty());
cartGoods.setAmount(goods.getOriginalPrice() * cartGoods.getQty() - goods.getDiscountAmount());
// 享受限时特价折扣的商品数量 // 享受限时特价折扣的商品数量
Integer specialActualGoodsNumber = null; Integer specialActualGoodsNumber = null;
// 商品现价 // 商品现价
Long goodsNowPrice = null; Long goodsNowPrice = cartGoods.getOriginalPrice() - goodsDiscount.getDiscount() / goodsDiscount.getActualGoodsNumber();
// 获取享受限时特价折扣的商品数量与商品现价 // numberMap用于暂存当前商品行可享受限时特价折扣的商品数量
if (CollectionUtils.isNotEmpty(calculationDiscountResult.getApportionGoods())) { if ((specialActualGoodsNumber = numberMap.get(goods.getGoodsId())) == null) {
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods apportionGoods = getApportionGoods(cartGoods, calculationDiscountResult.getApportionGoods(), ActivityTypeEnum.TYPE_2); numberMap.put(goods.getGoodsId(), specialActualGoodsNumber=goodsDiscount.getActualGoodsNumber());
if (apportionGoods != null) { }
specialActualGoodsNumber = apportionGoods.getGoodsQuantity(); //若可享受数量>=当前商品行的商品数量
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods.ApportionDetails apportionDetails = getApportionDetails(apportionGoods.getApportionDetails(), ActivityTypeEnum.TYPE_2); if (specialActualGoodsNumber - cartGoods.getQty() >= 0) {
if (apportionDetails != null) { cartGoods.setAmount(goodsNowPrice * cartGoods.getQty());
goodsNowPrice = apportionDetails.getGoodsNowPrice();
}
}
}
// 获取享受限时特价折扣的商品数量失败,重新计算=商品折扣总金额/(商品原价-商品现价)
if (specialActualGoodsNumber == null) {
specialActualGoodsNumber = (int) (goodsDiscount.getDiscount() / (goods.getOriginalPrice() - goods.getNowPrice()));
}
// 获取商品现价失败,从优惠信息中获取
if (goodsNowPrice == null) {
goodsNowPrice = goods.getNowPrice();
}
// Map中存有上次计算剩余的享受限时特价折扣的商品数量
if (numberMap.get(goods.getGoodsId()) != null) {
specialActualGoodsNumber = numberMap.get(goods.getGoodsId());
}
if (specialActualGoodsNumber >= cartGoods.getQty()) {
numberMap.put(goods.getGoodsId(), specialActualGoodsNumber - cartGoods.getQty());
specialActualGoodsNumber = cartGoods.getQty();
} else { } else {
numberMap.put(goods.getGoodsId(), 0); //总价=可享受数量*优惠后单价+(当前商品行的商品数量-可享受数量)*商品原价
} cartGoods.setAmount(specialActualGoodsNumber > 0 ? specialActualGoodsNumber * goodsNowPrice + (cartGoods.getQty() - specialActualGoodsNumber) * cartGoods.getOriginalPrice()
cartGoods.setAmount(goodsNowPrice * specialActualGoodsNumber + goods.getOriginalPrice() * (cartGoods.getQty() - specialActualGoodsNumber)); : goods.getOriginalPrice() * cartGoods.getQty());
if (StringUtils.isEmpty(toastMsg) && specialActualGoodsNumber < goods.getGoodsQuantity()) { if (StringUtils.isEmpty(toastMsg)) {
// 存在限时特价折扣 toastMsg = "该商品限" + goodsDiscount.getActualGoodsNumber() + "份优惠 超出按照原价计算哦";
toastMsg = "该商品限" + specialActualGoodsNumber + "份优惠 超出按照原价计算哦"; }
} }
numberMap.put(goods.getGoodsId(), specialActualGoodsNumber - cartGoods.getQty());
} }
if (StringUtils.isNotBlank(toastMsg)) { if (StringUtils.isNotBlank(toastMsg)) {
shoppingCartGoodsResponseVo.setToastMsg(toastMsg); shoppingCartGoodsResponseVo.setToastMsg(toastMsg);
...@@ -144,7 +122,7 @@ public class TimeSalePromotionService implements IPromotionService { ...@@ -144,7 +122,7 @@ public class TimeSalePromotionService implements IPromotionService {
activityDiscountsDto.setActivityType(ActivityTypeEnum.TYPE_2.getCode()); activityDiscountsDto.setActivityType(ActivityTypeEnum.TYPE_2.getCode());
activityDiscountsDto.setDiscountAmount(totalDiscountAmount.intValue()); activityDiscountsDto.setDiscountAmount(totalDiscountAmount.intValue());
cartGoods.getActivityDiscountsDtos().add(activityDiscountsDto); cartGoods.getActivityDiscountsDtos().add(activityDiscountsDto);
cartGoods.setTotalDiscountAmount(cartGoods.getTotalDiscountAmount()+ totalDiscountAmount.intValue()); cartGoods.setTotalDiscountAmount(cartGoods.getTotalDiscountAmount() + totalDiscountAmount.intValue());
numberMap.put(cartGoods.getSkuId(), actualGoodsNumber - cartGoods.getQty()); numberMap.put(cartGoods.getSkuId(), actualGoodsNumber - cartGoods.getQty());
} else { } else {
cartGoods.setTotalDiscountAmount(0); cartGoods.setTotalDiscountAmount(0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment