Commit 03ea65d5 by 查志伟

Merge branch '20210928-美团POS支持-zhiwei.zha'

parents 5dd64ceb 9bea9884
...@@ -247,6 +247,8 @@ public class OrderSdkAdapter { ...@@ -247,6 +247,8 @@ public class OrderSdkAdapter {
List<OrderCostCreateReq> orderCostCreateReqs = new ArrayList<>(); List<OrderCostCreateReq> orderCostCreateReqs = new ArrayList<>();
// 更新订单商品详情信息 // 更新订单商品详情信息
originalAmount = updateOrderItemsAndSettlements(orderItemList, orderSettlementCreateReqList, orderCostCreateReqs, requestVO.getProducts(), requestVO.getAccounts(), requestVO.getCompanyId()); originalAmount = updateOrderItemsAndSettlements(orderItemList, orderSettlementCreateReqList, orderCostCreateReqs, requestVO.getProducts(), requestVO.getAccounts(), requestVO.getCompanyId());
//将优惠信息中的活动优惠按优先级排个序 (对接美团Pos需要)
orderSettlementCreateReqList = this.sortSettlementCreateList(orderSettlementCreateReqList, requestVO);
//增加总优惠记录 //增加总优惠记录
if (!CollectionUtils.isEmpty(requestVO.getAccounts())) { if (!CollectionUtils.isEmpty(requestVO.getAccounts())) {
addTotalDisaccountData(orderSettlementCreateReqList, requestVO); addTotalDisaccountData(orderSettlementCreateReqList, requestVO);
...@@ -308,6 +310,32 @@ public class OrderSdkAdapter { ...@@ -308,6 +310,32 @@ public class OrderSdkAdapter {
return request; return request;
} }
/**
* 美团Pos对接的时候,需要将优惠信息排序
* @param orderSettlementCreateReqList
* @param requestVo
* @return List<OrderSettlementCreateReq> 排序后
*/
private List<OrderSettlementCreateReq> sortSettlementCreateList(List<OrderSettlementCreateReq> orderSettlementCreateReqList, BaseCreateOrderRequest requestVo) {
List<OrderSettlementCreateReq> result = new ArrayList<>();
//订单参与的活动信息,这个list是已经按照活动优先级排好了
List<CreateOrderAccountRequest> accountList = requestVo.getAccounts();
if (CollectionUtils.isEmpty(accountList)) return result;
for (CreateOrderAccountRequest account : accountList) {
Iterator<OrderSettlementCreateReq> iterator = orderSettlementCreateReqList.iterator();
while (iterator.hasNext()) {
OrderSettlementCreateReq coa = iterator.next();
if (Objects.equals(coa.getExternalObjectId(), account.getAccountId())) {
result.add(coa);
iterator.remove();
}
}
}
//此时iterator中还有元素的话,就是非促销的优惠数据,追加到后面
result.addAll(orderSettlementCreateReqList);
return result;
}
private void addTotalDisaccountData(List<OrderSettlementCreateReq> orderSettlementCreateReqList, BaseCreateOrderRequest requestVO) { private void addTotalDisaccountData(List<OrderSettlementCreateReq> orderSettlementCreateReqList, BaseCreateOrderRequest requestVO) {
OrderSettlementCreateReq createReq = new OrderSettlementCreateReq(); OrderSettlementCreateReq createReq = new OrderSettlementCreateReq();
createReq.setProductId("0"); createReq.setProductId("0");
...@@ -1386,6 +1414,7 @@ public class OrderSdkAdapter { ...@@ -1386,6 +1414,7 @@ public class OrderSdkAdapter {
orderPayItem.setPayAmount(orderPayItemReq.getPayAmount()); orderPayItem.setPayAmount(orderPayItemReq.getPayAmount());
orderPayItem.setPayChannelName(orderPayItemReq.getPayChannelName()); orderPayItem.setPayChannelName(orderPayItemReq.getPayChannelName());
orderPayItem.setPayChannelType(orderPayItemReq.getPayChannelType()); orderPayItem.setPayChannelType(orderPayItemReq.getPayChannelType());
orderPayItem.setTransId(orderPayItemReq.getTransId());
OrderPayItemList.add(orderPayItem); OrderPayItemList.add(orderPayItem);
} }
return OrderPayItemList; return OrderPayItemList;
...@@ -3123,7 +3152,6 @@ public class OrderSdkAdapter { ...@@ -3123,7 +3152,6 @@ public class OrderSdkAdapter {
extInfo.setScore(product.getScore()); extInfo.setScore(product.getScore());
} }
extInfo.setStapleFood(product.getStapleFood()); extInfo.setStapleFood(product.getStapleFood());
extInfo.setOriginalGoodsUid(product.getOriginalGoodsUid()); extInfo.setOriginalGoodsUid(product.getOriginalGoodsUid());
extInfo.setCartGoodsUid(product.getCartGoodsUid()); extInfo.setCartGoodsUid(product.getCartGoodsUid());
// todo 订单行扩展字段商品组 // todo 订单行扩展字段商品组
......
package cn.freemud.entities.dto.pay; package cn.freemud.entities.dto.pay;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.ToString; import lombok.ToString;
import javax.validation.constraints.NotEmpty;
@Data @Data
@ToString @ToString
public class MultiQueryRequest { public class MultiQueryRequest {
/**
* 开启渠道端查询,默认不开启
*/
private boolean enable_platform_data_query;
/**
* 外部交易流水号,由上游系统生成,需保证唯一(支付标识)
*/
private String outOrderNo;
/** /**
* 商户编号(由非码提供) * 商户编号(由非码提供)
*/ */
@JSONField(name = "partner_id")
@JsonProperty("partner_id")
private Integer partnerId; private Integer partnerId;
/** /**
* 商家门店号(在线支付需要提前定义) * 商家门店号(在线支付需要提前定义)
*/ */
@JSONField(name = "store_id")
@JsonProperty("store_id")
private String storeId; private String storeId;
/** /**
* 接口版本,默认30 * 开启渠道端查询,默认不开启
*/
@ApiModelProperty(value = "开启渠道端查询,默认不开启")
@JSONField(name = "enable_platform_data_query")
@JsonProperty("enable_platform_data_query")
private Boolean enablePlatformDataQuery = false;
@ApiModelProperty(value = "交易流水号(支付标识)")
@JSONField(name = "fm_trade_no")
@JsonProperty("fm_trade_no")
private String fmTradeNo;
/**
* 外部交易流水号,由上游系统生成,需保证唯一(支付标识)
*/ */
private String ver; @ApiModelProperty(value = "外部交易流水号,由上游系统生成,需保证唯一(支付标识)", required = true)
@JSONField(name = "out_order_no")
@JsonProperty("out_order_no")
@NotEmpty(message = "外部交易流水号不能为空")
private String outOrderNo;
} }
...@@ -8,16 +8,16 @@ import java.util.List; ...@@ -8,16 +8,16 @@ import java.util.List;
* 聚合查询返回 * 聚合查询返回
*/ */
@Data @Data
public class MultiQueryRespDto<T> { public class MultiQueryRespDto {
private int code; private int code;
private String msg; private String msg;
private T data; private ResponseDto data;
@lombok.Data @Data
public class Data { public static class ResponseDto {
public List<MultiPaymentRespDto> queryList; public List<MultiPaymentRespDto> queryList;
......
...@@ -29,4 +29,8 @@ public class ActivityDiscountsDto { ...@@ -29,4 +29,8 @@ public class ActivityDiscountsDto {
*/ */
private Integer extendType; private Integer extendType;
private String cartGoodsUid; private String cartGoodsUid;
/**
* 享受优惠点优先级, 值越大表示优惠优先级高
*/
private Integer priority;
} }
...@@ -57,7 +57,6 @@ public class ItemServiceImpl implements ItemService{ ...@@ -57,7 +57,6 @@ public class ItemServiceImpl implements ItemService{
//查询商品详情 //查询商品详情
GetProductInfoDto getProductInfoDto = storeItemAdapter.convert2ProductInfoDto(partnerId, storeId, ProductInfoType.ALL.getCode(), result,menuType); GetProductInfoDto getProductInfoDto = storeItemAdapter.convert2ProductInfoDto(partnerId, storeId, ProductInfoType.ALL.getCode(), result,menuType);
ProductInfosDto productInfosDto = storeItemClient.listProductInfos(getProductInfoDto); ProductInfosDto productInfosDto = storeItemClient.listProductInfos(getProductInfoDto);
AppLogUtil.infoLog("storeItemClient_listProductInfos", gson.toJson(getProductInfoDto), gson.toJson(productInfosDto));
if (ResponseCodeConstant.RESPONSE_SUCCESS.equals(productInfosDto.getErrcode()) && productInfosDto.getData() != null if (ResponseCodeConstant.RESPONSE_SUCCESS.equals(productInfosDto.getErrcode()) && productInfosDto.getData() != null
&& CollectionUtils.isNotEmpty(productInfosDto.getData().getProducts())) { && CollectionUtils.isNotEmpty(productInfosDto.getData().getProducts())) {
productInfosDto.getData().getProducts().forEach(productBean -> { productInfosDto.getData().getProducts().forEach(productBean -> {
......
...@@ -27,8 +27,7 @@ import cn.freemud.entities.dto.delivery.*; ...@@ -27,8 +27,7 @@ import cn.freemud.entities.dto.delivery.*;
import cn.freemud.entities.dto.ecology.SendMessageRequest; import cn.freemud.entities.dto.ecology.SendMessageRequest;
import cn.freemud.entities.dto.openplatform.QueryInvoiceConfigRequest; import cn.freemud.entities.dto.openplatform.QueryInvoiceConfigRequest;
import cn.freemud.entities.dto.order.*; import cn.freemud.entities.dto.order.*;
import cn.freemud.entities.dto.pay.InvoiceCreateRequest; import cn.freemud.entities.dto.pay.*;
import cn.freemud.entities.dto.pay.OrderInvoiceRequest;
import cn.freemud.entities.dto.product.AttributeValue; import cn.freemud.entities.dto.product.AttributeValue;
import cn.freemud.entities.dto.product.GroupDetail; import cn.freemud.entities.dto.product.GroupDetail;
import cn.freemud.entities.dto.product.ProductAttributeGroup; import cn.freemud.entities.dto.product.ProductAttributeGroup;
...@@ -88,6 +87,7 @@ import com.freemud.application.sdk.api.ordercenter.response.BaseDownLoadResponse ...@@ -88,6 +87,7 @@ import com.freemud.application.sdk.api.ordercenter.response.BaseDownLoadResponse
import com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp; import com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp;
import com.freemud.application.sdk.api.ordercenter.response.OrderCountResp; import com.freemud.application.sdk.api.ordercenter.response.OrderCountResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs; import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderPayItemResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettlementResp; import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSettlementResp;
import com.freemud.application.sdk.api.ordercenter.service.OrderDownLoadSdkService; import com.freemud.application.sdk.api.ordercenter.service.OrderDownLoadSdkService;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService; import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
...@@ -256,7 +256,8 @@ public class OrderServiceImpl implements Orderservice { ...@@ -256,7 +256,8 @@ public class OrderServiceImpl implements Orderservice {
private OrderQueueService orderQueueService; private OrderQueueService orderQueueService;
@Autowired @Autowired
private PayServiceImpl payServiceImpl; private PayServiceImpl payServiceImpl;
@Autowired
private ComPayClient comPayClient;
@Autowired @Autowired
private MicroOpenplatformClient microOpenplatformClient; private MicroOpenplatformClient microOpenplatformClient;
...@@ -393,7 +394,38 @@ public class OrderServiceImpl implements Orderservice { ...@@ -393,7 +394,38 @@ public class OrderServiceImpl implements Orderservice {
} }
//若该订单使用了优惠券,则移除卡包,移除失败也不退款,现在支付成功个调用核销,无需调用此功能 //若该订单使用了优惠券,则移除卡包,移除失败也不退款,现在支付成功个调用核销,无需调用此功能
// couponActivityService.callbackNotify(orderBean); // couponActivityService.callbackNotify(orderBean);
// 订单失败后 发消息重试 待实现
try {
//美团POS需求,混合支付(现金+储值卡)时,储值卡的交易流水号在预支付时是没有的,导致订单里没有储值卡的流水号,这里查一下支付信息,将储值卡的流水号信息更新到订单信息里
List<OrderPayItemResp> payItem = orderBean.getOrderPayItem();
if (CollectionUtils.isNotEmpty(payItem) && payItem.size() > 1) {
MultiQueryRequest queryPay = new MultiQueryRequest();
queryPay.setPartnerId(Integer.valueOf(partnerId));
queryPay.setStoreId(storeId);
queryPay.setOutOrderNo(orderBean.getOid());
MultiQueryRespDto payResponse = comPayClient.paymentApplicationQuery(queryPay, Integer.valueOf(partnerId));
if (null != payResponse && null != payResponse.getData() && CollectionUtils.isNotEmpty(payResponse.getData().getQueryList())) {
List<MultiPaymentRespDto> payList = payResponse.getData().getQueryList();
// 和订单里的匹配
payList.forEach(pay -> {
payItem.forEach(item -> {
if (item.getTransId().equals(pay.getTransId())) {
item.setFmTradeNo(pay.getFmTradeNo());
item.setOutOrderNo(pay.getOutOrderNo());
}
});
});
// 更新订单信息
OrderEditRequest editReq = new OrderEditRequest(orderBean.getOid(), orderBean.getExtInfo());
editReq.setPayChannel(PayChannelType.COMB.getEbcode());
editReq.setPayChannelName(PayChannelType.COMB.getName());
editReq.setPayChannelType(PayChannelType.COMB.getIndex());
editReq.setOrderPayItem(payItem);
orderCenterSdkService.orderEdit(editReq);
}
}
} catch (Exception ignored) {} //这个异常catch住,不影响业务流程
String takeCode; String takeCode;
String daySeq; String daySeq;
PayAccessResponse payAccessResponse; PayAccessResponse payAccessResponse;
......
...@@ -832,12 +832,11 @@ public class PayServiceImpl { ...@@ -832,12 +832,11 @@ public class PayServiceImpl {
if (null != orderPayItemList && orderPayItemList.size() > 0) { if (null != orderPayItemList && orderPayItemList.size() > 0) {
Integer partnerId = Integer.valueOf(orderBean.getCompanyId()); Integer partnerId = Integer.valueOf(orderBean.getCompanyId());
MultiQueryRequest request = new MultiQueryRequest(); MultiQueryRequest request = new MultiQueryRequest();
request.setEnable_platform_data_query(false);
request.setPartnerId(partnerId); request.setPartnerId(partnerId);
request.setStoreId(orderBean.getShopId()); request.setStoreId(orderBean.getShopId());
request.setOutOrderNo(orderBean.getOid()); request.setOutOrderNo(orderBean.getOid());
//查询聚合支付结果 //查询聚合支付结果
MultiQueryRespDto<MultiQueryRespDto.Data> response = comPayClient.paymentApplicationQuery(request, partnerId); MultiQueryRespDto response = comPayClient.paymentApplicationQuery(request, partnerId);
if (response != null && response.getData() != null && Objects.equals(response.getCode(), MULITI_RESPONSE)) { if (response != null && response.getData() != null && Objects.equals(response.getCode(), MULITI_RESPONSE)) {
List<MultiPaymentRespDto> multiPaymentRespDtoArrayList = response.getData().getQueryList(); List<MultiPaymentRespDto> multiPaymentRespDtoArrayList = response.getData().getQueryList();
if (null != multiPaymentRespDtoArrayList && multiPaymentRespDtoArrayList.size() > 0) { if (null != multiPaymentRespDtoArrayList && multiPaymentRespDtoArrayList.size() > 0) {
......
...@@ -42,6 +42,6 @@ public interface ComPayClient { ...@@ -42,6 +42,6 @@ public interface ComPayClient {
*/ */
@LogIgnoreFeign(logMessage="paymentApplicationQuery",messageFieldName= ResponseCodeKeyConstant.MSG) @LogIgnoreFeign(logMessage="paymentApplicationQuery",messageFieldName= ResponseCodeKeyConstant.MSG)
@PostMapping("/payment/application/query") @PostMapping("/payment/application/query")
MultiQueryRespDto<MultiQueryRespDto.Data> paymentApplicationQuery(MultiQueryRequest multiQueryRequest, @RequestHeader("partnerId") Integer partnerId); MultiQueryRespDto paymentApplicationQuery(@RequestBody MultiQueryRequest multiQueryRequest, @RequestHeader("partnerId") Integer partnerId);
} }
...@@ -35,4 +35,8 @@ public class ActivityDiscountsDto { ...@@ -35,4 +35,8 @@ public class ActivityDiscountsDto {
* 购物车商品行uid * 购物车商品行uid
*/ */
private String cartGoodsUid; private String cartGoodsUid;
/**
* 享受优惠点优先级, 值越大表示优惠优先级高
*/
private Integer priority;
} }
...@@ -65,4 +65,9 @@ public class Discount { ...@@ -65,4 +65,9 @@ public class Discount {
*/ */
private String cartGoodsUid; private String cartGoodsUid;
/**
* 活动优先级 值越大越先参与计算
*/
private Integer priority;
} }
...@@ -14,7 +14,6 @@ package cn.freemud.entities.vo; ...@@ -14,7 +14,6 @@ package cn.freemud.entities.vo;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.constraints.NotEmpty;
......
...@@ -23,6 +23,7 @@ import cn.freemud.constant.ShoppingCartConstant; ...@@ -23,6 +23,7 @@ import cn.freemud.constant.ShoppingCartConstant;
import cn.freemud.demo.controller.ShoppingCartDemoController; import cn.freemud.demo.controller.ShoppingCartDemoController;
import cn.freemud.demo.entities.dto.goods.add.list.BaseListCartGoodsVO; import cn.freemud.demo.entities.dto.goods.add.list.BaseListCartGoodsVO;
import cn.freemud.entities.dto.*; import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.activity.ActivityDiscountsDto;
import cn.freemud.entities.dto.activity.ActivityQueryDto; import cn.freemud.entities.dto.activity.ActivityQueryDto;
import cn.freemud.entities.dto.activity.ActivityQueryResponseDto; import cn.freemud.entities.dto.activity.ActivityQueryResponseDto;
import cn.freemud.entities.dto.activity.DiscountSharingDto; import cn.freemud.entities.dto.activity.DiscountSharingDto;
...@@ -2085,6 +2086,26 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -2085,6 +2086,26 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
IPromotionService fullMCountNFoldService = PromotionFactory.getPromotionService(ShoppingCartPromotionEnum.FULL_M_COUNT_N_FOLD); IPromotionService fullMCountNFoldService = PromotionFactory.getPromotionService(ShoppingCartPromotionEnum.FULL_M_COUNT_N_FOLD);
fullMCountNFoldService.updateShoppingCartGoodsApportion(shoppingCartGoodsResponseVo, calculationDiscountResult, shoppingCartGoodsDto, premiumExchangeActivity, shoppingCartInfoRequestVo); fullMCountNFoldService.updateShoppingCartGoodsApportion(shoppingCartGoodsResponseVo, calculationDiscountResult, shoppingCartGoodsDto, premiumExchangeActivity, shoppingCartInfoRequestVo);
// 美团Pos需求,针对优惠信息进行排序
List<ActivityDiscountsDto> discounts = shoppingCartGoodsDto.getActivityDiscountsDtos();
discounts.forEach(discount -> {
for (Discount rd : calculationDiscountResult.getDiscounts()) {
// 一定要先判断套餐,不清楚为什么套餐设置的活动是221-集点活动,不先判断的话,可能会匹配成集点的优先级了
if (discount.getActivityCode().equals("setMeal")) {
// 套餐优惠不是促销返回的,这里和促销新算价保持一直,优先级设置为0
discount.setPriority(0);
break;
}
if (discount.getActivityType().equals(rd.getType())) {
discount.setPriority(rd.getPriority());
break;
}
}
// 未匹配上的优惠,设置默认值0
if (null == discount.getPriority()) discount.setPriority(0);
});
discounts.sort((a1, a2) -> a2.getPriority() - a1.getPriority());
shoppingCartGoodsDto.setActivityDiscountsDtos(discounts);
} }
......
...@@ -220,13 +220,17 @@ public class CalculationSharingEquallyService { ...@@ -220,13 +220,17 @@ public class CalculationSharingEquallyService {
activityDiscountsDto.setActivityName(discount.getActivityName()); activityDiscountsDto.setActivityName(discount.getActivityName());
activityDiscountsDto.setActivityType(calculationCommonService.convertType(discountType)); activityDiscountsDto.setActivityType(calculationCommonService.convertType(discountType));
activityDiscountsDto.setDiscountAmount(0 - discountAmount); activityDiscountsDto.setDiscountAmount(0 - discountAmount);
activityDiscountsDto.setPriority(discount.getPriority());
activityDiscountsDtos.add(activityDiscountsDto); activityDiscountsDtos.add(activityDiscountsDto);
} }
} }
//鬼知道促销会有什么问题,反正qa已经出现促销某种情况下没有返回priority字段了,这里为空置位0,防止排序npe影响购物车
activityDiscountsDtos.stream().forEach(a -> { if (null==a.getPriority()) a.setPriority(0); });
//美团POS需求,将优惠信息按照优惠优先级排序
activityDiscountsDtos.sort((a1, a2) -> a2.getPriority() - a1.getPriority());
shoppingCartGoodsDto.setActivityDiscountsDtos(activityDiscountsDtos); shoppingCartGoodsDto.setActivityDiscountsDtos(activityDiscountsDtos);
} }
/** /**
* 库存扣减加价购商品 要过滤掉没有换购的商品 * 库存扣减加价购商品 要过滤掉没有换购的商品
* *
......
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