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