xin
2025-07-07 c6a6f44907b37efe3f2e21b9d8f9350897fa92c0
小程序:提交订单(完善)
1 files deleted
1 files added
7 files modified
187 ■■■■■ changed files
oying-common/src/main/java/com/oying/utils/SecurityUtils.java 12 ●●●●● patch | view | raw | blame | history
oying-common/src/main/java/com/oying/utils/enums/OrderStatusEnum.java 43 ●●●●● patch | view | raw | blame | history
oying-common/src/main/java/com/oying/utils/enums/StatusEnum.java 35 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/hwc/service/SwiftPassService.java 2 ●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/hwc/service/impl/SwiftPassServiceImpl.java 13 ●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/sh/domain/Order.java 2 ●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java 55 ●●●●● patch | view | raw | blame | history
oying-system/src/main/resources/config/application-dev.yml 4 ●●●● patch | view | raw | blame | history
oying-system/src/main/resources/config/application-prod.yml 21 ●●●● patch | view | raw | blame | history
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
     */
oying-common/src/main/java/com/oying/utils/enums/OrderStatusEnum.java
New file
@@ -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();
    }
}
oying-common/src/main/java/com/oying/utils/enums/StatusEnum.java
File was deleted
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);
    /**
     * <一句话功能简述>
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);
            }
        }
    }
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
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
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
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