From 473a109a404797bc154834b0dfe87331a27aa7a8 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期一, 24 十一月 2025 21:03:18 +0800
Subject: [PATCH] 斗拱退款对接

---
 ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/controller/DouGongNotifyController.java                  |    2 
 ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java |    1 
 ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/DouGongWithdrawBiz.java                              |  112 +++-----
 ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderCrossCityController.java  |  137 +++++++----
 ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCrossCity.java                              |   25 ++
 ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TPubWithdrawalController.java        |   12 
 ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java               |   53 ++-
 ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderLogistics.java                              |   23 +
 ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/DouGongRefundBiz.java                                |  167 +++++++++++++
 ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderLogisticsController.java  |  140 +++++++---
 ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/FenZhangUtil.java                                    |    3 
 ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCompanyWithdrawController.java      |    5 
 12 files changed, 481 insertions(+), 199 deletions(-)

diff --git a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/DouGongRefundBiz.java b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/DouGongRefundBiz.java
new file mode 100644
index 0000000..d8a980c
--- /dev/null
+++ b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/DouGongRefundBiz.java
@@ -0,0 +1,167 @@
+package com.stylefeng.guns.modular.huifu.biz;
+
+import com.alibaba.fastjson.JSONObject;
+import com.huifu.bspay.sdk.opps.core.BasePay;
+import com.huifu.bspay.sdk.opps.core.config.MerConfig;
+import com.huifu.bspay.sdk.opps.core.exception.BasePayException;
+import com.huifu.bspay.sdk.opps.core.net.BasePayRequest;
+import com.stylefeng.guns.core.util.DateUtil;
+import com.stylefeng.guns.modular.huifu.properties.HuiFuProperties;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.security.KeyFactory;
+import java.security.PrivateKey;
+import java.security.Signature;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.text.SimpleDateFormat;
+import java.util.Base64;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 斗拱提现业务
+ * @author mitao
+ * @date 2025/11/21
+ */
+@Slf4j
+@Component
+public class DouGongRefundBiz {
+    @Autowired
+    private HuiFuProperties huiFuProperties;
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Value("${callbackPath}")
+    private String callbackPath;
+
+    private static final String REFUND_URL = "https://api.huifu.com/v4/trade/payment/scanpay/refund";
+    /**
+     * 公共参数
+     * sys_id	系统号	String	32	Y	渠道商/商户的huifu_id
+     * (1)当主体为渠道商时,此字段填写渠道商huifu_id;
+     * (2)当主体为直连商户时,此字段填写商户huifu_id;
+     * 示例值:6666000108854952
+     * product_id	产品号	String	32	Y	汇付分配的产品号,示例值:YYZY
+     * sign	加签结果	String	512	Y	接口加签验签说明
+     * data	数据	Json		Y	业务请求参数,具体值参考API文档
+     *
+     * 请求参数
+     * req_date	请求日期	String	8	Y	格式yyyyMMdd;示例值:20220925
+     * req_seq_id	请求流水号	String	128	Y	同一huifu_id下当天唯一;示例值:rQ2021121311173944175651
+     * huifu_id	商户号	String	32	Y	示例值:6666000123120001
+     * ord_amt	申请退款金额	String	14	Y	单位元,需保留小数点后两位;示例值:1.00,最低传入0.01
+     * 注意:如果是原交易是延时交易,退款金额必须小于等于待确认金额
+     * org_req_date	原交易请求日期	String	8	Y	格式:yyyyMMdd;示例值:20220925
+     * org_hf_seq_id	原交易全局流水号	String	128	N	org_hf_seq_id,org_party_order_id,org_req_seq_id三选一;
+     * 示例值:0030default220825182711P099ac1f343f00000
+     * org_party_order_id	原交易微信支付宝的商户单号	String	64	N	org_hf_seq_id,org_party_order_id,org_req_seq_id三选一;
+     * 示例值:03232109190255105603561;参见用户账单说明
+     * org_req_seq_id	原交易请求流水号	String	128	N	org_hf_seq_id,org_party_order_id,org_req_seq_id三选一;
+     * 示例值:202110210012100005
+     * remark	备注	String	84	N	原样返回;示例值:备注
+     * notify_url	异步通知地址	String	512	N	示例值: http://service.example.com/to/path
+     *
+     * 响应内容
+     * resp_code	业务响应码	String	8	Y	业务返回码
+     * resp_desc	业务响应信息	String	512	Y	业务返回描述
+     * product_id	产品号	String	32	Y	交易时传入,原样返回;示例值:YYZY
+     * huifu_id	商户号	String	32	Y	示例值:6666000108854952
+     * org_hf_seq_id	原交易全局流水号	String	128	N	示例值:00470topo1A221019132207P068ac1362af00000
+     * org_req_date	原交易请求日期	String	8	N	格式为yyyyMMdd,示例值:20220925
+     * org_req_seq_id	原交易请求流水号	String	128	N	示例值:rQ202112131149875651
+     * trans_date	退款交易发生日期	String	8	N	格式为yyyyMMdd,示例值:20220925
+     * trans_time	退款交易发生时间	String	6	N	格式:HHMMSS,示例值:091010 代表9点10分10秒
+     * trans_finish_time	退款完成时间	String	14	N	格式yyyyMMddHHmmss;示例值:20091225091010
+     * trans_stat	交易状态	String	1	N	P:处理中、S:成功、F:失败;示例值:S
+     * ord_amt	退款金额(元)	String	14	Y	需保留小数点后两位;示例值:1.00,最低传入0.01
+     * actual_ref_amt	实际退款金额(元)	String	14	N	需保留小数点后两位,示例值:1.00,最低传入0.01
+     * remark	备注	String	84	N	原样返回;示例值:备注
+     * bank_message	通道返回描述	String	256	N	示例值:SUCCESS
+     * fund_freeze_stat	资金冻结状态	String	16	N	FREEZE:冻结;UNFREEZE:解冻;示例值:UNFREEZE
+     * 退款发生时,对应原交易的资金冻结状态。
+     * pay_channel	交易通道	String	1	N	枚举值:A-支付宝、T-微信、U-银联二维码、D-数字货币
+     * fee_amount	退款返还手续费	String	14	N	单位元,保留小数点后两位,示例值:1.00
+     * trade_type	交易类型	String		N	TRANS_REFUND:交易退款;目前仅该一个枚举值;
+     * 示例值:TRANS_REFUND
+     */
+
+    /**
+     * 交易退款接口
+     *
+     * @param reqSeqId 请求流水号,同一huifu_id下当天唯一
+     * @param ordAmt 申请退款金额,单位元
+     * @param orgReqDate 原交易请求日期,格式yyyyMMdd
+     * @param orgReqSeqId 原交易请求流水号(三选一)
+     * @param type 类型 1:小件物流;2:跨城出行
+     * @return 请求结果
+     */
+    public Map<String, Object> refund(String reqSeqId, BigDecimal ordAmt, String orgReqDate, String orgReqSeqId, Integer type) throws Exception {
+        log.info("开始调用斗拱退款接口, 退款金额: {}",  ordAmt);
+        // 1. 数据初始化,填入对应的商户配置
+        MerConfig merConfig = new MerConfig();
+        merConfig.setProcutId(huiFuProperties.getProductId());
+        merConfig.setSysId(huiFuProperties.getSysId());
+        merConfig.setRsaPrivateKey(huiFuProperties.getRsaPrivateKey());
+        merConfig.setRsaPublicKey(huiFuProperties.getRsaPublicKey());
+        BasePay.initWithMerConfig(merConfig);
+        // 构建业务参数data
+        // 2.组装请求参数
+        Map<String, Object> data = new HashMap<>();
+        data.put("req_date", DateUtil.format(new Date(),"yyyyMMdd"));
+        data.put("req_seq_id", reqSeqId);
+        data.put("huifu_id", huiFuProperties.getSysId());
+        data.put("ord_amt", ordAmt.setScale(2, RoundingMode.HALF_UP).toString());
+        data.put("org_req_date", orgReqDate);
+        // 三选一参数:org_hf_seq_id,org_party_order_id,org_req_seq_id
+        data.put("org_req_seq_id", orgReqSeqId);
+        String notifyUrl = type.equals(1) ? "/base/dougong/refund-logistics" : "/base/dougong/refund-crosscity";
+        data.put("notify_url", callbackPath + notifyUrl);
+
+        // 发送HTTP请求 - POST JSON格式
+        Map<String, Object> response = BasePayRequest.requestBasePay(REFUND_URL, data, null, false);
+        log.info("斗拱退款接口响应内容: {}", JSONObject.toJSONString(response));
+        return response;
+    }
+
+
+    /**
+     * 创建错误结果
+     */
+    private JSONObject createErrorResult(String errorMsg) {
+        JSONObject result = new JSONObject();
+        result.put("resp_code", "9999");
+        result.put("resp_desc", errorMsg);
+        result.put("success", false);
+        return result;
+    }
+    public static String sign(String data, String privateKeyBase64) {
+        // Base64 --> Key
+        try {
+            byte[] bytes = Base64.getDecoder().decode(privateKeyBase64);
+            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes);
+            KeyFactory keyFactory;
+            keyFactory = KeyFactory.getInstance("RSA");
+            PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
+            // Sign
+            Signature signature = Signature.getInstance("SHA256WithRSA");
+            signature.initSign(privateKey);
+            signature.update(data.getBytes("UTF-8"));
+            return Base64.getEncoder().encodeToString(signature.sign());
+        } catch (Exception e) {
+            return null;
+        }
+    }
+}
diff --git a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/DouGongWithdrawBiz.java b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/DouGongWithdrawBiz.java
index 2e27948..7e044cf 100644
--- a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/DouGongWithdrawBiz.java
+++ b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/DouGongWithdrawBiz.java
@@ -1,6 +1,10 @@
 package com.stylefeng.guns.modular.huifu.biz;
 
 import com.alibaba.fastjson.JSONObject;
+import com.huifu.bspay.sdk.opps.core.BasePay;
+import com.huifu.bspay.sdk.opps.core.config.MerConfig;
+import com.huifu.bspay.sdk.opps.core.exception.BasePayException;
+import com.huifu.bspay.sdk.opps.core.net.BasePayRequest;
 import com.stylefeng.guns.modular.huifu.properties.HuiFuProperties;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,6 +18,7 @@
 import org.springframework.web.client.RestTemplate;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.security.KeyFactory;
 import java.security.PrivateKey;
 import java.security.Signature;
@@ -21,6 +26,9 @@
 import java.text.SimpleDateFormat;
 import java.util.Base64;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
 
 /**
  * 斗拱提现业务
@@ -36,7 +44,7 @@
     private RestTemplate restTemplate;
 
     @Value("${callbackPath}")
-    private static String callbackPath;
+    private String callbackPath;
 
     private static final String ENCASHMENT_URL = "https://api.huifu.com/v2/trade/settlement/encashment";
     /**
@@ -67,76 +75,40 @@
      * @param type 提现类型 1:企业 2:用户/司机
      * @return 请求结果
      */
-    public JSONObject encashment(String reqSeqId,BigDecimal cashAmt, String huifuId, String tokenNo, Integer type) {
-        try {
-            log.info("开始调用斗拱提现接口,取现方ID: {}, 取现金额: {}", huifuId, cashAmt);
+    public Map<String,Object> encashment(String reqSeqId,BigDecimal cashAmt, String huifuId, String tokenNo, Integer type) throws Exception {
+        log.info("开始调用斗拱提现接口,取现方ID: {}, 取现金额: {}", huifuId, cashAmt);
+        // 1. 数据初始化,填入对应的商户配置
+        MerConfig merConfig = new MerConfig();
+        merConfig.setProcutId(huiFuProperties.getProductId());
+        merConfig.setSysId(huiFuProperties.getSysId());
+        merConfig.setRsaPrivateKey(huiFuProperties.getRsaPrivateKey());
+        merConfig.setRsaPublicKey(huiFuProperties.getRsaPublicKey());
+        BasePay.initWithMerConfig(merConfig);
+        // 2.组装请求参数
+        Map<String, Object> data = new HashMap<>();
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
+        String reqDate = dateFormat.format(new Date());
 
-            // 构建业务参数data
-            JSONObject data = new JSONObject();
-            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
-            String reqDate = dateFormat.format(new Date());
-
-            data.put("req_date", reqDate);
-            data.put("req_seq_id", reqSeqId);
-            data.put("cash_amt", cashAmt.toString());
-            data.put("huifu_id", huifuId);
-            /**
-             * D0:当日到账;当日交易资金当天可取现到账;
-             * T1:次工作日到账;
-             * D1:次自然日到账;
-             * DM:当日到账;到账资金不包括当天的交易资金;
-             * 示例值:D0
-             */
-            data.put("into_acct_date_type", "D1");
-            data.put("token_no", tokenNo);
-            String notifyUrl = type.equals(1) ? "/base/dougong/ent/encashment" : "/base/dougong/user/encashment";
-            data.put("notify_url", callbackPath + notifyUrl);
-
-            String dataStr = data.toJSONString();
-            log.info("业务参数data: {}", dataStr);
-
-            // 构建完整请求参数
-            JSONObject requestJson = new JSONObject();
-            requestJson.put("sys_id", huiFuProperties.getHuifuId()); // 使用配置中的huifuId作为sys_id
-            requestJson.put("product_id", huiFuProperties.getProductId());
-            requestJson.put("data", dataStr);
-
-            // 生成签名 - 对整个报文进行签名
-            String signData = requestJson.toJSONString();
-            log.info("待签名报文: {}", signData);
-
-            String signature = sign(signData, huiFuProperties.getRsaPrivateKey());
-            if (signature == null) {
-                log.error("签名生成失败");
-                return createErrorResult("签名生成失败");
-            }
-
-            requestJson.put("sign", signature);
-
-            // 发送HTTP请求 - POST JSON格式
-            HttpHeaders headers = new HttpHeaders();
-            headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
-
-            HttpEntity<String> requestEntity = new HttpEntity<>(requestJson.toJSONString(), headers);
-
-            log.info("发送斗拱提现请求到: {}", ENCASHMENT_URL);
-            ResponseEntity<String> response = restTemplate.exchange(
-                ENCASHMENT_URL,
-                HttpMethod.POST,
-                requestEntity,
-                String.class
-            );
-
-            log.info("斗拱提现接口响应状态: {}, 响应内容: {}", response.getStatusCode(), response.getBody());
-
-            // 解析响应
-            JSONObject result = JSONObject.parseObject(response.getBody());
-            return result;
-
-        } catch (Exception e) {
-            log.error("调用斗拱提现接口异常: {}", e.getMessage(), e);
-            return createErrorResult("调用接口异常: " + e.getMessage());
-        }
+        data.put("req_date", reqDate);
+        data.put("req_seq_id", reqSeqId);
+        data.put("cash_amt", cashAmt.setScale(2, RoundingMode.HALF_UP).toString());
+        data.put("huifu_id", huifuId);
+        /**
+         * D0:当日到账;当日交易资金当天可取现到账;
+         * T1:次工作日到账;
+         * D1:次自然日到账;
+         * DM:当日到账;到账资金不包括当天的交易资金;
+         * 示例值:D0
+         */
+        data.put("into_acct_date_type", "D1");
+        data.put("token_no", tokenNo);
+        String notifyUrl = type.equals(1) ? "/base/dougong/ent/encashment" : "/base/dougong/user/encashment";
+        data.put("notify_url", callbackPath + notifyUrl);
+        String dataStr = JSONObject.toJSONString(data);
+        log.info("业务参数data: {}", dataStr);
+        Map<String, Object> response = BasePayRequest.requestBasePay("v2/trade/settlement/encashment", data, null, false);
+        log.info("斗拱提现接口响应内容: {}", JSONObject.toJSONString(response));
+        return response;
     }
 
 
diff --git a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/FenZhangUtil.java b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/FenZhangUtil.java
index 8a07770..b8cfda8 100644
--- a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/FenZhangUtil.java
+++ b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/biz/FenZhangUtil.java
@@ -5,6 +5,7 @@
 import com.huifu.bspay.sdk.opps.core.net.BasePayRequest;
 import com.stylefeng.guns.modular.huifu.properties.HuiFuProperties;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -18,7 +19,7 @@
 public class FenZhangUtil {
 
     @Autowired
-    private static HuiFuProperties huiFuProperties;
+    private HuiFuProperties huiFuProperties;
 
 
 //    public static void main(String[] args) throws Exception {
diff --git a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/controller/DouGongNotifyController.java b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/controller/DouGongNotifyController.java
index 1869441..b401ee0 100644
--- a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/controller/DouGongNotifyController.java
+++ b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/huifu/controller/DouGongNotifyController.java
@@ -28,7 +28,7 @@
  */
 @Slf4j
 @RestController
-@RequestMapping("/base/dougong/")
+@RequestMapping("/base/dougong")
 public class DouGongNotifyController {
     @Autowired
     private HuiFuProperties huiFuProperties;
diff --git a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCompanyWithdrawController.java b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCompanyWithdrawController.java
index f934bf7..0469386 100644
--- a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCompanyWithdrawController.java
+++ b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCompanyWithdrawController.java
@@ -35,6 +35,7 @@
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 控制器
@@ -184,8 +185,8 @@
 
             }
             String reqSeqId = RequestSeqUtil.extractPrefix("TX");
-            JSONObject result = douGongWithdrawBiz.encashment(reqSeqId, BigDecimal.valueOf(withdrawalReq.getAmount()), companyId.get(0).getHuifuId(), companyId.get(0).getTokenNo(), 1);
-            if (!result.get("resp_code").equals("00000000") || !result.getBoolean("success")) {
+            Map<String,Object> result = douGongWithdrawBiz.encashment(reqSeqId, BigDecimal.valueOf(withdrawalReq.getAmount()), companyId.get(0).getHuifuId(), companyId.get(0).getTokenNo(), 1);
+            if (!result.get("resp_code").equals("00000000")) {
                 return new ErrorTip(500, "操作失败,异常原因:"+result.get("resp_desc"));
             }
             tCompanyWithdraw.setReqSeqId(reqSeqId);
diff --git a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java
index 3dec029..8406891 100644
--- a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java
+++ b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java
@@ -14,6 +14,7 @@
 import com.stylefeng.guns.core.util.WoUtil;
 import com.stylefeng.guns.modular.cloudPayment.example.AllocationExample;
 import com.stylefeng.guns.modular.cloudPayment.req.AllocationReq;
+import com.stylefeng.guns.modular.huifu.biz.FenZhangUtil;
 import com.stylefeng.guns.modular.system.controller.util.Base64Util;
 import com.stylefeng.guns.modular.system.dao.DriverPunishMapper;
 import com.stylefeng.guns.modular.system.dao.DriverTrainMapper;
@@ -2073,7 +2074,7 @@
     @Autowired
     private IUserWithdrawalService userWithdrawalService;
 
-    public String createAllocationReq(Integer companyId,Integer userId,int type,double money){
+    public String createAllocationReq(Integer companyId,Integer userId,int type,double money) throws Exception {
         List<TEnterpriseWithdrawal> tEnterpriseWithdrawals = tEnterpriseWithdrawalService.selectList(new EntityWrapper<TEnterpriseWithdrawal>().eq("companyId", companyId));
         TDriver tUser = tDriverService.selectById(userId);
         List<UserWithdrawal> userWithdrawals = userWithdrawalService.selectList(new EntityWrapper<UserWithdrawal>().eq("phone", tUser.getPhone()));
@@ -2081,33 +2082,41 @@
             return "error";
         }
 
-        AllocationReq allocationReq= new AllocationReq();
-        allocationReq.setOutOrderNo(ToolUtil.getRandomString(32));
+        //AllocationReq allocationReq= new AllocationReq();
+        //allocationReq.setOutOrderNo(ToolUtil.getRandomString(32));
+        Map<String, Object> result;
         if(type==1){
 
-            allocationReq.setPayBalanceAcctId(tEnterpriseWithdrawals.get(0).getBalanceAcctId());
-            allocationReq.setRecvBalanceAcctId(userWithdrawals.get(0).getBalanceAcctId());
-
-            allocationReq.setPassword(Base64Util.decode(tEnterpriseWithdrawals.get(0).getTransactionAuthorizationCode()));
+            //allocationReq.setPayBalanceAcctId(tEnterpriseWithdrawals.get(0).getBalanceAcctId());
+            //allocationReq.setRecvBalanceAcctId(userWithdrawals.get(0).getBalanceAcctId());
+            //
+            //allocationReq.setPassword(Base64Util.decode(tEnterpriseWithdrawals.get(0).getTransactionAuthorizationCode()));
+            result = FenZhangUtil.fenzhang(RequestSeqUtil.generate("TK"), DateUtil.formatDate(new Date(), "yyyyMMdd"), String.valueOf(money), userWithdrawals.get(0).getHuiFuId());
         }else {
-            allocationReq.setRecvBalanceAcctId(tEnterpriseWithdrawals.get(0).getBalanceAcctId());
-            allocationReq.setPayBalanceAcctId(userWithdrawals.get(0).getBalanceAcctId());
-            allocationReq.setPassword(Base64Util.decode(userWithdrawals.get(0).getTransactionAuthorizationCode()));
+            //allocationReq.setRecvBalanceAcctId(tEnterpriseWithdrawals.get(0).getBalanceAcctId());
+            //allocationReq.setPayBalanceAcctId(userWithdrawals.get(0).getBalanceAcctId());
+            //allocationReq.setPassword(Base64Util.decode(userWithdrawals.get(0).getTransactionAuthorizationCode()));
+            result = FenZhangUtil.payFromUser(RequestSeqUtil.generate("TK"), DateUtil.formatDate(new Date(), "yyyyMMdd"), String.valueOf(money), userWithdrawals.get(0).getHuiFuId());
         }
-        money=money*100;
-        allocationReq.setAmount((int)money);
-        allocationReq.setProductName("分账");
-        allocationReq.setProductCount(1);
-        allocationReq.setOrderNo(ToolUtil.getRandomString(32));
-        allocationReq.setOrderAmount(1l);
-        try {
-            AllocationResp allocationResp = AllocationExample.create(allocationReq);
-            System.out.println(allocationResp);
+        if ("00000000".equals(result.get("respCode").toString())) {
             return "ok";
-        } catch (UpyztException e) {
-            e.printStackTrace();
-            return e.getMessage();
+        } else {
+            return result.get("respDesc").toString();
         }
+        //money=money*100;
+        //allocationReq.setAmount((int)money);
+        //allocationReq.setProductName("分账");
+        //allocationReq.setProductCount(1);
+        //allocationReq.setOrderNo(ToolUtil.getRandomString(32));
+        //allocationReq.setOrderAmount(1l);
+        //try {
+        //    AllocationResp allocationResp = AllocationExample.create(allocationReq);
+        //    System.out.println(allocationResp);
+        //    return "ok";
+        //} catch (UpyztException e) {
+        //    e.printStackTrace();
+        //    return e.getMessage();
+        //}
 
     }
 }
diff --git a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TPubWithdrawalController.java b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TPubWithdrawalController.java
index ad9e150..0964378 100644
--- a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TPubWithdrawalController.java
+++ b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TPubWithdrawalController.java
@@ -183,8 +183,8 @@
                         try {
                             log.info("用户提现创建=========");
                             String reqSeqId = RequestSeqUtil.generate("TX");
-                            JSONObject result = douGongWithdrawBiz.encashment(reqSeqId, tPubWithdrawal.getMoney(), userWithdrawals.get(0).getHuiFuId(), userWithdrawals.get(0).getTokenNo(), 2);
-                            if (!result.get("resp_code").equals("00000000") || !result.getBoolean("success")) {
+                            Map<String,Object> result = douGongWithdrawBiz.encashment(reqSeqId, tPubWithdrawal.getMoney(), userWithdrawals.get(0).getHuiFuId(), userWithdrawals.get(0).getTokenNo(), 2);
+                            if (!result.get("resp_code").equals("00000000")) {
                                 return new ErrorTip(500, "操作失败,异常原因:"+result.get("resp_desc"));
                             }
 
@@ -195,7 +195,7 @@
                             //tPubWithdrawal.setWithdrawId(withdrawalResp.getWithdrawalId());
                             tPubWithdrawalService.updateById(tPubWithdrawal);
                             //log.info("用户提现创建信息========="+withdrawalResp.toString());
-                            log.info("用户提现创建信息:{}", result.toJSONString());
+                            log.info("用户提现创建信息:{}", JSONObject.toJSONString(result));
                             log.info("用户提现创建成功=========");
                         } catch (Exception e) {
                             log.info("用户提现创建失败=========");
@@ -236,8 +236,8 @@
                     try {
                         log.info("司机提现创建=========");
                         String reqSeqId = RequestSeqUtil.generate("TX");
-                        JSONObject result = douGongWithdrawBiz.encashment(reqSeqId, tPubWithdrawal.getMoney(), userWithdrawal.getHuiFuId(), userWithdrawal.getTokenNo(), 2);
-                        if (!result.get("resp_code").equals("00000000") || !result.getBoolean("success")) {
+                        Map<String,Object> result = douGongWithdrawBiz.encashment(reqSeqId, tPubWithdrawal.getMoney(), userWithdrawal.getHuiFuId(), userWithdrawal.getTokenNo(), 2);
+                        if (!result.get("resp_code").equals("00000000")) {
                             return new ErrorTip(500, "操作失败,异常原因:"+result.get("resp_desc"));
                         }
 
@@ -248,7 +248,7 @@
                         //tPubWithdrawal.setWithdrawId(withdrawalResp.getWithdrawalId());
                         tPubWithdrawalService.updateById(tPubWithdrawal);
                         //log.info("司机提现创建信息========="+withdrawalResp.toString());
-                        log.info("司机提现创建信息:{}", result.toJSONString());
+                        log.info("司机提现创建信息:{}", JSONObject.toJSONString(result));
                         log.info("司机提现创建成功=========");
                     } catch (Exception e) {
                         log.info("司机提现创建失败=========");
diff --git a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderCrossCityController.java b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderCrossCityController.java
index 106abe8..e00cec5 100644
--- a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderCrossCityController.java
+++ b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderCrossCityController.java
@@ -8,10 +8,14 @@
 import com.stylefeng.guns.core.common.constant.factory.PageFactory;
 import com.stylefeng.guns.core.shiro.ShiroKit;
 import com.stylefeng.guns.core.shiro.ShiroUser;
+import com.stylefeng.guns.core.util.DateUtil;
+import com.stylefeng.guns.core.util.RequestSeqUtil;
 import com.stylefeng.guns.core.util.SinataUtil;
 import com.stylefeng.guns.core.util.ToolUtil;
 import com.stylefeng.guns.modular.cloudPayment.example.AllocationExample;
 import com.stylefeng.guns.modular.cloudPayment.req.AllocationReq;
+import com.stylefeng.guns.modular.huifu.biz.DouGongRefundBiz;
+import com.stylefeng.guns.modular.huifu.biz.FenZhangUtil;
 import com.stylefeng.guns.modular.system.controller.general.TDriverController;
 import com.stylefeng.guns.modular.system.controller.util.Base64Util;
 import com.stylefeng.guns.modular.system.controller.util.GetOpenBodySig;
@@ -71,6 +75,9 @@
 
     @Value("${filePath}")
     private String filePath;
+
+    @Autowired
+    private DouGongRefundBiz douGongRefundBiz;
 
     /**
      * 跳转到跨城出行订单首页
@@ -279,10 +286,17 @@
                 }
 
                 if(query.getPayType() == 1){//微信
-                    Map<String, String> map = payMoneyUtil.wxRefund(query.getCode(), tOrderCrossCityId + "_3", query.getAmount().toString(), query.getAmount().toString(), "/base/cancleOrderWXPay");
-                    if(!"SUCCESS".equals(map.get("return_code"))){
-                        return ResultUtil.error(map.get("return_msg"));
+                    //Map<String, String> map = payMoneyUtil.wxRefund(query.getCode(), tOrderCrossCityId + "_3", query.getAmount().toString(), query.getAmount().toString(), "/base/cancleOrderWXPay");
+                    //if(!"SUCCESS".equals(map.get("return_code"))){
+                    //    return ResultUtil.error(map.get("return_msg"));
+                    //}
+                    String refundReqSeqId = RequestSeqUtil.generate("TK");
+                    Map<String, Object> refund = douGongRefundBiz.refund(refundReqSeqId, BigDecimal.valueOf(query.getAmount()), DateUtil.format(query.getInsertTime(), "yyyyMMdd"), orderCrossCity.getOutTradeNo(), 1);
+                    orderCrossCity.setRefundReqSeqId(refundReqSeqId);
+                    if (!"00000000".equals(refund.get("resp_code")) && "S".equals(refund.get("trans_stat"))) {
+                        return ResultUtil.error("订单取消失败:" + refund.get("resp_desc").toString());
                     }
+                    tOrderCrossCityService.updateById(orderCrossCity);
                 }else if(query.getPayType()==4){
                     // TODO 退款
                     TUser userInfo = userService.selectById(orderCrossCity.getUserId());
@@ -302,10 +316,17 @@
                     String billNo = orderCrossCity.getBillNo();
 //                    cancleMoney(orderCrossCity.getPayMoney(),billNo);
                 }else{//支付宝
-                    Map<String, String> map = payMoneyUtil.aliRefund(query.getCode(), query.getAmount().toString());
-                    if(!"10000".equals(map.get("code"))){
-                        return ResultUtil.error(map.get("msg"));
+                    //Map<String, String> map = payMoneyUtil.aliRefund(query.getCode(), query.getAmount().toString());
+                    //if(!"10000".equals(map.get("code"))){
+                    //    return ResultUtil.error(map.get("msg"));
+                    //}
+                    String refundReqSeqId = RequestSeqUtil.generate("TK");
+                    Map<String, Object> refund = douGongRefundBiz.refund(refundReqSeqId, BigDecimal.valueOf(query.getAmount()), DateUtil.format(query.getInsertTime(), "yyyyMMdd"), orderCrossCity.getOutTradeNo(), 1);
+                    orderCrossCity.setRefundReqSeqId(refundReqSeqId);
+                    if (!"00000000".equals(refund.get("resp_code")) && "S".equals(refund.get("trans_stat"))) {
+                        return ResultUtil.error("订单取消失败:" + refund.get("resp_desc").toString());
                     }
+                    tOrderCrossCityService.updateById(orderCrossCity);
                     //添加交易明细
                     transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", query.getAmount(), 1, 1, 1, 3, tOrderCrossCityId);
                 }
@@ -399,7 +420,7 @@
     @Autowired
     private IUserWithdrawalService userWithdrawalService;
 
-    public String createAllocationReq(Integer companyId,Integer userId,int type,double money){
+    public String createAllocationReq(Integer companyId,Integer userId,int type,double money) throws Exception {
         List<TEnterpriseWithdrawal> tEnterpriseWithdrawals = tEnterpriseWithdrawalService.selectList(new EntityWrapper<TEnterpriseWithdrawal>().eq("companyId", companyId));
         TDriver tUser = tDriverService.selectById(userId);
         List<UserWithdrawal> userWithdrawals = userWithdrawalService.selectList(new EntityWrapper<UserWithdrawal>().eq("phone", tUser.getPhone()));
@@ -407,69 +428,85 @@
             return "error";
         }
 
-        AllocationReq allocationReq= new AllocationReq();
-        allocationReq.setOutOrderNo(ToolUtil.getRandomString(32));
+        //AllocationReq allocationReq= new AllocationReq();
+        //allocationReq.setOutOrderNo(ToolUtil.getRandomString(32));
+        Map<String, Object> result;
         if(type==1){
 
-            allocationReq.setPayBalanceAcctId(tEnterpriseWithdrawals.get(0).getBalanceAcctId());
-            allocationReq.setRecvBalanceAcctId(userWithdrawals.get(0).getBalanceAcctId());
-
-            allocationReq.setPassword(Base64Util.decode(tEnterpriseWithdrawals.get(0).getTransactionAuthorizationCode()));
+            //allocationReq.setPayBalanceAcctId(tEnterpriseWithdrawals.get(0).getBalanceAcctId());
+            //allocationReq.setRecvBalanceAcctId(userWithdrawals.get(0).getBalanceAcctId());
+            //
+            //allocationReq.setPassword(Base64Util.decode(tEnterpriseWithdrawals.get(0).getTransactionAuthorizationCode()));
+            result = FenZhangUtil.fenzhang(RequestSeqUtil.generate("TK"), DateUtil.formatDate(new Date(), "yyyyMMdd"), String.valueOf(money), userWithdrawals.get(0).getHuiFuId());
         }else {
-            allocationReq.setRecvBalanceAcctId(tEnterpriseWithdrawals.get(0).getBalanceAcctId());
-            allocationReq.setPayBalanceAcctId(userWithdrawals.get(0).getBalanceAcctId());
-            allocationReq.setPassword(Base64Util.decode(userWithdrawals.get(0).getTransactionAuthorizationCode()));
+            //allocationReq.setRecvBalanceAcctId(tEnterpriseWithdrawals.get(0).getBalanceAcctId());
+            //allocationReq.setPayBalanceAcctId(userWithdrawals.get(0).getBalanceAcctId());
+            //allocationReq.setPassword(Base64Util.decode(userWithdrawals.get(0).getTransactionAuthorizationCode()));
+            result = FenZhangUtil.payFromUser(RequestSeqUtil.generate("TK"), DateUtil.formatDate(new Date(), "yyyyMMdd"), String.valueOf(money), userWithdrawals.get(0).getHuiFuId());
         }
-        money=money*100;
-        allocationReq.setAmount((int)money);
-        allocationReq.setProductName("分账");
-        allocationReq.setProductCount(1);
-        allocationReq.setOrderNo(ToolUtil.getRandomString(32));
-        allocationReq.setOrderAmount(1l);
-        try {
-            AllocationResp allocationResp = AllocationExample.create(allocationReq);
-            System.out.println(allocationResp);
+        if ("00000000".equals(result.get("respCode").toString())) {
             return "ok";
-        } catch (UpyztException e) {
-            e.printStackTrace();
-            return e.getMessage();
+        } else {
+            return result.get("respDesc").toString();
         }
+        //money=money*100;
+        //allocationReq.setAmount((int)money);
+        //allocationReq.setProductName("分账");
+        //allocationReq.setProductCount(1);
+        //allocationReq.setOrderNo(ToolUtil.getRandomString(32));
+        //allocationReq.setOrderAmount(1l);
+        //try {
+        //    AllocationResp allocationResp = AllocationExample.create(allocationReq);
+        //    System.out.println(allocationResp);
+        //    return "ok";
+        //} catch (UpyztException e) {
+        //    e.printStackTrace();
+        //    return e.getMessage();
+        //}
 
     }
-    public String createAllocationReqUser(Integer companyId,Integer userId,int type,double money){
+    public String createAllocationReqUser(Integer companyId,Integer userId,int type,double money) throws Exception {
         List<TEnterpriseWithdrawal> tEnterpriseWithdrawals = tEnterpriseWithdrawalService.selectList(new EntityWrapper<TEnterpriseWithdrawal>().eq("companyId", companyId));
         TUser tUser = userService.selectById(userId);
         List<UserWithdrawal> userWithdrawals = userWithdrawalService.selectList(new EntityWrapper<UserWithdrawal>().eq("phone", tUser.getPhone()));
         if(userWithdrawals.size()==0){
             return "error";
         }
-        AllocationReq allocationReq= new AllocationReq();
-        allocationReq.setOutOrderNo(ToolUtil.getRandomString(32));
+        //AllocationReq allocationReq= new AllocationReq();
+        //allocationReq.setOutOrderNo(ToolUtil.getRandomString(32));
+        Map<String, Object> result;
         if(type==1){
 
-            allocationReq.setPayBalanceAcctId(tEnterpriseWithdrawals.get(0).getBalanceAcctId());
-            allocationReq.setRecvBalanceAcctId(userWithdrawals.get(0).getBalanceAcctId());
-
-            allocationReq.setPassword(Base64Util.decode(tEnterpriseWithdrawals.get(0).getTransactionAuthorizationCode()));
+            //allocationReq.setPayBalanceAcctId(tEnterpriseWithdrawals.get(0).getBalanceAcctId());
+            //allocationReq.setRecvBalanceAcctId(userWithdrawals.get(0).getBalanceAcctId());
+            //
+            //allocationReq.setPassword(Base64Util.decode(tEnterpriseWithdrawals.get(0).getTransactionAuthorizationCode()));
+            result = FenZhangUtil.fenzhang(RequestSeqUtil.generate("TK"), DateUtil.formatDate(new Date(), "yyyyMMdd"), String.valueOf(money), userWithdrawals.get(0).getHuiFuId());
         }else {
-            allocationReq.setRecvBalanceAcctId(tEnterpriseWithdrawals.get(0).getBalanceAcctId());
-            allocationReq.setPayBalanceAcctId(userWithdrawals.get(0).getBalanceAcctId());
-            allocationReq.setPassword(Base64Util.decode(userWithdrawals.get(0).getTransactionAuthorizationCode()));
+            //allocationReq.setRecvBalanceAcctId(tEnterpriseWithdrawals.get(0).getBalanceAcctId());
+            //allocationReq.setPayBalanceAcctId(userWithdrawals.get(0).getBalanceAcctId());
+            //allocationReq.setPassword(Base64Util.decode(userWithdrawals.get(0).getTransactionAuthorizationCode()));
+            result = FenZhangUtil.payFromUser(RequestSeqUtil.generate("TK"), DateUtil.formatDate(new Date(), "yyyyMMdd"), String.valueOf(money), userWithdrawals.get(0).getHuiFuId());
         }
-        money=money*100;
-        allocationReq.setAmount((int)money);
-        allocationReq.setProductName("分账");
-        allocationReq.setProductCount(1);
-        allocationReq.setOrderNo(ToolUtil.getRandomString(32));
-        allocationReq.setOrderAmount(1l);
-        try {
-            AllocationResp allocationResp = AllocationExample.create(allocationReq);
-            System.out.println(allocationResp);
+        if ("00000000".equals(result.get("respCode").toString())) {
             return "ok";
-        } catch (UpyztException e) {
-            e.printStackTrace();
-            return e.getMessage();
+        } else {
+            return result.get("respDesc").toString();
         }
+        //money=money*100;
+        //allocationReq.setAmount((int)money);
+        //allocationReq.setProductName("分账");
+        //allocationReq.setProductCount(1);
+        //allocationReq.setOrderNo(ToolUtil.getRandomString(32));
+        //allocationReq.setOrderAmount(1l);
+        //try {
+        //    AllocationResp allocationResp = AllocationExample.create(allocationReq);
+        //    System.out.println(allocationResp);
+        //    return "ok";
+        //} catch (UpyztException e) {
+        //    e.printStackTrace();
+        //    return e.getMessage();
+        //}
 
     }
 
diff --git a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderLogisticsController.java b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderLogisticsController.java
index 7bc71db..0a4ddb5 100644
--- a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderLogisticsController.java
+++ b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderLogisticsController.java
@@ -13,6 +13,7 @@
 import com.stylefeng.guns.core.util.ToolUtil;
 import com.stylefeng.guns.modular.cloudPayment.example.AllocationExample;
 import com.stylefeng.guns.modular.cloudPayment.req.AllocationReq;
+import com.stylefeng.guns.modular.huifu.biz.DouGongRefundBiz;
 import com.stylefeng.guns.modular.huifu.biz.FenZhangUtil;
 import com.stylefeng.guns.modular.system.controller.util.Base64Util;
 import com.stylefeng.guns.modular.system.dao.OrderCancelMapper;
@@ -22,6 +23,8 @@
 import com.unionpay.upyzt.exception.UpyztException;
 import com.unionpay.upyzt.resp.AllocationResp;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
@@ -33,10 +36,14 @@
 import javax.servlet.http.HttpServletResponse;
 import java.io.PrintWriter;
 import java.math.BigDecimal;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * 小件物流订单控制器
@@ -79,6 +86,8 @@
     private PayMoneyUtil payMoneyUtil;
     @Autowired
     private IUserCouponRecordService userCouponRecordService;
+    @Autowired
+    private DouGongRefundBiz douGongRefundBiz;
 
     /**
      * 跳转到小件物流订单首页
@@ -184,14 +193,33 @@
                         List<PaymentRecord> querys = paymentRecordService.query_(1, tOrderLogistics.getUserId(), 1, tOrderLogistics.getId(), tOrderLogistics.getType(), tOrderLogistics.getPayType(), 2);
                         System.out.println(querys);
                         boolean b = false;
+                        List<Integer> orderIds = querys.stream().map(PaymentRecord::getOrderId).collect(Collectors.toList());
+                        Map<Integer, TOrderLogistics> orderLogisticsMap = Collections.emptyMap();
+                        if (CollectionUtils.isNotEmpty(orderIds)) {
+                            orderLogisticsMap = tOrderLogisticsService.selectList(new EntityWrapper<TOrderLogistics>()
+                                            .in("id", orderIds).isNotNull("outTradeNo"))
+                                    .stream().collect(Collectors.toMap(TOrderLogistics::getId, Function.identity()));
+                        }
                         for (PaymentRecord query : querys) {
                             System.out.println("支付方式:"+query.getPayType());
                             if(query.getPayType() == 1){//微信
-                                Map<String, String> map = payMoneyUtil.wxRefund(query.getCode(), tOrderLogistics.getId() + "_" + tOrderLogistics.getType() + "_" + UUIDUtil.getRandomCode(5), query.getAmount().toString(), query.getAmount().toString(), "/base/cancleOrderWXPay");
-                                System.out.println("map:"+map);
-                                if(!"SUCCESS".equals(map.get("return_code"))){
-                                    return ResultUtil.error(map.get("return_msg"));
+                                //Map<String, String> map = payMoneyUtil.wxRefund(query.getCode(), tOrderLogistics.getId() + "_" + tOrderLogistics.getType() + "_" + UUIDUtil.getRandomCode(5), query.getAmount().toString(), query.getAmount().toString(), "/base/cancleOrderWXPay");
+                                //System.out.println("map:"+map);
+                                //if(!"SUCCESS".equals(map.get("return_code"))){
+                                //    return ResultUtil.error(map.get("return_msg"));
+                                //}
+                                TOrderLogistics orderLogistics = orderLogisticsMap.get(query.getOrderId());
+                                if (Objects.isNull(orderLogistics)) {
+                                    log.error("小件物流取消订单退款失败,未找到对应的斗拱支付订单,orderId={}", query.getOrderId());
+                                    continue;
                                 }
+                                String refundReqSeqId = RequestSeqUtil.generate("TK");
+                                Map<String, Object> refund = douGongRefundBiz.refund(refundReqSeqId, BigDecimal.valueOf(query.getAmount()), DateUtil.format(query.getInsertTime(), "yyyyMMdd"), orderLogistics.getOutTradeNo(), 1);
+                                orderLogistics.setRefundReqSeqId(refundReqSeqId);
+                                if (!"00000000".equals(refund.get("resp_code")) && "S".equals(refund.get("trans_stat"))) {
+                                    return ResultUtil.error("订单取消失败:" + refund.get("resp_desc").toString());
+                                }
+                                tOrderLogisticsService.updateById(orderLogistics);
                             }
                         }
                     }
@@ -283,60 +311,78 @@
 
         AllocationReq allocationReq= new AllocationReq();
         allocationReq.setOutOrderNo(ToolUtil.getRandomString(32));
-        if(type==1){
-
-            allocationReq.setPayBalanceAcctId(tEnterpriseWithdrawals.get(0).getBalanceAcctId());
-            allocationReq.setRecvBalanceAcctId(userWithdrawals.get(0).getBalanceAcctId());
-
-            allocationReq.setPassword(Base64Util.decode(tEnterpriseWithdrawals.get(0).getTransactionAuthorizationCode()));
-        }else {
-            allocationReq.setRecvBalanceAcctId(tEnterpriseWithdrawals.get(0).getBalanceAcctId());
-            allocationReq.setPayBalanceAcctId(userWithdrawals.get(0).getBalanceAcctId());
-            allocationReq.setPassword(Base64Util.decode(userWithdrawals.get(0).getTransactionAuthorizationCode()));
-        }
-        money=money*100;
-        allocationReq.setAmount((int)money);
-        allocationReq.setProductName("分账");
-        allocationReq.setProductCount(1);
-        allocationReq.setOrderNo(ToolUtil.getRandomString(32));
-        allocationReq.setOrderAmount(1l);
         try {
-            AllocationResp allocationResp = AllocationExample.create(allocationReq);
-            System.out.println(allocationResp);
-            return "ok";
-        } catch (UpyztException e) {
-            e.printStackTrace();
-            return e.getMessage();
+            Map<String, Object> result;
+            if(type==1){
+
+                //allocationReq.setPayBalanceAcctId(tEnterpriseWithdrawals.get(0).getBalanceAcctId());
+                //allocationReq.setRecvBalanceAcctId(userWithdrawals.get(0).getBalanceAcctId());
+                //
+                //allocationReq.setPassword(Base64Util.decode(tEnterpriseWithdrawals.get(0).getTransactionAuthorizationCode()));
+                result = FenZhangUtil.fenzhang(RequestSeqUtil.generate("TK"), DateUtil.formatDate(new Date(), "yyyyMMdd"), String.valueOf(money), userWithdrawals.get(0).getHuiFuId());
+            }else {
+                //allocationReq.setRecvBalanceAcctId(tEnterpriseWithdrawals.get(0).getBalanceAcctId());
+                //allocationReq.setPayBalanceAcctId(userWithdrawals.get(0).getBalanceAcctId());
+                //allocationReq.setPassword(Base64Util.decode(userWithdrawals.get(0).getTransactionAuthorizationCode()));
+                result = FenZhangUtil.payFromUser(RequestSeqUtil.generate("TK"), DateUtil.formatDate(new Date(), "yyyyMMdd"), String.valueOf(money), userWithdrawals.get(0).getHuiFuId());
+            }
+            if ("00000000".equals(result.get("respCode").toString())) {
+                return "ok";
+            } else {
+                return result.get("respDesc").toString();
+            }
+        } catch (Exception e) {
+            log.error("分账异常", e);
+            throw new RuntimeException(e);
         }
+        //money=money*100;
+        //allocationReq.setAmount((int)money);
+        //allocationReq.setProductName("分账");
+        //allocationReq.setProductCount(1);
+        //allocationReq.setOrderNo(ToolUtil.getRandomString(32));
+        //allocationReq.setOrderAmount(1l);
+        //try {
+        //    AllocationResp allocationResp = AllocationExample.create(allocationReq);
+        //    System.out.println(allocationResp);
+        //    return "ok";
+        //} catch (UpyztException e) {
+        //    e.printStackTrace();
+        //    return e.getMessage();
+        //}
 
     }
-    public String createAllocationReqUser(Integer companyId,Integer userId,int type,double money) throws Exception {
+    public String createAllocationReqUser(Integer companyId,Integer userId,int type,double money) {
         List<TEnterpriseWithdrawal> tEnterpriseWithdrawals = tEnterpriseWithdrawalService.selectList(new EntityWrapper<TEnterpriseWithdrawal>().eq("companyId", companyId));
         TUser tUser = userService.selectById(userId);
         List<UserWithdrawal> userWithdrawals = userWithdrawalService.selectList(new EntityWrapper<UserWithdrawal>().eq("phone", tUser.getPhone()));
         if(userWithdrawals.size()==0){
             return "error";
         }
-        AllocationReq allocationReq= new AllocationReq();
-        allocationReq.setOutOrderNo(ToolUtil.getRandomString(32));
-        Map<String, Object> result;
-        if(type==1){
+        //AllocationReq allocationReq= new AllocationReq();
+        //allocationReq.setOutOrderNo(ToolUtil.getRandomString(32));
+        try {
+            Map<String, Object> result;
+            if(type==1){
 
-            //allocationReq.setPayBalanceAcctId(tEnterpriseWithdrawals.get(0).getBalanceAcctId());
-            //allocationReq.setRecvBalanceAcctId(userWithdrawals.get(0).getBalanceAcctId());
-            //
-            //allocationReq.setPassword(Base64Util.decode(tEnterpriseWithdrawals.get(0).getTransactionAuthorizationCode()));
-            result = FenZhangUtil.fenzhang(RequestSeqUtil.generate("TK"), DateUtil.formatDate(new Date(), "yyyyMMdd"), String.valueOf(money), userWithdrawals.get(0).getHuiFuId());
-        }else {
-            //allocationReq.setRecvBalanceAcctId(tEnterpriseWithdrawals.get(0).getBalanceAcctId());
-            //allocationReq.setPayBalanceAcctId(userWithdrawals.get(0).getBalanceAcctId());
-            //allocationReq.setPassword(Base64Util.decode(userWithdrawals.get(0).getTransactionAuthorizationCode()));
-            result = FenZhangUtil.payFromUser(RequestSeqUtil.generate("TK"), DateUtil.formatDate(new Date(), "yyyyMMdd"), String.valueOf(money), userWithdrawals.get(0).getHuiFuId());
-        }
-        if ("00000000".equals(result.get("respCode").toString())) {
-            return "ok";
-        } else {
-            return result.get("respDesc").toString();
+                //allocationReq.setPayBalanceAcctId(tEnterpriseWithdrawals.get(0).getBalanceAcctId());
+                //allocationReq.setRecvBalanceAcctId(userWithdrawals.get(0).getBalanceAcctId());
+                //
+                //allocationReq.setPassword(Base64Util.decode(tEnterpriseWithdrawals.get(0).getTransactionAuthorizationCode()));
+                result = FenZhangUtil.fenzhang(RequestSeqUtil.generate("TK"), DateUtil.formatDate(new Date(), "yyyyMMdd"), String.valueOf(money), userWithdrawals.get(0).getHuiFuId());
+            }else {
+                //allocationReq.setRecvBalanceAcctId(tEnterpriseWithdrawals.get(0).getBalanceAcctId());
+                //allocationReq.setPayBalanceAcctId(userWithdrawals.get(0).getBalanceAcctId());
+                //allocationReq.setPassword(Base64Util.decode(userWithdrawals.get(0).getTransactionAuthorizationCode()));
+                result = FenZhangUtil.payFromUser(RequestSeqUtil.generate("TK"), DateUtil.formatDate(new Date(), "yyyyMMdd"), String.valueOf(money), userWithdrawals.get(0).getHuiFuId());
+            }
+            if ("00000000".equals(result.get("respCode").toString())) {
+                return "ok";
+            } else {
+                return result.get("respDesc").toString();
+            }
+        } catch (Exception e) {
+            log.error("分账异常", e);
+            throw new RuntimeException(e);
         }
         //money=money*100;
         //allocationReq.setAmount((int)money);
diff --git a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java
index b4f6aa9..e04b5fc 100644
--- a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java
+++ b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java
@@ -12,6 +12,7 @@
 
 
 import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.huifu.biz.DouGongRefundBiz;
 import com.stylefeng.guns.modular.system.dao.OrderCancelMapper;
 import com.stylefeng.guns.modular.system.model.*;
 import com.stylefeng.guns.modular.system.service.*;
diff --git a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCrossCity.java b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCrossCity.java
index 63a9feb..304683d 100644
--- a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCrossCity.java
+++ b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCrossCity.java
@@ -297,7 +297,32 @@
     private String payOrderId;
 
     private String billNo;
+    /**
+     * 斗拱交易流水号
+     */
+    private String outTradeNo;
 
+    /**
+     * 斗拱退款流水号
+     */
+    private String refundReqSeqId;
+
+
+    public String getRefundReqSeqId() {
+        return refundReqSeqId;
+    }
+
+    public void setRefundReqSeqId(String refundReqSeqId) {
+        this.refundReqSeqId = refundReqSeqId;
+    }
+
+    public String getOutTradeNo() {
+        return outTradeNo;
+    }
+
+    public void setOutTradeNo(String outTradeNo) {
+        this.outTradeNo = outTradeNo;
+    }
     public String getBillNo() {
         return billNo;
     }
diff --git a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderLogistics.java b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderLogistics.java
index 00fab18..e28400e 100644
--- a/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderLogistics.java
+++ b/ManagementJYXTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderLogistics.java
@@ -307,6 +307,29 @@
      */
     private BigDecimal timeOutMoney;
 
+    private String outTradeNo;
+
+    /**
+     * 斗拱退款流水号
+     */
+    private String refundReqSeqId;
+
+
+    public String getRefundReqSeqId() {
+        return refundReqSeqId;
+    }
+
+    public void setRefundReqSeqId(String refundReqSeqId) {
+        this.refundReqSeqId = refundReqSeqId;
+    }
+
+    public String getOutTradeNo() {
+        return outTradeNo;
+    }
+
+    public void setOutTradeNo(String outTradeNo) {
+        this.outTradeNo = outTradeNo;
+    }
 
     public Integer getId() {
         return id;

--
Gitblit v1.7.1