Commit d6596e9b by 徐康

Merge remote-tracking branch 'origin/qa' into qa

parents d74a8dca 395a8a0d
......@@ -10,7 +10,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>assortment-ordercenter-sdk</artifactId>
<version>2.2.18-SNAPSHOT</version>
<version>2.2.20-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
......@@ -38,7 +38,7 @@
<dependency>
<groupId>cn.freemud</groupId>
<artifactId>ordercenter-sdk</artifactId>
<version>1.7.3-SNAPSHOT</version>
<version>1.7.5-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
......
......@@ -149,3 +149,5 @@
| 2.1.6-RELEASE | hun | 徐康 | 2020-11-23 |
| 2.2.18-SNAPSHOT| 抖音支付新增抖音单号和openId | 张志恒 | 2020-12-4 |
| 2.1.7-RELEASE | 农工商撤单 | 张志恒 | 2020-12-07 |
| 2.2.20-SNAPSHOT| 抖音支付 | 张志恒 | 2020-12-11ß |
......@@ -2644,7 +2644,7 @@ public class OrderSdkAdapter {
for (CreateOrderProductRequest productRequest : products) {
// 普通商品 订单转换
productRequest.setOpid(index);
originalAmount += updateOrderItemAndSettlement(orderItemList, orderSettlementCreateReqList, productRequest, partnerId, "", false);
originalAmount += updateOrderItemAndSettlement(productRequest, orderItemList, orderSettlementCreateReqList, productRequest, partnerId, "", false);
if (ProductTypeEnum.MATERIAL_PRODUCT.getCode().equals(productRequest.getProductType())) {
if (CollectionUtils.isNotEmpty(productRequest.getMaterialProduct())) {
// 父类商品productId=productId+seq
......@@ -2654,7 +2654,7 @@ public class OrderSdkAdapter {
material.setOpid(index);
material.setSpecification(material.getProductId());
material.setSpecificationName(material.getProductName());
updateOrderItemAndSettlement(orderItemList, orderSettlementCreateReqList, material, partnerId, partnerProductId, true);
updateOrderItemAndSettlement(productRequest, orderItemList, orderSettlementCreateReqList, material, partnerId, partnerProductId, true);
}
}
}
......@@ -2663,7 +2663,7 @@ public class OrderSdkAdapter {
// 父类商品productId=productId+seq
String partnerProductId = productRequest.getProductId() + "_" + index;
if (CollectionUtils.isNotEmpty(productRequest.getComboProduct())) {
productRequest.getComboProduct().forEach(combo -> updateOrderItemAndSettlement(orderItemList, orderSettlementCreateReqList, combo, partnerId, partnerProductId, false));
productRequest.getComboProduct().forEach(combo -> updateOrderItemAndSettlement(productRequest, orderItemList, orderSettlementCreateReqList, combo, partnerId, partnerProductId, false));
}
}
index++;
......@@ -2685,7 +2685,7 @@ public class OrderSdkAdapter {
for (CreateOrderProductRequest productRequest : products) {
// 普通商品 订单转换
productRequest.setOpid(index);
originalAmount += updateOrderItemAndSettlement(orderItemList, orderSettlementCreateReqList, productRequest, partnerId, "", false);
originalAmount += updateOrderItemAndSettlement(productRequest, orderItemList, orderSettlementCreateReqList, productRequest, partnerId, "", false);
// 如果是套餐商品,需要转换当前商品行子集ComboProduct&GroupProduct(固定商品、可选商品)
if (ObjectUtils.equals(ProductTypeEnum.SETMEAL_PRODUCT.getCode(), productRequest.getProductType()) || ObjectUtils.equals(ProductTypeEnum.SETMEAL_UPPRICE_PRODUCT.getCode(), productRequest.getProductType())) {
// 父类商品productId=productId+seq
......@@ -2693,13 +2693,13 @@ public class OrderSdkAdapter {
if (CollectionUtils.isNotEmpty(productRequest.getComboProduct())) {
for(CreateOrderProductRequest combo : productRequest.getComboProduct()) {
combo.setOpid(comboIndex);
updateOrderItemAndSettlement(orderItemList, orderSettlementCreateReqList, combo, partnerId, parentProductId, false);
updateOrderItemAndSettlement(productRequest, orderItemList, orderSettlementCreateReqList, combo, partnerId, parentProductId, false);
if(CollectionUtils.isNotEmpty(combo.getMaterialProduct())) {
String addProductId = combo.getProductId() + "_" + comboIndex;
for(CreateOrderProductRequest material : combo.getMaterialProduct()) {
material.setSpecification(material.getProductId());
material.setSpecificationName(material.getProductName());
updateOrderItemAndSettlement(orderItemList, orderSettlementCreateReqList, material, partnerId, addProductId, true);
updateOrderItemAndSettlement(productRequest, orderItemList, orderSettlementCreateReqList, material, partnerId, addProductId, true);
}
}
comboIndex++;
......@@ -2711,7 +2711,7 @@ public class OrderSdkAdapter {
for (CreateOrderProductRequest material: productRequest.getMaterialProduct()){
material.setSpecification(material.getProductId());
material.setSpecificationName(material.getProductName());
updateOrderItemAndSettlement(orderItemList, orderSettlementCreateReqList, material, partnerId, addProductId, true);
updateOrderItemAndSettlement(productRequest, orderItemList, orderSettlementCreateReqList, material, partnerId, addProductId, true);
}
}
index++;
......@@ -2729,7 +2729,7 @@ public class OrderSdkAdapter {
* @param parentProductId 套餐父商品Id
* @return
*/
private Long updateOrderItemAndSettlement(List<OrderItemCreateReq> orderItemList, List<OrderSettlementCreateReq> orderSettlementCreateReqList, CreateOrderProductRequest product, String partnerId, String parentProductId, Boolean isMaterial) {
private Long updateOrderItemAndSettlement(CreateOrderProductRequest productRequest, List<OrderItemCreateReq> orderItemList, List<OrderSettlementCreateReq> orderSettlementCreateReqList, CreateOrderProductRequest product, String partnerId, String parentProductId, Boolean isMaterial) {
OrderItemCreateReq orderItemCreateReq = new OrderItemCreateReq();
orderItemCreateReq.setId(product.getId());
orderItemCreateReq.setPartnerId(partnerId);
......@@ -2861,11 +2861,11 @@ public class OrderSdkAdapter {
orderItemCreateReq.setExtInfo(JSONObject.toJSONString(extInfo));
// 拼单加购人信息 add by miaohui 2020.10.12 start
orderItemCreateReq.setUserId(product.getUserId());
orderItemCreateReq.setOpenId(product.getOpenId());
orderItemCreateReq.setNickName(product.getNickName());
orderItemCreateReq.setPhotoUrl(product.getPhotoUrl());
orderItemCreateReq.setPackPrice(product.getPackPrice());
orderItemCreateReq.setUserId(productRequest.getUserId());
orderItemCreateReq.setOpenId(productRequest.getOpenId());
orderItemCreateReq.setNickName(productRequest.getNickName());
orderItemCreateReq.setPhotoUrl(productRequest.getPhotoUrl());
orderItemCreateReq.setPackPrice(productRequest.getPackPrice());
// 拼单加购人信息 add by miaohui 2020.10.12 end
orderItemList.add(orderItemCreateReq);
......
......@@ -41,6 +41,7 @@ public enum OrderSourceType {
DPZHCT("dpzhct", "美团点评智慧餐厅", 24),
FMWD("fmwd", "非码微店", 25),
Y_POS("ypos", "非码云POS", 26),
TIKTOKPAY("tiktokpay","抖音支付", 27),
parkingmanual("parkingmanual", "农工商停车手工录单", 98),
PARKING("parking", "农工商停车", 99),
SDG("sdg", "闪电购", 1000);
......
......@@ -76,6 +76,13 @@ public class OrderPayResponse {
*/
private String thirdOrderToken;
// 回调地址
private String payNotifyUrl;
//商户id
private String sellerId;
// 支付类型:机场支付=20099
private String ebCode;
@NoArgsConstructor
@Data
public static class PayOrderBean {
......@@ -107,6 +114,8 @@ public class OrderPayResponse {
private String signType;
private String aliPayOrder;
}
}
......@@ -323,12 +323,14 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService {
BaseResponse<GetMemberExtendInfoResponse> extendInfo = new BaseResponse();
try {
QueryByCodeResponse codeResponse = orderSdkService.getOrderInfo(confirmOrderRequest.getProductOrderCode(), 0, confirmOrderRequest.getTrackingNo());
orderByIdResponse = orderSdkAdapter.convent2QueryOrderByIdResponse(codeResponse);
GetMemberExtendInfoRequest extendInfoRequest = new GetMemberExtendInfoRequest();
extendInfoRequest.setMemberId(orderByIdResponse.getData().getUserId());
extendInfoRequest.setPartnerId(orderByIdResponse.getData().getCompanyId());
extendInfo = memberCenterService.getMemberExtendInfo(extendInfoRequest, confirmOrderRequest.getTrackingNo());
OrderExtInfoDto extInfoDTO = JSONObject.parseObject(orderByIdResponse.getData().getExtInfo(),OrderExtInfoDto.class);
extInfoDTO.setMemberLevel(extendInfo.getData().getMemberGrade()!=null?extendInfo.getData().getMemberGrade().getRuleName():"");
extInfoDTO.setPaidMember(CollectionUtils.isNotEmpty(extendInfo.getData().getMemberPaids()));
......@@ -341,8 +343,10 @@ public class OrderCenterSdkServiceImpl implements OrderCenterSdkService {
ErrorLog.printErrorLog("getMemberExtendInfoError",MEMBER_EXTEND_INFO,confirmOrderRequest,e);
}
com.freemud.application.sdk.api.ordercenter.response.BaseResponse<PaySuccessResp> response = orderSdkService.paySuccess(request, confirmOrderRequest.getTrackingNo());
//获取会员信息失败直接返回,非空判断
if(extendInfo.getData() == null){
return orderSdkAdapter.convent2PayAccessResponse(response);
}
......
......@@ -11,6 +11,7 @@ import com.freemud.sdk.api.assortment.shoppingcart.domain.CollagePartnerMember;
import com.freemud.sdk.api.assortment.shoppingcart.service.CollageOrderBaseService;
import com.freemud.sdk.api.assortment.shoppingcart.util.CartResponseUtil;
import com.freemud.sdk.api.assortment.shoppingcart.util.DateTimeUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
......@@ -58,15 +59,18 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
*/
@Override
public BaseResponse<CollageOrder> queryCollageOrder(CollageOrderDto collageOrderDto) {
CollageOrder collageOrder = null;
try {
// 通过商户ID、门店ID、用户ID组装拼单订单Redis缓存基本信息Key
String collageBaseHashKey = this.genCollageBaseHashKey(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId());
// 查询Redis缓存中拼单订单基础信息
CollageOrder collageOrder = this.getCollageBaseHash(collageBaseHashKey);
// 若按发起人维度查询不到,则按参与人维度查询
if (ObjectUtils.isEmpty(collageOrder)) {
// 仅支持两种查询场景
// 1、createCollageUserId存在,则只根据当前三要素查询,若无直接返回不存在
if (StringUtils.isNotBlank(collageOrderDto.getCreateCollageUserId())) {
// 通过商户ID、门店ID、用户ID组装拼单订单Redis缓存基本信息Key
String collageBaseHashKey = this.genCollageBaseHashKey(collageOrderDto.getPartnerId(), collageOrderDto.getStoreId(), collageOrderDto.getCreateCollageUserId());
// 查询Redis缓存中拼单订单基础信息
collageOrder = this.getCollageBaseHash(collageBaseHashKey);
}
// 2、createCollageUserId不存在,则只从当前商户拼单参与人信息列表中查询并返回,若商户级别拼单不存在,则提示拼单不存在
else {
String collagePartnerMemberHashKey = this.genCollagePartnerMemberHashKey(collageOrderDto.getPartnerId());
CollagePartnerMember collagePartnerMember = this.getCollagePartnerMember(collagePartnerMemberHashKey, collageOrderDto.getCurrentUserId());
......@@ -79,16 +83,13 @@ public class CollageOrderBaseServiceImpl implements CollageOrderBaseService {
return CartResponseUtil.error(CollageOrderConstant.COLLAGE_ORDER_NOT_EXIST);
} else {
// 从商户拼单参与人列表中获取信息再次查询拼单信息
collageBaseHashKey = this.genCollageBaseHashKey(collagePartnerMember.getPartnerId(), collagePartnerMember.getStoreId(), collagePartnerMember.getCreateCollageUserId());
String collageBaseHashKey = this.genCollageBaseHashKey(collagePartnerMember.getPartnerId(), collagePartnerMember.getStoreId(), collagePartnerMember.getCreateCollageUserId());
collageOrder = this.getCollageBaseHash(collageBaseHashKey);
// 若拼单订单信息依然不存在,则返回错误提示【拼单订单信息不存在】,由前端根据场景处理(静默、提示拼单已取消)
if (ObjectUtils.isEmpty(collageOrder)) {
return CartResponseUtil.error(CollageOrderConstant.COLLAGE_ORDER_NOT_EXIST);
}
}
}
if (ObjectUtils.isEmpty(collageOrder)) {
return CartResponseUtil.error(CollageOrderConstant.COLLAGE_ORDER_NOT_EXIST);
}
// 若拼单订单信息存在,则构造订单拼单对象并返回成功提示
return CartResponseUtil.success(collageOrder);
} catch (Exception e) {
......
......@@ -40,7 +40,7 @@
<dependency>
<groupId>cn.freemud</groupId>
<artifactId>assortment-ordercenter-sdk</artifactId>
<version>2.2.18-SNAPSHOT</version>
<version>2.2.20-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
......
......@@ -1220,8 +1220,9 @@ public class OrderAdapter {
responseVo.setOidBase64Image(oidBase64Image);
}
//设置是否是第三方配送单
if (ordersBean.getDeliverStatus() != null) {
if (ordersBean.getAddInfo() !=null && StringUtils.isNotEmpty(ordersBean.getAddInfo().getDeliveryId())&& !"0".equals(ordersBean.getAddInfo().getDeliveryId())) {
responseVo.setHasThirdDelivery(true);
responseVo.setDeliveryId(ordersBean.getAddInfo().getDeliveryId());
}
responseVo.setDeliveryStatus(ordersBean.getDeliverStatus());
responseVo.setQueueIndex(ordersBean.getQueueIndex());
......@@ -2827,6 +2828,10 @@ public class OrderAdapter {
}
orderPayDto.setProducts(productBeans);
orderPayDto.setPayCode(paymentRequest.getPayCode());
//抖音支付的payCode = 10066
if(OrderClientType.TIKTOKPAY.getIndex().toString().equalsIgnoreCase(orderBean.getOrderClient())){
orderPayDto.setPayCode(PayChannelType.TIKTOKPAY.getEbcode());
}
orderPayDto.setFoodOrderType(getFoodOrderType(orderBean.getOrderType()));
return orderPayDto;
}
......@@ -2928,6 +2933,15 @@ public class OrderAdapter {
payBean.setTimestamp(payOrderBean.getTimestamp());
payBean.setAliPayOrder(payOrderBean.getAliPayOrder());
responseDto.setPayOrder(payBean);
// coco 机场支付
try {
JSONObject jsonObject = JSONObject.parseObject(payOrderBean.getAliPayOrder());
responseDto.setSellerId(jsonObject.getString("sellerId"));
responseDto.setPayNotifyUrl(jsonObject.getString("payNotifyUrl"));
responseDto.setEbCode(jsonObject.getString("ebCode"));
}catch (Exception e){
}
}
responseDto.setStatusCode(unifiedOrderResponse.getStatusCode());
responseDto.setPayTransId(unifiedOrderResponse.getPayTransId());
......
......@@ -13,6 +13,8 @@
package cn.freemud.entities.dto.activity;
import cn.freemud.entities.vo.PayGiftCouponVo;
import cn.freemud.entities.vo.PayGiftGoodsConfigVo;
import cn.freemud.entities.vo.PayGiftMicroProgramConfigVo;
import cn.freemud.entities.vo.PayGiftWechatCouponInfoVo;
import lombok.Data;
......@@ -35,4 +37,34 @@ public class PayGiftCheckAndJoinResponseDto {
private String type;
private List<PayGiftCouponVo> coupons;
private PayGiftWechatCouponInfoVo wechatCouponInfo;
/**
* 奖励类型:1-非码券,2-微信商家券,3-弹窗奖励
*/
private String syncWechat;
/**
* 活动配图
*/
private String activityPicture;
/**
* 跳转设置(跳转类型) 0:无 5:跳转页面 10:外部小程序 15:跳转商品 20:跳转H5
*/
private String redirectType;
/**
* 跳转商品
*/
private PayGiftGoodsConfigVo goodsConfig;
/**
* 跳转小程序
*/
private PayGiftMicroProgramConfigVo microProgramConfig;
/**
* 跳转页面5和20跳转外部H5对应的路径或者URL
*/
private String redirectPage;
}
package cn.freemud.entities.vo;
import lombok.Data;
@Data
public class PayGiftGoodsConfigVo {
/**
* 跳转商品ID
*/
private String goodsId;
/**
* 跳转商品名称
*/
private String goodsName;
/**
* 跳转商品价格,单位分
*/
private Integer price;
}
package cn.freemud.entities.vo;
import lombok.Data;
@Data
public class PayGiftMicroProgramConfigVo {
/**
* 跳转小程序ID
*/
private String appId;
/**
* 跳转小程序跳转路径
*/
private String redirectUrl;
}
......@@ -314,7 +314,10 @@ public class QueryOrderResponseVo {
* 配送状态
*/
private Integer deliveryStatus;
/**
* 运单号
*/
private String deliveryId;
/**
* 骑手名称 商家自配送名称
*/
......@@ -371,6 +374,37 @@ public class QueryOrderResponseVo {
private List<PayGiftCouponVo> coupons;
private PayGiftWechatCouponInfoVo wechatCouponInfo;
/**
* 支付有礼奖励类型:1-非码券,2-微信商家券,3-弹窗奖励
*/
private String syncWechat;
/**
* 支付有礼活动配图
*/
private String activityPicture;
/**
* 支付有礼跳转设置(跳转类型) 0:无 5:跳转页面 10:外部小程序 15:跳转商品 20:跳转H5
*/
private String redirectType;
/**
* 支付有礼跳转商品
*/
private PayGiftGoodsConfigVo goodsConfig;
/**
* 支付有礼跳转小程序
*/
private PayGiftMicroProgramConfigVo microProgramConfig;
/**
* 支付有礼跳转页面5和20跳转外部H5对应的路径或者URL
*/
private String redirectPage;
/**
* 收件人省份
*/
......
......@@ -22,9 +22,7 @@ public enum OrderChannelType {
SAASMALL("saasmall", "微商城"),
APP("app", "APP"),
TOUTIAO("toutiao", "抖音小程序");;
APP("app", "APP");
private String code;
......
......@@ -307,6 +307,7 @@ public class OrderServiceImpl implements Orderservice {
@Autowired
private OrderRelationFactory orderRelationFactory;
@Override
public BaseResponse checkBeforeCreateOrder(CheckBeforeCreateOrderRequestVo requestVo) {
String trackingNo = LogTreadLocal.getTrackingNo();
......@@ -470,6 +471,7 @@ public class OrderServiceImpl implements Orderservice {
}
// 如果订单状态不是未支付,返回信息
if (!PayStatus.NOT_PAY.getCode().equals(orderBean.getPayStatus()) || !OrderStatus.WAIT_PAY.getCode().equals(orderBean.getStatus())) {
return sendPaySuccessNoticeMessage();
}
//若该订单使用了优惠券,则移除卡包,移除失败也不退款,现在支付成功个调用核销,无需调用此功能
......@@ -1300,6 +1302,12 @@ public class OrderServiceImpl implements Orderservice {
queryOrderResponseVo.setActivityName(payGiftResponse.getActivityName());
queryOrderResponseVo.setCoupons(payGiftResponse.getCoupons());
queryOrderResponseVo.setWechatCouponInfo(payGiftResponse.getWechatCouponInfo());
queryOrderResponseVo.setSyncWechat(payGiftResponse.getSyncWechat());
queryOrderResponseVo.setActivityPicture(payGiftResponse.getActivityPicture());
queryOrderResponseVo.setRedirectType(payGiftResponse.getRedirectType());
queryOrderResponseVo.setGoodsConfig(payGiftResponse.getGoodsConfig());
queryOrderResponseVo.setMicroProgramConfig(payGiftResponse.getMicroProgramConfig());
queryOrderResponseVo.setRedirectPage(payGiftResponse.getRedirectPage());
queryOrderResponseVo.setActivitySendType(payGiftResponse.getSendType());
}
}
......@@ -1809,18 +1817,14 @@ public class OrderServiceImpl implements Orderservice {
if (cocoPartnerId.contains(orderByIdResponseDto.getData().getCompanyId())) {
// COCO 即时单不可取消
if ( NewOrderType.GENERAL_SELF_PICKUP.getCode().equals(queryOrderByIdResponse.getData().getNewOrderType())) {
return ResponseUtil.error(ResponseResult.ORDER_CANCEL_ERROR);
return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND);
}
// 4,6 预约单
List<Integer> expectOrderType = Lists.newArrayList(
NewOrderType.RESERVED_EXPRESS.getCode(),
NewOrderType.RESERVED_SELF_PICKUP.getCode());
long time = DateUtil.addMinutes(new Date(), 15).getTime();
if (expectOrderType.contains(queryOrderByIdResponse.getData().getNewOrderType())
&& Objects.nonNull(orderBean.getGmtExpect())
&& time > orderBean.getGmtExpect()) {
return ResponseUtil.error(ResponseResult.ORDER_CANCEL_ERROR_EXPECT_TIME);
}
// 外卖单
List<Integer> takeOrderType = Lists.newArrayList(
NewOrderType.RESERVED_EXPRESS.getCode(),
......@@ -1831,6 +1835,18 @@ public class OrderServiceImpl implements Orderservice {
&& taskCancelOrderTime > queryOrderByIdResponse.getData().getEstimateDeliveryCompleteTime()) {
return ResponseUtil.error(ResponseResult.ORDER_CANCEL_ERROR_ESTIMATE_TIME);
}
if (expectOrderType.contains(queryOrderByIdResponse.getData().getNewOrderType())){
if (Objects.nonNull(orderBean.getGmtExpect())
&& time > orderBean.getGmtExpect()) {
return ResponseUtil.error(ResponseResult.ORDER_CANCEL_ERROR_EXPECT_TIME);
}
// todo coco 预约单直接退款
BaseResponse baseResponse = partnerNoTakeOrder(orderRefundVo, orderBean, orderId, AfterSalesType.USER_CANCEL, true);
if (baseResponse != null) {
return baseResponse;
}
}
}
/**
......@@ -2447,8 +2463,8 @@ public class OrderServiceImpl implements Orderservice {
orderClient = OrderClientType.APP;
}
//抖音小程序
if(OrderChannelType.TOUTIAO.getCode().equals(createOrderVo.getChannelType())) {
orderClient = OrderClientType.TOUTIAO;
if(PayChannelType.TIKTOKPAY.getIndex().equals(createOrderVo.getPayChannelType())) {
orderClient = OrderClientType.TIKTOKPAY;
}
long totalAmount = 0;
int cardAmount = 0;
......
......@@ -27,7 +27,7 @@ public interface OrderRelationService {
/**
* 创建订单的时间检查
* 订单详情编辑
* @param
*/
void queryOrdrBuild(QueryOrderResponseVo queryOrderResponseVo,QueryOrderByIdResponse response);
......
......@@ -17,17 +17,22 @@ import cn.freemud.entities.dto.order.BusinessDate;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.ProductVo;
import cn.freemud.entities.vo.QueryOrderResponseVo;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.CreateOrderType;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.impl.CheckOrder;
import cn.freemud.service.order.OrderRelationService;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderSendCouponResp;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
import com.freemud.sdk.api.assortment.order.enums.OldOrderAccountType;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrderByIdResponse;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import io.swagger.models.auth.In;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -101,6 +106,12 @@ public class CocoOrderRelationServiceImpl implements OrderRelationService {
queryOrderResponseVo.setChooseGoods(chooseGoods);
}
Map<String,QueryOrdersResponse.DataBean.OrderBean.ProductBean> productMap = new HashMap<>();
List<QueryOrdersResponse.DataBean.OrderBean.ProductBean> productList = response.getData().getProductList();
if(productList != null && !productList.isEmpty()){
productMap = productList.stream().collect(Collectors.toMap(QueryOrdersResponse.DataBean.OrderBean.ProductBean::getCartGoodsUid, g -> g,(k1,k2)->k1));
}
// 赠品合并到主商品
List<ProductVo> products = queryOrderResponseVo.getProducts();
......@@ -119,13 +130,35 @@ public class CocoOrderRelationServiceImpl implements OrderRelationService {
}
if(null != masterProducts && !masterProducts.isEmpty()){
masterProducts.forEach(product -> {
for(ProductVo product : masterProducts){
Integer giftQty = giftMap.get(product.getCid()) == null ? 0 : giftMap.get(product.getCid());
product.setQty(product.getQty() + giftQty);
});
// 如果商品参加了第二件半价活动,要把该行拆成数量为1的多行
QueryOrdersResponse.DataBean.OrderBean.ProductBean productBean = productMap.get(product.getCid());
if(productBean == null || productBean.getDiscountList() == null || productBean.getDiscountList().isEmpty()){
continue;
}
boolean halfFlag = false;
List<QueryOrdersResponse.DataBean.OrderBean.ProductBean.ProductDiscount> discountList = productBean.getDiscountList();
for(QueryOrdersResponse.DataBean.OrderBean.ProductBean.ProductDiscount productDiscount : discountList){
if(ObjectUtils.equals(productDiscount.getDiscountType(), 20)){
halfFlag = true;
break;
}
}
if(halfFlag){
Integer num = product.getQty();
for(int i = 0 ; i < num-1 ; i++){
ProductVo newProduct = JSONObject.parseObject(JSONObject.toJSONString(product),ProductVo.class);
newProduct.setQty(1);
}
product.setQty(1);
}
}
}
queryOrderResponseVo.setProducts(masterProducts);
}
}
package cn.freemud.amp.service;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Setter
@Getter
public class AuditScoreAccount {
/**
* 账本主键ID
*/
private String accountId;
private String partnerId;
private String memberId;
/**
* 账本状态{1可使用 2已使用}
*/
private Integer accountStatus;
/**
* 源积分值
*/
private Integer originScore;
/**
* 剩余积分值
*/
private Integer leftScore;
/**
* 到日日期{格式:yyyy-MM-dd}
*/
private String expireDate;
/*
所属机构类型{1总公司2分公司3门店}
*/
private Integer orgType;
/**
* 所属机构编码
*/
private String orgCode;
/**
* 所属机构类型{1总公司2分公司3门店}
*/
private Integer belongOrgType;
/**
* 所属机构编码
*/
private String belongOrgCode;
private Date createTime;
private Date updateTime;
/**
* 是否删除{0表示否 1表示是}
*/
private Integer isDel;
@Override
public String toString() {
return this.accountId;
}
}
\ No newline at end of file
package cn.freemud.amp.service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SortTest {
public static void main(String[] args) {
List<AuditScoreAccount> list = new ArrayList<AuditScoreAccount>();
//创建3个学生对象,年龄分别是20、19、21,并将他们依次放入List中
AuditScoreAccount s1 = new AuditScoreAccount();
s1.setExpireDate("2020-01-02");
s1.setAccountId("1");
AuditScoreAccount s2 = new AuditScoreAccount();
s2.setExpireDate("2020-04-03");
s2.setAccountId("2");
AuditScoreAccount s3 = new AuditScoreAccount();
s3.setExpireDate("2020-03-01");
s3.setAccountId("3");
AuditScoreAccount s5 = new AuditScoreAccount();
list.add(s5);
list.add(s1);
list.add(s2);
list.add(s3);
System.out.println("排序前:"+list);
List<String> stringList = new ArrayList<>();
stringList.add("3");
stringList.add("2");
Collections.sort(list, new Comparator<AuditScoreAccount>(){
/*
* int compare(Student o1, Student o2) 返回一个基本类型的整型,
* 返回负数表示:o1 小于o2,
* 返回0 表示:o1和o2相等,
* 返回正数表示:o1大于o2。
*/
public int compare(AuditScoreAccount o1, AuditScoreAccount o2) {
if(stringList.contains(o2.getAccountId())){
return 1;
}
if(stringList.contains(o1.getAccountId())){
return -1;
}
if(o2.getExpireDate() ==null){
return -1;
}
if(o1.getExpireDate() ==null){
return 1;
}
return o1.getExpireDate().compareTo(o2.getExpireDate());
}
});
System.out.println("排序后:"+list);
}
}
......@@ -65,7 +65,7 @@
<dependency>
<groupId>cn.freemud</groupId>
<artifactId>assortment-ordercenter-sdk</artifactId>
<version>2.2.15-SNAPSHOT</version>
<version>2.2.20-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
......
......@@ -8,7 +8,7 @@
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<version>1.7.3-SNAPSHOT</version>
<version>1.7.5-SNAPSHOT</version>
<artifactId>ordercenter-sdk</artifactId>
<dependencies>
......
......@@ -90,4 +90,5 @@
| 1.3.21.RELEASE | 混支付 | 徐康 | 2020-11-26 |
| 1.7.3-SNAPSHOT| 抖音支付新增抖音单号和openId | 张志恒 | 2020-12-4 |
| 1.3.22.RELEASE | 农工商撤单 | 张志恒 | 2020-12-07 |
| 1.7.5-SNAPSHOT| 抖音支付 | 张志恒 | 2020-12-11 |
......@@ -36,7 +36,7 @@ public enum OrderClientType {
SAASMALL(23, "微商城"),
DPZHCT(24, "美团点评智慧餐厅"),
FMWD(25, "非码微店"),
TOUTIAO(27, "抖音小程序"),
TIKTOKPAY(27, "抖音小程序"),
PARKING(99 , "农工商停车"),
FU_YOU(100 , "富有"),
;
......
......@@ -12,7 +12,8 @@ public enum PayChannelType {
SVC((byte)3,"10102","储值卡"),
COMB((byte)4,"10212","混合支付"),
USVCP((byte)5,"10556", "电子风味卡支付"),
ZERO((byte)6,"100000", "0元支付");
ZERO((byte)6,"100000", "0元支付"),
TIKTOKPAY((byte)7,"10066", "抖音支付");
private Byte index;
private String ebcode;
......
......@@ -31,5 +31,5 @@ public class OrderSendCouponReq {
/**
* 买一赠一寄件信息
*/
private List<OrderSendCouponUpdateReq> chooseGoods;
private List<OrderSendCouponUpdateReq> orderSendCouponRespList;
}
......@@ -3,6 +3,7 @@ package com.freemud.application.sdk.api.ordercenter.service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.freemud.application.sdk.api.base.BaseRequest;
import com.freemud.application.sdk.api.log.ApiLog;
import com.freemud.application.sdk.api.ordercenter.config.OrderCenterProperties;
import com.freemud.application.sdk.api.ordercenter.constant.InterfaceAddressConstant;
import com.freemud.application.sdk.api.ordercenter.constant.ResponseConstant;
......
......@@ -103,6 +103,7 @@ public class ShoppingCartConvertAdapter {
cartGoodsDetailDto.setOpenId(cartGoods.getOpenId());
cartGoodsDetailDto.setUserName(cartGoods.getUserName());
cartGoodsDetailDto.setPhotoUrl(cartGoods.getPhotoUrl());
cartGoodsDetailDto.setPackPrice(cartGoods.getPackPrice());
cartGoodsDetailDto.setSalePrice(cartGoods.getOriginalPrice());
cartGoodsDetailDto.setPicture(cartGoods.getPic());
cartGoodsDetailDto.setQty(cartGoods.getQty());
......@@ -384,9 +385,13 @@ public class ShoppingCartConvertAdapter {
cartGoods.setCreateTimeMili(cartGood.getCreateTimeMili());
cartGoods.setSkuName(cartGood.getSkuName());
cartGoods.setSkuName(cartGood.getSkuName());
cartGood.setClassificationId(cartGood.getClassificationId());
cartGood.setClassificationName(cartGood.getClassificationName());
cartGoods.setClassificationId(cartGood.getClassificationId());
cartGoods.setClassificationName(cartGood.getClassificationName());
cartGoods.setActivityType(ActivityTypeEnum.TYPE_61.getCode());
cartGoods.setUserId(cartGood.getUserId());
cartGoods.setUserName(cartGood.getUserName());
cartGoods.setOpenId(cartGood.getOpenId());
cartGoods.setPhotoUrl(cartGood.getPhotoUrl());
return cartGoods;
}
......
......@@ -24,9 +24,6 @@ public class CollageOrderRequestVo {
@NotEmpty(message = "sessionId不能为空")
private String sessionId;
@ApiModelProperty(value = "当前操作人用户ID")
private String currentUserId;
@ApiModelProperty(value = "拼单创建人用户ID")
private String createCollageUserId;
......
......@@ -36,4 +36,10 @@ public class ShoppingCartClearRequestVo extends BaseRequestVo {
* 拼单发起人userId(拼单)
*/
private String createCollageUserId;
/**
* 收货地址ID、svc卡支付外卖订单必传
*/
private String receiveId;
}
......@@ -171,7 +171,7 @@ public class BuyAndGiftsPromotionService implements IPromotionService {
long count = cartGoodsList.stream().filter(c -> c.getSpuId().equals(cartGoods.getSpuId())).count();
//购物车内存在同类
if (count>0) {
CartGoods find = cartGoodsList.stream().filter(c -> c.getCartGoodsUid().equals(cartGoods.getOriginalGoodsUid())).findFirst().orElseGet(null);
CartGoods find = cartGoodsList.stream().filter(c -> c.getCartGoodsUid().equals(cartGoods.getOriginalGoodsUid())).findFirst().orElse(null);
if (null == find) {
find = cartGoodsList.stream().filter(c -> c.getSpuId().equals(cartGoods.getSpuId())).findFirst().get();
}
......
......@@ -58,18 +58,19 @@ public class CollageOrderServiceImpl implements CollageOrderService {
@Override
public BaseResponse queryCollageOrder(CollageOrderRequestVo request) {
CollageOrderDto collageOrderDto = this.collageOrderAdapter.convert2CollageOrderDto(request);
// 查询时需传入拼单创建人的userId,若上送字段为空时,默认查询当前登录人自己的拼单信息
String currentUserId = StringUtils.isNotBlank(request.getCurrentUserId()) ? request.getCurrentUserId() : this.getUserIdBySessionId(request.getSessionId());
CustomerInfoVo userInfo = this.getUserInfo(request.getSessionId());
String currentUserId = userInfo.getMemberId();
// 当前登录人userId
collageOrderDto.setCurrentUserId(currentUserId);
// 若拼单发起人ID为空,则默认按当前用户查询
if (StringUtils.isEmpty(request.getCreateCollageUserId())) {
collageOrderDto.setCreateCollageUserId(currentUserId);
}
BaseResponse<CollageOrder> queryCollageOrderResponse = this.collageOrderBaseService.queryCollageOrder(collageOrderDto);
CollageOrder collageOrder = queryCollageOrderResponse.getResult();
// SDK查询订单返回非成功code或返回结果订单信息为空时,返回前端异常信息
Optional.ofNullable(queryCollageOrderResponse).filter(resp -> (ResponseResult.SUCCESS.getCode().equals(resp.getCode()) && !ObjectUtils.isEmpty(collageOrder))).orElseThrow(() -> new ServiceException(ResponseResult.COLLAGE_NOT_EXIST));
if (null == collageOrder) {
return ResponseUtil.error(ResponseResult.COLLAGE_NOT_EXIST);
}
// 现在改为同时可查询自己发起以及参与的拼单所以查询到拼单信息后,后续查询需要使用拼单hash的三要素信息继续查询
collageOrderDto.setPartnerId(collageOrder.getPartnerId());
......
......@@ -720,6 +720,10 @@ public class ShoppingCartCollageServiceImpl extends AbstractShoppingCartImpl imp
*/
private void updatePackPrice(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, ShoppingCartGoodsDto shoppingCartGoodsDto) {
if (shoppingCartGoodsResponseVo != null && shoppingCartGoodsResponseVo.getProducts() != null && shoppingCartGoodsDto != null && shoppingCartGoodsDto.getProducts() != null) {
if (shoppingCartGoodsResponseVo.getNewPackAmount() == null || shoppingCartGoodsResponseVo.getNewPackAmount() == 0) {
// 当整单包装费为0时,不计算购物车行包装费
return;
}
shoppingCartGoodsResponseVo.getProducts().stream().forEach(product -> {
shoppingCartGoodsDto.getProducts().stream().forEach(goods -> {
if (goods.getCartGoodsUid().equals(product.getCartGoodsUid())) {
......
......@@ -745,6 +745,10 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
shoppingCartGoodsResponseVo.setActivityTip(activityTip);
shoppingCartGoodsResponseVo.setProducts(new ArrayList<>());
shoppingCartGoodsResponseVo.setProductsCount(0);
ShoppingCartRelationService shoppingCartRelationService = shoppingCartRelationFactory.cleanAfter(shoppingCartClearRequestVo.getPartnerId());
shoppingCartRelationService.cleanAfter(shoppingCartGoodsResponseVo,shoppingCartClearRequestVo);
return ResponseUtil.success(shoppingCartGoodsResponseVo);
}
......@@ -1538,6 +1542,19 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
cartGoods.setPic(productBeanListSpuClass.get(0).getPicture());
cartGoods.setWeight(productBeanListSpuClass.get(0).getWeight());
cartGoods.setUnit(productBeanListSpuClass.get(0).getUnit());
boolean stockLimit = false;
if (productBeanListSpuClass.get(0).getType() == ProductType.NOSPEC.getCode()
&& productBeanListSpuClass.get(0).getStockLimit() == 1) {
stockLimit = true;
} else {
for (ProductBeanDTO.SkuProductBean skuProductBean : productBeanListSpuClass.get(0).getSkuList()) {
if (spuId2.equals(skuProductBean.getSkuId()) && skuProductBean.getStockLimit() == 1) {
stockLimit = true;
break;
}
}
}
cartGoods.setStockLimit(stockLimit);
List<String> goodsIds = allCartGoodsList.parallelStream().map(CartGoods::getGoodsId).collect(Collectors.toList());
boolean hasSpecialGoods = hasSpecialGoods(addShoppingCartGoodsRequestVo.getPartnerId(), addShoppingCartGoodsRequestVo.getShopId(), userId, addShoppingCartGoodsRequestVo.getAppId(), goodsIds, addShoppingCartGoodsRequestVo.getOrderType());
......@@ -1877,7 +1894,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
return calculationDiscountResult;
}
private Long calculateDeliveryAmount(String receiveId, String partnerId, String storeId, String wxappid, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,Integer orderType) {
public Long calculateDeliveryAmount(String receiveId, String partnerId, String storeId, String wxappid, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,Integer orderType) {
Long deliveryAmount = 0L;
// 如果订单的收获地址为空,且订单是外卖单,返回运费
// 主要是为了兼容coco不传收获地址,需要获取固定运费的情况
......@@ -2208,7 +2225,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
}
CalculationSharingDiscountRequestDto.CalculationDiscountCoupon coupon = new CalculationSharingDiscountRequestDto.CalculationDiscountCoupon();
coupon.setCode(cp.getCouponCode());
coupon.setActivityCode(cp.getCouponCode());
coupon.setActivityCode(cp.getActivityCode());
coupon.setUseIndex(cp.getIndex() == null ? x + oldCoupons.size(): cp.getIndex() + oldCoupons.size());
oldCoupons.add(coupon);
}
......
......@@ -10,6 +10,7 @@ import cn.freemud.entities.dto.shoppingCart.SendPoint;
import cn.freemud.entities.vo.CartGoods;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
import cn.freemud.enums.*;
import cn.freemud.interceptor.BizServiceException;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.CommonService;
import cn.freemud.service.CouponService;
......@@ -200,7 +201,7 @@ public class CalculationSharingDiscountService {
// 这个是专门给coco使用的券验证错误的异常,message要抛出去
if(sharingDiscountResponseDto != null && StringUtils.equals(sharingDiscountResponseDto.getStatusCode(), ResponseCodeConstant.COCO_RESPONSE_COUPON_ERR_STR)){
throw new ServiceException(ResponseResult.COCO_COUPON_VALIDATOR_FAIL,sharingDiscountResponseDto.getMsg());
throw new BizServiceException(ResponseResult.COCO_COUPON_VALIDATOR_FAIL,sharingDiscountResponseDto.getMsg());
}
// 支付宝华莱士紧急修改代码,当促销返回103错误码时,需要报券不适用于该门店,且清空购物车
......
......@@ -20,4 +20,11 @@ public interface ShoppingCartRelationFactory {
*/
ShoppingCartRelationService getBuildShoppingCartGoodsResponseService(String partnerId);
/**
* 获取购物车清空后的操作实现
* @param partnerId
* @return
*/
ShoppingCartRelationService cleanAfter(String partnerId);
}
......@@ -13,6 +13,7 @@
package cn.freemud.service.shoppingCart;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.vo.ShoppingCartClearRequestVo;
import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
public interface ShoppingCartRelationService {
......@@ -24,5 +25,10 @@ public interface ShoppingCartRelationService {
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult,
Integer flag);
/**
* 购物车清空后的扩展操作
*/
void cleanAfter(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, ShoppingCartClearRequestVo shoppingCartClearRequestVo);
}
......@@ -13,6 +13,7 @@
package cn.freemud.service.shoppingCart.impl;
import cn.freemud.entities.dto.calculate.CalculationSharingDiscountResponseDto;
import cn.freemud.entities.vo.ShoppingCartClearRequestVo;
import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
import cn.freemud.service.shoppingCart.ShoppingCartRelationService;
import org.springframework.stereotype.Service;
......@@ -26,4 +27,9 @@ public class PlatformShoppingCartRelationServiceImpl implements ShoppingCartRela
Integer flag) {
}
@Override
public void cleanAfter(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo, ShoppingCartClearRequestVo shoppingCartClearRequestVo) {
}
}
......@@ -54,4 +54,13 @@ public class ShoppingCartRelationFactoryImpl implements ShoppingCartRelationFact
}
}
@Override
public ShoppingCartRelationService cleanAfter(String partnerId) {
if(cocoPartnerId.contains(partnerId)){
return cocoShoppingCartRelationService;
}else{
return platformShoppingCartRelationService;
}
}
}
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