From c8d8d2b62f6d6fe7359d26bdd28ae13df69b1439 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期一, 08 九月 2025 16:41:48 +0800
Subject: [PATCH] 新增加跨城支付
---
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/model/LocationQuery.java | 23
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/LoginWeChatXiao.java | 39
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java | 45
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderInfo.java | 19
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Dispatch.java | 52
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemPriceCity.java | 90 +
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateOrderRequest.java | 53
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/EditStaffNodeRequest.java | 72
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderRefund.java | 15
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderCrossCityService.java | 2
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateTravelItineraryRequest.java | 43
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RegisterViaMobileRequest.java | 46
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetStaffNodeRequest.java | 23
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceCityMapper.xml | 5
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderCrossCityServiceImpl.java | 63
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfo.java | 35
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/UserUtil.java | 368 ++++
DispatchQYTTravel/guns-admin/lib/javabase64-1.3.1.jar | 0
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyPwdRequest.java | 25
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCancelRequest.java | 19
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentOrderRequest.java | 53
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SaveStaffNode.java | 31
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SendSmsRequest.java | 33
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TravelItinerary.java | 64
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTUserInfo.java | 33
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyEnterpriseInfoRequest.java | 75
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateEnterprise.java | 46
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/model/GeoFencingPolygon.java | 35
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfo.java | 53
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemPriceCityMapper.java | 11
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java | 819 +++++++++
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateEnterpriseRequest.java | 118 +
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ListPage.java | 27
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderRefundNoticeRequest.java | 49
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfo.java | 31
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISystemPriceCityService.java | 22
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoDataRequest.java | 19
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfoRequest.java | 27
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/AESUtils.java | 155 +
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EmployeeUtil.java | 234 ++
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/DeleteStafNodeRequest.java | 23
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOffData.java | 66
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/model/GeoJson.java | 9
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoRequest.java | 23
DispatchQYTTravel/guns-admin/lib/openApiClient-1.0.0.jar | 0
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyTravelItineraryRequest.java | 39
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderRefundRequest.java | 42
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/SMSUtil.java | 129 +
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreateData.java | 111 +
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/EnterpriseInfo.java | 259 +++
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CheckEnterExist.java | 40
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SystemPriceCityServiceImpl.java | 36
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallback.java | 27
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentInfoCallback.java | 35
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfoRequest.java | 39
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RefundInfoRequest.java | 19
DispatchQYTTravel/guns-admin/pom.xml | 20
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderCrossCity.java | 258 +++
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SaveStaffNodeRequest.java | 63
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfo.java | 31
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RegisterViaMobile.java | 26
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreate.java | 19
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfoData.java | 42
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ResetPwdRequest.java | 27
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOff1Data.java | 62
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java | 16
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SpringContextsUtil.java | 37
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java | 203 ++
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetTravelItineraryListRequest.java | 47
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EnterpriseUtil.java | 316 +++
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/StaffNodeInfo.java | 91 +
DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeRequest.java | 31
72 files changed, 5,130 insertions(+), 28 deletions(-)
diff --git a/DispatchQYTTravel/guns-admin/lib/javabase64-1.3.1.jar b/DispatchQYTTravel/guns-admin/lib/javabase64-1.3.1.jar
new file mode 100644
index 0000000..47d0553
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/lib/javabase64-1.3.1.jar
Binary files differ
diff --git a/DispatchQYTTravel/guns-admin/lib/openApiClient-1.0.0.jar b/DispatchQYTTravel/guns-admin/lib/openApiClient-1.0.0.jar
new file mode 100644
index 0000000..753661b
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/lib/openApiClient-1.0.0.jar
Binary files differ
diff --git a/DispatchQYTTravel/guns-admin/pom.xml b/DispatchQYTTravel/guns-admin/pom.xml
index b03a69b..02bead4 100644
--- a/DispatchQYTTravel/guns-admin/pom.xml
+++ b/DispatchQYTTravel/guns-admin/pom.xml
@@ -200,6 +200,26 @@
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
+ <!--中台sdk-->
+ <dependency>
+ <groupId>com.zhongtai</groupId>
+ <artifactId>zhongtai-sdk</artifactId>
+ <version>1.0.0</version>
+ <scope>system</scope>
+ <systemPath>${pom.basedir}/lib/openApiClient-1.0.0.jar</systemPath>
+ </dependency>
+ <dependency>
+ <groupId>commons-httpclient</groupId>
+ <artifactId>commons-httpclient</artifactId>
+ <version>3.1</version>
+ </dependency>
+ <dependency>
+ <groupId>it.sauronsoftware</groupId>
+ <artifactId>base64</artifactId>
+ <version>1.3.1</version>
+ <scope>system</scope>
+ <systemPath>${pom.basedir}/lib/javabase64-1.3.1.jar</systemPath>
+ </dependency>
</dependencies>
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
index bc8d980..cdbcc1e 100644
--- a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
@@ -213,13 +213,17 @@
@ApiImplicitParam(value = "订单类型(1=专车,2=跨城)", name = "orderType", required = true, dataType = "int"),
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
})
- public ResultUtil cancelOrder(Integer orderId, Integer orderType){
+ public ResultUtil cancelOrder(Integer orderId, Integer orderType, HttpServletRequest request){
try {
+ Integer uid = dispatchService.getUserIdFormRedis(request);
+ if(null == uid){
+ return ResultUtil.tokenErr();
+ }
if(orderType == 1){//专车
return orderPrivateCarService.cancelOrder(orderId);
}
if(orderType == 2){//跨城
- return orderCrossCityService.cancelOrder(orderId);
+ return orderCrossCityService.cancelOrder(orderId, uid);
}
return ResultUtil.success();
}catch (Exception e){
@@ -237,8 +241,12 @@
@ApiImplicitParam(value = "订单类型(1=专车,2=出租车,3=跨城)", name = "orderType", required = true, dataType = "int"),
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
})
- public ResultUtil cancelOrder1(Integer orderId, Integer orderType){
+ public ResultUtil cancelOrder1(Integer orderId, Integer orderType, HttpServletRequest request){
try {
+ Integer uid = dispatchService.getUserIdFormRedis(request);
+ if(null == uid){
+ return ResultUtil.tokenErr();
+ }
if(orderType == 1){//专车
return orderPrivateCarService.cancelOrder(orderId);
}
@@ -246,7 +254,7 @@
return orderTaxiService.cancelOrder(orderId);
}
if(orderType == 3){//跨城
- return orderCrossCityService.cancelOrder(orderId);
+ return orderCrossCityService.cancelOrder(orderId, uid);
}
return ResultUtil.success();
}catch (Exception e){
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemPriceCityMapper.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemPriceCityMapper.java
new file mode 100644
index 0000000..f4f4d7a
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SystemPriceCityMapper.java
@@ -0,0 +1,11 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.SystemPriceCity;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/26 9:24
+ */
+public interface SystemPriceCityMapper extends BaseMapper<SystemPriceCity> {
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceCityMapper.xml b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceCityMapper.xml
new file mode 100644
index 0000000..5fbb1c7
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SystemPriceCityMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.stylefeng.guns.modular.system.dao.SystemPriceCityMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Dispatch.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Dispatch.java
index 2d972fe..b3de36c 100644
--- a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Dispatch.java
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Dispatch.java
@@ -69,6 +69,26 @@
*/
@TableField("pushOrder")
private Integer pushOrder;
+ /**
+ * 中台员工ID
+ */
+ @TableField("empId")
+ private Long empId;
+ /**
+ * 中台员工所属企业ID
+ */
+ @TableField("enterId")
+ private Long enterId;
+ /**
+ * 中台员工所属企业编号
+ */
+ @TableField("entercode")
+ private String entercode;
+ /**
+ * 中台新增状态(0=否,1=是)
+ */
+ @TableField("empnew")
+ private Integer empnew;
public Integer getId() {
return id;
@@ -158,6 +178,38 @@
this.pushOrder = pushOrder;
}
+ public Long getEmpId() {
+ return empId;
+ }
+
+ public void setEmpId(Long empId) {
+ this.empId = empId;
+ }
+
+ public Long getEnterId() {
+ return enterId;
+ }
+
+ public void setEnterId(Long enterId) {
+ this.enterId = enterId;
+ }
+
+ public String getEntercode() {
+ return entercode;
+ }
+
+ public void setEntercode(String entercode) {
+ this.entercode = entercode;
+ }
+
+ public Integer getEmpnew() {
+ return empnew;
+ }
+
+ public void setEmpnew(Integer empnew) {
+ this.empnew = empnew;
+ }
+
@Override
public String toString() {
return "Dispatch{" +
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderCrossCity.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderCrossCity.java
index 18a6686..3418a12 100644
--- a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderCrossCity.java
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/OrderCrossCity.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
+import java.math.BigDecimal;
import java.util.Date;
/**
@@ -323,6 +324,79 @@
*/
@TableField("bindId")
private String bindId;
+
+ /**
+ * 是否异常订单 1否 2是
+ */
+ @TableField("abnormal")
+ private Integer abnormal;
+
+
+ /**
+ * 推广订单 1否 2是
+ */
+ @TableField("promotion")
+ private Integer promotion;
+
+
+ /**
+ * 乘客反馈情况
+ */
+ @TableField("abnormalIntro")
+ private String abnormalIntro;
+
+ /**
+ * 乘客反馈图片
+ */
+ @TableField("abnormalImg")
+ private String abnormalImg;
+
+ private Integer promotionDriverId;
+
+ private BigDecimal promotionMoney;
+
+ private String splitAllocation;
+
+ private Integer responsibilityType;
+
+ private Long promotionActivityId;
+ private String promotionUser;
+
+ private String promotionPhone;
+ /**
+ * 中台行程id
+ */
+ private String travelId;
+ /**
+ * 中台是否已创建订单(0=否,1=是)
+ */
+ private Integer isCreated;
+ /**
+ * 是否是追缴单(0=否,1=是)
+ */
+ private Integer recoveryOrder;
+ /**
+ * 是否生成追缴单(0=否,1=是)
+ */
+ private Integer isGenerateRecoveryOrder;
+ /**
+ * 原始订单id
+ */
+ private Integer oldOrderId;
+
+ private Integer abnormalStatus;
+
+ private String abnormalRemark;
+
+ private BigDecimal responsibilityMoney;
+
+ private String voice;
+
+ private Date voiceTime;
+
+ private Date recoveryOrderCreateDate;
+
+ private Date payTime;
public Integer getId() {
return id;
@@ -812,6 +886,190 @@
this.oldState = oldState;
}
+ public Integer getAbnormal() {
+ return abnormal;
+ }
+
+ public void setAbnormal(Integer abnormal) {
+ this.abnormal = abnormal;
+ }
+
+ public Integer getPromotion() {
+ return promotion;
+ }
+
+ public void setPromotion(Integer promotion) {
+ this.promotion = promotion;
+ }
+
+ public String getAbnormalIntro() {
+ return abnormalIntro;
+ }
+
+ public void setAbnormalIntro(String abnormalIntro) {
+ this.abnormalIntro = abnormalIntro;
+ }
+
+ public String getAbnormalImg() {
+ return abnormalImg;
+ }
+
+ public void setAbnormalImg(String abnormalImg) {
+ this.abnormalImg = abnormalImg;
+ }
+
+ public Integer getPromotionDriverId() {
+ return promotionDriverId;
+ }
+
+ public void setPromotionDriverId(Integer promotionDriverId) {
+ this.promotionDriverId = promotionDriverId;
+ }
+
+ public BigDecimal getPromotionMoney() {
+ return promotionMoney;
+ }
+
+ public void setPromotionMoney(BigDecimal promotionMoney) {
+ this.promotionMoney = promotionMoney;
+ }
+
+ public String getSplitAllocation() {
+ return splitAllocation;
+ }
+
+ public void setSplitAllocation(String splitAllocation) {
+ this.splitAllocation = splitAllocation;
+ }
+
+ public Integer getResponsibilityType() {
+ return responsibilityType;
+ }
+
+ public void setResponsibilityType(Integer responsibilityType) {
+ this.responsibilityType = responsibilityType;
+ }
+
+ public Long getPromotionActivityId() {
+ return promotionActivityId;
+ }
+
+ public void setPromotionActivityId(Long promotionActivityId) {
+ this.promotionActivityId = promotionActivityId;
+ }
+
+ public String getPromotionUser() {
+ return promotionUser;
+ }
+
+ public void setPromotionUser(String promotionUser) {
+ this.promotionUser = promotionUser;
+ }
+
+ public String getPromotionPhone() {
+ return promotionPhone;
+ }
+
+ public void setPromotionPhone(String promotionPhone) {
+ this.promotionPhone = promotionPhone;
+ }
+
+ public String getTravelId() {
+ return travelId;
+ }
+
+ public void setTravelId(String travelId) {
+ this.travelId = travelId;
+ }
+
+ public Integer getIsCreated() {
+ return isCreated;
+ }
+
+ public void setIsCreated(Integer isCreated) {
+ this.isCreated = isCreated;
+ }
+
+ public Integer getRecoveryOrder() {
+ return recoveryOrder;
+ }
+
+ public void setRecoveryOrder(Integer recoveryOrder) {
+ this.recoveryOrder = recoveryOrder;
+ }
+
+ public Integer getIsGenerateRecoveryOrder() {
+ return isGenerateRecoveryOrder;
+ }
+
+ public void setIsGenerateRecoveryOrder(Integer isGenerateRecoveryOrder) {
+ this.isGenerateRecoveryOrder = isGenerateRecoveryOrder;
+ }
+
+ public Integer getOldOrderId() {
+ return oldOrderId;
+ }
+
+ public void setOldOrderId(Integer oldOrderId) {
+ this.oldOrderId = oldOrderId;
+ }
+
+ public Integer getAbnormalStatus() {
+ return abnormalStatus;
+ }
+
+ public void setAbnormalStatus(Integer abnormalStatus) {
+ this.abnormalStatus = abnormalStatus;
+ }
+
+ public String getAbnormalRemark() {
+ return abnormalRemark;
+ }
+
+ public void setAbnormalRemark(String abnormalRemark) {
+ this.abnormalRemark = abnormalRemark;
+ }
+
+ public BigDecimal getResponsibilityMoney() {
+ return responsibilityMoney;
+ }
+
+ public void setResponsibilityMoney(BigDecimal responsibilityMoney) {
+ this.responsibilityMoney = responsibilityMoney;
+ }
+
+ public String getVoice() {
+ return voice;
+ }
+
+ public void setVoice(String voice) {
+ this.voice = voice;
+ }
+
+ public Date getVoiceTime() {
+ return voiceTime;
+ }
+
+ public void setVoiceTime(Date voiceTime) {
+ this.voiceTime = voiceTime;
+ }
+
+ public Date getRecoveryOrderCreateDate() {
+ return recoveryOrderCreateDate;
+ }
+
+ public void setRecoveryOrderCreateDate(Date recoveryOrderCreateDate) {
+ this.recoveryOrderCreateDate = recoveryOrderCreateDate;
+ }
+
+ public Date getPayTime() {
+ return payTime;
+ }
+
+ public void setPayTime(Date payTime) {
+ this.payTime = payTime;
+ }
+
@Override
public String toString() {
return "OrderCrossCity{" +
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemPriceCity.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemPriceCity.java
new file mode 100644
index 0000000..28471eb
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SystemPriceCity.java
@@ -0,0 +1,90 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableName;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/26 9:16
+ */
+@TableName("t_system_price_city")
+public class SystemPriceCity extends BaseBean {
+ /**
+ * 省编号
+ */
+ @TableField("areaCode")
+ private String areaCode;
+ /**
+ * 省名称
+ */
+ @TableField("areaName")
+ private String areaName;
+ /**
+ * 市编号
+ */
+ @TableField("cityCode")
+ private String cityCode;
+ /**
+ * 市名称
+ */
+ @TableField("cityName")
+ private String cityName;
+ /**
+ * 区县编号
+ */
+ @TableField("provinceCode")
+ private String provinceCode;
+ /**
+ * 区县名称
+ */
+ @TableField("provinceName")
+ private String provinceName;
+
+ public String getAreaCode() {
+ return areaCode;
+ }
+
+ public void setAreaCode(String areaCode) {
+ this.areaCode = areaCode;
+ }
+
+ public String getAreaName() {
+ return areaName;
+ }
+
+ public void setAreaName(String areaName) {
+ this.areaName = areaName;
+ }
+
+ public String getCityCode() {
+ return cityCode;
+ }
+
+ public void setCityCode(String cityCode) {
+ this.cityCode = cityCode;
+ }
+
+ public String getCityName() {
+ return cityName;
+ }
+
+ public void setCityName(String cityName) {
+ this.cityName = cityName;
+ }
+
+ public String getProvinceCode() {
+ return provinceCode;
+ }
+
+ public void setProvinceCode(String provinceCode) {
+ this.provinceCode = provinceCode;
+ }
+
+ public String getProvinceName() {
+ return provinceName;
+ }
+
+ public void setProvinceName(String provinceName) {
+ this.provinceName = provinceName;
+ }
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderCrossCityService.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderCrossCityService.java
index 044e097..d625854 100644
--- a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderCrossCityService.java
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IOrderCrossCityService.java
@@ -38,7 +38,7 @@
* @return
* @throws Exception
*/
- ResultUtil cancelOrder(Integer orderId) throws Exception;
+ ResultUtil cancelOrder(Integer orderId, Integer uid) throws Exception;
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISystemPriceCityService.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISystemPriceCityService.java
new file mode 100644
index 0000000..213b937
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISystemPriceCityService.java
@@ -0,0 +1,22 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.SystemPriceCity;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/26 9:24
+ */
+public interface ISystemPriceCityService extends IService<SystemPriceCity> {
+
+
+ /**
+ * 查询匹配的数据
+ * @param provinceCode
+ * @param cityCode
+ * @param districtCode
+ * @return
+ */
+ SystemPriceCity queryOne(String provinceCode, String cityCode, String districtCode);
+
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderCrossCityServiceImpl.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderCrossCityServiceImpl.java
index 0559021..3bccfe7 100644
--- a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderCrossCityServiceImpl.java
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderCrossCityServiceImpl.java
@@ -10,6 +10,11 @@
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.*;
+import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.OrderRefundNoticeRequest;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.RefundInfoRequest;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.TradeOrderRefund;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.TradeOrderRefundRequest;
import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
import com.stylefeng.guns.modular.system.warpper.OrderCrossCityWarpper;
import org.springframework.beans.BeanUtils;
@@ -154,7 +159,7 @@
* @throws Exception
*/
@Override
- public ResultUtil cancelOrder(Integer orderId) throws Exception {
+ public ResultUtil cancelOrder(Integer orderId, Integer uid) throws Exception {
OrderCrossCity orderCrossCity = this.selectById(orderId);
if(orderCrossCity.getState() == 10 || orderCrossCity.getState() == 12){
return ResultUtil.error("不允许重复取消");
@@ -193,7 +198,10 @@
driver.setState(2);
driverService.updateById(driver);
}
-
+ //未支付,调取消订单
+ if(null == orderCrossCity.getPayType() && ToolUtil.isNotEmpty(orderCrossCity.getTravelId())){
+ OrderUtil.tradeOrderCancel(orderCrossCity.getTravelId());
+ }
//已支付的情况下进行退款操作
if(null != orderCrossCity.getPayType() && null != orderCrossCity.getPayMoney()){
if(orderCrossCity.getPayType() == 3){//余额支付
@@ -214,9 +222,36 @@
}
if(query.getPayType() == 1){//微信
- Map<String, String> map = payMoneyUtil.wxRefund(query.getCode(), orderId + "_3", query.getAmount().toString(), query.getAmount().toString(), "/base/cancleOrderWXPay");
- if(!"SUCCESS".equals(map.get("return_code"))){
- return ResultUtil.error(map.get("return_msg"));
+ //中台订单退款操作
+ if(ToolUtil.isNotEmpty(orderCrossCity.getTravelId())){
+ Dispatch dispatch = dispatchService.selectById(uid);
+ TradeOrderRefundRequest request = new TradeOrderRefundRequest();
+ request.setPartnerPayId(orderCrossCity.getTravelId());
+ request.setPayId(query.getCode());
+ request.setRefundTotalFee(Double.valueOf(orderCrossCity.getPayMoney() * 100).intValue() + "");
+ request.setRemark("调度取消订单退款");
+ request.setRefundType("RF");
+
+ RefundInfoRequest refundInfo = new RefundInfoRequest();
+ refundInfo.setPayItemId(orderCrossCity.getTravelId());
+ refundInfo.setPayId(query.getCode());
+ refundInfo.setTradeFee(Double.valueOf(orderCrossCity.getPayMoney() * 100).intValue() + "");
+ request.setRefundInfos(new ArrayList<RefundInfoRequest>(){{
+ add(refundInfo);
+ }});
+ TradeOrderRefund tradeOrderRefund = OrderUtil.tradeOrderRefund(request);
+ //退款通知
+ OrderRefundNoticeRequest request1 = new OrderRefundNoticeRequest();
+ request1.setOrderId(orderCrossCity.getTravelId());
+ request1.setRefundPayNum(tradeOrderRefund.getRefundId());
+ request1.setRefundType("5");
+ request1.setApplyRefundCharge(new BigDecimal(orderCrossCity.getPayMoney()));
+ request1.setActualRefundCharge(new BigDecimal(orderCrossCity.getPayMoney()));
+ request1.setRefundAccount(dispatch.getEnterId().toString());
+ request1.setRemark("调度取消订单退款");
+ OrderUtil.orderRefundNotice(request1);
+ //添加交易明细
+ transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", query.getAmount(), 1, 1, 1, 3, orderId);
}
}else{//支付宝
Map<String, String> map = payMoneyUtil.aliRefund(query.getCode(), query.getAmount().toString());
@@ -226,24 +261,6 @@
//添加交易明细
transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", query.getAmount(), 1, 1, 1, 3, orderId);
}
- }
-
- //添加负的收入明细
- List<Income> incomes = incomeService.selectList(new EntityWrapper<Income>().eq("type", 2).eq("incomeId", orderId).eq("orderType", 3));
- for(Income income : incomes){
- if(income.getUserType() == 2){//处理司机的收入
- Driver driver = driverService.selectById(income.getObjectId());
- driver.setBalance(driver.getBalance() - income.getMoney());
- driver.setBusinessMoney(driver.getBusinessMoney() - income.getMoney());
- driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() - income.getMoney());
- driverService.updateById(driver);
- }
- Income income1 = new Income();
- BeanUtils.copyProperties(income, income1);
- income1.setMoney(income.getMoney() * -1);
- income1.setId(null);
- income1.setInsertTime(new Date());
- incomeService.insert(income1);
}
}
}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SystemPriceCityServiceImpl.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SystemPriceCityServiceImpl.java
new file mode 100644
index 0000000..be8b967
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SystemPriceCityServiceImpl.java
@@ -0,0 +1,36 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.SystemPriceCityMapper;
+import com.stylefeng.guns.modular.system.model.SystemPriceCity;
+import com.stylefeng.guns.modular.system.service.ISystemPriceCityService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/26 9:25
+ */
+@Service
+public class SystemPriceCityServiceImpl extends ServiceImpl<SystemPriceCityMapper, SystemPriceCity> implements ISystemPriceCityService {
+
+
+ /**
+ * 查询匹配数据
+ * @param provinceCode
+ * @param cityCode
+ * @param districtCode
+ * @return
+ */
+ @Override
+ public SystemPriceCity queryOne(String provinceCode, String cityCode, String districtCode) {
+ SystemPriceCity systemPriceCity = this.selectOne(new EntityWrapper<SystemPriceCity>().eq("areaCode", provinceCode).eq("cityCode", cityCode).eq("provinceCode", districtCode));
+ if(null == systemPriceCity){
+ systemPriceCity = this.selectOne(new EntityWrapper<SystemPriceCity>().eq("areaCode", provinceCode).eq("cityCode", cityCode));
+ if(null == systemPriceCity){
+ systemPriceCity = this.selectOne(new EntityWrapper<SystemPriceCity>().eq("areaCode", provinceCode));
+ }
+ }
+ return systemPriceCity;
+ }}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SpringContextsUtil.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SpringContextsUtil.java
new file mode 100644
index 0000000..fc674da
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/SpringContextsUtil.java
@@ -0,0 +1,37 @@
+package com.stylefeng.guns.modular.system.util;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+@Component
+public class SpringContextsUtil implements ApplicationContextAware{
+
+ private static ApplicationContext applicationContext;
+
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+ if (SpringContextsUtil.applicationContext == null) {
+ SpringContextsUtil.applicationContext = applicationContext;
+ }
+ }
+ // 获取applicationContext
+ public static ApplicationContext getApplicationContext() {
+ return applicationContext;
+ }
+ // 通过name获取 Bean.
+ public static Object getBean(String name) {
+ return getApplicationContext().getBean(name);
+ }
+ // 通过class获取Bean.
+ public static <T> T getBean(Class<T> clazz) {
+ return getApplicationContext().getBean(clazz);
+ }
+ // 通过name,以及Clazz返回指定的Bean
+ public static <T> T getBean(String name, Class<T> clazz) {
+ System.out.println(getApplicationContext().getBean(name, clazz));
+ return getApplicationContext().getBean(name, clazz);
+ }
+
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/model/GeoFencingPolygon.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/model/GeoFencingPolygon.java
new file mode 100644
index 0000000..5a2f93b
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/model/GeoFencingPolygon.java
@@ -0,0 +1,35 @@
+package com.stylefeng.guns.modular.system.util.model;
+
+import lombok.Data;
+import org.springframework.data.mongodb.core.geo.GeoJsonPolygon;
+import org.springframework.data.mongodb.core.index.GeoSpatialIndexType;
+import org.springframework.data.mongodb.core.index.GeoSpatialIndexed;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.io.Serializable;
+
+/**
+ * 地理围栏-多边形
+ * @author zhibing.pu
+ * @date 2023/4/29 23:53
+ */
+@Data
+@Document(collection = "geo_fencing")
+public class GeoFencingPolygon implements Serializable {
+ private static final long serialVersionUID = 4508868382007529971L;
+
+ private String id;
+ /**
+ * 站点id
+ */
+ private Integer siteId;
+ /**
+ * 站点名称
+ */
+ private String name;
+ /**
+ * 多边形经纬度
+ */
+ @GeoSpatialIndexed(type = GeoSpatialIndexType.GEO_2DSPHERE)
+ private GeoJsonPolygon geoJsonPolygon;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/model/GeoJson.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/model/GeoJson.java
new file mode 100644
index 0000000..bb04b82
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/model/GeoJson.java
@@ -0,0 +1,9 @@
+package com.stylefeng.guns.modular.system.util.model;
+
+import lombok.Data;
+
+@Data
+public class GeoJson {
+ private String type;
+ private Double[] coordinates;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/model/LocationQuery.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/model/LocationQuery.java
new file mode 100644
index 0000000..a7f14dc
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/model/LocationQuery.java
@@ -0,0 +1,23 @@
+package com.stylefeng.guns.modular.system.util.model;
+
+import lombok.Data;
+
+@Data
+public class LocationQuery {
+ /**
+ * 当前经纬度[xxx,xxx]
+ **/
+ private Double[] coordinates;
+ /**
+ * 距离,如:200,500,1,3,5,10,20
+ **/
+ private Double distance;
+ /**
+ * 距离单位,如:m,km
+ **/
+ private String unit;
+ /**
+ * 位置类型:1-景点,2-加油站,3-酒店
+ **/
+ private Integer type;
+}
\ No newline at end of file
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/AESUtils.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/AESUtils.java
new file mode 100644
index 0000000..0acac07
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/AESUtils.java
@@ -0,0 +1,155 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong;
+
+import org.apache.commons.codec.binary.Base64;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.crypto.BadPaddingException;
+import javax.crypto.Cipher;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.UnsupportedEncodingException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+
+public class AESUtils {
+
+ private static Logger logger = LoggerFactory.getLogger(AESUtils.class);
+ private static String ALG = "AES";
+ private static String CHARSET = "UTF-8";
+ private static String KEY1 = "lur8apa4zu484pvj";
+
+ public AESUtils() {
+ }
+
+ private static byte[] encrypt(byte[] content, String password, String iv) {
+ try {
+ SecretKeySpec key = new SecretKeySpec(password.getBytes(CHARSET), ALG);
+ Cipher cipher = Cipher.getInstance(ALG);
+ cipher.init(1, key);
+ return cipher.doFinal(content);
+ } catch (NoSuchAlgorithmException var5) {
+ var5.printStackTrace();
+ } catch (NoSuchPaddingException var6) {
+ var6.printStackTrace();
+ } catch (InvalidKeyException var7) {
+ var7.printStackTrace();
+ } catch (UnsupportedEncodingException var8) {
+ var8.printStackTrace();
+ } catch (IllegalBlockSizeException var9) {
+ var9.printStackTrace();
+ } catch (BadPaddingException var10) {
+ var10.printStackTrace();
+ }
+
+ return null;
+ }
+
+ private static byte[] decrypt(byte[] content, String password, String iv) {
+ try {
+ SecretKeySpec key = new SecretKeySpec(password.getBytes(CHARSET), ALG);
+ Cipher cipher = Cipher.getInstance(ALG);
+ cipher.init(2, key);
+ return cipher.doFinal(content);
+ } catch (NoSuchAlgorithmException var5) {
+ var5.printStackTrace();
+ } catch (NoSuchPaddingException var6) {
+ var6.printStackTrace();
+ } catch (InvalidKeyException var7) {
+ var7.printStackTrace();
+ } catch (IllegalBlockSizeException var8) {
+ var8.printStackTrace();
+ } catch (BadPaddingException var9) {
+ var9.printStackTrace();
+ } catch (UnsupportedEncodingException var10) {
+ var10.printStackTrace();
+ }
+
+ return null;
+ }
+
+ private static String parseByte2HexStr(byte[] buf) {
+ StringBuffer sb = new StringBuffer();
+
+ for(int i = 0; i < buf.length; ++i) {
+ String hex = Integer.toHexString(buf[i] & 255);
+ if (hex.length() == 1) {
+ hex = '0' + hex;
+ }
+
+ sb.append(hex.toUpperCase());
+ }
+
+ return sb.toString();
+ }
+
+ private static byte[] parseHexStr2Byte(String hexStr) {
+ if (hexStr.length() < 1) {
+ return null;
+ } else {
+ byte[] result = new byte[hexStr.length() / 2];
+
+ for(int i = 0; i < hexStr.length() / 2; ++i) {
+ int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
+ int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
+ result[i] = (byte)(high * 16 + low);
+ }
+
+ return result;
+ }
+ }
+
+ public static String decryptHex(String content) {
+ return decryptHex(content, KEY1);
+ }
+
+ public static String decryptHex(String content, String password) {
+ try {
+ return new String(decrypt(parseHexStr2Byte(content), password, ""), CHARSET);
+ } catch (Exception var3) {
+ return "";
+ }
+ }
+
+ public static String decryptBase64(String content) {
+ try {
+ return decryptBase64(content, KEY1);
+ } catch (Exception var2) {
+ return "";
+ }
+ }
+
+ public static String decryptBase64(String content, String password) {
+ try {
+ return new String(decrypt(Base64.decodeBase64(content), password, ""), CHARSET);
+ } catch (Exception var3) {
+ return "";
+ }
+ }
+
+ public static String encryptHex(String content) {
+ return encryptHex(content, KEY1);
+ }
+
+ public static String encryptHex(String content, String password) {
+ try {
+ return parseByte2HexStr(encrypt(content.getBytes(CHARSET), password, ""));
+ } catch (Exception var3) {
+ return "";
+ }
+ }
+
+ public static String encryptBase64(String content) {
+ return encryptBase64(content, KEY1);
+ }
+
+ public static String encryptBase64(String content, String password) {
+ try {
+ return Base64.encodeBase64String(encrypt(content.getBytes(CHARSET), password, ""));
+ } catch (Exception var3) {
+ logger.error("", var3);
+ return "";
+ }
+ }
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EmployeeUtil.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EmployeeUtil.java
new file mode 100644
index 0000000..e01832f
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EmployeeUtil.java
@@ -0,0 +1,234 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.Gson;
+import com.open.common.util.OpenApiClient;
+import com.open.common.util.SystemParameterNames;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
+import com.stylefeng.guns.modular.system.util.SpringContextsUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.*;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * 企业员工工具类
+ *
+ * @author zhibing.pu
+ * @Date 2025/6/6 16:17
+ */
+@Slf4j
+public class EmployeeUtil {
+
+ private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();
+
+ public static void main(String[] args) {
+ SaveStaffNodeRequest request = new SaveStaffNodeRequest();
+ request.setMobile("15828353127");
+ request.setEntercode("981100006005951");
+ request.setEmpName("蒲");
+ request.setEmpNickname("蒲");
+ request.setLoginNo("15828353125");
+ request.setEmpSex("男");
+ request.setMphone("15828353125");
+ request.setEmail("15828353125@qyt.com");
+ request.setDeptId(0);
+ request.setPositionId(1);
+ request.setSuperLevel(0);
+ request.setHideMobile(0);
+ ResultUtil<SaveStaffNode> resultUtil = EmployeeUtil.saveStaffNode(request);
+ System.out.println(resultUtil.getData());
+ }
+
+
+ /**
+ * 企业增加员工
+ *
+ * @param request
+ * @return
+ */
+ public static ResultUtil<SaveStaffNode> saveStaffNode(SaveStaffNodeRequest request) {
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/saveStaffNode";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", new Gson().toJson(request));
+ log.info("【企业增加员工】请求地址:" + url);
+ log.info("【企业增加员工】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【企业增加员工】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String retCode = jsonObject.getString("retCode");
+ if (!"0".equals(retCode)) {
+ log.error("【企业增加员工】请求失败:" + result);
+ String retMsg = jsonObject.getString("retMsg");
+ retMsg = retMsg.substring(retMsg.indexOf("{"));
+ jsonObject = JSON.parseObject(retMsg);
+ return ResultUtil.error("【企业增加员工】请求失败:" + jsonObject.getString("msg"));
+ }
+ JSONObject object = jsonObject.getJSONObject("object");
+ String status = object.getString("status");
+ if (!"0".equals(status)) {
+ log.error("【企业增加员工】失败:" + object.toJSONString());
+ return ResultUtil.error("【企业增加员工】失败:" + object.getString("desc"));
+ }
+ SaveStaffNode saveStaffNode = object.getObject("data", SaveStaffNode.class);
+ return ResultUtil.success(saveStaffNode);
+ }
+
+
+ /**
+ * 企业修改员工信息
+ * @param request
+ * @return
+ */
+ public static Boolean editStaffNode(EditStaffNodeRequest request){
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/editStaffNode";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", new Gson().toJson(request));
+ log.info("【企业修改员工信息】请求地址:" + url);
+ log.info("【企业修改员工信息】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【企业修改员工信息】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String retCode = jsonObject.getString("retCode");
+ if (!"0".equals(retCode)) {
+ log.error("【企业修改员工信息】请求失败:" + result);
+ throw new RuntimeException("【企业修改员工信息】请求失败:" + result);
+ }
+ JSONObject object = jsonObject.getJSONObject("object");
+ String status = object.getString("status");
+ if (!"0".equals(status)) {
+ log.error("【企业修改员工信息】失败:" + object.toJSONString());
+ throw new RuntimeException("【企业修改员工信息】失败:" + object.toJSONString());
+ }
+ return true;
+ }
+
+
+ /**
+ * 企业删除人员
+ * @param request
+ * @return
+ */
+ public static Boolean ecrmDeleteStafNode(DeleteStafNodeRequest request){
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/ecrmDeleteStafNode";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ String content = "";//业务参数
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", new Gson().toJson(request));
+ log.info("【企业删除人员】请求地址:" + url);
+ log.info("【企业删除人员】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【企业删除人员】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String retCode = jsonObject.getString("retCode");
+ if (!"0".equals(retCode)) {
+ log.error("【企业删除人员】请求失败:" + result);
+ throw new RuntimeException("【企业删除人员】请求失败:" + result);
+ }
+ JSONObject object = jsonObject.getJSONObject("object");
+ String status = object.getString("status");
+ if (!"0".equals(status)) {
+ log.error("【企业删除人员】失败:" + object.toJSONString());
+ throw new RuntimeException("【企业删除人员】失败:" + object.toJSONString());
+ }
+ return true;
+ }
+
+
+ /**
+ * 根据员工ID获取人员信息
+ * @param request
+ * @return
+ */
+ public static StaffNodeInfo getStaffNode(GetStaffNodeRequest request){
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/getStaffNode";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", new Gson().toJson(request));
+ log.info("【根据员工ID获取人员信息】请求地址:" + url);
+ log.info("【根据员工ID获取人员信息】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "GET", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【根据员工ID获取人员信息】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String retCode = jsonObject.getString("retCode");
+ if (!"0".equals(retCode)) {
+ log.error("【根据员工ID获取人员信息】请求失败:" + result);
+ return null;
+ }
+ JSONObject object = jsonObject.getJSONObject("object");
+ String status = object.getString("status");
+ if (!"0".equals(status)) {
+ log.error("【根据员工ID获取人员信息】失败:" + object.toJSONString());
+ return null;
+ }
+ StaffNodeInfo staffNodeInfo = object.getObject("data", StaffNodeInfo.class);
+ return staffNodeInfo;
+ }
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EnterpriseUtil.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EnterpriseUtil.java
new file mode 100644
index 0000000..520d248
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EnterpriseUtil.java
@@ -0,0 +1,316 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.Gson;
+import com.open.common.util.OpenApiClient;
+import com.open.common.util.SystemParameterNames;
+import com.stylefeng.guns.modular.system.util.SpringContextsUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.*;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * 企业工具类
+ *
+ * @author zhibing.pu
+ * @Date 2025/6/6 17:06
+ */
+@Slf4j
+public class EnterpriseUtil {
+
+ private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();
+
+
+ public static void main(String[] args) {
+// CheckEnterExist checkEnterNameExist = checkEnterNameExist("黔南云码通数字产业运营有限公司");
+// System.err.println(checkEnterNameExist);
+
+ CreateEnterpriseRequest request = new CreateEnterpriseRequest();
+ request.setName("成都喜望科技有限公司");
+ request.setNickName("成都喜望");
+ request.setIndustry_code("123456");
+ request.setMobile("15828353127");
+ CreateEnterprise enterprise = EnterpriseUtil.createEnterprise(request);
+ System.out.println(enterprise);
+
+ }
+
+ /**
+ * 根据社会信用代码判断企业是否已存在
+ *
+ * @param uscc
+ * @return
+ */
+ public static CheckEnterExist checkEnterExistByEnterIdCardNo(String uscc) {
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/check_enter_exist_by_enterIdCardNo";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> map = new HashMap<>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+ map.put(SystemParameterNames.getAppKey(), appKey);
+ map.put(SystemParameterNames.getMessage_id(), messageId);
+ map.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ map.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ map.put("content", "{\"uscc\":\"" + uscc + "\"}");
+ log.info("【根据社会信用代码判断企业是否已存在】请求地址:" + url);
+ log.info("【根据社会信用代码判断企业是否已存在】请求参数:" + JSON.toJSONString(map));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, map);
+ log.info("【根据社会信用代码判断企业是否已存在】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String retCode = jsonObject.getString("retCode");
+ if (!"0".equals(retCode)) {
+ log.error("【根据社会信用代码判断企业是否已存在】请求失败:" + result);
+ return null;
+ }
+ JSONObject object = jsonObject.getJSONObject("object");
+ String status = object.getString("status");
+ if (!"0".equals(status)) {
+ log.error("【根据社会信用代码判断企业是否已存在】失败:" + object.toJSONString());
+ return null;
+ }
+ return jsonObject.getObject("object", CheckEnterExist.class);
+ }
+
+
+ /**
+ * 根据企业名称判断企业是否已存在
+ *
+ * @param enterName
+ * @return
+ */
+ public static CheckEnterExist checkEnterNameExist(String enterName) {
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/checkEnterNameExist";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> map = new HashMap<>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+ map.put(SystemParameterNames.getAppKey(), appKey);
+ map.put(SystemParameterNames.getMessage_id(), messageId);
+ map.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ map.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ map.put("content", "{\"enterName\":\"" + enterName + "\"}");
+ log.info("【根据企业名称判断企业是否已存在】请求地址:" + url);
+ log.info("【根据企业名称判断企业是否已存在】请求参数:" + JSON.toJSONString(map));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, map);
+ log.info("【根据企业名称判断企业是否已存在】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String retCode = jsonObject.getString("retCode");
+ if (!"0".equals(retCode)) {
+ log.error("【根据企业名称判断企业是否已存在】请求失败:" + result);
+ return null;
+ }
+ JSONObject object = jsonObject.getJSONObject("object");
+ String status = object.getString("status");
+ if (!"0".equals(status)) {
+ log.error("【根据企业名称判断企业是否已存在】失败:" + object.toJSONString());
+ return null;
+ }
+ return jsonObject.getObject("object", CheckEnterExist.class);
+ }
+
+
+ /**
+ * 查询企业详情
+ *
+ * @param enter_code 企业编号
+ * @return
+ */
+ public static EnterpriseInfo getEnterpriseDetail(String enter_code) {
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/getEnterpriseDetail";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> map = new HashMap<>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+ map.put(SystemParameterNames.getAppKey(), appKey);
+ map.put(SystemParameterNames.getMessage_id(), messageId);
+ map.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ map.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ map.put("content", "{\"enter_code\":\"" + enter_code + "\"}");
+ log.info("【查询企业详情】请求地址:" + url);
+ log.info("【查询企业详情】请求参数:" + JSON.toJSONString(map));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, map);
+ log.info("【查询企业详情】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String retCode = jsonObject.getString("retCode");
+ if (!"0".equals(retCode)) {
+ log.error("【查询企业详情】请求失败:" + result);
+ return null;
+ }
+ JSONObject object = jsonObject.getJSONObject("object");
+ String status = object.getString("status");
+ if (!"0".equals(status)) {
+ log.error("【查询企业详情】失败:" + object.toJSONString());
+ return null;
+ }
+ EnterpriseInfo enterpriseInfo = jsonObject.getObject("object", EnterpriseInfo.class);
+ return enterpriseInfo;
+ }
+
+
+ /**
+ * 修改企业基本信息
+ *
+ * @param request
+ * @return
+ */
+ public static Boolean modifyEnterpriseInfo(ModifyEnterpriseInfoRequest request) {
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/modifyEnterpriseInfo";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> map = new HashMap<>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+ map.put(SystemParameterNames.getAppKey(), appKey);
+ map.put(SystemParameterNames.getMessage_id(), messageId);
+ map.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ map.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ map.put("content", new Gson().toJson(request));
+ log.info("【修改企业基本信息】请求地址:" + url);
+ log.info("【修改企业基本信息】请求参数:" + JSON.toJSONString(map));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "GET", skprivateKeyFile, timeStamp, map);
+ log.info("【修改企业基本信息】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String status = jsonObject.getString("status");
+ if (!"0".equals(status)) {
+ log.error("【修改企业基本信息】请求失败:" + result);
+ throw new RuntimeException("【修改企业基本信息】请求失败:" + result);
+ }
+ return true;
+ }
+
+
+ /**
+ * 创建企业
+ *
+ * @param request
+ * @return
+ */
+ public static CreateEnterprise createEnterprise(CreateEnterpriseRequest request) {
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/createEnterprise";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> map = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+ map.put(SystemParameterNames.getAppKey(), appKey);
+ map.put(SystemParameterNames.getMessage_id(), messageId);
+ map.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ map.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ map.put("content", new Gson().toJson(request));
+
+ log.info("【创建企业】请求地址:" + url);
+ log.info("【创建企业】请求参数:" + JSON.toJSONString(map));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, map);
+ log.info("【创建企业】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String retCode = jsonObject.getString("retCode");
+ if (!"0".equals(retCode)) {
+ log.error("【创建企业】请求失败:" + result);
+ throw new RuntimeException("【创建企业】请求失败:" + result);
+ }
+ JSONObject object = jsonObject.getJSONObject("object");
+ String status = object.getString("status");
+ if (!"0".equals(status)) {
+ log.error("【创建企业】请求失败:" + object.toJSONString());
+ throw new RuntimeException("【创建企业】请求失败:" + object.toJSONString());
+ }
+ return object.getObject("data", CreateEnterprise.class);
+ }
+
+
+ /**
+ * 删除企业信息
+ *
+ * @param enterNum 企业编号
+ * @param operator 管理员手机号码
+ * @return
+ */
+ public static boolean delEnterprise(String enterNum, String operator) {
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/delCompany";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> map = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+ map.put(SystemParameterNames.getAppKey(), appKey);
+ map.put(SystemParameterNames.getMessage_id(), messageId);
+ map.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ map.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ map.put("content", "{\"enterNum\":\"" + enterNum + "\",\"operator\":\"" + operator + "\"}");
+
+ log.info("【删除企业信息】请求地址:" + url);
+ log.info("【删除企业信息】请求参数:" + JSON.toJSONString(map));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, map);
+ log.info("【删除企业信息】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String retCode = jsonObject.getString("retCode");
+ if (!"0".equals(retCode)) {
+ log.error("【删除企业信息】请求失败:" + result);
+ throw new RuntimeException("【删除企业信息】请求失败:" + result);
+ }
+ JSONObject object = jsonObject.getJSONObject("object");
+ String status = object.getString("status");
+ if (!"0".equals(status)) {
+ log.error("【删除企业信息】请求失败:" + object.toJSONString());
+ throw new RuntimeException("【删除企业信息】请求失败:" + object.toJSONString());
+ }
+ return true;
+ }
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
new file mode 100644
index 0000000..04270a9
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
@@ -0,0 +1,819 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.Gson;
+import com.open.common.util.OpenApiClient;
+import com.open.common.util.SystemParameterNames;
+import com.stylefeng.guns.modular.system.util.SpringContextsUtil;
+import com.stylefeng.guns.modular.system.util.UUIDUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.*;
+import lombok.extern.slf4j.Slf4j;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 9:34
+ */
+@Slf4j
+public class OrderUtil {
+
+ private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();
+
+
+ public static void main(String[] args) {
+ //创建行程
+// CreateTravelItineraryRequest request = new CreateTravelItineraryRequest();
+// request.setScene("TRAFFIC");
+// request.setPartnerId("522700");
+// request.setOrderNo("3456789012345678");
+// request.setCustomerId("11448156");
+// request.setDriverId("11448158");
+// request.setSupplierShopId("981100006005951");
+// request.setServiceType(1);
+// String travelItinerary = createTravelItinerary(request);
+// System.err.println(travelItinerary);//1951088602595872768
+
+ //修改行程状态
+// ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
+// request.setScene("TRAFFIC");
+// request.setPartnerId("522700");
+// request.setOrderId("1951088602595872768");
+// request.setStatus(7);
+// request.setDriverId("11448158");
+// request.setSupplierShopId("981100006005951");
+// Boolean aBoolean = modifyTravelItinerary(request);
+
+ //订单创建及拉起支付
+// TradeOrderCreateData tradeOrderCreateData = new TradeOrderCreateData();
+// tradeOrderCreateData.setScene("TRAFFIC");
+// tradeOrderCreateData.setPartnerId("522700");
+// tradeOrderCreateData.setTreatShopId("11448158");
+// tradeOrderCreateData.setOrderAppId("52270015");
+// tradeOrderCreateData.setField1("{\"profitSharing\":\"1\",\"isPromote\":\"0\"}");
+// tradeOrderCreateData.setCharge(new BigDecimal("0.01"));
+// tradeOrderCreateData.setChannelSource("GRJYCXWXXCX");
+// tradeOrderCreateData.setOrderId("1951088602595872768");
+// tradeOrderCreateData.setOrderNo("3456789012345678");
+// tradeOrderCreateData.setCustomerId("11448156");
+// tradeOrderCreateData.setPayPartnerId("5400004");
+// tradeOrderCreateData.setPartnerPayId("1951088602595872768");
+// tradeOrderCreateData.setCurrency("RMB");
+// tradeOrderCreateData.setTotalFee("1");
+// tradeOrderCreateData.setRetUrl("pages/advoad-city-search/advoad-message/electronic-wait-pay/electronic-wait-pay");
+// tradeOrderCreateData.setClientIp("127.0.0.1");
+// tradeOrderCreateData.setNeedLoginFlag("N");
+// tradeOrderCreateData.setOrderDesc("出行订单支付");
+// tradeOrderCreateData.setAccessMode("APP");
+//
+// List<GoodsInfoRequest> goodsInfo = new ArrayList<>();
+// GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest();
+// goodsInfoRequest.setId("981100006005901");
+// goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
+// goodsInfoRequest.setSubOpenId("oVLur61wBKJEO7QPR1dsmzS5TSfs");
+// goodsInfoRequest.setProfitSharing("1");
+// goodsInfoRequest.setAreaInfo("520100");
+// goodsInfoRequest.setPayType("0");
+// goodsInfoRequest.setBusinessType("10408");
+// goodsInfo.add(goodsInfoRequest);
+// tradeOrderCreateData.setGoodsInfo(goodsInfo);
+// TradeOrderCreate tradeOrderCreate = tradeOrderCreate1(tradeOrderCreateData);
+// System.err.println(tradeOrderCreate);
+ //TradeOrderCreate(orderInfo=OrderInfo(orderId=1950072223939842048, status=null), payInfo=PayInfo(retCode=000000, retMsg=success, success=true, data=PayInfoData(redirectUrl=https://qhsctest.qytzt.cn/gray/mobile/index.html?f=allCashDesk&accessToken=It5FPM1DUjzwIAin7zwiHvUANWKC6I5USCLE8EKoRkg%3D, payId=540000420250729000135600, status=null, payTime=null, payFee=null, paymentInfos=null), sign=525cb843b1eeb5a0451eeb5fbbe02f0f))
+
+ //查询支付单信息
+// GetPaymentInfoDataRequest getPaymentInfoDataRequest = new GetPaymentInfoDataRequest();
+// getPaymentInfoDataRequest.setPartnerId("5400004");
+// getPaymentInfoDataRequest.setPartnerPayId("1948685426689200128");
+// GetPaymentInfo getPaymentInfo = paymentInfo(getPaymentInfoDataRequest);
+// System.err.println(getPaymentInfo);
+
+ //拉起支付
+// TradePayOff1Data tradePayOff1Data = new TradePayOff1Data();
+// tradePayOff1Data.setPartnerId("5400004");
+// tradePayOff1Data.setScene("TRAFFIC");
+// tradePayOff1Data.setPartnerPayId("1951088602595872768");
+// tradePayOff1Data.setCurrency("RMB");
+// tradePayOff1Data.setTotalFee("1");
+// tradePayOff1Data.setRetUrl("pages/advoad-city-search/advoad-message/electronic-wait-pay/electronic-wait-pay");
+// tradePayOff1Data.setClientIp("127.0.0.1");
+// tradePayOff1Data.setNeedLoginFlag("N");
+// tradePayOff1Data.setOrderDesc("出行订单支付");
+// tradePayOff1Data.setAccessMode("APP");
+// List<GoodsInfoRequest> goodsInfo = new ArrayList<>();
+// GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest();
+// goodsInfoRequest.setId("981100006005901");
+// goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db");
+// goodsInfoRequest.setSubOpenId("oVLur61wBKJEO7QPR1dsmzS5TSfs");
+// goodsInfoRequest.setProfitSharing("1");
+// goodsInfoRequest.setAreaInfo("520100");
+// goodsInfoRequest.setPayType("0");
+// goodsInfoRequest.setBusinessType("10408");
+// goodsInfo.add(goodsInfoRequest);
+// tradePayOff1Data.setGoodsInfo(goodsInfo);
+// PayInfo payInfo = tradePayOff1(tradePayOff1Data);
+// System.err.println(payInfo);
+ //PayInfo(retCode=000000, retMsg=success, success=true, data=PayInfoData(redirectUrl=https://qhsctest.qytzt.cn/gray/mobile/index.html?f=allCashDesk&accessToken=5nUBXayFpfZz%2FXUZiMu9LzeRXmqmlqaCS%2BHfu5udIt4%3D, payId=540000420250725000135549, status=null, payTime=null, payFee=null, paymentInfos=null), sign=8154ba2728280900b122c56352c1c7fe)
+
+
+ // (补偿单)拉起支付
+// TradePayOffData tradePayOffData = new TradePayOffData();
+// tradePayOffData.setPartnerId("5400004");
+// tradePayOffData.setScene("TRAFFIC");
+// tradePayOffData.setPartnerPayId("1948685426689200128");
+// tradePayOffData.setCurrency("RMB");
+// tradePayOffData.setTotalFee("1");
+// tradePayOffData.setRetUrl("/home/");
+// tradePayOffData.setClientIp("127.0.0.1");
+// tradePayOffData.setNeedLoginFlag("N");
+// tradePayOffData.setOrderDesc("出行订单支付");
+// tradePayOffData.setAccessMode("APP");
+// List<PaymentInfoRequest> paymentInfoRequests = new ArrayList<>();
+// PaymentInfoRequest paymentInfoRequest = new PaymentInfoRequest();
+// paymentInfoRequest.setPayModeId("501212");
+// paymentInfoRequests.add(paymentInfoRequest);
+// tradePayOffData.setPaymentInfos(paymentInfoRequests);
+// List<GoodsInfo> goodsInfo = new ArrayList<>();
+// GoodsInfo goodsInfo1 = new GoodsInfo();
+// goodsInfo1.setMerchantCode("");
+// goodsInfo1.setCustId("");
+// goodsInfo1.setCustName("");
+// goodsInfo1.setProfitSharing("1");
+// goodsInfo.add(goodsInfo1);
+// tradePayOffData.setGoodsInfo(goodsInfo);
+// PayInfo payInfo1 = tradePayOff(tradePayOffData);
+// System.err.println(payInfo1);
+
+ //订单创建
+// CreateOrderRequest createOrderRequest = new CreateOrderRequest();
+// createOrderRequest.setTreatShopId("11448158");
+// createOrderRequest.setOrderAppId("52270015");
+// createOrderRequest.setScene("TRAFFIC");
+// createOrderRequest.setPartnerId("522700");
+// createOrderRequest.setField1("{\"profitSharing\":\"1\",\"isPromote\":\"0\"}");
+// createOrderRequest.setCharge(new BigDecimal("0.01"));
+// createOrderRequest.setChannelSource("GRJYCXWXXCX");
+// createOrderRequest.setOrderId("1948685426689200128");
+// createOrderRequest.setOrderNo("0123456");
+// createOrderRequest.setCustomerId("11448156");
+// OrderInfo orderInfo = tradeOrderCreate(createOrderRequest);
+// System.err.println(orderInfo);
+
+ //行程单列表查询
+// GetTravelItineraryListRequest request = new GetTravelItineraryListRequest();
+// request.setScene("TRAFFIC");
+// request.setPartnerId("522700");
+// request.setCustomerId("11448156");
+// request.setOrderNo("0123456");
+// request.setDriverId("11448158");
+// ListPage<TravelItinerary> travelItineraryList = getTravelItineraryList(request);
+// System.err.println(travelItineraryList);
+
+ }
+
+ /**
+ * 拉起支付
+ *
+ * @param tradePayOff1Data
+ * @param recoveryOrder
+ * @return
+ */
+ public static PayInfo tradePayOff1(TradePayOff1Data tradePayOff1Data, Integer recoveryOrder) {
+ tradePayOff1Data.setPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401007" : "5400004");
+ tradePayOff1Data.setTimeout("72H");
+ tradePayOff1Data.setScene("TRAFFIC");
+ tradePayOff1Data.setCurrency("RMB");
+ tradePayOff1Data.setNeedLoginFlag("N");
+ tradePayOff1Data.setAccessMode("APP");
+ tradePayOff1Data.getGoodsInfo().forEach(goodsInfoRequest -> {
+ if(0 == recoveryOrder){
+ goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901");
+ }else{
+ goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "981100006228370" : "981100006005901");
+ }
+ goodsInfoRequest.setSubAppId(qianYunTongConfig.getAppId());
+
+ goodsInfoRequest.setAreaInfo("520100");
+ goodsInfoRequest.setPayType("0");
+ goodsInfoRequest.setBusinessType("10408");
+ });
+
+
+ TradeRequest request = new TradeRequest<TradePayOff1Data>();
+ request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954795404533583872" : "1911676727023968256");
+ request.setAppId(qianYunTongConfig.getAppkey());
+ request.setConfigVersion(1);
+ request.setRequestId(UUIDUtil.getRandomCode());
+ request.setData(tradePayOff1Data);
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradePayOff";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUIDUtil.getRandomCode();
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", new Gson().toJson(request));
+ log.info("【拉起支付】请求地址:" + url);
+ log.info("【拉起支付】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【拉起支付】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String resCode = jsonObject.getString("resCode");
+ if (!"000000".equals(resCode)) {
+ log.error("【拉起支付】失败:" + jsonObject.getString("resMsg"));
+ throw new RuntimeException("【拉起支付】失败:" + jsonObject.getString("resMsg"));
+ }
+ JSONObject busiResp = jsonObject.getJSONObject("busiResp");
+ PayInfo payInfo = busiResp.getObject("payInfo", PayInfo.class);
+ return payInfo;
+ }
+
+ /**
+ * 创建行程单
+ *
+ * @param request
+ * @return 行程单ID
+ */
+ public static String createTravelItinerary(CreateTravelItineraryRequest request) {
+ request.setScene("TRAFFIC");
+ request.setPartnerId("522700");
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/createTravelItinerary";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUIDUtil.getRandomCode();
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", new Gson().toJson(request));
+ log.info("【创建行程单】请求地址:" + url);
+ log.info("【创建行程单】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【创建行程单】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String resCode = jsonObject.getString("resCode");
+ if (!"000000".equals(resCode)) {
+ log.error("【创建行程单】失败:" + jsonObject.getString("resMsg"));
+ throw new RuntimeException("【创建行程单】失败:" + jsonObject.getString("resMsg"));
+ }
+ return jsonObject.getString("busiResp");
+ }
+
+
+ /**
+ * 修改行程单
+ *
+ * @param request
+ */
+ public static Boolean modifyTravelItinerary(ModifyTravelItineraryRequest request) {
+ request.setScene("TRAFFIC");
+ request.setPartnerId("522700");
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/modifyTravelItinerary";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUIDUtil.getRandomCode();
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", new Gson().toJson(request));
+ log.info("【修改行程单】请求地址:" + url);
+ log.info("【修改行程单】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【修改行程单】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String resCode = jsonObject.getString("resCode");
+ if (!"000000".equals(resCode)) {
+ log.error("【修改行程单】失败:" + jsonObject.getString("resMsg"));
+ throw new RuntimeException("【修改行程单】失败:" + jsonObject.getString("resMsg"));
+ }
+ return true;
+ }
+
+
+ /**
+ * 行程单列表查询
+ *
+ * @param request
+ * @return
+ */
+ public static ListPage<List<TravelItinerary>> getTravelItineraryList(GetTravelItineraryListRequest request) {
+ request.setScene("TRAFFIC");
+ request.setPartnerId("522700");
+
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/getTravelItineraryList";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUIDUtil.getRandomCode();
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", new Gson().toJson(request));
+ log.info("【行程单列表查询】请求地址:" + url);
+ log.info("【行程单列表查询】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【行程单列表查询】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String resCode = jsonObject.getString("resCode");
+ if (!"000000".equals(resCode)) {
+ log.error("【行程单列表查询】失败:" + jsonObject.getString("resMsg"));
+ throw new RuntimeException("【行程单列表查询】失败:" + jsonObject.getString("resMsg"));
+ }
+ JSONObject busiResp = jsonObject.getJSONObject("busiResp");
+ Integer total = busiResp.getInteger("total");
+ Integer pageNum = busiResp.getInteger("pageNum");
+ Integer pageSize = busiResp.getInteger("pageSize");
+ JSONArray list = busiResp.getJSONArray("list");
+ List<TravelItinerary> travelItineraryList = new ArrayList<>();
+ for (int i = 0; i < list.size(); i++) {
+ TravelItinerary object = list.getObject(i, TravelItinerary.class);
+ travelItineraryList.add(object);
+ }
+ ListPage listPage = new ListPage<List<TravelItinerary>>();
+ listPage.setTotal(total);
+ listPage.setPageNum(pageNum);
+ listPage.setPageSize(pageSize);
+ listPage.setList(travelItineraryList);
+ return listPage;
+ }
+
+ /**
+ * 订单创建及拉起支付
+ *
+ * @param tradeOrderCreateData
+ * @return
+ */
+ public static TradeOrderCreate tradeOrderCreate1(TradeOrderCreateData tradeOrderCreateData, Integer recoveryOrder) {
+ tradeOrderCreateData.setScene("TRAFFIC");
+ tradeOrderCreateData.setPartnerId("522700");
+ tradeOrderCreateData.setTimeout("72H");
+ tradeOrderCreateData.setOrderAppId("52270015");
+ tradeOrderCreateData.setChannelSource("GRJYCXWXXCX");
+ tradeOrderCreateData.setPayPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401007" : "5400004");
+ tradeOrderCreateData.setCurrency("RMB");
+ tradeOrderCreateData.setNeedLoginFlag("N");
+ tradeOrderCreateData.setAccessMode("APP");
+ tradeOrderCreateData.getGoodsInfo().forEach(goodsInfoRequest -> {
+ if(0 == recoveryOrder){
+ goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901");
+ }else{
+ goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "981100006228370" : "981100006005901");
+ }
+ goodsInfoRequest.setSubAppId(qianYunTongConfig.getAppId());
+ goodsInfoRequest.setAreaInfo("520100");
+ goodsInfoRequest.setPayType("0");
+ goodsInfoRequest.setBusinessType("10408");
+ });
+
+
+ TradeRequest request = new TradeRequest<TradeOrderCreateData>();
+ request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954793280550756352" : "1945688132719169536");
+ request.setAppId(qianYunTongConfig.getAppkey());
+ request.setConfigVersion(1);
+ request.setRequestId(UUIDUtil.getRandomCode());
+ request.setData(tradeOrderCreateData);
+
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderCreate";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUIDUtil.getRandomCode();
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", new Gson().toJson(request));
+ log.info("【订单创建及拉起支付】请求地址:" + url);
+ log.info("【订单创建及拉起支付】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【订单创建及拉起支付】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String resCode = jsonObject.getString("resCode");
+ if (!"000000".equals(resCode)) {
+ log.error("【订单创建及拉起支付】失败:" + jsonObject.getString("resMsg"));
+ throw new RuntimeException("【订单创建及拉起支付】失败:" + jsonObject.getString("resMsg"));
+ }
+ TradeOrderCreate busiResp = jsonObject.getObject("busiResp", TradeOrderCreate.class);
+ return busiResp;
+ }
+
+ /**
+ * 订单创建
+ *
+ * @param createOrderRequest
+ * @return
+ */
+ public static OrderInfo tradeOrderCreate(CreateOrderRequest createOrderRequest) {
+ createOrderRequest.setOrderAppId("52270015");
+ createOrderRequest.setScene("TRAFFIC");
+ createOrderRequest.setPartnerId("522700");
+ createOrderRequest.setChannelSource("GRJYCXWXXCX");
+
+ TradeRequest request = new TradeRequest<CreateOrderRequest>();
+ request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954792737421942784" : "1948289607125864448");
+ request.setAppId(qianYunTongConfig.getAppkey());
+ request.setConfigVersion(1);
+ request.setRequestId(UUIDUtil.getRandomCode());
+ request.setData(createOrderRequest);
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderCreate";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUIDUtil.getRandomCode();
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", new Gson().toJson(request));
+ log.info("【订单创建】请求地址:" + url);
+ log.info("【订单创建】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【订单创建】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String resCode = jsonObject.getString("resCode");
+ if (!"000000".equals(resCode)) {
+ log.error("【订单创建】失败:" + jsonObject.getString("resMsg"));
+ throw new RuntimeException("【订单创建】失败:" + jsonObject.getString("resMsg"));
+ }
+ JSONObject busiResp = jsonObject.getJSONObject("busiResp");
+ OrderInfo orderInfo = busiResp.getObject("orderInfo", OrderInfo.class);
+ return orderInfo;
+ }
+
+ /**
+ * (补偿单)拉起支付
+ *
+ * @param tradePayOffData
+ * @return
+ */
+ public static PayInfo tradePayOff(TradePayOffData tradePayOffData) {
+ tradePayOffData.setPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401008" : "5400005");
+ tradePayOffData.setTimeout("72H");
+ tradePayOffData.setScene("TRAFFIC");
+ tradePayOffData.setCurrency("RMB");
+ tradePayOffData.setRetUrl("");
+ InetAddress inetAddress = null;
+ try {
+ inetAddress = InetAddress.getLocalHost();
+ } catch (UnknownHostException e) {
+ throw new RuntimeException(e);
+ }
+ String ip = inetAddress.getHostAddress();
+ tradePayOffData.setClientIp(ip);
+ tradePayOffData.setNeedLoginFlag("N");
+ tradePayOffData.setAccessMode("APP");
+ List<PaymentInfoRequest> paymentInfoRequests = new ArrayList<>();
+ PaymentInfoRequest paymentInfoRequest = new PaymentInfoRequest();
+ paymentInfoRequest.setPayModeId("501212");
+ paymentInfoRequest.setRealFee(tradePayOffData.getTotalFee().toString());
+ paymentInfoRequest.setTradeFee(tradePayOffData.getTotalFee().toString());
+ paymentInfoRequest.setAccountTyp("501");
+ paymentInfoRequests.add(paymentInfoRequest);
+ tradePayOffData.setPaymentInfos(paymentInfoRequests);
+ List<GoodsInfo> goodsInfo = new ArrayList<>();
+ GoodsInfo goodsInfo1 = new GoodsInfo();
+ goodsInfo1.setMerchantCode("prod".equals(qianYunTongConfig.getActiveProfile()) ? "B00001404" : "B00000905");
+ goodsInfo1.setCustId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "CB0000004853" : "CB0000004686");
+ goodsInfo1.setCustName("prod".equals(qianYunTongConfig.getActiveProfile()) ? "黔南云码通数字产业运营有限公司" : "证联消费平台交易客户");
+ goodsInfo1.setBusinessType("10408");
+ goodsInfo1.setAgreementNo("prod".equals(qianYunTongConfig.getActiveProfile()) ? "00000402485377063581755054680461" : "00000000468618354161754464398681");
+ goodsInfo1.setProfitSharing("1");
+ goodsInfo.add(goodsInfo1);
+ tradePayOffData.setGoodsInfo(goodsInfo);
+
+
+ TradeRequest request = new TradeRequest<TradePayOffData>();
+ request.setSceneId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "1954794605782913024" : "1774717104844095488");
+ request.setAppId(qianYunTongConfig.getAppkey());
+ request.setConfigVersion("prod".equals(qianYunTongConfig.getActiveProfile()) ? 1 : 2);
+ request.setRequestId(UUIDUtil.getRandomCode());
+ request.setData(tradePayOffData);
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradePayOff";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUIDUtil.getRandomCode();
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", new Gson().toJson(request));
+ log.info("【(补偿单)拉起支付】请求地址:" + url);
+ log.info("【(补偿单)拉起支付】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【(补偿单)拉起支付】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String resCode = jsonObject.getString("resCode");
+ if (!"000000".equals(resCode)) {
+ log.error("【(补偿单)拉起支付】失败:" + jsonObject.getString("resMsg"));
+ throw new RuntimeException("【(补偿单)拉起支付】失败:" + jsonObject.getString("resMsg"));
+ }
+ JSONObject busiResp = jsonObject.getJSONObject("busiResp");
+ PayInfo payInfo = busiResp.getObject("payInfo", PayInfo.class);
+ return payInfo;
+ }
+
+
+ /**
+ * 查询支付单信息
+ *
+ * @param getPaymentInfoDataRequest
+ * @return
+ */
+ public static GetPaymentInfo paymentInfo(GetPaymentInfoDataRequest getPaymentInfoDataRequest) {
+ getPaymentInfoDataRequest.setPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5401007" : "5400004");
+
+ GetPaymentInfoRequest request = new GetPaymentInfoRequest();
+ request.setRequstType("POST");
+ request.setBusType(1);
+ request.setData(getPaymentInfoDataRequest);
+
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/paymentInfo";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUIDUtil.getRandomCode();
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", new Gson().toJson(request));
+ log.info("【查询支付单信息】请求地址:" + url);
+ log.info("【查询支付单信息】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【查询支付单信息】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String resCode = jsonObject.getString("retCode");
+ if (!"0".equals(resCode)) {
+ log.error("【查询支付单信息】失败:" + jsonObject.getString("retMsg"));
+ throw new RuntimeException("【查询支付单信息】失败:" + jsonObject.getString("retMsg"));
+ }
+ JSONObject object = jsonObject.getJSONObject("object");
+ String retCode = object.getString("retCode");
+ if (!"000000".equals(retCode)) {
+ log.error("【查询支付单信息】失败:" + jsonObject.getString("retMsg"));
+ throw new RuntimeException("【查询支付单信息】失败:" + jsonObject.getString("retMsg"));
+ }
+ GetPaymentInfo payInfo = object.getObject("data", GetPaymentInfo.class);
+ return payInfo;
+ }
+
+
+ /**
+ * (补偿单)支付成功通知
+ *
+ * @param request
+ * @return
+ */
+ public static OrderInfo paymentOrder(PaymentOrderRequest request) {
+ request.setScene("TRAFFIC");
+ request.setMhltiCenterAppId("52270015");
+ request.setPayType(4);
+ request.setPayChannel(6);
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/paymentOrder";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUIDUtil.getRandomCode();
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", new Gson().toJson(request));
+ log.info("【(补偿单)支付成功通知】请求地址:" + url);
+ log.info("【(补偿单)支付成功通知】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【(补偿单)支付成功通知】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String resCode = jsonObject.getString("resCode");
+ if (!"000000".equals(resCode)) {
+ log.error("【(补偿单)支付成功通知】失败:" + jsonObject.getString("resMsg"));
+ throw new RuntimeException("【(补偿单)支付成功通知】失败:" + jsonObject.getString("resMsg"));
+ }
+ OrderInfo orderInfo = jsonObject.getObject("busiResp", OrderInfo.class);
+ return orderInfo;
+ }
+
+
+
+ /**
+ * 订单退款
+ * @param request
+ * @return
+ */
+ public static TradeOrderRefund tradeOrderRefund(TradeOrderRefundRequest request) {
+ request.setPayPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5400004" : "5401007");
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderRefund";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUIDUtil.getRandomCode();
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", new Gson().toJson(request));
+ log.info("【订单退款】请求地址:" + url);
+ log.info("【订单退款】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【订单退款】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String resCode = jsonObject.getString("resCode");
+ if (!"000000".equals(resCode)) {
+ log.error("【订单退款】失败:" + jsonObject.getString("resMsg"));
+ throw new RuntimeException("【订单退款】失败:" + jsonObject.getString("resMsg"));
+ }
+ JSONObject refundInfo = jsonObject.getJSONObject("busiResp").getJSONObject("refundInfo");
+ String retCode = refundInfo.getString("retCode");
+ if(!"".equals(retCode)){
+ log.error("【订单退款】失败:" + refundInfo.getString("retMsg"));
+ throw new RuntimeException("【订单退款】失败:" + refundInfo.getString("retMsg"));
+ }
+ TradeOrderRefund tradeOrderRefund = refundInfo.getObject("data", TradeOrderRefund.class);
+ return tradeOrderRefund;
+ }
+
+
+ /**
+ * 订单退款通知
+ * @param request
+ */
+ public static void orderRefundNotice(OrderRefundNoticeRequest request) {
+ request.setScene("TRAFFIC");
+ request.setMhltiCenterAppId("52270015");
+
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/orderRefundNotice";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUIDUtil.getRandomCode();
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", new Gson().toJson(request));
+ log.info("【订单退款通知】请求地址:" + url);
+ log.info("【订单退款通知】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【订单退款通知】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String resCode = jsonObject.getString("resCode");
+ if (!"000000".equals(resCode)) {
+ log.error("【订单退款通知】失败:" + jsonObject.getString("resMsg"));
+ throw new RuntimeException("【订单退款通知】失败:" + jsonObject.getString("resMsg"));
+ }
+ }
+
+
+
+ /**
+ * 订单取消
+ * @param orderId
+ */
+ public static void tradeOrderCancel(String orderId) {
+ TradeOrderCancelRequest request = new TradeOrderCancelRequest();
+ request.setScene("TRAFFIC");
+ request.setMhltiCenterAppId("52270015");
+ request.setOrderId(orderId);
+
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderCancel";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUIDUtil.getRandomCode();
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", new Gson().toJson(request));
+ log.info("【订单取消】请求地址:" + url);
+ log.info("【订单取消】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【订单取消】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String resCode = jsonObject.getString("resCode");
+ if (!"000000".equals(resCode)) {
+ log.error("【订单取消】失败:" + jsonObject.getString("resMsg"));
+ throw new RuntimeException("【订单取消】失败:" + jsonObject.getString("resMsg"));
+ }
+ }
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java
new file mode 100644
index 0000000..48de991
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongConfig.java
@@ -0,0 +1,203 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/8 11:31
+ */
+@Component
+public class QianYunTongConfig {
+
+ @Value("${spring.profiles.active}")
+ private String activeProfile;
+
+
+ /**
+ * appkey
+ */
+ private String appkey;
+ /**
+ * 私钥地址
+ */
+ private String privateKeyPath;
+ /**
+ * 消费者账号
+ */
+ private String userName;
+ /**
+ * 状态
+ * 1:生产环境
+ * 2:测试环境
+ */
+ private String status;
+ /**
+ * API地址
+ */
+ private String apiUrl;
+ /**
+ * 桶名
+ */
+ private String bucketName;
+ /**
+ * 小程序appId
+ */
+ private String appId;
+ /**
+ * HOS的基础路径(公共前缀)
+ */
+ private String endPoint;
+ /**
+ * 账户的ID
+ */
+ private String account;
+ /**
+ * 向UAAS服务请求到的access_key
+ */
+ private String accessKey;
+ /**
+ * 向UAAS服务请求到的secret_key
+ */
+ private String secretKey;
+
+ public String getActiveProfile() {
+ return activeProfile;
+ }
+
+ public void setActiveProfile(String activeProfile) {
+ this.activeProfile = activeProfile;
+ }
+
+ public String getAppkey() {
+ return appkey;
+ }
+
+ public void setAppkey(String appkey) {
+ this.appkey = appkey;
+ }
+
+ public String getPrivateKeyPath() {
+ return privateKeyPath;
+ }
+
+ public void setPrivateKeyPath(String privateKeyPath) {
+ this.privateKeyPath = privateKeyPath;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ public String getApiUrl() {
+ return apiUrl;
+ }
+
+ public void setApiUrl(String apiUrl) {
+ this.apiUrl = apiUrl;
+ }
+
+ public String getBucketName() {
+ return bucketName;
+ }
+
+ public void setBucketName(String bucketName) {
+ this.bucketName = bucketName;
+ }
+
+ public String getAppId() {
+ return appId;
+ }
+
+ public void setAppId(String appId) {
+ this.appId = appId;
+ }
+
+ public String getEndPoint() {
+ return endPoint;
+ }
+
+ public void setEndPoint(String endPoint) {
+ this.endPoint = endPoint;
+ }
+
+ public String getAccount() {
+ return account;
+ }
+
+ public void setAccount(String account) {
+ this.account = account;
+ }
+
+ public String getAccessKey() {
+ return accessKey;
+ }
+
+ public void setAccessKey(String accessKey) {
+ this.accessKey = accessKey;
+ }
+
+ public String getSecretKey() {
+ return secretKey;
+ }
+
+ public void setSecretKey(String secretKey) {
+ this.secretKey = secretKey;
+ }
+
+ public QianYunTongConfig getQianYunTongConfig() {
+ if("dev".equals(activeProfile)){
+ this.appkey = "10001104";
+ this.privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key_test.pem";
+ this.userName = "xiaofei";
+ this.status = "1";
+ this.setApiUrl("https://test-zhongtai.stqcloud.com:10070");
+ this.setBucketName("bucuTest0625");
+ this.setAppId("wxcc3c9058e2b294db");
+ this.setEndPoint("http://119.4.112.68:27741/v1");
+ this.setAccount("d8bef0a04db511f0b79d01a3e2b7587e");
+ this.setAccessKey("TYMFTFD5SIIT15DCCUD7");
+ this.setSecretKey("AoI1dkH3yoAvXoaQlREO3ed9mwQJFluLTliS9T1z");
+ }
+ if("test".equals(activeProfile)){
+ this.setAppkey("10001104");
+ this.setPrivateKeyPath("/etraffic/server/private_key_test.pem");
+ this.setUserName("xiaofei");
+ this.setStatus("1");
+ this.setApiUrl("https://test-zhongtai.stqcloud.com:10070");
+ this.setBucketName("bucuTest0625");
+ this.setAppId("wxcc3c9058e2b294db");
+ this.setEndPoint("http://10.30.52.45:27741/v1");
+ this.setAccount("d8bef0a04db511f0b79d01a3e2b7587e");
+ this.setAccessKey("TYMFTFD5SIIT15DCCUD7");
+ this.setSecretKey("AoI1dkH3yoAvXoaQlREO3ed9mwQJFluLTliS9T1z");
+ }
+ if("prod".equals(activeProfile)){
+ this.setAppkey("10001104");
+ this.setPrivateKeyPath("/etraffic/server/private_key.pem");
+ this.setUserName("xiwang");
+ this.setStatus("1");
+ this.setApiUrl("http://jjzhongtai.stqcloud.com:10010");
+ this.setBucketName("qyt20250702");
+ this.setAppId("wxcc3c9058e2b294db");
+ this.setEndPoint("http://10.30.52.45:27741/v1");
+ this.setAccount("d8bef0a04db511f0b79d01a3e2b7587e");
+ this.setAccessKey("TYMFTFD5SIIT15DCCUD7");
+ this.setSecretKey("AoI1dkH3yoAvXoaQlREO3ed9mwQJFluLTliS9T1z");
+ }
+ return this;
+ }
+
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/SMSUtil.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/SMSUtil.java
new file mode 100644
index 0000000..1d5fcaa
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/SMSUtil.java
@@ -0,0 +1,129 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.Gson;
+import com.open.common.util.OpenApiClient;
+import com.open.common.util.SystemParameterNames;
+import com.stylefeng.guns.modular.system.util.SpringContextsUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.SendSmsRequest;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * 短信工具类
+ * @author zhibing.pu
+ * @Date 2025/6/10 10:48
+ */
+@Slf4j
+public class SMSUtil {
+
+ private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();
+
+
+ /**
+ * 获取易信验证码
+ * @param mobile
+ * @return
+ */
+ public static String sendVerifyCode(String mobile) {
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/sendVerifyCode";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", "{\"mobile\":\"" + mobile + "\"}");
+ log.info("【获取易信验证码】请求地址:" + url);
+ log.info("【获取易信验证码】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【获取易信验证码】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String retCode = jsonObject.getString("retCode");
+ if (!"0".equals(retCode)) {
+ log.error("【获取易信验证码】请求失败:" + result);
+ throw new RuntimeException("【获取易信验证码】请求失败:" + result);
+ }
+ JSONObject object = jsonObject.getJSONObject("object");
+ String status = object.getString("status");
+ if (!"0".equals(status)) {
+ log.error("【获取易信验证码】失败:" + object.toJSONString());
+ throw new RuntimeException("【获取易信验证码】失败:" + object.toJSONString());
+ }
+ return object.getString("code");
+ }
+
+ public static void main(String[] args) {
+ SendSmsRequest request = new SendSmsRequest();
+ request.setDestAddress("15828353127");
+ request.setTemplateId("TPL202507300002");
+ Map<String, String> templateParams = new HashMap<>();
+// templateParams.put("code", "1234");
+ request.setTemplateParams(templateParams);
+// request.setCode("code");
+ request.setSpId("Y86asr7J");
+ SMSUtil.sendSms(request);
+ }
+
+ /**
+ * 根据模板发送短信
+ *
+ * @param request
+ * @return
+ */
+ public static Boolean sendSms(SendSmsRequest request) {
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/sendSmsByTpl";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", new Gson().toJson(request));
+ log.info("【根据模板发送短信】请求地址:" + url);
+ log.info("【根据模板发送短信】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【根据模板发送短信】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String retCode = jsonObject.getString("retCode");
+ if (!"0".equals(retCode)) {
+ log.error("【根据模板发送短信】请求失败:" + result);
+ throw new RuntimeException("【根据模板发送短信】请求失败:" + result);
+ }
+ JSONObject object = jsonObject.getJSONObject("object");
+ String status = object.getString("status");
+ if (!"0".equals(status)) {
+ log.error("【根据模板发送短信】失败:" + object.toJSONString());
+ throw new RuntimeException("【根据模板发送短信】失败:" + object.toJSONString());
+ }
+ return true;
+ }
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/UserUtil.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/UserUtil.java
new file mode 100644
index 0000000..f686686
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/UserUtil.java
@@ -0,0 +1,368 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.Gson;
+import com.open.common.util.OpenApiClient;
+import com.open.common.util.SystemParameterNames;
+import com.stylefeng.guns.modular.system.util.SpringContextsUtil;
+import com.stylefeng.guns.modular.system.util.qianyuntong.model.*;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * 用户工具类
+ *
+ * @author zhibing.pu
+ * @Date 2025/6/6 14:47
+ */
+@Slf4j
+public class UserUtil {
+
+ private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();
+
+
+
+
+
+ /**
+ * 根据手机号码获取人员信息
+ *
+ * @param mobile 手机号码
+ */
+ public static List<QYTUserInfo> getUserInfoByPhone(String mobile) {
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/2.0/queryUserinfoByMobilev2";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", "{\"list\":[{\"mobile\":\"" + mobile + "\"}]}");
+ log.info("【根据手机号码获取人员信息】请求地址:" + url);
+ log.info("【根据手机号码获取人员信息】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "GET", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【根据手机号码获取人员信息】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String retCode = jsonObject.getString("retCode");
+ if (!"0".equals(retCode)) {
+ log.error("【根据手机号码获取人员信息】请求失败:" + result);
+ return null;
+ }
+ JSONObject object = jsonObject.getJSONObject("object");
+ String status = object.getString("status");
+ if (!"0".equals(status)) {
+ log.error("【根据手机号码获取人员信息】失败:" + object.toJSONString());
+ return null;
+ }
+ JSONArray data = object.getJSONObject("data").getJSONArray("list");
+ List<QYTUserInfo> list = new ArrayList<>();
+ for (int i = 0; i < data.size(); i++) {
+ QYTUserInfo userInfo = data.getObject(i, QYTUserInfo.class);
+ list.add(userInfo);
+ }
+ return list;
+ }
+
+ /**
+ * 根据手机号码获取人员信息
+ *
+ * @param mobile 手机号码
+ * @param enterNum 企业编号
+ */
+ public static List<QYTUserInfo> getUserInfoByPhone(String mobile, String enterNum) {
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/getUserInfoByPhone";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ Map<String, String> map = new HashMap<>();
+ map.put("mobile", mobile);
+ if (null != enterNum) {
+ map.put("enterNum", enterNum);
+ }
+ contentMap.put("content", JSON.toJSONString(map));
+ log.info("【根据手机号码获取人员信息】请求地址:" + url);
+ log.info("【根据手机号码获取人员信息】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "GET", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【根据手机号码获取人员信息】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String retCode = jsonObject.getString("retCode");
+ if (!"0".equals(retCode)) {
+ log.error("【根据手机号码获取人员信息】请求失败:" + result);
+ return null;
+ }
+ JSONObject object = jsonObject.getJSONObject("object");
+ String status = object.getString("status");
+ if (!"0".equals(status)) {
+ log.error("【根据手机号码获取人员信息】失败:" + object.toJSONString());
+ return null;
+ }
+ JSONArray data = object.getJSONArray("data");
+ List<QYTUserInfo> list = new ArrayList<>();
+ for (int i = 0; i < data.size(); i++) {
+ data.getJSONObject(i).getString("enter_code");
+ QYTUserInfo userInfo = data.getObject(i, QYTUserInfo.class);
+ list.add(userInfo);
+ }
+ return list;
+ }
+
+
+ /**
+ * 根据手机号注册用户
+ *
+ * @param request
+ * @return
+ */
+ public static RegisterViaMobile registerViaMobile(RegisterViaMobileRequest request) {
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/m1_register_via_mobile";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", new Gson().toJson(request));
+ log.info("【根据手机号注册用户】请求地址:" + url);
+ log.info("【根据手机号注册用户】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【根据手机号注册用户】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String retCode = jsonObject.getString("retCode");
+ if (!"0".equals(retCode)) {
+ log.error("【根据手机号注册用户】请求失败:" + result);
+ throw new RuntimeException("【根据手机号注册用户】请求失败:" + result);
+ }
+ JSONObject object = jsonObject.getJSONObject("object");
+ String status = object.getString("status");
+ if (!"0".equals(status)) {
+ log.error("【根据手机号注册用户】失败:" + object.toJSONString());
+ throw new RuntimeException("【根据手机号注册用户】失败:" + object.toJSONString());
+ }
+ return jsonObject.getObject("object", RegisterViaMobile.class);
+ }
+
+
+ /**
+ * 易信用户修改密码
+ *
+ * @param request
+ * @return
+ */
+ public static Boolean modifyPwd(ModifyPwdRequest request) {
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/modifyPwd";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", new Gson().toJson(request));
+ log.info("【易信用户修改密码】请求地址:" + url);
+ log.info("【易信用户修改密码】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【易信用户修改密码】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String retCode = jsonObject.getString("retCode");
+ if (!"0".equals(retCode)) {
+ log.error("【易信用户修改密码】请求失败:" + result);
+ throw new RuntimeException("【易信用户修改密码】请求失败:" + result);
+ }
+ JSONObject object = jsonObject.getJSONObject("object");
+ String status = object.getString("status");
+ if (!"0".equals(status)) {
+ log.error("【易信用户修改密码】失败:" + object.toJSONString());
+ throw new RuntimeException("【易信用户】失败:" + object.toJSONString());
+ }
+ return true;
+ }
+
+
+ /**
+ * 易信重置密码
+ *
+ * @param request
+ * @return
+ */
+ public static Boolean resetPwd(ResetPwdRequest request) {
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/resetPwd";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ contentMap.put("content", new Gson().toJson(request));
+ log.info("【易信重置密码】请求地址:" + url);
+ log.info("【易信重置密码】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【易信重置密码】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String retCode = jsonObject.getString("retCode");
+ if (!"0".equals(retCode)) {
+ log.error("【易信重置密码】请求失败:" + result);
+ throw new RuntimeException("【易信重置密码】请求失败:" + result);
+ }
+ JSONObject object = jsonObject.getJSONObject("object");
+ String status = object.getString("status");
+ if (!"0".equals(status)) {
+ log.error("【易信重置密码】失败:" + object.toJSONString());
+ throw new RuntimeException("【易信重置密码】失败:" + object.toJSONString());
+ }
+ return true;
+ }
+
+
+
+ /**
+ * 实名认证
+ * @param realName
+ * @param cardNo
+ * @return
+ */
+ public static Boolean idCardAuth(String realName, String cardNo) {
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/idCardAuth";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ Map<String, String> map = new HashMap<>();
+ map.put("realName", realName);
+ map.put("cardNo", cardNo);
+ contentMap.put("content", JSON.toJSONString(map));
+ log.info("【身份证实名认证】请求地址:" + url);
+ log.info("【身份证实名认证】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【身份证实名认证】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String retCode = jsonObject.getString("retCode");
+ if (!"0".equals(retCode)) {
+ log.error("【身份证实名认证】请求失败:" + result);
+ throw new RuntimeException("【身份证实名认证】请求失败:" + result);
+ }
+ JSONObject object = jsonObject.getJSONObject("object");
+ return object.getBoolean("isok");
+ }
+
+
+ /**
+ * 根据手机号码获取易信uuid
+ * @param mobile
+ * @return
+ */
+ public static String getOnconUUIDByMobile(String mobile) {
+ //请求路径
+ String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/getOnconUUIDByMobile";
+ //私钥文件
+ String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath();
+ //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密
+ String appKey = qianYunTongConfig.getAppkey();//appkey
+ Map<String, String> headers = new HashMap<>();
+ headers.put("Content-Type", "application/json");
+ Map<String, Object> contentMap = new HashMap<String, Object>();
+ Date nowdate = new Date();
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
+
+ String timeStamp = date.format(nowdate);
+ String messageId = UUID.randomUUID().toString().replaceAll("-", "");
+ contentMap.put(SystemParameterNames.getAppKey(), appKey);
+ contentMap.put(SystemParameterNames.getMessage_id(), messageId);
+ contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName());
+ contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus());
+ Map<String, String> map = new HashMap<>();
+ map.put("mobile", mobile);
+ contentMap.put("content", JSON.toJSONString(map));
+ log.info("【根据手机号码获取易信uuid】请求地址:" + url);
+ log.info("【根据手机号码获取易信uuid】请求参数:" + JSON.toJSONString(contentMap));
+ String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap);
+ log.info("【根据手机号码获取易信uuid】请求结果:" + result);
+ JSONObject jsonObject = JSON.parseObject(result);
+ String retCode = jsonObject.getString("retCode");
+ if (!"0".equals(retCode)) {
+ log.error("【根据手机号码获取易信uuid】请求失败:" + result);
+ throw new RuntimeException("【根据手机号码获取易信uuid】请求失败:" + result);
+ }
+ JSONObject object = jsonObject.getJSONObject("object");
+ Integer status = object.getInteger("status");
+ if(0 != status){
+ log.error("【身份证实名认证】请求失败:" + object.getString("desc"));
+ throw new RuntimeException("【身份证实名认证】请求失败:" + object.getString("desc"));
+ }
+ return object.getString("onconUUID");
+ }
+
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CheckEnterExist.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CheckEnterExist.java
new file mode 100644
index 0000000..837dd93
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CheckEnterExist.java
@@ -0,0 +1,40 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/6/6 18:12
+ */
+@Data
+public class CheckEnterExist {
+ /**
+ * 企业ID
+ */
+ private String id;
+ /**
+ * 是否在公有云注册,1:已注册;0:未注册
+ */
+ private String isReg;
+ /**
+ * 创建者手机号
+ */
+ private String mobile;
+ /**
+ * 创建时间
+ */
+ private String createTime;
+ /**
+ * 法人姓名
+ */
+ private String larName;
+ /**
+ * 企业编码
+ */
+ private String enterCode;
+ /**
+ * 认证状态
+ * 0:已认证;1:未认证,初始状态;2:认证不通过;3:认证中
+ */
+ private Integer auth;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateEnterprise.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateEnterprise.java
new file mode 100644
index 0000000..579c4db
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateEnterprise.java
@@ -0,0 +1,46 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/6/9 19:43
+ */
+@Data
+public class CreateEnterprise {
+ /**
+ * 企业ID
+ */
+ private String id;
+ /**
+ * 开通易信状态
+ * 0:成功 1:失败
+ */
+ private String callYixinApi;
+ /**
+ * 开通办公门户状态
+ * 0:成功 1:失败
+ */
+ private String callItdSaveCompany;
+ /**
+ * 开通企业官网状态
+ * 0:成功 1:失败
+ */
+ private String callItdDredgeWebsite;
+ /**
+ * 电话号码
+ */
+ private String phone;
+ /**
+ * 企业idcode
+ */
+ private String idCode;
+ /**
+ * 企业节点ID
+ */
+ private String noteId;
+ /**
+ * 是否新注册企业
+ */
+ private String isNew;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateEnterpriseRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateEnterpriseRequest.java
new file mode 100644
index 0000000..ab18fe9
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateEnterpriseRequest.java
@@ -0,0 +1,118 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/6/9 18:20
+ */
+@Data
+public class CreateEnterpriseRequest {
+ /**
+ * 企业名称
+ */
+ private String name;
+ /**
+ * 企业简称/昵称
+ */
+ private String nickName;
+ /**
+ * 行业编码
+ */
+ private String industry_code;
+ /**
+ * 手机号码
+ */
+ private String mobile;
+ /**
+ * 区域编码
+ */
+ private String area;
+ /**
+ * 企业地址
+ */
+ private String address;
+ /**
+ * 二级域名
+ */
+ private String secondRealmName;
+ /**
+ * 企业密码
+ */
+ private String password;
+ /**
+ * 一级行业分类描述
+ */
+ private String industry_level1;
+ /**
+ * 二级行业分类描述
+ */
+ private String industry_level2;
+ /**
+ * 企业来源编码
+ */
+ private String sourceCode;
+ /**
+ * 企业分类编码
+ */
+ private String typeCode;
+ /**
+ * 代理商id
+ */
+ private String elecsId;
+ /**
+ * 是否发送短信
+ * 0:不发送,1:发送
+ */
+ private String smsFlag;
+ /**
+ * 是否激活
+ * 1:激活;0:未激活
+ */
+ private String mobileFlag;
+ /**
+ * 邮箱
+ */
+ private String email;
+ /**
+ * 邮箱是否激活
+ * 1:激活;0:未激活
+ */
+ private String emailFlag;
+ /**
+ * 是否同步通讯录
+ */
+ private String contact_source;
+ /**
+ * 所属行业通用编码
+ */
+ private String trade_code;
+ /**
+ * 营业执照扫描件url
+ */
+ private String operScanPic;
+ /**
+ * 运营人员姓名
+ */
+ private String idcardName;
+ /**
+ * 运营者身份证号码
+ */
+ private String idcardNum;
+ /**
+ * 运营者身份证照片url
+ */
+ private String idcardPic;
+ /**
+ * 企业工号
+ */
+ private String enterID;
+ /**
+ * 推荐人
+ */
+ private String recommender;
+ /**
+ * 创建者姓名
+ */
+ private String creatorName;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateOrderRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateOrderRequest.java
new file mode 100644
index 0000000..2201301
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateOrderRequest.java
@@ -0,0 +1,53 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 9:35
+ */
+@Data
+public class CreateOrderRequest {
+ /**
+ * 司机id
+ */
+ private String treatShopId;
+ /**
+ * 应用场景标识
+ */
+ private String orderAppId;
+ /**
+ * 场景标识
+ */
+ private String scene;
+ /**
+ * 租户ID。地区行政编码。黔南州传522700
+ */
+ private String partnerId;
+ /**
+ * 结算信息json串。其中结算分账标识(profitSharing:0:不分账,1:分账)、是否推广单标识(isPromote:1、是、0、否)必传。例:{"profitSharing":"0",”isPromote”:”0”}
+ */
+ private String field1;
+ /**
+ * 订单总金额,单位元
+ */
+ private BigDecimal charge;
+ /**
+ * 订单渠道。小程序传GRJYCXWXXCX,贵人家园传GRJY
+ */
+ private String channelSource;
+ /**
+ * 行程单ID
+ */
+ private String orderId;
+ /**
+ * 业务侧订单号
+ */
+ private String orderNo;
+ /**
+ * 下单人ID
+ */
+ private String customerId;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateTravelItineraryRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateTravelItineraryRequest.java
new file mode 100644
index 0000000..8ce9043
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateTravelItineraryRequest.java
@@ -0,0 +1,43 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 16:31
+ */
+@Data
+public class CreateTravelItineraryRequest {
+ /**
+ * 场景标识。交通场景传”TRAFFIC”
+ */
+ private String scene;
+ /**
+ * 租户ID。地区行政编码。黔南州传522700
+ */
+ private String partnerId;
+ /**
+ * 业务侧订单号
+ */
+ private String orderNo;
+ /**
+ * 乘客ID
+ */
+ private String customerId;
+ /**
+ * 司机ID
+ */
+ private String driverId;
+ /**
+ * 推广员ID
+ */
+ private String promoterId;
+ /**
+ * 服务商商户ID
+ */
+ private String supplierShopId;
+ /**
+ * 场景服务类型。1、出租;2、网约车;3、城际;4、顺风车
+ */
+ private Integer serviceType;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/DeleteStafNodeRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/DeleteStafNodeRequest.java
new file mode 100644
index 0000000..0115407
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/DeleteStafNodeRequest.java
@@ -0,0 +1,23 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/6/6 16:39
+ */
+@Data
+public class DeleteStafNodeRequest {
+ /**
+ * 人员ID
+ */
+ private Long empId;
+ /**
+ * 手机号
+ */
+ private String mobile;
+ /**
+ * 企业编号
+ */
+ private String entercode;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/EditStaffNodeRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/EditStaffNodeRequest.java
new file mode 100644
index 0000000..9d3e3eb
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/EditStaffNodeRequest.java
@@ -0,0 +1,72 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/6/6 16:32
+ */
+@Data
+public class EditStaffNodeRequest {
+ /**
+ * 人员ID
+ */
+ private Integer empId;
+ /**
+ * 操作人手机号
+ */
+ private String mobile;
+ /**
+ * 操作人企业ID
+ */
+ private String entercode;
+ /**
+ * 企业ID
+ */
+ private Long enterId;
+ /**
+ * 人员显示名
+ */
+ private String empName;
+ /**
+ * 人员显示名
+ */
+ private String empNickname;
+ /**
+ * 手机号
+ */
+ private String mphone;
+ /**
+ * 登录账号
+ */
+ private String loginNo;
+ /**
+ * 人员性别(男\女)
+ */
+ private String empSex;
+ /**
+ * 人员邮箱
+ */
+ private String email;
+ /**
+ * 员工所属部门ID多个部门英文; 分割
+ */
+ private Integer deptId;
+ /**
+ * 员工职务ID
+ */
+ private Integer positionId;
+ /**
+ * 员工职务名称,如不知道ID可以直接传入名称
+ */
+ private String positionName;
+ /**
+ * 高管模式 1 是 0 不是
+ */
+ private Integer superLevel;
+ /**
+ * 隐藏号码 1 是 0 不是
+ */
+ private Integer hideMobile;
+
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/EnterpriseInfo.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/EnterpriseInfo.java
new file mode 100644
index 0000000..476dc50
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/EnterpriseInfo.java
@@ -0,0 +1,259 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/6/6 17:14
+ */
+@Data
+public class EnterpriseInfo {
+ /**
+ * 企业ID
+ */
+ private String id;
+ /**
+ * 企业编号
+ */
+ private String enter_code;
+ /**
+ * 企业名称
+ */
+ private String enter_name;
+ /**
+ * 是否是全员号码可见,0:是,1:否
+ */
+ private String visible;
+ /**
+ * 认证状态,0:已认证;1:未认证,初始状态;2:认证不通过;3:认证中
+ */
+ private String auth;
+ /**
+ * 认证时间
+ */
+ private String auth_time;
+ /**
+ * 认证注释
+ */
+ private String authRemark;
+ /**
+ * 运营者姓名(委托人)
+ */
+ private String idcard_name;
+ /**
+ * 运营者证件号
+ */
+ private String idcard_num;
+ /**
+ * 运营者证件扫描件URL
+ */
+ private String idcard_pic;
+ /**
+ * 统一社会信用代码
+ */
+ private String uscc;
+ /**
+ * 法人姓名
+ */
+ private String larName;
+ /**
+ * 法人电话
+ */
+ private String larPhone;
+ /**
+ * 法人身份证
+ */
+ private String larIdCard;
+ /**
+ * 法人身份证扫描件URL
+ */
+ private String larIdCardPic;
+ /**
+ * 发票名称
+ */
+ private String invoiceName;
+ /**
+ * 纳税人识别号(发票)
+ */
+ private String invoiceTIN;
+ /**
+ * 开户行名称(发票)
+ */
+ private String invoiceBankersName;
+ /**
+ * 开户行账号(发票)
+ */
+ private String invoiceBankersAccount;
+ /**
+ * 资质机构名称
+ */
+ private String qualificationOrgName;
+ /**
+ * 资质注册号/登记号
+ */
+ private String qualificationRegNum;
+ /**
+ * 资质有效开始时间
+ */
+ private String qualificationStartTime;
+ /**
+ * 资质有效结束时间
+ */
+ private String qualificationEndTime;
+ /**
+ * 资格证书扫描件URL
+ */
+ private String qualificationCertUrl;
+ /**
+ * 省份编码
+ */
+ private String provinceCode;
+ /**
+ * 地市编码
+ */
+ private String cityCode;
+ /**
+ * 区县编码
+ */
+ private String areaCode;
+ /**
+ * 乡镇编码
+ */
+ private String townshipCode;
+ /**
+ * 企业创建时间
+ */
+ private String enter_createdate;
+ /**
+ * 地址
+ */
+ private String address;
+ /**
+ * 营业期开始时间,格式:yyyy-MM-dd HH:mm:ss
+ */
+ private String businessTermStartTime;
+ /**
+ * 营业期结束时间,格式:yyyy-MM-dd HH:mm:ss
+ */
+ private String businessTermEndTime;
+ /**
+ * 企业规模
+ */
+ private String enterScale;
+ /**
+ * 创建者职位
+ */
+ private String creatorPosition;
+ /**
+ * 企业备注/介绍
+ */
+ private String enterRemark;
+ /**
+ * 企业logo
+ */
+ private String enterLogo;
+ /**
+ * 企业邮箱
+ */
+ private String enterEmail;
+ /**
+ * 企业联系电话rg_company_info.enter_tel
+ */
+ private String enterTel;
+ /**
+ * 一级行业分类编码
+ */
+ private String industryStr;
+ /**
+ * 二级行业分类编码
+ */
+ private String industryStr2;
+ /**
+ * 企业联系人姓名
+ */
+ private String enterLinkman;
+ /**
+ * 营业执照扫描件ur
+ */
+ private String operScanPic;
+ /**
+ * 身份证有效期
+ */
+ private String larIdCardValidity;
+ /**
+ * 经营地址
+ */
+ private String operationAddress;
+ /**
+ * 法人身份证背面照片
+ */
+ private String larIdCardPicBack;
+ /**
+ * 法人身份证手持
+ */
+ private String larIdCardPicHold;
+ /**
+ * 开户许可证
+ */
+ private String accountOpeningPermit;
+ /**
+ * 自定义的,例如:企业类型
+ */
+ private String tag1;
+ /**
+ * 自定义的,例如:行业类型
+ */
+ private String tag2;
+ /**
+ * 企业扩展信息
+ */
+ private String iformContentId;
+ /**
+ * 国家统计局网站提供的行政地区编码
+ */
+ private String area;
+ /**
+ * 行业编码
+ */
+ private String industryCode;
+ /**
+ * 企业创建人姓名
+ */
+ private String creatorName;
+ /**
+ * 企业创建人手机号
+ */
+ private String creatorMobile;
+ /**
+ * 管理员邮箱
+ */
+ private String email;
+ /**
+ * 企业简称
+ */
+ private String enterAbbreviation;
+ /**
+ * 营业期限
+ */
+ private String businessTermLong;
+ /**
+ * 一级行业名称
+ */
+ private String industryL1Name;
+ /**
+ * 二级行业名称
+ */
+ private String industryL2Name;
+ /**
+ * 企业介绍(全文本)
+ */
+ private String enterIntro;
+ /**
+ * 法人身份证正面照片
+ */
+ private String larIdCardPicFront;
+ /**
+ * 企业主税机关
+ */
+ private String enterTaxAuthority;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfo.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfo.java
new file mode 100644
index 0000000..7ce17dc
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfo.java
@@ -0,0 +1,53 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 18:24
+ */
+@Data
+public class GetPaymentInfo {
+ /**
+ * 支付流水号
+ */
+ private String payId;
+ /**
+ * 订单中心行程单ID
+ */
+ private String partnerPayId;
+ /**
+ * 接入模式:PC H5 APP
+ */
+ private String accessMode;
+ /**
+ * 用户标识
+ */
+ private String customerId;
+ /**
+ * 商户标识
+ */
+ private String partnerId;
+ /**
+ * 币种
+ */
+ private String currency;
+ /**
+ * 支付总金额
+ */
+ private String totalFee;
+ /**
+ * 支付工单状态
+ * 0 待支付
+ * 1 部分支付成功
+ * 2 支付成功
+ * 3 支付失败
+ */
+ private String status;
+ /**
+ * 商品信息
+ */
+ private List<GoodsInfoRequest> goodsInfo;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoDataRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoDataRequest.java
new file mode 100644
index 0000000..c7828b8
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoDataRequest.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 17:08
+ */
+@Data
+public class GetPaymentInfoDataRequest {
+ /**
+ * 支付单标识。传行程单ID
+ */
+ private String partnerPayId;
+ /**
+ * 商户号,由支付中心分配
+ */
+ private String partnerId;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoRequest.java
new file mode 100644
index 0000000..dfd62c0
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoRequest.java
@@ -0,0 +1,23 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 17:03
+ */
+@Data
+public class GetPaymentInfoRequest {
+ /**
+ * 默认传POST
+ */
+ private String requstType;
+ /**
+ * 默认传1
+ */
+ private Integer busType;
+ /**
+ * 业务参数
+ */
+ private GetPaymentInfoDataRequest data;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetStaffNodeRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetStaffNodeRequest.java
new file mode 100644
index 0000000..aab260b
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetStaffNodeRequest.java
@@ -0,0 +1,23 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/6/6 16:42
+ */
+@Data
+public class GetStaffNodeRequest {
+ /**
+ * 人员ID
+ */
+ private Long empId;
+ /**
+ * 操作人手机号
+ */
+ private String mobile;
+ /**
+ * 操作人企业ID
+ */
+ private String entercode;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetTravelItineraryListRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetTravelItineraryListRequest.java
new file mode 100644
index 0000000..fa978a7
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetTravelItineraryListRequest.java
@@ -0,0 +1,47 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 16:31
+ */
+@Data
+public class GetTravelItineraryListRequest {
+ /**
+ * 场景标识。交通场景传”TRAFFIC”
+ */
+ private String scene;
+ /**
+ * 租户ID。地区行政编码。黔南州传522700
+ */
+ private String partnerId;
+ /**
+ * 业务侧订单号
+ */
+ private String orderNo;
+ /**
+ * 乘客ID
+ */
+ private String customerId;
+ /**
+ * 司机ID
+ */
+ private String driverId;
+ /**
+ * 推广员ID
+ */
+ private String promoterId;
+ /**
+ * 服务商商户ID
+ */
+ private String supplierShopId;
+ /**
+ * 每页条数
+ */
+ private Integer pageSize;
+ /**
+ * 当前页码
+ */
+ private Integer pageNum;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfo.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfo.java
new file mode 100644
index 0000000..8776fcc
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfo.java
@@ -0,0 +1,35 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:35
+ */
+@Data
+public class GoodsInfo {
+ /**
+ * 商户号
+ */
+ private String merchantCode;
+ /**
+ * 付款商户号
+ */
+ private String custId;
+ /**
+ * 付款方名称
+ */
+ private String custName;
+ /**
+ *交通场景固定值
+ */
+ private String businessType;
+ /**
+ * 免密支付协议号
+ */
+ private String agreementNo;
+ /**
+ * 分账标识。0:不分账,1:分账
+ */
+ private String profitSharing;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfoRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfoRequest.java
new file mode 100644
index 0000000..b3d7f21
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfoRequest.java
@@ -0,0 +1,39 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:13
+ */
+@Data
+public class GoodsInfoRequest {
+ /**
+ * 企业ID(补偿场景新创建的订单支付传备用金企业ID)
+ */
+ private String id;
+ /**
+ * 子商户微信appId(证联预下单支付必填)
+ */
+ private String subAppId;
+ /**
+ * 付款人的openId(证联预下单支付必填)
+ */
+ private String subOpenId;
+ /**
+ * 分账标识。0:不分账,1:分账
+ */
+ private String profitSharing;
+ /**
+ * 地区标识,默认传520100
+ */
+ private String areaInfo;
+ /**
+ * 是否匿名。默认传0
+ */
+ private String payType;
+ /**
+ * 业务类型,默认传10408
+ */
+ private String businessType;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ListPage.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ListPage.java
new file mode 100644
index 0000000..eda232f
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ListPage.java
@@ -0,0 +1,27 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 16:45
+ */
+@Data
+public class ListPage<T> {
+ /**
+ * 总条数
+ */
+ private Integer total;
+ /**
+ * 当前页码
+ */
+ private Integer pageNum;
+ /**
+ * 每页条数
+ */
+ private Integer pageSize;
+ /**
+ * 数据列表
+ */
+ private T list;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/LoginWeChatXiao.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/LoginWeChatXiao.java
new file mode 100644
index 0000000..9670f97
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/LoginWeChatXiao.java
@@ -0,0 +1,39 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/6/16 23:50
+ */
+@Data
+public class LoginWeChatXiao {
+ /**
+ * token
+ */
+ private String token;
+ /**
+ * 用户UUID
+ */
+ private String userUUID;
+ /**
+ * 用户手机号
+ */
+ private String mobile;
+ /**
+ * 企业名称,无企业时为空
+ */
+ private String enterName;
+ /**
+ * 企业编码
+ */
+ private String enterCode;
+ /**
+ * 企业认证状态
+ */
+ private String enterAuth;
+ /**
+ * 是否是管理员,是:1;否:0
+ */
+ private String isAdmin;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyEnterpriseInfoRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyEnterpriseInfoRequest.java
new file mode 100644
index 0000000..8f73990
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyEnterpriseInfoRequest.java
@@ -0,0 +1,75 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/6/9 18:13
+ */
+@Data
+public class ModifyEnterpriseInfoRequest {
+ /**
+ * 企业编码
+ */
+ private String enter_code;
+ /**
+ * 操作人员手机号
+ */
+ private String operator;
+ /**
+ * 企业名称
+ */
+ private String enter_name;
+ /**
+ * 企业简称
+ */
+ private String enter_nickname;
+ /**
+ * 企业地址
+ */
+ private String enter_address;
+ /**
+ * 企业邮箱
+ */
+ private String enter_email;
+ /**
+ * 联系人姓名
+ */
+ private String contact_name;
+ /**
+ * 联系人手机号
+ */
+ private String contact_mobile;
+ /**
+ * 营业执照扫描件URL
+ */
+ private String operscanpic;
+ /**
+ * 营业期开始时间
+ */
+ private String businessTermStartTime;
+ /**
+ * 营业期结束时间
+ */
+ private String businessTermEndTime;
+ /**
+ * 区域编码
+ */
+ private String area;
+ /**
+ * 二级域名
+ */
+ private String second_realms;
+ /**
+ * 企业来源编码
+ */
+ private String source_code;
+ /**
+ * 店铺所属行业编码
+ */
+ private String trade_code;
+ /**
+ * 企业分类编码
+ */
+ private String type_code;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyPwdRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyPwdRequest.java
new file mode 100644
index 0000000..7a04de5
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyPwdRequest.java
@@ -0,0 +1,25 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data; /**
+ * @author zhibing.pu
+ * @Date 2025/6/10 10:42
+ */
+@Data
+public class ModifyPwdRequest {
+ /**
+ * 手机号码
+ */
+ private String mobile;
+ /**
+ * 旧密码
+ */
+ private String oldPwd;
+ /**
+ * 新密码
+ */
+ private String newPwd;
+ /**
+ * 验证码
+ */
+ private String code;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyTravelItineraryRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyTravelItineraryRequest.java
new file mode 100644
index 0000000..f7ff87c
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyTravelItineraryRequest.java
@@ -0,0 +1,39 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 16:31
+ */
+@Data
+public class ModifyTravelItineraryRequest {
+ /**
+ * 场景标识。交通场景传”TRAFFIC”
+ */
+ private String scene;
+ /**
+ * 租户ID。地区行政编码。黔南州传522700
+ */
+ private String partnerId;
+ /**
+ * 行程单ID
+ */
+ private String orderId;
+ /**
+ * 行程单状态。2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,9=已完成,10=已取消,11=改派中
+ */
+ private Integer status;
+ /**
+ * 司机ID
+ */
+ private String driverId;
+ /**
+ * 推广员ID
+ */
+ private String promoterId;
+ /**
+ * 服务商商户ID
+ */
+ private String supplierShopId;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderInfo.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderInfo.java
new file mode 100644
index 0000000..ef627a3
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderInfo.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 9:44
+ */
+@Data
+public class OrderInfo {
+ /**
+ * 订单id
+ */
+ private String orderId;
+ /**
+ * 订单状态
+ */
+ private String status;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderRefundNoticeRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderRefundNoticeRequest.java
new file mode 100644
index 0000000..b6aff86
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderRefundNoticeRequest.java
@@ -0,0 +1,49 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class OrderRefundNoticeRequest {
+ /**
+ * 场景标识
+ */
+ private String scene;
+ /**
+ * 订单中心订单号
+ */
+ private String orderId;
+ /**
+ * 场景应用标识。默认52270015
+ */
+ private String mhltiCenterAppId;
+ /**
+ * 退款工单标识
+ */
+ private String refundPayNum;
+ /**
+ * 退款类型 1:未发货退款 2:未破损拒收 3:破损拒收 4:部分退款 5:全部退款
+ */
+ private String refundType;
+ /**
+ * 申请退款金额
+ */
+ private BigDecimal applyRefundCharge;
+ /**
+ * 实际退款金额
+ */
+ private BigDecimal actualRefundCharge;
+ /**
+ * 退款人
+ */
+ private String refundPerson;
+ /**
+ * 退款账号
+ */
+ private String refundAccount;
+ /**
+ * 退款理由
+ */
+ private String remark;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfo.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfo.java
new file mode 100644
index 0000000..c990caa
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfo.java
@@ -0,0 +1,31 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:18
+ */
+@Data
+public class PayInfo {
+ /**
+ * 证联返回码000000:请求成功
+ */
+ private String retCode;
+ /**
+ * 证联返回信息
+ */
+ private String retMsg;
+ /**
+ * true、false
+ */
+ private String success;
+ /**
+ * 证联返回数据
+ */
+ private PayInfoData data;
+ /**
+ * 签名
+ */
+ private String sign;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfoData.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfoData.java
new file mode 100644
index 0000000..24cf5e5
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfoData.java
@@ -0,0 +1,42 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:18
+ */
+@Data
+public class PayInfoData {
+ /**
+ * 收银台链接
+ */
+ private String redirectUrl;
+ /**
+ * 支付流水号
+ */
+ private String payId;
+ /**
+ * 支付工单状态
+ * 0 待支付
+ * 1 部分支付成功
+ * 2 支付成功
+ * 3 支付失败
+ */
+ private String status;
+ /**
+ * 支付时间,格式:yyyy-MM-dd HH:mm:ss
+ */
+ private String payTime;
+ /**
+ * 扣款金额 单位分
+ */
+ private String payFee;
+ /**
+ * 支付信息
+ */
+ private List<PaymentInfo> paymentInfos;
+
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfo.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfo.java
new file mode 100644
index 0000000..7db70c7
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfo.java
@@ -0,0 +1,31 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:32
+ */
+@Data
+public class PaymentInfo {
+ /**
+ * 支付模式。此场景下默认传501212(测试和生产一致)
+ */
+ private String payModeId;
+ /**
+ * 支付交易明细标识
+ */
+ private String payItemId;
+ /**
+ * 支付金额
+ */
+ private String payFee;
+ /**
+ * 支付状态
+ */
+ private String status;
+ /**
+ * 支付时间
+ */
+ private String payTime;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfoRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfoRequest.java
new file mode 100644
index 0000000..5747bf2
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfoRequest.java
@@ -0,0 +1,27 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:32
+ */
+@Data
+public class PaymentInfoRequest {
+ /**
+ * 支付模式。此场景下默认传501212(测试和生产一致)
+ */
+ private String payModeId;
+ /**
+ * 支付金额
+ */
+ private String realFee;
+ /**
+ *
+ */
+ private String tradeFee;
+ /**
+ * 账户类型 501
+ */
+ private String accountTyp;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentOrderRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentOrderRequest.java
new file mode 100644
index 0000000..ee05019
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentOrderRequest.java
@@ -0,0 +1,53 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 18:29
+ */
+@Data
+public class PaymentOrderRequest {
+ /**
+ * 场景标识。交通场景传”TRAFFIC”
+ */
+ private String scene;
+ /**
+ * 场景应用标识。默认52270015
+ */
+ private String mhltiCenterAppId;
+ /**
+ * 支付流水明细
+ */
+ private String payItemId;
+ /**
+ * 支付明细json串
+ */
+ private String paymentInfo;
+ /**
+ * 订单ID
+ */
+ private String orderId;
+ /**
+ * 支付金额,单位元
+ */
+ private BigDecimal charge;
+ /**
+ * 支付时间
+ */
+ private String payTime;
+ /**
+ * 支付流水号
+ */
+ private String paymentSerialNumber;
+ /**
+ * 付款类型,4、线上支付
+ */
+ private Integer payType;
+ /**
+ * 付款方式,6:微信 7:支付宝 8:银行卡 9:银联二维码 10银联购物车收银台
+ */
+ private Integer payChannel;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallback.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallback.java
new file mode 100644
index 0000000..801e14d
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallback.java
@@ -0,0 +1,27 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 19:31
+ */
+@Data
+public class QYTPaymentCallback {
+ /**
+ * 加密字符串
+ */
+ private String sign;
+ /**
+ * 时间戳
+ */
+ private String timeStamp;
+ /**
+ * 请求调用唯一标识
+ */
+ private String messageId;
+ /**
+ * 支付结果信息
+ */
+ private QYTPaymentCallbackData data;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java
new file mode 100644
index 0000000..d817c71
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java
@@ -0,0 +1,45 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 19:34
+ */
+@Data
+public class QYTPaymentCallbackData {
+ /**
+ * 业务侧行程编号
+ */
+ private String orderNo;
+ /**
+ * 商户单标识。行程单ID
+ */
+ private String partnerPayId;
+ /**
+ * 支付中心商户号
+ */
+ private String partnerId;
+ /**
+ * 支付工单标识
+ */
+ private String payId;
+ /**
+ * 支付状态。1.未支付 2已支付
+ */
+ private String status;
+ /**
+ * 支付时间,格式:YYYY-MM-DD HH:mm:ss
+ */
+ private String payTime;
+ /**
+ * 扣款总金额 单位分
+ */
+ private String payFee;
+ /**
+ * 支付详细信息
+ */
+ private List<QYTPaymentInfoCallback> paymentInfos;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentInfoCallback.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentInfoCallback.java
new file mode 100644
index 0000000..19c03d3
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentInfoCallback.java
@@ -0,0 +1,35 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 19:37
+ */
+@Data
+public class QYTPaymentInfoCallback {
+ /**
+ * 支付交易明细标识
+ */
+ private String payItemId;
+ /**
+ * 支付模式
+ */
+ private String payModeId;
+ /**
+ * 支付金额,单位分
+ */
+ private String payFee;
+ /**
+ * 实付金额,单位分
+ */
+ private String realFee;
+ /**
+ * 支付状态。1.未支付 2已支付
+ */
+ private String status;
+ /**
+ * 支付时间,格式:YYYY-MM-DD HH:mm:ss
+ */
+ private String payTime;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTUserInfo.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTUserInfo.java
new file mode 100644
index 0000000..84939a7
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTUserInfo.java
@@ -0,0 +1,33 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * 用户信息
+ * @author zhibing.pu
+ * @Date 2025/6/6 15:11
+ */
+@Data
+public class QYTUserInfo {
+ /**
+ * 手机号码
+ */
+ private String mobile;
+ /**
+ * 用户昵称
+ */
+ private String nickname;
+ /**
+ * 小头像url
+ */
+ private String photoUrl;
+ /**
+ * 大头像url
+ */
+ private String photoUrlBig;
+ /**
+ * 企业名称
+ */
+ private String enterName;
+
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RefundInfoRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RefundInfoRequest.java
new file mode 100644
index 0000000..4b7ff36
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RefundInfoRequest.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+@Data
+public class RefundInfoRequest {
+ /**
+ * 支付交易明细标识
+ */
+ private String payItemId;
+ /**
+ * 支付工单标识
+ */
+ private String payId;
+ /**
+ * 交易金额,单位分
+ */
+ private String tradeFee;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RegisterViaMobile.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RegisterViaMobile.java
new file mode 100644
index 0000000..4702ff9
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RegisterViaMobile.java
@@ -0,0 +1,26 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data; /**
+ * @author zhibing.pu
+ * @Date 2025/6/10 11:34
+ */
+@Data
+public class RegisterViaMobile {
+ /**
+ * 响应码
+ * 0:成功;1:失败;2:手机号非法;3:验证码已过期;4:验证码错误;5、用户已存在;9:弱密码
+ */
+ private String status;
+ /**
+ * 响应描述
+ */
+ private String desc;
+ /**
+ * web登录密码
+ */
+ private String password;
+ /**
+ * 用户UUID
+ */
+ private String onconUUID;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RegisterViaMobileRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RegisterViaMobileRequest.java
new file mode 100644
index 0000000..57d6638
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RegisterViaMobileRequest.java
@@ -0,0 +1,46 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/6/6 16:59
+ */
+@Data
+public class RegisterViaMobileRequest {
+ /**
+ * 手机号码
+ */
+ private String mobile;
+ /**
+ * 客户端appid
+ */
+ private String appId;
+ /**
+ * 用户密码
+ */
+ private String password;
+ /**
+ * 短信验证码
+ */
+ private String verify_code;
+ /**
+ * 验证码类型
+ * 0:短信发送的验证码;1:一键获取手机号返回注册验证码;2、验证码验证成功后生成的Ticket
+ */
+ private String verify_code_type;
+ /**
+ * 加密类型
+ * 第三方系统可以填写空
+ */
+ private String encryptType;
+ /**
+ * 用户类型
+ * 0:普通用户
+ */
+ private String user_type;
+ /**
+ * 昵称
+ */
+ private String nickname;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ResetPwdRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ResetPwdRequest.java
new file mode 100644
index 0000000..7af096c
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ResetPwdRequest.java
@@ -0,0 +1,27 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/6/10 10:42
+ */
+@Data
+public class ResetPwdRequest {
+ /**
+ * 手机号码
+ */
+ private String mobile;
+ /**
+ * 密码
+ */
+ private String password;
+ /**
+ * 验证码
+ */
+ private String code;
+ /**
+ * 客户端appid
+ */
+ private String appid;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SaveStaffNode.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SaveStaffNode.java
new file mode 100644
index 0000000..13dfef3
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SaveStaffNode.java
@@ -0,0 +1,31 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @date 2025/6/14 14:10
+ */
+@Data
+public class SaveStaffNode {
+ /**
+ * 人员ID
+ */
+ private Long empId;
+ /**
+ * 员工名称
+ */
+ private String empName;
+ /**
+ * 员工昵称
+ */
+ private String empNickname;
+ /**
+ * 手机号
+ */
+ private String mphone;
+ /**
+ * 登录账号
+ */
+ private String loginNo;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SaveStaffNodeRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SaveStaffNodeRequest.java
new file mode 100644
index 0000000..2f7cc63
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SaveStaffNodeRequest.java
@@ -0,0 +1,63 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/6/6 16:22
+ */
+@Data
+public class SaveStaffNodeRequest {
+ /**
+ * 操作人手机号
+ */
+ private String mobile;
+ /**
+ * 操作人企业ID
+ */
+ private String entercode;
+ /**
+ * 人员名称
+ */
+ private String empName;
+ /**
+ * 人员显示名
+ */
+ private String empNickname;
+ /**
+ * 人员账号
+ */
+ private String loginNo;
+ /**
+ * 人员性别
+ */
+ private String empSex;
+ /**
+ * 人员手机号
+ */
+ private String mphone;
+ /**
+ * 人员邮箱
+ */
+ private String email;
+ /**
+ * 员工所属部分ID
+ */
+ private Integer deptId;
+ /**
+ * 员工职务ID
+ */
+ private Integer positionId;
+ /**
+ * 员工职务名称
+ */
+ private String positionName;
+ /**
+ * 高管模式 1 是 0 不是
+ */
+ private Integer superLevel;
+ /**
+ * 隐藏号码 1 是 0 不是
+ */
+ private Integer hideMobile;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SendSmsRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SendSmsRequest.java
new file mode 100644
index 0000000..cf44a4d
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SendSmsRequest.java
@@ -0,0 +1,33 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/2 15:41
+ */
+@Data
+public class SendSmsRequest {
+ /**
+ * 目标地址
+ */
+ private String destAddress;
+ /**
+ * 模板id
+ */
+ private String templateId;
+ /**
+ * 参数集合
+ */
+ private Map<String, String> templateParams;
+ /**
+ * 模板中占位符key
+ */
+ private String code;
+ /**
+ * 签名SPID
+ */
+ private String spId;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/StaffNodeInfo.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/StaffNodeInfo.java
new file mode 100644
index 0000000..84383c5
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/StaffNodeInfo.java
@@ -0,0 +1,91 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/6/6 16:44
+ */
+@Data
+public class StaffNodeInfo {
+ /**
+ * 人员ID
+ */
+ private Integer empId;
+ /**
+ * 主要号码
+ */
+ private String mainMphone;
+ /**
+ * 备注
+ */
+ private String remark;
+ /**
+ * 企业ID
+ */
+ private String enterNum;
+ /**
+ * 加密企业名称
+ */
+ private String empNameEncode;
+ /**
+ * 人员名称
+ */
+ private String empName;
+ /**
+ * 人员显示名
+ */
+ private String empNickname;
+ /**
+ * 人员账号
+ */
+ private String loginNo;
+ /**
+ * 人员性别(男\女)
+ */
+ private String empSex;
+ /**
+ * 人员手机号
+ */
+ private String mphone;
+ /**
+ * 人员邮箱加密
+ */
+ private String mainEmailEncode;
+ /**
+ * 所属企业id
+ */
+ private Long enterId;
+ /**
+ * 唯一编号
+ */
+ private String onconuuid;
+ /**
+ * 邮箱
+ */
+ private String email;
+ /**
+ * 员工所属部门ID多个部门英文; 分割
+ */
+ private Integer deptId;
+ /**
+ * 员工职位ID
+ */
+ private Long positionId;
+ /**
+ * 员工职位名称
+ */
+ private String positionName;
+ /**
+ * 高管模式 1 是 0 不是
+ */
+ private Integer superLevel;
+ /**
+ * 隐藏手机号 1 是 0 否
+ */
+ private Integer hideMobile;
+ /**
+ * 有效状态(0=否,1=是)
+ */
+ private String isValid;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCancelRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCancelRequest.java
new file mode 100644
index 0000000..9586188
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCancelRequest.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+@Data
+public class TradeOrderCancelRequest {
+ /**
+ * 场景标识
+ */
+ private String scene;
+ /**
+ * 订单中心订单号
+ */
+ private String orderId;
+ /**
+ * 场景应用标识。默认52270015
+ */
+ private String mhltiCenterAppId;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreate.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreate.java
new file mode 100644
index 0000000..2afc392
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreate.java
@@ -0,0 +1,19 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:17
+ */
+@Data
+public class TradeOrderCreate {
+ /**
+ * 订单信息
+ */
+ private OrderInfo orderInfo;
+ /**
+ * 支付接口调用信息
+ */
+ private PayInfo payInfo;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreateData.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreateData.java
new file mode 100644
index 0000000..1085a43
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreateData.java
@@ -0,0 +1,111 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:03
+ */
+@Data
+public class TradeOrderCreateData {
+ /**
+ * 司机id
+ */
+ private String treatShopId;
+ /**
+ * 应用场景标识
+ */
+ private String orderAppId;
+ /**
+ * 场景标识
+ */
+ private String scene;
+ /**
+ * 租户ID。地区行政编码。黔南州传522700
+ */
+ private String partnerId;
+ /**
+ * 超时时间
+ */
+ private String timeout;
+ /**
+ * 结算信息json串。其中结算分账标识(profitSharing:0:不分账,1:分账)、是否推广单标识(isPromote:1、是、0、否)必传。例:{"profitSharing":"0",”isPromote”:”0”}
+ */
+ private String field1;
+ /**
+ * 订单总金额,单位元
+ */
+ private BigDecimal charge;
+ /**
+ * 订单渠道。小程序传GRJYCXWXXCX,贵人家园传GRJY
+ */
+ private String channelSource;
+ /**
+ * 行程单ID
+ */
+ private String orderId;
+ /**
+ * 业务侧订单号
+ */
+ private String orderNo;
+ /**
+ * 下单人ID
+ */
+ private String customerId;
+ /**
+ * 推广人id
+ */
+ private String promoterId;
+ /**
+ * 服务商商户ID(serviceType为3时必传)
+ */
+ private String supplierShopId;
+ /**
+ * 场景服务类型。1、出租;2、网约车;3、城际;4、顺风车,5、代驾
+ */
+ private Integer serviceType;
+ /**
+ * 商户号,由支付中心分配。测试环境5400004
+ */
+ private String payPartnerId;
+ /**
+ * 商户单标识。订单中心行程单号,每次请求请保持唯一性。
+ */
+ private String partnerPayId;
+ /**
+ * 币种。RMB(人民币);USD(美元)
+ */
+ private String currency;
+ /**
+ * 交易总金额,单位分。
+ */
+ private String totalFee;
+ /**
+ * 前台通知URL地址。
+ */
+ private String retUrl;
+ /**
+ * 用户IP
+ */
+ private String clientIp;
+ /**
+ * Y代表要登录,跳到标准收银台
+ * N代表不需要登录,跳到无支付帐号收银台
+ */
+ private String needLoginFlag;
+ /**
+ * 支付单描述
+ */
+ private String orderDesc;
+ /**
+ * 接入模式:PC、H5、APP
+ */
+ private String accessMode;
+ /**
+ * 支付信息
+ */
+ private List<GoodsInfoRequest> goodsInfo;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderRefund.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderRefund.java
new file mode 100644
index 0000000..8f8cc58
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderRefund.java
@@ -0,0 +1,15 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+@Data
+public class TradeOrderRefund {
+ /**
+ * 退款总金额
+ */
+ private String refundTotalFee;
+ /**
+ * 退款标识
+ */
+ private String refundId;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderRefundRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderRefundRequest.java
new file mode 100644
index 0000000..f171ce6
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderRefundRequest.java
@@ -0,0 +1,42 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class TradeOrderRefundRequest {
+ /**
+ * 商户号,由支付中心分配。测试环境5400004,生产环境:5401007
+ */
+ private String payPartnerId;
+ /**
+ * 订单中心订单号
+ */
+ private String partnerPayId;
+ /**
+ * 支付工单标识
+ */
+ private String payId;
+ /**
+ * 退款总金额,单位为分
+ * 同一退款单多次发起退款请求时,退款金额必须一致
+ */
+ private String refundTotalFee;
+ /**
+ * 退款原因
+ */
+ private String remark;
+ /**
+ * 退款类型:
+ * RF 退款
+ * BR 部分退款(目前仅集团统一支付支持部分退款)
+ * CZ 冲正
+ */
+ private String refundType;
+ /**
+ * 支付退款单明细集合
+ */
+ private List<RefundInfoRequest> refundInfos;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOff1Data.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOff1Data.java
new file mode 100644
index 0000000..c35c201
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOff1Data.java
@@ -0,0 +1,62 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:23
+ */
+@Data
+public class TradePayOff1Data {
+ /**
+ * 商户号,由支付中心分配。测试环境5400004
+ */
+ private String partnerId;
+ /**
+ * 超时时间
+ */
+ private String timeout;
+ /**
+ * 场景标识。交通场景传”TRAFFIC”
+ */
+ private String scene;
+ /**
+ * 商户单标识。订单中心订单号,每次请求请保持唯一性。
+ */
+ private String partnerPayId;
+ /**
+ * 币种。RMB(人民币);USD(美元)
+ */
+ private String currency;
+ /**
+ * 交易总金额,单位分。
+ */
+ private String totalFee;
+ /**
+ * 前台通知URL地址。
+ */
+ private String retUrl;
+ /**
+ * 用户IP
+ */
+ private String clientIp;
+ /**
+ * Y代表要登录,跳到标准收银台
+ * N代表不需要登录,跳到无支付帐号收银台
+ */
+ private String needLoginFlag;
+ /**
+ * 支付单描述
+ */
+ private String orderDesc;
+ /**
+ * 接入模式:PC、H5、APP
+ */
+ private String accessMode;
+ /**
+ * 商品描述信息。Json数组
+ */
+ private List<GoodsInfoRequest> goodsInfo;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOffData.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOffData.java
new file mode 100644
index 0000000..a09e932
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOffData.java
@@ -0,0 +1,66 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:23
+ */
+@Data
+public class TradePayOffData {
+ /**
+ * 商户号,由支付中心分配。测试环境5400004
+ */
+ private String partnerId;
+ /**
+ * 超时时间
+ */
+ private String timeout;
+ /**
+ * 场景标识。交通场景传”TRAFFIC”
+ */
+ private String scene;
+ /**
+ * 商户单标识。订单中心订单号,每次请求请保持唯一性。
+ */
+ private String partnerPayId;
+ /**
+ * 币种。RMB(人民币);USD(美元)
+ */
+ private String currency;
+ /**
+ * 交易总金额,单位分。
+ */
+ private String totalFee;
+ /**
+ * 前台通知URL地址。
+ */
+ private String retUrl;
+ /**
+ * 用户IP
+ */
+ private String clientIp;
+ /**
+ * Y代表要登录,跳到标准收银台
+ * N代表不需要登录,跳到无支付帐号收银台
+ */
+ private String needLoginFlag;
+ /**
+ * 支付单描述
+ */
+ private String orderDesc;
+ /**
+ * 接入模式:PC、H5、APP
+ */
+ private String accessMode;
+ /**
+ * 支付信息
+ */
+ private List<PaymentInfoRequest> paymentInfos;
+ /**
+ * 商品描述信息。Json数组
+ */
+ private List<GoodsInfo> goodsInfo;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeRequest.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeRequest.java
new file mode 100644
index 0000000..b2ce9bb
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeRequest.java
@@ -0,0 +1,31 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 10:22
+ */
+@Data
+public class TradeRequest<T> {
+ /**
+ * 场景编号.交易中心提供。测试环境:1948289607125864448
+ */
+ private String sceneId;
+ /**
+ * 应用编号。中台应用appKey
+ */
+ private String appId;
+ /**
+ * 场景版本。交易中心提供。测试环境1
+ */
+ private Integer configVersion;
+ /**
+ * 请求ID。每次调用唯一标识
+ */
+ private String requestId;
+ /**
+ * 业务数据
+ */
+ private T data;
+}
diff --git a/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TravelItinerary.java b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TravelItinerary.java
new file mode 100644
index 0000000..27ffc26
--- /dev/null
+++ b/DispatchQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TravelItinerary.java
@@ -0,0 +1,64 @@
+package com.stylefeng.guns.modular.system.util.qianyuntong.model;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @Date 2025/7/24 16:48
+ */
+@Data
+public class TravelItinerary {
+ /**
+ * 场景标识。交通场景传”TRAFFIC”
+ */
+ private String scene;
+ /**
+ * 租户ID。地区行政编码。黔南州传522700
+ */
+ private String partnerId;
+ /**
+ * 业务侧订单号
+ */
+ private String orderNo;
+ /**
+ * 乘客ID
+ */
+ private String customerId;
+ /**
+ * 司机ID
+ */
+ private String driverId;
+ /**
+ * 订单号
+ */
+ private String orderId;
+ /**
+ * 推广员ID
+ */
+ private String promoterId;
+ /**
+ * 服务商商户ID
+ */
+ private String supplierShopId;
+ /**
+ * 场景服务类型。1、出租;2、网约车;3、城际;4、顺风车
+ */
+ private Integer serviceType;
+ /**
+ * 订单状态。1、待支付,11、已完结(可结算)
+ */
+ private Integer orderStatus;
+ /**
+ * 行程单状态。2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,9=已完成,10=已取消,11=改派中
+ */
+ private Integer status;
+ /**
+ * 创建时间
+ */
+ private String createTime;
+ /**
+ * 更新时间
+ */
+ private String updateTime;
+
+}
--
Gitblit v1.7.1