Commit f7f2b9f7 by dingkai

Merge branch 'feature/1.9.13-mall-20200219-dingkai' into feature/1.9.13-dev-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/src/main/java/com/freemud/sdk/api/assortment/shoppingcart/adapter/ShoppingCartAdapter.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
parent a89fa266
......@@ -310,6 +310,7 @@ public class ShoppingCartAdapter {
cartGoods.setAmount(newOrigOriginalPrice * cartGoods.getQty());
//咨询商品服务,套餐售价取originalPrice
cartGoods.setFinalPrice(isSetMealProduct ? spuProduct.getOriginalPrice() : isSkuProduct ? skuProduct.getFinalPrice() : spuProduct.getFinalPrice());
cartGoods.setWeight(spuProduct.getWeight());
cartGoods.setUnit(spuProduct.getUnit());
cartGoods.setWeightType(CommonsConstant.WEIGHT_PRODUCT.equals(spuProduct.getWeightType()));
} catch (Exception ex) {
......
......@@ -2,12 +2,11 @@ package cn.freemud.adapter;
import cn.freemud.entities.dto.StoreDeliveryInfoDto;
import cn.freemud.entities.dto.UserDeliveryInfoDto;
import cn.freemud.entities.dto.shoppingCart.ActivityDiscountsDto;
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 cn.freemud.enums.*;
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;
......@@ -130,7 +129,7 @@ public class MallOrderAdapter {
createOrderDto.setPayType(QueryPayType.ONLINE_PAY);
createOrderDto.setSource(OrderSourceType.SAASMALL.getCode());
createOrderDto.setSourceName(OrderSourceType.SAASMALL.getDesc());
createOrderDto.setOrderClientType(OrderClientType.SAASMALL);
createOrderDto.setOrderClient(OrderClientType.SAASMALL);
createOrderDto.setRemark(remark);
createOrderDto.setGmtExpect(null);
BaseCreateOrderRequest.DeliveryTypeInfo deliveryTypeInfo = new BaseCreateOrderRequest.DeliveryTypeInfo();
......@@ -141,6 +140,7 @@ public class MallOrderAdapter {
createOrderDto.setProvince(userDeliveryInfoDto.getReceiveProvince());
createOrderDto.setCity(userDeliveryInfoDto.getReceiveCity());
createOrderDto.setRegion(userDeliveryInfoDto.getReceiveRegion());
createOrderDto.setMenuType(BusinessTypeEnum.SAAS_MALL.getName());
return createOrderDto;
}
......
......@@ -12,65 +12,136 @@
*/
package cn.freemud.service.impl;
import cn.freemud.base.util.DateUtil;
import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.constant.StoreConstant;
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.BusinessTypeEnum;
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.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager;
import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
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;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@Component
public class CheckMallOrder {
@Autowired
private ShoppingCartClient shoppingCartClient;
@Autowired
private CheckOrder checkOrder;
// 缓存取用户数据用
private ThirdDeliveryServiceImpl thirdDeliveryService;
@Autowired
private UserServiceImpl userService;
private AssortmentCustomerInfoManager customerInfoManager;
@Autowired
private ThirdDeliveryServiceImpl thirdDeliveryService;
private StoreCenterService storeCenterService;
/**
* 下单会员相关校验
*/
public UserLoginInfoDto checkOrderByMember(CreateOrderVo createOrderVo, String trackingNo) {
public AssortmentCustomerInfoVo checkOrderByMember(CreateOrderVo createOrderVo) {
// 通过sessionId查询缓存中会员id
UserLoginInfoDto userLoginInfoDto = userService.getUserLoginInfoBySessionId(createOrderVo.getSessionId());
String sessionId = createOrderVo.getSessionId();
AssortmentCustomerInfoVo userLoginInfoDto = customerInfoManager.getCustomerInfoByObject(sessionId);
if (userLoginInfoDto == null || StringUtils.isEmpty(userLoginInfoDto.getMemberId())) {
throw new ServiceException(ResponseResult.NOT_LOGIN);
}
createOrderVo.setUserId(userLoginInfoDto.getMemberId());
return userLoginInfoDto;
}
/**
* 查询门店信息
*/
public StoreResponse getStoreInfo(String partnerId, String shopId, String trackingNo) {
// 获取门店信息
StoreInfoRequest storeInfoRequest = new StoreInfoRequest(partnerId, shopId,null);
return storeCenterService.getStoreInfo(storeInfoRequest, trackingNo);
}
/**
* 下单门店相关校验
*/
public StoreResponse.BizVO checkOrderByStore(CreateOrderVo createOrderVo, String trackingNo) {
return checkOrder.checkOrderByStore(createOrderVo, trackingNo);
String partnerId = createOrderVo.getPartnerId();
String shopId = createOrderVo.getShopId();
// 获取门店信息
StoreResponse storeResponse = getStoreInfo(partnerId, shopId, trackingNo);
if (storeResponse == null || storeResponse.getBizVO() == null) {
throw new ServiceException(ResponseResult.STORE_NOT_FOUND);
}
StoreResponse.BizVO storeResponseDto = storeResponse.getBizVO();
// 校验门店是否停业 1 营业 2 停业 3 繁忙置休
if (storeResponseDto.getActiveFlag() == null || storeResponseDto.getActiveFlag() != 1) {
throw new ServiceException(ResponseResult.STORE_ITEM_STOP_BUSINESS);
}
if (!StoreConstant.BUSINESS.equals(storeResponseDto.getState())) {
throw new ServiceException(ResponseResult.STORE_ITEM_CHECK_CLOSE);
}
//设置营业开始和结束时间
String businessHourStr = storeResponseDto.getBusinessHoursDay().replace("-", ",").replace("_", ",");
String[] businessHours = businessHourStr.split(",");
if (businessHours.length != 2) {
throw new ServiceException(ResponseResult.STORE_NOT_FOUND);
}
Date date = new Date();
String startDateTimeStr = DateUtil.convert2String(date, DateUtil.FORMAT_YMD) + " " + businessHours[0] + ":00";
Date startDateTime = DateUtil.convert2Date(startDateTimeStr, DateUtil.FORMAT_YYYY_MM_DD_HHMMSS);
String endDateTimeStr = DateUtil.convert2String(date, DateUtil.FORMAT_YMD) + " " + businessHours[1] + ":00";
SimpleDateFormat hhmmss = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date endDateTime;
try {
endDateTime = hhmmss.parse(endDateTimeStr);
} catch (ParseException e) {
throw new ServiceException(ResponseResult.STORE_BUSINESS_HOUR_ERROR);
}
storeResponseDto.setBusinessHoursDayStartTime(startDateTime);
storeResponseDto.setBusinessHoursDayEndTime(endDateTime);
// 校验门店是否打烊,打烊了则不让操作
if (storeResponseDto.getBusinessHoursDayStartTime() == null
|| storeResponseDto.getBusinessHoursDayEndTime() == null) {
throw new ServiceException(ResponseResult.STORE_ITEM_STOP_BUSINESS);
}
// 桌号不为空,查数据库重新设置桌号
/*if (StringUtils.isNotBlank(createOrderVo.getTableNumber())) {
createOrderVo.setTableNumber(getTableNumber(partnerId, shopId, createOrderVo.getTableNumber()));
}*/
createOrderVo.setStoreName(storeResponseDto.getStoreName());
createOrderVo.setStoreAddress(storeResponseDto.getAddress());
createOrderVo.setThirdShopId(storeResponseDto.getThirdPartCode());
return storeResponseDto;
}
/**
* 下单配送相关校验
*/
public void checkOrderByDelivery(CreateOrderVo createOrderVo, UserLoginInfoDto userLoginInfoDto,
public void checkOrderByDelivery(CreateOrderVo createOrderVo, AssortmentCustomerInfoVo userLoginInfoDto,
StoreResponse.BizVO storeResponseDto,Long totalAmount, String trackingNo) {
StoreDeliveryInfoDto storeDeliveryInfoDto = this.getStoreDeliveryInfo(storeResponseDto, userLoginInfoDto.getWxAppid());
StoreDeliveryInfoDto storeDeliveryInfoDto = this.getStoreDeliveryInfo(storeResponseDto, userLoginInfoDto.getWxAppId());
//订单金额小于起送费提示
if (storeDeliveryInfoDto.getDeliveryLimitAmount() > totalAmount) {
throw new ServiceException(ResponseResult.STORE_DISCONTENT_DELIVERY_FEE);
......@@ -90,6 +161,7 @@ public class CheckMallOrder {
.flag(CouponFlag.NO.getCode())
.useCustomerScore(createOrderVo.getUseCustomerScore())
.channelType(OrderChannelType.SAASMALL.getCode())
.menuType(BusinessTypeEnum.SAAS_MALL.getName())
.build();
// 通过购物车获取优惠信息
GetShoppingCartGoodsApportionDto requestDto = new GetShoppingCartGoodsApportionDto();
......
......@@ -33,6 +33,7 @@ import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustome
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.productcenter.domain.ProductBeanDTO;
import com.freemud.sdk.api.assortment.shoppingcart.constant.CommonsConstant;
import com.freemud.sdk.api.assortment.shoppingcart.enums.BusinessTypeEnum;
import com.freemud.sdk.api.assortment.shoppingcart.request.CheckCartRequest;
import com.freemud.sdk.api.assortment.shoppingcart.service.ShoppingCartBaseService;
import com.freemud.sdk.api.assortment.shoppingcart.service.impl.ShoppingCartMallBaseServiceImpl;
......@@ -110,7 +111,7 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService {
//商品skuId或者商品券的商品id
String spuId2 = spuId;
// 获取商品详细信息
List<ProductBeanDTO> productBeanListSpuClass = assortmentSdkService.getProductsInfoSdk(partnerId, storeId, Collections.singletonList(spuId2), this.shoppingCartBaseService);
List<ProductBeanDTO> productBeanListSpuClass = assortmentSdkService.getProductsInfoSdk(partnerId, storeId, Collections.singletonList(spuId2), BusinessTypeEnum.SAAS_MALL.getCode(), this.shoppingCartBaseService);
//查询多个商品库存信息
queryManyGoodsStocks(addShoppingCartGoodsRequestVo, productIds, productBeanListSpuClass, skuId);
......@@ -198,7 +199,7 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService {
List<CartGoods> cartGoodsList = assortmentSdkService.updateGoodsQtyBySdk(partnerId, userId, storeId, cartGoodsUid, qty, "", shoppingCartBaseService);
// check购物车中所有商品
CheckCartRequest checkCartRequest = assortmentSdkService.checkShoppingCartSdk(cartGoodsList, partnerId, storeId, shoppingCartGoodsResponseVo, updateShoppingCartGoodsQtyRequestVo.getOrderType(), "", shoppingCartBaseService);
CheckCartRequest checkCartRequest = assortmentSdkService.checkShoppingCartSdk(cartGoodsList, partnerId, storeId, shoppingCartGoodsResponseVo, updateShoppingCartGoodsQtyRequestVo.getOrderType(), "", BusinessTypeEnum.SAAS_MALL.getName() ,shoppingCartBaseService);
if (checkCartRequest.getShoppingCartGoodsResponseVo() != null) {
shoppingCartGoodsResponseVo.setToastMsg(checkCartRequest.getShoppingCartGoodsResponseVo().getToastMsg());
}
......@@ -231,7 +232,7 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService {
//查询商品信息
List<String> pids = new ArrayList<>();
pids.add(cartGoods.getGoodsId());
Map<String, GetProductsVo> products = itemService.getProducts(pids, partnerId, storeId);
Map<String, GetProductsVo> products = itemService.getProducts(pids, partnerId, storeId,BusinessTypeEnum.SAAS_MALL.getCode());
GetProductsVo getProductsVo = products.get(cartGoods.getGoodsId());
// 商品没有库存限制
......@@ -239,7 +240,7 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService {
return;
}
GetProductStockRequestDto requestDto = new GetProductStockRequestDto();
requestDto.setChannel("saas");
requestDto.setChannel(BusinessTypeEnum.SAAS_MALL.getCode());
requestDto.setPartnerId(partnerId);
requestDto.setStoreId(storeId);
requestDto.setProductIds(Collections.singletonList(Long.parseLong(cartGoods.getGoodsId())));
......@@ -276,7 +277,7 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService {
cartGoodsList = new ArrayList<>();
}
// check购物车中所有商品
CheckCartRequest checkCartRequest = assortmentSdkService.checkShoppingCartSdk(cartGoodsList, partnerId, storeId, shoppingCartGoodsResponseVo, shoppingCartInfoRequestVo.getOrderType(), "", shoppingCartBaseService);
CheckCartRequest checkCartRequest = assortmentSdkService.checkShoppingCartSdk(cartGoodsList, partnerId, storeId, shoppingCartGoodsResponseVo, shoppingCartInfoRequestVo.getOrderType(), "", BusinessTypeEnum.SAAS_MALL.getName() ,shoppingCartBaseService);
if (checkCartRequest.getShoppingCartGoodsResponseVo() != null) {
shoppingCartGoodsResponseVo.setToastMsg(checkCartRequest.getShoppingCartGoodsResponseVo().getToastMsg());
}
......@@ -365,7 +366,7 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService {
throw new ServiceException(ResponseResult.SHOPPING_CART_GETINFO_INVAILD);
}
// check购物车中所有商品(商品是否存在,价格变动,券是否支持当前点餐方式)
CheckCartRequest checkCartRequest = assortmentSdkService.checkShoppingCartSdk(cartGoodsList, partnerId, storeId, shoppingCartGoodsResponseVo, shoppingCartInfoRequestVo.getOrderType(), "", shoppingCartBaseService);
CheckCartRequest checkCartRequest = assortmentSdkService.checkShoppingCartSdk(cartGoodsList, partnerId, storeId, shoppingCartGoodsResponseVo, shoppingCartInfoRequestVo.getOrderType(), "", BusinessTypeEnum.SAAS_MALL.getName() ,shoppingCartBaseService);
com.freemud.sdk.api.assortment.shoppingcart.domain.ShoppingCartGoodsResponseVo cartGoodsResponseVo = checkCartRequest.getShoppingCartGoodsResponseVo();
//商品不再售卖状态或价格变动,直接返回报错
if (cartGoodsResponseVo != null) {
......@@ -385,7 +386,7 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService {
assortmentSdkService.setShoppingCart(partnerId, storeId, userId, cartGoodsList, assortmentCustomerInfoVo.getSessionId(), "", this.shoppingCartBaseService);
if (CollectionUtils.isNotEmpty(sendGoodsList)) {
processSendGoods(sendGoodsList, partnerId, storeId, shoppingCartBaseService);
processSendGoods(sendGoodsList, partnerId, storeId,BusinessTypeEnum.SAAS_MALL.getName(), shoppingCartBaseService);
} else {
//组装加价购商品
if (null != premiumExchangeActivity && CollectionUtils.isNotEmpty(premiumExchangeActivity.getProducts())) {
......@@ -412,7 +413,7 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService {
@Override
public ActivityCalculationDiscountResponseDto.CalculationDiscountResult getActivityCalculationDiscountResponse(
String partnerId, String storeId, String userId, String appId, Integer orderType, List<CartGoods> cartGoodsList,
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons, List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList) {
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons, List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList,String menuType) {
return null;
}
......@@ -424,10 +425,10 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService {
* @param partnerId
* @param storeId
*/
private void processSendGoods(List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList, String partnerId, String storeId, ShoppingCartBaseService shoppingCartService) {
private void processSendGoods(List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList, String partnerId, String storeId,String menuType, ShoppingCartBaseService shoppingCartService) {
List<String> goodsIds = sendGoodsList.parallelStream().map(ShoppingCartInfoRequestVo.SendGoods::getGoodsId).collect(Collectors.toList());
List<ProductBeanDTO> productBeanList =
assortmentSdkService.getProductsInfoSdk(partnerId, storeId, goodsIds, shoppingCartService);
assortmentSdkService.getProductsInfoSdk(partnerId, storeId, goodsIds,menuType, shoppingCartService);
// 将productBeanList转换为Map,key为pid,即goodsId
Map<String, ProductBeanDTO> productBeanMap = productBeanList.parallelStream()
.collect(Collectors.toMap(ProductBeanDTO::getPid, Function.identity(), (k1, k2) -> k1));
......@@ -527,7 +528,7 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService {
//当商品全部添加完毕,校验购物车商品(是否合法,上下架,点餐方式,是否在当前菜单中...),并移除非法商品
CheckCartRequest checkCartRequest = assortmentSdkService.checkShoppingCartSdk(oldAllCartGoodsList, addShoppingCartGoodsRequestVo.getPartnerId(),
addShoppingCartGoodsRequestVo.getShopId(), shoppingCartGoodsResponseVo, addShoppingCartGoodsRequestVo.getOrderType(), "", shoppingCartBaseService);
addShoppingCartGoodsRequestVo.getShopId(), shoppingCartGoodsResponseVo, addShoppingCartGoodsRequestVo.getOrderType(), "",BusinessTypeEnum.SAAS_MALL.getName(), shoppingCartBaseService);
if (checkCartRequest.getShoppingCartGoodsResponseVo() != null) {
shoppingCartGoodsResponseVo.setToastMsg(checkCartRequest.getShoppingCartGoodsResponseVo().getToastMsg());
}
......@@ -590,7 +591,7 @@ public class ShoppingCartMallServiceImpl implements ShoppingCartNewService {
private void queryManyGoodsStocks(AddShoppingCartGoodsRequestVo addShoppingCartGoodsRequestVo, List<Long> productIds
, List<ProductBeanDTO> productBeanListSpuClass, String skuId) {
GetProductStockRequestDto requestDto = new GetProductStockRequestDto();
requestDto.setChannel("saas");
requestDto.setChannel(BusinessTypeEnum.SAAS_MALL.getCode());
requestDto.setPartnerId(addShoppingCartGoodsRequestVo.getPartnerId());
requestDto.setStoreId(addShoppingCartGoodsRequestVo.getShopId());
requestDto.setProductIds(productIds);
......
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