Commit bbc23cc4 by ping.wu

Merge branches 'feature/20200423_蜜雪新下单接口_wuping' and 'master' of…

Merge branches 'feature/20200423_蜜雪新下单接口_wuping' and 'master' of http://gitlab.freemud.com/order-group-application/order-group
parents 1cfa3eb5 f41f2bdd
...@@ -85,6 +85,15 @@ public class OrderController { ...@@ -85,6 +85,15 @@ public class OrderController {
} }
/** /**
* APP下单,下单带商品信息,不经过购物车服务,不唤起支付
*/
@ApiAnnotation(logMessage = "appCreateOrder")
@PostMapping("/app/create")
public BaseResponse appCreateOrder(@Validated @LogParams @RequestBody AppCreateOrderVo createOrderVo) {
return orderAdapterService.appCreateOrder(createOrderVo);
}
/**
* 订单支付成功后通知 * 订单支付成功后通知
*/ */
@ApiAnnotation(logMessage = "paySuccessCallback") @ApiAnnotation(logMessage = "paySuccessCallback")
......
...@@ -64,7 +64,7 @@ public class ShoppingCartGoodsDto { ...@@ -64,7 +64,7 @@ public class ShoppingCartGoodsDto {
*/ */
List<ActivityDiscountsDto> activityDiscountsDtos; List<ActivityDiscountsDto> activityDiscountsDtos;
/** /**
* 库存 * 活动库存
*/ */
private List<SubtractStockVO> stocks; private List<SubtractStockVO> stocks;
......
package cn.freemud.entities.vo;
import cn.freemud.entities.dto.CreateOrderProductDto;
import cn.freemud.entities.dto.UserDeliveryInfoDto;
import cn.freemud.entities.dto.delivery.WeixinDeliveryAddressDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: AppCreateOrderVo
* @Package cn.freemud.entities
* @Description:
* @author: ping1.wu
* @date: 2020/4/23 16:39
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class AppCreateOrderVo {
@NotEmpty(message = "sessionId 不能为空")
private String sessionId;
private String partnerId;
//@NotEmpty(message = "门店ID 不能为空") //本次需要根据业务做校验
private String shopId;
private String thirdShopId;
/**
* 订单类型 1 到店自取 2 外卖 枚举CreateOrderType
*/
//@NotNull(message = "下单类型不能为空")
private Integer orderType;
/**
* 到店类型 4(打包带走)和5(店内就餐)
*/
private Integer reachStoreType;
/**
* 取餐时间
*/
private String takeMealTime;
/**
* 订单备注
*/
private String orderRemark;
/**
* 收货地址ID
*/
private String receiveId;
/**
* 收货人性别 sexType 1 男 2 女 0 未知
*/
private Integer sex;
@Builder.Default
private String menuType = "saas";
@Valid
private List<OrderProductVo> orderProducts;
/**
* 下单渠道 版本号
*/
private String version;
}
package cn.freemud.entities.vo;
import lombok.Data;
import org.apache.commons.collections4.CollectionUtils;
import java.util.Comparator;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: OrderProductComboxVo
* @Package cn.freemud.entities
* @Description:
* @author: ping1.wu
* @date: 2020/4/23 16:16
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class OrderProductComboxVo {
/**
* 单规格spuId,多规格skuId
*/
private String goodsId;
private String skuId;
private String skuName;
/**
* 所有属性attributeId的拼接
*/
private String specProductId;
/**
* 购物车一行商品的原单机
*/
private Long originalPrice;
/**
* 购物车一行商品的现售单价
*/
private Long finalPrice;
/**
* 购物车一行商品的包装费
*/
private Long packPrice;
/**
* 购物车一行商品的原价
*/
private Long originalAmount;
/**
* 购物车一行商品的现价
*/
private Long amount;
/**
* 购物车一行商品的数量
*/
private Integer qty;
/**
* 购物车一行商品的名称
*/
private String name;
/**
* 商品的spuName
*/
private String spuName;
/**
* 购物车一行商品的副名称
*/
private String subName;
/**
* 商品图片URL
*/
private String pic;
/**
* 配料或属性
*/
private List<OrderProductExtraVo> extra;
/**
* 1:称重菜
*/
private boolean weightType;
/**
* 重量
*/
private Double weight;
/**
* 单位
*/
private String unit;
/**
* 第三方商品编号
*/
private String customerCode;
/**
* 商品组Id
*/
private Long productGroupId;
@Override
public int hashCode() {
StringBuilder sb = new StringBuilder();
sb.append(goodsId);
if (CollectionUtils.isNotEmpty(extra)) {
extra.stream().sorted(Comparator.comparing(OrderProductExtraVo::getAttributeId)).forEach(e -> sb.append(e.getAttributeId()));
}
return sb.toString().hashCode();
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(goodsId);
if (CollectionUtils.isNotEmpty(extra)) {
extra.stream().sorted(Comparator.comparing(OrderProductExtraVo::getAttributeId)).forEach(e -> sb.append(e.getAttributeId()));
}
return sb.toString();
}
}
package cn.freemud.entities.vo;
import lombok.Data;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: OrderProductExtraVo
* @Package cn.freemud.entities.vo
* @Description:
* @author: ping1.wu
* @date: 2020/4/23 16:15
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class OrderProductExtraVo {
/**
* 属性Id
*/
private String attributeId;
/**
* 属性名
*/
private String attributeName;
}
package cn.freemud.entities.vo;
import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.Min;
import java.util.List;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.0
* @Title: OrderProductVo
* @Package cn.freemud.entities.vo
* @Description:
* @author: ping1.wu
* @date: 2020/4/23 16:14
* @Copyright: 2020 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
@Data
public class OrderProductVo {
@NotEmpty(message = "spuId不能为空")
private String spuId;
private String skuId;
/**
* 商品额外的属性
*/
private List<OrderProductExtraVo> extra;
private String appType;
/**
* 数量
*/
@Min(value = 1,message = "数量不能小于1")
private Integer qty;
/**
* 套餐固定商品
*/
private List<OrderProductComboxVo> productComboList;
/**
* 套餐可选商品
*/
private List<OrderProductComboxVo> productGroupList;
}
...@@ -75,6 +75,7 @@ public enum ResponseResult { ...@@ -75,6 +75,7 @@ public enum ResponseResult {
SHOPPING_CART_COUPON_NOT_EXIST("44010", "商品券不存在"), SHOPPING_CART_COUPON_NOT_EXIST("44010", "商品券不存在"),
SHOPPING_CART_SENDGOODS_NOT_EXIST("44011", "加价购商品不存在"), SHOPPING_CART_SENDGOODS_NOT_EXIST("44011", "加价购商品不存在"),
SHOPPING_CART_STOCK_NOT_HAVE("44012", "商品库存不足"), SHOPPING_CART_STOCK_NOT_HAVE("44012", "商品库存不足"),
SHOPPING_CART_PRODUCT_NOT_EXIST("44013", "商品不存在"),
/** /**
* 订单状态码 * 订单状态码
......
package cn.freemud.service; package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.AppCreateOrderVo;
import cn.freemud.entities.vo.CreateOrderVo; import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.CreatePrepayVo; import cn.freemud.entities.vo.CreatePrepayVo;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
/** /**
* app订单服务 * app订单服务
...@@ -18,4 +20,9 @@ public interface AppOrderService { ...@@ -18,4 +20,9 @@ public interface AppOrderService {
* 创建预支付 * 创建预支付
*/ */
BaseResponse createPrepay(CreatePrepayVo createPrepayVo); BaseResponse createPrepay(CreatePrepayVo createPrepayVo);
/**
* APP下单,下单带商品信息,不经过购物车服务,不唤起支付
*/
BaseResponse createOrder(AppCreateOrderVo createOrderVo, AssortmentCustomerInfoVo customerInfo);
} }
package cn.freemud.service; package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.AppCreateOrderVo;
import cn.freemud.entities.vo.CreateOrderVo; import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.CreatePrepayVo; import cn.freemud.entities.vo.CreatePrepayVo;
...@@ -29,4 +30,9 @@ public interface OrderAdapterService { ...@@ -29,4 +30,9 @@ public interface OrderAdapterService {
*/ */
BaseResponse createPrepay(CreatePrepayVo createPrepayVo); BaseResponse createPrepay(CreatePrepayVo createPrepayVo);
/**
* APP下单,下单带商品信息,不经过购物车服务
*/
BaseResponse appCreateOrder(AppCreateOrderVo createOrderVo);
} }
...@@ -21,9 +21,7 @@ import cn.freemud.entities.db.StoreTableNumber; ...@@ -21,9 +21,7 @@ import cn.freemud.entities.db.StoreTableNumber;
import cn.freemud.entities.dto.*; import cn.freemud.entities.dto.*;
import cn.freemud.entities.dto.shoppingCart.GetShoppingCartGoodsApportionDto; import cn.freemud.entities.dto.shoppingCart.GetShoppingCartGoodsApportionDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto; import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.CreateOrderVo; import cn.freemud.entities.vo.*;
import cn.freemud.entities.vo.GetMemberCouponRequestVo;
import cn.freemud.entities.vo.ShoppingCartInfoRequestVo;
import cn.freemud.enums.CouponFlag; import cn.freemud.enums.CouponFlag;
import cn.freemud.enums.CreateOrderType; import cn.freemud.enums.CreateOrderType;
import cn.freemud.enums.ResponseResult; import cn.freemud.enums.ResponseResult;
...@@ -145,45 +143,7 @@ public class CheckOrder { ...@@ -145,45 +143,7 @@ public class CheckOrder {
throw new ServiceException(ResponseResult.STORE_NOT_FOUND); throw new ServiceException(ResponseResult.STORE_NOT_FOUND);
} }
StoreResponse.BizVO storeResponseDto = storeResponse.getBizVO(); StoreResponse.BizVO storeResponseDto = storeResponse.getBizVO();
// 校验门店是否停业 1 营业 2 停业 3 繁忙置休 checkOrderByStore(storeResponse.getBizVO(),createOrderVo.getTakeMealTime());
if (storeResponseDto.getActiveFlag() == null || storeResponseDto.getActiveFlag() != 1) {
throw new ServiceException(ResponseResult.STORE_ITEM_STOP_BUSINESS);
}
//未营业无预约时间无法下单
if (!StoreConstant.BUSINESS.equals(storeResponseDto.getState()) && StringUtils.isBlank(createOrderVo.getTakeMealTime())) {
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";
String endDateTimeStr = DateUtil.convert2String(date, DateUtil.FORMAT_YMD) + " " + businessHours[1] + ":00";
Date startDateTime ;
Date endDateTime ;
startDateTime = DateUtil.convert2Date(startDateTimeStr, DateUtil.FORMAT_YYYY_MM_DD_HHMMSS);
SimpleDateFormat hhmmss = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
endDateTime = hhmmss.parse(endDateTimeStr);
} catch (ParseException e) {
throw new ServiceException(ResponseResult.STORE_BUSINESS_HOUR_ERROR);
}
//隔天营业时间处理
if(startDateTime.after(endDateTime)){
endDateTime = DateUtil.addDays(endDateTime,1);
}
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())) { /*if (StringUtils.isNotBlank(createOrderVo.getTableNumber())) {
createOrderVo.setTableNumber(getTableNumber(partnerId, shopId, createOrderVo.getTableNumber())); createOrderVo.setTableNumber(getTableNumber(partnerId, shopId, createOrderVo.getTableNumber()));
...@@ -558,4 +518,45 @@ public class CheckOrder { ...@@ -558,4 +518,45 @@ public class CheckOrder {
} }
} }
public void checkOrderByStore(StoreResponse.BizVO storeResponseDto,String takeMealTime){
// 校验门店是否停业 1 营业 2 停业 3 繁忙置休
if (storeResponseDto.getActiveFlag() == null || storeResponseDto.getActiveFlag() != 1) {
throw new ServiceException(ResponseResult.STORE_ITEM_STOP_BUSINESS);
}
//未营业无预约时间无法下单
if (!StoreConstant.BUSINESS.equals(storeResponseDto.getState()) && StringUtils.isBlank(takeMealTime)) {
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";
String endDateTimeStr = DateUtil.convert2String(date, DateUtil.FORMAT_YMD) + " " + businessHours[1] + ":00";
Date startDateTime ;
Date endDateTime ;
startDateTime = DateUtil.convert2Date(startDateTimeStr, DateUtil.FORMAT_YYYY_MM_DD_HHMMSS);
SimpleDateFormat hhmmss = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
endDateTime = hhmmss.parse(endDateTimeStr);
} catch (ParseException e) {
throw new ServiceException(ResponseResult.STORE_BUSINESS_HOUR_ERROR);
}
//隔天营业时间处理
if(startDateTime.after(endDateTime)){
endDateTime = DateUtil.addDays(endDateTime,1);
}
storeResponseDto.setBusinessHoursDayStartTime(startDateTime);
storeResponseDto.setBusinessHoursDayEndTime(endDateTime);
// 校验门店是否打烊,打烊了则不让操作
if (storeResponseDto.getBusinessHoursDayStartTime() == null
|| storeResponseDto.getBusinessHoursDayEndTime() == null) {
throw new ServiceException(ResponseResult.STORE_ITEM_STOP_BUSINESS);
}
}
} }
package cn.freemud.service.impl; package cn.freemud.service.impl;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.AppCreateOrderVo;
import cn.freemud.entities.vo.CreateOrderVo; import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.CreatePrepayVo; import cn.freemud.entities.vo.CreatePrepayVo;
import cn.freemud.entities.vo.encircle.CreateReserveOrderVo; import cn.freemud.entities.vo.encircle.CreateReserveOrderVo;
...@@ -110,6 +111,21 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -110,6 +111,21 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
} }
/** /**
* APP下单,下单带商品信息,不经过购物车服务,不唤起支付
*/
@Override
public BaseResponse appCreateOrder(AppCreateOrderVo createOrderVo) {
AssortmentCustomerInfoVo assortmentCustomerInfoVo = assortmentCustomerInfoManager.getCustomerInfoByObject(createOrderVo.getSessionId());
if (assortmentCustomerInfoVo == null || StringUtils.isEmpty(assortmentCustomerInfoVo.getMemberId())) {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
if (UserLoginChannelEnum.APP.getCode().equals(assortmentCustomerInfoVo.getChannel())) {
return appOrderService.createOrder(createOrderVo,assortmentCustomerInfoVo);
}
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING);
}
/**
* 标准点餐参数校验 * 标准点餐参数校验
* @param createOrderVo * @param createOrderVo
* @return * @return
......
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