liujie
2026-04-19 e2b08a29091627edd251220216b6ac2ad8d9079b
update
9个文件已修改
197 ■■■■■ 已修改文件
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/CbyzxPayUtil.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/WeChatUtil.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverYKDTravel/guns-admin/src/main/resources/application-prod.yml 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderCrossCityController.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementYKDTravel/guns-admin/src/main/resources/application-dev.yml 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/CbyzxPayUtil.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/CbyzxPayUtil.java
@@ -1,20 +1,20 @@
package com.stylefeng.guns.modular.system.util;
import cn.hutool.Hutool;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.*;
/**
 * 创博优支付工具类
 * 目前仅实现创建支付单接口。
 */
@Slf4j
public class CbyzxPayUtil {
    /**
@@ -26,11 +26,11 @@
     * 创建支付单接口
     */
    public static final String CREATE_PAY_ORDER_PATH = "/api/inner/pay/create";
    public static final String CLOSE_PAY_ORDER_PATH = "/api/inner/pay/close";
    public static final String CLOSE_PAY_ORDER_PATH = "/api/inner/refund/create";
    private static final String PAYMENT_ORDER_TYPE = "PAYMENT_ORDER";
    private static final String DEFAULT_CURRENCY = "CNY";
    private static final String DEFAULT_PAY_CHANNEL_CODE = "ykdride-wxmini";
    private static final String DEFAULT_PAY_CHANNEL_CODE = "ykdride-driver-wxmini";
    private static final String DEFAULT_TENANT = "gz.zuny.ykdride.platform";
    private CbyzxPayUtil() {
@@ -76,6 +76,7 @@
    private static JSONObject postForJson(String baseUrl, String path, Map<String, Object> params, String actionName) {
        HttpClientUtil httpClientUtil = new HttpClientUtil();
        log.info("{} request: {}", actionName, JSONObject.toJSONString(params));
        String responseText = httpClientUtil.pushHttpRequset(
                "POST",
                buildUrl(baseUrl, path),
@@ -145,9 +146,6 @@
        if (request == null) {
            throw new IllegalArgumentException("request must not be null");
        }
        if (!StringUtils.hasText(request.getTenant())) {
            throw new IllegalArgumentException("tenant must not be blank");
        }
        if (!StringUtils.hasText(request.getOutRequestNo())) {
            throw new IllegalArgumentException("outRequestNo must not be blank");
        }
@@ -169,7 +167,6 @@
    public static ClosePayOrderRequest mockCloseRequest(String outRequestNo) {
        ClosePayOrderRequest request = new ClosePayOrderRequest();
        request.setTenant(DEFAULT_TENANT);
        request.setOutRequestNo(outRequestNo);
        return request;
    }
@@ -206,14 +203,17 @@
            params.put("tenant", DEFAULT_TENANT);
            params.put("paymentOrderType", PAYMENT_ORDER_TYPE);
            params.put("outRequestNo", outRequestNo);
            //转为分
            paymentOrderAmount = BigDecimal.valueOf(paymentOrderAmount.multiply(new BigDecimal(100)).intValue());
            params.put("paymentOrderAmount", paymentOrderAmount);
            params.put("currency", DEFAULT_CURRENCY);
            params.put("buyerId", buyerId);
            params.put("openId", openId);
            params.put("subOpenid", openId);
            params.put("storeIds", Arrays.asList("246"));
            params.put("payChannelCode", DEFAULT_PAY_CHANNEL_CODE);
            params.put("payEndTime", payEndTime);
            params.put("callbackUrl", callbackUrl);
            params.put("businessCode", "driver");
            return params;
        }
@@ -272,24 +272,46 @@
    public static class ClosePayOrderRequest {
        private String tenant;
        private String outRequestNo;
        private String refundOutRequestNo;
        private Integer refundAmount;
        private String refundDesc;
        public Map<String, Object> toParamMap() {
            Map<String, Object> params = new LinkedHashMap<>();
            params.put("tenant", tenant);
            params.put("tenant",DEFAULT_TENANT );
            params.put("outRequestNo", outRequestNo);
            params.put("refundOutRequestNo", refundOutRequestNo);
            params.put("refundAmount", refundAmount);
            params.put("refundDesc", refundDesc);
            return params;
        }
        public String getTenant() {
            return tenant;
        public String getRefundOutRequestNo() {
            return refundOutRequestNo;
        }
        public void setTenant(String tenant) {
            this.tenant = tenant;
        public void setRefundOutRequestNo(String refundOutRequestNo) {
            this.refundOutRequestNo = refundOutRequestNo;
        }
        public Integer getRefundAmount() {
            return refundAmount;
        }
        public void setRefundAmount(Integer refundAmount) {
            this.refundAmount = refundAmount;
        }
        public String getRefundDesc() {
            return refundDesc;
        }
        public void setRefundDesc(String refundDesc) {
            this.refundDesc = refundDesc;
        }
        public String getOutRequestNo() {
            return outRequestNo;
        }
DriverYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/WeChatUtil.java
@@ -23,11 +23,9 @@
@Component
public class WeChatUtil {
    @Value("${wx.appletsAppid}")
    private String wxAppletsAppid;
    private String wxAppletsAppid="wx20301e30167d920e";
    @Value("${wx.appletsAppSecret}")
    private String wxAppletsAppSecret;
    private String wxAppletsAppSecret="4b8fe5cea20c4309fa996caa06ac9b4c";
    @Autowired
    private RestTemplate restTemplate;
@@ -39,7 +37,7 @@
     * @return
     */
    public Map<String, String> code2Session(String jscode){
        String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + wxAppletsAppid + "&secret=" + wxAppletsAppSecret
        String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + "wx20301e30167d920e" + "&secret=" + "4b8fe5cea20c4309fa996caa06ac9b4c"
                + "&js_code=" + jscode + "&grant_type=authorization_code";
        String forObject = restTemplate.getForObject(url, String.class);
        JSONObject jsonObject = JSON.parseObject(forObject);
@@ -85,7 +83,7 @@
        String content = "jsapi_ticket=" + ticket + "&noncestr=" + noncestr + "&timestamp=" + timestamp + "&url=" + url;
        String signature = DigestUtils.sha1Hex(content);
        Map<String,Object> map=new HashMap<>();
        map.put("appId", wxAppletsAppid);
        map.put("appId", "wx20301e30167d920e");
        map.put("timestamp", timestamp);
        map.put("nonceStr", noncestr);
        map.put("signature", signature);
DriverYKDTravel/guns-admin/src/main/resources/application-prod.yml
@@ -80,8 +80,8 @@
    grantType: authorization_code #填authorization_code
    appid: 111 #应用唯一标识,在微信开放平台提交应用审核通过后获得
    appSecret: 111 #应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
    appletsAppid: wx436cde5de45e1ed1 #小程序APPid
    appletsAppSecret: e94f587cfb5c325c13d72b1f5ddbb1e6 #
    appletsAppid: wxccaecee088db18d5 #小程序APPid
    appletsAppSecret: c02390b36817fae7ccd27f084dfbd294 #
    mchId: 111 #微信支付分配的商户号
    key: 111 #key为商户平台设置的密钥key:
    url: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderCrossCityController.java
@@ -526,6 +526,7 @@
                }
                if(query.getPayType() == 1){//微信
                    // TODO 退款
                    //添加交易明细
                    transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", query.getAmount(), 1, 1, 1, 3, tOrderCrossCityId);
                }else if(query.getPayType()==4){
ManagementYKDTravel/guns-admin/src/main/resources/application-dev.yml
@@ -1,12 +1,14 @@
server:
  port: 8010
  tomcat:
    basedir: /etraffic/server/chuxing/tomcat
  servlet:
    session:
      cookie:
        name: CHUXINGSID
guns:
  swagger-open: true              #是否开启swagger (true/false)
  swagger-open: false              #是否开启swagger (true/false)
  kaptcha-open: false             #是否开启登录时验证码 (true/false)
  spring-session-open: true      #是否开启spring session,如果是多机环境需要开启(true/false)
  session-invalidate-time: 1800     #session失效时间(只在单机环境下生效,多机环境在SpringSessionConfig类中配置) 单位:秒
@@ -18,7 +20,7 @@
spring:
  profiles:
    active: dev
    active: prod
  mvc:
    static-path-pattern: /static/**
    view:
@@ -32,15 +34,17 @@
    multipart:
      max-request-size: 500MB
      max-file-size: 500MB
  redis:
    host: 192.168.110.80
    port: 6379
    password: 123456
  session:
    redis:
      namespace: spring:chuxing:session
    store-type: redis
    timeout: 7200
  redis:
    host: 127.0.0.1
    port: 6410
    password: Qnz_jt@20#25
    database: 0
    timeout: 1000
mybatis-plus:
  type-aliases-package: com.stylefeng.guns.modular
@@ -54,10 +58,10 @@
---
spring:
  datasource:
    url: jdbc:mysql://192.168.110.47:3306/hn_ridingdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
    url: jdbc:mysql://127.0.0.1:8066/yuekeduo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    db-name: qyttravel #用来搜集数据库的所有表
    password: YueKeDuo@2026!.
    db-name: yuekeduo #用来搜集数据库的所有表
    filters: wall,mergeStat
@@ -65,7 +69,11 @@
spring:
  data:
    mongodb:
      uri: mongodb://192.168.110.80:27017/traveling_track
      host: 127.0.0.1
      port: 27009
      username: qnjt_ridingmgdb
      password: qnjtriding@Prom2025
      database: qnjt_ridingmgdb
---
@@ -73,8 +81,8 @@
  grantType: authorization_code #填authorization_code
  appid: 1111 #应用唯一标识,在微信开放平台提交应用审核通过后获得
  appSecret: 1111 #应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
  appletsAppid: wxcc3c9058e2b294db #小程序APPid
  appletsAppSecret: 5610fc6126255ca5f7bd9fa4330338b6 #
  appletsAppid: wx436cde5de45e1ed1 #小程序APPid
  appletsAppSecret: e94f587cfb5c325c13d72b1f5ddbb1e6 #
  mchId: 1111 #微信支付分配的商户号
  key: 1111 #key为商户平台设置的密钥key:
@@ -86,23 +94,23 @@
  alipayPublicKey: 1111 #应用公钥
  alipay_public_key: 1111 #支付宝公钥
---
qyt:
  chuxing_url: http://192.168.110.80:8010
  daijia_url: http://192.168.110.80:8010
  chuxing_url: http://127.0.0.1:5000
  daijia_url: http://10.31.182.11:3000/daijia
#支付回调地址
#正式环境
callbackPath: http://192.168.110.80
callbackPath: https://traffic.qytzt.cn/chuxing
#交通部推送数据功能开关
pushMinistryOfTransport: false
cos:
  secretId: AKIDofP7ezSmvtiNtDMLExUpALJCya0EHG3e
  secretKey: Sp481pRrRpBQzOekfPzPgmhR0GV9oKem
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
@@ -1720,40 +1720,43 @@
     */
    @ResponseBody
    @PostMapping("/base/cbyzxCancelOrderTaxi")
    public void cbyzxCancelOrderTaxi(HttpServletRequest request, HttpServletResponse response) {
        try {
            Map<String, String> map = payMoneyUtil.weixinpayCallback(request);
            if (null != map) {
                String order_id = map.get("transaction_id");
                String out_trade_no = map.get("out_trade_no");
                String result = map.get("result");
                if (ToolUtil.isNotEmpty(out_trade_no) && ToolUtil.isNotEmpty(order_id)) {
                    PrintWriter out = response.getWriter();
                    out.write(result);
                    out.flush();
                    out.close();
    public Map<String, Object> cbyzxCancelOrderTaxi(HttpServletRequest request, HttpServletResponse response) {
        // 不做处理  退款已同步处理
        return buildCbyzxCallbackResponse(0, "success");
                    String[] split = out_trade_no.split("_");
                    Integer id = Integer.valueOf(split[0]);
                    Integer type = Integer.valueOf(split[1]);
                    switch (type) {
                        case 1:
                            orderPrivateCarService.payCancelOrderPrivateCar(id, order_id, 1);
                            break;
                        case 2:
                            orderTaxiService.payCancelOrderTaxi(id, order_id, 1);
                            break;
                        case 3:
                            orderCrossCityService.payCancelOrderCrossCity(id, order_id, 1);
                            break;
                    }
                }
//                cloudPay(map.get("total_fee"),map.get("transaction_id"),1);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
//        try {
//            Map<String, String> map = payMoneyUtil.weixinpayCallback(request);
//            if (null != map) {
//                String order_id = map.get("transaction_id");
//                String out_trade_no = map.get("out_trade_no");
//                String result = map.get("result");
//                if (ToolUtil.isNotEmpty(out_trade_no) && ToolUtil.isNotEmpty(order_id)) {
//                    PrintWriter out = response.getWriter();
//                    out.write(result);
//                    out.flush();
//                    out.close();
//
//                    String[] split = out_trade_no.split("_");
//                    Integer id = Integer.valueOf(split[0]);
//                    Integer type = Integer.valueOf(split[1]);
//                    switch (type) {
//                        case 1:
//                            orderPrivateCarService.payCancelOrderPrivateCar(id, order_id, 1);
//                            break;
//                        case 2:
//                            orderTaxiService.payCancelOrderTaxi(id, order_id, 1);
//                            break;
//                        case 3:
//                            orderCrossCityService.payCancelOrderCrossCity(id, order_id, 1);
//                            break;
//                    }
//                }
////                cloudPay(map.get("total_fee"),map.get("transaction_id"),1);
//
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
    }
    /**
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -1133,7 +1133,7 @@
        if (orderPrivateCar.getState() >= 5 && orderPrivateCar.getState() != 11) {
            return ResultUtil.error("订单已取消,请刷新页面");
        }
        if (!Integer.valueOf(2).equals(orderPrivateCar.getType())) {
        if (!Integer.valueOf(2).equals(orderPrivateCar.getPaymentMode())) {
            ResultUtil refundResult = handlePrivateCarPrepayCancelRefund(orderPrivateCar, reason, remark, uid);
            if (refundResult != null) {
                if (!ResultUtil.SUCCESS.equals(refundResult.getCode())) {
@@ -2694,7 +2694,7 @@
    }
    private String buildPrepayRefundOutNo(Integer orderId) {
        return "PREPAY_REFUND_1_" + orderId;
        return "PREPAY_REFUND_1_" + orderId+ToolUtil.getRandomString(5);
    }
    private boolean isPrivateCarPrepayMode(OrderPrivateCar orderPrivateCar) {
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/CbyzxPayUtil.java
@@ -213,6 +213,7 @@
            params.put("payChannelCode", DEFAULT_PAY_CHANNEL_CODE);
            params.put("payEndTime", payEndTime);
            params.put("callbackUrl", callbackUrl);
            params.put("businessCode", "passenger");
            return params;
        }
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
@@ -1,5 +1,6 @@
package com.stylefeng.guns.modular.taxi.service.impl;
import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@@ -554,9 +555,12 @@
        if (orderTaxi.getState() >= 5 && orderTaxi.getState() != 11) {
            return ResultUtil.error("订单已取消,请刷新页面");
        }
        if (!Integer.valueOf(2).equals(orderTaxi.getType())) {
        System.out.println("出租车退款111!!!!");
        if (!Integer.valueOf(2).equals(orderTaxi.getPaymentMode())) {
            System.out.println("出租车退款2222!!!!");
            ResultUtil refundResult = handleTaxiPrepayCancelRefund(orderTaxi, reason, remark, uid);
            if (refundResult != null) {
                System.out.println("出租车退款3333!!!!"+refundResult.getCode());
                if (!ResultUtil.SUCCESS.equals(refundResult.getCode())) {
                    return refundResult;
                }
@@ -2191,10 +2195,11 @@
    }
    private String buildPrepayRefundOutNo(Integer orderId) {
        return "PREPAY_REFUND_2_" + orderId;
        return "PREPAY_REFUND_2_" + orderId+ ToolUtil.getRandomString(5);
    }
    private ResultUtil handleTaxiPrepayCancelRefund(OrderTaxi orderTaxi, String reason, String remark, Integer uid) throws Exception {
        System.out.println("出租车退款!!!!");
        if (orderTaxi == null || !Integer.valueOf(1).equals(orderTaxi.getPaymentMode())) {
            return null;
        }
@@ -2212,6 +2217,7 @@
        request.setRefundAmount(toFen(refundAmount));
        request.setRefundDesc(ToolUtil.isNotEmpty(reason) ? reason : "出租车订单取消退款");
        JSONObject response = CbyzxPayUtil.closePayOrder(request);
        System.out.println("微信先付订单退款结果:" + response.toJSONString());
        if (!isTaxiPrepayRefundSuccess(response)) {
            return ResultUtil.error(extractTaxiRefundMessage(response), response);
        }