|
@@ -0,0 +1,379 @@
|
|
|
+package com.zbkj.front.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.core.date.DateField;
|
|
|
+import cn.hutool.core.date.DateTime;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.github.pagehelper.PageInfo;
|
|
|
+import com.zbkj.common.config.CrmebConfig;
|
|
|
+import com.zbkj.common.constants.*;
|
|
|
+import com.zbkj.common.exception.CrmebException;
|
|
|
+import com.zbkj.common.model.cat.Cart;
|
|
|
+import com.zbkj.common.model.cdkey.CardSecret;
|
|
|
+import com.zbkj.common.model.coupon.Coupon;
|
|
|
+import com.zbkj.common.model.coupon.CouponProduct;
|
|
|
+import com.zbkj.common.model.coupon.CouponUser;
|
|
|
+import com.zbkj.common.model.express.*;
|
|
|
+import com.zbkj.common.model.groupbuy.GroupBuyActivitySku;
|
|
|
+import com.zbkj.common.model.groupbuy.GroupBuyRecord;
|
|
|
+import com.zbkj.common.model.groupbuy.GroupBuyUser;
|
|
|
+import com.zbkj.common.model.merchant.Merchant;
|
|
|
+import com.zbkj.common.model.merchant.MerchantMarket;
|
|
|
+import com.zbkj.common.model.order.*;
|
|
|
+import com.zbkj.common.model.product.Product;
|
|
|
+import com.zbkj.common.model.product.ProductAttrValue;
|
|
|
+import com.zbkj.common.model.product.ProductCategory;
|
|
|
+import com.zbkj.common.model.product.ProductReply;
|
|
|
+import com.zbkj.common.model.rider.RiderFeeConfig;
|
|
|
+import com.zbkj.common.model.seckill.SeckillProduct;
|
|
|
+import com.zbkj.common.model.user.User;
|
|
|
+import com.zbkj.common.model.user.UserAddress;
|
|
|
+import com.zbkj.common.model.user.UserExpressAddress;
|
|
|
+import com.zbkj.common.model.user.UserIntegralRecord;
|
|
|
+import com.zbkj.common.model.wechat.video.PayComponentProduct;
|
|
|
+import com.zbkj.common.model.wechat.video.PayComponentProductSku;
|
|
|
+import com.zbkj.common.page.CommonPage;
|
|
|
+import com.zbkj.common.request.*;
|
|
|
+import com.zbkj.common.request.express.CreateExpressOrderRequest;
|
|
|
+import com.zbkj.common.request.express.ExpressOrderFrontListRequest;
|
|
|
+import com.zbkj.common.request.express.PreExpressOrderDetailRequest;
|
|
|
+import com.zbkj.common.request.express.PreExpressOrderRequest;
|
|
|
+import com.zbkj.common.response.*;
|
|
|
+import com.zbkj.common.response.express.*;
|
|
|
+import com.zbkj.common.response.groupbuy.GroupBuyActivityRecordForFrontShareUse;
|
|
|
+import com.zbkj.common.result.CommonResultCode;
|
|
|
+import com.zbkj.common.result.OrderResultCode;
|
|
|
+import com.zbkj.common.utils.CrmebDateUtil;
|
|
|
+import com.zbkj.common.utils.CrmebUtil;
|
|
|
+import com.zbkj.common.utils.GeoUtils;
|
|
|
+import com.zbkj.common.utils.RedisUtil;
|
|
|
+import com.zbkj.common.vo.*;
|
|
|
+import com.zbkj.front.service.FrontExpressOrderService;
|
|
|
+import com.zbkj.front.service.SeckillService;
|
|
|
+import com.zbkj.service.ExpressOrderService;
|
|
|
+import com.zbkj.service.service.*;
|
|
|
+import com.zbkj.service.service.groupbuy.GroupBuyActivitySkuService;
|
|
|
+import com.zbkj.service.service.groupbuy.GroupBuyRecordService;
|
|
|
+import com.zbkj.service.service.groupbuy.GroupBuyUserService;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.support.TransactionTemplate;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
+import java.util.*;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * H5端订单操作
|
|
|
+ * +----------------------------------------------------------------------
|
|
|
+ * | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
|
|
+ * +----------------------------------------------------------------------
|
|
|
+ * | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
|
|
|
+ * +----------------------------------------------------------------------
|
|
|
+ * | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
|
|
+ * +----------------------------------------------------------------------
|
|
|
+ * | Author: CRMEB Team <admin@crmeb.com>
|
|
|
+ * +----------------------------------------------------------------------
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class FrontExpressOrderServiceImpl implements FrontExpressOrderService {
|
|
|
+
|
|
|
+ private final Logger logger = LoggerFactory.getLogger(FrontExpressOrderServiceImpl.class);
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private UserService userService;
|
|
|
+ @Autowired
|
|
|
+ private ExpressOrderService orderService;
|
|
|
+ @Autowired
|
|
|
+ private UserAddressService userAddressService;
|
|
|
+ @Autowired
|
|
|
+ private UserExpressAddressService userExpressAddressService;
|
|
|
+ @Autowired
|
|
|
+ private RedisUtil redisUtil;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private TransactionTemplate transactionTemplate;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ExpressOrderDetailService orderDetailService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CrmebConfig crmebConfig;
|
|
|
+ /**
|
|
|
+ * 预下单V1.7
|
|
|
+ * @param request 预下单请求参数
|
|
|
+ * @return PreOrderResponse
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ExpressOrderNoResponse preOrder(PreExpressOrderRequest request) {
|
|
|
+ User user = userService.getInfo();
|
|
|
+ // 校验预下单商品信息
|
|
|
+ PreExpressOrderInfoVo preOrderInfoVo = validatePreOrderRequest(request, user);
|
|
|
+ BigDecimal totalPrice = preOrderInfoVo.getUserOrderVoList().stream()
|
|
|
+ .map(e -> e.getPrice().multiply(new BigDecimal(e.getExpressNum())))
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ preOrderInfoVo.setProTotalFee(totalPrice);
|
|
|
+ preOrderInfoVo.setOrderProNum(preOrderInfoVo.getUserOrderVoList().stream().mapToInt(PreExpressOrderInfoDetailVo::getExpressNum).sum());
|
|
|
+ // 实际支付金额
|
|
|
+ preOrderInfoVo.setPayFee(preOrderInfoVo.getProTotalFee().add(preOrderInfoVo.getGiveTips()));
|
|
|
+ preOrderInfoVo.setUserBalance(user.getNowMoney());
|
|
|
+ return createPreOrderResponse(user.getId(), preOrderInfoVo);
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 订单列表
|
|
|
+ * @param request 搜索参数
|
|
|
+ * @return PageInfo
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public PageInfo<ExpressOrderFrontDataResponse> list(ExpressOrderFrontListRequest request) {
|
|
|
+ Integer userId = userService.getUserIdException();
|
|
|
+ PageInfo<ExpressOrder> pageInfo =orderService.getUserOrderList(userId, request);
|
|
|
+ List<ExpressOrder> orderList = pageInfo.getList();
|
|
|
+ if (CollUtil.isEmpty(orderList)) {
|
|
|
+ return CommonPage.copyPageInfo(pageInfo, CollUtil.newArrayList());
|
|
|
+ }
|
|
|
+ List<ExpressOrderFrontDataResponse> responseList = CollUtil.newArrayList();
|
|
|
+ DateTime cancelTime;
|
|
|
+ for (ExpressOrder order : orderList) {
|
|
|
+ ExpressOrderFrontDataResponse infoResponse = new ExpressOrderFrontDataResponse();
|
|
|
+ BeanUtils.copyProperties(order, infoResponse);
|
|
|
+ // 订单详情对象列表
|
|
|
+ List<ExpressOrderDetail> orderDetailList = orderDetailService.getByOrderNo(order.getOrderNo());
|
|
|
+ List<ExpressOrderInfoFrontDataResponse> infoResponseList = CollUtil.newArrayList();
|
|
|
+ orderDetailList.forEach(e -> {
|
|
|
+ ExpressOrderInfoFrontDataResponse orderInfoResponse = new ExpressOrderInfoFrontDataResponse();
|
|
|
+ BeanUtils.copyProperties(e, orderInfoResponse);
|
|
|
+ infoResponseList.add(orderInfoResponse);
|
|
|
+ });
|
|
|
+ infoResponse.setOrderInfoList(infoResponseList);
|
|
|
+ if (!order.getPaid()) {
|
|
|
+ cancelTime = DateUtil.offset(order.getCreateTime(), DateField.MINUTE, crmebConfig.getOrderCancelTime());
|
|
|
+ infoResponse.setCancelTime(cancelTime.getTime());
|
|
|
+ // 返回订单过期时间 2025-02-12
|
|
|
+ if (redisUtil.exists(StrUtil.format(RedisConstants.ORDER_EXPIRE_TIME, order.getOrderNo()))) {
|
|
|
+ String expireTime = redisUtil.get(StrUtil.format(RedisConstants.ORDER_EXPIRE_TIME, order.getOrderNo()));
|
|
|
+ infoResponse.setExpirationTime(expireTime);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ responseList.add(infoResponse);
|
|
|
+ }
|
|
|
+ return CommonPage.copyPageInfo(pageInfo, responseList);
|
|
|
+ }
|
|
|
+ private ExpressOrderNoResponse createPreOrderResponse(Integer userId, PreExpressOrderInfoVo preOrderInfoVo) {
|
|
|
+ String key = userId + CrmebDateUtil.getNowTime().toString() + CrmebUtil.getUuid();
|
|
|
+ redisUtil.set(OrderConstants.PRE_EXP_ORDER_CACHE_PREFIX + key, JSONObject.toJSONString(preOrderInfoVo), OrderConstants.PRE_ORDER_CACHE_TIME, TimeUnit.MINUTES);
|
|
|
+ ExpressOrderNoResponse response = new ExpressOrderNoResponse();
|
|
|
+ response.setOrderNo(key);
|
|
|
+ response.setPayPrice(preOrderInfoVo.getPayFee());
|
|
|
+ response.setOrderType(preOrderInfoVo.getType());
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 加载预下单信息
|
|
|
+ *
|
|
|
+ * @param preOrderNo 预下单号
|
|
|
+ * @return 预下单信息
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public PreExpressOrderResponse loadPreOrder(String preOrderNo) {
|
|
|
+// Integer userId = userService.getUserIdException();
|
|
|
+// User user = userService.getById(userId);
|
|
|
+ // 通过缓存获取预下单对象
|
|
|
+ String key = OrderConstants.PRE_EXP_ORDER_CACHE_PREFIX + preOrderNo;
|
|
|
+ boolean exists = redisUtil.exists(key);
|
|
|
+ if (!exists) {
|
|
|
+ throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "预下单订单不存在");
|
|
|
+ }
|
|
|
+ String orderVoString = redisUtil.get(key);
|
|
|
+ PreExpressOrderInfoVo orderInfoVo = JSONObject.parseObject(orderVoString, PreExpressOrderInfoVo.class);
|
|
|
+ PreExpressOrderResponse preOrderResponse = new PreExpressOrderResponse();
|
|
|
+ BeanUtils.copyProperties(orderInfoVo, preOrderResponse);
|
|
|
+ List<PreExpressOrderInfoDetailResponse> infoResponseList = new ArrayList<>();
|
|
|
+ List<PreExpressOrderInfoDetailVo> merchantOrderVoList = orderInfoVo.getUserOrderVoList();
|
|
|
+ for (PreExpressOrderInfoDetailVo merchantOrderVo : merchantOrderVoList) {
|
|
|
+ PreExpressOrderInfoDetailResponse infoResponse = new PreExpressOrderInfoDetailResponse();
|
|
|
+ BeanUtils.copyProperties(merchantOrderVo, infoResponse);
|
|
|
+ infoResponseList.add(infoResponse);
|
|
|
+ }
|
|
|
+ preOrderResponse.setUserOrderVoList(infoResponseList);
|
|
|
+ return preOrderResponse;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建订单
|
|
|
+ *
|
|
|
+ * @param orderRequest 创建订单请求参数
|
|
|
+ * @return OrderNoResponse 订单编号
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ExpressOrderNoResponse createOrder(CreateExpressOrderRequest orderRequest) {
|
|
|
+ User user = userService.getInfo();
|
|
|
+ // 通过缓存获取预下单对象
|
|
|
+ String key = OrderConstants.PRE_EXP_ORDER_CACHE_PREFIX + orderRequest.getPreOrderNo();
|
|
|
+ boolean exists = redisUtil.exists(key);
|
|
|
+ if (!exists) {
|
|
|
+ throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "预下单订单不存在");
|
|
|
+ }
|
|
|
+ String orderVoString = redisUtil.get(key).toString();
|
|
|
+ PreExpressOrderInfoVo orderInfoVo = JSONObject.parseObject(orderVoString, PreExpressOrderInfoVo.class);
|
|
|
+
|
|
|
+ // 平台订单
|
|
|
+ ExpressOrder order = new ExpressOrder();
|
|
|
+ String orderNo = CrmebUtil.getOrderNo(OrderConstants.ORDER_PREFIX_PLATFORM);
|
|
|
+ order.setOrderNo(orderNo);
|
|
|
+ order.setUid(user.getId());
|
|
|
+ order.setTotalNum(orderInfoVo.getOrderProNum());
|
|
|
+ order.setProTotalPrice(orderInfoVo.getProTotalFee());
|
|
|
+ order.setGiveTips(orderInfoVo.getGiveTips());
|
|
|
+ order.setTotalPrice(order.getProTotalPrice().add(order.getGiveTips()));
|
|
|
+ order.setPayPrice(order.getTotalPrice());
|
|
|
+ order.setPaid(false);
|
|
|
+ order.setUserPhone(orderInfoVo.getUserPhone());
|
|
|
+ order.setUserAddressId(orderInfoVo.getUserAddressId());
|
|
|
+ order.setPostAddressId(orderInfoVo.getPostAddressId());
|
|
|
+ order.setCancelStatus(OrderConstants.ORDER_CANCEL_STATUS_NORMAL);
|
|
|
+ order.setType(orderInfoVo.getType());
|
|
|
+ order.setCreateTime(DateUtil.date());
|
|
|
+ // 订单明细
|
|
|
+ List<ExpressOrderDetail> orderDetailList = new ArrayList<>();
|
|
|
+ for (PreExpressOrderInfoDetailVo userOrderVo : orderInfoVo.getUserOrderVoList()) {
|
|
|
+ ExpressOrderDetail orderDetail = new ExpressOrderDetail();
|
|
|
+ orderDetail.setOrderNo(order.getOrderNo());
|
|
|
+ orderDetail.setUid(user.getId());
|
|
|
+ orderDetail.setExpressType(orderInfoVo.getType());
|
|
|
+ orderDetail.setExpNum(userOrderVo.getExpressNum());
|
|
|
+ orderDetail.setImage(userOrderVo.getImage());
|
|
|
+ orderDetail.setIsReceipt(false);
|
|
|
+ orderDetail.setPrice(userOrderVo.getPrice());
|
|
|
+ orderDetail.setPayPrice(orderDetail.getPrice().multiply(new BigDecimal(orderDetail.getExpNum().toString())));
|
|
|
+ if (orderDetail.getPayPrice().compareTo(BigDecimal.ZERO) < 0) {
|
|
|
+ throw new CrmebException("订单详情价格计算错误,详情价格不能小于0");
|
|
|
+ }
|
|
|
+ orderDetail.setExpressInfo(userOrderVo.getExpressInfo());
|
|
|
+ orderDetail.setSpecs(userOrderVo.getSpecId());
|
|
|
+ orderDetailList.add(orderDetail);
|
|
|
+ }
|
|
|
+ Boolean execute = transactionTemplate.execute(e -> {
|
|
|
+ orderService.save(order);
|
|
|
+ orderDetailService.saveBatch(orderDetailList);
|
|
|
+ return Boolean.TRUE;
|
|
|
+ });
|
|
|
+ if (!execute) {
|
|
|
+ throw new CrmebException("订单生成失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 删除缓存订单
|
|
|
+ if (redisUtil.exists(key)) {
|
|
|
+ redisUtil.delete(key);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 加入自动未支付自动取消队列
|
|
|
+ redisUtil.lPush(TaskConstants.ORDER_TASK_REDIS_KEY_AUTO_CANCEL_KEY, order.getOrderNo());
|
|
|
+ // 设置自动过期时间 2025-02-11
|
|
|
+ Integer orderCancelTimeMinute = crmebConfig.getOrderCancelTime();
|
|
|
+ DateTime expirationTime = DateUtil.offset(order.getCreateTime(), DateField.MINUTE, crmebConfig.getOrderCancelTime());
|
|
|
+ Long expireTime = (long) orderCancelTimeMinute * 60;
|
|
|
+ redisUtil.set(StrUtil.format(RedisConstants.ORDER_EXPIRE_TIME, order.getOrderNo()), expirationTime.toString(), expireTime);
|
|
|
+ ExpressOrderNoResponse response = new ExpressOrderNoResponse();
|
|
|
+ response.setOrderNo(order.getOrderNo());
|
|
|
+ response.setPayPrice(order.getPayPrice());
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 校验预下单商品信息
|
|
|
+ *
|
|
|
+ * @param request 预下单请求参数
|
|
|
+ * @return OrderInfoVo
|
|
|
+ */
|
|
|
+ private PreExpressOrderInfoVo validatePreOrderRequest(PreExpressOrderRequest request, User user) {
|
|
|
+ PreExpressOrderInfoVo preOrderInfoVo = new PreExpressOrderInfoVo();
|
|
|
+ UserAddress userAddress = null;
|
|
|
+ UserExpressAddress userExpressAddress = null;
|
|
|
+ if (ObjectUtil.isNull(request.getUserAddressId())) {
|
|
|
+ throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请选择用户地址");
|
|
|
+ }
|
|
|
+ userAddress = userAddressService.getById(request.getUserAddressId());
|
|
|
+ if (ObjectUtil.isNull(userAddress) || userAddress.getIsDel()) {
|
|
|
+ throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "用户地址有误");
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isNull(request.getPostAddressId())) {
|
|
|
+ throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请选择驿站地址");
|
|
|
+ }
|
|
|
+ userExpressAddress = userExpressAddressService.getById(request.getPostAddressId());
|
|
|
+ if (ObjectUtil.isNull(userExpressAddress) || userExpressAddress.getIsDel()) {
|
|
|
+ throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "驿站地址有误");
|
|
|
+ }
|
|
|
+ List<PreExpressOrderInfoDetailVo> userOrderVoList = CollUtil.newArrayList();
|
|
|
+ switch (request.getPreOrderType()) {
|
|
|
+ case "take":
|
|
|
+ userOrderVoList = validatePreOrder(request, user);
|
|
|
+ preOrderInfoVo.setType(0);
|
|
|
+ break;
|
|
|
+ case "send":
|
|
|
+ userOrderVoList = validatePreOrder(request, user);
|
|
|
+ preOrderInfoVo.setType(1);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if(ObjectUtil.isNull(request.getGiveTips())){
|
|
|
+ request.setGiveTips(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+ BigDecimal proPrice = userOrderVoList.stream()
|
|
|
+ .map(e -> {
|
|
|
+ BigDecimal price;
|
|
|
+ price = e.getPrice().multiply(new BigDecimal(e.getExpressNum()));
|
|
|
+ return price;
|
|
|
+ })
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ preOrderInfoVo.setUserPhone(userAddress.getPhone());
|
|
|
+ preOrderInfoVo.setProTotalFee(proPrice);
|
|
|
+ preOrderInfoVo.setGiveTips(BigDecimal.ZERO);
|
|
|
+ preOrderInfoVo.setPostAddressId(request.getPostAddressId());
|
|
|
+ preOrderInfoVo.setUserAddressId(request.getUserAddressId());
|
|
|
+ preOrderInfoVo.setUserId(user.getId());
|
|
|
+ preOrderInfoVo.setUserName(user.getRealName());
|
|
|
+ preOrderInfoVo.setUserOrderVoList(userOrderVoList);
|
|
|
+ return preOrderInfoVo;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 基础商品校验
|
|
|
+ */
|
|
|
+ private PreExpressOrderInfoDetailVo validatePreOrderBase(PreExpressOrderDetailRequest detailRequest) {
|
|
|
+ if (ObjectUtil.isNull(detailRequest.getExpressInfo())) {
|
|
|
+ throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "取件信息不能为空");
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isNull(detailRequest.getExpressNum())|| detailRequest.getExpressNum()<0) {
|
|
|
+ throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "取件数量不能为空");
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isNull(detailRequest.getSepec())) {
|
|
|
+ throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "规格不能为空");
|
|
|
+ }
|
|
|
+ // 构造PreExpressOrderInfoDetailVo对象
|
|
|
+ PreExpressOrderInfoDetailVo orderVo = new PreExpressOrderInfoDetailVo();
|
|
|
+ BigDecimal payPrice = detailRequest.getPrice().multiply(new BigDecimal(detailRequest.getExpressNum()));
|
|
|
+ orderVo.setPayPrice(payPrice);
|
|
|
+ BeanUtils.copyProperties(detailRequest,orderVo);
|
|
|
+ return orderVo;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<PreExpressOrderInfoDetailVo> validatePreOrder(PreExpressOrderRequest request, User user) {
|
|
|
+ List<PreExpressOrderInfoDetailVo> userOrderVoList = CollUtil.newArrayList();
|
|
|
+ request.getOrderDetails().forEach(e -> {
|
|
|
+ PreExpressOrderInfoDetailVo userOrderVo = validatePreOrderBase(e);
|
|
|
+ userOrderVoList.add(userOrderVo);
|
|
|
+ });
|
|
|
+ return userOrderVoList;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|