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