Commit a89fa266 by dingkai

Merge branch 'feature/mall-20191211-dingkai' into feature/1.9.13-mall-20200219-dingkai

# Conflicts:
#	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/BaseCreateOrderRequest.java
#	assortment-shoppingcart-sdk/assortment-shoppingcart-sdk.iml
#	assortment-shoppingcart-sdk/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/adapter/ShoppingCartAdapter.java
#	order-application-service/src/main/java/cn/freemud/controller/OrderController.java
#	order-application-service/src/main/java/cn/freemud/entities/vo/CreateOrderVo.java
#	order-application-service/src/main/java/cn/freemud/entities/vo/ShoppingCartInfoRequestVo.java
#	order-application-service/src/main/java/cn/freemud/enums/OrderSourceType.java
#	order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
#	shopping-cart-application-service/src/main/java/cn/freemud/entities/vo/ShoppingCartInfoRequestVo.java
parents 1f44bb62 d8a7be79
...@@ -137,6 +137,9 @@ public class OrderSdkAdapter { ...@@ -137,6 +137,9 @@ public class OrderSdkAdapter {
deliveryContactInfoCreateReq.setLatitude(StringUtils.isBlank(requestVO.getLatitude()) ? null : new BigDecimal(requestVO.getLatitude())); deliveryContactInfoCreateReq.setLatitude(StringUtils.isBlank(requestVO.getLatitude()) ? null : new BigDecimal(requestVO.getLatitude()));
deliveryContactInfoCreateReq.setLongitude(StringUtils.isBlank(requestVO.getLongitude()) ? null : new BigDecimal(requestVO.getLongitude())); deliveryContactInfoCreateReq.setLongitude(StringUtils.isBlank(requestVO.getLongitude()) ? null : new BigDecimal(requestVO.getLongitude()));
deliveryContactInfoCreateReq.setAddressDetail(requestVO.getAddress()); deliveryContactInfoCreateReq.setAddressDetail(requestVO.getAddress());
deliveryContactInfoCreateReq.setProvince(requestVO.getProvince());
deliveryContactInfoCreateReq.setCity(requestVO.getCity());
deliveryContactInfoCreateReq.setRegion(requestVO.getRegion());
deliveryContactInfoList.add(deliveryContactInfoCreateReq); deliveryContactInfoList.add(deliveryContactInfoCreateReq);
//第三方配送信息 //第三方配送信息
getThirdDeliveryInfo(deliveryContactInfoList, requestVO.getAddInfo()); getThirdDeliveryInfo(deliveryContactInfoList, requestVO.getAddInfo());
...@@ -151,6 +154,9 @@ public class OrderSdkAdapter { ...@@ -151,6 +154,9 @@ public class OrderSdkAdapter {
request.setExtInfo(JSONObject.toJSONString(requestVO.getOtherInfo())); request.setExtInfo(JSONObject.toJSONString(requestVO.getOtherInfo()));
} }
//订单重量
Double orderWeight = sumOrderWeight(requestVO.getProducts());
request.setWeight(orderWeight);
return request; return request;
} }
...@@ -380,6 +386,9 @@ public class OrderSdkAdapter { ...@@ -380,6 +386,9 @@ public class OrderSdkAdapter {
if ("meals".equals(queryOrdersRequest.getSource()[i])) { if ("meals".equals(queryOrdersRequest.getSource()[i])) {
orderClients.add(OrderClientType.WAI_MEAL.getIndex()); orderClients.add(OrderClientType.WAI_MEAL.getIndex());
} }
if ("saasmall".equals(queryOrdersRequest.getSource()[i])) {
orderClients.add(OrderClientType.SAASMALL.getIndex());
}
} }
orderClients.add(OrderClientType.ALIPAY.getIndex()); orderClients.add(OrderClientType.ALIPAY.getIndex());
orderConditionsReq.setOrderClients(orderClients); orderConditionsReq.setOrderClients(orderClients);
...@@ -778,6 +787,9 @@ public class OrderSdkAdapter { ...@@ -778,6 +787,9 @@ public class OrderSdkAdapter {
for (DeliveryContactInfoResp deliveryContactInfoResp : orderInfoReqs.getDeliveryContactInfoList()) { for (DeliveryContactInfoResp deliveryContactInfoResp : orderInfoReqs.getDeliveryContactInfoList()) {
//地址类型 1:订单地址 2:售后单地址 3:配送员信息 //地址类型 1:订单地址 2:售后单地址 3:配送员信息
if (deliveryContactInfoResp.getRelateObjectType() == 1) { if (deliveryContactInfoResp.getRelateObjectType() == 1) {
data.setReceiveProvince(orderInfoReqs.getDeliveryContactInfoList().get(0).getProvince());
data.setReceiveCity(orderInfoReqs.getDeliveryContactInfoList().get(0).getCity());
data.setReceiveRegion(orderInfoReqs.getDeliveryContactInfoList().get(0).getRegion());
data.setAddress(orderInfoReqs.getDeliveryContactInfoList().get(0).getAddressDetail()); data.setAddress(orderInfoReqs.getDeliveryContactInfoList().get(0).getAddressDetail());
data.setPhone(orderInfoReqs.getDeliveryContactInfoList().get(0).getMobile()); data.setPhone(orderInfoReqs.getDeliveryContactInfoList().get(0).getMobile());
if (orderInfoReqs.getDeliveryContactInfoList().get(0).getLatitude() != null if (orderInfoReqs.getDeliveryContactInfoList().get(0).getLatitude() != null
...@@ -876,6 +888,8 @@ public class OrderSdkAdapter { ...@@ -876,6 +888,8 @@ public class OrderSdkAdapter {
data.setAbnormalDesc(orderInfoReqs.getAbnormalDesc()); data.setAbnormalDesc(orderInfoReqs.getAbnormalDesc());
data.setAbnormalState(orderInfoReqs.getAbnormalState()); data.setAbnormalState(orderInfoReqs.getAbnormalState());
data.setWeight(orderInfoReqs.getWeight());
List<QueryOrdersResponse.DataBean.OrderBean.ProductBean> productList = getOldOrderProductList(orderInfoReqs.getOrderSettlementDetailList(), orderInfoReqs.getOrderItemList()); List<QueryOrdersResponse.DataBean.OrderBean.ProductBean> productList = getOldOrderProductList(orderInfoReqs.getOrderSettlementDetailList(), orderInfoReqs.getOrderItemList());
data.setProductList(productList); data.setProductList(productList);
...@@ -1156,6 +1170,9 @@ public class OrderSdkAdapter { ...@@ -1156,6 +1170,9 @@ public class OrderSdkAdapter {
case "meal": case "meal":
orderClientType = 19; orderClientType = 19;
break; break;
case "saasmall":
orderClientType = 23;
break;
default: default:
orderClientType = OrderClientType.SAAS.getIndex(); orderClientType = OrderClientType.SAAS.getIndex();
break; break;
...@@ -1196,6 +1213,9 @@ public class OrderSdkAdapter { ...@@ -1196,6 +1213,9 @@ public class OrderSdkAdapter {
case 19: case 19:
name = "meals"; name = "meals";
break; break;
case 23:
name = "saasmall";
break;
default: default:
name = orderClientType.toString(); name = orderClientType.toString();
break; break;
...@@ -1231,6 +1251,9 @@ public class OrderSdkAdapter { ...@@ -1231,6 +1251,9 @@ public class OrderSdkAdapter {
case 19: case 19:
name = "saas 围餐"; name = "saas 围餐";
break; break;
case 23:
name = "saas 商城";
break;
default: default:
break; break;
} }
...@@ -2698,4 +2721,36 @@ public class OrderSdkAdapter { ...@@ -2698,4 +2721,36 @@ public class OrderSdkAdapter {
return name; return name;
} }
/**
* 计算所有商品的重量 单位g
* 称重菜的重量单位是斤
*/
private Double sumOrderWeight(List<CreateOrderProductRequest> products) {
Double totalWeight = 0D;
if (CollectionUtils.isEmpty(products)) {
return totalWeight;
}
for (CreateOrderProductRequest productRequest : products) {
if (ObjectUtils.equals(ProductTypeEnum.SETMEAL_PRODUCT.getCode(), productRequest.getProductType()) || ObjectUtils.equals(ProductTypeEnum.SETMEAL_UPPRICE_PRODUCT.getCode(), productRequest.getProductType())) {
if (CollectionUtils.isNotEmpty(productRequest.getComboProduct())) {
Double comboProductTotalWeight = productRequest.getComboProduct().stream().map(t -> {
Double productWeight = t.getWeight() == null ? 0D : t.getWeight();
if (ProductTypeEnum.WEIGHT_PRODUCT.getCode().equals(t.getProductType())) {
productWeight = productWeight * 500;
}
return productWeight;
}).reduce(0D, Double::sum);
totalWeight += comboProductTotalWeight;
}
} else {
Double productWeight = productRequest.getWeight() == null ? 0D : productRequest.getWeight();
if (ProductTypeEnum.WEIGHT_PRODUCT.getCode().equals(productRequest.getProductType())) {
productWeight = productWeight * 500;
}
totalWeight += productWeight;
}
}
return totalWeight;
}
} }
...@@ -32,7 +32,10 @@ public enum OrderSourceType { ...@@ -32,7 +32,10 @@ public enum OrderSourceType {
POS("pos", "线下 POS"), POS("pos", "线下 POS"),
MEAL("meal", "i围餐"); MEAL("meal", "i围餐"),
SAASMALL("saasmall", "微商城"),
;
private String code; private String code;
......
...@@ -143,6 +143,21 @@ public class BaseCreateOrderRequest extends BaseConfig { ...@@ -143,6 +143,21 @@ public class BaseCreateOrderRequest extends BaseConfig {
*/ */
private String menuType; private String menuType;
/**
* 省
*/
private String province;
/**
* 城市
*/
private String city;
/**
* 区
*/
private String region;
@Data @Data
public static class DeliveryTypeInfo { public static class DeliveryTypeInfo {
/** /**
......
...@@ -303,6 +303,27 @@ public class QueryOrdersResponse { ...@@ -303,6 +303,27 @@ public class QueryOrdersResponse {
*/ */
private Integer dinersNumber; private Integer dinersNumber;
/**
* 收件人省份
*/
private String receiveProvince;
/**
* 收件人城市
*/
private String receiveCity;
/**
* 收件人区
*/
private String receiveRegion;
/**
* 订单重量
*/
private BigDecimal weight;
@NoArgsConstructor @NoArgsConstructor
@Data @Data
public static class AddDeliveryInfo { public static class AddDeliveryInfo {
......
...@@ -242,6 +242,7 @@ public class ShoppingCartAdapter { ...@@ -242,6 +242,7 @@ public class ShoppingCartAdapter {
cartGoods.setAmount(newOrigOriginalPrice * cartGoods.getQty()); cartGoods.setAmount(newOrigOriginalPrice * cartGoods.getQty());
//咨询商品服务,套餐售价取originalPrice //咨询商品服务,套餐售价取originalPrice
cartGoods.setFinalPrice(isSetMealProduct ? productBean.getOriginalPrice() : productBean.getFinalPrice()); cartGoods.setFinalPrice(isSetMealProduct ? productBean.getOriginalPrice() : productBean.getFinalPrice());
cartGoods.setWeight(productBean.getWeight());
cartGoods.setUnit(productBean.getUnit()); cartGoods.setUnit(productBean.getUnit());
cartGoods.setWeightType(CommonsConstant.WEIGHT_PRODUCT.equals(productBean.getWeightType())); cartGoods.setWeightType(CommonsConstant.WEIGHT_PRODUCT.equals(productBean.getWeightType()));
} }
...@@ -359,6 +360,7 @@ public class ShoppingCartAdapter { ...@@ -359,6 +360,7 @@ public class ShoppingCartAdapter {
comboxGoods.setCustomerCode(productBean.getCustomerCode()); comboxGoods.setCustomerCode(productBean.getCustomerCode());
comboxGoods.setFinalPrice(finalPrice); comboxGoods.setFinalPrice(finalPrice);
comboxGoods.setWeightType(CommonsConstant.WEIGHT_PRODUCT.equals(productBean.getWeightType())); comboxGoods.setWeightType(CommonsConstant.WEIGHT_PRODUCT.equals(productBean.getWeightType()));
comboxGoods.setWeight(productBean.getWeight());
comboxGoods.setUnit(productBean.getUnit()); comboxGoods.setUnit(productBean.getUnit());
return true; return true;
} }
......
...@@ -58,4 +58,19 @@ public class RedisKeyConstant { ...@@ -58,4 +58,19 @@ public class RedisKeyConstant {
*/ */
public final static String MEAL_CART_LOCK_KEY = "kgd:meal:lock:{0}:{1}:{2}"; public final static String MEAL_CART_LOCK_KEY = "kgd:meal:lock:{0}:{1}:{2}";
/**
* 用户购物车在redis的key前缀(商城购物车)
*/
public final static String SAAS_MALL_SHOPPINGCART_KEY_PREFIX = "saas:user:info:saasmall:cart:goods:";
/**
* 用户购物车总价在redis的key前缀(商城购物车)
*/
public final static String SAAS_MALL_SHOPPINGCART_AMOUNT_PREFIX = "saas:user:info:saasmall:cart:amount:goods:";
/**
* 点餐门店绑定的商城门店redis的key前缀
*/
public final static String OPENSTORE_MICROMALL_BIND_STOREID_PREFIX = "openstore:micromall:bind:storeId:";
} }
...@@ -38,6 +38,10 @@ public class CartGoods { ...@@ -38,6 +38,10 @@ public class CartGoods {
*/ */
private boolean weightType; private boolean weightType;
/** /**
* 重量
*/
private Double weight;
/**
* 单位 * 单位
*/ */
private String unit; private String unit;
...@@ -217,6 +221,10 @@ public class CartGoods { ...@@ -217,6 +221,10 @@ public class CartGoods {
*/ */
private boolean weightType; private boolean weightType;
/** /**
* 重量
*/
private Double weight;
/**
* 单位 * 单位
*/ */
private String unit; private String unit;
......
package com.freemud.sdk.api.assortment.shoppingcart.service.impl;
import ch.qos.logback.classic.Level;
import cn.freemud.base.entity.BaseResponse;
import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CartResponseConstant;
import com.freemud.sdk.api.assortment.shoppingcart.constant.RedisKeyConstant;
import com.freemud.sdk.api.assortment.shoppingcart.constant.VersionUtils;
import com.freemud.sdk.api.assortment.shoppingcart.domain.CartAddItem;
import com.freemud.sdk.api.assortment.shoppingcart.domain.CartGoods;
import com.freemud.sdk.api.assortment.shoppingcart.domain.CartParamDto;
import com.freemud.sdk.api.assortment.shoppingcart.service.ShoppingCartBaseService;
import com.freemud.sdk.api.assortment.shoppingcart.util.CartResponseUtil;
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.BoundHashOperations;
import org.springframework.data.redis.core.BoundValueOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: ShoppingCartBaseServiceImpl
* @Package com.freemud.sdk.api.assortment.shoppingcart.service.impl
* @Description:
* @author: yuhao.chi
* @date: 2019/4/10 15:30
* @Copyright: 2019 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目的
*/
@Service("shoppingCartMallBaseService")
public class ShoppingCartMallBaseServiceImpl implements ShoppingCartBaseService {
@Autowired
private RedisTemplate redisTemplate;
@Value("${coupon.app.id}")
private String appId;
@Override
public BaseResponse<List<CartAddItem>> detailCart(CartParamDto cartParamDto, String trackingNo) {
return null;
}
@Override
public BaseResponse<List<CartGoods>> getCartGoodsList(CartParamDto cartParamDto, String trackingNo) {
try {
String redisKey = getShoppingCartGoodsKey(cartParamDto);
BoundHashOperations<String, String, CartGoods> operations = redisTemplate.boundHashOps(redisKey);
List<CartGoods> cartGoodsList = operations.values();
//对创建时间进行排序
cartGoodsList.sort(Comparator.comparingLong(CartGoods::getCreateTimeMili));
return CartResponseUtil.success(cartGoodsList);
} catch (Exception e) {
ErrorLog.printErrorLog("assortment-shoppingcart-sdk", trackingNo, e.getMessage(), "getCartGoodsList", cartParamDto, e, Level.ERROR);
return null;
}
}
@Override
public BaseResponse<List<CartGoods>> setCartGoodsList(CartParamDto cartParamDto, String trackingNo) {
try {
String redisKey = getShoppingCartGoodsKey(cartParamDto);
BoundHashOperations<String, String, CartGoods> operations = redisTemplate.boundHashOps(redisKey);
this.clear(cartParamDto, trackingNo);
Map<String, CartGoods> cartGoodsMap = cartParamDto.getCartGoodsList().parallelStream()
.filter(k -> StringUtils.isNotEmpty(k.getCartGoodsUid()))
.collect(Collectors.toMap(CartGoods::getCartGoodsUid, Function.identity(), (k1, k2) -> k1));
operations.putAll(cartGoodsMap);
return this.getCartGoodsList(cartParamDto, trackingNo);
} catch (Exception e) {
ErrorLog.printErrorLog("assortment-shoppingcart-sdk", trackingNo, e.getMessage(), "setCartGoodsList", cartParamDto, e, Level.ERROR);
return null;
}
}
@Override
public BaseResponse<CartGoods> getCartGoods(CartParamDto cartParamDto, String trackingNo) {
try {
String redisKey = getShoppingCartGoodsKey(cartParamDto);
BoundHashOperations<String, String, CartGoods> operations = redisTemplate.boundHashOps(redisKey);
CartGoods cartGoods = operations.get(cartParamDto.getCartGoodsUid());
return CartResponseUtil.success(cartGoods);
} catch (Exception e) {
ErrorLog.printErrorLog("assortment-shoppingcart-sdk", trackingNo, e.getMessage(), "getCartGoods", cartParamDto, e, Level.ERROR);
return null;
}
}
@Override
public BaseResponse<List<CartGoods>> updateGoodsQty(CartParamDto cartParamDto, String trackingNo) {
try {
String redisKey = getShoppingCartGoodsKey(cartParamDto);
BoundHashOperations<String, String, CartGoods> operations = redisTemplate.boundHashOps(redisKey);
CartGoods cartGoods = operations.get(cartParamDto.getCartGoodsUid());
if (cartGoods != null) {
// 当数量为0时,移除
if (Objects.equals(cartParamDto.getQty(), 0)) {
operations.delete(cartParamDto.getCartGoodsUid());
} else {
cartGoods.setQty(cartParamDto.getQty());
operations.put(cartParamDto.getCartGoodsUid(), cartGoods);
}
}
return this.getCartGoodsList(cartParamDto, trackingNo);
} catch (Exception e) {
ErrorLog.printErrorLog("assortment-shoppingcart-sdk", trackingNo, e.getMessage(), "updateGoodsQty", cartParamDto, e, Level.ERROR);
return null;
}
}
@Override
public BaseResponse clear(CartParamDto cartParamDto, String trackingNo) {
try {
redisTemplate.delete(this.getShoppingCartGoodsKey(cartParamDto));
redisTemplate.delete(this.getShoppingCartGoodsAmountKey(cartParamDto));
return new BaseResponse(VersionUtils.VER_1, CartResponseConstant.SUCCESS.getCode(), CartResponseConstant.SUCCESS.getMessage());
} catch (Exception e) {
ErrorLog.printErrorLog("assortment-shoppingcart-sdk", trackingNo, e.getMessage(), "clear", cartParamDto, e, Level.ERROR);
return null;
}
}
@Override
public String getCouponAppId() {
return this.appId;
}
@Override
public Map<String, Boolean> getCouponOrderWay(String partnerId, List<String> activityCodes, Integer orderTye, String trackingNo) {
return null;
}
/**
* 获取绑定微商城门店id
*/
public String getBindMallShopId(String appId, String trackingNo) {
try {
BoundValueOperations operations = redisTemplate.boundValueOps(this.getBindMallShopKey(appId));
String mallShopId = (String) operations.get();
return mallShopId;
} catch (Exception e) {
ErrorLog.printErrorLog("assortment-shoppingcart-sdk", trackingNo, e.getMessage(), "getBindMallShopId", appId, e, Level.ERROR);
return null;
}
}
/**
* 获取记录购物车信息的key
*
* @return
*/
private String getShoppingCartGoodsKey(CartParamDto cartParamDto) {
return RedisKeyConstant.SAAS_MALL_SHOPPINGCART_KEY_PREFIX + cartParamDto.getPartnerId() + "_" + cartParamDto.getStoreId() + "_" + cartParamDto.getUserId();
}
/**
* 获取记录购物车价格的key
*
* @return
*/
private String getShoppingCartGoodsAmountKey(CartParamDto cartParamDto) {
return RedisKeyConstant.SAAS_MALL_SHOPPINGCART_AMOUNT_PREFIX + cartParamDto.getPartnerId() + "_" + cartParamDto.getStoreId() + "_" + cartParamDto.getUserId();
}
/**
* 获取绑定的微商城门店
*/
private String getBindMallShopKey(String appId) {
return RedisKeyConstant.OPENSTORE_MICROMALL_BIND_STOREID_PREFIX + appId;
}
}
...@@ -82,13 +82,13 @@ ...@@ -82,13 +82,13 @@
<dependency> <dependency>
<groupId>com.freemud.application.service.sdk</groupId> <groupId>com.freemud.application.service.sdk</groupId>
<artifactId>deliverycenter-sdk</artifactId> <artifactId>deliverycenter-sdk</artifactId>
<version>1.1.3-SNAPSHOT</version> <version>1.2.3-SNAPSHOT</version>
</dependency> </dependency>
<!-- 商户门店sdk --> <!-- 商户门店sdk -->
<dependency> <dependency>
<groupId>com.freemud.application.service.sdk</groupId> <groupId>com.freemud.application.service.sdk</groupId>
<artifactId>storecenter-sdk</artifactId> <artifactId>storecenter-sdk</artifactId>
<version>1.6.RELEASE</version> <version>1.8.1-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>cn.freemud</groupId> <groupId>cn.freemud</groupId>
......
package cn.freemud.adapter;
import cn.freemud.entities.dto.OrderExtInfoDto;
import cn.freemud.entities.dto.QueryOrdersResponseDto;
import cn.freemud.enums.DeliveryChannelEnum;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.deliverycenter.dto.CreateDeliveryOrderRequestDto;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Component
public class DeliveryAdapter {
public CreateDeliveryOrderRequestDto convertToWeixinDeliveryOrderRequestDto(QueryOrdersResponseDto.DataBean.OrderBean orderBean, StoreResponse storeInfo, String accessToken, String deliveryCallBackUrl) {
CreateDeliveryOrderRequestDto deliveryOrderRequestDto = new CreateDeliveryOrderRequestDto();
OrderExtInfoDto orderExtInfoDto = JSONObject.parseObject(orderBean.getExtInfo(), OrderExtInfoDto.class) == null ? new OrderExtInfoDto() : JSONObject.parseObject(orderBean.getExtInfo(), OrderExtInfoDto.class);
deliveryOrderRequestDto.setDeliveryChannel(DeliveryChannelEnum.WEIXIN.getCode());
deliveryOrderRequestDto.setAccessToken(accessToken);
deliveryOrderRequestDto.setOpenId(orderExtInfoDto.getOpenid());
deliveryOrderRequestDto.setWxAppId(orderExtInfoDto.getAppid());
BigDecimal weight = (orderBean.getWeight() == null || new BigDecimal("0").compareTo(orderBean.getWeight()) == 0) ? new BigDecimal("1") : orderBean.getWeight();
deliveryOrderRequestDto.setDepatchWeight(weight.divide(new BigDecimal("1000"))); //克转化为千克
deliveryOrderRequestDto.setSerialNumber(orderBean.getDaySeq().toString());
deliveryOrderRequestDto.setOrderId(orderBean.getOid());
deliveryOrderRequestDto.setOrderRemark(orderBean.getRemark());
deliveryOrderRequestDto.setOrderTotalAmount(orderBean.getAmount().intValue() == 0 ? 1 : orderBean.getAmount().intValue());
deliveryOrderRequestDto.setOrderActualAmount(orderBean.getAmount().intValue() == 0 ? 1 : orderBean.getAmount().intValue());
deliveryOrderRequestDto.setPartnerId(orderBean.getCompanyId());
deliveryOrderRequestDto.setOrderChannel(orderBean.getSource());
deliveryOrderRequestDto.setIsPre(0);
deliveryOrderRequestDto.setStoreId(storeInfo.getBizVO().getStoreId());
deliveryOrderRequestDto.setStoreCode(storeInfo.getBizVO().getStoreCode());
deliveryOrderRequestDto.setStoreAddress(storeInfo.getBizVO().getAddress());
deliveryOrderRequestDto.setStoreLng(new BigDecimal(storeInfo.getBizVO().getLongitude()));
deliveryOrderRequestDto.setStoreLat(new BigDecimal(storeInfo.getBizVO().getLatitude()));
deliveryOrderRequestDto.setStorePhone(storeInfo.getBizVO().getPhone());
deliveryOrderRequestDto.setStoreName(orderBean.getShopName());
deliveryOrderRequestDto.setStoreProvince(storeInfo.getBizVO().getProvince());
deliveryOrderRequestDto.setStoreCity(storeInfo.getBizVO().getCity());
deliveryOrderRequestDto.setStoreArea(storeInfo.getBizVO().getRegion());
deliveryOrderRequestDto.setStoreContact(StringUtils.isEmpty(storeInfo.getBizVO().getStoreContacts()) ? storeInfo.getBizVO().getStoreName() : storeInfo.getBizVO().getStoreContacts());
deliveryOrderRequestDto.setReceiverName(orderBean.getUserName());
deliveryOrderRequestDto.setReceiverPrimaryPhone(orderBean.getPhone());
deliveryOrderRequestDto.setReceiverAddress(orderBean.getAddress());
deliveryOrderRequestDto.setReceiverLng(new BigDecimal(orderBean.getLongitude()));
deliveryOrderRequestDto.setReceiverLat(new BigDecimal(orderBean.getLatitude()));
deliveryOrderRequestDto.setProvinceName(orderBean.getReceiveProvince());
deliveryOrderRequestDto.setCityName(orderBean.getReceiveCity());
deliveryOrderRequestDto.setAreaName(orderBean.getReceiveRegion());
deliveryOrderRequestDto.setOrderTime(new Date(orderBean.getGmtCreate()));
deliveryOrderRequestDto.setCallbackUrl(deliveryCallBackUrl);
deliveryOrderRequestDto.setWxaPath("pages/index");
List<CreateDeliveryOrderRequestDto.DeliveryProductInfo> productInfos = new ArrayList<>();
orderBean.getProductList().forEach(productList -> {
CreateDeliveryOrderRequestDto.DeliveryProductInfo deliveryProductInfo = new CreateDeliveryOrderRequestDto.DeliveryProductInfo();
deliveryProductInfo.setProductCode(productList.getProductId());
deliveryProductInfo.setProductName(productList.getProductName());
deliveryProductInfo.setProductNumber(productList.getNumber());
deliveryProductInfo.setProductPrice(productList.getPrice().intValue());
deliveryProductInfo.setProductImg(productList.getPicture());
productInfos.add(deliveryProductInfo);
});
deliveryOrderRequestDto.setProductInfos(productInfos);
return deliveryOrderRequestDto;
}
}
package cn.freemud.adapter;
import cn.freemud.entities.dto.StoreDeliveryInfoDto;
import cn.freemud.entities.dto.UserDeliveryInfoDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.SubtractStockVO;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.OrderAccountType;
import cn.freemud.enums.OrderSourceType;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.promotioncenter.dto.promotion.GoodsStockDTO;
import com.freemud.application.sdk.api.promotioncenter.request.promotion.ActivityUpdateStockRequest;
import com.freemud.sdk.api.assortment.order.enums.OldOrderAccountType;
import com.freemud.sdk.api.assortment.order.enums.QueryDeliveryType;
import com.freemud.sdk.api.assortment.order.enums.QueryOrderType;
import com.freemud.sdk.api.assortment.order.enums.QueryPayType;
import com.freemud.sdk.api.assortment.order.request.order.BaseCreateOrderRequest;
import com.freemud.sdk.api.assortment.order.request.order.CreateOrderAccountRequest;
import com.freemud.sdk.api.assortment.order.request.order.CreateOrderProductRequest;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Component
public class MallOrderAdapter {
@Autowired
private OrderAdapter orderAdapter;
public BaseCreateOrderRequest convent2CreateOrderDto(CreateOrderVo createOrderVo, ShoppingCartGoodsDto shoppingCartGoodsDto) {
UserDeliveryInfoDto deliveryInfoDto = createOrderVo.getUserDeliveryInfoDto();
BaseCreateOrderRequest createOrderDto = getCreateOrderDto(createOrderVo);
long deliveryAmount = 0;
if(deliveryInfoDto != null) {
deliveryAmount = deliveryInfoDto.getRealDeliveryAmount();
}
Long packageAmount = shoppingCartGoodsDto.getPackageAmount() == null ? 0L : shoppingCartGoodsDto.getPackageAmount();
createOrderDto.setAmount(shoppingCartGoodsDto.getTotalAmount() + deliveryAmount + packageAmount);
// 解析购物车信息
List<ShoppingCartGoodsDto.CartGoodsDetailDto> cartGoodsDetailDtos = shoppingCartGoodsDto.getProducts();
List<CreateOrderProductRequest> products = new ArrayList<>();
ArrayList<CreateOrderAccountRequest> orderAccountDtos = new ArrayList<>();
// 根据购物车商品信息获取优惠信息
int orderAccountIndex = 0;
for (ShoppingCartGoodsDto.CartGoodsDetailDto cartGoodsDetailDto : cartGoodsDetailDtos) {
Integer qty = cartGoodsDetailDto.getQty();
if (qty > 0) {
CreateOrderProductRequest createOrderProductDto = orderAdapter.convent2OrderProduct(cartGoodsDetailDto);
createOrderProductDto.setIgnoreProductPrice(1);
products.add(createOrderProductDto);
if (CollectionUtils.isNotEmpty(cartGoodsDetailDto.getActivityDiscountsDtos())) {
createOrderProductDto.setAccounts(orderAdapter.getAccounts(createOrderProductDto, cartGoodsDetailDto.getActivityDiscountsDtos()));
}
}
}
createOrderDto.setProducts(products);
if (deliveryAmount > 0) {
CreateOrderAccountRequest createOrderAccountDto = CreateOrderAccountRequest.builder()
.accountId("")
.name("配送费")
.price(deliveryAmount)
.accountType(orderAdapter.getQueryOrderAccountType(OldOrderAccountType.getByCode(OrderAccountType.DELIVERY_AMOUNT.getCode())))
.sequence(orderAccountIndex++)
.build();
orderAccountDtos.add(createOrderAccountDto);
}
if (packageAmount > 0) {
CreateOrderAccountRequest createOrderAccountDto = CreateOrderAccountRequest.builder()
.accountId("")
.name("包装费")
.price(packageAmount)
.accountType(orderAdapter.getQueryOrderAccountType(OldOrderAccountType.getByCode(OrderAccountType.PACK_AMOUNT.getCode())))
.sequence(orderAccountIndex++)
.build();
orderAccountDtos.add(createOrderAccountDto);
}
createOrderDto.setAccounts(CollectionUtils.isNotEmpty(orderAccountDtos) ? orderAccountDtos : Collections.emptyList());
//设置库存扣减
if (CollectionUtils.isNotEmpty(shoppingCartGoodsDto.getStocks())) {
List<ActivityUpdateStockRequest.StockBeanDto> stocks = new ArrayList<>();
for (SubtractStockVO stockVO : shoppingCartGoodsDto.getStocks()) {
ActivityUpdateStockRequest.StockBeanDto stockBeanDto = new ActivityUpdateStockRequest.StockBeanDto();
stockBeanDto.setActivityCode(stockVO.getActivityCode());
stockBeanDto.setActivityStock(stockVO.getActivityStock() == null ? 1 : stockVO.getActivityStock());
if (CollectionUtils.isNotEmpty(stockVO.getGoodsStock())) {
List<GoodsStockDTO> goodsStockDTOS = new ArrayList<>();
stockVO.getGoodsStock().forEach(goods -> {
GoodsStockDTO goodsStockDTO = new GoodsStockDTO();
goodsStockDTO.setBenefitSeq(goods.getBenefitSeq());
goodsStockDTO.setGoodsId(goods.getGoodsId());
int stock = goods.getStock() == null ? 1 : goods.getStock();
goodsStockDTO.setStock(ActivityTypeEnum.TYPE_53.getCode().equals(stockVO.getActivityType()) ? 1 : stock);
goodsStockDTOS.add(goodsStockDTO);
});
stockBeanDto.setGoodsStock(goodsStockDTOS);
}
stocks.add(stockBeanDto);
}
ActivityUpdateStockRequest activityUpdateStockRequest = new ActivityUpdateStockRequest();
activityUpdateStockRequest.setStock(stocks);
createOrderDto.setActivityUpdateStockRequest(activityUpdateStockRequest);
}
return createOrderDto;
}
public BaseCreateOrderRequest getCreateOrderDto(CreateOrderVo createOrderVo) {
UserDeliveryInfoDto userDeliveryInfoDto = createOrderVo.getUserDeliveryInfoDto();
String remark = StringUtils.isNotBlank(createOrderVo.getOrderRemark()) ? createOrderVo.getOrderRemark() : "";
BaseCreateOrderRequest createOrderDto = new BaseCreateOrderRequest();
createOrderDto.setCompanyId(createOrderVo.getPartnerId());
createOrderDto.setShopId(createOrderVo.getShopId());
createOrderDto.setThirdShopId(createOrderVo.getThirdShopId());
createOrderDto.setShopName(createOrderVo.getStoreName());
createOrderDto.setUserId(createOrderVo.getUserId());
createOrderDto.setUserName(createOrderVo.getUserName());
createOrderDto.setPhone(userDeliveryInfoDto.getReceiveMobile());
createOrderDto.setAddress(userDeliveryInfoDto.getReceiveAddress());
createOrderDto.setLatitude(userDeliveryInfoDto.getUserLatitude());
createOrderDto.setLongitude(userDeliveryInfoDto.getUserLongitude());
createOrderDto.setOrderType(QueryOrderType.TAKE_OUT);
createOrderDto.setPayType(QueryPayType.ONLINE_PAY);
createOrderDto.setSource(OrderSourceType.SAASMALL.getCode());
createOrderDto.setSourceName(OrderSourceType.SAASMALL.getDesc());
createOrderDto.setOrderClientType(OrderClientType.SAASMALL);
createOrderDto.setRemark(remark);
createOrderDto.setGmtExpect(null);
BaseCreateOrderRequest.DeliveryTypeInfo deliveryTypeInfo = new BaseCreateOrderRequest.DeliveryTypeInfo();
deliveryTypeInfo.setDeliveryType(QueryDeliveryType.THIRD);
createOrderDto.setAddInfo(deliveryTypeInfo);
createOrderDto.setAmount(0L);
createOrderDto.setBarCounter(createOrderVo.getTableNumber());
createOrderDto.setProvince(userDeliveryInfoDto.getReceiveProvince());
createOrderDto.setCity(userDeliveryInfoDto.getReceiveCity());
createOrderDto.setRegion(userDeliveryInfoDto.getReceiveRegion());
return createOrderDto;
}
/**
* 计算用户收货地址实际配送费
*
* @param storeDeliveryInfoDto 门店配送信息
* @param userLongitude 用户地址经度
* @param userLatitude 用户地址维度
* @return
*/
public Long getUserRealDeliveryAmount(StoreDeliveryInfoDto storeDeliveryInfoDto, String userLongitude, String userLatitude) {
return 0L;
}
}
...@@ -16,7 +16,6 @@ import cn.freemud.base.log.LogTreadLocal; ...@@ -16,7 +16,6 @@ import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.base.util.DateUtil; import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.CustomerScoreConstant; import cn.freemud.constant.CustomerScoreConstant;
import cn.freemud.entities.dto.*; import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.QueryOrdersResponseDto.DataBean.OrderBean.ProductBean;
import cn.freemud.entities.dto.activity.ShareDiscountActivityDto; import cn.freemud.entities.dto.activity.ShareDiscountActivityDto;
import cn.freemud.entities.dto.order.*; import cn.freemud.entities.dto.order.*;
import cn.freemud.entities.dto.order.CreateOrderAccountDto; import cn.freemud.entities.dto.order.CreateOrderAccountDto;
...@@ -27,6 +26,7 @@ import cn.freemud.entities.vo.*; ...@@ -27,6 +26,7 @@ import cn.freemud.entities.vo.*;
import cn.freemud.entities.vo.encircle.PreviewOrderInfoVo; import cn.freemud.entities.vo.encircle.PreviewOrderInfoVo;
import cn.freemud.enums.ActivityTypeEnum; import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.enums.*; import cn.freemud.enums.*;
import cn.freemud.enums.OrderChannelType;
import cn.freemud.enums.OrderSourceType; import cn.freemud.enums.OrderSourceType;
import cn.freemud.enums.PayStatus; import cn.freemud.enums.PayStatus;
import cn.freemud.enums.QueryOrderStatus; import cn.freemud.enums.QueryOrderStatus;
...@@ -265,7 +265,7 @@ public class OrderAdapter { ...@@ -265,7 +265,7 @@ public class OrderAdapter {
return createFatherSonOrderRequest; return createFatherSonOrderRequest;
} }
private List<CreateOrderAccountRequest> getAccounts(CreateOrderProductRequest createOrderProductDto, List<ActivityDiscountsDto> activityDiscountsDtos) { public List<CreateOrderAccountRequest> getAccounts(CreateOrderProductRequest createOrderProductDto, List<ActivityDiscountsDto> activityDiscountsDtos) {
List<CreateOrderAccountRequest> orderAccountDtos = new ArrayList<>(); List<CreateOrderAccountRequest> orderAccountDtos = new ArrayList<>();
for (ActivityDiscountsDto activityDiscountsDto : activityDiscountsDtos) { for (ActivityDiscountsDto activityDiscountsDto : activityDiscountsDtos) {
CreateOrderAccountRequest createOrderAccountDto = CreateOrderAccountRequest.builder() CreateOrderAccountRequest createOrderAccountDto = CreateOrderAccountRequest.builder()
...@@ -750,7 +750,7 @@ public class OrderAdapter { ...@@ -750,7 +750,7 @@ public class OrderAdapter {
return confirmOrderDto; return confirmOrderDto;
} }
public QueryOrdersDto convent2QueryOrdersDto(QueryOrderDto queryOrderDto, String memberId, String iAppId) { public QueryOrdersDto convent2QueryOrdersDto(QueryOrderDto queryOrderDto, String memberId, String channelType) {
QueryOrdersDto queryOrdersDto = new QueryOrdersDto(); QueryOrdersDto queryOrdersDto = new QueryOrdersDto();
queryOrdersDto.setUserId(memberId); queryOrdersDto.setUserId(memberId);
queryOrdersDto.setCompanyId(queryOrderDto.getPartnerId()); queryOrdersDto.setCompanyId(queryOrderDto.getPartnerId());
...@@ -759,8 +759,10 @@ public class OrderAdapter { ...@@ -759,8 +759,10 @@ public class OrderAdapter {
queryOrdersDto.setStartDate(queryOrderDto.getStartDate()); queryOrdersDto.setStartDate(queryOrderDto.getStartDate());
queryOrdersDto.setEndDate(queryOrderDto.getEndDate()); queryOrdersDto.setEndDate(queryOrderDto.getEndDate());
if (IappIdType.WC_XCX.getCode().equals(iAppId)) { if(OrderChannelType.IWC.getCode().equals(channelType)) {
queryOrdersDto.setSource(new String[]{"meals"}); queryOrdersDto.setSource(new String[]{"meals"});
} else if(OrderChannelType.SAASMALL.getCode().equals(channelType)) {
queryOrdersDto.setSource(new String[]{"saasmall"});
} else { } else {
queryOrdersDto.setSource(new String[]{"saas"}); queryOrdersDto.setSource(new String[]{"saas"});
} }
...@@ -785,10 +787,7 @@ public class OrderAdapter { ...@@ -785,10 +787,7 @@ public class OrderAdapter {
queryOrdersDto.setRefundStatus(statuses); queryOrdersDto.setRefundStatus(statuses);
} }
} }
if (IappIdType.WC_XCX.getCode().equals(iAppId)) {
Integer[] statuses = new Integer[]{OrderStatus.COMPLETE.getCode(), OrderStatus.CALCEL.getCode()};
queryOrdersDto.setStatus(statuses);
}
// 兼容历史版本,如果传参是4 查询拆程4和5 // 兼容历史版本,如果传参是4 查询拆程4和5
if (queryOrderDto.getQueryOrderType() != null) { if (queryOrderDto.getQueryOrderType() != null) {
if (Objects.equals(queryOrderDto.getQueryOrderType(), OrderType.COLLECT_GOODS.getCode())) { if (Objects.equals(queryOrderDto.getQueryOrderType(), OrderType.COLLECT_GOODS.getCode())) {
...@@ -797,6 +796,18 @@ public class OrderAdapter { ...@@ -797,6 +796,18 @@ public class OrderAdapter {
queryOrdersDto.setType(new Integer[]{queryOrderDto.getQueryOrderType()}); queryOrdersDto.setType(new Integer[]{queryOrderDto.getQueryOrderType()});
} }
} }
if (OrderChannelType.IWC.getCode().equals(channelType)) {
Integer[] statuses = new Integer[]{OrderStatus.COMPLETE.getCode(), OrderStatus.CALCEL.getCode()};
queryOrdersDto.setStatus(statuses);
}
if (OrderChannelType.SAASMALL.getCode().equals(channelType)) {
Integer[] statuses = new Integer[]{OrderStatus.COMPLETE.getCode(), OrderStatus.CALCEL.getCode()};
queryOrdersDto.setStatus(statuses);
queryOrdersDto.setType(new Integer[]{});
}
return queryOrdersDto; return queryOrdersDto;
} }
...@@ -815,6 +826,9 @@ public class OrderAdapter { ...@@ -815,6 +826,9 @@ public class OrderAdapter {
responseVo.setShopPhone(ordersBean.getShopPhone()); responseVo.setShopPhone(ordersBean.getShopPhone());
responseVo.setReceiveAddress(ordersBean.getAddress()); responseVo.setReceiveAddress(ordersBean.getAddress());
responseVo.setReceiveUsername(ordersBean.getUserName()); responseVo.setReceiveUsername(ordersBean.getUserName());
responseVo.setReceiveProvince(ordersBean.getReceiveProvince());
responseVo.setReceiveCity(ordersBean.getReceiveCity());
responseVo.setReceiveRegion(ordersBean.getReceiveRegion());
responseVo.setReceiveMobile(ordersBean.getPhone()); responseVo.setReceiveMobile(ordersBean.getPhone());
responseVo.setTakeMealType(ordersBean.getGmtExpect() == null ? 0 : 1); responseVo.setTakeMealType(ordersBean.getGmtExpect() == null ? 0 : 1);
responseVo.setTakeMealTypeDesc(responseVo.getTakeMealType() == 0 ? "立即取餐" : "预约取餐"); responseVo.setTakeMealTypeDesc(responseVo.getTakeMealType() == 0 ? "立即取餐" : "预约取餐");
......
...@@ -51,4 +51,9 @@ public class RedisKeyConstant { ...@@ -51,4 +51,9 @@ public class RedisKeyConstant {
* 支付回掉标记在redis的key前缀 * 支付回掉标记在redis的key前缀
*/ */
public final static String KGD_PAYMENT_CALLBACK_FMID = "kgd:payment:callback:fmid:"; public final static String KGD_PAYMENT_CALLBACK_FMID = "kgd:payment:callback:fmid:";
/**
* 点餐门店绑定的商城门店redis的key前缀
*/
public final static String OPENSTORE_MICROMALL_BIND_STOREID_PREFIX = "openstore:micromall:bind:storeId:";
} }
...@@ -22,6 +22,7 @@ import cn.freemud.service.EncircleOrderService; ...@@ -22,6 +22,7 @@ import cn.freemud.service.EncircleOrderService;
import cn.freemud.service.OrderAdapterService; import cn.freemud.service.OrderAdapterService;
import cn.freemud.service.Orderservice; import cn.freemud.service.Orderservice;
import cn.freemud.utils.ResponseUtil; import cn.freemud.utils.ResponseUtil;
import cn.freemud.service.impl.MallOrderServiceImpl;
import com.freemud.application.sdk.api.log.ApiAnnotation; import com.freemud.application.sdk.api.log.ApiAnnotation;
import com.freemud.application.sdk.api.log.LogParams; import com.freemud.application.sdk.api.log.LogParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -45,6 +46,8 @@ public class OrderController { ...@@ -45,6 +46,8 @@ public class OrderController {
private OrderAdapterService orderAdapterService; private OrderAdapterService orderAdapterService;
@Autowired @Autowired
private EncircleOrderService encircleOrderService; private EncircleOrderService encircleOrderService;
@Autowired
private MallOrderServiceImpl mallOrderService;
/** /**
* 创建订单之前校验前面排队的订单数 * 创建订单之前校验前面排队的订单数
...@@ -135,7 +138,7 @@ public class OrderController { ...@@ -135,7 +138,7 @@ public class OrderController {
@ApiAnnotation(logMessage = "queryOrderById") @ApiAnnotation(logMessage = "queryOrderById")
@PostMapping("/queryOrderById") @PostMapping("/queryOrderById")
public BaseResponse queryOrderById(@Validated @LogParams @RequestBody QueryOrderVo queryOrderVo) { public BaseResponse queryOrderById(@Validated @LogParams @RequestBody QueryOrderVo queryOrderVo) {
return orderservice.queryOrderById(queryOrderVo.getOperation(),queryOrderVo.getSessionId(), queryOrderVo.getOid(),queryOrderVo.getPartnerId(),queryOrderVo.getChannel()); return orderservice.queryOrderById(queryOrderVo.getOperation(),queryOrderVo.getSessionId(), queryOrderVo.getOid(),queryOrderVo.getPartnerId(),queryOrderVo.getChannelType());
} }
/** /**
...@@ -206,4 +209,13 @@ public class OrderController { ...@@ -206,4 +209,13 @@ public class OrderController {
return ResponseUtil.success(); return ResponseUtil.success();
} }
/**
* 订单确认完成
*/
@ApiAnnotation(logMessage = "affirm")
@PostMapping("/affirm")
public BaseResponse orderAffirm(@Validated @LogParams @RequestBody OrderAffirmRequestVO request) {
return mallOrderService.orderAffirm(request);
}
} }
...@@ -2,6 +2,7 @@ package cn.freemud.controller.delivery; ...@@ -2,6 +2,7 @@ package cn.freemud.controller.delivery;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.delivery.CallbackUrlRequestDto; import cn.freemud.entities.dto.delivery.CallbackUrlRequestDto;
import cn.freemud.entities.dto.delivery.WeixinDeliveryAddressDto;
import cn.freemud.service.ThirdDeliveryService; import cn.freemud.service.ThirdDeliveryService;
import com.freemud.application.sdk.api.log.ApiAnnotation; import com.freemud.application.sdk.api.log.ApiAnnotation;
import com.freemud.application.sdk.api.log.LogParams; import com.freemud.application.sdk.api.log.LogParams;
...@@ -43,4 +44,17 @@ public class DeliveryController { ...@@ -43,4 +44,17 @@ public class DeliveryController {
return deliveryService.callbackUrl(request); return deliveryService.callbackUrl(request);
} }
@ApiAnnotation(logMessage = "商城配送回调")
@ApiOperation(value = "商城配送回调", notes = "商城配送回调", produces = "application/json")
@PostMapping("/delivery/mallCallbackUrl")
public BaseResponse mallCallbackUrl(@Valid @LogParams @RequestBody CallbackUrlRequestDto request) {
return deliveryService.mallCallbackUrl(request);
}
@ApiAnnotation(logMessage = "获取快递配送费")
@ApiOperation(value = "获取快递配送费", notes = "获取快递配送费", produces = "application/json")
@PostMapping("/delivery/queryDeliveryAmount")
public BaseResponse queryDeliveryAmount(@Valid @LogParams @RequestBody WeixinDeliveryAddressDto request) {
return deliveryService.queryDeliveryAmount(request);
}
} }
...@@ -17,6 +17,7 @@ import lombok.NoArgsConstructor; ...@@ -17,6 +17,7 @@ import lombok.NoArgsConstructor;
import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle; import org.apache.commons.lang.builder.ToStringStyle;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
@NoArgsConstructor @NoArgsConstructor
...@@ -246,6 +247,26 @@ public class QueryOrdersResponseDto { ...@@ -246,6 +247,26 @@ public class QueryOrdersResponseDto {
*/ */
private String completeTime; private String completeTime;
/**
* 收件人省份
*/
private String receiveProvince;
/**
* 收件人城市
*/
private String receiveCity;
/**
* 收件人区
*/
private String receiveRegion;
/**
* 订单重量
*/
private BigDecimal weight;
@NoArgsConstructor @NoArgsConstructor
@Data @Data
public static class AddDeliveryInfo { public static class AddDeliveryInfo {
......
...@@ -56,5 +56,20 @@ public class UserDeliveryInfoDto { ...@@ -56,5 +56,20 @@ public class UserDeliveryInfoDto {
* 门店配送信息 * 门店配送信息
*/ */
private StoreDeliveryInfoDto storeDeliveryInfoDto; private StoreDeliveryInfoDto storeDeliveryInfoDto;
/**
* 收货省份
*/
private String receiveProvince;
/**
* 收货城市
*/
private String receiveCity;
/**
* 收货区
*/
private String receiveRegion;
} }
package cn.freemud.entities.dto.delivery;
import lombok.Data;
/**
* 查询省份对应配送费价格请求参数对象
* @version V1.0
* @author: kai.ding
* @date:
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* All rights Reserved, Designed By www.freemud.cn
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目的
*/
@Data
public class QueryDeliveryAmountRequestDto {
/**
* 商户id
*/
private String partnerId;
/**
* 省份名称
*/
private String province;
}
package cn.freemud.entities.dto.delivery;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 查询省份对应配送费价格响应对象
* @version V1.0
* @author: kai.ding
* @date:
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* All rights Reserved, Designed By www.freemud.cn
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目的
*/
@Data
public class QueryDeliveryAmountResponseDto {
private Integer code;
private String msg;
private List<QueryDeliveryAmountResult> data;
@Data
public static class QueryDeliveryAmountResult {
private Long id;
/**
* 商户ID
*/
private String partnerId;
/**
* 配送费 单位:分
*/
private BigDecimal deliveryAmount;
/**
* 收件人省份编码
*/
private String provinceCode;
/**
* 收件人省份
*/
private String sendProvince;
/**
* 状态 1启用 2禁用
*/
private Integer status;
}
}
package cn.freemud.entities.dto.delivery;
import lombok.Data;
/**
* 微信配送地址信息
* @version V1.0
* @author: kai.ding
* @date:
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* All rights Reserved, Designed By www.freemud.cn
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目的
*/
@Data
public class WeixinDeliveryAddressDto {
/**
* 商户id
*/
private String partnerId;
/**
* 收货人姓名
*/
private String userName;
/**
* 邮编
*/
private String postalCode;
/**
* 省名称
*/
private String provinceName;
/**
* 市名称
*/
private String cityName;
/**
* 区名称
*/
private String countyName;
/**
* 详细收货地址信息
*/
private String detailInfo;
/**
* 收货地址国家码
*/
private String nationalCode;
/**
* 收货人电话
*/
private String telNumber;
}
...@@ -29,4 +29,9 @@ public class NewShoppingCartClearDto { ...@@ -29,4 +29,9 @@ public class NewShoppingCartClearDto {
private String tableNumber; private String tableNumber;
/**
* 渠道类型 OrderChannelType
*/
private String channelType;
} }
package cn.freemud.entities.dto.wechat;
import lombok.Data;
import java.util.UUID;
@Data
public class GetAuthorizerRequestDto {
/**
* 请求id,每一次请求不一样请保持唯一"
*/
private String requestId = UUID.randomUUID().toString();
/**
* 商户id
*/
private String partnerId;
private String authorizerAppid;
private String ver = "1";
}
package cn.freemud.entities.dto.wechat;
import cn.freemud.entities.dto.GetWxappUserInfoResponseDto;
import lombok.Data;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: ${FILE_NAME}
* @Package com.freemud.mail.core
* @Description: ${TODO}(用一句话描述该文件做什么)
* @author: aiqi.gong
* @date: 2019/2/21 17:50
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class GetTokenResponseDto {
private String statusCode;
private String msg;
private String ver;
private ResultBean data;
@Data
public static class ResultBean {
private String appid;
private String accessToken;
}
}
...@@ -14,6 +14,7 @@ package cn.freemud.entities.vo; ...@@ -14,6 +14,7 @@ package cn.freemud.entities.vo;
import cn.freemud.entities.dto.UserDeliveryInfoDto; import cn.freemud.entities.dto.UserDeliveryInfoDto;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import cn.freemud.entities.dto.delivery.WeixinDeliveryAddressDto;
import lombok.Data; import lombok.Data;
import javax.validation.Valid; import javax.validation.Valid;
...@@ -179,6 +180,15 @@ public class CreateOrderVo { ...@@ -179,6 +180,15 @@ public class CreateOrderVo {
private String sessionKey; // 存储sessionKey,异常补退使用 private String sessionKey; // 存储sessionKey,异常补退使用
private String menuType; private String menuType;
/**
* 渠道类型 OrderChannelType
*/
private String channelType;
/**
* 微信配送地址信息
*/
private WeixinDeliveryAddressDto weixinDeliveryAddress;
@Data @Data
public static class PremiumExchangeActivity { public static class PremiumExchangeActivity {
......
package cn.freemud.entities.vo;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
@Data
public class OrderAffirmRequestVO {
@NotEmpty(message = "sessionId 不能为空")
private String sessionId;
/**
* 商户ID
*/
@NotEmpty(message = "商户号不能为空")
private String partnerId;
/**
* 门店id
*/
private String shopId;
/**
* 订单ID
*/
@NotEmpty(message = "订单号不能为空")
private String oid;
/**
* 渠道类型 OrderChannelType
*/
private String channelType;
}
...@@ -309,6 +309,21 @@ public class QueryOrderResponseVo { ...@@ -309,6 +309,21 @@ public class QueryOrderResponseVo {
//支付有礼领券集合 //支付有礼领券集合
private List<PayGiftCouponVo> coupons; private List<PayGiftCouponVo> coupons;
/**
* 收件人省份
*/
private String receiveProvince;
/**
* 收件人城市
*/
private String receiveCity;
/**
* 收件人区
*/
private String receiveRegion;
@Data @Data
public static class OrderStatusFlow { public static class OrderStatusFlow {
/** /**
......
...@@ -55,8 +55,8 @@ public class QueryOrderVo { ...@@ -55,8 +55,8 @@ public class QueryOrderVo {
private String endDate; private String endDate;
/** /**
* 渠道信息 1:saas 2:img 3:iwc * 渠道信息 saas; img; iwc; saasmall
*/ */
private String channel; private String channelType;
} }
...@@ -88,6 +88,10 @@ public class ShoppingCartInfoRequestVo { ...@@ -88,6 +88,10 @@ public class ShoppingCartInfoRequestVo {
private BuyMemberCard buyMemberCard; private BuyMemberCard buyMemberCard;
private String menuType; private String menuType;
/**
* 渠道类型 OrderChannelType
*/
private String channelType;
@Data @Data
public final static class SendGoods { public final static class SendGoods {
......
package cn.freemud.entities.vo.delivery;
import lombok.Data;
/**
* 配送费vo
* @version V1.0
* @author: kai.ding
* @date:
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* All rights Reserved, Designed By www.freemud.cn
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目的
*/
@Data
public class DeliveryAmountVo {
private Long id;
/**
* 商户id
*/
private String partnerId;
/**
* 省名称
*/
private String provinceName;
/**
* 配送费 单位:分
*/
private Integer deliveryAmount;
}
package cn.freemud.enums;
/**
* 配送渠道枚举
* @version V1.0
* @author: kai.ding
* @date:
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* All rights Reserved, Designed By www.freemud.cn
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目的
*/
public enum DeliveryChannelEnum {
WEIXIN("weixin","微信"),
;
private String code;
private String desc;
DeliveryChannelEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
public static DeliveryChannelEnum getByCode(String code) {
for (DeliveryChannelEnum payType : values()) {
if (payType.getCode().equals(code)) {
return payType;
}
}
return null;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
...@@ -22,7 +22,9 @@ public enum DeliveryStatus { ...@@ -22,7 +22,9 @@ public enum DeliveryStatus {
RIDERSTARTDELIVERY(5,"开始配送"), RIDERSTARTDELIVERY(5,"开始配送"),
DELIVERYARRIVED(6,"运单送达"), DELIVERYARRIVED(6,"运单送达"),
DELIVERYERROR(7,"运单异常"), DELIVERYERROR(7,"运单异常"),
DELIVERYCANCEL(8,"运单取消"); DELIVERYCANCEL(8,"运单取消"),
DELIVERY_CREATE_SUCCESS(9, "创建配送单成功"),
;
private int code; private int code;
......
...@@ -18,7 +18,9 @@ public enum OrderChannelType { ...@@ -18,7 +18,9 @@ public enum OrderChannelType {
IMG("img", "爱马哥小程序"), IMG("img", "爱马哥小程序"),
IWC("iwc","i围餐"); IWC("iwc","i围餐"),
SAASMALL("saasmall", "微商城");
private String code; private String code;
......
...@@ -30,7 +30,10 @@ public enum OrderSourceType { ...@@ -30,7 +30,10 @@ public enum OrderSourceType {
SAAS("saas", "saas 点餐"), SAAS("saas", "saas 点餐"),
ALIPAY("alipay", "支付宝小程序点餐"); ALIPAY("alipay", "支付宝小程序点餐"),
SAASMALL("saasmall", "微商城"),
;
private String code; private String code;
......
...@@ -58,6 +58,7 @@ public enum ResponseResult { ...@@ -58,6 +58,7 @@ public enum ResponseResult {
STORE_NOT_ENABLE_COLLECT_GOODS("43011","门店不支持到店"), STORE_NOT_ENABLE_COLLECT_GOODS("43011","门店不支持到店"),
STORE_NOT_TABLE_INFO("43012","查询桌号失败"), STORE_NOT_TABLE_INFO("43012","查询桌号失败"),
STORE_DISCONTENT_DELIVERY_FEE("43013","不满足起送金额"), STORE_DISCONTENT_DELIVERY_FEE("43013","不满足起送金额"),
STORE_BIND_MALL_NOT_FOUND("43014","商城门店存在"),
/** /**
* 购物车状态码 * 购物车状态码
...@@ -129,6 +130,12 @@ public enum ResponseResult { ...@@ -129,6 +130,12 @@ public enum ResponseResult {
ENCIRCLEORDER_TABLENUMBER_LOCK("45048","当前桌号正在开台或已开台"), ENCIRCLEORDER_TABLENUMBER_LOCK("45048","当前桌号正在开台或已开台"),
ENCIRCLEORDER_PRE_PAYMENT_SUCCESS("45049","订单已支付"), ENCIRCLEORDER_PRE_PAYMENT_SUCCESS("45049","订单已支付"),
CLEAR_SHOPPING_INFO_SYSTEM_ERROR("45048","清空购物车异常"), CLEAR_SHOPPING_INFO_SYSTEM_ERROR("45048","清空购物车异常"),
ORDER_PARTNER_ID_NOT_MATCTH("45050","商户不匹配"),
ORDER_STORE_ID_NOT_MATCTH("45051","门店不匹配"),
ORDER_REPEAT_DO_COMPLETE("45052", "重复操作,订单已经完成"),
ORDER_HAS_CANCELED("45053", "订单已经被取消"),
ORDER_MALL_NOT_MATCH("45054", "非商城订单,无法操作"),
AFFIRM_ORDER_FAIL("45055", "确认订单失败"),
/** /**
* 支付 * 支付
...@@ -169,6 +176,13 @@ public enum ResponseResult { ...@@ -169,6 +176,13 @@ public enum ResponseResult {
*/ */
DELIVERY_QUERY_ERROR("50024","查询配送单失败"), DELIVERY_QUERY_ERROR("50024","查询配送单失败"),
DELIVERY_CANCEL_ORDER_ERROR("53012", "取消配送单失败"), DELIVERY_CANCEL_ORDER_ERROR("53012", "取消配送单失败"),
/**
* 配送信息
*/
DELIVERY_INFO_NOT_DELIVERY("60001", "当前地址不可配送"),
DELIVERY_INFO_ERROR("60002","配送地址不正确"),
DELIVERY_CREATE_ERROR("60003","运单不足,配送失败"),
; ;
......
package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.OrderAffirmRequestVO;
import cn.freemud.entities.vo.encircle.CreateReserveOrderVo;
import cn.freemud.entities.vo.encircle.EmptyTableNumberVo;
import cn.freemud.entities.vo.encircle.EncircleReserveBaseVo;
/**
* 商城订单业务操作类
* @version V1.0
* @author: kai.ding
* @date:
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* All rights Reserved, Designed By www.freemud.cn
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目的
*/
public interface MallOrderService {
/**
* 创建订单
*/
BaseResponse createOrder(CreateOrderVo createOrderVo);
/**
* 订单确认完成
*/
BaseResponse orderAffirm(OrderAffirmRequestVO requestVO);
}
...@@ -2,6 +2,8 @@ package cn.freemud.service; ...@@ -2,6 +2,8 @@ package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.delivery.CallbackUrlRequestDto; import cn.freemud.entities.dto.delivery.CallbackUrlRequestDto;
import cn.freemud.entities.dto.delivery.WeixinDeliveryAddressDto;
import cn.freemud.entities.vo.delivery.DeliveryAmountVo;
/** /**
* 配送服务 * 配送服务
...@@ -13,4 +15,14 @@ public interface ThirdDeliveryService { ...@@ -13,4 +15,14 @@ public interface ThirdDeliveryService {
*/ */
BaseResponse callbackUrl(CallbackUrlRequestDto request); BaseResponse callbackUrl(CallbackUrlRequestDto request);
/**
* 商城配送回调
*/
BaseResponse mallCallbackUrl(CallbackUrlRequestDto request);
/**
* 查询微信配送地址配送费
*/
BaseResponse<DeliveryAmountVo> queryDeliveryAmount(WeixinDeliveryAddressDto request);
} }
...@@ -2,12 +2,17 @@ package cn.freemud.service.delivery; ...@@ -2,12 +2,17 @@ package cn.freemud.service.delivery;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.dto.delivery.CallbackUrlRequestDto; import cn.freemud.entities.dto.delivery.CallbackUrlRequestDto;
import cn.freemud.entities.dto.delivery.QueryDeliveryAmountRequestDto;
import cn.freemud.entities.dto.delivery.QueryDeliveryAmountResponseDto;
import cn.freemud.entities.dto.delivery.WeixinDeliveryAddressDto;
import cn.freemud.entities.dto.pos.PosBaseRequestDto; import cn.freemud.entities.dto.pos.PosBaseRequestDto;
import cn.freemud.entities.vo.delivery.DeliveryAmountVo;
import cn.freemud.enums.DeliveryStatus; import cn.freemud.enums.DeliveryStatus;
import cn.freemud.enums.ResponseResult; import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException; import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.Orderservice; import cn.freemud.service.Orderservice;
import cn.freemud.service.ThirdDeliveryService; import cn.freemud.service.ThirdDeliveryService;
import cn.freemud.service.thirdparty.DeliveryFeiginClient;
import cn.freemud.service.thirdparty.PosClient; import cn.freemud.service.thirdparty.PosClient;
import cn.freemud.utils.LogUtil; import cn.freemud.utils.LogUtil;
import cn.freemud.utils.ResponseUtil; import cn.freemud.utils.ResponseUtil;
...@@ -22,6 +27,7 @@ import com.freemud.sdk.api.assortment.order.request.order.UpdateDeliveryInfoById ...@@ -22,6 +27,7 @@ import com.freemud.sdk.api.assortment.order.request.order.UpdateDeliveryInfoById
import com.freemud.sdk.api.assortment.order.response.order.OrderBaseResponse; import com.freemud.sdk.api.assortment.order.response.order.OrderBaseResponse;
import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService; import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -49,6 +55,8 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService { ...@@ -49,6 +55,8 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService {
private Orderservice orderservice; private Orderservice orderservice;
@Autowired @Autowired
private PosClient posClient; private PosClient posClient;
@Autowired
private DeliveryFeiginClient deliveryFeiginClient;
@Override @Override
public BaseResponse callbackUrl(CallbackUrlRequestDto request) { public BaseResponse callbackUrl(CallbackUrlRequestDto request) {
...@@ -108,6 +116,31 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService { ...@@ -108,6 +116,31 @@ public class ThirdDeliveryServiceImpl implements ThirdDeliveryService {
return ResponseUtil.success(); return ResponseUtil.success();
} }
@Override
public BaseResponse mallCallbackUrl(CallbackUrlRequestDto request) {
return ResponseUtil.success();
}
@Override
public BaseResponse<DeliveryAmountVo> queryDeliveryAmount(WeixinDeliveryAddressDto request) {
QueryDeliveryAmountRequestDto requestDto = new QueryDeliveryAmountRequestDto();
requestDto.setPartnerId(request.getPartnerId());
requestDto.setProvince(request.getProvinceName());
QueryDeliveryAmountResponseDto responseDto = deliveryFeiginClient.queryDeliveryAmount(requestDto);
if(responseDto == null || SUCCESS_RESPONSE_CODE != responseDto.getCode() || CollectionUtils.isEmpty(responseDto.getData())) {
return ResponseUtil.error(ResponseResult.DELIVERY_INFO_NOT_DELIVERY);
}
DeliveryAmountVo deliveryAmountVo = new DeliveryAmountVo();
QueryDeliveryAmountResponseDto.QueryDeliveryAmountResult amountResult = responseDto.getData().get(0);
deliveryAmountVo.setId(amountResult.getId());
deliveryAmountVo.setPartnerId(amountResult.getPartnerId());
deliveryAmountVo.setProvinceName(amountResult.getSendProvince());
deliveryAmountVo.setDeliveryAmount(amountResult.getDeliveryAmount().intValue());
return ResponseUtil.success(deliveryAmountVo);
}
/** /**
* 配送单异常取消配送单 * 配送单异常取消配送单
*/ */
......
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: CheckOrder
* @Package cn.freemud.service.impl
* @Description:
* @author: ping.wu
* @date: 2019/5/8 10:01
* @version V1.0
* @Copyright: 2019 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.service.impl;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.dto.StoreDeliveryInfoDto;
import cn.freemud.entities.dto.UserDeliveryInfoDto;
import cn.freemud.entities.dto.UserLoginInfoDto;
import cn.freemud.entities.dto.delivery.WeixinDeliveryAddressDto;
import cn.freemud.entities.dto.shoppingCart.GetShoppingCartGoodsApportionDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
import cn.freemud.entities.vo.delivery.DeliveryAmountVo;
import cn.freemud.enums.CouponFlag;
import cn.freemud.enums.OrderChannelType;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.delivery.ThirdDeliveryServiceImpl;
import cn.freemud.service.thirdparty.ShoppingCartClient;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
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.Component;
@Component
public class CheckMallOrder {
@Autowired
private ShoppingCartClient shoppingCartClient;
@Autowired
private CheckOrder checkOrder;
// 缓存取用户数据用
@Autowired
private UserServiceImpl userService;
@Autowired
private ThirdDeliveryServiceImpl thirdDeliveryService;
/**
* 下单会员相关校验
*/
public UserLoginInfoDto checkOrderByMember(CreateOrderVo createOrderVo, String trackingNo) {
// 通过sessionId查询缓存中会员id
UserLoginInfoDto userLoginInfoDto = userService.getUserLoginInfoBySessionId(createOrderVo.getSessionId());
createOrderVo.setUserId(userLoginInfoDto.getMemberId());
return userLoginInfoDto;
}
/**
* 下单门店相关校验
*/
public StoreResponse.BizVO checkOrderByStore(CreateOrderVo createOrderVo, String trackingNo) {
return checkOrder.checkOrderByStore(createOrderVo, trackingNo);
}
/**
* 下单配送相关校验
*/
public void checkOrderByDelivery(CreateOrderVo createOrderVo, UserLoginInfoDto userLoginInfoDto,
StoreResponse.BizVO storeResponseDto,Long totalAmount, String trackingNo) {
StoreDeliveryInfoDto storeDeliveryInfoDto = this.getStoreDeliveryInfo(storeResponseDto, userLoginInfoDto.getWxAppid());
//订单金额小于起送费提示
if (storeDeliveryInfoDto.getDeliveryLimitAmount() > totalAmount) {
throw new ServiceException(ResponseResult.STORE_DISCONTENT_DELIVERY_FEE);
}
storeDeliveryInfoDto.setEnableTakeaway(true);
this.checkReceiveAddress(storeDeliveryInfoDto, createOrderVo);
}
public ShoppingCartGoodsDto getShoppingCartGoodsDto(CreateOrderVo createOrderVo) {
ShoppingCartInfoRequestVo shoppingCartInfoRequestVo = ShoppingCartInfoRequestVo.builder()
.partnerId(createOrderVo.getPartnerId())
.shopId(createOrderVo.getShopId())
.version(createOrderVo.getVersion())
.sessionId(createOrderVo.getSessionId())
.orderType(createOrderVo.getOrderType())
.reachStoreType(createOrderVo.getReachStoreType())
.flag(CouponFlag.NO.getCode())
.useCustomerScore(createOrderVo.getUseCustomerScore())
.channelType(OrderChannelType.SAASMALL.getCode())
.build();
// 通过购物车获取优惠信息
GetShoppingCartGoodsApportionDto requestDto = new GetShoppingCartGoodsApportionDto();
requestDto.setShoppingCartInfoRequestVo(shoppingCartInfoRequestVo);
//加价购商品 校验放购物车校验
requestDto.setPremiumExchangeActivity(createOrderVo.getPremiumExchangeActivity());
cn.freemud.base.entity.BaseResponse<ShoppingCartGoodsDto> apportionResponse = shoppingCartClient.getShoppingCartGoodsApportionNew(requestDto);
if (!ObjectUtils.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, apportionResponse.getCode())) {
ResponseResult responseResult = ResponseResult.getResponseResult(apportionResponse.getCode());
throw new ServiceException(responseResult != null ? responseResult : ResponseResult.SHOPPING_CART_GETINFO_ERROR );
}
if (apportionResponse.getResult() == null || CollectionUtils.isEmpty(apportionResponse.getResult().getProducts())) {
throw new ServiceException(ResponseResult.SHOPPING_CART_GETINFO_INVAILD);
}
ShoppingCartGoodsDto shoppingCartGoodsDto = apportionResponse.getResult();
if (shoppingCartGoodsDto.getOriginalTotalAmount() == null) {
throw new ServiceException(ResponseResult.SHOPPING_CART_GETINFO_INVAILD);
}
return shoppingCartGoodsDto;
}
/**
* 获取门店配送信息
*/
public StoreDeliveryInfoDto getStoreDeliveryInfo(StoreResponse.BizVO storeResponseDto, String wxAppid) {
StoreDeliveryInfoDto storeDeliveryInfoDto = new StoreDeliveryInfoDto();
storeDeliveryInfoDto.setPartnerId(storeResponseDto.getPartnerId());
storeDeliveryInfoDto.setStoreId(storeResponseDto.getStoreCode());
storeDeliveryInfoDto.setStoreName(storeResponseDto.getStoreName());
storeDeliveryInfoDto.setDeliveryLimitAmount(0L);
storeDeliveryInfoDto.setDeliveryAmount(0L);
storeDeliveryInfoDto.setDefaultDeliveryRange(0L);
storeDeliveryInfoDto.setAddRangeAmount(0L);
storeDeliveryInfoDto.setAddRangeCount(0L);
storeDeliveryInfoDto.setDeliveryHoursDay(storeResponseDto.getDeliveryHoursDay());
storeDeliveryInfoDto.setLongitude(storeResponseDto.getLongitude());
storeDeliveryInfoDto.setLatitude(storeResponseDto.getLatitude());
storeDeliveryInfoDto.setScopeConfig(storeResponseDto.getScopeConfig());
if (StringUtils.isNotEmpty(storeResponseDto.getDeliveryRadius())) {
storeDeliveryInfoDto.setDeliveryRadius(Integer.valueOf(storeResponseDto.getDeliveryRadius()));
} else {
storeDeliveryInfoDto.setDeliveryRadius(0);
}
storeDeliveryInfoDto.setDeliveryType("third");
storeDeliveryInfoDto.setPushOrderTime(0);
return storeDeliveryInfoDto;
}
/**
* 校验收货地址是否可配送
*/
public void checkReceiveAddress(StoreDeliveryInfoDto storeDeliveryInfoDto, CreateOrderVo createOrderVo) {
WeixinDeliveryAddressDto weixinDeliveryAddress = createOrderVo.getWeixinDeliveryAddress();
if(weixinDeliveryAddress == null || StringUtils.isEmpty(weixinDeliveryAddress.getProvinceName())) {
throw new ServiceException(ResponseResult.DELIVERY_INFO_ERROR);
}
cn.freemud.base.entity.BaseResponse<DeliveryAmountVo> deliveryAmountVoBaseResponse = thirdDeliveryService.queryDeliveryAmount(createOrderVo.getWeixinDeliveryAddress());
if(deliveryAmountVoBaseResponse == null || !ResponseResult.SUCCESS.getCode().equals(deliveryAmountVoBaseResponse.getCode())) {
throw new ServiceException(ResponseResult.DELIVERY_INFO_NOT_DELIVERY);
}
DeliveryAmountVo deliveryAmountVo = deliveryAmountVoBaseResponse.getResult();
UserDeliveryInfoDto userDeliveryInfoDto = UserDeliveryInfoDto.builder()
.deliveryLimitAmount(storeDeliveryInfoDto.getDeliveryLimitAmount())
.userEnableTakeaway(true)
.realDeliveryAmount(deliveryAmountVo.getDeliveryAmount().longValue())
.storeId(storeDeliveryInfoDto.getStoreId())
.storeName(storeDeliveryInfoDto.getStoreName())
.receiveMobile(weixinDeliveryAddress.getTelNumber())
.receiveUserName(weixinDeliveryAddress.getUserName())
.receiveProvince(weixinDeliveryAddress.getProvinceName())
.receiveCity(weixinDeliveryAddress.getCityName())
.receiveRegion(weixinDeliveryAddress.getCountyName())
.receiveAddress(weixinDeliveryAddress.getDetailInfo())
.storeDeliveryInfoDto(storeDeliveryInfoDto).build();
createOrderVo.setUserDeliveryInfoDto(userDeliveryInfoDto);
}
}
...@@ -7,6 +7,7 @@ import cn.freemud.enums.OrderChannelType; ...@@ -7,6 +7,7 @@ import cn.freemud.enums.OrderChannelType;
import cn.freemud.enums.ResponseResult; import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException; import cn.freemud.interceptor.ServiceException;
import cn.freemud.service.EncircleOrderService; import cn.freemud.service.EncircleOrderService;
import cn.freemud.service.MallOrderService;
import cn.freemud.service.OrderAdapterService; import cn.freemud.service.OrderAdapterService;
import cn.freemud.service.Orderservice; import cn.freemud.service.Orderservice;
import cn.freemud.utils.ResponseUtil; import cn.freemud.utils.ResponseUtil;
...@@ -38,6 +39,8 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -38,6 +39,8 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
private Orderservice orderservice; private Orderservice orderservice;
@Autowired @Autowired
private AssortmentCustomerInfoManager assortmentCustomerInfoManager; private AssortmentCustomerInfoManager assortmentCustomerInfoManager;
@Autowired
private MallOrderService mallOrderService;
@Override @Override
public BaseResponse createOrderNew(CreateOrderVo createOrderVo) { public BaseResponse createOrderNew(CreateOrderVo createOrderVo) {
...@@ -70,6 +73,14 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -70,6 +73,14 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
} }
return baseResponse; return baseResponse;
} }
/**
* 商城订单
*/
if(OrderChannelType.SAASMALL.getCode().equals(createOrderVo.getChannelType())) {
return mallOrderService.createOrder(createOrderVo);
}
//原标准点餐程序逻辑处理 //原标准点餐程序逻辑处理
BaseResponse baseResponse = this.checkStandardParamInfo(createOrderVo); BaseResponse baseResponse = this.checkStandardParamInfo(createOrderVo);
if(ObjectUtils.notEqual(baseResponse.getCode(),ResponseResult.SUCCESS.getCode())){ if(ObjectUtils.notEqual(baseResponse.getCode(),ResponseResult.SUCCESS.getCode())){
......
...@@ -215,6 +215,8 @@ public class OrderServiceImpl implements Orderservice { ...@@ -215,6 +215,8 @@ public class OrderServiceImpl implements Orderservice {
private AssortmentOpenPlatformWxappAuthorizerManager wxappAuthorizerManager; private AssortmentOpenPlatformWxappAuthorizerManager wxappAuthorizerManager;
@Autowired @Autowired
private PaymentNewClient paymentNewClient; private PaymentNewClient paymentNewClient;
@Autowired
private MallOrderServiceImpl mallOrderService;
...@@ -350,6 +352,10 @@ public class OrderServiceImpl implements Orderservice { ...@@ -350,6 +352,10 @@ public class OrderServiceImpl implements Orderservice {
message.setTrans_id(confirmOrderDto.getOrderId()); message.setTrans_id(confirmOrderDto.getOrderId());
return orderCommonService.paySuccessCallback(message); return orderCommonService.paySuccessCallback(message);
} }
// 商城订单处理
if(OrderSourceType.SAASMALL.getCode().equals(orderBean.getSource())) {
return mallOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans);
}
String oid = StringUtils.isNotEmpty(orderBean.getParentCode()) && !"0".equals(orderBean.getParentCode()) ? orderBean.getParentCode() : orderBean.getOid(); String oid = StringUtils.isNotEmpty(orderBean.getParentCode()) && !"0".equals(orderBean.getParentCode()) ? orderBean.getParentCode() : orderBean.getOid();
String partnerId = orderBean.getCompanyId(); String partnerId = orderBean.getCompanyId();
String userId = orderBean.getUserId(); String userId = orderBean.getUserId();
...@@ -654,7 +660,8 @@ public class OrderServiceImpl implements Orderservice { ...@@ -654,7 +660,8 @@ public class OrderServiceImpl implements Orderservice {
queryOrderDto.setPartnerId(queryOrderVo.getPartnerId()); queryOrderDto.setPartnerId(queryOrderVo.getPartnerId());
queryOrderDto.setStartDate(startDateStr); queryOrderDto.setStartDate(startDateStr);
queryOrderDto.setEndDate(endDateStr); queryOrderDto.setEndDate(endDateStr);
QueryOrdersDto queryOrdersDto = orderAdapter.convent2QueryOrdersDto(queryOrderDto, userId, userLoginInfoDto.getIappId()); String channelType = this.getQueryOrderChannelType(queryOrderVo, userLoginInfoDto);
QueryOrdersDto queryOrdersDto = orderAdapter.convent2QueryOrdersDto(queryOrderDto, userId, channelType);
QueryOrdersResponse queryOrderResponse; QueryOrdersResponse queryOrderResponse;
try { try {
QueryOrdersRequest queryOrdersRequest2 = new QueryOrdersRequest(); QueryOrdersRequest queryOrdersRequest2 = new QueryOrdersRequest();
...@@ -2373,4 +2380,19 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2373,4 +2380,19 @@ public class OrderServiceImpl implements Orderservice {
} }
/**
* 历史判断围餐是从userLoginInfoDto判断iappid的。
* 商城订单从前端传channelType区分,
* 默认点餐
*/
private String getQueryOrderChannelType(QueryOrderVo queryOrderVo, AssortmentCustomerInfoVo userLoginInfoDto) {
String channelType = OrderChannelType.SAAS.getCode();
if(IappIdType.WC_XCX.getCode().equals(userLoginInfoDto.getIappId())) {
channelType = OrderChannelType.IWC.getCode();
} else if(OrderChannelType.SAASMALL.getCode().equals(queryOrderVo.getChannelType())) {
channelType = OrderChannelType.SAASMALL.getCode();
}
return channelType;
}
} }
package cn.freemud.service.thirdparty;
import cn.freemud.entities.dto.delivery.QueryDeliveryAmountRequestDto;
import cn.freemud.entities.dto.delivery.QueryDeliveryAmountResponseDto;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(name = "DELIVERYCENTER", url = "${delivery.center.baseUrl}")
public interface DeliveryFeiginClient {
@PostMapping("/deliveryLogisticsAmount/queryDeliveryAmount")
QueryDeliveryAmountResponseDto queryDeliveryAmount(@RequestBody QueryDeliveryAmountRequestDto request);
}
package cn.freemud.service.thirdparty;
import cn.freemud.entities.dto.wechat.GetAuthorizerRequestDto;
import cn.freemud.entities.dto.wechat.GetTokenResponseDto;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(name = "WECHAT-APPLICATION-SERVICE",url = "${saas.wechatserviceclient.feign.url}")
@RequestMapping(produces = {"application/json;charset=UTF-8"})
public interface WechatApplicationServiceClient {
@PostMapping(value = "/token/application/delivery/getTokenForDelivery")
GetTokenResponseDto getToken(@RequestBody GetAuthorizerRequestDto request);
}
package cn.freemud.service.impl;
import cn.freemud.entities.vo.OrderAffirmRequestVO;
import cn.freemud.entities.vo.PaysuccessNoticeMessage;
import cn.freemud.utils.ValidationCode;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
@EnableDiscoveryClient
@EnableFeignClients
@EnableAutoConfiguration
public class MallOrderServiceImplTest {
@Autowired
private MallOrderServiceImpl mallOrderService;
@Before
public void before() throws Exception {
}
@After
public void after() throws Exception {
}
@Test
public void testPaySuccess() {
//0元支付
String fmId = "SPAY" + ValidationCode.getRandomUuid();
PaysuccessNoticeMessage message = new PaysuccessNoticeMessage();
message.setResult_code(100);
message.setOut_trade_no(fmId);
message.setTrans_id("16303606485084241800003");
message.setTotal_fee(0);
message.setOpenid("oORZK5MHMBm78PO302NdRyzIY5K0");
message.setPlatform_coupon(0);
message.setMerchant_coupon(0);
mallOrderService.paySuccessCallback(message);
}
@Test
public void testAffirm() {
OrderAffirmRequestVO requestVO = new OrderAffirmRequestVO();
requestVO.setPartnerId("1864");
requestVO.setShopId("8899");
requestVO.setSessionId("123123");
requestVO.setChannelType("saasmall");
requestVO.setOid("16303606485084241800003");
mallOrderService.orderAffirm(requestVO);
}
}
...@@ -30,6 +30,10 @@ public enum OrderClientType { ...@@ -30,6 +30,10 @@ public enum OrderClientType {
I_CARGO(14 , "i应用订货"), I_CARGO(14 , "i应用订货"),
POS(15 , "POS"), POS(15 , "POS"),
WAI_MEAL(19,"i围餐"), WAI_MEAL(19,"i围餐"),
JUBAOPEN(20, "美团聚宝盆"),
DIANPING(21, "美团点评"),
KOUBEI(22, "口碑"),
SAASMALL(23, "微商城"),
; ;
......
...@@ -96,6 +96,7 @@ public class ShoppingCartConvertAdapter { ...@@ -96,6 +96,7 @@ public class ShoppingCartConvertAdapter {
cartGoodsDetailDto.setCouponCode(cartGoods.getCouponCode()); cartGoodsDetailDto.setCouponCode(cartGoods.getCouponCode());
cartGoodsDetailDto.setStockLimit(cartGoods.isStockLimit()); cartGoodsDetailDto.setStockLimit(cartGoods.isStockLimit());
cartGoodsDetailDto.setCustomerCode(cartGoods.getCustomerCode()); cartGoodsDetailDto.setCustomerCode(cartGoods.getCustomerCode());
cartGoodsDetailDto.setWeight(cartGoods.getWeight());
cartGoodsDetailDto.setUnit(cartGoods.getUnit()); cartGoodsDetailDto.setUnit(cartGoods.getUnit());
cartGoodsDetailDto.setActivityDiscountsDtos(new ArrayList<>()); cartGoodsDetailDto.setActivityDiscountsDtos(new ArrayList<>());
cartGoodsDetailDto.setTotalDiscountAmount(0); cartGoodsDetailDto.setTotalDiscountAmount(0);
...@@ -234,6 +235,7 @@ public class ShoppingCartConvertAdapter { ...@@ -234,6 +235,7 @@ public class ShoppingCartConvertAdapter {
cartGoodsDetailDto.setIsFixedProduct(isFixed); cartGoodsDetailDto.setIsFixedProduct(isFixed);
cartGoodsDetailDto.setStockLimit(cartGoods.isStockLimit()); cartGoodsDetailDto.setStockLimit(cartGoods.isStockLimit());
cartGoodsDetailDto.setCustomerCode(comboxGoods.getCustomerCode()); cartGoodsDetailDto.setCustomerCode(comboxGoods.getCustomerCode());
cartGoodsDetailDto.setWeight(comboxGoods.getWeight());
cartGoodsDetailDto.setUnit(comboxGoods.getUnit()); cartGoodsDetailDto.setUnit(comboxGoods.getUnit());
List<ShoppingCartGoodsDto.CartGoodsDetailDto.CartGoodsExtra> cartGoodsExtras = BeanUtil.convertBeans(comboxGoods.getExtra(), ShoppingCartGoodsDto.CartGoodsDetailDto.CartGoodsExtra::new); List<ShoppingCartGoodsDto.CartGoodsDetailDto.CartGoodsExtra> cartGoodsExtras = BeanUtil.convertBeans(comboxGoods.getExtra(), ShoppingCartGoodsDto.CartGoodsDetailDto.CartGoodsExtra::new);
cartGoodsDetailDto.setExtraList(cartGoodsExtras); cartGoodsDetailDto.setExtraList(cartGoodsExtras);
......
...@@ -14,8 +14,11 @@ package cn.freemud.controller; ...@@ -14,8 +14,11 @@ package cn.freemud.controller;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.*; import cn.freemud.entities.vo.*;
import cn.freemud.enums.CreateOrderType;
import cn.freemud.enums.OrderChannelType;
import cn.freemud.enums.ResponseResult; import cn.freemud.enums.ResponseResult;
import cn.freemud.service.ShoppingCartNewService; import cn.freemud.service.ShoppingCartNewService;
import cn.freemud.service.impl.ShoppingCartMallServiceImpl;
import cn.freemud.service.impl.ShoppingCartMealServiceImpl; import cn.freemud.service.impl.ShoppingCartMealServiceImpl;
import cn.freemud.service.impl.ShoppingCartNewServiceImpl; import cn.freemud.service.impl.ShoppingCartNewServiceImpl;
import cn.freemud.utils.ResponseUtil; import cn.freemud.utils.ResponseUtil;
...@@ -52,7 +55,7 @@ public class ShoppingCartController { ...@@ -52,7 +55,7 @@ public class ShoppingCartController {
@ApiAnnotation(logMessage = "addGoodsByCard") @ApiAnnotation(logMessage = "addGoodsByCard")
@PostMapping(value = "/addGoodsByCard") @PostMapping(value = "/addGoodsByCard")
public BaseResponse addGoodsByCard(@Validated @LogParams @RequestBody AddGoodsByWeixinCardRequestVo request) { public BaseResponse addGoodsByCard(@Validated @LogParams @RequestBody AddGoodsByWeixinCardRequestVo request) {
return getInstanceBySessionId(request.getSessionId()).addGoodsByCard(request); return getInstanceByRequest(request).addGoodsByCard(request);
} }
/** /**
...@@ -61,7 +64,7 @@ public class ShoppingCartController { ...@@ -61,7 +64,7 @@ public class ShoppingCartController {
@ApiAnnotation(logMessage = "addGoods") @ApiAnnotation(logMessage = "addGoods")
@PostMapping(value = "/addGoods") @PostMapping(value = "/addGoods")
public BaseResponse addGoods(@Validated @LogParams @RequestBody AddShoppingCartGoodsRequestVo request) { public BaseResponse addGoods(@Validated @LogParams @RequestBody AddShoppingCartGoodsRequestVo request) {
return getInstanceBySessionId(request.getSessionId()).addGoods(request); return getInstanceByRequest(request).addGoods(request);
} }
/** /**
...@@ -70,7 +73,7 @@ public class ShoppingCartController { ...@@ -70,7 +73,7 @@ public class ShoppingCartController {
@ApiAnnotation(logMessage = "updateGoodsQty") @ApiAnnotation(logMessage = "updateGoodsQty")
@PostMapping(value = "/updateGoodsQty") @PostMapping(value = "/updateGoodsQty")
public BaseResponse updateGoodsQty(@Validated @LogParams @RequestBody UpdateShoppingCartGoodsQtyRequestVo request) { public BaseResponse updateGoodsQty(@Validated @LogParams @RequestBody UpdateShoppingCartGoodsQtyRequestVo request) {
return getInstanceBySessionId(request.getSessionId()).updateGoodsQty(request); return getInstanceByRequest(request).updateGoodsQty(request);
} }
/** /**
...@@ -79,7 +82,7 @@ public class ShoppingCartController { ...@@ -79,7 +82,7 @@ public class ShoppingCartController {
@ApiAnnotation(logMessage = "listCartGoods") @ApiAnnotation(logMessage = "listCartGoods")
@PostMapping(value = "/listCartGoods") @PostMapping(value = "/listCartGoods")
public BaseResponse listCartGoods(@Validated @LogParams @RequestBody ShoppingCartInfoRequestVo request) { public BaseResponse listCartGoods(@Validated @LogParams @RequestBody ShoppingCartInfoRequestVo request) {
return getInstanceBySessionId(request.getSessionId()).getGoodsList(request); return getInstanceByRequest(request).getGoodsList(request);
} }
/** /**
...@@ -89,7 +92,7 @@ public class ShoppingCartController { ...@@ -89,7 +92,7 @@ public class ShoppingCartController {
@ApiAnnotation(logMessage = "listCartGoodsCheck") @ApiAnnotation(logMessage = "listCartGoodsCheck")
@PostMapping(value = "/listCartGoodsCheck") @PostMapping(value = "/listCartGoodsCheck")
public BaseResponse listCartGoodsCheck(@Validated @LogParams @RequestBody ShoppingCartInfoRequestVo request) { public BaseResponse listCartGoodsCheck(@Validated @LogParams @RequestBody ShoppingCartInfoRequestVo request) {
return getInstanceBySessionId(request.getSessionId()).getGoodsListCheck(request); return getInstanceByRequest(request).getGoodsListCheck(request);
} }
// /** // /**
...@@ -115,7 +118,7 @@ public class ShoppingCartController { ...@@ -115,7 +118,7 @@ public class ShoppingCartController {
return getInstanceByIAppId(IappIdType.WC_XCX.getCode()).clear(request); return getInstanceByIAppId(IappIdType.WC_XCX.getCode()).clear(request);
} }
return getInstanceBySessionId(sessionId).clear(request); return getInstanceByRequest(request).clear(request);
} }
/** /**
...@@ -131,12 +134,20 @@ public class ShoppingCartController { ...@@ -131,12 +134,20 @@ public class ShoppingCartController {
return ResponseUtil.error(ResponseResult.NOT_LOGIN); return ResponseUtil.error(ResponseResult.NOT_LOGIN);
} }
ShoppingCartInfoRequestVo shoppingCartInfoRequestVo = getShoppingCartGoodsApportionRequestVo.getShoppingCartInfoRequestVo(); ShoppingCartInfoRequestVo shoppingCartInfoRequestVo = getShoppingCartGoodsApportionRequestVo.getShoppingCartInfoRequestVo();
return getInstanceBySessionId(shoppingCartInfoRequestVo.getSessionId()). return getInstanceByRequest(shoppingCartInfoRequestVo).
getShoppingCartGoods(shoppingCartInfoRequestVo, getShoppingCartGoods(shoppingCartInfoRequestVo,
getShoppingCartGoodsApportionRequestVo.getPremiumExchangeActivity()); getShoppingCartGoodsApportionRequestVo.getPremiumExchangeActivity());
} }
private ShoppingCartNewService getInstanceByRequest(BaseRequestVo requestVo) {
if(requestVo.getChannelType() != null && OrderChannelType.SAASMALL.getCode().equals(requestVo.getChannelType())) {
return SDKCommonBaseContextWare.getBean(ShoppingCartMallServiceImpl.class);
} else {
return getInstanceBySessionId(requestVo.getSessionId());
}
}
private ShoppingCartNewService getInstanceBySessionId(String sessionId) { private ShoppingCartNewService getInstanceBySessionId(String sessionId) {
AssortmentCustomerInfoVo assortmentCustomerInfoVo = customerInfoManager.getCustomerInfoByObject(sessionId); AssortmentCustomerInfoVo assortmentCustomerInfoVo = customerInfoManager.getCustomerInfoByObject(sessionId);
......
...@@ -179,6 +179,10 @@ public class ShoppingCartGoodsDto { ...@@ -179,6 +179,10 @@ public class ShoppingCartGoodsDto {
*/ */
private String customerCode; private String customerCode;
/** /**
* 重量
*/
private Double weight;
/**
* 单位 * 单位
*/ */
private String unit; private String unit;
......
...@@ -18,22 +18,11 @@ import javax.validation.constraints.NotNull; ...@@ -18,22 +18,11 @@ import javax.validation.constraints.NotNull;
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目 * 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/ */
@Data @Data
public class AddGoodsByWeixinCardRequestVo { public class AddGoodsByWeixinCardRequestVo extends BaseRequestVo{
@NotEmpty(message = "sessionId不能为空") @NotEmpty(message = "sessionId不能为空")
private String sessionId; private String sessionId;
/** /**
* 商户Id
*/
@NotEmpty(message = "partnerId不能为空")
private String partnerId;
/**
* 门店Id
*/
@NotEmpty(message = "shopId不能为空")
private String shopId;
/**
* 微信appId * 微信appId
*/ */
@NotEmpty(message = "appId不能为空") @NotEmpty(message = "appId不能为空")
......
...@@ -19,20 +19,10 @@ import org.hibernate.validator.constraints.NotEmpty; ...@@ -19,20 +19,10 @@ import org.hibernate.validator.constraints.NotEmpty;
import java.util.List; import java.util.List;
@Data @Data
public class AddShoppingCartGoodsRequestVo { public class AddShoppingCartGoodsRequestVo extends BaseRequestVo{
@NotEmpty(message = "sessionId不能为空") @NotEmpty(message = "sessionId不能为空")
private String sessionId; private String sessionId;
/**
* 商户Id
*/
@NotEmpty(message = "partnerId不能为空")
private String partnerId;
/**
* 门店Id
*/
@NotEmpty(message = "shopId不能为空")
private String shopId;
/** /**
* 微信appId * 微信appId
...@@ -49,11 +39,6 @@ public class AddShoppingCartGoodsRequestVo { ...@@ -49,11 +39,6 @@ public class AddShoppingCartGoodsRequestVo {
*/ */
private List<CartGoods.CartGoodsExtra> extra; private List<CartGoods.CartGoodsExtra> extra;
/**
* 下单类型 CreateOrderType 自取和外卖
*/
private Integer orderType;
private String version; private String version;
/** /**
...@@ -77,7 +62,9 @@ public class AddShoppingCartGoodsRequestVo { ...@@ -77,7 +62,9 @@ public class AddShoppingCartGoodsRequestVo {
private String appType; private String appType;
private String tableNumber; private String tableNumber;
/**
* 数量
*/
private Integer qty; private Integer qty;
/** /**
......
package cn.freemud.entities.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.NotEmpty;
@Data
public class BaseRequestVo {
private String sessionId;
/**
* 商户Id
*/
@NotEmpty(message = "partnerId不能为空")
private String partnerId;
/**
* 门店Id
* 商城没有门店id,如果需要门店id必传在业务中进行校验
*/
//@NotEmpty(message = "shopId不能为空")
private String shopId;
/**
* 下单类型 CreateOrderType 外卖、到店、商城
*/
private Integer orderType;
/**
* 渠道类型 OrderChannelType
*/
private String channelType;
}
...@@ -40,6 +40,10 @@ public class CartGoods { ...@@ -40,6 +40,10 @@ public class CartGoods {
*/ */
private boolean weightType; private boolean weightType;
/** /**
* 重量
*/
private Double weight;
/**
* 单位 * 单位
*/ */
private String unit; private String unit;
...@@ -222,6 +226,10 @@ public class CartGoods { ...@@ -222,6 +226,10 @@ public class CartGoods {
*/ */
private boolean weightType; private boolean weightType;
/** /**
* 重量
*/
private Double weight;
/**
* 单位 * 单位
*/ */
private String unit; private String unit;
......
...@@ -16,21 +16,12 @@ import lombok.Data; ...@@ -16,21 +16,12 @@ import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.constraints.NotEmpty;
@Data @Data
public class ShoppingCartClearRequestVo { public class ShoppingCartClearRequestVo extends BaseRequestVo {
// @NotEmpty(message = "sessionId不能为空")
private String sessionId;
@NotEmpty(message = "partnerId不能为空")
private String partnerId;
@NotEmpty(message = "shopId不能为空")
private String shopId;
//@NotEmpty(message = "appId不能为空") //@NotEmpty(message = "appId不能为空")
private String appId; private String appId;
private String userId; private String userId;
private Integer orderType;
/** /**
* 清空操作类型(围餐) * 清空操作类型(围餐)
* 1:下单成功清理下单购物车 * 1:下单成功清理下单购物车
......
...@@ -25,7 +25,10 @@ import java.util.List; ...@@ -25,7 +25,10 @@ import java.util.List;
@NoArgsConstructor @NoArgsConstructor
@Data @Data
@Builder @Builder
public class ShoppingCartInfoRequestVo { public class ShoppingCartInfoRequestVo extends BaseRequestVo {
@NotEmpty(message = "sessionId不能为空")
private String sessionId;
private String version; private String version;
/** /**
...@@ -33,15 +36,6 @@ public class ShoppingCartInfoRequestVo { ...@@ -33,15 +36,6 @@ public class ShoppingCartInfoRequestVo {
*/ */
private Integer carVer; private Integer carVer;
@NotEmpty(message = "sessionId不能为空")
private String sessionId;
@NotEmpty(message = "partnerId不能为空")
private String partnerId;
@NotEmpty(message = "shopId不能为空")
private String shopId;
@NotEmpty(message = "appId不能为空") @NotEmpty(message = "appId不能为空")
private String appId; private String appId;
/** /**
...@@ -58,10 +52,6 @@ public class ShoppingCartInfoRequestVo { ...@@ -58,10 +52,6 @@ public class ShoppingCartInfoRequestVo {
* 优惠券对应的活动号 * 优惠券对应的活动号
*/ */
private String activityCode; private String activityCode;
/**
* 下单类型 CreateOrderType 自取和外卖
*/
private Integer orderType;
/** /**
* 到店类型 orderType 传1的时候 如果reachStoreTyp为空转成订单类型4 如果不为空存储4(打包带走)和5(店内就餐) * 到店类型 orderType 传1的时候 如果reachStoreTyp为空转成订单类型4 如果不为空存储4(打包带走)和5(店内就餐)
......
...@@ -18,20 +18,10 @@ import org.hibernate.validator.constraints.NotEmpty; ...@@ -18,20 +18,10 @@ import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
@Data @Data
public class UpdateShoppingCartGoodsQtyRequestVo { public class UpdateShoppingCartGoodsQtyRequestVo extends BaseRequestVo {
@NotEmpty(message = "sessionId不能为空") @NotEmpty(message = "sessionId不能为空")
private String sessionId; private String sessionId;
/**
* 商户Id
*/
@NotEmpty(message = "partnerId不能为空")
private String partnerId;
/**
* 门店Id
*/
@NotEmpty(message = "shopId不能为空")
private String shopId;
@NotEmpty(message = "appId不能为空") @NotEmpty(message = "appId不能为空")
private String appId; private String appId;
...@@ -47,11 +37,6 @@ public class UpdateShoppingCartGoodsQtyRequestVo { ...@@ -47,11 +37,6 @@ public class UpdateShoppingCartGoodsQtyRequestVo {
@NotNull(message = "qty不能为空") @NotNull(message = "qty不能为空")
private Integer qty; private Integer qty;
/**
* 下单类型 CreateOrderType 自取和外卖
*/
private Integer orderType;
private String version; private String version;
/** /**
* 购物车版本号(围餐) * 购物车版本号(围餐)
......
...@@ -16,7 +16,9 @@ public enum OrderChannelType { ...@@ -16,7 +16,9 @@ public enum OrderChannelType {
SAAS("saas", "saas小程序"), SAAS("saas", "saas小程序"),
IMG("img", "爱马哥小程序"); IMG("img", "爱马哥小程序"),
SAASMALL("saasmall", "商城");
private String code; private String code;
......
...@@ -28,7 +28,10 @@ public enum OrderSourceType { ...@@ -28,7 +28,10 @@ public enum OrderSourceType {
MALL("mall", "非码Mall"), MALL("mall", "非码Mall"),
SAAS("saas", "saas 点餐"); SAAS("saas", "saas 点餐"),
SAASMALL("saasmall", "微商城"),
;
private String code; private String code;
......
...@@ -57,6 +57,7 @@ public enum ResponseResult { ...@@ -57,6 +57,7 @@ public enum ResponseResult {
STORE_ITEM_NOT_IN_DELIVERY_LIMIT_AMOUNT("43009", "订单金额未满足门店起送费"), STORE_ITEM_NOT_IN_DELIVERY_LIMIT_AMOUNT("43009", "订单金额未满足门店起送费"),
STORE_BUSINESS_HOUR_ERROR("43010", "门店营业时间错误"), STORE_BUSINESS_HOUR_ERROR("43010", "门店营业时间错误"),
STORE_NOT_ENABLE_COLLECT_GOODS("43011", "门店不支持到店"), STORE_NOT_ENABLE_COLLECT_GOODS("43011", "门店不支持到店"),
STORE_MALL_NOT_FOUND("43012", "商城门店不存在"),
/** /**
* 购物车状态码 * 购物车状态码
......
package cn.freemud.controller;
import cn.freemud.ShoppingCartApplication;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.*;
import cn.freemud.enums.ResponseResult;
import com.alibaba.fastjson.JSONObject;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import java.util.ArrayList;
import java.util.List;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: ShoppingCartControllerTest
* @Package cn.freemud.controller
* @Description: 简单描述下这个类是做什么用的
* @author: zhenghuan.yang
* @date: 2018/6/25 17:30
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = ShoppingCartApplication.class)
public class ShoppingCartControllerMallTest {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setUp() {
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
/**
* 添加商品
*/
@Test
public void addGoods() {
String str = "{\"spuId\":\"154916516745371156\",\"skuId\":\"\",\"qty\":10,\"categoryId\":\"0101\",\"categoryName\":\"1分钱\"," +
"\"productComboList\":[],\"productGroupList\":[],\"channelType\":\"saasmall\",\"partnerId\":\"1864\",\"appId\":\"wxb78fb7c6218cb52c\"," +
"\"sessionId\":\"testMallUser\",\"orderType\":\"\",\"shopId\":\"0000622\"}";
try {
mockMvc.perform(post("/shoppingCart/addGoods").content(str).
contentType(MediaType.APPLICATION_JSON_UTF8).accept(MediaType.APPLICATION_JSON_UTF8)).andDo(print()).
andExpect(jsonPath("$.code").value("100"));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 更新数量
*/
@Test
public void updateGoodsQty() {
String requestJson = "{\"shopId\":\"0000622\",\"cartGoodsUid\":\"3c6c126b-ce1a-4489-930d-28940c4edb0a\",\"qty\":3,\"channelType\":\"saasmall\"," +
"\"partnerId\":\"1864\",\"appId\":\"wxb78fb7c6218cb52c\",\"sessionId\":\"testMallUser\",\"orderType\":\"\"}";
try {
mockMvc.perform(post("/shoppingCart/updateGoodsQty").content(requestJson).
contentType(MediaType.APPLICATION_JSON_UTF8).accept(MediaType.APPLICATION_JSON_UTF8)).andDo(print()).
andExpect(jsonPath("$.code").value("100"));
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void listCartGoods() {
String requestJson = "{\"shopId\":\"0000622\",\"useCustomerScore\":0,\"couponCode\":\"\",\"activityCode\":\"\",\"flag\":\"\",\"sendGoods\":[]," +
"\"buyMemberCard\":null,\"channelType\":\"saasmall\",\"partnerId\":\"1864\",\"appId\":\"wxb78fb7c6218cb52c\",\"sessionId\":\"testMallUser\",\"orderType\":\"\"}";
try {
mockMvc.perform(post("/shoppingCart/listCartGoods").content(requestJson).
contentType(MediaType.APPLICATION_JSON_UTF8).accept(MediaType.APPLICATION_JSON_UTF8)).andDo(print()).
andExpect(jsonPath("$.code").value("100"));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 清空购物车
*/
@Test
public void clearCartGoods() {
String str = "{\"channelType\":\"saasmall\",\"partnerId\":\"1864\",\"appId\":\"wxb78fb7c6218cb52c\",\"sessionId\":\"testMallUser\",\"orderType\":\"\",\"shopId\":\"0000622\"}";
try {
mockMvc.perform(post("/shoppingCart/clearCartGoods").content(str).
contentType(MediaType.APPLICATION_JSON_UTF8).accept(MediaType.APPLICATION_JSON_UTF8)).andDo(print()).
andExpect(jsonPath("$.code").value("100"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
...@@ -83,11 +83,10 @@ public class ShoppingCartControllerTest { ...@@ -83,11 +83,10 @@ public class ShoppingCartControllerTest {
*/ */
@Test @Test
public void getDetail() { public void getDetail() {
ShoppingCartInfoRequestVo shoppingCartInfoRequestVo = ShoppingCartInfoRequestVo.builder() ShoppingCartInfoRequestVo shoppingCartInfoRequestVo = new ShoppingCartInfoRequestVo();
.partnerId("360bb48b-5316-458a-903e-9a44c7f339b1") shoppingCartInfoRequestVo.setPartnerId("360bb48b-5316-458a-903e-9a44c7f339b1");
.sessionId("107001391351857666") shoppingCartInfoRequestVo.setSessionId("107001391351857666");
.shopId("1036") shoppingCartInfoRequestVo.setShopId("1036");
.build();
String str = JSONObject.toJSONString(shoppingCartInfoRequestVo); String str = JSONObject.toJSONString(shoppingCartInfoRequestVo);
try { try {
mockMvc.perform(post("/shoppingCart/info").content(str). mockMvc.perform(post("/shoppingCart/info").content(str).
......
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