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