Commit 65d9f2a5 by 缪晖

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

# Conflicts:
#	order-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
parents e4053a11 69c0e8a0
...@@ -166,6 +166,7 @@ public enum ResponseResult { ...@@ -166,6 +166,7 @@ public enum ResponseResult {
ORDER_CANCEL_ERROR_EXPECT_TIME("45067", "预约时间还剩15分钟,无法取消"), ORDER_CANCEL_ERROR_EXPECT_TIME("45067", "预约时间还剩15分钟,无法取消"),
ORDER_CANCEL_ERROR_ESTIMATE_TIME("45068", "预计送达还剩30分钟,无法取消"), 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 ...@@ -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.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager;
import com.freemud.application.sdk.api.ordercenter.enums.ResponseResultEnum; 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.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.BaseQueryOrderRequest;
import com.freemud.sdk.api.assortment.order.request.order.GroupBuyRequest; import com.freemud.sdk.api.assortment.order.request.order.GroupBuyRequest;
import com.freemud.sdk.api.assortment.order.response.order.GroupBuyResponse; import com.freemud.sdk.api.assortment.order.response.order.GroupBuyResponse;
...@@ -113,6 +115,12 @@ public class CollageOrderServiceImpl implements CollageOrderService { ...@@ -113,6 +115,12 @@ public class CollageOrderServiceImpl implements CollageOrderService {
List<GroupBuyDto> list = new ArrayList<>(); List<GroupBuyDto> list = new ArrayList<>();
GroupBuyDto groupBuyDto; GroupBuyDto groupBuyDto;
List<String> payerUserIdList = productList.stream().filter(product -> !order.getUserId().equals(product.getUserId())).map(QueryOrdersResponse.DataBean.OrderBean.ProductBean::getUserId).distinct().collect(Collectors.toList()); 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) { for (String payerUserId : payerUserIdList) {
groupBuyDto = new GroupBuyDto(); groupBuyDto = new GroupBuyDto();
groupBuyDto.setUserId(payerUserId); groupBuyDto.setUserId(payerUserId);
...@@ -128,7 +136,17 @@ public class CollageOrderServiceImpl implements CollageOrderService { ...@@ -128,7 +136,17 @@ public class CollageOrderServiceImpl implements CollageOrderService {
// 运费均摊时算上拼单发起人 // 运费均摊时算上拼单发起人
deliveryAmount = Math.floorDiv(deliveryPrice.longValue(), payerUserIdList.size() + 1); 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.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()); groupBuyDto.setPhotoUrl(productList.stream().filter(product -> payerUserId.equals(product.getUserId())).findFirst().get().getPhotoUrl());
list.add(groupBuyDto); list.add(groupBuyDto);
...@@ -180,9 +198,16 @@ public class CollageOrderServiceImpl implements CollageOrderService { ...@@ -180,9 +198,16 @@ public class CollageOrderServiceImpl implements CollageOrderService {
List<GroupBuyRequest.UserInfo> userInfoList = new ArrayList<>(); List<GroupBuyRequest.UserInfo> userInfoList = new ArrayList<>();
List<QueryOrdersResponse.DataBean.OrderBean.ProductBean> productList = order.getProductList(); 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()); 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; GroupBuyRequest.UserInfo groupBuyUserInfo;
for (String payerOpenId : payerOpenIdList) { for (String payerOpenId : payerOpenIdList) {
...@@ -192,12 +217,22 @@ public class CollageOrderServiceImpl implements CollageOrderService { ...@@ -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 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; 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()); 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(); BigDecimal deliveryPrice = orderCostResp.getActualCostAmount() == null ? new BigDecimal(0) : orderCostResp.getActualCostAmount();
deliveryAmount = Math.floorDiv(deliveryPrice.longValue(), payerOpenIdList.size() + 1); 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 = new GroupBuyRequest.UserInfo();
groupBuyUserInfo.setOpenid(payerOpenId); groupBuyUserInfo.setOpenid(payerOpenId);
groupBuyUserInfo.setAmount(Integer.parseInt(String.valueOf(amount))); groupBuyUserInfo.setAmount(Integer.parseInt(String.valueOf(amount)));
......
...@@ -189,6 +189,8 @@ public class OrderServiceImpl implements Orderservice { ...@@ -189,6 +189,8 @@ public class OrderServiceImpl implements Orderservice {
private String cloudPrintQueue; private String cloudPrintQueue;
@Value("${mq.cloud_print_exchange}") @Value("${mq.cloud_print_exchange}")
private String cloud_print_exchange; private String cloud_print_exchange;
@Value("${collage.pre_order_pay.goods_tag}")
private String collageGoodsTag;
/** /**
* coco商户 * coco商户
...@@ -2691,6 +2693,14 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2691,6 +2693,14 @@ public class OrderServiceImpl implements Orderservice {
OrderPayResponse orderPayResponse; OrderPayResponse orderPayResponse;
try { try {
UnifiedOrderRequest request = orderAdapter.convent2UnifiedOrderRequest(orderBean, paymentRequest, orderBean.getAmount(), cardAmount, transId, partnerPayOvertime); UnifiedOrderRequest request = orderAdapter.convent2UnifiedOrderRequest(orderBean, paymentRequest, orderBean.getAmount(), cardAmount, transId, partnerPayOvertime);
// 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); com.freemud.application.sdk.api.base.BaseResponse<UnifiedOrderResponse> responseBase = standardPaymentService.unifiedOrder(request, trackingNo);
if (!ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(responseBase.getCode())) { if (!ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(responseBase.getCode())) {
log.error("支付SDK返回信息错误,trackingNo:{} request:{} response:{}", trackingNo, JSONObject.toJSONString(request), JSONObject.toJSONString(responseBase)); log.error("支付SDK返回信息错误,trackingNo:{} request:{} response:{}", trackingNo, JSONObject.toJSONString(request), JSONObject.toJSONString(responseBase));
......
...@@ -237,19 +237,23 @@ public class BuySendPromotionService implements IPromotionService { ...@@ -237,19 +237,23 @@ public class BuySendPromotionService implements IPromotionService {
} }
if (manyOrSingle) { if (manyOrSingle) {
// 多规格 // 多规格
if (!Objects.equals(sendGoodsMap.get(cartGood.getSkuId()).getOriginalGoodsUid(), cartGood.getCartGoodsUid())) { if (!Objects.equals(sendGoodsMap.get(cartGood.getSkuId()).getGoodsId(), cartGood.getSkuId())) {
return; return;
} }
} else { } 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; return;
} }
} }
ActivityCalculationDiscountResponseDto.CalculationDiscountResult.SendActivity.SendGoods sendGoods = sendGoodsMap.get(cartGood.getGoodsId()); ActivityCalculationDiscountResponseDto.CalculationDiscountResult.SendActivity.SendGoods sendGoods = sendGoodsMap.get(cartGood.getGoodsId());
if (cartGood.getCartGoodsUid().equals(sendGoods.getOriginalGoodsUid())) {
return;
}
String s = currentSubName(cartGood); String s = currentSubName(cartGood);
CartGoods newCartGoods = shoppingCartConvertAdapter.convent2CartGoods(cartGood, sendGoods.getNowPrice()); CartGoods newCartGoods = shoppingCartConvertAdapter.convent2CartGoods(cartGood, sendGoods.getNowPrice());
newCartGoods.setOriginalGoodsUid(sendGoodsMap.get(cartGood.getSpuId()).getOriginalGoodsUid()); newCartGoods.setOriginalGoodsUid(sendGoods.getOriginalGoodsUid());
newCartGoods.setClassificationId(cartGood.getClassificationId()); newCartGoods.setClassificationId(cartGood.getClassificationId());
newCartGoods.setClassificationName(cartGood.getClassificationName()); newCartGoods.setClassificationName(cartGood.getClassificationName());
newCartGoods.setQty(sendGoods.getSendNumber() > 0 ? sendGoods.getSendNumber() : SEND_NUMBER); newCartGoods.setQty(sendGoods.getSendNumber() > 0 ? sendGoods.getSendNumber() : SEND_NUMBER);
......
...@@ -81,12 +81,12 @@ public class TwoNDiscountServiceImpl implements IPromotionService { ...@@ -81,12 +81,12 @@ public class TwoNDiscountServiceImpl implements IPromotionService {
return null; return null;
} }
List<ApportionGoodsDetail> list = Lists.newArrayList(); List<ApportionGoodsDetail> list = Lists.newArrayList();
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods apportionGood : calculationDiscountResult.getApportionGoods()) { for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods apportionGood : calculationDiscountResult.getGoods()) {
if (!CollectionUtils.isEmpty(apportionGood.getApportionDetails())) { if (!CollectionUtils.isEmpty(apportionGood.getDiscounts())) {
for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.ApportionGoods.ApportionDetails apportionDetail : apportionGood.getApportionDetails()) { for (ActivityCalculationDiscountResponseDto.CalculationDiscountResult.Goods.GoodsDiscount apportionDetail : apportionGood.getDiscounts()) {
if (apportionDetail.getActivityType().equals(ActivityTypeEnum.TYPE_53.getCode())) { if (apportionDetail.getType().equals(ActivityTypeEnum.TYPE_53.getCode())) {
ApportionGoodsDetail apportionGoodsDetail = new ApportionGoodsDetail(); ApportionGoodsDetail apportionGoodsDetail = new ApportionGoodsDetail();
apportionGoodsDetail.setActivityApportionAmount(apportionDetail.getActivityApportionAmount()); apportionGoodsDetail.setActivityApportionAmount(apportionDetail.getDiscount());
apportionGoodsDetail.setActivityCode(apportionDetail.getActivityCode()); apportionGoodsDetail.setActivityCode(apportionDetail.getActivityCode());
apportionGoodsDetail.setActivityName(apportionDetail.getActivityName()); apportionGoodsDetail.setActivityName(apportionDetail.getActivityName());
apportionGoodsDetail.setGoodsId(apportionGood.getGoodsId()); 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