DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/server/impl/OrderLogisticsServiceImpl.java
@@ -485,7 +485,7 @@ orderLogistics.setStartServiceTime(date); orderLogistics.setBoardingTime(date); String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + uid); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + uid); if(ToolUtil.isNotEmpty(value)){ String[] split = value.split(","); Map<String, String> geocode1 = gdMapGeocodingUtil.geocode(split[0], split[1]); DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -408,7 +408,7 @@ if(order!=null){ orders.addAll(order); } String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(orderPrivateCar.getDriverId())); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(orderPrivateCar.getDriverId())); order = this.baseMapper.queryOrderInfo(orderId,5,value.split(",")[0],value.split(",")[1]); if(order!=null){ orders.addAll(order); @@ -423,7 +423,7 @@ if(order!=null){ orders.addAll(order); } String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(orderPrivateCar.getDriverId())); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(orderPrivateCar.getDriverId())); order = this.baseMapper.queryOrderInfo(orderPrivateCar.getPid(),5,value.split(",")[0],value.split(",")[1]); if(order!=null){ orders.addAll(order); @@ -457,7 +457,7 @@ orders.addAll(order); } OrderPrivateCar orderPrivateCar = this.baseMapper.selectById(orderId); String value = redisUtil.getValue("dache_DRIVER" + String.valueOf(orderPrivateCar.getDriverId())); String value = redisUtil.getValue("dache:DRIVER" + String.valueOf(orderPrivateCar.getDriverId())); order = this.baseMapper.queryOrderInfo(orderId,5,value.split(",")[0],value.split(",")[1]); if(order!=null){ orders.addAll(order); @@ -482,23 +482,23 @@ Map<String,Object> map = orderPrivateCarMapper.queryOrderInfo2(orderId, openCity.getId()); OrderPrivateCar orderPrivateCar = this.baseMapper.selectById(orderId); Integer canOperation=1; if(orderPrivateCar.getState()<5){ if(orderPrivateCar.getPid()==null) { List<Map<String, Object>> order = this.baseMapper.queryOrderInfo(orderId, 4, null, null); if (order != null && order.size()>0) { if(!order.get(0).get("orderId").equals(orderId)){ canOperation=0; } } }else { List<Map<String, Object>> order = this.baseMapper.queryOrderInfo(orderPrivateCar.getPid(),4,null,null); if(order!=null && order.size()>0){ if(!order.get(0).get("orderId").equals(orderId)){ canOperation=0; } } } } // if(orderPrivateCar.getState()<5){ // if(orderPrivateCar.getPid()==null) { // List<Map<String, Object>> order = this.baseMapper.queryOrderInfo(orderId, 4, null, null); // if (order != null && order.size()>0) { // if(!order.get(0).get("orderId").equals(orderId)){ // canOperation=0; // } // } // }else { // List<Map<String, Object>> order = this.baseMapper.queryOrderInfo(orderPrivateCar.getPid(),4,null,null); // if(order!=null && order.size()>0){ // if(!order.get(0).get("orderId").equals(orderId)){ // canOperation=0; // } // } // } // } map.put("canOperation",canOperation); System.out.println(map); String phone = map.get("phone").toString(); @@ -933,7 +933,7 @@ } Map<String, Object> map = new HashMap<>(); map.put("orderMoney", orderPrivateCar.getOrderMoney()==null?0:new BigDecimal(orderPrivateCar.getOrderMoney()).setScale(2,BigDecimal.ROUND_DOWN));//订单金额 map.put("orderMoney", orderPrivateCar.getOrderMoney()==null?0:orderPrivateCar.getOrderMoney());//订单金额 map.put("startMileage", orderPrivateCar.getStartMileage());//起步价 map.put("startMoney", orderPrivateCar.getStartMoney());//起步价 map.put("mileageKilometers", orderPrivateCar.getMileageKilometers());//里程费 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/DriverServiceMapper.xml
@@ -24,8 +24,8 @@ 1 as type, insertTime as orderTime, id as orderId, boardingAddress as startAddress, getoffAddress as endAddress, startAddress as startAddress, endAddress as endAddress, state, orderMoney from t_order_private_car @@ -41,8 +41,8 @@ 2 as type, insertTime as orderTime, id as orderId, boardingAddress as startAddress, getoffAddress as endAddress, startAddress as startAddress, endAddress as endAddress, state, orderMoney from t_order_taxi @@ -58,8 +58,8 @@ 3 as type, insertTime as orderTime, id as orderId, boardingAddress as startAddress, getoffAddress as endAddress, startAddress as startAddress, endAddress as endAddress, state, orderMoney from t_order_cross_city DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
@@ -156,7 +156,7 @@ List<Driver> drivers = driverMapper.queryIdleDriver(type, companyId); List<Driver> list = new ArrayList<>(); for(Driver driver : drivers){ String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(driver.getId())); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(driver.getId())); if(null != value){ Map<String, Double> distance1 = geodesyUtil.getDistance(lon + "," + lat, value); double d = Double.valueOf(distance1.get("WGS84")).doubleValue(); @@ -173,7 +173,7 @@ List<Driver> drivers = driverMapper.queryIdleDriver_(type, serverCarModelId, companyId); List<Driver> list = new ArrayList<>(); for(Driver driver : drivers){ String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(driver.getId())); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(driver.getId())); if(null != value){ Map<String, Double> distance1 = geodesyUtil.getDistance(lon + "," + lat, value); double d = Double.valueOf(distance1.get("WGS84")).doubleValue(); DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/NettyServiceImpl.java
@@ -108,7 +108,7 @@ } //查看是否有可接单的数据 String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(uid)); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(uid)); if(ToolUtil.isNotEmpty(value)){ String[] split = value.split(","); List<OrderStatusWarpper> list1 = this.searchOrder(split[0], split[1], uid); DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushMinistryOfTransportUtil.java
@@ -138,7 +138,7 @@ OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId); Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); Car car = carService.selectById(orderPrivateCar.getCarId()); String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + orderPrivateCar.getDriverId()); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + orderPrivateCar.getDriverId()); JSONObject jsonObject = new JSONObject(); jsonObject.put("Address", 450204);//发起地行政区划代码 jsonObject.put("OrderId", orderPrivateCar.getOrderNum());//订单编号 @@ -170,7 +170,7 @@ public void operateLogin(Integer driverId){ Driver driver = driverService.selectById(driverId); Car car = carService.selectById(driver.getCarId()); String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + driverId); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + driverId); if(ToolUtil.isNotEmpty(value)){ JSONObject jsonObject = new JSONObject(); jsonObject.put("LicenseId", driver.getDriveCard());//机动车驾驶证号 @@ -201,7 +201,7 @@ public void operateLogout(Integer driverId){ Driver driver = driverService.selectById(driverId); Car car = carService.selectById(driver.getCarId()); String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + driverId); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + driverId); if(ToolUtil.isNotEmpty(value)){ JSONObject jsonObject = new JSONObject(); jsonObject.put("LicenseId", driver.getDriveCard());//机动车驾驶证号 DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java
@@ -368,7 +368,7 @@ return; } //计算预计距离和剩余时间 String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(driverId)); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(driverId)); if(null == value || "".equals(value)){ return; } DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
@@ -190,7 +190,7 @@ tradePayOff1Data.setNeedLoginFlag("N"); tradePayOff1Data.setAccessMode("APP"); tradePayOff1Data.getGoodsInfo().forEach(goodsInfoRequest -> { goodsInfoRequest.setId("981100006005901"); goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901"); goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db"); goodsInfoRequest.setAreaInfo("520100"); @@ -396,7 +396,7 @@ tradeOrderCreateData.setNeedLoginFlag("N"); tradeOrderCreateData.setAccessMode("APP"); tradeOrderCreateData.getGoodsInfo().forEach(goodsInfoRequest -> { goodsInfoRequest.setId("981100006005901"); goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901"); goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db"); goodsInfoRequest.setAreaInfo("520100"); goodsInfoRequest.setPayType("0"); DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
@@ -410,7 +410,7 @@ orderTaxi.setStartServiceTime(date); orderTaxi.setBoardingTime(date); String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + uid); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + uid); if (ToolUtil.isNotEmpty(value)) { String[] split = value.split(","); Map<String, String> geocode1 = gdMapGeocodingUtil.geocode(split[0], split[1]); DriverQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java
@@ -1,47 +1,26 @@ //package com.stylefeng.guns; // //import com.stylefeng.guns.modular.system.model.Driver; //import com.stylefeng.guns.modular.system.service.IDriverService; //import com.stylefeng.guns.modular.system.util.zhenglian.TokenUtil; //import com.stylefeng.guns.modular.system.util.zhenglian.model.TokenRequest; //import com.stylefeng.guns.modular.system.util.zhenglian.model.TradeTerminalInfo; //import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService; //import org.junit.Test; //import org.junit.runner.RunWith; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.boot.test.context.SpringBootTest; //import org.springframework.data.mongodb.core.MongoTemplate; //import org.springframework.test.context.junit4.SpringRunner; // //@RunWith(SpringRunner.class) //@SpringBootTest //public class GunsApplicationTest { // // @Autowired // private MongoTemplate mongoTemplate; // @Autowired // private IDriverService driverService; // @Autowired // private IOrderPrivateCarService orderPrivateCarService; // // // @Test // public void test() { // // Driver driver = driverService.selectById(14); // TokenRequest tokenRequest = new TokenRequest(); // tokenRequest.setAppUserId(driver.getEmpId().toString()); // tokenRequest.setUserName(driver.getName()); // tokenRequest.setCertNo(driver.getIdCard()); // tokenRequest.setPhone(driver.getPhone()); // TradeTerminalInfo tradeTerminalInfo = new TradeTerminalInfo(); // tradeTerminalInfo.setIp("127.0.0.1"); // tradeTerminalInfo.setTerminal("1"); // tradeTerminalInfo.setMac("111-111-111-111"); // tokenRequest.setTradeTerminalInfo(tradeTerminalInfo); // tokenRequest.setType("04"); // try { // String token = TokenUtil.getToken(tokenRequest); // System.err.println(token); // } catch (Exception e) { // throw new RuntimeException(e); // } // } // try { // orderPrivateCarService.queryMoneyInfo(369); // } catch (Exception e) { // throw new RuntimeException(e); // } // } //} ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/config/QYTConfig.java
@@ -1,32 +1,24 @@ //package com.stylefeng.guns.config; // //import com.stylefeng.guns.modular.system.util.PushURL; //import lombok.Data; //import org.springframework.boot.context.properties.ConfigurationProperties; //import org.springframework.context.annotation.Configuration; // //import javax.annotation.PostConstruct; // ///** // * @author zhibing.pu // * @Date 2025/8/12 13:58 // */ //@Data //@Configuration //@ConfigurationProperties(prefix = "qyt") //public class QYTConfig { // /** // * 出行网关接口地址 // */ // private String chuxingUrl; // /** // * 代驾网关接口地址 // */ // private String daijiaUrl; // // // @PostConstruct // public void init() { // PushURL.setQytConfig(this); // } //} package com.stylefeng.guns.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; /** * @author zhibing.pu * @Date 2025/8/12 13:58 */ @Data @Configuration @ConfigurationProperties(prefix = "qyt") public class QYTConfig { /** * 出行网关接口地址 */ private String chuxingUrl; /** * 代驾网关接口地址 */ private String daijiaUrl; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/HomeController.java
@@ -399,7 +399,7 @@ System.out.println(tDrivers.toString()); for (TDriver tDriver : tDrivers) { Map<String, Object> d = new HashMap<>(); String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + tDriver.getId()); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + tDriver.getId()); System.out.println(value); if (ToolUtil.isEmpty(value)) { continue; ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushURL.java
@@ -1,11 +1,11 @@ package com.stylefeng.guns.modular.system.util; //import com.stylefeng.guns.config.QYTConfig; import com.stylefeng.guns.config.QYTConfig; public class PushURL { // public static QYTConfig qytConfig; public static String zull_user_url = "http://10.31.182.11:8010/chuxing"; public static QYTConfig qytConfig = SpringContextsUtil.getBean(QYTConfig.class); public static String zull_user_url = qytConfig.getChuxingUrl(); public static String order_push_url = zull_user_url + "/driver-server/base/order/pushOrderState"; public static String driver_auth_url = zull_user_url + "/driver-server/base/driver/sendsms"; public static String withdraw_auth_url = zull_user_url + "/driver-server/base/withdrawal/withdrawalAudit"; @@ -16,8 +16,4 @@ public static String ministry_of_transport_data = "http://120.77.11.218:8868/ministryOfTransport"; public static String ministry_of_transport_ftp = "http://120.77.11.218:8868/ftp"; // public static void setQytConfig(QYTConfig qytConfig) { // PushURL.qytConfig = qytConfig; // } } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
New file @@ -0,0 +1,682 @@ 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 * @return */ public static PayInfo tradePayOff1(TradePayOff1Data tradePayOff1Data) { 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 -> { goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901"); goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db"); 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) { 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 -> { goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901"); goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db"); 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("B00000905"); goodsInfo1.setCustId("CB0000004686"); goodsInfo1.setCustName("证联消费平台交易客户"); 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("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); request.setIsCompensate(1); //请求路径 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; } } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateOrderRequest.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/CreateTravelItineraryRequest.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfo.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoDataRequest.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfoRequest.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetTravelItineraryListRequest.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfo.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfoRequest.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ListPage.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/ModifyTravelItineraryRequest.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderInfo.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfo.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PayInfoData.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfo.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfoRequest.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentOrderRequest.java
New file @@ -0,0 +1,57 @@ 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; /** * 是否补偿单。1、是,0、否 */ private Integer isCompensate; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallback.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentInfoCallback.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SendSmsRequest.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreate.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreateData.java
New file @@ -0,0 +1,99 @@ 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; /** * 商户号,由支付中心分配。测试环境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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOff1Data.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOffData.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeRequest.java
New file @@ -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; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TravelItinerary.java
New file @@ -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; } MessagePushTravel/src/main/java/com/sinata/push/config/QYTConfig.java
@@ -1,33 +1,33 @@ //package com.sinata.push.config; // //import com.sinata.push.util.echo.NettyServerController; //import lombok.Data; //import org.springframework.boot.context.properties.ConfigurationProperties; //import org.springframework.context.annotation.Configuration; //import org.springframework.stereotype.Component; // //import javax.annotation.PostConstruct; // ///** // * @author zhibing.pu // * @Date 2025/8/12 13:58 // */ //@Data //@Configuration //@ConfigurationProperties(prefix = "qyt") //public class QYTConfig { // /** // * 出行网关接口地址 // */ // private String chuxingUrl; // /** // * 代驾网关接口地址 // */ // private String daijiaurl; // // // @PostConstruct // public void init() { // NettyServerController.setQytConfig(this); // } //} package com.sinata.push.config; import com.sinata.push.util.echo.NettyServerController; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; /** * @author zhibing.pu * @Date 2025/8/12 13:58 */ @Data @Configuration @ConfigurationProperties(prefix = "qyt") public class QYTConfig { /** * 出行网关接口地址 */ private String chuxingUrl; /** * 代驾网关接口地址 */ private String daijiaurl; @PostConstruct public void init() { NettyServerController.setQytConfig(this); } } MessagePushTravel/src/main/java/com/sinata/push/util/echo/NettyServerController.java
@@ -5,7 +5,7 @@ import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; //import com.sinata.push.config.QYTConfig; import com.sinata.push.config.QYTConfig; import com.sinata.push.util.*; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -35,7 +35,7 @@ public static Hashtable<String,String> table; // public static QYTConfig qytConfig; public static QYTConfig qytConfig; private RedisUtil redisUtil = SpringUtil.getObject(RedisUtil.class); @@ -51,9 +51,9 @@ } // public static void setQytConfig(QYTConfig qytConfig) { // NettyServerController.qytConfig = qytConfig; // } public static void setQytConfig(QYTConfig qytConfig) { NettyServerController.qytConfig = qytConfig; } public static boolean isdebug = false; public static int i = 0; @@ -207,7 +207,7 @@ params.put("lat", String.valueOf(lat)); params.put("directionAngle", String.valueOf(computeAzimuth)); params.put("altitude", String.valueOf(altitude)); HttpRequest post = HttpUtil.createPost("http://10.31.182.11:8010/chuxing/driver-server/base/savePosition"); HttpRequest post = HttpUtil.createPost(qytConfig.getChuxingUrl() + "/driver-server/base/savePosition"); post.contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE); post.form(params); HttpResponse execute = post.execute(); @@ -234,7 +234,7 @@ params.put("lat", String.valueOf(lat)); params.put("directionAngle", String.valueOf(computeAzimuth)); params.put("altitude", String.valueOf(altitude)); HttpRequest post = HttpUtil.createPost("http://10.31.182.11:8010/daijia/driver-server/base/driver/addDriverPosition"); HttpRequest post = HttpUtil.createPost(qytConfig.getDaijiaurl() + "/driver-server/base/driver/addDriverPosition"); post.contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE); post.form(params); HttpResponse execute = post.execute(); @@ -247,7 +247,7 @@ } } redisUtil.setStrValue(business + "_DRIVER" + driverId, lon + "," + lat, 30);//实时位置存入redis中 redisUtil.setStrValue(business + ":DRIVER" + driverId, lon + "," + lat, 30);//实时位置存入redis中 }else{ this.sendMsgToClient(ctx, "__error__" + msg.toString()); } UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
@@ -158,7 +158,7 @@ List<Driver> drivers = driverService.selectList(new EntityWrapper<Driver>().in("id", driverIds) .eq("authState", 2).eq("state", 2)); collect = drivers.stream().map(driver -> { String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(driver.getId())); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(driver.getId())); if(ToolUtil.isNotEmpty(value)){ Optional<DriverPosition> driverPosition = driverPositions.stream().filter(position -> position.getDriverId().equals(driver.getId())).findFirst(); Map<String, Object> map = new HashMap<>(); UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
@@ -526,7 +526,7 @@ } orderList = orderPrivateCarService.queryOrderInfo2(orderId, 6, null, null); if (orderInfoWarpper.getState() > 1 && orderInfoWarpper.getDriverId() != 0) { String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(orderInfoWarpper.getDriverId())); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(orderInfoWarpper.getDriverId())); if (value == null || value.equals("")) { if (orderList.isEmpty()) { orderList = orderPrivateCarService.queryOrderInfo2(orderId, 5, "0", "0"); UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
@@ -2119,7 +2119,7 @@ OrderCrossCity orderCrossCity = this.selectById(orderId); if(null != orderCrossCity){ //计算预计距离和剩余时间 String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(orderCrossCity.getDriverId())); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(orderCrossCity.getDriverId())); if (null == value || "".equals(value)) { System.err.println("司机没有上传位置信息"); UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/dao/mapping/OrderPrivateCarMapper.xml
@@ -391,7 +391,8 @@ a.abnormalRemark, a.abnormalIntro, a.abnormalImg, a.companyId a.companyId, IF(a.abnormalIntro is not null, 1, 0) as appealButton from t_order_private_car a left join t_driver b on (a.driverId = b.id) left join t_car c on (a.carId = c.id) UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -398,7 +398,7 @@ JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent()); //判断时间 if (travelTime.getTime() >= order.getTravelTime().getTime() - jsonObject.getInteger("num5") * 60000L && travelTime.getTime() <= order.getTravelTime().getTime() + jsonObject.getInteger("num6") * 60000L) { String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(order.getDriverId())); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(order.getDriverId())); // Double dis1 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1).get("distance").toString()); // Double dis2 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat(), 1).get("distance").toString()); @@ -668,7 +668,7 @@ JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent()); //判断时间 if (travelTime.getTime() >= order.getTravelTime().getTime() - jsonObject.getInteger("num5") * 60000L && travelTime.getTime() <= order.getTravelTime().getTime() + jsonObject.getInteger("num6") * 60000L) { String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(order.getDriverId())); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(order.getDriverId())); // Double dis1 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1).get("distance").toString()); // Double dis2 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat(), 1).get("distance").toString()); @@ -869,7 +869,7 @@ JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent()); //判断时间 if (orderPrivateCar.getTravelTime().getTime() >= order.getTravelTime().getTime() - jsonObject.getInteger("num5") * 60000L && orderPrivateCar.getTravelTime().getTime() <= order.getTravelTime().getTime() + jsonObject.getInteger("num6") * 60000L) { String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(order.getDriverId())); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(order.getDriverId())); // Double dis1 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1).get("distance").toString()); // Double dis2 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat(), 1).get("distance").toString()); // TODO: 2023/11/4 已改成计算直线距离 @@ -1279,14 +1279,10 @@ if(Integer.valueOf(String.valueOf(map.get("state"))) == 11){ map.put("state", map.get("oldState")); } if(Integer.valueOf(String.valueOf(map.get("state"))) ==7 && (map.get("responsibilityType")==null || Integer.valueOf(String.valueOf(map.get("responsibilityType")))<4)){ map.put("appealButton", 1); } if(map.get("abnormalIntro")!=null){ map.put("appealStatus", 1); } if(Integer.valueOf(String.valueOf(map.get("state"))) != 8 && Integer.valueOf(String.valueOf(map.get("state"))) != 9){ map.put("redPacketMoney", null); map.put("couponMoney", null); @@ -1311,7 +1307,7 @@ return orderTaxiService.queryOrderServer(orderId, uid); } //计算预计距离和剩余时间 String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(orderPrivateCar.getDriverId())); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(orderPrivateCar.getDriverId())); if(null == value || "".equals(value)){ System.err.println("司机没有上传位置信息"); @@ -2881,8 +2877,6 @@ break; } if (i == querys.size() + 15) { orderPrivateCar1.setState(10); orderPrivateCarMapper.updateById(orderPrivateCar1); pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1); orderIds.remove(orderPrivateCar.getId()); } UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
@@ -54,7 +54,7 @@ List<Driver> drivers = driverMapper.queryIdleDriver(type, companyId); List<Driver> list = new ArrayList<>(); for(Driver driver : drivers){ String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(driver.getId())); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(driver.getId())); if(null != value){ Map<String, Double> distance1 = geodesyUtil.getDistance(lon + "," + lat, value); double d = Double.valueOf(distance1.get("WGS84")).doubleValue(); @@ -83,7 +83,7 @@ List<Driver> drivers = driverMapper.queryIdleDriver_(type, serverCarModelId, companyId); List<Driver> list = new ArrayList<>(); for(Driver driver : drivers){ String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(driver.getId())); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(driver.getId())); if(null != value){ Map<String, Double> distance1 = geodesyUtil.getDistance(lon + "," + lat, value); double d = Double.valueOf(distance1.get("WGS84")).doubleValue(); @@ -100,7 +100,7 @@ List<Driver> drivers = driverMapper.queryIdleDriver1(type, companyId); List<Driver> list = new ArrayList<>(); for(Driver driver : drivers){ String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(driver.getId())); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(driver.getId())); if(null != value){ Map<String, Double> distance1 = geodesyUtil.getDistance(lon + "," + lat, value); double d = Double.valueOf(distance1.get("WGS84")).doubleValue(); UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EmailUtil.java
@@ -45,11 +45,13 @@ // 设置邮件主题和内容 helper.setSubject(subject); helper.setText(text); // 使用显示文件名而非原文件名 helper.addAttachment( MimeUtility.encodeWord(displayFileName), // 编码避免中文乱码 attachment ); if(null != attachment){ // 使用显示文件名而非原文件名 helper.addAttachment( MimeUtility.encodeWord(displayFileName), // 编码避免中文乱码 attachment ); } // 发送邮件 UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/PushUtil.java
@@ -248,7 +248,7 @@ } //计算预计距离和剩余时间 String value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + String.valueOf(driverId)); String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(driverId)); if (null == value || "".equals(value)) { return; } UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
@@ -191,7 +191,7 @@ tradePayOff1Data.setNeedLoginFlag("N"); tradePayOff1Data.setAccessMode("APP"); tradePayOff1Data.getGoodsInfo().forEach(goodsInfoRequest -> { goodsInfoRequest.setId("981100006005901"); goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901"); goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db"); goodsInfoRequest.setAreaInfo("520100"); @@ -397,7 +397,7 @@ tradeOrderCreateData.setNeedLoginFlag("N"); tradeOrderCreateData.setAccessMode("APP"); tradeOrderCreateData.getGoodsInfo().forEach(goodsInfoRequest -> { goodsInfoRequest.setId("981100006005901"); goodsInfoRequest.setId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "9811000039358999" : "981100006005901"); goodsInfoRequest.setSubAppId("wxcc3c9058e2b294db"); goodsInfoRequest.setAreaInfo("520100"); goodsInfoRequest.setPayType("0"); UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/dao/mapping/OrderTaxiMapper.xml
@@ -264,7 +264,8 @@ a.abnormalRemark, a.abnormalIntro, a.abnormalImg, a.companyId a.companyId, IF(a.abnormalIntro is not null, 1, 0) as appealButton from t_order_taxi a left join t_driver b on (a.driverId = b.id) left join t_car c on (a.carId = c.id) UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/taxi/service/impl/OrderTaxiServiceImpl.java
@@ -1896,10 +1896,7 @@ if (Integer.valueOf(String.valueOf(map.get("state"))) == 11) { map.put("state", map.get("oldState")); } if (Integer.valueOf(String.valueOf(map.get("state"))) == 7 && (map.get("responsibilityType") == null || Integer.valueOf(String.valueOf(map.get("responsibilityType"))) < 4)) { map.put("appealButton", 1); } if (map.get("abnormalIntro") != null) { map.put("appealStatus", 1); } @@ -1962,7 +1959,7 @@ //计算预计距离和剩余时间 String value = null; if (null != orderTaxi.getDriverId()) { value = (String) redisTemplate.opsForValue().get("dache_DRIVER" + orderTaxi.getDriverId()); value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + orderTaxi.getDriverId()); if (null == value || "".equals(value)) { System.err.println("司机没有上传位置信息"); UserQYTTravel/guns-admin/src/main/resources/application-dev.yml
@@ -125,7 +125,7 @@ spring: mail: host: smtp.163.com port: 993 port: 465 username: QYTJT001@163.com password: GPaYdKdsQphDGRJd # 这里是授权码,不是邮箱登录密码 properties: UserQYTTravel/guns-admin/src/main/resources/application-prod.yml
@@ -121,7 +121,7 @@ spring: mail: host: smtp.163.com port: 993 port: 465 username: QYTJT001@163.com password: GPaYdKdsQphDGRJd # 这里是授权码,不是邮箱登录密码 properties: UserQYTTravel/guns-admin/src/main/resources/application-test.yml
@@ -123,7 +123,7 @@ spring: mail: host: smtp.163.com port: 993 port: 465 username: QYTJT001@163.com password: GPaYdKdsQphDGRJd # 这里是授权码,不是邮箱登录密码 properties: UserQYTTravel/guns-admin/src/test/java/com/stylefeng/guns/GunsApplicationTest.java
@@ -1,59 +1,69 @@ //package com.stylefeng.guns; // //import com.alibaba.fastjson.JSON; //import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar; //import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService; //import com.stylefeng.guns.modular.system.model.Company; //import com.stylefeng.guns.modular.system.model.Driver; //import com.stylefeng.guns.modular.system.model.UserInfo; //import com.stylefeng.guns.modular.system.service.ICompanyService; //import com.stylefeng.guns.modular.system.service.IDriverService; //import com.stylefeng.guns.modular.system.service.IUserInfoService; //import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil; //import com.stylefeng.guns.modular.system.util.qianyuntong.UserUtil; //import com.stylefeng.guns.modular.system.util.qianyuntong.model.*; //import com.stylefeng.guns.modular.taxi.service.IPaymentRecordService; //import lombok.extern.slf4j.Slf4j; //import org.junit.Test; //import org.junit.runner.RunWith; //import org.springframework.beans.BeanUtils; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.boot.test.context.SpringBootTest; //import org.springframework.test.context.junit4.SpringRunner; // //import java.math.BigDecimal; //import java.util.List; // ///** // * SpringBoot方式启动类 // * // * @author stylefeng // * @Date 2017/5/21 12:06 // */ //@Slf4j //@RunWith(SpringRunner.class) //@SpringBootTest //public class GunsApplicationTest { // // @Autowired // private IOrderPrivateCarService orderPrivateCarService; // // @Autowired // private IUserInfoService userInfoService; // // @Autowired // private IDriverService driverService; // @Autowired // private ICompanyService companyService; // @Autowired // private IPaymentRecordService paymentRecordService; // // // // // @Test // public void test(){ // String onconUUIDByMobile = UserUtil.getOnconUUIDByMobile("15828353127"); // System.err.println(onconUUIDByMobile); // } //} package com.stylefeng.guns; import com.alibaba.fastjson.JSON; import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar; import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService; import com.stylefeng.guns.modular.system.model.Company; import com.stylefeng.guns.modular.system.model.Driver; import com.stylefeng.guns.modular.system.model.UserInfo; import com.stylefeng.guns.modular.system.service.ICompanyService; import com.stylefeng.guns.modular.system.service.IDriverService; import com.stylefeng.guns.modular.system.service.IUserInfoService; import com.stylefeng.guns.modular.system.util.EmailUtil; import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil; import com.stylefeng.guns.modular.system.util.qianyuntong.UserUtil; import com.stylefeng.guns.modular.system.util.qianyuntong.model.*; import com.stylefeng.guns.modular.taxi.service.IPaymentRecordService; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import javax.mail.MessagingException; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.util.List; /** * SpringBoot方式启动类 * * @author stylefeng * @Date 2017/5/21 12:06 */ @Slf4j @RunWith(SpringRunner.class) @SpringBootTest public class GunsApplicationTest { @Autowired private IOrderPrivateCarService orderPrivateCarService; @Autowired private IUserInfoService userInfoService; @Autowired private IDriverService driverService; @Autowired private ICompanyService companyService; @Autowired private IPaymentRecordService paymentRecordService; @Autowired private EmailUtil emailUtil; @Test public void test(){ try { emailUtil.sendEmailWithAttachment("393733352@qq.com", "贵人家园出行-行程单", "请查收您的行程单", null, "贵人家园出行-行程单"); } catch (MessagingException e) { throw new RuntimeException(e); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } } ZuulQYTTravel/src/main/java/com/sinata/zuul/ZuulApplication.java
@@ -1,27 +1,17 @@ package com.sinata.zuul; import com.spring4all.swagger.EnableSwagger2Doc; import org.apache.http.client.HttpClient; import org.apache.http.config.SocketConfig; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Primary; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import springfox.documentation.swagger.web.SwaggerResource; import springfox.documentation.swagger.web.SwaggerResourcesProvider; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -36,24 +26,6 @@ SpringApplication.run(ZuulApplication.class, args); } @Bean //SpringCloud内部服务质检使用服务名调用 @LoadBalanced public RestTemplate internalRestTemplate() { PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(); connectionManager.setDefaultSocketConfig(SocketConfig.custom().setTcpNoDelay(true).build()); connectionManager.setDefaultMaxPerRoute(100);//最大并发连接 connectionManager.setMaxTotal(200); // 总的最大连接数 HttpClient httpClient = HttpClientBuilder.create().setConnectionManager(connectionManager).build(); HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); httpRequestFactory.setConnectionRequestTimeout(30 * 1000); httpRequestFactory.setConnectTimeout(30 * 3000); httpRequestFactory.setReadTimeout(30 * 3000); RestTemplate restTemplate = new RestTemplate(httpRequestFactory); restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); return restTemplate; } /** * 配置Swagger