Commit 80368a60 by 缪晖

Merge branch 'feature/20201208_collageOrder_miaohui' into qa

# Conflicts:
#	assortment-ordercenter-sdk/pom.xml
#	assortment-ordercenter-sdk/readme.md
#	assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/adapter/OrderSdkAdapter.java
#	assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/request/order/CreateOrderProductRequest.java
#	assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/constant/ShoppingCartConstant.java
#	order-application-service/pom.xml
#	order-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
#	ordercenter-sdk/pom.xml
#	ordercenter-sdk/readme.md
#	shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/ShoppingCartGoodsResponseVo.java
#	shopping-cart-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
parents 9a1e52d6 a9755e76
...@@ -148,3 +148,4 @@ ...@@ -148,3 +148,4 @@
| 2.1.5-RELEASE | 麦咖啡权益卡金额入机 | 徐康 | 2020-11-23 | | 2.1.5-RELEASE | 麦咖啡权益卡金额入机 | 徐康 | 2020-11-23 |
| 2.1.6-RELEASE | hun | 徐康 | 2020-11-23 | | 2.1.6-RELEASE | hun | 徐康 | 2020-11-23 |
| 2.2.18-SNAPSHOT| 抖音支付新增抖音单号和openId | 张志恒 | 2020-12-4 | | 2.2.18-SNAPSHOT| 抖音支付新增抖音单号和openId | 张志恒 | 2020-12-4 |
| 2.1.7-RELEASE | 农工商撤单 | 张志恒 | 2020-12-07 |
...@@ -12,6 +12,7 @@ import com.freemud.sdk.api.assortment.shoppingcart.service.CollageOrderBaseServi ...@@ -12,6 +12,7 @@ import com.freemud.sdk.api.assortment.shoppingcart.service.CollageOrderBaseServi
import com.freemud.sdk.api.assortment.shoppingcart.util.CartResponseUtil; import com.freemud.sdk.api.assortment.shoppingcart.util.CartResponseUtil;
import com.freemud.sdk.api.assortment.shoppingcart.util.DateTimeUtils; import com.freemud.sdk.api.assortment.shoppingcart.util.DateTimeUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
...@@ -43,6 +44,12 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService { ...@@ -43,6 +44,12 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
@Autowired @Autowired
private RedisTemplate redisTemplate; private RedisTemplate redisTemplate;
@Value("${collage.complete.delay.minute}")
private int completeDelayMinute = 1;
@Value("${collage.cancel.delay.minute}")
private int cancelDelayMinute = 1;
/** /**
* 查询拼单订单 * 查询拼单订单
* 根据createCollageUserId查询,先根据key查询,若不存在去商户旗下拼单列表查询,若存在则返回 * 根据createCollageUserId查询,先根据key查询,若不存在去商户旗下拼单列表查询,若存在则返回
...@@ -192,11 +199,11 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService { ...@@ -192,11 +199,11 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
// 获取当前拼单剩余缓存时间 // 获取当前拼单剩余缓存时间
long expireSeconds = this.getCollageBashHashExpireSeconds(collageBaseHashKey); long expireSeconds = this.getCollageBashHashExpireSeconds(collageBaseHashKey);
// 若状态更新为已完成 则将失效时间改为5分钟 // 若状态更新为已完成 则将失效时间改为N分钟
if (CollageOrderStatus.COMPLETE.getValue().equals(collageOrderDto.getStatus())) { if (CollageOrderStatus.COMPLETE.getValue().equals(collageOrderDto.getStatus())) {
expireSeconds = 1 * 60L; expireSeconds = completeDelayMinute * 60L;
} else if (CollageOrderStatus.CANCEL.getValue().equals(collageOrderDto.getStatus())) { } else if (CollageOrderStatus.CANCEL.getValue().equals(collageOrderDto.getStatus())) {
expireSeconds = 1 * 60L; expireSeconds = cancelDelayMinute * 60L;
} }
// 修改拼单主信息失效时间 // 修改拼单主信息失效时间
......
...@@ -2027,6 +2027,7 @@ public class OrderAdapter { ...@@ -2027,6 +2027,7 @@ public class OrderAdapter {
productVos.sort(Comparator.comparing(ProductVo::getSequence)); productVos.sort(Comparator.comparing(ProductVo::getSequence));
responseVo.setProducts(productVos); responseVo.setProducts(productVos);
responseVo.setProductNum(productVos.stream().mapToInt(ProductVo::getQty).sum()); responseVo.setProductNum(productVos.stream().mapToInt(ProductVo::getQty).sum());
responseVo.setOrderUserNum(productVos.stream().filter(product -> StringUtils.isNotEmpty(product.getUserId())).map(ProductVo::getUserId).distinct().count());
} }
} }
......
...@@ -266,6 +266,11 @@ public class QueryCollageOrderResponseVo { ...@@ -266,6 +266,11 @@ public class QueryCollageOrderResponseVo {
*/ */
private Byte marketingType; private Byte marketingType;
/**
* 订单参与人数(普通订单-0;拼单订单-实际参与人数)
*/
private Long orderUserNum;
//private List<ProductVo> products; //private List<ProductVo> products;
......
...@@ -401,6 +401,11 @@ public class QueryOrderResponseVo { ...@@ -401,6 +401,11 @@ public class QueryOrderResponseVo {
*/ */
private Byte marketingType; private Byte marketingType;
/**
* 订单参与人数(普通订单-0;拼单订单-实际参与人数)
*/
private Long orderUserNum;
@Data @Data
public static class OrderStatusFlow { public static class OrderStatusFlow {
/** /**
......
...@@ -89,4 +89,5 @@ ...@@ -89,4 +89,5 @@
| 1.3.20.RELEASE | 麦咖啡权益卡金额入机 | 徐康 | 2020-11-23 | | 1.3.20.RELEASE | 麦咖啡权益卡金额入机 | 徐康 | 2020-11-23 |
| 1.3.21.RELEASE | 混支付 | 徐康 | 2020-11-26 | | 1.3.21.RELEASE | 混支付 | 徐康 | 2020-11-26 |
| 1.7.3-SNAPSHOT| 抖音支付新增抖音单号和openId | 张志恒 | 2020-12-4 | | 1.7.3-SNAPSHOT| 抖音支付新增抖音单号和openId | 张志恒 | 2020-12-4 |
| 1.3.22.RELEASE | 农工商撤单 | 张志恒 | 2020-12-07 |
...@@ -11,4 +11,5 @@ public class ParkingOrderRevokeReq { ...@@ -11,4 +11,5 @@ public class ParkingOrderRevokeReq {
private String orderCode; private String orderCode;
private String operator; private String operator;
private String partnerId; private String partnerId;
private String cancelReason;
} }
...@@ -24,6 +24,9 @@ public class CollageOrderRequestVo { ...@@ -24,6 +24,9 @@ public class CollageOrderRequestVo {
@NotEmpty(message = "sessionId不能为空") @NotEmpty(message = "sessionId不能为空")
private String sessionId; private String sessionId;
@ApiModelProperty(value = "当前操作人用户ID")
private String currentUserId;
@ApiModelProperty(value = "拼单创建人用户ID") @ApiModelProperty(value = "拼单创建人用户ID")
private String createCollageUserId; private String createCollageUserId;
......
...@@ -127,6 +127,21 @@ public class ShoppingCartCollageResponseVo extends ShoppingCartGoodsBaseResponse ...@@ -127,6 +127,21 @@ public class ShoppingCartCollageResponseVo extends ShoppingCartGoodsBaseResponse
private Integer deliveryFeeZeroReason; private Integer deliveryFeeZeroReason;
/** /**
* 代金券
*/
private String couponCode;
/**
* 运费券
*/
private String freightCouponCode;
/**
* svc卡支付金额
*/
private String svcPayAmount;
/**
* 购物车版本号 * 购物车版本号
*/ */
private Integer carVer; private Integer carVer;
......
...@@ -59,7 +59,7 @@ public class CollageOrderServiceImpl implements CollageOrderService { ...@@ -59,7 +59,7 @@ public class CollageOrderServiceImpl implements CollageOrderService {
public BaseResponse queryCollageOrder(CollageOrderRequestVo request) { public BaseResponse queryCollageOrder(CollageOrderRequestVo request) {
CollageOrderDto collageOrderDto = this.collageOrderAdapter.convert2CollageOrderDto(request); CollageOrderDto collageOrderDto = this.collageOrderAdapter.convert2CollageOrderDto(request);
// 查询时需传入拼单创建人的userId,若上送字段为空时,默认查询当前登录人自己的拼单信息 // 查询时需传入拼单创建人的userId,若上送字段为空时,默认查询当前登录人自己的拼单信息
String currentUserId = this.getUserIdBySessionId(request.getSessionId()); String currentUserId = StringUtils.isNotBlank(request.getCurrentUserId()) ? request.getCurrentUserId() : this.getUserIdBySessionId(request.getSessionId());
collageOrderDto.setCurrentUserId(currentUserId); collageOrderDto.setCurrentUserId(currentUserId);
// 若拼单发起人ID为空,则默认按当前用户查询 // 若拼单发起人ID为空,则默认按当前用户查询
if (StringUtils.isEmpty(request.getCreateCollageUserId())) { if (StringUtils.isEmpty(request.getCreateCollageUserId())) {
......
...@@ -17,6 +17,7 @@ import cn.freemud.interceptor.ServiceException; ...@@ -17,6 +17,7 @@ import cn.freemud.interceptor.ServiceException;
import cn.freemud.redis.RedisCache; import cn.freemud.redis.RedisCache;
import cn.freemud.service.*; import cn.freemud.service.*;
import cn.freemud.service.thirdparty.ActivityClient; import cn.freemud.service.thirdparty.ActivityClient;
import cn.freemud.service.thirdparty.SvcComPayClient;
import cn.freemud.utils.PropertyConvertUtil; import cn.freemud.utils.PropertyConvertUtil;
import cn.freemud.utils.RedisLock; import cn.freemud.utils.RedisLock;
import cn.freemud.utils.ResponseUtil; import cn.freemud.utils.ResponseUtil;
...@@ -103,6 +104,9 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp ...@@ -103,6 +104,9 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
@Autowired @Autowired
private PaymentNewService paymentNewService; private PaymentNewService paymentNewService;
@Autowired
private SvcComPayClient svcComPayClient;
@Override @Override
public BaseResponse addGoodsByCard(AddGoodsByWeixinCardRequestVo request) { public BaseResponse addGoodsByCard(AddGoodsByWeixinCardRequestVo request) {
...@@ -1261,9 +1265,36 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp ...@@ -1261,9 +1265,36 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
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卡支付
Integer amount1 = response.getData().getData().getCardSimpleInfos().get(0).getAmount();
Integer vamount = response.getData().getData().getCardSimpleInfos().get(0).getVamount();
Integer svcTotalAmount = amount1+vamount;
//获取实际配送费
Integer deliveryAmount = 0;
Integer svcPayAmount = 0;
if (StringUtils.isNotBlank(receiveId) && shoppingCartGoodsResponseVo.getDiscountDeliveryAmount() != null) {
//Integer deliveryAmount = getDeliveryAmount(receiveId, partnerId, storeId);
deliveryAmount = shoppingCartGoodsResponseVo.getDiscountDeliveryAmount().intValue();
orderAmount += deliveryAmount;
}
if (svcTotalAmount>0 && svcTotalAmount>orderAmount) {
svcPayAmount = orderAmount;
shoppingCartGoodsResponseVo.setTotalAmount(0L);
}
else if (svcTotalAmount>0 && svcTotalAmount<=orderAmount) {
svcPayAmount = svcTotalAmount;
shoppingCartGoodsResponseVo.setTotalAmount((orderAmount.longValue()-svcPayAmount.longValue()));
}
BigDecimal bigDecimal = new BigDecimal(svcPayAmount);
String amountStr = bigDecimal.divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).toString();
shoppingCartGoodsResponseVo.setSvcPayAmount(amountStr);
shoppingCartGoodsResponseVo.setSvcDiscountDesc("储值卡支付¥" + amountStr);
}
else {
//获取实际配送费 //获取实际配送费
if (StringUtils.isNotBlank(receiveId) && shoppingCartGoodsResponseVo.getDiscountDeliveryAmount() != null) { if (StringUtils.isNotBlank(receiveId) && shoppingCartGoodsResponseVo.getDiscountDeliveryAmount() != null) {
// Integer deliveryAmount = getDeliveryAmount(receiveId, partnerId, storeId);
Integer deliveryAmount = shoppingCartGoodsResponseVo.getDiscountDeliveryAmount().intValue(); Integer deliveryAmount = shoppingCartGoodsResponseVo.getDiscountDeliveryAmount().intValue();
orderAmount += deliveryAmount; orderAmount += deliveryAmount;
} }
...@@ -1277,4 +1308,30 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp ...@@ -1277,4 +1308,30 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
shoppingCartGoodsResponseVo.setTotalAmount(0L); shoppingCartGoodsResponseVo.setTotalAmount(0L);
shoppingCartGoodsResponseVo.setSvcDiscountDesc("储值卡支付¥" + amountStr); shoppingCartGoodsResponseVo.setSvcDiscountDesc("储值卡支付¥" + amountStr);
} }
}
/**
* 获取混合支付是否开启
* @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;
}
}
} }
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