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/domain/dto/OrderReturnQueryCriteria.java |    3 +
 oying-system/src/main/resources/mapper/sh/OrderMapper.xml                                |    6 +
 oying-system/src/main/java/com/oying/modules/sh/domain/vo/ProductInfo.java               |   26 ++++++++
 oying-system/src/main/java/com/oying/modules/sh/domain/Order.java                        |    4 +
 oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderQueryCriteria.java       |    3 +
 oying-system/src/main/java/com/oying/modules/sh/domain/request/SubmitOrder.java          |    2 
 oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturn.java                  |    4 +
 oying-system/src/main/java/com/oying/modules/sh/domain/request/GeneratorOrder.java       |    2 
 oying-system/src/main/java/com/oying/modules/sh/service/impl/UserAddressServiceImpl.java |   12 ++-
 oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java       |   67 ++++++++++++++++++----
 oying-system/src/main/java/com/oying/modules/sh/service/OrderService.java                |    4 
 oying-system/src/main/resources/mapper/sh/OrderReturnMapper.xml                          |    6 +
 oying-system/src/main/java/com/oying/modules/sh/service/UserAddressService.java          |    2 
 oying-system/src/main/java/com/oying/modules/sh/domain/vo/OrderInfo.java                 |   36 ++++++++++++
 14 files changed, 154 insertions(+), 23 deletions(-)

diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/Order.java b/oying-system/src/main/java/com/oying/modules/sh/domain/Order.java
index 2f71e99..649bef2 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/domain/Order.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/Order.java
@@ -44,6 +44,10 @@
     @ApiModelProperty(value = "用户id")
     private Long userId;
 
+    @NotBlank
+    @ApiModelProperty(value = "用户账号")
+    private String username;
+
     @NotNull
     @ApiModelProperty(value = "门店ID")
     private Long storeId;
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturn.java b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturn.java
index 45414ad..a9c58a6 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturn.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturn.java
@@ -49,6 +49,10 @@
     @ApiModelProperty(value = "用户")
     private Long userId;
 
+    @NotBlank
+    @ApiModelProperty(value = "用户账号")
+    private String username;
+
     @NotNull
     @ApiModelProperty(value = "门店ID")
     private Long storeId;
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderQueryCriteria.java
index cb32e5d..2aadb4a 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderQueryCriteria.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderQueryCriteria.java
@@ -27,6 +27,9 @@
     @ApiModelProperty(value = "用户id")
     private Long userId;
 
+    @ApiModelProperty(value = "用户账号")
+    private String username;
+
     @ApiModelProperty(value = "门店ID")
     private Long storeId;
 
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderReturnQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderReturnQueryCriteria.java
index 4b98305..cd54935 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderReturnQueryCriteria.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/dto/OrderReturnQueryCriteria.java
@@ -30,6 +30,9 @@
     @ApiModelProperty(value = "用户")
     private Long userId;
 
+    @ApiModelProperty(value = "用户账号")
+    private String username;
+
     @ApiModelProperty(value = "门店ID")
     private Long storeId;
 
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/request/GeneratorOrder.java b/oying-system/src/main/java/com/oying/modules/sh/domain/request/GeneratorOrder.java
index 4c82727..4eb6a0a 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/domain/request/GeneratorOrder.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/request/GeneratorOrder.java
@@ -16,7 +16,7 @@
 public class GeneratorOrder {
 
     @ApiModelProperty(value = "门店ID")
-    private String storeId;
+    private Long storeId;
     @ApiModelProperty(value = "商品&数量")
     private List<ProductOrder> products;
 }
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/request/SubmitOrder.java b/oying-system/src/main/java/com/oying/modules/sh/domain/request/SubmitOrder.java
index 54dfd5a..7119f9d 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/domain/request/SubmitOrder.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/request/SubmitOrder.java
@@ -22,7 +22,7 @@
     @ApiModelProperty(value = "送达时间")
     private Timestamp dateTime;
     @ApiModelProperty(value = "门店ID")
-    private String storeId;
+    private Long storeId;
     @ApiModelProperty(value = "商品&数量")
     private List<ProductOrder> products;
     @ApiModelProperty(value = "备注")
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/vo/OrderInfo.java b/oying-system/src/main/java/com/oying/modules/sh/domain/vo/OrderInfo.java
new file mode 100644
index 0000000..2d57589
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/vo/OrderInfo.java
@@ -0,0 +1,36 @@
+package com.oying.modules.sh.domain.vo;
+
+import com.oying.modules.sh.domain.UserAddress;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author xin
+ * @description
+ * @date 2025/7/4 16:27
+ */
+@Getter
+@Setter
+public class OrderInfo {
+
+    @ApiModelProperty(value = "商品信息列")
+    private List<ProductInfo> products;
+    @ApiModelProperty(value = "用户地址信息")
+    private List<UserAddress> userAddresses;
+    @ApiModelProperty(value = "商品总金额")
+    private BigDecimal amount = BigDecimal.ZERO;
+    @ApiModelProperty(value = "应付金额")
+    private BigDecimal payAmount = BigDecimal.ZERO;
+    @ApiModelProperty(value = "活动优惠")
+    private BigDecimal promotionAmount = BigDecimal.ZERO;
+    @ApiModelProperty(value = "优惠卷待定")
+    private Object coupon;
+    @ApiModelProperty(value = "运费待定")
+    private Object shippingFee;
+    @ApiModelProperty(value = "打包费待定")
+    private Object packingCharges;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/vo/ProductInfo.java b/oying-system/src/main/java/com/oying/modules/sh/domain/vo/ProductInfo.java
new file mode 100644
index 0000000..a770e46
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/vo/ProductInfo.java
@@ -0,0 +1,26 @@
+package com.oying.modules.sh.domain.vo;
+
+import com.oying.modules.pc.product.domain.Product;
+import com.oying.modules.pc.product.domain.ProductLabel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @author xin
+ * @description
+ * @date 2025/7/4 15:45
+ */
+@Getter
+@Setter
+public class ProductInfo {
+
+    @ApiModelProperty(value = "商品信息")
+    private Product product;
+    @ApiModelProperty(value = "商品标签")
+    private List<ProductLabel> productLabels;
+    @ApiModelProperty(value = "商品数量")
+    private Integer count = 1;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/OrderService.java b/oying-system/src/main/java/com/oying/modules/sh/service/OrderService.java
index 5939ab6..4ec21e7 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/service/OrderService.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/OrderService.java
@@ -5,13 +5,13 @@
 
 import java.util.List;
 import java.io.IOException;
-import java.util.Map;
 import javax.servlet.http.HttpServletResponse;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.oying.modules.sh.domain.request.GeneratorOrder;
 import com.oying.modules.sh.domain.request.SubmitOrder;
+import com.oying.modules.sh.domain.vo.OrderInfo;
 import com.oying.utils.PageResult;
 
 /**
@@ -38,7 +38,7 @@
      */
     List<Order> queryAll(OrderQueryCriteria criteria);
 
-    Map<String, Object> generatorOrder(GeneratorOrder generator);
+    OrderInfo generatorOrder(GeneratorOrder generator);
 
     Order submitOrder(SubmitOrder submit);
 
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/UserAddressService.java b/oying-system/src/main/java/com/oying/modules/sh/service/UserAddressService.java
index f400e5a..a716500 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/service/UserAddressService.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/UserAddressService.java
@@ -56,4 +56,6 @@
     * @throws IOException /
     */
     void download(List<UserAddress> all, HttpServletResponse response) throws IOException;
+
+    List<UserAddress> queryUserAddress();
 }
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());
diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/impl/UserAddressServiceImpl.java b/oying-system/src/main/java/com/oying/modules/sh/service/impl/UserAddressServiceImpl.java
index eda7218..c85cd4c 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/service/impl/UserAddressServiceImpl.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/service/impl/UserAddressServiceImpl.java
@@ -14,12 +14,9 @@
 import org.springframework.transaction.annotation.Transactional;
 import com.oying.utils.PageUtil;
 
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.io.IOException;
 import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
 
 import com.oying.utils.PageResult;
 
@@ -45,6 +42,13 @@
     }
 
     @Override
+    public List<UserAddress> queryUserAddress() {
+        UserAddressQueryCriteria criteria = new UserAddressQueryCriteria();
+        criteria.setUserId(SecurityUtils.getCurrentUserId());
+        return queryAll(criteria);
+    }
+
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public void create(UserAddress resources) {
         if (resources.getIsDefault()) {
diff --git a/oying-system/src/main/resources/mapper/sh/OrderMapper.xml b/oying-system/src/main/resources/mapper/sh/OrderMapper.xml
index 6a09cbc..44a5e20 100644
--- a/oying-system/src/main/resources/mapper/sh/OrderMapper.xml
+++ b/oying-system/src/main/resources/mapper/sh/OrderMapper.xml
@@ -7,6 +7,7 @@
         <result column="order_status" property="orderStatus"/>
         <result column="order_status_describe" property="orderStatusDescribe"/>
         <result column="user_id" property="userId"/>
+        <result column="username" property="username"/>
         <result column="store_id" property="storeId"/>
         <result column="store_name" property="storeName"/>
         <result column="store_logo" property="storeLogo"/>
@@ -33,7 +34,7 @@
     </resultMap>
 
     <sql id="Base_Column_List">
-        order_id, order_num, order_status, order_status_describe, user_id, store_id, store_name, store_logo, order_describe, original_price, paid_price, actually_pay_price, pay_state, pay_message, pay_type, pay_time, expire_time, openid, app_id, timestamp, nonce_str, package_val, sign_type, pay_sign, create_by, create_time, update_by, update_time
+        order_id, order_num, order_status, order_status_describe, user_id, username, store_id, store_name, store_logo, order_describe, original_price, paid_price, actually_pay_price, pay_state, pay_message, pay_type, pay_time, expire_time, openid, app_id, timestamp, nonce_str, package_val, sign_type, pay_sign, create_by, create_time, update_by, update_time
     </sql>
 
     <select id="findAll" resultMap="BaseResultMap">
@@ -50,6 +51,9 @@
             <if test="criteria.userId != null">
                 and user_id = #{criteria.userId}
             </if>
+            <if test="criteria.username != null">
+                and username like concat('%',#{criteria.username},'%')
+            </if>
             <if test="criteria.storeId != null">
                 and store_id = #{criteria.storeId}
             </if>
diff --git a/oying-system/src/main/resources/mapper/sh/OrderReturnMapper.xml b/oying-system/src/main/resources/mapper/sh/OrderReturnMapper.xml
index 83e3b73..3a37432 100644
--- a/oying-system/src/main/resources/mapper/sh/OrderReturnMapper.xml
+++ b/oying-system/src/main/resources/mapper/sh/OrderReturnMapper.xml
@@ -8,6 +8,7 @@
         <result column="return_status_describe" property="returnStatusDescribe"/>
         <result column="order_num" property="orderNum"/>
         <result column="user_id" property="userId"/>
+        <result column="username" property="username"/>
         <result column="store_id" property="storeId"/>
         <result column="store_name" property="storeName"/>
         <result column="store_logo" property="storeLogo"/>
@@ -32,7 +33,7 @@
     </resultMap>
 
     <sql id="Base_Column_List">
-        return_id, return_num, return_status, return_status_describe, order_num, user_id, store_id, store_name, store_logo, original_price, paid_price, actually_pay_price, refund_price, refund_status, success_time, channel, reason, remark, photos, audit_status, audit_user, audit_time, audit_message, create_by, create_time, update_by, update_time
+        return_id, return_num, return_status, return_status_describe, order_num, user_id, username, store_id, store_name, store_logo, original_price, paid_price, actually_pay_price, refund_price, refund_status, success_time, channel, reason, remark, photos, audit_status, audit_user, audit_time, audit_message, create_by, create_time, update_by, update_time
     </sql>
 
     <select id="findAll" resultMap="BaseResultMap">
@@ -52,6 +53,9 @@
             <if test="criteria.userId != null">
                 and user_id = #{criteria.userId}
             </if>
+            <if test="criteria.username != null">
+                and username like concat('%',#{criteria.username},'%')
+            </if>
             <if test="criteria.storeId != null">
                 and store_id = #{criteria.storeId}
             </if>

--
Gitblit v1.9.3