From e51a75ac70bcc93ae6390b6f376dcf3d4afe8580 Mon Sep 17 00:00:00 2001
From: xin <1099200748@qq.com>
Date: Sun, 06 Jul 2025 21:58:37 +0800
Subject: [PATCH] 小程序:提交订单(待完善)

---
 oying-system/src/main/resources/config/application-dev.yml                              |   12 +-
 oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturnProductSnapshot.java  |    1 
 oying-system/src/main/java/com/oying/modules/sh/domain/OrderProductSnapshot.java        |    3 
 oying-common/src/main/java/com/oying/utils/DateUtil.java                                |   19 ++++
 oying-system/src/main/java/com/oying/modules/sh/rest/OrderController.java               |    5 
 oying-system/src/main/java/com/oying/modules/sh/domain/request/ProductOrder.java        |    2 
 oying-system/src/main/java/com/oying/modules/security/config/WeiXinProperties.java      |    2 
 oying-system/src/main/java/com/oying/modules/hwc/service/impl/SwiftPassServiceImpl.java |    9 +-
 oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java      |   69 ++++++++++++++--
 oying-system/src/main/java/com/oying/modules/security/config/SwiftPassProperties.java   |    2 
 oying-common/src/main/java/com/oying/utils/enums/GenerateEnum.java                      |   38 +++++++++
 oying-system/src/main/java/com/oying/modules/sh/service/OrderService.java               |    3 
 oying-system/src/main/java/com/oying/modules/hwc/service/SwiftPassService.java          |    2 
 oying-system/src/main/java/com/oying/modules/security/config/SecurityProperties.java    |    5 +
 oying-common/src/main/java/com/oying/utils/RedisUtils.java                              |   37 +++++++++
 oying-system/src/main/java/com/oying/modules/security/rest/AuthController.java          |    2 
 16 files changed, 176 insertions(+), 35 deletions(-)

diff --git a/oying-common/src/main/java/com/oying/utils/DateUtil.java b/oying-common/src/main/java/com/oying/utils/DateUtil.java
index 5b7ec2e..1ab0205 100644
--- a/oying-common/src/main/java/com/oying/utils/DateUtil.java
+++ b/oying-common/src/main/java/com/oying/utils/DateUtil.java
@@ -3,6 +3,7 @@
 import java.sql.Timestamp;
 import java.time.*;
 import java.time.format.DateTimeFormatter;
+import java.util.Calendar;
 import java.util.Date;
 
 /**
@@ -14,6 +15,19 @@
 
     public static final DateTimeFormatter DFY_MD_HMS = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
     public static final DateTimeFormatter DFY_MD = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+    public static final DateTimeFormatter SDF_YMDHMS = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+
+    /**
+     * Timestamp增加分钟
+     */
+    public static Timestamp addMinute(Timestamp time, int month) {
+        // 创建 Calendar 对象并设置为当前日期和时间的值
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTimeInMillis(time.getTime());
+        // 将MINUTE字段添加到当前日期和时间
+        calendar.add(Calendar.MINUTE, month);
+        return new Timestamp(calendar.getTime().getTime());
+    }
 
     /**
      * LocalDateTime 转时间戳
@@ -73,7 +87,7 @@
      * 日期 格式化
      *
      * @param localDateTime /
-     * @param patten /
+     * @param patten        /
      * @return /
      */
     public static String localDateTimeFormat(LocalDateTime localDateTime, String patten) {
@@ -85,7 +99,7 @@
      * 日期 格式化
      *
      * @param localDateTime /
-     * @param df /
+     * @param df            /
      * @return /
      */
     public static String localDateTimeFormat(LocalDateTime localDateTime, DateTimeFormatter df) {
@@ -104,6 +118,7 @@
 
     /**
      * 获取当前时间
+     *
      * @return 、
      */
     public static Timestamp getTimeStamp() {
diff --git a/oying-common/src/main/java/com/oying/utils/RedisUtils.java b/oying-common/src/main/java/com/oying/utils/RedisUtils.java
index d50d82c..bf5b094 100644
--- a/oying-common/src/main/java/com/oying/utils/RedisUtils.java
+++ b/oying-common/src/main/java/com/oying/utils/RedisUtils.java
@@ -5,11 +5,14 @@
 import com.google.common.collect.Sets;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.connection.RedisConnection;
 import org.springframework.data.redis.connection.RedisConnectionFactory;
 import org.springframework.data.redis.core.*;
 import org.springframework.data.redis.serializer.StringRedisSerializer;
 import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -21,7 +24,11 @@
 @SuppressWarnings({"unchecked","all"})
 public class RedisUtils {
     private static final Logger log = LoggerFactory.getLogger(RedisUtils.class);
-
+    @Value("${jwt.generate-order-sn}")
+    private String generateOrderSn;
+    @Value("${wx.enabled}")
+    private Boolean wxEnabled;
+    private static final String T = "-T-";
     private RedisTemplate<Object, Object> redisTemplate;
 
     public RedisUtils(RedisTemplate<Object, Object> redisTemplate) {
@@ -31,6 +38,34 @@
     }
 
     /**
+     * 生成18位订单编号:8位日期+4位秒+7位以上自增id
+     *
+     * @param i
+     * @return
+     */
+    public String generateOrderSn(Integer i) {
+        StringBuilder sb = new StringBuilder();
+        String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
+        String key = generateOrderSn + date;
+        Long increment = increment(key);
+        sb.append(date);
+        sb.append(String.format("%04d", i));
+        String incrementStr = increment.toString();
+        if (incrementStr.length() <= 7) {
+            sb.append(String.format("%07d", increment));
+        } else {
+            sb.append(incrementStr);
+        }
+        if (wxEnabled) {
+            // 生产环境
+            return sb.toString();
+        } else {
+            // 测试环境
+            return T + sb.toString();
+        }
+    }
+
+    /**
      * 判断key是否过期
      *
      * @param key
diff --git a/oying-common/src/main/java/com/oying/utils/enums/GenerateEnum.java b/oying-common/src/main/java/com/oying/utils/enums/GenerateEnum.java
new file mode 100644
index 0000000..6f7bf84
--- /dev/null
+++ b/oying-common/src/main/java/com/oying/utils/enums/GenerateEnum.java
@@ -0,0 +1,38 @@
+package com.oying.utils.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author xin
+ * @description
+ * @date 2024/10/30 下午4:17
+ */
+@Getter
+@AllArgsConstructor
+public enum GenerateEnum {
+
+    ORDER(10, "订单编号"),
+    RETURN_ORDER(20, "退单编号"),
+
+    BUSINESS_NO(30,"未使用"),
+    FREE_DEPOSIT(40,"未使用"),
+    PENETRATE_ID(50,"未使用"),
+    RETURN_FREE_DEPOSIT(60,"未使用"),
+    CONTRACT_NUM(70,"未使用"),
+    EIGHT(80,"未使用"),
+    NINE(90,"未使用"),
+    UNKNOWN(0, "未知枚举");
+
+    private final Integer key;
+    private final String value;
+
+    public static GenerateEnum find(Integer key) {
+        for (GenerateEnum value : GenerateEnum.values()) {
+            if (key.equals(value.getKey())) {
+                return value;
+            }
+        }
+        return UNKNOWN;
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/hwc/service/SwiftPassService.java b/oying-system/src/main/java/com/oying/modules/hwc/service/SwiftPassService.java
index 9083daa..69a269d 100644
--- a/oying-system/src/main/java/com/oying/modules/hwc/service/SwiftPassService.java
+++ b/oying-system/src/main/java/com/oying/modules/hwc/service/SwiftPassService.java
@@ -23,7 +23,7 @@
      *
      * @see [类、类#方法、类#成员]
      */
-    HwcResponse pay(String ip, Integer total, String timeExpire, String description, String openId,
+    HwcResponse pay(String ip, String total, String timeExpire, String description, String openId,
                     String orderNum, PayTypeEnum status) throws IOException;
 
     /**
diff --git a/oying-system/src/main/java/com/oying/modules/hwc/service/impl/SwiftPassServiceImpl.java b/oying-system/src/main/java/com/oying/modules/hwc/service/impl/SwiftPassServiceImpl.java
index bc39419..c255e3f 100644
--- a/oying-system/src/main/java/com/oying/modules/hwc/service/impl/SwiftPassServiceImpl.java
+++ b/oying-system/src/main/java/com/oying/modules/hwc/service/impl/SwiftPassServiceImpl.java
@@ -8,6 +8,7 @@
 import com.oying.modules.hwc.utils.SignUtils;
 import com.oying.modules.hwc.utils.XmlUtils;
 import com.oying.modules.security.config.SwiftPassProperties;
+import com.oying.modules.security.config.WeiXinProperties;
 import com.oying.modules.sh.service.OrderReturnService;
 import com.oying.modules.sh.service.OrderService;
 import com.oying.utils.enums.PayTypeEnum;
@@ -22,7 +23,6 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -49,10 +49,11 @@
     private final SwiftPassProperties properties;
     private final OrderService orderService;
     private final OrderReturnService returnService;
+    private final WeiXinProperties weiXinProperties;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public HwcResponse pay(String ip, Integer total, String timeExpire, String description, String openId,
+    public HwcResponse pay(String ip, String total, String timeExpire, String description, String openId,
                            String orderNum, PayTypeEnum status) throws IOException {
         SortedMap<String, String> map = new TreeMap<>();
         map.put("service", service_pay);
@@ -64,8 +65,8 @@
         map.put("out_trade_no", orderNum);
         map.put("body", description);
         map.put("sub_openid", openId);
-        map.put("sub_appid", properties.getAppId());
-        map.put("total_fee", String.valueOf(total));
+        map.put("sub_appid", weiXinProperties.getAppId());
+        map.put("total_fee", total);
         map.put("mch_create_ip", ip);
         map.put("notify_url", properties.getNotifyUrl());
         map.put("time_expire", timeExpire);
diff --git a/oying-system/src/main/java/com/oying/modules/security/config/SecurityProperties.java b/oying-system/src/main/java/com/oying/modules/security/config/SecurityProperties.java
index ff07ca3..77a3b86 100644
--- a/oying-system/src/main/java/com/oying/modules/security/config/SecurityProperties.java
+++ b/oying-system/src/main/java/com/oying/modules/security/config/SecurityProperties.java
@@ -55,6 +55,11 @@
      */
     private Long renew;
 
+    /**
+     * 自定义redis key
+     */
+    private String generateOrderSn;
+
     public String getTokenStartWith() {
         return tokenStartWith + " ";
     }
diff --git a/oying-system/src/main/java/com/oying/modules/security/config/SwiftPassProperties.java b/oying-system/src/main/java/com/oying/modules/security/config/SwiftPassProperties.java
index 7724412..e420159 100644
--- a/oying-system/src/main/java/com/oying/modules/security/config/SwiftPassProperties.java
+++ b/oying-system/src/main/java/com/oying/modules/security/config/SwiftPassProperties.java
@@ -29,8 +29,6 @@
     private String isRaw;
     // 是否小程序支付
     private String isMinipg;
-    // AppID
-    private String appId;
     // 请求url
     private String reqUrl;
     // 支付通知地址
diff --git a/oying-system/src/main/java/com/oying/modules/security/config/WeiXinProperties.java b/oying-system/src/main/java/com/oying/modules/security/config/WeiXinProperties.java
index bcaca43..cd8eb34 100644
--- a/oying-system/src/main/java/com/oying/modules/security/config/WeiXinProperties.java
+++ b/oying-system/src/main/java/com/oying/modules/security/config/WeiXinProperties.java
@@ -26,6 +26,6 @@
     private String getPhoneNumber;
     /*POST 该接口用于发送订阅消息。*/
     private String sendMessage;
-    /* 是否生成环境*/
+    /* 是否生产环境*/
     private boolean enabled;
 }
diff --git a/oying-system/src/main/java/com/oying/modules/security/rest/AuthController.java b/oying-system/src/main/java/com/oying/modules/security/rest/AuthController.java
index 43c4154..8a48e10 100644
--- a/oying-system/src/main/java/com/oying/modules/security/rest/AuthController.java
+++ b/oying-system/src/main/java/com/oying/modules/security/rest/AuthController.java
@@ -174,7 +174,7 @@
                     //创建用户
                     User user = new User();
                     user.setUsername(phone);
-                    user.setNickName("LYHD-" + phone);
+                    user.setNickName("OYING-" + phone);
                     user.setUserType(ConstantsKey.BUYER);
                     user.setEnabled(true);
                     getRole(user);
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/OrderProductSnapshot.java b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderProductSnapshot.java
index c9e5c05..a9a2237 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/domain/OrderProductSnapshot.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderProductSnapshot.java
@@ -37,7 +37,6 @@
     @ApiModelProperty(value = "商品ID")
     private Long productId;
 
-    @NotBlank
     @ApiModelProperty(value = "商品编号")
     private String productCode;
 
@@ -57,7 +56,6 @@
     @ApiModelProperty(value = "主图片")
     private String productMainImage;
 
-    @NotBlank
     @ApiModelProperty(value = "商品描述")
     private String productDescription;
 
@@ -84,6 +82,7 @@
     @ApiModelProperty(value = "实付金额")
     private BigDecimal actuallyPayPrice;
 
+    @NotBlank
     @ApiModelProperty(value = "状态")
     private String payState;
 
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturnProductSnapshot.java b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturnProductSnapshot.java
index 1b5641e..a792693 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturnProductSnapshot.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/OrderReturnProductSnapshot.java
@@ -37,7 +37,6 @@
     @ApiModelProperty(value = "商品ID")
     private Long productId;
 
-    @NotBlank
     @ApiModelProperty(value = "商品编号")
     private String productCode;
 
diff --git a/oying-system/src/main/java/com/oying/modules/sh/domain/request/ProductOrder.java b/oying-system/src/main/java/com/oying/modules/sh/domain/request/ProductOrder.java
index 11dd5e9..963ce17 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/domain/request/ProductOrder.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/domain/request/ProductOrder.java
@@ -16,5 +16,5 @@
     @ApiModelProperty(value = "商品ID")
     private String productId;
     @ApiModelProperty(value = "数量")
-    private Integer productCount;
+    private Integer count;
 }
diff --git a/oying-system/src/main/java/com/oying/modules/sh/rest/OrderController.java b/oying-system/src/main/java/com/oying/modules/sh/rest/OrderController.java
index 22d967a..1624943 100644
--- a/oying-system/src/main/java/com/oying/modules/sh/rest/OrderController.java
+++ b/oying-system/src/main/java/com/oying/modules/sh/rest/OrderController.java
@@ -19,6 +19,7 @@
 import io.swagger.annotations.*;
 
 import java.io.IOException;
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -68,8 +69,8 @@
     @PostMapping("submit")
     @Log("小程序:提交订单")
     @ApiOperation("小程序:提交订单")
-    public ResponseEntity<Object> submitOrder(@Validated @RequestBody SubmitOrder submit) {
-        return new ResponseEntity<>(R.success(orderService.submitOrder(submit)), HttpStatus.CREATED);
+    public ResponseEntity<Object> submitOrder(@Validated @RequestBody SubmitOrder submit, HttpServletRequest request) {
+        return new ResponseEntity<>(R.success(orderService.submitOrder(submit, request)), HttpStatus.CREATED);
     }
 
     @DeleteMapping
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 4ec21e7..e19d9e9 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,6 +5,7 @@
 
 import java.util.List;
 import java.io.IOException;
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -40,7 +41,7 @@
 
     OrderInfo generatorOrder(GeneratorOrder generator);
 
-    Order submitOrder(SubmitOrder submit);
+    Order submitOrder(SubmitOrder submit, HttpServletRequest request);
 
     /**
      * 创建
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 7e4ce9f..fa8fdea 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,17 +1,24 @@
 package com.oying.modules.sh.service.impl;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.oying.exception.BadRequestException;
+import com.oying.modules.hwc.service.SwiftPassService;
 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.OrderProductSnapshot;
 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.OrderProductSnapshotService;
 import com.oying.modules.sh.service.UserAddressService;
-import com.oying.utils.FileUtil;
+import com.oying.utils.*;
+import com.oying.utils.enums.GenerateEnum;
+import com.oying.utils.enums.PayStateEnum;
+import com.oying.utils.enums.PayTypeEnum;
 import lombok.RequiredArgsConstructor;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -20,14 +27,13 @@
 import com.oying.modules.sh.mapper.OrderMapper;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import com.oying.utils.PageUtil;
 
 import java.math.BigDecimal;
+import java.sql.Timestamp;
 import java.util.*;
 import java.io.IOException;
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
-import com.oying.utils.PageResult;
 
 /**
  * @author lixin
@@ -41,6 +47,9 @@
     private final OrderMapper orderMapper;
     private final UserAddressService userAddressService;
     private final ProductService productService;
+    private final SwiftPassService swiftPassService;
+    private final OrderProductSnapshotService productSnapshotService;
+    private final RedisUtils redisUtils;
 
     @Override
     public PageResult<Order> queryAll(OrderQueryCriteria criteria, Page<Object> page) {
@@ -53,13 +62,53 @@
     }
 
     @Override
-    public Order submitOrder(SubmitOrder submit) {
+    @Transactional(rollbackFor = Exception.class)
+    public synchronized Order submitOrder(SubmitOrder submit, HttpServletRequest request) {
+        if (!submit.getPayType().equals(PayTypeEnum.HWC)) {
+            throw new BadRequestException("支付类型暂未开放");
+        }
+        String orderNum = redisUtils.generateOrderSn(GenerateEnum.ORDER.getKey());
+        // 总金额
+        BigDecimal amount = BigDecimal.ZERO;
+        GeneratorOrder generator = new GeneratorOrder();
+        generator.setProducts(submit.getProducts());
+        generator.setStoreId(submit.getStoreId());
+        OrderInfo info = generatorOrder(generator);
+        // 商品快照
+        List<OrderProductSnapshot> snapshots = new ArrayList<>();
+
+        for (ProductInfo productInfo : info.getProducts()) {
+            Product product = productInfo.getProduct();
+            OrderProductSnapshot snapshot = new OrderProductSnapshot();
+            snapshot.setOrderNum(orderNum);
+            snapshot.setStoreId(submit.getStoreId());
+            snapshot.setProductId(product.getProductId());
+            snapshot.setProductBarcode(product.getBarcode());
+            snapshot.setProductName(product.getName());
+            snapshot.setProductTitle(product.getTitle());
+            snapshot.setProductMainImage(product.getMainImageUrl());
+            snapshot.setParamData(JSONObject.toJSONString(productInfo.getProductLabels()));
+            snapshot.setUnitPrice(product.getPrice());
+            snapshot.setDetailCount(productInfo.getCount());
+            snapshot.setOriginalPrice(product.getPrice());
+            snapshot.setPaidPrice(product.getPrice());
+            BigDecimal decimal = BigDecimalUtils.multiply(product.getPrice(), productInfo.getCount());
+            amount = BigDecimalUtils.add(amount, decimal);
+            snapshot.setActuallyPayPrice(decimal);
+            snapshot.setPayState(PayStateEnum.NOTPAY.getKey());
+            snapshots.add(snapshot);
+        }
+        // 下单后30分钟失效
+        Timestamp time = DateUtil.addMinute(DateUtil.getTimeStamp(), 30);
+        String expire = DateUtil.localDateTimeFormat(time.toLocalDateTime(), DateUtil.SDF_YMDHMS);
+        swiftPassService.pay(StringUtils.getIp(request), BigDecimalUtils.yuanToCents(amount).toString(), expire,SecurityUtils.getCurrentUserId());
+        productSnapshotService.saveBatch(snapshots);
         return null;
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public OrderInfo generatorOrder(GeneratorOrder criteria) {
+    public synchronized OrderInfo generatorOrder(GeneratorOrder criteria) {
         List<ProductInfo> products = new ArrayList<>();
         BigDecimal amount = BigDecimal.ZERO;
         for (ProductOrder productOrder : criteria.getProducts()) {
@@ -74,18 +123,18 @@
                 ProductStatusEnum statusEnum = ProductStatusEnum.get(product.getStatus());
                 throw new BadRequestException(product.getName() + ":" + (statusEnum != null ? statusEnum.getReasonPhrase() : "状态"));
             }
-            if (productOrder.getProductCount() > product.getStockQuantity()) {
+            if (productOrder.getCount() > product.getStockQuantity()) {
                 throw new BadRequestException("商品库存不足");
             }
-            if (productOrder.getProductCount() < product.getMinPurchaseQuantity()) {
+            if (productOrder.getCount() < product.getMinPurchaseQuantity()) {
                 throw new BadRequestException("起售数量不足");
             }
             ProductInfo info = new ProductInfo();
             info.setProduct(product);
             info.setProductLabels(product.getLabels());
-            info.setCount(productOrder.getProductCount());
+            info.setCount(productOrder.getCount());
             products.add(info);
-            amount = amount.add(product.getPrice().multiply(BigDecimal.valueOf(productOrder.getProductCount())));
+            amount = BigDecimalUtils.add(amount, BigDecimalUtils.multiply(product.getPrice(), productOrder.getCount()));
         }
         OrderInfo info = new OrderInfo();
         info.setProducts(products);
diff --git a/oying-system/src/main/resources/config/application-dev.yml b/oying-system/src/main/resources/config/application-dev.yml
index 9f4f811..b48be65 100644
--- a/oying-system/src/main/resources/config/application-dev.yml
+++ b/oying-system/src/main/resources/config/application-dev.yml
@@ -89,6 +89,8 @@
   online-key: "online_token:"
   # 验证码
   code-key: "captcha_code:"
+  # 自定义redis key
+  generate-order-sn: oying:generate:sn
   # token 续期检查时间范围(默认30分钟,单位毫秒),在token即将过期的一段时间内用户操作了,则给用户的token续期
   detect: 1800000
   # 续期时间范围,默认1小时,单位毫秒
@@ -149,27 +151,25 @@
 # 汇旺财
 swift-pass:
   # 密钥
-  key: ny4u8YpBoKegSrkggT4mtV7PbBku1BKb
+  key: vJB6683s4NtQtXBgHTvE1hWOUtcre7nj
   # 私钥
   mch-private-key: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC2YNuGqSAFcIVOc9mnmIbnVfQoyyMBoyGqTD3beiy/UsXZrGF4OIrPEevwXnwHktURupjHAKvt92PL4L9wTz7cknaQkF0NH5saOdY3sL88xH7F3qSgIwHPvkRileFeEHx+pKnXBms8yiliDqPk0MV3iRRoXKhRnojrWAYJhyz+1iJ13qWXCWcpr9hf77Uu/r1N7wsJKN4Z75M2qQC6LgRTaHoBroLGVtld4PM30ee6o9RR8yiFVx4FDVukinGR15nTsrNh+sUx3piVXqYrq23UPjUWVtJlf9cEvfNVXCMsa71LGEzUl0zxDfeyXRQhel3E27p2oovEYvhl5s+pZhtXAgMBAAECggEBAKXZLKinccwgh8lRBrQmuz7x5ieWms3pWDryPCozTy/pCKyq2rQlzu0BIiqi8W09tG773eTSEodDOkhzqANsvQB+XD2YWlYN0NEnmUtpem67TYGItvI9A2+0WaHBJIGSwnO0MBKu7qQIP1vBbn8s7vWF/b3tzM70ORSzJkJR37QY435+ZG9rKMKyL/tuGW7E5AgrHmyl2aK9me3vgUrZct2e9l5XLrn9oU1niEmbDbFARhphXDCEPIvFiu7WtFDBmp/jEOc4u/y/sYMjS1RWpO9iOyTZDO8Mi9iofXugmoot4Tn0lBckeR6YVRb/I3EcVADoMfk1iaN1aWv1u+Ska8ECgYEA3ZFYMvo5y7SztrEbyLpWGsp6aM4a5ght8p52/rFhSHD5CGS7Uywhp4LxxIjLTRBNa/UkBzOq1Xt1+PVDNHf0E1yYZqEv9OXWC0yiCsnwO6b7o9hc3VnnX4jw7FkS0+pjfgCK4/A9hFj9xUI+qX3L3+pOCseioUeYofqTc2bn7ncCgYEA0rhvvNO30EisLACdOIem8XgbL4LjKJ47FnYS/TEZ9cDhJW5G2pAxgyFsqhN/GuTVg8uSQ7a6PlcBxzTuOwdZg05RcCAdmsXUdGjVbKk2i4CBp0K1j4QYfr8Wt18x0RLfzIQDrZQajWssVGjo8sfMn8qmjbRNbMmokRTflGIkEiECgYEAxChaYn9fzbYEaRixlWtKsdtSthjKfZ8239ZlWSVnEEBcaY7svTzT6r6mFq5Y9rgZIxvbsriOZQQxtKBGyFvubXnLvwizMWiNsGE/ELgphFZYcH0r8hgXHGBbk5NkdNMNFE+cpyJZBCPZP9tfKKUjavC/+RE3LPv66GS0SDXx3g8CgYAYOIT3cmqFcWUA5c0si0MgLEsLqgLMT2vBSC8klTlDqzj14XgZdUuLpBLmdbk9cSIttP+J8v3zXnLg3++mL1EVq7HmrnpYqPajrs0hYU3YuRuuCxfteCSMpRBKYZHLU10QF/iIQibPLIt65FgqV9boYxXD4f6oS4Gps3mDh8hXoQKBgBKojPBWgp4/WBMfh8nUzFzTiW7ACyG2jAxGtu0dtqfwx2LkesUKGhD1JGlxdDQ6jSv9tbhAgbZjTAULSo03626ZaiSDF+nCwFsobd3wRiij8LiL9amW5t6XBeX6bS5SCh45GbgnNBtzBqUI19/CGH09YXNpCYnADsY4fab4wNpR
   # 公钥
   plat-public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmDbhqkgBXCFTnPZp5iG51X0KMsjAaMhqkw923osv1LF2axheDiKzxHr8F58B5LVEbqYxwCr7fdjy+C/cE8+3JJ2kJBdDR+bGjnWN7C/PMR+xd6koCMBz75EYpXhXhB8fqSp1wZrPMopYg6j5NDFd4kUaFyoUZ6I61gGCYcs/tYidd6llwlnKa/YX++1Lv69Te8LCSjeGe+TNqkAui4EU2h6Aa6CxlbZXeDzN9HnuqPUUfMohVceBQ1bpIpxkdeZ07KzYfrFMd6YlV6mK6tt1D41FlbSZX/XBL3zVVwjLGu9SxhM1JdM8Q33sl0UIXpdxNu6dqKLxGL4ZebPqWYbVwIDAQAB
   # 门店编号
-  mch-id: 1030232127
+  mch-id: 1030238092
   # 签名方式
   sign-type: MD5
   # 原生JS
   is-raw: 1
   # 是否小程序支付
   is-minipg: 1
-  # AppID
-  app-id: wx5d2be84f99104b92
   # 请求url
   req-url: https://pay.hstypay.com/v2/pay/gateway
   # 支付通知地址
-  notify-url: http://mini.cqliyan.cn/lyhd/api/swiftPass/alipayCallback
+  notify-url: http://1.95.124.88:8088/api/swiftPass/alipayCallback
   # 退款通知地址
-  refund-url: https://localhost/oying/api/swiftPass/returnNotify
+  refund-url: https://1.95.124.88:8088/api/swiftPass/returnNotify
 
 obs:
   access_key_id: RZ1UIOZDZ58DD4NWPD6Q

--
Gitblit v1.9.3