Commit e53453ce by 缪晖

Merge branch 'feature/2.0.1-collageOrder-刘鹏飞' into qa

# Conflicts:
#	order-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
#	order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
parents bbc4a8a1 69c0e8a0
......@@ -166,6 +166,7 @@ public enum ResponseResult {
ORDER_CANCEL_ERROR_EXPECT_TIME("45067", "预约时间还剩15分钟,无法取消"),
ORDER_CANCEL_ERROR_ESTIMATE_TIME("45068", "预计送达还剩30分钟,无法取消"),
ORDER_GROUP_BUY_LIST_EMPTY("45069", "付款人列表为空,无法发起群收款"),
/**
......
......@@ -26,6 +26,8 @@ import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo
import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager;
import com.freemud.application.sdk.api.ordercenter.enums.ResponseResultEnum;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderCostResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettlementResp;
import com.freemud.sdk.api.assortment.order.enums.OldOrderAccountType;
import com.freemud.sdk.api.assortment.order.request.order.BaseQueryOrderRequest;
import com.freemud.sdk.api.assortment.order.request.order.GroupBuyRequest;
import com.freemud.sdk.api.assortment.order.response.order.GroupBuyResponse;
......@@ -113,6 +115,12 @@ public class CollageOrderServiceImpl implements CollageOrderService {
List<GroupBuyDto> list = new ArrayList<>();
GroupBuyDto groupBuyDto;
List<String> payerUserIdList = productList.stream().filter(product -> !order.getUserId().equals(product.getUserId())).map(QueryOrdersResponse.DataBean.OrderBean.ProductBean::getUserId).distinct().collect(Collectors.toList());
// 付款人列表为空时直接返回错误提示
if (null == payerUserIdList || payerUserIdList.isEmpty()) {
return ResponseUtil.error(ResponseResult.ORDER_GROUP_BUY_LIST_EMPTY);
}
for (String payerUserId : payerUserIdList) {
groupBuyDto = new GroupBuyDto();
groupBuyDto.setUserId(payerUserId);
......@@ -128,7 +136,17 @@ public class CollageOrderServiceImpl implements CollageOrderService {
// 运费均摊时算上拼单发起人
deliveryAmount = Math.floorDiv(deliveryPrice.longValue(), payerUserIdList.size() + 1);
}
groupBuyDto.setAmount(itemAmount + packAmount + deliveryAmount);
// 微信拼单优惠分摊
Long wechatDiscountAmount = 0L;
if (order.getOrderSettlementDetailList() != null && !order.getOrderSettlementDetailList().isEmpty()) {
List<OrderSettlementResp> settlements = order.getOrderSettlementDetailList().stream().filter(settlement -> (OldOrderAccountType.WEIXIN.equals(settlement.getSettlementType()))).collect(Collectors.toList());
for (OrderSettlementResp settlement : settlements) {
wechatDiscountAmount += settlement.getShopDiscountAmount() + settlement.getPlatformDiscountAmount();
}
wechatDiscountAmount = Math.floorDiv(wechatDiscountAmount, payerUserIdList.size() + 1);
}
groupBuyDto.setAmount(itemAmount + packAmount + deliveryAmount - wechatDiscountAmount);
groupBuyDto.setNickName(productList.stream().filter(product -> payerUserId.equals(product.getUserId())).findFirst().get().getNickName());
groupBuyDto.setPhotoUrl(productList.stream().filter(product -> payerUserId.equals(product.getUserId())).findFirst().get().getPhotoUrl());
list.add(groupBuyDto);
......@@ -180,9 +198,16 @@ public class CollageOrderServiceImpl implements CollageOrderService {
List<GroupBuyRequest.UserInfo> userInfoList = new ArrayList<>();
List<QueryOrdersResponse.DataBean.OrderBean.ProductBean> productList = order.getProductList();
List<OrderSettlementResp> settlementList = order.getOrderSettlementDetailList();
// 群收款支付用户列表
List<String> payerOpenIdList = productList.stream().filter(product -> !userInfo.getMemberId().equals(product.getUserId())).map(QueryOrdersResponse.DataBean.OrderBean.ProductBean::getOpenId).distinct().collect(Collectors.toList());
// 付款人列表为空时直接返回错误提示
if (null == payerOpenIdList || payerOpenIdList.isEmpty()) {
return ResponseUtil.error(ResponseResult.ORDER_GROUP_BUY_LIST_EMPTY);
}
// 组装群收款付款人列表
GroupBuyRequest.UserInfo groupBuyUserInfo;
for (String payerOpenId : payerOpenIdList) {
......@@ -192,12 +217,22 @@ public class CollageOrderServiceImpl implements CollageOrderService {
Long packAmount = productList.stream().filter(product -> (payerOpenId.equals(product.getOpenId()) && null != product.getPackPrice())).map(QueryOrdersResponse.DataBean.OrderBean.ProductBean::getPackPrice).reduce(Long::sum).orElse(0L);
// 运费分摊
Long deliveryAmount = 0L;
if (order.getOrderCostDetailList() != null) {
if (order.getOrderCostDetailList() != null && !order.getOrderCostDetailList().isEmpty()) {
OrderCostResp orderCostResp = order.getOrderCostDetailList().stream().filter(detail -> (detail.getCostType().equals(2) && detail.getBillType().equals(1))).findFirst().orElse(new OrderCostResp());
BigDecimal deliveryPrice = orderCostResp.getActualCostAmount() == null ? new BigDecimal(0) : orderCostResp.getActualCostAmount();
deliveryAmount = Math.floorDiv(deliveryPrice.longValue(), payerOpenIdList.size() + 1);
}
Long amount = itemAmount + packAmount + deliveryAmount;
// 微信拼单优惠分摊
Long wechatDiscountAmount = 0L;
if (order.getOrderSettlementDetailList() != null && !order.getOrderSettlementDetailList().isEmpty()) {
List<OrderSettlementResp> settlements = order.getOrderSettlementDetailList().stream().filter(settlement -> (OldOrderAccountType.WEIXIN.equals(settlement.getSettlementType()))).collect(Collectors.toList());
for (OrderSettlementResp settlement : settlements) {
wechatDiscountAmount += settlement.getShopDiscountAmount() + settlement.getPlatformDiscountAmount();
}
wechatDiscountAmount = Math.floorDiv(wechatDiscountAmount, payerOpenIdList.size() + 1);
}
Long amount = itemAmount + packAmount + deliveryAmount - wechatDiscountAmount;
groupBuyUserInfo = new GroupBuyRequest.UserInfo();
groupBuyUserInfo.setOpenid(payerOpenId);
groupBuyUserInfo.setAmount(Integer.parseInt(String.valueOf(amount)));
......
......@@ -190,6 +190,8 @@ public class OrderServiceImpl implements Orderservice {
private String cloud_print_exchange;
@Value("${mcCafe.fengniao.storeId}")
private String fnStoreId;
@Value("${collage.pre_order_pay.goods_tag}")
private String collageGoodsTag;
/**
* coco商户
......@@ -2713,6 +2715,14 @@ public class OrderServiceImpl implements Orderservice {
if (orderExtInfoDto != null && StringUtils.isNotBlank(orderExtInfoDto.getStationId())) {
request.setStationId(orderExtInfoDto.getStationId());
}
// add by miaohui for 拼单群收款判断拼单人数大于1时参与微信平台补贴活动,创建预支付时上送goodsTag,后续抽成促销服务活动时删除此逻辑 start
if (null != orderBean.getMarketingType() && OrderMarketType.COLLAGE.getIndex() == orderBean.getMarketingType()) {
// 拼单人数大于1人时参加拼单补贴
if (null != orderBean.getProductList() && orderBean.getProductList().stream().map(QueryOrdersResponse.DataBean.OrderBean.ProductBean::getUserId).distinct().collect(Collectors.toList()).size() > 1) {
request.setGoodsTag(collageGoodsTag);
}
}
// add by miaohui for 拼单群收款判断拼单人数大于1时参与微信平台补贴活动,创建预支付时上送goodsTag,后续抽成促销服务活动时删除此逻辑 end
com.freemud.application.sdk.api.base.BaseResponse<UnifiedOrderResponse> responseBase = standardPaymentService.unifiedOrder(request, trackingNo);
if (!ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(responseBase.getCode())) {
log.error("支付SDK返回信息错误,trackingNo:{} request:{} response:{}", trackingNo, JSONObject.toJSONString(request), JSONObject.toJSONString(responseBase));
......
......@@ -237,19 +237,23 @@ public class BuySendPromotionService implements IPromotionService {
}
if (manyOrSingle) {
// 多规格
if (!Objects.equals(sendGoodsMap.get(cartGood.getSkuId()).getOriginalGoodsUid(), cartGood.getCartGoodsUid())) {
if (!Objects.equals(sendGoodsMap.get(cartGood.getSkuId()).getGoodsId(), cartGood.getSkuId())) {
return;
}
} else {
// 单品
if (!Objects.equals(sendGoodsMap.get(cartGood.getSpuId()).getOriginalGoodsUid(), cartGood.getCartGoodsUid())) {
List<String> spuIds = newCartGoodsList.stream().map(CartGoods::getSpuId).collect(Collectors.toList());
if (spuIds.contains(cartGood.getSpuId())) {
return;
}
}
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.SendActivity.SendGoods sendGoods = sendGoodsMap.get(cartGood.getGoodsId());
if (cartGood.getCartGoodsUid().equals(sendGoods.getOriginalGoodsUid())) {
return;
}
String s = currentSubName(cartGood);
CartGoods newCartGoods = shoppingCartConvertAdapter.convent2CartGoods(cartGood, sendGoods.getNowPrice());
newCartGoods.setOriginalGoodsUid(sendGoodsMap.get(cartGood.getSpuId()).getOriginalGoodsUid());
newCartGoods.setOriginalGoodsUid(sendGoods.getOriginalGoodsUid());
newCartGoods.setClassificationId(cartGood.getClassificationId());
newCartGoods.setClassificationName(cartGood.getClassificationName());
newCartGoods.setQty(sendGoods.getSendNumber() > 0 ? sendGoods.getSendNumber() : SEND_NUMBER);
......
......@@ -50,7 +50,7 @@ public class SetMealServiceImpl implements IPromotionService {
Map<String, Integer> numberMap = new HashMap<>();
// 当前商品行现价
Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsMap = calculationDiscountResult.getGoods().parallelStream()
.collect(Collectors.toMap(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods::getGoodsId, Function.identity(), (k1, k2) -> k1));
.collect(Collectors.toMap(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods::getCartGoodsUid, Function.identity(), (k1, k2) -> k1));
// 设置商品原价与商品现价的初始值
for (CartGoods cartGoods : setMealProducts) {
......@@ -139,19 +139,19 @@ public class SetMealServiceImpl implements IPromotionService {
*/
private String getTotalAmount(CartGoods cartGoods, long productGroupAmount, Map<String, Integer> numberMap, Map<String, ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods> goodsMap) {
if (goodsMap.isEmpty()||goodsMap.get(cartGoods.getGoodsId()).getDiscountAmount() == 0) {
if (goodsMap.isEmpty()||goodsMap.get(cartGoods.getCartGoodsUid()).getDiscountAmount() == 0) {
cartGoods.setAmount((cartGoods.getFinalPrice() + productGroupAmount) * cartGoods.getQty());
return "";
}
if (numberMap.get(cartGoods.getGoodsId()) == null) {
int actualGoodsNumber = goodsMap.get(cartGoods.getGoodsId()).getDiscounts().stream().mapToInt(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount::getActualGoodsNumber)
.min().orElse(goodsMap.get(cartGoods.getGoodsId()).getGoodsQuantity());
int actualGoodsNumber = goodsMap.get(cartGoods.getCartGoodsUid()).getDiscounts().stream().mapToInt(ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount::getActualGoodsNumber)
.min().orElse(goodsMap.get(cartGoods.getCartGoodsUid()).getGoodsQuantity());
numberMap.put(cartGoods.getGoodsId(), actualGoodsNumber);
}
// 可优惠数量
Integer number = numberMap.get(cartGoods.getGoodsId());
if (number > 0) {
Long nowPrice = goodsMap.get(cartGoods.getGoodsId()).getNowPrice();
Long nowPrice = goodsMap.get(cartGoods.getCartGoodsUid()).getNowPrice();
//套餐固定商品价格
long productComboxAmount = cartGoods.getQty() > number ? number * nowPrice + (cartGoods.getQty() - number) * cartGoods.getFinalPrice() : cartGoods.getQty() * nowPrice;
cartGoods.setAmount(productComboxAmount + productGroupAmount * cartGoods.getQty());
......
......@@ -44,14 +44,14 @@ public class TimeSalePromotionService implements IPromotionService {
}
String toastMsg = null;
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::getCartGoodsUid, Function.identity(), (k1, k2) -> k1));
// 存储当前享受限时特价折扣的商品数量,key:goodsId; value:可享受数量
Map<String, Integer> numberMap = new HashMap<>();
List<Integer> discounts = Arrays.asList(ActivityTypeEnum.TYPE_2.getCode(), ActivityTypeEnum.TYPE_21.getCode());
String uid = "";
for (CartGoods cartGoods : cartGoodsList) {
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods goods;
if ((goods = goodsMap.get(cartGoods.getGoodsId())) == null) {
if ((goods = goodsMap.get(cartGoods.getCartGoodsUid())) == null) {
continue;
}
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount goodsDiscount = getGoodsDiscount(goods.getDiscounts(), discounts);
......
......@@ -81,12 +81,12 @@ public class TwoNDiscountServiceImpl implements IPromotionService {
return null;
}
List<ApportionGoodsDetail> list = Lists.newArrayList();
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods apportionGood : calculationDiscountResult.getApportionGoods()) {
if (!CollectionUtils.isEmpty(apportionGood.getApportionDetails())) {
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods.ApportionDetails apportionDetail : apportionGood.getApportionDetails()) {
if (apportionDetail.getActivityType().equals(ActivityTypeEnum.TYPE_53.getCode())) {
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods apportionGood : calculationDiscountResult.getGoods()) {
if (!CollectionUtils.isEmpty(apportionGood.getDiscounts())) {
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount apportionDetail : apportionGood.getDiscounts()) {
if (apportionDetail.getType().equals(ActivityTypeEnum.TYPE_53.getCode())) {
ApportionGoodsDetail apportionGoodsDetail = new ApportionGoodsDetail();
apportionGoodsDetail.setActivityApportionAmount(apportionDetail.getActivityApportionAmount());
apportionGoodsDetail.setActivityApportionAmount(apportionDetail.getDiscount());
apportionGoodsDetail.setActivityCode(apportionDetail.getActivityCode());
apportionGoodsDetail.setActivityName(apportionDetail.getActivityName());
apportionGoodsDetail.setGoodsId(apportionGood.getGoodsId());
......
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