From 1eee71ca750c806ee0e6d80a4fd44500ceff2ffa Mon Sep 17 00:00:00 2001
From: xin <1099200748@qq.com>
Date: Fri, 04 Jul 2025 17:56:52 +0800
Subject: [PATCH] 小程序:生成确认订单

---
 oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java |   67 +++++++++++++++++++++++++++------
 1 files changed, 54 insertions(+), 13 deletions(-)

diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java
index 79ddf58..7e4ce9f 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java
@@ -1,8 +1,16 @@
 package com.oying.modules.sh.service.impl;
 
+import com.oying.exception.BadRequestException;
+import com.oying.modules.pc.product.domain.Product;
+import com.oying.modules.pc.product.domain.enums.ProductStatusEnum;
+import com.oying.modules.pc.product.service.ProductService;
 import com.oying.modules.sh.domain.Order;
 import com.oying.modules.sh.domain.request.GeneratorOrder;
+import com.oying.modules.sh.domain.request.ProductOrder;
 import com.oying.modules.sh.domain.request.SubmitOrder;
+import com.oying.modules.sh.domain.vo.OrderInfo;
+import com.oying.modules.sh.domain.vo.ProductInfo;
+import com.oying.modules.sh.service.UserAddressService;
 import com.oying.utils.FileUtil;
 import lombok.RequiredArgsConstructor;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -14,6 +22,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import com.oying.utils.PageUtil;
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.io.IOException;
 import javax.servlet.http.HttpServletResponse;
@@ -21,23 +30,25 @@
 import com.oying.utils.PageResult;
 
 /**
-* @description 服务实现
-* @author lixin
-* @date 2025-06-11
-**/
+ * @author lixin
+ * @description 服务实现
+ * @date 2025-06-11
+ **/
 @Service
 @RequiredArgsConstructor
 public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
 
     private final OrderMapper orderMapper;
+    private final UserAddressService userAddressService;
+    private final ProductService productService;
 
     @Override
-    public PageResult<Order> queryAll(OrderQueryCriteria criteria, Page<Object> page){
+    public PageResult<Order> queryAll(OrderQueryCriteria criteria, Page<Object> page) {
         return PageUtil.toPage(orderMapper.findAll(criteria, page));
     }
 
     @Override
-    public List<Order> queryAll(OrderQueryCriteria criteria){
+    public List<Order> queryAll(OrderQueryCriteria criteria) {
         return orderMapper.findAll(criteria);
     }
 
@@ -47,8 +58,42 @@
     }
 
     @Override
-    public Map<String, Object> generatorOrder(GeneratorOrder generator) {
-        return Collections.emptyMap();
+    @Transactional(rollbackFor = Exception.class)
+    public OrderInfo generatorOrder(GeneratorOrder criteria) {
+        List<ProductInfo> products = new ArrayList<>();
+        BigDecimal amount = BigDecimal.ZERO;
+        for (ProductOrder productOrder : criteria.getProducts()) {
+            Product product = productService.getById(productOrder.getProductId());
+            if (product == null) {
+                throw new BadRequestException("商品不存在");
+            }
+            if (product.getStoreId().equals(criteria.getStoreId())) {
+                throw new BadRequestException("不支持跨门店下单");
+            }
+            if (!product.getStatus().equals(ProductStatusEnum.AVAILABLE.getValue())) {
+                ProductStatusEnum statusEnum = ProductStatusEnum.get(product.getStatus());
+                throw new BadRequestException(product.getName() + ":" + (statusEnum != null ? statusEnum.getReasonPhrase() : "状态"));
+            }
+            if (productOrder.getProductCount() > product.getStockQuantity()) {
+                throw new BadRequestException("商品库存不足");
+            }
+            if (productOrder.getProductCount() < product.getMinPurchaseQuantity()) {
+                throw new BadRequestException("起售数量不足");
+            }
+            ProductInfo info = new ProductInfo();
+            info.setProduct(product);
+            info.setProductLabels(product.getLabels());
+            info.setCount(productOrder.getProductCount());
+            products.add(info);
+            amount = amount.add(product.getPrice().multiply(BigDecimal.valueOf(productOrder.getProductCount())));
+        }
+        OrderInfo info = new OrderInfo();
+        info.setProducts(products);
+        info.setAmount(amount);
+        info.setPayAmount(amount);
+        info.setPromotionAmount(BigDecimal.ZERO);
+        info.setUserAddresses(userAddressService.queryUserAddress());
+        return info;
     }
 
     @Override
@@ -79,6 +124,7 @@
             map.put("订单号", order.getOrderNum());
             map.put("用户id", order.getUserId());
             map.put("门店ID", order.getStoreId());
+            map.put("门店", order.getStoreName());
             map.put("描述", order.getOrderDescribe());
             map.put("原金额", order.getOriginalPrice());
             map.put("折扣价", order.getPaidPrice());
@@ -90,11 +136,6 @@
             map.put("订单失效时间RFC3339", order.getExpireTime());
             map.put("openid", order.getOpenid());
             map.put("APPID", order.getAppId());
-            map.put("时间戳", order.getTimestamp());
-            map.put(" nonceStr",  order.getNonceStr());
-            map.put(" packageVal",  order.getPackageVal());
-            map.put(" signType",  order.getSignType());
-            map.put("签名", order.getPaySign());
             map.put("创建人", order.getCreateBy());
             map.put("创建时间", order.getCreateTime());
             map.put("修改者", order.getUpdateBy());

--
Gitblit v1.9.3