Commit 03ea65d5 by 查志伟

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

parents 5dd64ceb 9bea9884
......@@ -247,6 +247,8 @@ public class OrderSdkAdapter {
List<OrderCostCreateReq> orderCostCreateReqs = new ArrayList<>();
// 更新订单商品详情信息
originalAmount = updateOrderItemsAndSettlements(orderItemList, orderSettlementCreateReqList, orderCostCreateReqs, requestVO.getProducts(), requestVO.getAccounts(), requestVO.getCompanyId());
//将优惠信息中的活动优惠按优先级排个序 (对接美团Pos需要)
orderSettlementCreateReqList = this.sortSettlementCreateList(orderSettlementCreateReqList, requestVO);
//增加总优惠记录
if (!CollectionUtils.isEmpty(requestVO.getAccounts())) {
addTotalDisaccountData(orderSettlementCreateReqList, requestVO);
......@@ -308,6 +310,32 @@ public class OrderSdkAdapter {
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) {
OrderSettlementCreateReq createReq = new OrderSettlementCreateReq();
createReq.setProductId("0");
......@@ -1386,6 +1414,7 @@ public class OrderSdkAdapter {
orderPayItem.setPayAmount(orderPayItemReq.getPayAmount());
orderPayItem.setPayChannelName(orderPayItemReq.getPayChannelName());
orderPayItem.setPayChannelType(orderPayItemReq.getPayChannelType());
orderPayItem.setTransId(orderPayItemReq.getTransId());
OrderPayItemList.add(orderPayItem);
}
return OrderPayItemList;
......@@ -3123,7 +3152,6 @@ public class OrderSdkAdapter {
extInfo.setScore(product.getScore());
}
extInfo.setStapleFood(product.getStapleFood());
extInfo.setOriginalGoodsUid(product.getOriginalGoodsUid());
extInfo.setCartGoodsUid(product.getCartGoodsUid());
// todo 订单行扩展字段商品组
......
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.ToString;
import javax.validation.constraints.NotEmpty;
@Data
@ToString
public class MultiQueryRequest {
/**
* 开启渠道端查询,默认不开启
*/
private boolean enable_platform_data_query;
/**
* 外部交易流水号,由上游系统生成,需保证唯一(支付标识)
*/
private String outOrderNo;
/**
* 商户编号(由非码提供)
*/
@JSONField(name = "partner_id")
@JsonProperty("partner_id")
private Integer partnerId;
/**
* 商家门店号(在线支付需要提前定义)
*/
@JSONField(name = "store_id")
@JsonProperty("store_id")
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;
* 聚合查询返回
*/
@Data
public class MultiQueryRespDto<T> {
public class MultiQueryRespDto {
private int code;
private String msg;
private T data;
private ResponseDto data;
@lombok.Data
public class Data {
@Data
public static class ResponseDto {
public List<MultiPaymentRespDto> queryList;
......
......@@ -29,4 +29,8 @@ public class ActivityDiscountsDto {
*/
private Integer extendType;
private String cartGoodsUid;
/**
* 享受优惠点优先级, 值越大表示优惠优先级高
*/
private Integer priority;
}
......@@ -57,7 +57,6 @@ public class ItemServiceImpl implements ItemService{
//查询商品详情
GetProductInfoDto getProductInfoDto = storeItemAdapter.convert2ProductInfoDto(partnerId, storeId, ProductInfoType.ALL.getCode(), result,menuType);
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
&& CollectionUtils.isNotEmpty(productInfosDto.getData().getProducts())) {
productInfosDto.getData().getProducts().forEach(productBean -> {
......
......@@ -27,8 +27,7 @@ import cn.freemud.entities.dto.delivery.*;
import cn.freemud.entities.dto.ecology.SendMessageRequest;
import cn.freemud.entities.dto.openplatform.QueryInvoiceConfigRequest;
import cn.freemud.entities.dto.order.*;
import cn.freemud.entities.dto.pay.InvoiceCreateRequest;
import cn.freemud.entities.dto.pay.OrderInvoiceRequest;
import cn.freemud.entities.dto.pay.*;
import cn.freemud.entities.dto.product.AttributeValue;
import cn.freemud.entities.dto.product.GroupDetail;
import cn.freemud.entities.dto.product.ProductAttributeGroup;
......@@ -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.OrderCountResp;
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.service.OrderDownLoadSdkService;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
......@@ -256,7 +256,8 @@ public class OrderServiceImpl implements Orderservice {
private OrderQueueService orderQueueService;
@Autowired
private PayServiceImpl payServiceImpl;
@Autowired
private ComPayClient comPayClient;
@Autowired
private MicroOpenplatformClient microOpenplatformClient;
......@@ -393,7 +394,38 @@ public class OrderServiceImpl implements Orderservice {
}
//若该订单使用了优惠券,则移除卡包,移除失败也不退款,现在支付成功个调用核销,无需调用此功能
// 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 daySeq;
PayAccessResponse payAccessResponse;
......
......@@ -832,12 +832,11 @@ public class PayServiceImpl {
if (null != orderPayItemList && orderPayItemList.size() > 0) {
Integer partnerId = Integer.valueOf(orderBean.getCompanyId());
MultiQueryRequest request = new MultiQueryRequest();
request.setEnable_platform_data_query(false);
request.setPartnerId(partnerId);
request.setStoreId(orderBean.getShopId());
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)) {
List<MultiPaymentRespDto> multiPaymentRespDtoArrayList = response.getData().getQueryList();
if (null != multiPaymentRespDtoArrayList && multiPaymentRespDtoArrayList.size() > 0) {
......
......@@ -42,6 +42,6 @@ public interface ComPayClient {
*/
@LogIgnoreFeign(logMessage="paymentApplicationQuery",messageFieldName= ResponseCodeKeyConstant.MSG)
@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 {
* 购物车商品行uid
*/
private String cartGoodsUid;
/**
* 享受优惠点优先级, 值越大表示优惠优先级高
*/
private Integer priority;
}
......@@ -65,4 +65,9 @@ public class Discount {
*/
private String cartGoodsUid;
/**
* 活动优先级 值越大越先参与计算
*/
private Integer priority;
}
......@@ -14,7 +14,6 @@ package cn.freemud.entities.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
......
......@@ -23,6 +23,7 @@ import cn.freemud.constant.ShoppingCartConstant;
import cn.freemud.demo.controller.ShoppingCartDemoController;
import cn.freemud.demo.entities.dto.goods.add.list.BaseListCartGoodsVO;
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.ActivityQueryResponseDto;
import cn.freemud.entities.dto.activity.DiscountSharingDto;
......@@ -2085,6 +2086,26 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
IPromotionService fullMCountNFoldService = PromotionFactory.getPromotionService(ShoppingCartPromotionEnum.FULL_M_COUNT_N_FOLD);
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 {
activityDiscountsDto.setActivityName(discount.getActivityName());
activityDiscountsDto.setActivityType(calculationCommonService.convertType(discountType));
activityDiscountsDto.setDiscountAmount(0 - discountAmount);
activityDiscountsDto.setPriority(discount.getPriority());
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);
}
/**
* 库存扣减加价购商品 要过滤掉没有换购的商品
*
......
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