Commit d53a67e2 by xiaoer.li@freemud.com

Merge branch 'feature/fix-混合支付核销券优化' into develop

# Conflicts:
#	assortment-ordercenter-sdk/pom.xml
#	assortment-ordercenter-sdk/readme.md
#	assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/response/order/QueryOrdersResponse.java
#	call-back-service/pom.xml
#	order-application-service/pom.xml
#	order-application-service/src/main/java/cn/freemud/adapter/OrderAdapter.java
#	order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
#	order-management/pom.xml
#	ordercenter-sdk/pom.xml
#	ordercenter-sdk/readme.md
#	shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartNewServiceImpl.java
parents 61fa2edd b5105340
...@@ -418,11 +418,15 @@ public class QueryOrdersResponse { ...@@ -418,11 +418,15 @@ public class QueryOrdersResponse {
*/ */
private String downstreamThirdOrderCode; private String downstreamThirdOrderCode;
/** /**
* 混合支付list * 混合支付list
*/ */
private List<OrderPayItem> orderPayItem; private List<OrderPayItem> orderPayItem;
@NoArgsConstructor @NoArgsConstructor
@Data @Data
public static class AddDeliveryInfo { public static class AddDeliveryInfo {
......
...@@ -229,7 +229,16 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService { ...@@ -229,7 +229,16 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService {
} }
// 下单成锁定劵,冻结失败提示下单失败并冲正库存积分等,判断支付渠道,积分和svc卡直接核销,无需锁定10102 = svc卡支付 || 支付金额小于等于0 // 下单成锁定劵,冻结失败提示下单失败并冲正库存积分等,判断支付渠道,积分和svc卡直接核销,无需锁定10102 = svc卡支付 || 支付金额小于等于0
if((!StringUtils.isEmpty(orderBean.getPayChannel()) && orderBean.getPayChannel().equalsIgnoreCase("10102")) || orderBean.getAmount() <=0){ // 混合支付
OrderBean.OrderPayItem svc = null;
if (CollectionUtils.isNotEmpty(orderBean.getOrderPayItem()) && orderBean.getOrderPayItem().size()==1) {
svc = orderBean.getOrderPayItem().stream()
.filter(e ->e.getPayChannelType()!=null && e.getPayChannelType().equals(PayChannelType.SVC.getIndex().intValue()))
.findFirst()
.orElse(null);
}
//svc 或是混合svc支付直接核销
if((!StringUtils.isEmpty(orderBean.getPayChannel()) && orderBean.getPayChannel().equalsIgnoreCase("10102")) || orderBean.getAmount() <=0 || (svc!=null) ){
// 核销优惠券,核销失败提示下单失败并冲正库存积分等 // 核销优惠券,核销失败提示下单失败并冲正库存积分等
CouponRequest couponVerificationRequest = orderSdkAdapter.convert2CouponVerificationRequest(orderBean, accounts); CouponRequest couponVerificationRequest = orderSdkAdapter.convert2CouponVerificationRequest(orderBean, accounts);
if (couponVerificationRequest!=null){ if (couponVerificationRequest!=null){
......
...@@ -222,7 +222,7 @@ public class OrderCallBackMQService { ...@@ -222,7 +222,7 @@ public class OrderCallBackMQService {
} }
// 混合支付 // 混合支付
Integer userAmount = 0; Integer userAmount = 0;
if (orderInfoReqs.getOrderPayItemCreateReqList().size()>0) { if (orderInfoReqs.getOrderPayItemCreateReqList()!=null && orderInfoReqs.getOrderPayItemCreateReqList().size()>0) {
OrderPayItemReqs orderPayItemReqs = orderInfoReqs.getOrderPayItemCreateReqList() OrderPayItemReqs orderPayItemReqs = orderInfoReqs.getOrderPayItemCreateReqList()
.stream() .stream()
.filter(s -> s.getPayChannelType().equals(PayChannelType.WECHAT.getIndex().intValue()) || s.getPayChannelType().equals(PayChannelType.ALIPAY.getIndex().intValue())) .filter(s -> s.getPayChannelType().equals(PayChannelType.WECHAT.getIndex().intValue()) || s.getPayChannelType().equals(PayChannelType.ALIPAY.getIndex().intValue()))
......
...@@ -1144,7 +1144,7 @@ public class OrderAdapter { ...@@ -1144,7 +1144,7 @@ public class OrderAdapter {
responseVo.setOrderPayType(PayChannelType.WECHAT.getName()); responseVo.setOrderPayType(PayChannelType.WECHAT.getName());
} }
} }
else if (ordersBean.getOrderPayItem().size()>0) { else if (ordersBean.getOrderPayItem()!=null && ordersBean.getOrderPayItem().size()>0) {
responseVo.setOrderPayType(PayChannelType.COMB.getName()); responseVo.setOrderPayType(PayChannelType.COMB.getName());
} }
else { else {
...@@ -3776,6 +3776,24 @@ public class OrderAdapter { ...@@ -3776,6 +3776,24 @@ public class OrderAdapter {
return responseDto; return responseDto;
} }
/**
* 初始化扣减活动库存请求对象
* add by miaohui 20201030 for 【ID1018638】【C端服务端】活动库存接口调整对接
* @return
*/
private ActivityUpdateStockRequest initActivityUpdateStockRequest(List<ActivityDiscountsDto> activityDiscountsDtos) {
// 原逻辑只检测扣减库存不为空时调用,现改为扣减库存不为空或参加活动不为空时调用
ActivityUpdateStockRequest activityUpdateStockRequest = new ActivityUpdateStockRequest();
List<String> activityList = new ArrayList<>();
// 只记录订单级别的活动ID
if (CollectionUtils.isNotEmpty(activityDiscountsDtos)) {
activityList.addAll(activityDiscountsDtos.stream().filter(ad -> StringUtils.isNotBlank(ad.getActivityCode())).map(ActivityDiscountsDto::getActivityCode).distinct().collect(Collectors.toList()));
}
//设置活动编号
activityUpdateStockRequest.setActivityList(CollectionUtils.isNotEmpty(activityList) ? activityList : null);
return activityUpdateStockRequest;
}
public MultiOrderRefundRequest getMultiOrderPayRefundRequest(QueryOrdersResponseDto.DataBean.OrderBean orderBean, Long refundId) { public MultiOrderRefundRequest getMultiOrderPayRefundRequest(QueryOrdersResponseDto.DataBean.OrderBean orderBean, Long refundId) {
MultiOrderRefundRequest multiQueryRequest = new MultiOrderRefundRequest(); MultiOrderRefundRequest multiQueryRequest = new MultiOrderRefundRequest();
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
*/ */
package cn.freemud.entities.dto; package cn.freemud.entities.dto;
import com.freemud.application.sdk.api.ordercenter.response.OrderPayItemResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderCostResp; import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderCostResp;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse; import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import lombok.Data; import lombok.Data;
......
package cn.freemud.entities.dto;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: cn.freemud.entities.dto SvcComPayRequestDto
* @Description: TDO 描述....
* @author: 铁牌灵魂工程师
* @date: 2020/11/27
* @Copyright: www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
@NoArgsConstructor
public class SvcComPayRequestDto {
private String partnerId;
private String storeId;
}
package cn.freemud.entities.dto;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: cn.freemud.entities.dto SvcComPayResoonseDto
* @Description: TDO 描述....
* @author: 铁牌灵魂工程师
* @date: 2020/11/27
* @Copyright: www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
@NoArgsConstructor
public class SvcComPayResponseDto {
private String code;
private String message;
private Result result;
@Data
@NoArgsConstructor
static public class Result {
private Boolean value;
}
}
...@@ -278,6 +278,8 @@ public class OrderServiceImpl implements Orderservice { ...@@ -278,6 +278,8 @@ public class OrderServiceImpl implements Orderservice {
@Autowired @Autowired
private AssortmentOpenPlatformIappWxappStoreManager assortmentOpenPlatformIappWxappStoreManager; private AssortmentOpenPlatformIappWxappStoreManager assortmentOpenPlatformIappWxappStoreManager;
@Autowired
private SvcComPayClient svcComPayClient;
@Override @Override
public BaseResponse checkBeforeCreateOrder(CheckBeforeCreateOrderRequestVo requestVo) { public BaseResponse checkBeforeCreateOrder(CheckBeforeCreateOrderRequestVo requestVo) {
String trackingNo = LogTreadLocal.getTrackingNo(); String trackingNo = LogTreadLocal.getTrackingNo();
...@@ -2395,11 +2397,10 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2395,11 +2397,10 @@ public class OrderServiceImpl implements Orderservice {
, String storeId , String storeId
, String trackingNo) { , String trackingNo) {
boolean tigger = false;
OrderPayResponse orderPayResponse = new OrderPayResponse(); OrderPayResponse orderPayResponse = new OrderPayResponse();
tigger = true; boolean check = this.checkSvcComPay(orderBean.getCompanyId(), orderBean.getShopId());
//混合支付 //混合支付
if (tigger && StringUtils.isNotBlank(channel)) { if (check && StringUtils.isNotBlank(channel)) {
log.info("混合支付:"); log.info("混合支付:");
String partnerPayOvertime = this.getPartnerPayOvertime(orderBean.getCompanyId()); String partnerPayOvertime = this.getPartnerPayOvertime(orderBean.getCompanyId());
orderPayResponse = comPayOrder(cardCode,orderBean,paymentRequest,partnerPayOvertime,totalAmount.intValue(),channel,storeId,LogThreadLocal.getTrackingNo()); orderPayResponse = comPayOrder(cardCode,orderBean,paymentRequest,partnerPayOvertime,totalAmount.intValue(),channel,storeId,LogThreadLocal.getTrackingNo());
...@@ -3295,7 +3296,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -3295,7 +3296,7 @@ public class OrderServiceImpl implements Orderservice {
if (combPayResponse==null || !ResponseCodeConstant.PAYMENT_RESPONSE_SUCCESS.equals(combPayResponse.getCode())) { if (combPayResponse==null || !ResponseCodeConstant.PAYMENT_RESPONSE_SUCCESS.equals(combPayResponse.getCode())) {
log.info("混合支付返回信息错误,trackingNo:{} request:{} response:{}",trackingNo, JSONObject.toJSONString(combPayRequest), JSONObject.toJSONString(combPayResponse)); log.info("混合支付返回信息错误,trackingNo:{} request:{} response:{}",trackingNo, JSONObject.toJSONString(combPayRequest), JSONObject.toJSONString(combPayResponse));
orderPayResponse.setMsg(combPayResponse.getMsg()); orderPayResponse.setMsg(combPayResponse!=null ? "支付:"+combPayResponse.getMsg() :"混合支付忙不过来啦,请稍后再试");
return orderPayResponse; return orderPayResponse;
} }
Integer svcAmount = 0; Integer svcAmount = 0;
...@@ -3312,7 +3313,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -3312,7 +3313,7 @@ public class OrderServiceImpl implements Orderservice {
.orElse(null); .orElse(null);
//现金+svc 现金 //现金+svc 现金
if (payPlatforms.size()==2 || payPlatforms.size()==1 && cashPay!=null) { if (payPlatforms.size()==2 || (payPlatforms.size()==1 && cashPay!=null)) {
orderPayResponse = orderAdapter.convent2OrderCombPayResponse(combPayResponse.getData().getPayPlatformResponseList(),orderBean.getCompanyId(),storeId); orderPayResponse = orderAdapter.convent2OrderCombPayResponse(combPayResponse.getData().getPayPlatformResponseList(),orderBean.getCompanyId(),storeId);
orderPayResponse.setOpenId(paymentRequest.getOpenId()); orderPayResponse.setOpenId(paymentRequest.getOpenId());
orderPayResponse.setWxAppid(paymentRequest.getWxAppId()); orderPayResponse.setWxAppid(paymentRequest.getWxAppId());
...@@ -3437,4 +3438,29 @@ public class OrderServiceImpl implements Orderservice { ...@@ -3437,4 +3438,29 @@ public class OrderServiceImpl implements Orderservice {
queryOrderResponseVo.setChooseGoods(chooseGoods); queryOrderResponseVo.setChooseGoods(chooseGoods);
} }
/**
* 获取混合支付是否开启
* @param partnerId
* @return
*/
private boolean checkSvcComPay(String partnerId,String storeId) {
SvcComPayRequestDto requestDto = new SvcComPayRequestDto();
requestDto.setPartnerId(partnerId);
requestDto.setStoreId(storeId);
SvcComPayResponseDto query = null;
for (int i=0;i<3;i++) {
query = svcComPayClient.query(requestDto);
if (query!=null) break;
}
log.info("order checkSvcComPay:{}",JSON.toJSONString(query));
if (query==null || !ResponseResult.SUCCESS.getCode().equals(query.getCode())) {
return false;
}
if (query.getResult()!=null && query.getResult().getValue()) {
return true;
}
else {
return false;
}
}
} }
package cn.freemud.service.thirdparty;
import cn.freemud.entities.dto.SvcComPayRequestDto;
import cn.freemud.entities.dto.SvcComPayResponseDto;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: cn.freemud.service.thirdparty SvcClient
* @Description: TDO 描述....
* @author: 铁牌灵魂工程师
* @date: 2020/11/27
* @Copyright: www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@FeignClient(name="payment-center-management", url = "${saas.svc.switch.feign.url}")
@RequestMapping(produces = {"application/json;charset=UTF-8"})
public interface SvcComPayClient {
@PostMapping("/paymentmanager/partnerSetting/queryAssociationPaymentFlagPartnerSetting")
SvcComPayResponseDto query(SvcComPayRequestDto svcComPayRequestDto);
}
package cn.freemud.entities.dto;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: cn.freemud.entities.dto SvcComPayRequestDto
* @Description: TDO 描述....
* @author: 铁牌灵魂工程师
* @date: 2020/11/27
* @Copyright: www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
@NoArgsConstructor
public class SvcComPayRequestDto {
private String partnerId;
private String storeId;
}
package cn.freemud.entities.dto;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: cn.freemud.entities.dto SvcComPayResoonseDto
* @Description: TDO 描述....
* @author: 铁牌灵魂工程师
* @date: 2020/11/27
* @Copyright: www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
@NoArgsConstructor
public class SvcComPayResponseDto {
private String code;
private String message;
private Result result;
@Data
@NoArgsConstructor
static public class Result {
private Boolean value;
}
}
...@@ -150,6 +150,8 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -150,6 +150,8 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
private ActivityService activityService; private ActivityService activityService;
@Autowired @Autowired
private RedisCache redisCache; private RedisCache redisCache;
@Autowired
private SvcComPayClient svcComPayClient;
@Autowired @Autowired
private DeliveryFactory deliveryFactory; private DeliveryFactory deliveryFactory;
...@@ -305,7 +307,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -305,7 +307,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
this.addProductGoods(addShoppingCartGoodsRequestVo, cartGoods, spuId2, userId, shoppingCartGoodsResponseVo, this.addProductGoods(addShoppingCartGoodsRequestVo, cartGoods, spuId2, userId, shoppingCartGoodsResponseVo,
spuId, allCartGoodsList, productBeanListSpuClass, StringUtils.isNotBlank(skuId) ? true : false); spuId, allCartGoodsList, productBeanListSpuClass, StringUtils.isNotBlank(skuId) ? true : false);
} }
Long deliveryAmount = calculateDeliveryAmount(receiveId, partnerId, storeId, userLoginInfoDto.getWxAppid(), shoppingCartGoodsResponseVo,addShoppingCartGoodsRequestVo.getOrderType()); Long deliveryAmount = calculateDeliveryAmount(receiveId, partnerId, storeId, userLoginInfoDto.getWxAppid(), shoppingCartGoodsResponseVo);
ActivityQueryDto activityQueryDto = activityAdapter.getActivityQueryDto(partnerId, storeId, userId, appId, addShoppingCartGoodsRequestVo.getOrderType()); ActivityQueryDto activityQueryDto = activityAdapter.getActivityQueryDto(partnerId, storeId, userId, appId, addShoppingCartGoodsRequestVo.getOrderType());
if (grayPush(partnerId,storeId,"2")) { if (grayPush(partnerId,storeId,"2")) {
...@@ -320,8 +322,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -320,8 +322,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, allCartGoodsList , allCartGoodsList
, new ArrayList<>() //券 , new ArrayList<>() //券
, null //加价购商品 , null //加价购商品
, deliveryAmount , deliveryAmount);
, null);
// //
sharingCartService.distribute(discountResult sharingCartService.distribute(discountResult
...@@ -334,8 +335,6 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -334,8 +335,6 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, menuType , menuType
, deliveryAmount , deliveryAmount
, ShoppingCartConstant.ADD_AND_UPDATE); , ShoppingCartConstant.ADD_AND_UPDATE);
buildDiscounts(shoppingCartGoodsResponseVo,discountResult);
} }
else { else {
// 获取优惠信息 // 获取优惠信息
...@@ -353,7 +352,6 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -353,7 +352,6 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
clearMsg(shoppingCartGoodsResponseVo, cartGoods.getCartGoodsUid()); clearMsg(shoppingCartGoodsResponseVo, cartGoods.getCartGoodsUid());
//设置更新响应信息 //设置更新响应信息
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, calculationDiscountResult, allCartGoodsList, null, partnerId, storeId, userId, ShoppingCartConstant.ADD_AND_UPDATE, null); setAddAndUpdateResponse(shoppingCartGoodsResponseVo, calculationDiscountResult, allCartGoodsList, null, partnerId, storeId, userId, ShoppingCartConstant.ADD_AND_UPDATE, null);
} }
//埋点添加购物车行为 //埋点添加购物车行为
this.buriedPointShoppingCart(addShoppingCartGoodsRequestVo, spuId, productName); this.buriedPointShoppingCart(addShoppingCartGoodsRequestVo, spuId, productName);
...@@ -430,7 +428,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -430,7 +428,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
// 重新存储最新购物车 // 重新存储最新购物车
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, updateShoppingCartGoodsQtyRequestVo.getSessionId(), "", shoppingCartBaseService); assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, updateShoppingCartGoodsQtyRequestVo.getSessionId(), "", shoppingCartBaseService);
Long deliveryAmount = calculateDeliveryAmount(receiveId, partnerId, storeId, userLoginInfoDto.getWxAppid(), shoppingCartGoodsResponseVo,updateShoppingCartGoodsQtyRequestVo.getOrderType()); Long deliveryAmount = calculateDeliveryAmount(receiveId, partnerId, storeId, userLoginInfoDto.getWxAppid(), shoppingCartGoodsResponseVo);
ActivityQueryDto activityQueryDto = activityAdapter.getActivityQueryDto(partnerId, storeId, userId, appId, updateShoppingCartGoodsQtyRequestVo.getOrderType()); ActivityQueryDto activityQueryDto = activityAdapter.getActivityQueryDto(partnerId, storeId, userId, appId, updateShoppingCartGoodsQtyRequestVo.getOrderType());
if (grayPush(partnerId,storeId,"2")) { if (grayPush(partnerId,storeId,"2")) {
...@@ -445,8 +443,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -445,8 +443,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, cartGoodsList , cartGoodsList
, new ArrayList() //券 , new ArrayList() //券
, null //加价购商品 , null //加价购商品
, deliveryAmount , deliveryAmount);
, null);
sharingCartService.distribute(discountResult sharingCartService.distribute(discountResult
, cartGoodsList , cartGoodsList
...@@ -458,8 +455,6 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -458,8 +455,6 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, menuType , menuType
, deliveryAmount , deliveryAmount
, ShoppingCartConstant.ADD_AND_UPDATE); , ShoppingCartConstant.ADD_AND_UPDATE);
buildDiscounts(shoppingCartGoodsResponseVo,discountResult);
} }
else { else {
// 获取优惠信息 // 获取优惠信息
...@@ -476,7 +471,6 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -476,7 +471,6 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
clearMsg(shoppingCartGoodsResponseVo, cartGoodsUid); clearMsg(shoppingCartGoodsResponseVo, cartGoodsUid);
//设置更新响应信息 //设置更新响应信息
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, calculationDiscountResult, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), partnerId, storeId, userId, ShoppingCartConstant.ADD_AND_UPDATE, null); setAddAndUpdateResponse(shoppingCartGoodsResponseVo, calculationDiscountResult, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), partnerId, storeId, userId, ShoppingCartConstant.ADD_AND_UPDATE, null);
} }
return ResponseUtil.success(shoppingCartGoodsResponseVo); return ResponseUtil.success(shoppingCartGoodsResponseVo);
...@@ -566,7 +560,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -566,7 +560,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, assortmentCustomerInfoVo.getSessionId(), "", this.shoppingCartBaseService); assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, assortmentCustomerInfoVo.getSessionId(), "", this.shoppingCartBaseService);
} }
Long deliveryAmount = calculateDeliveryAmount(receiveId, partnerId, storeId, userLoginInfoDto.getWxAppid(), shoppingCartGoodsResponseVo,shoppingCartInfoRequestVo.getOrderType()); Long deliveryAmount = calculateDeliveryAmount(receiveId, partnerId, storeId, userLoginInfoDto.getWxAppid(), shoppingCartGoodsResponseVo);
ActivityQueryDto activityQueryDto = activityAdapter.getActivityQueryDto(partnerId, storeId, userId, appId, shoppingCartInfoRequestVo.getOrderType()); ActivityQueryDto activityQueryDto = activityAdapter.getActivityQueryDto(partnerId, storeId, userId, appId, shoppingCartInfoRequestVo.getOrderType());
CouponPromotionVO couponPromotionVO = couponAdapter.getCouponPromotionVO(shoppingCartInfoRequestVo, userLoginInfoDto); CouponPromotionVO couponPromotionVO = couponAdapter.getCouponPromotionVO(shoppingCartInfoRequestVo, userLoginInfoDto);
...@@ -578,20 +572,6 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -578,20 +572,6 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
coupon.setActivityCode(activityCode); coupon.setActivityCode(activityCode);
coupons.add(coupon); coupons.add(coupon);
} }
// 当couponCodes不为空时,需参与价格计算,同时排除单券入参
if (shoppingCartInfoRequestVo.getCouponCodes() != null) {
shoppingCartInfoRequestVo.getCouponCodes().forEach(cp -> {
if(ObjectUtils.equals(couponCode,cp.getCouponCode())){
return;
}
CalculationSharingDiscountRequestDto.CalculationDiscountCoupon coupon = new CalculationSharingDiscountRequestDto.CalculationDiscountCoupon();
coupon.setCode(cp.getCouponCode());
coupon.setActivityCode(cp.getCouponCode());
coupons.add(coupon);
});
}
List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList = shoppingCartInfoRequestVo.getSendGoods(); List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList = shoppingCartInfoRequestVo.getSendGoods();
List<ShoppingCartInfoRequestVo.SendGoods> sendGoods = new ArrayList<>(); List<ShoppingCartInfoRequestVo.SendGoods> sendGoods = new ArrayList<>();
if (CollectionUtils.isNotEmpty(sendGoodsList)) { if (CollectionUtils.isNotEmpty(sendGoodsList)) {
...@@ -615,8 +595,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -615,8 +595,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, cartGoodsList , cartGoodsList
, coupons , coupons
, sendGoods , sendGoods
, deliveryAmount , deliveryAmount);
, null);
sharingCartService.distribute(calculationSharingDiscountResult sharingCartService.distribute(calculationSharingDiscountResult
, cartGoodsList , cartGoodsList
, shoppingCartGoodsResponseVo , shoppingCartGoodsResponseVo
...@@ -627,8 +606,6 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -627,8 +606,6 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, menuType , menuType
, deliveryAmount , deliveryAmount
, ShoppingCartConstant.QUERY_INFO); , ShoppingCartConstant.QUERY_INFO);
buildDiscounts(shoppingCartGoodsResponseVo,calculationSharingDiscountResult);
} }
else { else {
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = new ArrayList<>(); List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = new ArrayList<>();
...@@ -650,7 +627,6 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -650,7 +627,6 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
setAddAndUpdateResponse(shoppingCartGoodsResponseVo, calculationDiscountResult, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), partnerId, storeId, userId, ShoppingCartConstant.QUERY_INFO, shoppingCartInfoRequestVo); setAddAndUpdateResponse(shoppingCartGoodsResponseVo, calculationDiscountResult, cartGoodsList, shoppingCartGoodsResponseVo.getToastMsg(), partnerId, storeId, userId, ShoppingCartConstant.QUERY_INFO, shoppingCartInfoRequestVo);
// 在原价、现价、折扣价上增加第一次使用会员卡的费用 // 在原价、现价、折扣价上增加第一次使用会员卡的费用
this.addNeedCardAmount(shoppingCartInfoRequestVo, shoppingCartGoodsResponseVo); this.addNeedCardAmount(shoppingCartInfoRequestVo, shoppingCartGoodsResponseVo);
} }
return ResponseUtil.success(shoppingCartGoodsResponseVo); return ResponseUtil.success(shoppingCartGoodsResponseVo);
} }
...@@ -800,7 +776,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -800,7 +776,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
ActivityQueryDto activityQueryDto = activityAdapter.getActivityQueryDto(partnerId, storeId, userId, appId, shoppingCartInfoRequestVo.getOrderType()); ActivityQueryDto activityQueryDto = activityAdapter.getActivityQueryDto(partnerId, storeId, userId, appId, shoppingCartInfoRequestVo.getOrderType());
CouponPromotionVO couponPromotionVO = couponAdapter.getCouponPromotionVO(shoppingCartInfoRequestVo, userLoginInfoDto); CouponPromotionVO couponPromotionVO = couponAdapter.getCouponPromotionVO(shoppingCartInfoRequestVo, userLoginInfoDto);
Long deliveryAmount = calculateDeliveryAmount(receiveId, partnerId, storeId, userLoginInfoDto.getWxAppid(), shoppingCartGoodsResponseVo,shoppingCartInfoRequestVo.getOrderType()); Long deliveryAmount = calculateDeliveryAmount(receiveId, partnerId, storeId, userLoginInfoDto.getWxAppid(), shoppingCartGoodsResponseVo);
if (grayPush(partnerId,storeId,"2")) { if (grayPush(partnerId,storeId,"2")) {
List<CalculationSharingDiscountRequestDto.CalculationDiscountCoupon> coupons = new ArrayList<>(); List<CalculationSharingDiscountRequestDto.CalculationDiscountCoupon> coupons = new ArrayList<>();
// 当couponCode不为空时,需参与价格计算 // 当couponCode不为空时,需参与价格计算
...@@ -810,18 +786,6 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -810,18 +786,6 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
coupon.setActivityCode(activityCode); coupon.setActivityCode(activityCode);
coupons.add(coupon); coupons.add(coupon);
} }
// 当couponCodes不为空时,需参与价格计算,同时排除单券入参
if (shoppingCartInfoRequestVo.getCouponCodes() != null) {
shoppingCartInfoRequestVo.getCouponCodes().forEach(cp -> {
if(ObjectUtils.equals(couponCode,cp.getCouponCode())){
return;
}
CalculationSharingDiscountRequestDto.CalculationDiscountCoupon coupon = new CalculationSharingDiscountRequestDto.CalculationDiscountCoupon();
coupon.setCode(cp.getCouponCode());
coupon.setActivityCode(cp.getCouponCode());
coupons.add(coupon);
});
}
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult = sharingDiscountService.getCalculationSharingDiscountResult(menuType CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult = sharingDiscountService.getCalculationSharingDiscountResult(menuType
, partnerId , partnerId
, storeId , storeId
...@@ -832,20 +796,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -832,20 +796,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, cartGoodsList , cartGoodsList
, coupons , coupons
, shoppingCartInfoRequestVo.getSendGoods() , shoppingCartInfoRequestVo.getSendGoods()
, deliveryAmount , deliveryAmount);
, shoppingCartInfoRequestVo);
// 活动校验
calculationSharingValidatorService.validator(discountResult
, cartGoodsList
, shoppingCartGoodsResponseVo
, shoppingCartInfoRequestVo
, userLoginInfoDto
, couponPromotionVO
, activityQueryDto
, menuType
, deliveryAmount
, ShoppingCartConstant.QUERY_INFO);
//直接利用促销返回做均摊 //直接利用促销返回做均摊
sharingEquallyService.equally(discountResult sharingEquallyService.equally(discountResult
...@@ -1700,6 +1651,8 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1700,6 +1651,8 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
if (response.getData() == null || response.getData().getData() == null || response.getData().getData().getCardSimpleInfos().size() > 1) { if (response.getData() == null || response.getData().getData() == null || response.getData().getData().getCardSimpleInfos().size() > 1) {
throw new ServiceException(ResponseResult.USER_SVC_CARD_ERROR); throw new ServiceException(ResponseResult.USER_SVC_CARD_ERROR);
} }
boolean check = this.checkSvcComPay(partnerId, storeId);
if (check) {
//混合支付无需校验svc卡余额,但是配送和包装费不计算在svc卡支付 //混合支付无需校验svc卡余额,但是配送和包装费不计算在svc卡支付
Integer amount1 = response.getData().getData().getCardSimpleInfos().get(0).getAmount(); Integer amount1 = response.getData().getData().getCardSimpleInfos().get(0).getAmount();
Integer vamount = response.getData().getData().getCardSimpleInfos().get(0).getVamount(); Integer vamount = response.getData().getData().getCardSimpleInfos().get(0).getVamount();
...@@ -1725,6 +1678,23 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1725,6 +1678,23 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
shoppingCartGoodsResponseVo.setSvcPayAmount(amountStr); shoppingCartGoodsResponseVo.setSvcPayAmount(amountStr);
shoppingCartGoodsResponseVo.setSvcDiscountDesc("储值卡支付¥" + amountStr); shoppingCartGoodsResponseVo.setSvcDiscountDesc("储值卡支付¥" + amountStr);
} }
else {
//获取实际配送费
if (StringUtils.isNotBlank(receiveId) && shoppingCartGoodsResponseVo.getDiscountDeliveryAmount() != null) {
Integer deliveryAmount = shoppingCartGoodsResponseVo.getDiscountDeliveryAmount().intValue();
orderAmount += deliveryAmount;
}
Integer amount1 = response.getData().getData().getCardSimpleInfos().get(0).getAmount();
Integer vamount = response.getData().getData().getCardSimpleInfos().get(0).getVamount();
if (orderAmount > amount1 + vamount) {
throw new ServiceException(ResponseResult.USER_SVC_CARD_AMOUNT_DEFICIENCY);
}
BigDecimal bigDecimal = new BigDecimal(orderAmount);
String amountStr = bigDecimal.divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
shoppingCartGoodsResponseVo.setTotalAmount(0L);
shoppingCartGoodsResponseVo.setSvcDiscountDesc("储值卡支付¥" + amountStr);
}
}
/** /**
* 储值卡支付查询配送费 * 储值卡支付查询配送费
...@@ -1782,19 +1752,33 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1782,19 +1752,33 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
return amount; return amount;
} }
private Long getNewDeliveryAmount(String receiveId, String partnerId, String storeId, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,Integer orderType) { private Long getNewDeliveryAmount(String receiveId, String partnerId, String storeId, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo) {
//String trackingNo = LogThreadLocal.getTrackingNo(); String trackingNo = LogThreadLocal.getTrackingNo();
Long amount = 0L; Long amount = 0L;
// 如果订单的收获地址为空,且订单是外卖单,返回运费 if (StringUtils.isBlank(receiveId)) {
// 主要是为了兼容coco不传收获地址,需要获取固定运费的情况
if (StringUtils.isBlank(receiveId) && !Objects.equals(orderType, CreateOrderType.TAKE_OUT.getCode())) {
return amount; return amount;
} }
QueryReceiveAddressRequest queryReceive = new QueryReceiveAddressRequest(receiveId, partnerId);
//查询会员后货地址经纬度
com.freemud.application.sdk.api.base.BaseResponse<QueryReceiveAddressResponse> queryReceiveAddressResponse = memberCenterService.queryReceiveAddressById(queryReceive, trackingNo);
if (!ResponseResult.SUCCESS.getCode().equals(queryReceiveAddressResponse.getCode()) || queryReceiveAddressResponse.getData() == null) {
throw new ServiceException(ResponseResult.USER_GETRECEIVEADDRESS_ERROR);
}
DeliveryService deliveryService = deliveryFactory.getCalculateDeliveryAmount(orderType,receiveId); QueryDeliveryRequest queryDeliveryRequest = new QueryDeliveryRequest();
amount = deliveryService.calculateDeliveryAmount(receiveId,partnerId,storeId,shoppingCartGoodsResponseVo); queryDeliveryRequest.setPartnerId(partnerId);
queryDeliveryRequest.setStoreCode(storeId);
return amount; queryDeliveryRequest.setUserLatitude(queryReceiveAddressResponse.getData().getLatitude());
queryDeliveryRequest.setUserLongitude(queryReceiveAddressResponse.getData().getLongitude());
com.freemud.application.sdk.api.base.BaseResponse<QueryDeliverDetailResponse> queryDeliverDetailResponse = storeCenterService.queryDeliverDetail(queryDeliveryRequest, trackingNo);
if (queryDeliverDetailResponse == null || !ResponseResult.SUCCESS.getCode().equals(queryDeliverDetailResponse.getCode()) || queryDeliverDetailResponse.getData() == null) {
throw new ServiceException(ResponseResult.STORE_ITEM_NOT_DELIVERY);
}
if(queryDeliverDetailResponse.getData().getDeliveryAmount() == null) {
throw new ServiceException(ResponseResult.STORE_DELIVERY_AMOUNT_ERROR);
}
shoppingCartGoodsResponseVo.setDeliveryFeeZeroReason(queryDeliverDetailResponse.getData().getDeliveryFeeZeroReason() != null ? queryDeliverDetailResponse.getData().getDeliveryFeeZeroReason() : 0);
return queryDeliverDetailResponse.getData().getDeliveryAmount();
} }
/** /**
...@@ -1841,11 +1825,9 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1841,11 +1825,9 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
return calculationDiscountResult; return calculationDiscountResult;
} }
private Long calculateDeliveryAmount(String receiveId, String partnerId, String storeId, String wxappid, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,Integer orderType) { private Long calculateDeliveryAmount(String receiveId, String partnerId, String storeId, String wxappid, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo) {
Long deliveryAmount = 0L; Long deliveryAmount = 0L;
// 如果订单的收获地址为空,且订单是外卖单,返回运费 if (StringUtils.isBlank(receiveId)) {
// 主要是为了兼容coco不传收获地址,需要获取固定运费的情况
if (StringUtils.isBlank(receiveId) && !Objects.equals(orderType, CreateOrderType.TAKE_OUT.getCode())) {
return deliveryAmount; return deliveryAmount;
} }
log.info("获取配送配逻辑 tackingNo:{},storeDeliveryUseOld:{},receiveId:{},partnerId:{},storeId:{}", LogThreadLocal.getTrackingNo(), storeDeliveryUseOld, receiveId, partnerId, storeId); log.info("获取配送配逻辑 tackingNo:{},storeDeliveryUseOld:{},receiveId:{},partnerId:{},storeId:{}", LogThreadLocal.getTrackingNo(), storeDeliveryUseOld, receiveId, partnerId, storeId);
...@@ -1853,7 +1835,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -1853,7 +1835,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
deliveryAmount = Long.parseLong(getDeliveryAmount(receiveId, partnerId, storeId).toString()); deliveryAmount = Long.parseLong(getDeliveryAmount(receiveId, partnerId, storeId).toString());
shoppingCartGoodsResponseVo.setDeliveryFeeZeroReason(0); shoppingCartGoodsResponseVo.setDeliveryFeeZeroReason(0);
} else { } else {
deliveryAmount = getNewDeliveryAmount(receiveId, partnerId, storeId, shoppingCartGoodsResponseVo,orderType); deliveryAmount = getNewDeliveryAmount(receiveId, partnerId, storeId, shoppingCartGoodsResponseVo);
} }
return deliveryAmount; return deliveryAmount;
...@@ -2107,4 +2089,28 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService { ...@@ -2107,4 +2089,28 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
} }
/**
* 获取混合支付是否开启
* @param partnerId
* @return
*/
private boolean checkSvcComPay(String partnerId,String storeId) {
SvcComPayRequestDto requestDto = new SvcComPayRequestDto();
requestDto.setPartnerId(partnerId);
requestDto.setStoreId(storeId);
SvcComPayResponseDto query = null;
for (int i=0;i<3;i++) {
query = svcComPayClient.query(requestDto);
if (query!=null) break;
}
if (query==null || !ResponseResult.SUCCESS.getCode().equals(query.getCode())) {
return false;
}
if (query.getResult()!=null && query.getResult().getValue()) {
return true;
}
else {
return false;
}
}
} }
package cn.freemud.service.thirdparty;
import cn.freemud.entities.dto.SvcComPayRequestDto;
import cn.freemud.entities.dto.SvcComPayResponseDto;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: cn.freemud.service.thirdparty SvcClient
* @Description: TDO 描述....
* @author: 铁牌灵魂工程师
* @date: 2020/11/27
* @Copyright: www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@FeignClient(name="payment-center-management", url = "${saas.svc.switch.feign.url}")
@RequestMapping(produces = {"application/json;charset=UTF-8"})
public interface SvcComPayClient {
@PostMapping("/paymentmanager/partnerSetting/queryAssociationPaymentFlagPartnerSetting")
SvcComPayResponseDto query(SvcComPayRequestDto svcComPayRequestDto);
}
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