Commit 301ae05e by 周晓航

Merge branch 'master' into feature-20211115-视频卖券ID1039458-zxh-look

# Conflicts:
#	order-application-service/src/main/java/cn/freemud/service/impl/SellCouponOrderServiceImpl.java
parents bbb46862 b552280c
......@@ -132,7 +132,7 @@ public class OrderSdkAdapter {
return var1;
}
public CancelOrderRequest getRejectRefundRequest(String operator, String reason,OrderBeanV1 orderBean) {
public CancelOrderRequest getRejectRefundRequest(String operator, String reason, OrderBeanV1 orderBean) {
CancelOrderRequest var1 = new CancelOrderRequest();
var1.setOrderId(orderBean.getOid());
var1.setReason(reason);
......@@ -230,7 +230,7 @@ public class OrderSdkAdapter {
// 20210730之前 默认设置为1
request.setBizType(CommonConstant.INTEGER_ONE);
}
request.setOrderType(getNewOrderType(requestVO.getOrderType(), requestVO.getGmtExpect(),request.getBizType()));
request.setOrderType(getNewOrderType(requestVO.getOrderType(), requestVO.getGmtExpect(), request.getBizType()));
request.setNote(requestVO.getRemark());
request.setBarCounter(requestVO.getBarCounter());
......@@ -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);
......@@ -301,13 +303,39 @@ public class OrderSdkAdapter {
request.setOrderSendCouponRespList(JSONArray.parseArray(JSONObject.toJSONString(requestVO.getChooseGoods()), CreateOrderRequest.ChooseGood.class));
}
// 【ID1030916】订单查询门店获取预计送达时间
if (requestVO.getEstimateDeliveryCompleteTime() !=null) {
if (requestVO.getEstimateDeliveryCompleteTime() != null) {
Date time = requestVO.getEstimateDeliveryCompleteTime();
request.setEstimateDeliveryCompleteTime(time.getTime() + "");
}
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");
......@@ -368,7 +396,7 @@ public class OrderSdkAdapter {
//订单业务类型 1:普通订单 2:虚拟订单
request.setBizType(1);
request.setNote(requestVO.getRemark());
request.setOrderType(getNewOrderType(requestVO.getOrderType(), requestVO.getGmtExpect(),request.getBizType()));
request.setOrderType(getNewOrderType(requestVO.getOrderType(), requestVO.getGmtExpect(), request.getBizType()));
request.setBarCounter(requestVO.getBarCounter());
//商品信息转换
......@@ -479,7 +507,7 @@ public class OrderSdkAdapter {
createOrderRequest.setBizType(orderInfo.getBizType());
createOrderRequest.setIsParent(orderInfo.getIsParent());
createOrderRequest.setNote(orderInfo.getRemark());
createOrderRequest.setOrderType(getNewOrderType(orderInfo.getOrderType(), orderInfo.getGmtExpect(),createOrderRequest.getBizType()));
createOrderRequest.setOrderType(getNewOrderType(orderInfo.getOrderType(), orderInfo.getGmtExpect(), createOrderRequest.getBizType()));
createOrderRequest.setBarCounter(orderInfo.getBarCounter());
//商品信息转换
......@@ -538,7 +566,7 @@ public class OrderSdkAdapter {
private Long convertCreateOrderCost(Long originalAmount, List<OrderSettlementCreateReq> orderSettlementCreateReqList, List<OrderCostCreateReq> orderCostCreateReqs, List<CreateOrderAccountRequest> accounts) {
if (!CollectionUtils.isEmpty(accounts)) {
AssortOrderLogUtil.info("fisherman 构建order_cost_detail数据",accounts,JSON.toJSONString(accounts));
AssortOrderLogUtil.info("fisherman 构建order_cost_detail数据", accounts, JSON.toJSONString(accounts));
for (CreateOrderAccountRequest accountRequest : accounts) {
//老订单服务 1=配送费;3=包装费
if (QueryOrderAccountType.DELIVERY_AMOUNT.equals(accountRequest.getAccountType())
......@@ -1359,7 +1387,7 @@ public class OrderSdkAdapter {
return data;
}
private OrderExtendedReq getOrderExtendedObj(OrderExtendedReq orderExtended){
private OrderExtendedReq getOrderExtendedObj(OrderExtendedReq orderExtended) {
if (Objects.isNull(orderExtended)) {
return null;
}
......@@ -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;
......@@ -1581,7 +1610,7 @@ public class OrderSdkAdapter {
/**
* 老订单类型转换新订单类型
*/
public Integer getNewOrderType(QueryOrderType orderType, Long gmtExpect,Integer bizType) {
public Integer getNewOrderType(QueryOrderType orderType, Long gmtExpect, Integer bizType) {
//订单服务订单类型 1=外卖 4=自提,5=堂食
//外卖平台订单类型 1=常规堂食,2=预约堂食,3=常规外送,4=预约外送,5=常规自取,6=预约自取
boolean isAdvance = bizType != null && bizType.compareTo(BizTypeEnum.ADVANCE_ORDER.getBizType()) == 0;
......@@ -3123,7 +3152,6 @@ public class OrderSdkAdapter {
extInfo.setScore(product.getScore());
}
extInfo.setStapleFood(product.getStapleFood());
extInfo.setOriginalGoodsUid(product.getOriginalGoodsUid());
extInfo.setCartGoodsUid(product.getCartGoodsUid());
// todo 订单行扩展字段商品组
......@@ -3295,7 +3323,7 @@ public class OrderSdkAdapter {
if (null != product.getProductGroupId()) {
extInfo.setProductGroupId(product.getProductGroupId());
}
if (null != product.getIsSendGoods() && product.getIsSendGoods()){
if (null != product.getIsSendGoods() && product.getIsSendGoods()) {
extInfo.setIsSendGoods(true);
}
extInfo.setIsMonthCard(product.getIsMonthCard());
......@@ -3816,26 +3844,29 @@ public class OrderSdkAdapter {
|| account.getAccountType().equals(QueryOrderAccountType.DISCOUNT_COUPON)
|| account.getAccountType().equals(QueryOrderAccountType.FREIGHT_COUPON)
).collect(Collectors.toList());
AssortOrderLogUtil.info("优惠券转换,用于锁券操作 orderbean : accounts", orderBean, accounts);
if (CollectionUtils.isEmpty(couponList)) {
return null;
}
// fisherman end
if (couponList.size() > 1) {
// 找出 配送券
CreateOrderAccountRequest freightCouponAccountBean = couponList.stream().filter(account -> account.getAccountType().equals(QueryOrderAccountType.FREIGHT_COUPON)).findFirst().orElse(null);
TransactionVO couponCodeVerificationTransDto = null;
if (!Objects.isNull(freightCouponAccountBean)) {
couponCodeVerificationTransDto = new TransactionVO();
couponCodeVerificationTransDto.setCode(freightCouponAccountBean.getAccountId());
couponCodeVerificationTransDto.setTotalAmount(freightCouponAccountBean.getPrice());
}
// 过滤出 配送券
List<CreateOrderAccountRequest> collect = couponList.stream().filter(account -> !account.getAccountType().equals(QueryOrderAccountType.FREIGHT_COUPON)).collect(Collectors.toList());
return commonMethodVerification(couponCodeVerificationTransDto, collect, orderBean, openId);
} else {
return commonMethodVerification(null, couponList, orderBean, openId);
}
//fisherman 【01测16灰18全,【华莱士】【疑难专项】一个订单多张优惠券使用场景】 https://www.tapd.cn/43862731/prong/stories/view/1143862731001037477
return this.commonMethodVerificationNew(couponList,orderBean,openId);
// // fisherman end
// if (couponList.size() > 1) {
// // 找出 配送券
// CreateOrderAccountRequest freightCouponAccountBean = couponList.stream().filter(account -> account.getAccountType().equals(QueryOrderAccountType.FREIGHT_COUPON)).findFirst().orElse(null);
// TransactionVO couponCodeVerificationTransDto = null;
// if (!Objects.isNull(freightCouponAccountBean)) {
// couponCodeVerificationTransDto = new TransactionVO();
// couponCodeVerificationTransDto.setCode(freightCouponAccountBean.getAccountId());
// couponCodeVerificationTransDto.setTotalAmount(freightCouponAccountBean.getPrice());
// }
// // 过滤出 配送券
// List<CreateOrderAccountRequest> collect = couponList.stream().filter(account -> !account.getAccountType().equals(QueryOrderAccountType.FREIGHT_COUPON)).collect(Collectors.toList());
// return commonMethodVerification(couponCodeVerificationTransDto, collect, orderBean, openId);
// } else {
// return commonMethodVerification(null, couponList, orderBean, openId);
// }
}
private CouponRequest commonMethodVerification(TransactionVO freightCouponAccountBean,
......@@ -3865,10 +3896,7 @@ public class OrderSdkAdapter {
couponCodeVerificationTransDto.setCode(accountBean.getAccountId());
couponCodeVerificationTransDto.setOpenId(openId);
Integer discountPrice = accountBean.getPrice().intValue();
if (discountPrice != null && discountPrice < 0) {
discountPrice = 0 - discountPrice;
}
couponCodeVerificationTransDto.setTotalAmount(accountBean.getPrice().longValue());
couponCodeVerificationTransDto.setTotalAmount(Math.abs(discountPrice.longValue()));
//商品券预教研
List<ProductRedeemVO> products = new ArrayList<>();
if (QueryOrderAccountType.PRODUCT_COUPON.getCode().equals(accountBean.getAccountType().getCode())) {
......@@ -3905,6 +3933,73 @@ public class OrderSdkAdapter {
return couponRequest;
}
private CouponRequest commonMethodVerificationNew(List<CreateOrderAccountRequest> collect,
OrderBeanV1 orderBean,
String openId) {
CouponRequest couponRequest = new CouponRequest();
couponRequest.setReqtype(71);
couponRequest.setVer(Integer.valueOf(Version.VERSION_1));
couponRequest.setPartnerId(Integer.parseInt(orderBean.getCompanyId()));
ActivityChannelEnum activityChannelEnum = orderTypeEnumConvert2ActivityChannel(orderBean.getOrderType());
if (activityChannelEnum == null) {
activityChannelEnum = ActivityChannelEnum.pickup;
}
couponRequest.setChannel(activityChannelEnum.getCode());
couponRequest.setStation_id("-1");
couponRequest.setOperator_id("-1");
couponRequest.setStore_id(orderBean.getShopId());
// couponRequest.setMemberId(orderBean.getUserId());
couponRequest.setOpenid(openId);
// 订单号 替换成唯一序号
couponRequest.setTrans_id(orderBean.getOid());
couponRequest.setBusiness_date(DateUtil.convert2String(new Date(), DateUtil.FORMAT_yyyyMMdd));
List<TransactionVO> transactions = this.getTransactionList( collect, orderBean, openId);
// 配送券逻辑 end
couponRequest.setTransactions(transactions);
return couponRequest;
}
private List<TransactionVO> getTransactionList(List<CreateOrderAccountRequest> collect,
OrderBeanV1 orderBean,
String openId) {
List<TransactionVO> transactions = new ArrayList<>();
collect.forEach(accountBean -> {
TransactionVO couponCodeVerificationTransDto = new TransactionVO();
couponCodeVerificationTransDto.setCode(accountBean.getAccountId());
couponCodeVerificationTransDto.setOpenId(openId);
Integer discountPrice = accountBean.getPrice().intValue();
couponCodeVerificationTransDto.setTotalAmount(Math.abs(discountPrice.longValue()));
//商品券预教研
List<ProductRedeemVO> products = new ArrayList<>();
if (QueryOrderAccountType.PRODUCT_COUPON.getCode().equals(accountBean.getAccountType().getCode())) {
for (int i = 0; i < orderBean.getProductList().size(); i++) {
ProductBeanV1 productBean = orderBean.getProductList().get(i);
String pid = StringUtils.isNotBlank(productBean.getSpecification()) ? productBean.getSpecification() : productBean.getProductId();
if (!org.springframework.util.CollectionUtils.isEmpty(orderBean.getProductList().get(i).getDiscountList())) {
List<ProductDiscountV1> discounts = orderBean.getProductList().get(i).getDiscountList().stream().
filter(productDiscount -> productDiscount.getDiscountId().equals(accountBean.getAccountId())).collect(Collectors.toList());
for (ProductDiscountV1 productDiscount : discounts) {
if (productDiscount.getDiscountType() == null || productDiscount.getDiscountType() == 0) {
continue;
}
ProductRedeemVO couponCodeVerificationProductDto = new ProductRedeemVO();
couponCodeVerificationProductDto.setPid(pid);
couponCodeVerificationProductDto.setConsume_num(productDiscount.getDiscountQty());
couponCodeVerificationProductDto.setSeq(i + 1);
couponCodeVerificationProductDto.setRedeem_price(new BigDecimal(productBean.getPrice()));
products.add(couponCodeVerificationProductDto);
}
}
}
}
if (CollectionUtils.isNotEmpty(products)) {
couponCodeVerificationTransDto.setProducts(products);
}
transactions.add(couponCodeVerificationTransDto);
});
return transactions;
}
private ActivityChannelEnum orderTypeEnumConvert2ActivityChannel(Integer orderType) {
if (Objects.equals(OldOrderType.TAKE_OUT.getCode(), orderType)) {
return ActivityChannelEnum.delivery;
......
......@@ -34,4 +34,11 @@ public class ProductBindingCouponType {
*/
// private int sequence;
//是否开启分账(0不开启,1开启)
private Integer isSplitAccount;
//最大核销次数"
private Integer maxRedeemTimes;
//券单价(分)
private Integer price;
}
......@@ -32,8 +32,10 @@ import cn.freemud.management.entities.dto.request.order.MCCafeProductRedeemVo;
import cn.freemud.management.entities.dto.request.order.MCCafeTransactionVo;
import cn.freemud.management.entities.dto.response.coupon.McdNetBatchQueryResponse;
import cn.freemud.management.entities.dto.response.coupon.McdNetCouponProductRespDto;
import cn.freemud.management.enums.OrderSource;
import cn.freemud.service.mccafe.CouponClientService;
import cn.freemud.utils.BeanUtil;
import cn.freemud.utils.PropertyConvertUtil;
import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.ordercenter.entities.v1.AccountBeanV1;
import com.freemud.application.sdk.api.ordercenter.entities.v1.OrderBeanV1;
......@@ -787,4 +789,91 @@ public class CouponAdapter {
return mcCafeCouponLockRequest;
}
/**
* 新版本 支持多券 批量核销操作
* @param orderBean
* @param couponReqType
* @return
*/
public CouponCodeVerificationDto convert2CouponCodeVerificationDto(OrderBeanV1 orderBean, CouponReqType couponReqType) {
CouponCodeVerificationDto couponCodeVerificationDto = new CouponCodeVerificationDto();
couponCodeVerificationDto.setVer(Integer.valueOf(Version.VERSION_1));
couponCodeVerificationDto.setReqtype(couponReqType.getCode());
couponCodeVerificationDto.setPartnerId(orderBean.getCompanyId());
Integer orderType = orderBean.getType();
//商城单子用NewOrderType
if (Objects.equals(OrderSource.MALL.getSource(), orderBean.getSource())) {
orderType = orderBean.getNewOrderType();
}
ActivityChannelEnum activityChannelEnum = PropertyConvertUtil.orderTypeEnumConvert2ActivityChannel(orderType);
if (activityChannelEnum == null) {
activityChannelEnum = ActivityChannelEnum.pickup;
}
couponCodeVerificationDto.setChannel(activityChannelEnum.getCode());
couponCodeVerificationDto.setStation_id("-1");
couponCodeVerificationDto.setOperator_id("-1");
couponCodeVerificationDto.setStore_id(orderBean.getShopId());
couponCodeVerificationDto.setMemberId(orderBean.getUserId());
// 订单号 替换成唯一序号
couponCodeVerificationDto.setTrans_id(orderBean.getOid());
couponCodeVerificationDto.setBusiness_date(DateUtil.convert2Str(new Date(), DateUtil.FORMAT_yyyyMMdd));
List<CouponCodeVerificationTransDto> transactions = this.getTransactions(orderBean, couponCodeVerificationDto);
couponCodeVerificationDto.setTransactions(transactions);
return couponCodeVerificationDto;
}
/**
* 组装核销 参数
* @param orderBean
* @return
*/
private List<CouponCodeVerificationTransDto> getTransactions(OrderBeanV1 orderBean, CouponCodeVerificationDto couponCodeVerificationDto) {
List<AccountBeanV1> accountList = orderBean.getAccountList();
List<CouponCodeVerificationTransDto> transactions = new ArrayList<>();
long price = 0L;
for (AccountBeanV1 accountBean : accountList) {
if (OrderAccountType.verificationCoupon.contains(accountBean.getType())) {
List<CouponCodeVerificationProductDto> products = new ArrayList<>();
if (OrderAccountType.PRODUCT_COUPON.getCode().equals(accountBean.getType())) {
for (int i = 0; i < orderBean.getProductList().size(); i++) {
ProductBeanV1 productBean = orderBean.getProductList().get(i);
String pid = StringUtils.isNotBlank(productBean.getSpecification()) ? productBean.getSpecification() : productBean.getProductId();
if (!org.springframework.util.CollectionUtils.isEmpty(orderBean.getProductList().get(i).getDiscountList())) {
List<ProductDiscountV1> discounts = orderBean.getProductList().get(i).getDiscountList().stream().
filter(productDiscount -> productDiscount.getDiscountId().equals(accountBean.getAccountId())).collect(Collectors.toList());
for (ProductDiscountV1 productDiscount : discounts) {
if (productDiscount.getDiscountType() == null || productDiscount.getDiscountType() == 0) {
continue;
}
CouponCodeVerificationProductDto couponCodeVerificationProductDto = new CouponCodeVerificationProductDto();
couponCodeVerificationProductDto.setPID(pid);
couponCodeVerificationProductDto.setConsume_num(productDiscount.getDiscountQty());
couponCodeVerificationProductDto.setSeq(i + 1);
couponCodeVerificationProductDto.setRedeem_price(new BigDecimal(productBean.getPrice()));
products.add(couponCodeVerificationProductDto);
}
}
}
}
CouponCodeVerificationTransDto couponCodeVerificationTransDto = new CouponCodeVerificationTransDto();
if (!products.isEmpty()) {
couponCodeVerificationTransDto.setProducts(products);
}
couponCodeVerificationTransDto.setCode(accountBean.getAccountId());
Long discountPriceL = accountBean.getPrice();
if (discountPriceL != null) {
int abs = Math.abs(discountPriceL.intValue());
couponCodeVerificationTransDto.setTotalAmount(abs);
price += abs;
}
transactions.add(couponCodeVerificationTransDto);
}
}
// KA 【ID1032412】【订单聚合层】核销传入优惠金额之传劵优惠只设置券的优惠金额进行上报
couponCodeVerificationDto.setOrderDiscountAmount(price);
return transactions;
}
}
......@@ -22,8 +22,7 @@ import cn.freemud.entities.dto.activity.ShareDiscountActivityDto;
import cn.freemud.entities.dto.order.CreateOrderAccountDto;
import cn.freemud.entities.dto.order.CreateOrderProductDto;
import cn.freemud.entities.dto.order.*;
import cn.freemud.entities.dto.pay.CombPayResponse;
import cn.freemud.entities.dto.pay.OrderPayResponse;
import cn.freemud.entities.dto.pay.*;
import cn.freemud.entities.dto.promotion.OrderBeanRequest;
import cn.freemud.entities.dto.promotion.ShoppingCartGoodsResponse;
import cn.freemud.entities.dto.shoppingCart.ActivityDiscountsDto;
......@@ -64,6 +63,7 @@ import com.freemud.application.sdk.api.ordercenter.request.OrderConditionsReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq;
import com.freemud.application.sdk.api.ordercenter.response.BaseDownLoadResponse;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.*;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.AfterSalesOrderResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderPayItemResp;
......@@ -1020,6 +1020,7 @@ public class OrderAdapter {
public QueryOrdersDto convent2QueryOrdersDto(QueryOrderDto queryOrderDto, String memberId, String channelType) {
QueryOrdersDto queryOrdersDto = new QueryOrdersDto();
queryOrdersDto.setUserId(memberId);
queryOrdersDto.setCompanyId(queryOrderDto.getPartnerId());
queryOrdersDto.setPageSize(queryOrderDto.getPageSize() != null ? queryOrderDto.getPageSize() : 10);
queryOrdersDto.setPageNumber(queryOrderDto.getPageNumber() != null ? queryOrderDto.getPageNumber() : 1);
......@@ -1460,7 +1461,9 @@ public class OrderAdapter {
//积分抵扣金额
Long customerScoreAmount = 0L;
String customerScorePrompt = null;
List<CouponInfoVo> couponInfos = new ArrayList<>();
if (CollectionUtils.isNotEmpty(ordersBean.getAccountList())) {
// fisherman 组装一单多券 使用的券信息
for (AccountBeanV1 accountBean : ordersBean.getAccountList()) {
if (accountBean.getPrice() < 0 && !OldOrderAccountType.MONTH_CARD_TOTAL_DISCOUNT.getCode().equals(accountBean.getType())) {
discountTotalAmount = discountTotalAmount + (0 - accountBean.getPrice());
......@@ -1491,6 +1494,7 @@ public class OrderAdapter {
couponInfoVo.setCouponCode(accountBean.getAccountId());
couponInfoVo.setCouponName(accountBean.getName());
couponInfoVo.setCouponAmount(accountBean.getPrice() < 0 ? 0 - accountBean.getPrice() : accountBean.getPrice());
// fisherman 后续已维护到 couponinfos ,请停止维护 该字段
responseVo.setCouponInfo(couponInfoVo);
couponAmount = accountBean.getPrice() < 0 ? 0 - accountBean.getPrice() : accountBean.getPrice();
}
......@@ -1507,8 +1511,16 @@ public class OrderAdapter {
if (OldOrderAccountType.FREIGHT_COUPON.getCode().equals(accountBean.getType())) {
responseVo.setFreightCouponName(accountBean.getName());
}
if (OrderAccountType.verificationCoupon.contains(accountBean.getType())) {
CouponInfoVo couponInfoVo = new CouponInfoVo();
couponInfoVo.setCouponCode(accountBean.getAccountId());
couponInfoVo.setCouponName(accountBean.getName());
couponInfoVo.setCouponAmount(Math.abs(accountBean.getPrice()));
couponInfos.add(couponInfoVo);
}
}
}
responseVo.setCouponInfos(couponInfos);
responseVo.setDeliveryAmount(deliveryAmount);
responseVo.setOriginalDeliveryAmount(originalDeliveryAmount);
responseVo.setPackageAmount(packageAmount);
......@@ -2265,7 +2277,8 @@ public class OrderAdapter {
accountVo.setType(type);
if (type == OrderSettlementType.PRODUCT_COUPON.getIndex() || type == OrderSettlementType.CASH_COUPON.getIndex()
|| type == OrderSettlementType.DISCOUNT_COUPON.getIndex()) {
accountVo.setTypeName("优惠券");
// fisherman ->修改成券名称
accountVo.setTypeName(StringUtils.isEmpty(orderSettlement.getNote()) ? "优惠券" : orderSettlement.getNote());
} else if (type == OrderSettlementType.FULL_REDUCTION.getIndex()) {
accountVo.setTypeName("满减");
} else if (type == OrderSettlementType.POINTS.getIndex()) {
......@@ -4255,6 +4268,7 @@ public class OrderAdapter {
public OrderConditionsReq convent2QueryOrdersDtoES(OrderConditionsReq query, String memberId, String channelType, Integer queryOrderStatus, Integer queryOrderType, Integer queryPayStatus) {
OrderConditionsReq queryOrdersDto = new OrderConditionsReq();
queryOrdersDto.setUserId(memberId);
queryOrdersDto.setPartnerId(query.getPartnerId());
queryOrdersDto.setPageSize(query.getPageSize() != null ? query.getPageSize() : 10);
queryOrdersDto.setPageNum(query.getPageNum() != null ? query.getPageNum() : 1);
......
......@@ -231,6 +231,7 @@ public class PointsMallOrderAdapter {
productBeans.add(productBean);
}
}
requestDto.setProducts(productBeans);
requestDto.setBody(payProductName);
return requestDto;
}
......
......@@ -33,5 +33,8 @@ public class ProductInfosDto {
private Integer count;
private List<ProductInfo> products;
//传给pos的商品编号类型(0传三方编号给pos,1传货号给pos,默认传三方编号
private Integer toPosProductIdType;
}
}
\ No newline at end of file
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;
......
......@@ -13,7 +13,7 @@
package cn.freemud.entities.dto.product;
import cn.freemud.entities.dto.ProductComboListDto;
import cn.freemud.entities.dto.ProductGroupDto;
import com.freemud.sdk.api.assortment.order.request.order.ProductBindingCouponType;
import lombok.Data;
import java.util.List;
......@@ -84,4 +84,8 @@ public class ProductInfo {
//用于标识虚拟商品是否限制购买数量,0-否、1-是
private Integer isLimitNumProduct;
//虚拟商品的券信息集合
private List<ProductBindingCouponType> productBindingCouponTypes;
}
......@@ -29,4 +29,8 @@ public class ActivityDiscountsDto {
*/
private Integer extendType;
private String cartGoodsUid;
/**
* 享受优惠点优先级, 值越大表示优惠优先级高
*/
private Integer priority;
}
......@@ -16,7 +16,6 @@ import cn.freemud.entities.dto.PromotionMessageDto;
import cn.freemud.entities.dto.activity.PayGiftCheckAndJoinResponseDto;
import cn.freemud.entities.dto.activity.PayGiftCheckAndJoinResponseDtoNew;
import cn.freemud.entities.dto.promotion.QueryHistoryGroupVO;
import cn.freemud.entities.dto.promotion.QuerySpellGroupVo;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.AfterSalesOrderResp;
......@@ -357,6 +356,8 @@ public class QueryOrderResponseVo {
/**
* 优惠券信息
* 后续优惠券信息 以维护到 couponInfos 请停止使用该字段 20211026
* 记得和前端对接下 小程序版本 是否支持 couponInfos
*/
private CouponInfoVo couponInfo;
......@@ -665,4 +666,12 @@ public class QueryOrderResponseVo {
//是否已开票,true已开票,默认false未开票
private Boolean needInvoice;
/**
* 可使用多张优惠券, 使用该字段展示所有使用的优惠券信息
* 包括 :
* cn.freemud.enums.OrderAccountType#verificationCoupon
* 后续 需要移除 该类里面的 couponinfo字段, 20211026
*/
private List<CouponInfoVo> couponInfos = new ArrayList<>();
}
......@@ -17,7 +17,7 @@ import com.freemud.sdk.api.assortment.order.response.order.PayAccessResponse;
public interface OrderBusinessService {
PayAccessResponse payAccess(ConfirmOrderRequest confirmOrderRequest);
Integer getPaySuccessTimeout(ConfirmOrderRequest confirmOrderRequest, PaySuccessReq request);
// Integer getPaySuccessTimeout(ConfirmOrderRequest confirmOrderRequest, PaySuccessReq request);
CreateOrderResponse createOrderFlow(CreateOrderRequest createOrderRequest);
......
......@@ -112,7 +112,7 @@ public class OrderBusinessServiceImpl implements OrderBusinessService {
request.setMealCodeRule(confirmOrderRequest.getMealCodeRule());
request.setPickUpGoodsNo(confirmOrderRequest.getPickUpGoodsNo());
// 引入门店基础服务 查询自动制作完成配置时间,预约单单独超时任务设置
request.setTimeout(getPaySuccessTimeout(confirmOrderRequest, request));
request.setTimeout(this.getPaySuccessTimeout(confirmOrderRequest, request));
if (!org.springframework.util.CollectionUtils.isEmpty(confirmOrderRequest.getOrderSettlements())) {
List<OrderSettlementCreateReq> orderSettlementCreateReqs = new ArrayList<>();
......@@ -176,7 +176,6 @@ public class OrderBusinessServiceImpl implements OrderBusinessService {
return orderSdkAdapter.convent2PayAccessResponse(response);
}
@Override
public Integer getPaySuccessTimeout(ConfirmOrderRequest confirmOrderRequest, PaySuccessReq request) {
// 合阔pos 商户未接单退款超时时间
if (confirmOrderRequest.getNotAutomaticTwistTime() != null) {
......
......@@ -13,6 +13,7 @@
package cn.freemud.service.coupon.impl;
import cn.freemud.adapter.CouponAdapter;
import cn.freemud.amp.body.OrderBody;
import cn.freemud.amqp.Header;
import cn.freemud.amqp.MQAction;
import cn.freemud.amqp.MQMessage;
......@@ -80,28 +81,30 @@ public class PlatformCouponRelationServiceImpl implements CouponRelationService
@Override
public BaseResponse verificationCoupon(List<AccountBeanV1> accountList, OrderBeanV1 orderBean, CouponReqType couponReqType) {
// AppLogUtil.infoLog("fiserhman 券码核销 begin", JSON.toJSONString(accountList), JSON.toJSONString(orderBean));
if (CollectionUtils.isEmpty(accountList)) {
return ResponseUtil.success();
}
// 需要判断 accountList 里面 是都 同时包含 配送券+ other券
boolean isDoubleCoupon = checkAccountList(accountList);
if (isDoubleCoupon) {
Integer code = OrderAccountType.FREIGHT_COUPON.getCode();
// 运费券 塞进 核销接口里面, 这里真的是贼恶心 逻辑不敢动
AccountBeanV1 freightCouponAccountBean = accountList.stream().filter(accountBean -> code.equals(accountBean.getType())).findFirst().orElse(null);
CouponCodeVerificationTransDto couponCodeVerificationTransDto = null;
if (!Objects.isNull(freightCouponAccountBean)) {
couponCodeVerificationTransDto = new CouponCodeVerificationTransDto();
couponCodeVerificationTransDto.setCode(freightCouponAccountBean.getAccountId());
couponCodeVerificationTransDto.setTotalAmount(freightCouponAccountBean.getPrice().intValue());
}
// 过滤出配送券
List<AccountBeanV1> collect = accountList.stream().filter(accountBean -> !code.equals(accountBean.getType())).collect(Collectors.toList());
return commonMethodVerification(couponCodeVerificationTransDto, collect, orderBean, couponReqType);
} else {
return commonMethodVerification(null, accountList, orderBean, couponReqType);
}
// fisherman 【01测16灰18全,【华莱士】【疑难专项】一个订单多张优惠券使用场景】 https://www.tapd.cn/43862731/prong/stories/view/1143862731001037477
BaseResponse baseResponse = this.batchCouponHandle(orderBean, couponReqType);
return baseResponse;
// // 需要判断 accountList 里面 是都 同时包含 配送券+ other券
// boolean isDoubleCoupon = checkAccountList(accountList);
// if (isDoubleCoupon) {
// Integer code = OrderAccountType.FREIGHT_COUPON.getCode();
// // 运费券 塞进 核销接口里面, 这里真的是贼恶心 逻辑不敢动
// AccountBeanV1 freightCouponAccountBean = accountList.stream().filter(accountBean -> code.equals(accountBean.getType())).findFirst().orElse(null);
// CouponCodeVerificationTransDto couponCodeVerificationTransDto = null;
// if (!Objects.isNull(freightCouponAccountBean)) {
// couponCodeVerificationTransDto = new CouponCodeVerificationTransDto();
// couponCodeVerificationTransDto.setCode(freightCouponAccountBean.getAccountId());
// couponCodeVerificationTransDto.setTotalAmount(freightCouponAccountBean.getPrice().intValue());
// }
// // 过滤出配送券
// List<AccountBeanV1> collect = accountList.stream().filter(accountBean -> !code.equals(accountBean.getType())).collect(Collectors.toList());
// return commonMethodVerification(couponCodeVerificationTransDto, collect, orderBean, couponReqType);
// } else {
// return commonMethodVerification(null, accountList, orderBean, couponReqType);
// }
}
/**
......@@ -237,6 +240,47 @@ public class PlatformCouponRelationServiceImpl implements CouponRelationService
return ResponseUtil.success();
}
/**
* 单笔订单 多券核销
* @param orderBean
* @param couponReqType
* @return
*/
private BaseResponse batchCouponHandle(OrderBeanV1 orderBean, CouponReqType couponReqType) {
CouponCodeVerificationDto couponCodeVerificationDto = couponAdapter.convert2CouponCodeVerificationDto(orderBean, couponReqType);
if (Objects.isNull(couponCodeVerificationDto) || couponCodeVerificationDto.getTransactions().isEmpty()) {
return ResponseUtil.success();
}
couponCodeVerificationDto.setOrderTotalAmount(orderBean.getOriginalAmount() == null ? 0L : orderBean.getOriginalAmount().longValue());
couponCodeVerificationDto.setOrderPaymentAmount(orderBean.getAmount());
// 核销券新增参数:组织机构ID
couponCodeVerificationDto.setChannel_ids(storeService.getOrgIdsArr(orderBean.getCompanyId(), orderBean.getShopId()));
boolean ok = false;
Exception lastException = null;
CouponCodeResponseDto couponCodeResponseDto = null;
try {
couponCodeResponseDto = couponOfflineClient.verification(couponCodeVerificationDto);
ThirdPartyLog.infoConvertJson(System.currentTimeMillis(), System.currentTimeMillis(), "/api", couponCodeVerificationDto, couponCodeResponseDto);
if (Objects.nonNull(couponCodeResponseDto) && Objects.equals(couponCodeResponseDto.getStatusCode(), ResponseResult.SUCCESS.getCode())) {
ok = true;
}
} catch (Exception ex) {
lastException = ex;
ErrorLog.printErrorLog("verification_error", "/api", couponCodeVerificationDto, ex);
}
if (lastException != null) {
sendMessage(orderBean, LogThreadLocal.getTrackingNo(), couponCodeVerificationDto, lastException);
} else if (!ok || Objects.equals(baffleOpen, true)) {
sendMessage(orderBean, LogThreadLocal.getTrackingNo(), couponCodeVerificationDto, ok ? "模拟券核销失败" : couponCodeResponseDto);
}
if (!ok) {
emailAlertService.sendEmailAlert("核销券码失败", String.format("request:%s \r\nresponse:%s", JSONObject.toJSONString(couponCodeVerificationDto), JSONObject.toJSONString(lastException == null ? couponCodeResponseDto : lastException)));
return ResponseUtil.error(ResponseResult.COUPON_VERIFICATION_FAIL);
}
return ResponseUtil.success();
}
/**
* 发送消息
......
......@@ -23,12 +23,17 @@ import cn.freemud.entities.dto.delivery.DeliveryBaseResponse;
import cn.freemud.entities.dto.delivery.GetDeliveryFlagRequest;
import cn.freemud.entities.dto.delivery.GetDeliveryFlagResponseDto;
import cn.freemud.entities.dto.order.BusinessDate;
import cn.freemud.entities.dto.order.FacePayResponseDto;
import cn.freemud.entities.dto.pay.PayOrderDto;
import cn.freemud.entities.dto.pay.PayProductDto;
import cn.freemud.entities.dto.pay.UnifiedOrderRequestDto;
import cn.freemud.entities.dto.shoppingCart.GetShoppingCartGoodsApportionDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.dto.store.*;
import cn.freemud.entities.dto.user.CustomerPropertyBaseResponse;
import cn.freemud.entities.dto.user.GetSvcInfoByMemberIdResponseVo;
import cn.freemud.entities.dto.user.StatisticalScoreRequestVo;
import cn.freemud.entities.vo.CreateOrderResponseVo;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.GetMemberCouponRequestVo;
import cn.freemud.entities.vo.SellCouponCreateOrderVo;
......@@ -56,6 +61,8 @@ import com.freemud.application.sdk.api.membercenter.request.QueryReceiveAddressR
import com.freemud.application.sdk.api.membercenter.response.QueryReceiveAddressResponse;
import com.freemud.application.sdk.api.membercenter.service.MemberCenterService;
import com.freemud.application.sdk.api.ordercenter.enums.BizTypeEnum;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderItemResp;
import com.freemud.application.sdk.api.paymentcenter.client.service.PaymentNewService;
import com.freemud.application.sdk.api.storecenter.request.QueryDeliveryRequest;
import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest;
......@@ -1362,5 +1369,90 @@ public class CheckOrder {
}
}
public UnifiedOrderRequestDto convert2UnifiedOrderRequestDto(OrderInfoReqs orderInfo, String openId, Long cashPrice,
Long clientCode, String reverseNotifyiDcUrl, String payTimeOutTime) {
String partnerId = orderInfo.getPartnerId();
String storeId = orderInfo.getStoreId();
String appId = orderInfo.getAppId();
//现金支付唤起线上支付
UnifiedOrderRequestDto requestDto = new UnifiedOrderRequestDto();
requestDto.setTransId(orderInfo.getOrderCode());
requestDto.setPartnerId(partnerId);
requestDto.setStoreId(storeId);
requestDto.setAmount(cashPrice);
String businessDate = DateUtil.convert2String(new Date(), "yyyyMMdd");
requestDto.setBusinessDate(businessDate);
requestDto.setClientCode(clientCode);
requestDto.setFoodOrderType(getFoodOrderType(1));
requestDto.setNotifyUrl(reverseNotifyiDcUrl);
requestDto.setOpenId(openId);
requestDto.setPayTimeOutTime(payTimeOutTime);
List<PayProductDto> productBeans = new ArrayList<>();
String payProductName = "";
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(orderInfo.getOrderItemList())) {
for (OrderItemResp orderProductBean : orderInfo.getOrderItemList()) {
PayProductDto productBean = new PayProductDto();
productBean.setId(orderProductBean.getProductId());
productBean.setQuantity(orderProductBean.getProductQuantity());
productBean.setPrice(orderProductBean.getProductPrice().longValue());
if (StringUtils.isNotBlank(payProductName)) {
payProductName = orderProductBean.getProductName();
} else if (payProductName.endsWith("...")) {
//不处理
} else {
payProductName = payProductName + "...";
}
productBean.setName(orderProductBean.getProductName());
productBeans.add(productBean);
}
}
requestDto.setProducts(productBeans);
requestDto.setBody(payProductName);
return requestDto;
}
/**
* 预支付接口获取类型
* @return
*/
private String getFoodOrderType(Integer orderType) {
//1=外卖 4=自提,5=堂食
//qr_order(店内扫码点餐),pre_order(预点到店自提),home_delivery (外送到家)
String foodOrderType;
switch (orderType) {
case 1:
foodOrderType = "home_delivery";
break;
case 4:
foodOrderType = "pre_order";
break;
case 5:
default:
foodOrderType = "qr_order";
break;
}
return foodOrderType;
}
public void convent2CreateOrderResponseVo(CreateOrderResponseVo createOrderResponseVo, String appId, FacePayResponseDto response){
createOrderResponseVo.setWxappId(appId);
createOrderResponseVo.setFmId(response.getFmId());
createOrderResponseVo.setPaySuccess(false);
String payOrderDto = response.getPayOrder();
PayOrderDto payOrder = JSONObject.parseObject(payOrderDto, PayOrderDto.class);
if (payOrder != null) {
createOrderResponseVo.setTimestamp(payOrder.getTimestamp());
createOrderResponseVo.setNonceStr(payOrder.getNonceStr());
createOrderResponseVo.setPackageX(payOrder.getPackageX());
createOrderResponseVo.setSignType(payOrder.getSignType());
createOrderResponseVo.setSign(payOrder.getPaySign());
createOrderResponseVo.setOrderStr(payOrder.getAliPayOrder());
}
}
}
......@@ -57,13 +57,20 @@ 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())) {
//1传货号给当三方商品编号给pos
boolean toPosCustomerCode = productInfosDto.getData().getToPosProductIdType() != null && productInfosDto.getData().getToPosProductIdType() == 1;
productInfosDto.getData().getProducts().forEach(productBean -> {
GetProductsVo spuProductsVo = new GetProductsVo();
//保存货号到三方商品编号字段
if(toPosCustomerCode){
spuProductsVo.setCustomerCode(productBean.getProductCode());
spuProductsVo.setProductCode(productBean.getCustomerCode());
}else {
spuProductsVo.setCustomerCode(productBean.getCustomerCode());
spuProductsVo.setProductCode(productBean.getProductCode());
}
List<AttributeValue> attributeValues = new ArrayList<>();
//第三方商品属性信息
if (CollectionUtils.isNotEmpty(productBean.getProductAttributeGroupList())) {
......@@ -84,9 +91,9 @@ public class ItemServiceImpl implements ItemService{
resultMap.put(productBean.getPid(), spuProductsVo);
//多规格商品
saveSkuProductsThirdInfo(productBean,productBean.getProductAttributeGroupList(),resultMap);
saveSkuProductsThirdInfo(productBean,productBean.getProductAttributeGroupList(),resultMap,toPosCustomerCode);
//套餐商品内子商品
saveComboProductsThirdInfo(productBean,resultMap);
saveComboProductsThirdInfo(productBean,resultMap,toPosCustomerCode);
});
}
return resultMap;
......@@ -96,12 +103,19 @@ public class ItemServiceImpl implements ItemService{
/**
* 多规格商品保存第三方信息
*/
private void saveSkuProductsThirdInfo(ProductInfo productBean,List<ProductAttributeGroup> productAttributeGroupList,Map<String, GetProductsVo> resultMap){
private void saveSkuProductsThirdInfo(ProductInfo productBean,List<ProductAttributeGroup> productAttributeGroupList,
Map<String, GetProductsVo> resultMap, boolean toPosCustomerCode){
if (CollectionUtils.isNotEmpty(productBean.getSkuList())) {
for (SkuProduct skuProductBean : productBean.getSkuList()) {
GetProductsVo skuProductsVo = new GetProductsVo();
//保存货号到三方商品编号字段
if(toPosCustomerCode){
skuProductsVo.setCustomerCode(skuProductBean.getProductCode());
skuProductsVo.setProductCode(skuProductBean.getCustomerCode());
}else {
skuProductsVo.setCustomerCode(skuProductBean.getCustomerCode());
skuProductsVo.setProductCode(skuProductBean.getProductCode());
}
//第三方商品规格值id
if (CollectionUtils.isNotEmpty(skuProductBean.getSkuSpecValues())) {
List<String> list = new ArrayList<>();
......@@ -125,15 +139,21 @@ public class ItemServiceImpl implements ItemService{
/**
* 套餐商品保存第三方信息
*/
private void saveComboProductsThirdInfo(ProductInfo productBean,Map<String, GetProductsVo> resultMap){
private void saveComboProductsThirdInfo(ProductInfo productBean,Map<String, GetProductsVo> resultMap,boolean toPosCustomerCode){
GetProductsVo spuProductsVo = resultMap.get(productBean.getPid());
List<Integer> stapleFood = Arrays.asList(0,1);
//套餐固定商品
if (CollectionUtils.isNotEmpty(productBean.getProductComboList())) {
for (ProductComboListDto productComboListDto : productBean.getProductComboList()) {
GetProductsVo comboProductsVo = new GetProductsVo();
//保存货号到三方商品编号字段
if(toPosCustomerCode){
comboProductsVo.setCustomerCode(productComboListDto.getProductCode());
comboProductsVo.setProductCode(productComboListDto.getCustomerCode());
}else {
comboProductsVo.setCustomerCode(productComboListDto.getCustomerCode());
comboProductsVo.setProductCode(productComboListDto.getProductCode());
}
if (productComboListDto.getIsStaple()!=null && stapleFood.contains(productComboListDto.getIsStaple())) {
comboProductsVo.setStapleFood(productComboListDto.getIsStaple());
} else {
......@@ -171,8 +191,15 @@ public class ItemServiceImpl implements ItemService{
for(GroupDetail groupDetailBean : group.getGroupDetail()){
//多规格获取sku信息
GetProductsVo groupProductsVo = new GetProductsVo();
//保存货号到三方商品编号字段
if(toPosCustomerCode){
groupProductsVo.setCustomerCode(groupDetailBean.getProductCode());
groupProductsVo.setProductCode(groupDetailBean.getCustomerCode());
}else {
groupProductsVo.setCustomerCode(groupDetailBean.getCustomerCode());
groupProductsVo.setProductCode(groupDetailBean.getProductCode());
}
//第三方商品属性信息
groupProductsVo.setProductAttributeGroupList(groupDetailBean.getProductAttributeGroupList());
......
......@@ -85,7 +85,7 @@ public class OrderQueueService {
String redisKey = RedisKeyConstant.KGD_PAYMENT_CANCEL_OID + oid ;
//取消支付订单缓存
// redisCache.save(redisKey, true, 180L, TimeUnit.MINUTES);
redisCache.save(redisKey, true, 120L, TimeUnit.MINUTES);
}
......
......@@ -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;
......@@ -89,6 +88,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;
......@@ -257,7 +257,8 @@ public class OrderServiceImpl implements Orderservice {
private OrderQueueService orderQueueService;
@Autowired
private PayServiceImpl payServiceImpl;
@Autowired
private ComPayClient comPayClient;
@Autowired
private MicroOpenplatformClient microOpenplatformClient;
......@@ -396,7 +397,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;
......@@ -2448,7 +2480,6 @@ public class OrderServiceImpl implements Orderservice {
if (CollectionUtils.isNotEmpty(productDto.getComboProduct())) {
for (CreateOrderProductRequest comboProduct : productDto.getComboProduct()) {
String comboSkuId = comboProduct.getSpecification();
System.out.println(comboSkuId);
if (products.get(comboSkuId) != null) {
comboProduct.setCustomerCode(products.get(comboSkuId).getCustomerCode());
comboProduct.setProductCode(products.get(comboSkuId).getProductCode());
......
......@@ -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) {
......@@ -969,7 +968,6 @@ public class PayServiceImpl {
UpdateOrderReq updateOrderReq = new UpdateOrderReq();
updateOrderReq.setOrderCode(orderEditRequest.getOrderId());
updateOrderReq.setExtInfo(orderEditRequest.getExtInfo());
updateOrderReq.setOrderClient(OrderClientType.SAAS.getIndex());
updateOrderReq.setOrderPayItem(orderEditRequest.getOrderPayItem());
updateOrderReq.setPayChannel(orderEditRequest.getPayChannel());
updateOrderReq.setPayChannelName(orderEditRequest.getPayChannelName());
......
......@@ -329,7 +329,7 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
Date endDate;
if (StringUtils.isBlank(queryOrderVo.getStartDate()) || StringUtils.isBlank(queryOrderVo.getEndDate())) {
Date now = new Date();
startDate = DateUtil.addMonths(now, -6);
startDate = DateUtil.addMonths(now, -2);
endDate = DateUtil.addDays(now, 1);
} else {
String startDateStr = queryOrderVo.getStartDate() + " 00:00:00";
......@@ -372,6 +372,7 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
List<ScoreRecordVo> result = new ArrayList<>();
List<OrderInfoReqs> list = userorderResponse.getResult().getItemList();
list.forEach(order -> {
if (order != null){
ScoreRecordVo responseVo = new ScoreRecordVo();
responseVo.setOrderCode(order.getOrderCode());
responseVo.setOrderStatus(order.getOrderState());
......@@ -400,6 +401,7 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
responseVo.setAddressDetail(deliveryContactInfoResp.getAddressDetail());
}
result.add(responseVo);
}
});
PageInfo<ScoreRecordVo> pageInfo = new PageInfo<>();
pageInfo.setList(result);
......
......@@ -7,10 +7,15 @@ import cn.freemud.amp.service.SendCouponService;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.CommonRedisKeyConstant;
import cn.freemud.constant.RedisKeyConstant;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.Active;
import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.order.CreatePrepayRequestDto;
import cn.freemud.entities.dto.order.FacePayResponseDto;
import cn.freemud.entities.dto.pay.OrderPayResponse;
import cn.freemud.entities.dto.pay.PayOrderDto;
import cn.freemud.entities.dto.pay.UnifiedOrderRequestDto;
import cn.freemud.entities.dto.product.GetValidateProductInfoDto;
import cn.freemud.entities.dto.product.ProductInfo;
import cn.freemud.entities.dto.product.ValidateProductInfosDto;
......@@ -26,6 +31,7 @@ import cn.freemud.redis.RedisCache;
import cn.freemud.service.CouponService;
import cn.freemud.service.OrderFactoryService;
import cn.freemud.service.business.OrderBusinessService;
import cn.freemud.service.thirdparty.PaymentNewClient;
import cn.freemud.service.thirdparty.PromotionDiscountClient;
import cn.freemud.service.thirdparty.StoreItemClient;
import cn.freemud.utils.AppLogUtil;
......@@ -33,9 +39,11 @@ import cn.freemud.utils.ResponseUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformIappWxappStore;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformPartnerConfig;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformIappWxappStoreManager;
import com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformPartnerConfigManager;
import com.freemud.application.sdk.api.base.SDKCommonBaseContextWare;
import com.freemud.application.sdk.api.constant.ResponseResultEnum;
import com.freemud.application.sdk.api.couponcenter.online.domain.ActiveDetailVO;
import com.freemud.application.sdk.api.couponcenter.online.domain.AppKeyVO;
import com.freemud.application.sdk.api.couponcenter.online.request.ActiveBatchQueryRequest;
......@@ -59,9 +67,6 @@ import com.freemud.application.sdk.api.ordercenter.response.OrderBaseResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderItemResp;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
import com.freemud.application.sdk.api.productcenter.request.product.GetProductInfoRequest;
import com.freemud.application.sdk.api.productcenter.response.menu.GetMenuCategoryInfoResponse;
import com.freemud.application.sdk.api.productcenter.response.product.GetProductInfosResponse;
import com.freemud.application.sdk.api.productcenter.service.MenuService;
import com.freemud.application.sdk.api.promotioncenter.request.promotion.ActivityUpdateStockRequest;
import com.freemud.application.sdk.api.promotioncenter.response.PromotionResponseDTO;
......@@ -172,6 +177,14 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
private PayServiceImpl payService;
@Autowired
private PaymentNewClient paymentNewClient;
@Value("${saas.reverseNotifyiDcUrl}")
private String reverseNotifyiDcUrl;
@Autowired
private AssortmentOpenPlatformPartnerConfigManager openPlatformPartnerConfigManager;
@Autowired
private AssortmentOpenPlatformIappWxappStoreManager assortmentOpenPlatformIappWxappStoreManager;
@Autowired
private WeChatLiveMsgHandle weChatLiveMsgHandle;
/**
......@@ -308,6 +321,9 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
String partnerId = userLoginInfoDto.getPartnerId();
String storeId = requestVo.getShopId();
String userId = userLoginInfoDto.getMemberId();
String openId = userLoginInfoDto.getOpenId();
String appId = userLoginInfoDto.getAppId();
if (StringUtils.isNotBlank(requestVo.getCardCode()) && CollectionUtils.isNotEmpty(virtualProductSvcPayPartnerId) && !virtualProductSvcPayPartnerId.contains(partnerId)) {
return ResponseUtil.error(ResponseResult.PAY_SVC_CONFIG_ERROR);
}
......@@ -349,10 +365,7 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
}
//卖券订单biztype默认传入6
BaseResponse createOrderRequestResponse = checkOrderCoupon(userLoginInfoDto, storeResponse, trackingNo,
requestVo.getMenuType(), 6, partnerId, storeId,
requestVo.getSkuId(),requestVo.getCardCode(),
requestVo.getScene());
BaseResponse createOrderRequestResponse = checkOrderCoupon(userLoginInfoDto, storeResponse, trackingNo, requestVo.getMenuType(), 6, partnerId, storeId, requestVo.getSkuId(),requestVo.getCardCode());
if (createOrderRequestResponse == null || !ResponseResult.SUCCESS.getCode().equals(createOrderRequestResponse.getCode()) || createOrderRequestResponse.getResult() == null) {
return createOrderRequestResponse;
}
......@@ -360,7 +373,19 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
CreateOrderRequest createOrderRequest = (CreateOrderRequest) createOrderRequestResponse.getResult();
//标准化平台虚拟商品特价活动计算,不包含蜜雪APP买虚拟商品
List<ActivityUpdateStockRequest.StockBeanDto> stockBeanDtos = calculationDiscount(partnerId, storeId, userLoginInfoDto.getMemberId(), productInfosDto.getData().getProducts().get(0), createOrderRequest);
//查询虚拟商品卖券支付配置中的分账门店信息
//如果需要分账查询支付配置中的分账门店信息,否则查询sdk
AssortmentOpenPlatformIappWxappStore wxAppStore = new AssortmentOpenPlatformIappWxappStore();
if(createOrderRequest.getIsSplitAccount() != null && createOrderRequest.getIsSplitAccount() == 1){
//11-虚拟卖券门店
wxAppStore = payService.getIappWxappStoreInfo(userLoginInfoDto.getWxAppId(),"11");
}else {
wxAppStore = assortmentOpenPlatformIappWxappStoreManager.selectWxappStoreByWxAppIdAndStoreId(userLoginInfoDto.getWxAppId(),storeId);
}
if ((wxAppStore == null || wxAppStore.getClientCode() == null)) {
return ResponseUtil.error(ResponseCodeConstant.RESPONSE_ERROR_STR, "支付门店未配置");
}
createOrderRequest.setStoreId(storeId);
OrderBaseResp<OrderInfoReqs> orderInfoReqsBaseResponse = orderSdkService.createOrder(createOrderRequest, trackingNo);
CreateOrderResponse createOrderResponse = orderSdkAdapter.convent2NEWOrderInfoReqs(orderInfoReqsBaseResponse);
if (createOrderResponse == null || createOrderResponse.getErrcode() != 100) {
......@@ -447,21 +472,44 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
orderExtInfoDto.setFromAppId(userLoginInfoDto.getWxAppId());
orderExtInfoDto.setUnDistribution(requestVo.getUnDistribution());
createPrepayRequestDto.setOrderExtInfoDTO(orderExtInfoDto);
CreateOrderResponseVo prepayOrder = payService.createPrepayOrder(createPrepayRequestDto);
//创建卖券预支付
OrderInfoReqs result = orderInfoReqsBaseResponse.getResult();
String orderCode = result.getOrderCode();
CreateOrderResponseVo createOrderResponseVo = new CreateOrderResponseVo();
createOrderResponseVo.setOid(orderCode);
//线上现金支付,创建预支付订单,唤起支付
com.freemud.application.sdk.api.base.BaseResponse<FacePayResponseDto> response = null;
Long payClientCode = Long.parseLong(wxAppStore.getClientCode());
//实际支付金额
Long cashPrice = createOrderRequest.getSettlementAmount();
UnifiedOrderRequestDto requestDto = checkOrder.convert2UnifiedOrderRequestDto(result, openId, cashPrice, payClientCode, reverseNotifyiDcUrl, getPartnerPayOvertime(partnerId));
requestDto.setStoreId(wxAppStore.getStoreId());
response = paymentNewClient.unifiedOrder(requestDto);
if (!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, response.getCode())) {
return ResponseUtil.error(orderInfoReqsBaseResponse.getCode(), "支付异常");
}
if (!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS, response.getData().getResultCode())) {
return ResponseUtil.error(orderInfoReqsBaseResponse.getCode(), "支付异常," + response.getData().getResultMsg());
}
updatExtInfo(response.getData(), appId,createPrepayRequestDto);
//唤起支付返回参数
checkOrder.convent2CreateOrderResponseVo(createOrderResponseVo, appId, response.getData());
// fisherman 视频卖券 需要拼装额外对象 给前端
if (StringUtils.isNotBlank(requestVo.getScene()) && CreateOrderSceneEnum.verifySceneOrder.contains(requestVo.getScene())) {
BaseResponse<WeChatReportVO> baseResponse = weChatLiveMsgHandle.reportOrder(createPrepayRequestDto, prepayOrder, requestVo.getScene());
BaseResponse<WeChatReportVO> baseResponse = weChatLiveMsgHandle.reportOrder(createPrepayRequestDto, createOrderResponseVo, requestVo.getScene());
if (ResponseResult.SUCCESS.getCode().equals(baseResponse.getCode())) {
WeChatReportVO weChatReportVO = baseResponse.getResult();
OrderCreateRequestVO requestVO = weChatReportVO.getRequestVO();
prepayOrder.setWxOrderInfo(requestVO);
createOrderResponseVo.setWxOrderInfo(requestVO);
}else {
return baseResponse;
}
}
// fisherman 更新订单的 extinfo信息
// this.updateOrderExtInfo(userLoginInfoDto,prepayOrder);
return ResponseUtil.success(prepayOrder);
return ResponseUtil.success(createOrderResponseVo);
}
// private void updateOrderExtInfo(AssortmentCustomerInfoVo userLoginInfoDto, CreateOrderResponseVo prepayOrder) {
......@@ -483,6 +531,34 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
// }
// }
public void convent2CreateOrderResponseVo(OrderPayResponse createOrderResponseVo, String appId, FacePayResponseDto response){
createOrderResponseVo.setWxAppid(appId);
createOrderResponseVo.setFmId(response.getFmId());
// createOrderResponseVo.setEndTransId(response.getEndTransId());
// createOrderResponseVo.setPaySuccess(false);
String payOrderDto = response.getPayOrder();
PayOrderDto payOrderBean = JSONObject.parseObject(payOrderDto, PayOrderDto.class);
if (null != payOrderBean) {
OrderPayResponse.PayOrderBean payBean = new OrderPayResponse.PayOrderBean();
payBean.setAppid(payOrderBean.getAppid());
payBean.setNonceStr(payOrderBean.getNonceStr());
payBean.setPackageX(payOrderBean.getPackageX());
payBean.setSign(payOrderBean.getPaySign());
payBean.setSignType(payOrderBean.getSignType());
payBean.setTimestamp(payOrderBean.getTimestamp());
payBean.setAliPayOrder(payOrderBean.getAliPayOrder());
createOrderResponseVo.setPayOrder(payBean);
createOrderResponseVo.setThirdOrderId(payOrderBean.getThirdPartTradeNo());
createOrderResponseVo.setThirdOrderToken(payOrderBean.getBizContent());
}
}
public void updatExtInfo(FacePayResponseDto response , String appId,CreatePrepayRequestDto createPrepayRequestDto){
OrderPayResponse createOrderResponseVo = new OrderPayResponse();
convent2CreateOrderResponseVo(createOrderResponseVo, appId,response);
BaseResponse baseEditResponse = payService.updateOrderInfo(createOrderResponseVo, createPrepayRequestDto.getOrderExtInfoDTO(), createPrepayRequestDto.getProductOrderBean(), LogThreadLocal.getTrackingNo());
}
/**
* 效验虚拟商品活动信息
......@@ -523,7 +599,7 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
return ResponseUtil.error(ResponseResult.STORE_ITEM_CHECK_VAILD_ERROR);
}
GetProductInfoRequest request = new GetProductInfoRequest();
/*GetProductInfoRequest request = new GetProductInfoRequest();
request.setChannel(menuType);
request.setPartnerId(partnerId);
request.setProductInfoType(ProductInfoType.ALL.getCode());
......@@ -533,23 +609,24 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
com.freemud.application.sdk.api.base.BaseResponse<GetProductInfosResponse> productInfosByIds = menuService.getProductInfosByIds(request, trackingNo);
if (!ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(productInfosByIds.getCode()) || productInfosByIds.getData() == null || CollectionUtils.isEmpty(productInfosByIds.getData().getProducts())) {
return ResponseUtil.error(ResponseResultEnum.GET_PRODUCT_INFOS_ERROR.getCode(), ResponseResultEnum.GET_PRODUCT_INFOS_ERROR.getMessage());
}
}*/
//查询商品信息sdk改feign
GetProductInfoDto request = new GetProductInfoDto();
request.setPartnerId(partnerId);
request.setShopId(storeId);
request.setProductInfoType(ProductInfoType.ALL.getCode());
request.setProductIds(productIds);
request.setChannel(menuType);
ProductInfosDto productInfos = storeItemClient.listProductInfos(request);
//获取虚拟商品中的券信息
//效验商品券是否有效
List<GetMenuCategoryInfoResponse.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean.ProductBindingCouponType> productBindingCoupons = productInfosByIds.getData().getProducts().get(0).getProductBindingCouponTypes();
List<ProductBindingCouponType> productBindingCoupons = productInfos.getData().getProducts().get(0).getProductBindingCouponTypes();
if (CollectionUtils.isEmpty(productBindingCoupons)) {
return ResponseUtil.error(ResponseResult.STORE_ITEM_CHECK_INVAILD);
}
// 产品确认 暂时不需要改逻辑
// List<GetMenuCategoryInfoResponse.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean> products = productInfosByIds.getData().getProducts();
//
// for (GetMenuCategoryInfoResponse.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean product : products) {
// Integer status = product.getStatus();
// if (!Objects.equals(status, IntegralProductStatusEnum.STATUS_2.getCode())) {
// return ResponseUtil.error(ResponseResult.COUPON_INVAILD.getCode(),"您需要购买的券包,包含的优惠券券编号"+skuId+"包含的商品已失效,请联系门店尽快处理");
// }
// }
List<String> activityCodes = new ArrayList<>();
for (GetMenuCategoryInfoResponse.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean.ProductBindingCouponType productBindingCouponType : productBindingCoupons) {
for (ProductBindingCouponType productBindingCouponType : productBindingCoupons) {
activityCodes.add(productBindingCouponType.getActivityCode());
}
//批量查询活动详情
......@@ -577,7 +654,7 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
}
//转换CreateOrderRequest对象
CreateOrderRequest createOrderRequest = convent2NEWCreateOrderRequest(userLoginInfoDto,
productInfosByIds.getData(),
productInfos.getData(),
activeDetailVOS,
storeResponse.getBizVO(),storeId,cardCode,skuId,menuType,bizType,scene);
return ResponseUtil.success(createOrderRequest);
......@@ -748,7 +825,7 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
/**
* 转换对象,从购买优惠券业务提出重写
* @param userLoginInfoDto
* @param productInfosResponse
* @param dataBean
* @param activeDetailVOS
* @param storeInfo
* @param shopId
......@@ -759,7 +836,7 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
* @return
*/
private CreateOrderRequest convent2NEWCreateOrderRequest(AssortmentCustomerInfoVo userLoginInfoDto,
GetProductInfosResponse productInfosResponse,List<ActiveDetailVO> activeDetailVOS,
ProductInfosDto.DataBean dataBean,List<ActiveDetailVO> activeDetailVOS,
StoreResponse.BizVO storeInfo,
String shopId,
String cardCode,
......@@ -808,7 +885,7 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
request.setPayChannel("10102");
request.setPayChannelName("储值卡支付");
}
GetMenuCategoryInfoResponse.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean productBean = productInfosResponse.getProducts().get(0);
ProductInfo productBean = dataBean.getProducts().get(0);
//订单原始金额,单位分
//用户在界面上看到的支付金额
request.setSettlementAmount(productBean.getFinalPrice());
......@@ -836,13 +913,19 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
OrderProductAddInfoDto orderProductAddInfoDto = new OrderProductAddInfoDto();
List<ProductBindingCouponType> productBindingCoupons = new ArrayList<>();
for (GetMenuCategoryInfoResponse.RootNodeBean.ChildrenBeanFirst.ChildrenBeanSecond.ProductBean.ProductBindingCouponType productBindingCouponType : productBean.getProductBindingCouponTypes()){
for (ProductBindingCouponType productBindingCouponType : productBean.getProductBindingCouponTypes()){
for (ActiveDetailVO activeDetailVO : activeDetailVOS){
if(productBindingCouponType.getActivityCode().equals(activeDetailVO.getActiveCode())){
ProductBindingCouponType productBindingCouponType2 = new ProductBindingCouponType();
productBindingCouponType2.setActivityCode(productBindingCouponType.getActivityCode());
productBindingCouponType2.setNum(productBindingCouponType.getNum());
productBindingCouponType2.setActivityName(activeDetailVO.getActiveName());
//新增是否分账,核销次数和券单价
productBindingCouponType2.setIsSplitAccount(productBindingCouponType.getIsSplitAccount());
//分账的券包对应所有券都是一致,要么分账,要么不分账,循环赋值都是相同的
request.setIsSplitAccount(productBindingCouponType.getIsSplitAccount());
productBindingCouponType2.setMaxRedeemTimes(productBindingCouponType.getMaxRedeemTimes());
productBindingCouponType2.setPrice(productBindingCouponType.getPrice());
productBindingCoupons.add(productBindingCouponType2);
break;
}
......@@ -1060,6 +1143,7 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
//买券包调促销指定只计算限时特价 [2,21]
calculationDiscountRequestDto.setActivityTypes(Arrays.asList(2,21));
calculationDiscountRequestDto.setVer(1);
calculationDiscountRequestDto.setApplication("isaas");
ActivityCalculationDiscountResponseDto activityCalculationDiscountResponseDto = promotionDiscountClient.calculationDiscountSharing(calculationDiscountRequestDto);
if (!ResponseResult.SUCCESS.getCode().equals(activityCalculationDiscountResponseDto.getStatusCode()) || activityCalculationDiscountResponseDto.getResult() == null) {
return null;
......@@ -1131,4 +1215,19 @@ public class SellCouponOrderServiceImpl implements OrderFactoryService {
sendCouponService.sendCouponMq(orderInfo);
return result;
}
/**
* 获取商户支付超时时间
* @param partnerId 商户Id
* @return 超时时间
*/
private String getPartnerPayOvertime(String partnerId) {
return Optional.ofNullable(openPlatformPartnerConfigManager.selectPartnerConfigByPartnerKey(partnerId, RedisKeyConstant.PARTNER_PAY_OVERTIME))
.orElseGet(() -> {
AssortmentOpenPlatformPartnerConfig config = new AssortmentOpenPlatformPartnerConfig();
config.setPartnerValue("30");
openPlatformPartnerConfigManager.addPartnerConfig(partnerId, RedisKeyConstant.PARTNER_PAY_OVERTIME, config);
return config;
}).getPartnerValue();
}
}
......@@ -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);
}
......@@ -102,3 +102,4 @@
| 1.3.68.RELEASE | 新增维护商品类型同步商品服务 | 周晓航 | 2021-09-03 |
| 1.3.69.RELEASE | 升级sdk | 伍平 | 2021-09-16 |
| 1.3.70.RELEASE | 升级sdk | 伍平 | 2021-10-11 |
| 1.3.71.RELEASE | 升级sdk | 蒋小洋 | 2021-10-27 |
\ No newline at end of file
......@@ -22,4 +22,11 @@ public class ProductBindingCouponType {
*/
// private int sequence;
//是否开启分账(0不开启,1开启)
private Integer isSplitAccount;
//最大核销次数"
private Integer maxRedeemTimes;
//券单价(分)
private Integer price;
}
......@@ -244,6 +244,9 @@ public class CreateOrderRequest extends BaseRequest {
*/
private List<ChooseGood> orderSendCouponRespList;
//卖券订单,是否开启分账(0不开启,1开启)
private Integer isSplitAccount;
@Data
public static class ChooseGood {
......
......@@ -113,7 +113,7 @@
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
<artifactId>sdk-common-base</artifactId>
<version>2.0.0-SNAPSHOT</version>
<version>2.0.4-RELEASE</version>
</dependency>
<!-- mybatis -->
......
......@@ -576,7 +576,12 @@ public class ShoppingCartConvertAdapter {
|| ObjectUtils.equals(com.freemud.sdk.api.assortment.shoppingcart.constant.GoodsTypeEnum.COUPON_GOODS.getGoodsType(), cartGoods.getGoodsType())
|| ObjectUtils.equals(GoodsTypeEnum.ALL_COUPON_GOODS.getGoodsType(), cartGoods.getGoodsType()))
? cartGoods.getSkuId() : cartGoods.getSpuId());
//fisherman 这里 商品服务校验需要商品原价, 不是购物车的 finalPrice
productType.setPrice(cartGoods.getOriginalPrice() == null ? 0 : cartGoods.getOriginalPrice().intValue());
if (Objects.equals(cartGoods.getGoodsType(), GoodsTypeEnum.SET_MEAL_GOODS.getGoodsType())) {
// 套餐会出现商品组的情况,会导致 商品服务校验失败,商品服务不需要商品组的价格 坑B 所以只能取 套餐商品原价格
productType.setPrice(cartGoods.getFinalPrice() == null ? 0 : cartGoods.getFinalPrice().intValue());
}
productType.setValidatePrice(productType.getPrice() == 0 ? 0 : 1);
productType.setValidateAttribute(1);
productType.setValidateStatuses(Arrays.asList(2));
......@@ -589,7 +594,6 @@ public class ShoppingCartConvertAdapter {
productType.setMemberDiscount(cartGoods.getMemberDiscount());
validateShopProductRequest.getProductTypeList().add(productType);
}
ShoppingSdkLogUtil.infoLog("替换购物车数据检验结果 01 --> validateShopProductRequest:{} cartGoodsList:{}", validateShopProductRequest, JSON.toJSON(checkCartRequest.getCartGoodsList()));
return validateShopProductRequest;
}
......
......@@ -293,6 +293,17 @@ public class ShoppingCartController {
return SDKCommonBaseContextWare.getBean(ShoppingCartNewServiceImpl.class).replaceGoodsByShop(request);
}
/**
* 一单多券
* 券码需要知道配置的数据 是否是V3算价
*
*/
@PostMapping(value = "/getV3Promotion")
@ApiAnnotation(logMessage = "/getV3Promotion")
public BaseResponse getV3Promotion(@LogParams @RequestBody @Validated BaseRequestVo request) {
return SDKCommonBaseContextWare.getBean(ShoppingCartNewServiceImpl.class).getV3Promotion(request);
}
@Autowired
private ShoppingCartBaseServiceImpl shoppingCartService;
......
......@@ -5,7 +5,7 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
@Data
public class ActivityBaseResponseDto {
public class ActivityBaseResponseDto<T> {
private int ver;
/**
......@@ -14,9 +14,9 @@ public class ActivityBaseResponseDto {
private String statusCode;
/**
*状态码描述
* 状态码描述
*/
private String msg;
private T result;
}
......@@ -35,4 +35,8 @@ public class ActivityDiscountsDto {
* 购物车商品行uid
*/
private String cartGoodsUid;
/**
* 享受优惠点优先级, 值越大表示优惠优先级高
*/
private Integer priority;
}
......@@ -515,6 +515,11 @@ public class ActivityCalculationDiscountResponseDto {
// * 是否已选择寄杯
// */
// private Boolean sendCoupon;
//
// /**
// * 商品类型:2、是加料商品,9、是虚拟商品,7、是套餐商品,1、是单品
// */
// private Integer productType;
// }
// }
//
......
......@@ -65,4 +65,9 @@ public class Discount {
*/
private String cartGoodsUid;
/**
* 活动优先级 值越大越先参与计算
*/
private Integer priority;
}
......@@ -33,4 +33,5 @@ public class SendActivity {
private Integer sendKinds;
private List<SendGoods> sendGoods;
}
......@@ -53,7 +53,12 @@ public class SendGoods {
private String picture;
/**
* 商品类型:2、是加料商品,9、是虚拟商品,7、是套餐商品,1、是单品
* 1.9.2商品套餐新增商品类型 后续C端小程序使用该字段获取商品类型
* 1:单品无属性
* 2:单品有属性
* 7:套餐
* 8:多规格有属性
* 10:多规格无属性
*/
private Integer productType;
......
package cn.freemud.entities.dto.shoppingCart;
import lombok.Data;
/**
* @author : xh.Z
* @email : fisherman0510@163.com
* @Date : 2021/10/20 上午11:32
* @description :
*/
@Data
public class PromotionResultVO {
private boolean v3Promotion;
}
......@@ -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;
......
......@@ -25,4 +25,10 @@ public class ChooseCouponVo {
*/
private Integer couponType;
/**
* fisherman 促销算价返回
* 优惠金额(单位分)
*/
private Integer discountAmount;
}
......@@ -225,6 +225,12 @@ public class ShoppingCartGoodsResponseVo extends ShoppingCartGoodsBaseResponseV
*/
private CartGoodsStates cartGoodsStates;
/**
* fisherman 一单多券, 剔除购物车内券商品的使用门槛
*
*/
private Long useCouponThreshold ;
@Data
public static class chooseGood {
......
......@@ -13,6 +13,9 @@
package cn.freemud.enums;
import java.util.Arrays;
import java.util.List;
public enum GoodsTypeEnum {
COMMON_GOODS(1, "正常商品"),
......@@ -21,15 +24,19 @@ public enum GoodsTypeEnum {
SET_MEAL_GOODS(3, "套餐商品"),
SKU_GOODS(4, "sku商品"),
SPU_GOODS(5, "spu商品"),
REDUCE_PRICE_GOODS(6,"超值加购商品"),
REDUCE_PRICE_GOODS(6, "超值加购商品"),
ALL_COUPON_GOODS(8, "万能券商品"),
VIRTUAL_GOODS(9,"虚拟商品"),
VIRTUAL_GOODS(9, "虚拟商品"),
BUY_M_SEND_N_COUPON(10, "买M送N券"),
MATERIAL(88, "有加料的商品"),
EXCEPTION_GOODS(99, "异常商品:商品菜单变化导致和购物车不商品匹配");
private Integer goodsType;
private String desc;
public static List<Integer> couponTypeList = Arrays.asList(GoodsTypeEnum.COUPON_GOODS.getGoodsType(),
GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType(),
GoodsTypeEnum.BUY_M_SEND_N_COUPON.getGoodsType());
GoodsTypeEnum(Integer goodsType, String desc) {
this.goodsType = goodsType;
this.desc = desc;
......
......@@ -315,4 +315,6 @@ public interface ShoppingCartNewService {
default BaseResponse<PremiumExchangeResponseVo> premiumExchange(PremiumExchangeRequestVo request){
return null;
};
BaseResponse getV3Promotion(BaseRequestVo request);
}
......@@ -112,6 +112,8 @@ public class CouponPromotionService implements IPromotionService {
for (ChooseCouponVo chooseCouponVo : shoppingCartInfoRequestVo.getCouponCodes()){
for (CouponResults discount : calculationDiscountResult.getCouponDiscounts()){
if(chooseCouponVo.getCouponCode().equals(discount.getCouponCode())){
// fisherman 加入券的金额
chooseCouponVo.setDiscountAmount(discount.getDiscountAmount());
couponCodes.add(chooseCouponVo);
break;
}
......
......@@ -545,7 +545,6 @@ public class CouponServiceImpl implements CouponService {
* 老版本券校验
*/
public CheckSpqInfoResponseDto checkSpqInfo(CheckSpqInfoRequestDto requestDto) {
ShoppingSdkLogUtil.infoLog("OldCheckSpqInfo","requestDto");
String partnerId = requestDto.getPartnerId();
String couponCode = requestDto.getCouponCode();
String storeId = requestDto.getStoreId();
......@@ -848,38 +847,7 @@ public class CouponServiceImpl implements CouponService {
@Override
public GetProductsVo getSpqProductInfo(CheckSpqInfoRequestDto requestDto) {
String partnerId = requestDto.getPartnerId();
String couponCode = requestDto.getCouponCode();
String storeId = requestDto.getStoreId();
//TODO 查询券详情券是否存在
GetMemberCouponRequestVo requestVo = new GetMemberCouponRequestVo();
requestVo.setPartnerId(partnerId);
requestVo.setCouponCode(couponCode);
requestVo.setStoreId(requestDto.getStoreId());
GetCouponDetailResponseDto couponDetailResponseDto = this.getMemberCoupon(requestVo);
if (couponDetailResponseDto == null || !couponDetailResponseDto.getResult().equals(ResponseCodeConstant.RESPONSE_SUCCESS_1) || CollectionUtils.isEmpty(couponDetailResponseDto.getDetails())) {
return null;
}
//券返回的商品id
List<String> skuIds = Lists.newArrayList();
String skuId = couponDetailResponseDto.getDetails().get(0).getActiveProduct().get(0).getProductIdPartner();
skuIds.add(String.valueOf(skuId));
//TODO 通过skuid查询spuid
Map<String, GetProductsVo> productsVoMap = itemService.getProducts(skuIds, partnerId, storeId , requestDto.getMenuType());
GetProductsVo productsVo = productsVoMap.get(skuId);
if (null == productsVo || !Objects.equals(productsVo.getStatus(), StoreItemStatus.PUT_ON_SALE.getCode())) {
return null;
}
// 校验商品可用时间
ValidateShopProductRequest request = getValidateShopProductRequest(productsVo, requestDto);
ProductBaseResponse<ValiadShopProductResponse> valiadProductResponse = storeItemClient.validateShopProduct(request);
if (null == valiadProductResponse || !Objects.equals(ResponseConstant.SUCCESS_RESPONSE_CODE, valiadProductResponse.getErrcode())
|| valiadProductResponse.getData() == null || CollectionUtils.isEmpty(valiadProductResponse.getData().getSuccessList())) {
return null;
}
return productsVo;
return this.getSpqProductInfo(requestDto,null);
}
......@@ -908,11 +876,16 @@ public class CouponServiceImpl implements CouponService {
if (CollectionUtils.isEmpty(couponDetailResponseDto.getDetails())) {
return null;
}
Integer couponType = 0;
//券返回的商品id
String skuId ;
List<String> skuIds = Lists.newArrayList();
String skuId = goodsId;
if (StringUtils.isEmpty(goodsId)) {
//券返回的商品id
skuId = couponDetailResponseDto.getDetails().get(0).getActiveProduct().get(0).getProductIdPartner();
skuIds.add(String.valueOf(skuId));
}else {
skuId = goodsId;
}
skuIds.add(skuId);
//TODO 通过skuid查询spuid
Map<String, GetProductsVo> productsVoMap = itemService.getProducts(skuIds, partnerId, storeId, requestDto.getMenuType());
......
......@@ -131,10 +131,8 @@ public class ProductServiceImpl implements ProductService {
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_MATERIAL_ERROR);
}
ShoppingSdkLogUtil.infoLog("替换购物车数据检验结果 2 --> checkCartRequest:{}", checkCartRequest);
return CartResponseUtil.success(checkCartRequest);
} catch (Exception e) {
ShoppingSdkLogUtil.printErrorLog("assortment-shoppingcart-sdk", checkCartRequest.getTrackingNo(), e.getMessage(), "checkAllCartGoods", checkCartRequest, e, Level.ERROR);
checkCartRequest.getShoppingCartGoodsResponseVo().setChanged(true);
checkCartRequest.getShoppingCartGoodsResponseVo().setToastMsg(ShoppingCartConstant.SHOPPING_CART_INVALIAD_GOODS);
return CartResponseUtil.error(e.getMessage(),checkCartRequest);
......
......@@ -927,6 +927,11 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
return nowCartGoodsList;
}
@Override
public BaseResponse getV3Promotion(BaseRequestVo request) {
return null;
}
public List<CartGoods> getShoppingCart(AddShoppingCartGoodsRequestVo addShoppingCartGoodsRequestVo) {
return null;
}
......
......@@ -109,8 +109,7 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService {
private CalculationSharingValidatorService calculationSharingValidatorService;
@Autowired
private CalculationSharingEquallyService sharingEquallyService;
@Value("${saas.cart.sharing}")
private String sharing;
/**
* 从微信卡券向购物车中添加商品
*/
......@@ -780,6 +779,11 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService {
return nowCartGoodsList;
}
@Override
public BaseResponse getV3Promotion(BaseRequestVo request) {
return null;
}
/**
* 添加非商品券商品
*
......@@ -990,37 +994,4 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService {
return deliveryFeeInfo;
}
/**
* @param partnerId
* @param storeId
* @return
*/
public boolean grayPush(String partnerId, String storeId, String version) {
if (StringUtils.isBlank(sharing)) return false;
CalculateCenter center = JSON.parseObject(sharing, CalculateCenter.class);
Boolean enable = false;
if (!center.getEnable()) return false;
switch (center.getType()) {
case 2:
enable = true;
break;
case 1: {
//商户+门店级别
String real = partnerId.concat(storeId);
if (Arrays.asList(center.getGrayList().split(",")).contains(real)) {
enable = true;
}
//商户级别
else if (Arrays.asList(center.getGrayList().split(",")).contains(partnerId)) {
enable = true;
}
}
}
if (center.getEnable() && enable) {
enable = true;
}
return enable;
}
}
......@@ -679,6 +679,11 @@ public class ShoppingCartMealServiceImpl implements ShoppingCartNewService {
return oldAllCartGoodsList;
}
@Override
public BaseResponse getV3Promotion(BaseRequestVo request) {
return null;
}
private void checkBase(CustomerInfoVo assortmentCustomerInfoVo) {
if (assortmentCustomerInfoVo == null || assortmentCustomerInfoVo.getMemberId() == null) {
......
......@@ -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;
......@@ -32,6 +33,7 @@ import cn.freemud.entities.dto.openplatform.WeixinProductResponseDto;
import cn.freemud.entities.dto.order.PackAmountConfig;
import cn.freemud.entities.dto.pay.*;
import cn.freemud.entities.dto.product.CheckCartRequest;
import cn.freemud.entities.dto.shoppingCart.PromotionResultVO;
import cn.freemud.entities.dto.product.info.ProductBean;
import cn.freemud.entities.dto.product.info.SkuProductBean;
import cn.freemud.entities.dto.shoppingCart.SendPoint;
......@@ -196,8 +198,11 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
private static final String limitCartKey = "ecology:kgd:wxappconfig:open_platform_partner_wxapp_config:appkey_";
@Value("${saas.cart.sharing}")
private String sharing;
// @Value("${saas.cart.sharing}")
// private String sharing;
@Value("${saas.cart.sharing.new}")
private String newSharing;
@Value("${saas.cart.new.shopping.cart}")
private String newShoppingCart;
......@@ -410,6 +415,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
}
//埋点添加购物车行为
this.buriedPointShoppingCart(addShoppingCartGoodsRequestVo, spuId, productName);
this.shoppingCartAddOrListCommonResponseHandle(shoppingCartGoodsResponseVo);
return ResponseUtil.success(shoppingCartGoodsResponseVo);
}
......@@ -568,7 +574,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, calculationDiscountResult, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), partnerId, storeId, userId, ShoppingCartConstant.ADD_AND_UPDATE, null);
}
this.shoppingCartAddOrListCommonResponseHandle(shoppingCartGoodsResponseVo);
return ResponseUtil.success(shoppingCartGoodsResponseVo);
}
......@@ -700,7 +706,8 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
for (int i = cartGoodsList.size() - 1; i >= 0; i--) {
CartGoods cartGoods = cartGoodsList.get(i);
if (GoodsTypeEnum.COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType()) || GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, cartGoods.getSpuId(), menuType,null);
if (Objects.equals(cartGoods.getCouponCode() ,unChooseCouponCode)) {
CheckSpqInfoRequestDto checkSpqInfoRequestDto = new CheckSpqInfoRequestDto(partnerId, storeId, cartGoods.getCouponCode(), menuType,null);
GetProductsVo productInfo = null;
if (GoodsTypeEnum.HG_COUPON_GOODS.getGoodsType().equals(cartGoods.getGoodsType())) {
productInfo = couponService.getSpqProductInfo(checkSpqInfoRequestDto, cartGoods.getSkuId());
......@@ -714,6 +721,8 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
convert2CartGoods(cartGoods, productInfo);
}
}
}
}
}
......@@ -867,9 +876,8 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
}
updateForPopupWindow(shoppingCartGoodsResponseVo, premiumExchangeResponseVoBaseResponse.getResult().getShowType(), chooseSendGoodList, shoppingCartInfoRequestVo.getSendGoods());
}
// 添加购物车商品总价和加价购商品总价,现在是自己计算,后面需要优化为促销计算, 这段要删除
// ApiLog.info("fisherman 新算价 校验入参券是否可用new ",shoppingCartGoodsResponseVo,shoppingCartInfoRequestVo.getCouponCodes());
// 设置优惠券的使用门槛金额, 需要排除券的金额
this.shoppingCartAddOrListCommonResponseHandle(shoppingCartGoodsResponseVo);
// 校验入参券是否可用
if (!checkAvailableCoupon(shoppingCartGoodsResponseVo, shoppingCartInfoRequestVo.getCouponCode())) {
return ResponseUtil.error(ResponseResult.SHOPPING_CART_COUPON_NOT_USE);
......@@ -877,6 +885,48 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
return ResponseUtil.success(shoppingCartGoodsResponseVo);
}
/**
* 加车 和list接口 公用处理方法
* @param shoppingCartGoodsResponseVo
*/
private void shoppingCartAddOrListCommonResponseHandle(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo){
if (Objects.isNull(shoppingCartGoodsResponseVo)) {
return;
}
// 设置 使用信息
Long useCouponThreshold = this.getUseCouponThreshold(shoppingCartGoodsResponseVo.getProducts());
shoppingCartGoodsResponseVo.setUseCouponThreshold(useCouponThreshold);
}
/**
* 获取 券使用的门槛信息
* @param products
* @return
*/
private Long getUseCouponThreshold(List<CartGoods> products) {
Long useCouponThreshold = 0L;
if (CollectionUtils.isNotEmpty(products)) {
// 过滤出 活动商品 以及 优惠券商品 求和
// return products.stream().filter(p -> !GoodsTypeEnum.couponTypeList.contains(p.getGoodsType()) && Objects.isNull(p.getActivityType()))
// .mapToLong(CartGoods::getOriginalAmount)
// .sum();
// activityType = 61 是赠送商品 已过滤
List<CartGoods> collect = products.stream().filter(p -> !GoodsTypeEnum.couponTypeList.contains(p.getGoodsType()) && Objects.isNull(p.getActivityType())).collect(toList());
for (CartGoods cartGoods : collect) {
useCouponThreshold += cartGoods.getOriginalAmount();
// 小料
Integer qty = cartGoods.getQty();
if (CollectionUtils.isNotEmpty(cartGoods.getProductMaterialList())) {
for (CartGoods.MaterialGoods materialGoods : cartGoods.getProductMaterialList()) {
useCouponThreshold += materialGoods.getOriginalAmount() * materialGoods.getQty() * qty;
}
}
}
}
return useCouponThreshold;
}
public void updateForPopupWindow(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, Integer showType, List<PremiumExchangeResponseVo.PremiumExchangeProduct> chooseSendGoodList,
List<ShoppingCartInfoRequestVo.SendGoods> sendGoods) {
if (Integer.valueOf("5").equals(showType) && !org.springframework.util.CollectionUtils.isEmpty(chooseSendGoodList)) {
......@@ -2067,7 +2117,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
XyDiscountServiceImpl xyDiscountService = (XyDiscountServiceImpl) PromotionFactory.getPromotionService(ShoppingCartPromotionEnum.XY_DISCOUNT);
xyDiscountService.updateShoppingCartGoodsApportion(shoppingCartGoodsResponseVo, calculationDiscountResult, shoppingCartGoodsDto, premiumExchangeActivity, shoppingCartInfoRequestVo);
//xy折
//满赠
BuyAndGiftsPromotionService buyAndGiftsPromotionService = (BuyAndGiftsPromotionService) PromotionFactory.getPromotionService(ShoppingCartPromotionEnum.BUY_GIFTS);
buyAndGiftsPromotionService.updateShoppingCartGoodsApportion(shoppingCartGoodsResponseVo, calculationDiscountResult, shoppingCartGoodsDto, premiumExchangeActivity, shoppingCartInfoRequestVo);
......@@ -2085,6 +2135,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);
}
......@@ -2687,33 +2757,33 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
*
* @param partnerId
* @param storeId
* @return
* @return 返回是否是新算价
*/
public boolean grayPush(String partnerId, String storeId, String version) {
if (StringUtils.isBlank(sharing)) return false;
CalculateCenter center = JSON.parseObject(sharing, CalculateCenter.class);
Boolean enable = false;
if (!center.getEnable()) return false;
if (StringUtils.isBlank(newSharing)) return true;
CalculateCenter center = JSON.parseObject(newSharing, CalculateCenter.class);
Boolean enable = true;
// if (!center.getEnable()) return false;
switch (center.getType()) {
case 2:
enable = true;
break;
case 1: {
//商户+门店级别
String real = partnerId.concat(storeId);
if (Arrays.asList(center.getGrayList().split(",")).contains(real)) {
//商户+门店级别(新算价)
String partnerId_storeId= partnerId.concat(storeId);
if (Arrays.asList(center.getGrayList().split(",")).contains(partnerId_storeId)) {
enable = true;
}
//商户级别
//商户级别(老算价)
else if (Arrays.asList(center.getGrayList().split(",")).contains(partnerId)) {
enable = true;
enable = false;
}
}
}
if (center.getEnable() && enable) {
enable = true;
}
// if (center.getEnable() && enable) {
// enable = true;
// }
return enable;
}
......@@ -3156,6 +3226,19 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
}
@Override
public BaseResponse getV3Promotion(BaseRequestVo request) {
boolean grayPush = grayPush(request.getPartnerId(), request.getShopId(), "2");
PromotionResultVO vo = new PromotionResultVO();
if (grayPush) {
ActivityBaseResponseDto<PromotionResultVO> responseDto = activityClient.getV3Promotion(request);
if (responseDto != null && StringUtils.equals(responseDto.getStatusCode(),ResponseCodeConstant.RESPONSE_SUCCESS_STR)) {
vo.setV3Promotion(responseDto.getResult().isV3Promotion());
}
}
return ResponseUtil.success(vo);
}
private void removeByProductStock(List<PremiumExchangeResponseVo.PremiumExchangeProduct> products, List<ValidateProductInfosDto.ProductData> productDataList, String partnerId, String storeId, String channel) {
List<Long> limitSkuIds = new ArrayList<>();
productDataList.stream().forEach(ProductData -> {
......
......@@ -449,8 +449,14 @@ public class CalculationCommonService {
cartGoodsDetailDto.setOriginalPrice(cartGoods.getOriginalPrice());
}
if (calculationGoods!=null) {
if (cartGoodsDetailDto.getIsSendGoods()) {
// 由于买赠活动中,赠品有属性的时候会裂为多行,所有优惠金额不能直接用促销返回的, 需要根据实际购物车行中的数量来计算
int discountAmt = calculationGoods.getDiscountAmount().intValue();
int discountCount = calculationGoods.getGoodsQuantity();
cartGoodsDetailDto.setTotalDiscountAmount(discountAmt / discountCount * cartGoods.getQty());
} else {
cartGoodsDetailDto.setTotalDiscountAmount(calculationGoods.getDiscountAmount().intValue());
//cartGoodsDetailDto.setOriginalPrice(calculationGoods.getOriginalPrice());
}
}
else {
cartGoodsDetailDto.setTotalDiscountAmount(cartGoods.getOriginalAmount().intValue() - cartGoods.getAmount().intValue());
......
......@@ -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);
}
/**
* 库存扣减加价购商品 要过滤掉没有换购的商品
*
......
......@@ -318,8 +318,8 @@ public class AdditionSharingService {
cartGoodsDetailDto.setActivityType(ActivityTypeEnum.TYPE_81.getCode());
cartGoodsDetailDto.setClassificationId(getProductsVo.getCategory());
cartGoodsDetailDto.setClassificationName(getProductsVo.getCategoryName());
cartGoodsDetailDto.setProductType(getProductsVo.getType());
cartGoodsDetailDto.setStockLimit(ObjectUtils.equals(1, getProductsVo.getStockLimit()));
cartGoodsDetailDto.setProductType(getProductsVo.getType());
List<ShoppingCartGoodsDto.CartGoodsDetailDto.CartGoodsExtra> cartGoodsExtraList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(product.getAttributes())) {
for (CreateOrderVo.PremiumExchangeActivity.Product.Attribute attribute : product.getAttributes()) {
......
......@@ -10,8 +10,10 @@ import cn.freemud.enums.AvailableCouponQueryFlagEnum;
import cn.freemud.enums.GoodsTypeEnum;
import cn.freemud.service.CouponService;
import cn.freemud.service.impl.AssortmentSdkService;
import com.alibaba.fastjson.JSON;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartBaseServiceImpl;
import com.freemud.sdk.api.assortment.shoppingcart.util.ShoppingSdkLogUtil;
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
......@@ -101,6 +103,8 @@ public class CouponSharingService {
for (ChooseCouponVo chooseCouponVo : shoppingCartInfoRequestVo.getCouponCodes()){
for (Discount discount : couponResultsList){
if(chooseCouponVo.getCouponCode().equals(discount.getActivityCode())){
// fisherman 加入券的金额
chooseCouponVo.setDiscountAmount(discount.getDiscount());
couponCodes.add(chooseCouponVo);
break;
}
......
......@@ -19,6 +19,8 @@ import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.activity.ActivityQueryResponseDto;
import cn.freemud.entities.dto.calculate.ActivityCalculationDiscountRequestDto;
import cn.freemud.entities.dto.calculate.ActivityCalculationDiscountResponseDto;
import cn.freemud.entities.dto.shoppingCart.PromotionResultVO;
import cn.freemud.entities.vo.BaseRequestVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -73,4 +75,8 @@ public interface ActivityClient {
@PostMapping("/promotioncenter/calculateservice/discount/sharing")
//@IgnoreFeignLogAnnotation(excludeStatusCodes = {ResponseCodeConstant.RESPONSE_SUCCESS_STR},statusCodeFieldName= ResponseCodeKeyConstant.STATUS_CODE,messageFieldName=ResponseCodeKeyConstant.MEG)
ActivityCalculationDiscountResponseDto calculationSharingDiscount(ActivityCalculationDiscountRequestDto shareDiscountRequestDto);
@PostMapping("/activity/getV3Promotion")
@IgnoreFeignLogAnnotation(logMessage = "/activity/getV3Promotion",excludeStatusCodes = {ResponseCodeConstant.RESPONSE_SUCCESS_STR},statusCodeFieldName= ResponseCodeKeyConstant.STATUS_CODE,messageFieldName=ResponseCodeKeyConstant.MSG)
ActivityBaseResponseDto<PromotionResultVO> getV3Promotion(BaseRequestVo request);
}
......@@ -310,7 +310,6 @@ macafe.pick.tag = 100%\u963F\u62C9\u6BD4\u5361\u5496\u5561\u8C46+100%\u9C9C\u716
mccafe.partner.id = 1206
saas.order.delivery.mcCafe.callBackUrl = https://saastestapi.sandload.cn/order-application-service/order/delivery/macCafeCallback
saas.payment-center.feign.url = http://payment-center-api-koderover-dev-payment.api-ingress.sandload.cn/
saas.cart.sharing = { "type": 1, "grayList": "2399321123,2399716001,1516,1864XZ0003,18648899", "enable": false }
aas.paymentcenter.application.api.feign.url = http://payment-center-application-api-koderover-dev-payment.api-ingress.sandload.cn
saas.paymentcenter.application.api.feign.url = http://multi-pay-center-api-koderover-dev-payment.api-ingress.sandload.cn
mccafe.universal.coupon.code = 242742645524569
......
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