From c6a6f44907b37efe3f2e21b9d8f9350897fa92c0 Mon Sep 17 00:00:00 2001
From: xin <1099200748@qq.com>
Date: Mon, 07 Jul 2025 16:41:20 +0800
Subject: [PATCH] 小程序:提交订单(完善)

---
 oying-system/src/main/resources/config/application-dev.yml                              |    4 
 /dev/null                                                                               |   35 --------
 oying-system/src/main/java/com/oying/modules/hwc/service/impl/SwiftPassServiceImpl.java |   13 +-
 oying-common/src/main/java/com/oying/utils/SecurityUtils.java                           |   12 +++
 oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java      |   55 +++++++++++++
 oying-system/src/main/java/com/oying/modules/sh/domain/Order.java                       |    2 
 oying-system/src/main/java/com/oying/modules/hwc/service/SwiftPassService.java          |    2 
 oying-system/src/main/resources/config/application-prod.yml                             |   21 ++--
 oying-common/src/main/java/com/oying/utils/enums/OrderStatusEnum.java                   |   43 ++++++++++
 9 files changed, 129 insertions(+), 58 deletions(-)

diff --git a/oying-common/src/main/java/com/oying/utils/SecurityUtils.java b/oying-common/src/main/java/com/oying/utils/SecurityUtils.java
index f6fc90d..fed67c5 100644
--- a/oying-common/src/main/java/com/oying/utils/SecurityUtils.java
+++ b/oying-common/src/main/java/com/oying/utils/SecurityUtils.java
@@ -75,6 +75,18 @@
     }
 
     /**
+     * 获取当前用户openid
+     *
+     * @return /
+     */
+    public static String getCurrentOpenid() {
+        UserDetails userDetails = getCurrentUser();
+        // 将 Java 对象转换为 JSONObject 对象
+        JSONObject jsonObject = (JSONObject) JSON.toJSON(userDetails);
+        return jsonObject.getJSONObject("user").getString("openid");
+    }
+
+    /**
      * 获取用户ID
      * @return 系统用户ID
      */
diff --git a/oying-common/src/main/java/com/oying/utils/enums/OrderStatusEnum.java b/oying-common/src/main/java/com/oying/utils/enums/OrderStatusEnum.java
new file mode 100644
index 0000000..69718a4
--- /dev/null
+++ b/oying-common/src/main/java/com/oying/utils/enums/OrderStatusEnum.java
@@ -0,0 +1,43 @@
+package com.oying.utils.enums;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum OrderStatusEnum {
+    ZERO(0, "订单已提交"),
+    ONE(1, "支付成功"),
+    TWO(2, "商家已接单"),
+    THREE(3, "骑手已接单"),
+    FOUR(4, "商家已接单"),
+    FIVE(5, "商家已备货"),
+    SIX(6, "骑手已到店"),
+    SEVEN(7, "骑手已取货"),
+    EIGHT(8, "商品已送达"),
+    NINE(9, "订单已完成"),
+    UNKNOWN(99, "未知枚举");
+
+    private final Integer key;
+
+    private final String value;
+
+    public static OrderStatusEnum find(Integer val) {
+        for (OrderStatusEnum value : OrderStatusEnum.values()) {
+            if (val.equals(value.getKey())) {
+                return value;
+            }
+        }
+        return UNKNOWN;
+    }
+
+    public static String getValue(Integer val) {
+        for (OrderStatusEnum value : OrderStatusEnum.values()) {
+            if (val.equals(value.getKey())) {
+                return value.getValue();
+            }
+        }
+        return UNKNOWN.getValue();
+    }
+}
diff --git a/oying-common/src/main/java/com/oying/utils/enums/StatusEnum.java b/oying-common/src/main/java/com/oying/utils/enums/StatusEnum.java
deleted file mode 100644
index f4bcd2e..0000000
--- a/oying-common/src/main/java/com/oying/utils/enums/StatusEnum.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.oying.utils.enums;
-
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-@Getter
-@AllArgsConstructor
-public enum StatusEnum {
-    ZERO("0", "停用"),
-    ONE("1", "通过"),
-    THREE("2", "未知");
-
-    private final String key;
-
-    private final String value;
-
-    public static StatusEnum find(String val) {
-        for (StatusEnum value : StatusEnum.values()) {
-            if (val.equals(value.getKey())) {
-                return value;
-            }
-        }
-        return THREE;
-    }
-
-    public static String getValue(String val) {
-        for (StatusEnum value : StatusEnum.values()) {
-            if (val.equals(value.getKey())) {
-                return value.getValue();
-            }
-        }
-        return THREE.getValue();
-    }
-}
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 69a269d..20be22e 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
@@ -24,7 +24,7 @@
      * @see [类、类#方法、类#成员]
      */
     HwcResponse pay(String ip, String total, String timeExpire, String description, String openId,
-                    String orderNum, PayTypeEnum status) throws IOException;
+                    String orderNum, PayTypeEnum status);
 
     /**
      * <一句话功能简述>
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 c255e3f..e300f79 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
@@ -11,6 +11,7 @@
 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.CloseUtil;
 import com.oying.utils.enums.PayTypeEnum;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -54,7 +55,7 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public HwcResponse pay(String ip, String total, String timeExpire, String description, String openId,
-                           String orderNum, PayTypeEnum status) throws IOException {
+                           String orderNum, PayTypeEnum status)  {
         SortedMap<String, String> map = new TreeMap<>();
         map.put("service", service_pay);
         map.put("version", version);
@@ -117,15 +118,15 @@
                 throw new BadRequestException("操作失败");
             }
         } catch (Exception e) {
-            log.error("请求参数:{}", params);
-            log.error("返回参数:{}", resultMap);
-            throw new BadRequestException("系统异常:" + e.getMessage());
+            log.error("汇旺财下单错误请求参数:{}", params);
+            log.error("汇旺财下单错误返回参数:{}", resultMap);
+            throw new BadRequestException("汇旺财下单错误:" + e.getMessage());
         } finally {
             if (response != null) {
-                response.close();
+                CloseUtil.close(response);
             }
             if (client != null) {
-                client.close();
+                CloseUtil.close(client);
             }
         }
     }
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 649bef2..d1893bd 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
@@ -91,7 +91,7 @@
     private String payTime;
 
     @NotBlank
-    @ApiModelProperty(value = "订单失效时间RFC3339")
+    @ApiModelProperty(value = "订单失效时间")
     private String expireTime;
 
     @NotBlank
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 fa8fdea..82885bb 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
@@ -2,10 +2,13 @@
 
 import com.alibaba.fastjson2.JSONObject;
 import com.oying.exception.BadRequestException;
+import com.oying.modules.hwc.domain.HwcResponse;
 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.pc.store.domain.Store;
+import com.oying.modules.pc.store.service.StoreService;
 import com.oying.modules.sh.domain.Order;
 import com.oying.modules.sh.domain.OrderProductSnapshot;
 import com.oying.modules.sh.domain.request.GeneratorOrder;
@@ -17,6 +20,7 @@
 import com.oying.modules.sh.service.UserAddressService;
 import com.oying.utils.*;
 import com.oying.utils.enums.GenerateEnum;
+import com.oying.utils.enums.OrderStatusEnum;
 import com.oying.utils.enums.PayStateEnum;
 import com.oying.utils.enums.PayTypeEnum;
 import lombok.RequiredArgsConstructor;
@@ -50,6 +54,8 @@
     private final SwiftPassService swiftPassService;
     private final OrderProductSnapshotService productSnapshotService;
     private final RedisUtils redisUtils;
+    private final StoreService storeService;
+    private final static String DESCRIBE = "哦应:";
 
     @Override
     public PageResult<Order> queryAll(OrderQueryCriteria criteria, Page<Object> page) {
@@ -98,12 +104,55 @@
             snapshot.setPayState(PayStateEnum.NOTPAY.getKey());
             snapshots.add(snapshot);
         }
+        Timestamp now = DateUtil.getTimeStamp();
         // 下单后30分钟失效
-        Timestamp time = DateUtil.addMinute(DateUtil.getTimeStamp(), 30);
+        Timestamp time = DateUtil.addMinute(now, 30);
         String expire = DateUtil.localDateTimeFormat(time.toLocalDateTime(), DateUtil.SDF_YMDHMS);
-        swiftPassService.pay(StringUtils.getIp(request), BigDecimalUtils.yuanToCents(amount).toString(), expire,SecurityUtils.getCurrentUserId());
+        String openid = SecurityUtils.getCurrentOpenid();
+        if (openid == null || openid.isEmpty()) {
+            throw new BadRequestException("OPENID错误");
+        }
+        // 订单信息
+        Order order = new Order();
+        order.setOrderNum(orderNum);
+        order.setOrderStatus(OrderStatusEnum.ZERO.getKey());
+        order.setOrderStatusDescribe(OrderStatusEnum.ZERO.getValue());
+        order.setUserId(SecurityUtils.getCurrentUserId());
+        order.setUsername(SecurityUtils.getCurrentUsername());
+        Store store = storeService.getMerchantStore(submit.getStoreId());
+        order.setStoreId(submit.getStoreId());
+        order.setStoreName(store.getStoreName());
+        order.setStoreLogo(store.getLogoImageUrl());
+        order.setOrderDescribe(DESCRIBE + submit.getStoreId());
+        order.setOriginalPrice(amount);
+        order.setPaidPrice(amount);
+        order.setActuallyPayPrice(amount);
+        order.setOpenid(openid);
+        order.setPayType(submit.getPayType().getKey());
+        order.setExpireTime(expire);
+        order.setOpenid(openid);
+        Long total = BigDecimalUtils.yuanToCents(amount);
+        if (total > 0) {
+            HwcResponse response = swiftPassService.pay(StringUtils.getIp(request), total.toString(), expire,
+                    DESCRIBE + submit.getStoreId(), openid, orderNum, submit.getPayType());
+            //微信支付下单放回值
+            order.setAppId(response.getAppId());
+            order.setTimestamp(response.getTimeStamp());
+            order.setNonceStr(response.getNonceStr());
+            order.setPackageVal(response.getPackageVal());
+            order.setSignType(response.getSignType());
+            order.setPaySign(response.getPaySign());
+            order.setPayState(PayStateEnum.NOTPAY.getKey());
+            order.setPayMessage(PayStateEnum.NOTPAY.getValue());
+            order.setPayTime(null);
+        } else {
+            order.setPayState(PayStateEnum.SUCCESS.getKey());
+            order.setPayMessage(PayStateEnum.SUCCESS.getValue());
+            order.setPayTime(DateUtil.localDateTimeFormat(now.toLocalDateTime(), DateUtil.SDF_YMDHMS));
+        }
+        orderMapper.insert(order);
         productSnapshotService.saveBatch(snapshots);
-        return null;
+        return order;
     }
 
     @Override
diff --git a/oying-system/src/main/resources/config/application-dev.yml b/oying-system/src/main/resources/config/application-dev.yml
index b48be65..4aa5a20 100644
--- a/oying-system/src/main/resources/config/application-dev.yml
+++ b/oying-system/src/main/resources/config/application-dev.yml
@@ -167,9 +167,9 @@
   # 请求url
   req-url: https://pay.hstypay.com/v2/pay/gateway
   # 支付通知地址
-  notify-url: http://1.95.124.88:8088/api/swiftPass/alipayCallback
+  notify-url: http://1.95.124.88:8088/oying/api/swiftPass/alipayCallback
   # 退款通知地址
-  refund-url: https://1.95.124.88:8088/api/swiftPass/returnNotify
+  refund-url: https://1.95.124.88:8088/oying/api/swiftPass/returnNotify
 
 obs:
   access_key_id: RZ1UIOZDZ58DD4NWPD6Q
diff --git a/oying-system/src/main/resources/config/application-prod.yml b/oying-system/src/main/resources/config/application-prod.yml
index ab56135..57f5446 100644
--- a/oying-system/src/main/resources/config/application-prod.yml
+++ b/oying-system/src/main/resources/config/application-prod.yml
@@ -93,6 +93,8 @@
   online-key: "online_token:"
   # 验证码
   code-key: "captcha_code:"
+  # 自定义redis key
+  generate-order-sn: oying:generate:sn
   # token 续期检查时间范围(默认30分钟,单位默认毫秒),在token即将过期的一段时间内用户操作了,则给用户的token续期
   detect: 1800000
   # 续期时间范围,默认 1小时,这里单位毫秒
@@ -127,6 +129,7 @@
   # 文件大小 /M
   maxSize: 100
   avatarMaxSize: 5
+
   # 短信验证码key 时间
 sms:
   key: oying-sms-key-
@@ -158,28 +161,26 @@
 
 # 汇旺财
 swift-pass:
-  # 密钥1
-  key: qqqqqqqqqqqqqqqqqqqq
+  # 密钥
+  key: vJB6683s4NtQtXBgHTvE1hWOUtcre7nj
   # 私钥
-  mch-private-key: qqqqqqqqqqqq
+  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: qqqqq
-  # 门店编号1
-  mch-id: 1111
+  plat-public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtmDbhqkgBXCFTnPZp5iG51X0KMsjAaMhqkw923osv1LF2axheDiKzxHr8F58B5LVEbqYxwCr7fdjy+C/cE8+3JJ2kJBdDR+bGjnWN7C/PMR+xd6koCMBz75EYpXhXhB8fqSp1wZrPMopYg6j5NDFd4kUaFyoUZ6I61gGCYcs/tYidd6llwlnKa/YX++1Lv69Te8LCSjeGe+TNqkAui4EU2h6Aa6CxlbZXeDzN9HnuqPUUfMohVceBQ1bpIpxkdeZ07KzYfrFMd6YlV6mK6tt1D41FlbSZX/XBL3zVVwjLGu9SxhM1JdM8Q33sl0UIXpdxNu6dqKLxGL4ZebPqWYbVwIDAQAB
+  # 门店编号
+  mch-id: 1030238092
   # 签名方式
   sign-type: MD5
   # 原生JS
   is-raw: 1
   # 是否小程序支付
   is-minipg: 1
-  # AppID
-  app-id: wx2273296a5569cbad
   # 请求url
   req-url: https://pay.hstypay.com/v2/pay/gateway
   # 支付通知地址
-  notify-url: https://localhost/oying/api/swiftPass/alipayCallback
+  notify-url: http://1.95.124.88:8088/oying/api/swiftPass/alipayCallback
   # 退款通知地址
-  refund-url: https://localhost/oying/api/swiftPass/returnNotify
+  refund-url: https://1.95.124.88:8088/oying/api/swiftPass/returnNotify
 
 obs:
   access_key_id: RZ1UIOZDZ58DD4NWPD6Q

--
Gitblit v1.9.3