UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/OrderController.java
@@ -17,6 +17,7 @@ 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.model.QYTPaymentCallback; import com.stylefeng.guns.modular.system.warpper.*; import com.stylefeng.guns.modular.taxi.model.OrderTaxi; import com.stylefeng.guns.modular.taxi.model.PaymentRecord; @@ -28,13 +29,11 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @@ -47,7 +46,7 @@ * 订单控制器(综合) */ @Api //@CrossOrigin @Slf4j @RestController @RequestMapping("") public class OrderController { @@ -1988,29 +1987,46 @@ e.printStackTrace(); } } /** * 管理后台推单 * * @param orderType * @return */ @ResponseBody @PostMapping("/base/taxi/pushOrder") public ResultUtil pushOrder(Integer orderId, Integer orderType){ public ResultUtil pushOrder(Integer orderId, Integer orderType) { try { switch (orderType){ switch (orderType) { case 1: return orderPrivateCarService.pushOrderPrivateCar(orderId); case 2: return orderTaxiService.pushOrderTaxi(orderId); } return ResultUtil.success(); }catch (Exception e){ } catch (Exception e) { e.printStackTrace(); return ResultUtil.runErr(); } } /** * 黔云通支付回调通知 * * @param qytPaymentCallback * @return */ @ResponseBody @PostMapping("/base/order/qytPaymentCallback") public String qytPaymentCallback(@RequestBody QYTPaymentCallback qytPaymentCallback) { log.info("【黔云通支付回调通知】请求参数:" + JSON.toJSONString(qytPaymentCallback)); if (null == qytPaymentCallback) { return "error"; } return "success"; } } UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EmployeeUtil.java
@@ -5,6 +5,7 @@ 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.qianyuntong.model.*; import lombok.extern.slf4j.Slf4j; @@ -16,19 +17,39 @@ /** * 企业员工工具类 * * @author zhibing.pu * @Date 2025/6/6 16:17 */ @Slf4j public class EmployeeUtil { 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 SaveStaffNode saveStaffNode(SaveStaffNodeRequest request){ public static ResultUtil<SaveStaffNode> saveStaffNode(SaveStaffNodeRequest request) { //请求路径 String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/saveStaffNode"; //私钥文件 @@ -56,16 +77,19 @@ String retCode = jsonObject.getString("retCode"); if (!"0".equals(retCode)) { log.error("【企业增加员工】请求失败:" + result); throw new RuntimeException("【企业增加员工】请求失败:" + 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()); throw new RuntimeException("【企业增加员工】失败:" + object.toJSONString()); return ResultUtil.error("【企业增加员工】失败:" + object.getString("desc")); } SaveStaffNode saveStaffNode = jsonObject.getObject("object", SaveStaffNode.class); return saveStaffNode; SaveStaffNode saveStaffNode = object.getObject("data", SaveStaffNode.class); return ResultUtil.success(saveStaffNode); } UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EnterpriseUtil.java
@@ -24,6 +24,20 @@ public class EnterpriseUtil { 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); } /** * 根据社会信用代码判断企业是否已存在 * UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
New file @@ -0,0 +1,471 @@ 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.UUIDUtil; 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/7/24 9:34 */ @Slf4j public class OrderUtil { public static void main(String[] args) { CreateTravelItineraryRequest request = new CreateTravelItineraryRequest(); request.setScene(QianYunTongProperties.sceneId); request.setPartnerId("522700"); request.setOrderNo("123456"); request.setCustomerId("11448156"); request.setDriverId("11448158"); request.setSupplierShopId("981100006005951"); request.setServiceType(1); String travelItinerary = createTravelItinerary(request); System.err.println(travelItinerary); // CreateOrderRequest createOrderRequest = new CreateOrderRequest(); // createOrderRequest.setTreatShopId(""); // createOrderRequest.setOrderAppId("52270015"); // createOrderRequest.setScene("TRAFFIC"); // createOrderRequest.setPartnerId("522700"); // createOrderRequest.setField1("{\"profitSharing\":\"0\",\"isPromote\":\"0\"}"); // createOrderRequest.setCharge(new BigDecimal("0.01")); // createOrderRequest.setChannelSource("GRJYCXWXXCX"); // createOrderRequest.setOrderId(""); // createOrderRequest.setOrderNo(""); // createOrderRequest.setCustomerId(""); // OrderInfo orderInfo = tradeOrderCreate(createOrderRequest); } /** * 订单创建 * @param createOrderRequest * @return */ public static OrderInfo tradeOrderCreate(CreateOrderRequest createOrderRequest){ TradeRequest request = new TradeRequest<CreateOrderRequest>(); request.setSceneId(QianYunTongProperties.sceneId); request.setAppId(QianYunTongProperties.appId); request.setConfigVersion(1); request.setRequestId(UUIDUtil.getRandomCode()); request.setData(createOrderRequest); //请求路径 String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/tradeOrderCreate"; //私钥文件 String skprivateKeyFile = QianYunTongProperties.privateKeyPath; //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密 String appKey = QianYunTongProperties.appkey;//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(), QianYunTongProperties.userName); contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status); 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 request * @return 行程单ID */ public static String createTravelItinerary(CreateTravelItineraryRequest request){ //请求路径 String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/createTravelItinerary"; //私钥文件 String skprivateKeyFile = QianYunTongProperties.privateKeyPath; //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密 String appKey = QianYunTongProperties.appkey;//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(), QianYunTongProperties.userName); contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status); 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){ //请求路径 String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/modifyTravelItinerary"; //私钥文件 String skprivateKeyFile = QianYunTongProperties.privateKeyPath; //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密 String appKey = QianYunTongProperties.appkey;//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(), QianYunTongProperties.userName); contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status); 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<TravelItinerary> getTravelItineraryList(GetTravelItineraryListRequest request){ //请求路径 String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/getTravelItineraryList"; //私钥文件 String skprivateKeyFile = QianYunTongProperties.privateKeyPath; //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密 String appKey = QianYunTongProperties.appkey;//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(), QianYunTongProperties.userName); contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status); 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<TravelItinerary>(); listPage.setTotal(total); listPage.setPageNum(pageNum); listPage.setPageSize(pageSize); listPage.setList(travelItineraryList); return listPage; } /** * 订单创建及拉起支付 * @param tradeOrderCreateData * @return */ public static TradeOrderCreate tradeOrderCreate1(TradeOrderCreateData tradeOrderCreateData){ TradeRequest request = new TradeRequest<TradeOrderCreateData>(); request.setSceneId(QianYunTongProperties.sceneId); request.setAppId(QianYunTongProperties.appId); request.setConfigVersion(1); request.setRequestId(UUIDUtil.getRandomCode()); request.setData(tradeOrderCreateData); //请求路径 String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/tradeOrderCreate"; //私钥文件 String skprivateKeyFile = QianYunTongProperties.privateKeyPath; //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密 String appKey = QianYunTongProperties.appkey;//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(), QianYunTongProperties.userName); contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status); 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 tradePayOffData * @return */ public static PayInfo tradePayOff(TradePayOffData tradePayOffData){ TradeRequest request = new TradeRequest<TradePayOffData>(); request.setSceneId(QianYunTongProperties.sceneId); request.setAppId(QianYunTongProperties.appId); request.setConfigVersion(1); request.setRequestId(UUIDUtil.getRandomCode()); request.setData(tradePayOffData); //请求路径 String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/tradePayOff"; //私钥文件 String skprivateKeyFile = QianYunTongProperties.privateKeyPath; //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密 String appKey = QianYunTongProperties.appkey;//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(), QianYunTongProperties.userName); contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status); 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 tradePayOff1Data * @return */ public static PayInfo tradePayOff1(TradePayOff1Data tradePayOff1Data){ TradeRequest request = new TradeRequest<TradePayOff1Data>(); request.setSceneId(QianYunTongProperties.sceneId); request.setAppId(QianYunTongProperties.appId); request.setConfigVersion(1); request.setRequestId(UUIDUtil.getRandomCode()); request.setData(tradePayOff1Data); //请求路径 String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/tradePayOff"; //私钥文件 String skprivateKeyFile = QianYunTongProperties.privateKeyPath; //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密 String appKey = QianYunTongProperties.appkey;//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(), QianYunTongProperties.userName); contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status); 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){ GetPaymentInfoRequest request = new GetPaymentInfoRequest(); request.setRequstType("POST"); request.setBusType(1); request.setData(getPaymentInfoDataRequest); //请求路径 String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/paymentInfo"; //私钥文件 String skprivateKeyFile = QianYunTongProperties.privateKeyPath; //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密 String appKey = QianYunTongProperties.appkey;//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(), QianYunTongProperties.userName); contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status); 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){ //请求路径 String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/paymentOrder"; //私钥文件 String skprivateKeyFile = QianYunTongProperties.privateKeyPath; //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密 String appKey = QianYunTongProperties.appkey;//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(), QianYunTongProperties.userName); contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status); 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(!"0".equals(resCode)){ log.error("【(补偿单)支付成功通知】失败:" + jsonObject.getString("resMsg")); throw new RuntimeException("【(补偿单)支付成功通知】失败:" + jsonObject.getString("resMsg")); } OrderInfo orderInfo = jsonObject.getObject("busiResp", OrderInfo.class); return orderInfo; } } UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongProperties.java
@@ -8,41 +8,6 @@ */ public interface QianYunTongProperties { /************************************开发/测试start***********************************/ // /** // * appkey // */ // String appkey = "10001104"; // /** // * 私钥地址 // */ // String privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key_test.pem"; // /** // * 私钥地址 // */ // String privateKeyPath = "/root/server/app/key/private_key_test.pem"; // /** // * 消费者账号 // */ // String userName = "xiaofei"; // /** // * 状态 // * 1:生产环境 // * 2:测试环境 // */ // String status = "1"; // /** // * API地址 // */ // String apiUrl = "https://test-zhongtai.stqcloud.com:10070"; // /** // * 桶名 // */ // String bucketName = "bucuTest0625"; /************************************开发/测试end***********************************/ /************************************生产start***********************************/ /** * appkey @@ -51,15 +16,15 @@ /** * 私钥地址 */ // String privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key.pem"; String privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key_test.pem"; /** * 私钥地址 */ String privateKeyPath = "/root/server/app/key/private_key.pem"; // String privateKeyPath = "/root/server/app/key/private_key_test.pem"; /** * 消费者账号 */ String userName = "xiwang"; String userName = "xiaofei"; /** * 状态 * 1:生产环境 @@ -69,11 +34,54 @@ /** * API地址 */ String apiUrl = "http://jjzhongtai.stqcloud.com:10010"; String apiUrl = "https://test-zhongtai.stqcloud.com:10070"; /** * 桶名 */ String bucketName = "qyt20250702"; String bucketName = "bucuTest0625"; /** * 场景编号 */ String sceneId = "1948289607125864448"; /************************************开发/测试end***********************************/ /************************************生产start***********************************/ // /** // * appkey // */ // String appkey = "10001104"; // /** // * 私钥地址 // */ //// String privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key.pem"; // /** // * 私钥地址 // */ // String privateKeyPath = "/root/server/app/key/private_key.pem"; // /** // * 消费者账号 // */ // String userName = "xiwang"; // /** // * 状态 // * 1:生产环境 // * 2:测试环境 // */ // String status = "1"; // /** // * API地址 // */ // String apiUrl = "http://jjzhongtai.stqcloud.com:10010"; // /** // * 桶名 // */ // String bucketName = "qyt20250702"; // /** // * 场景编号 // */ // String sceneId = "1948289607125864448"; /************************************生产end***********************************/ UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/UserUtil.java
@@ -22,6 +22,12 @@ public class UserUtil { public static void main(String[] args) { List<QYTUserInfo> userInfoByPhone = getUserInfoByPhone("15828353127", "981100006005951"); System.out.println(userInfoByPhone); } /** * 根据手机号码获取人员信息 * @@ -72,6 +78,63 @@ return list; } /** * 根据手机号码获取人员信息 * * @param mobile 手机号码 * @param enterNum 企业编号 */ public static List<QYTUserInfo> getUserInfoByPhone(String mobile, String enterNum) { //请求路径 String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/getUserInfoByPhone"; //私钥文件 String skprivateKeyFile = QianYunTongProperties.privateKeyPath; //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密 String appKey = QianYunTongProperties.appkey;//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(), QianYunTongProperties.userName); contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status); 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; } /** * 根据手机号注册用户 UserQYTTravel/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; } UserQYTTravel/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; } UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GetPaymentInfo.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 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; /** * 商品信息 */ private List<GoodsInfoRequest> goodsInfo; } UserQYTTravel/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; } UserQYTTravel/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; } UserQYTTravel/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; } UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfo.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:35 */ @Data public class GoodsInfo { /** * 商户号 */ private String merchantCode; /** * 付款商户号 */ private String custId; /** * 付款方名称 */ private String custName; /** * 分账标识。0:不分账,1:分账 */ private String profitSharing; } UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/GoodsInfoRequest.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:13 */ @Data public class GoodsInfoRequest { /** * 企业ID(补偿场景新创建的订单支付传备用金企业ID) */ private String id; /** * 子商户微信appId(证联预下单支付必填) */ private String subAppId; /** * 付款人的openId(证联预下单支付必填) */ private String subOpenId; /** * 分账标识。0:不分账,1:分账 */ private String profitSharing; } UserQYTTravel/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; } UserQYTTravel/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; } UserQYTTravel/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; } UserQYTTravel/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; } UserQYTTravel/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; } UserQYTTravel/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; } UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/PaymentInfoRequest.java
New file @@ -0,0 +1,15 @@ 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; } UserQYTTravel/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; } UserQYTTravel/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; } UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/QYTPaymentCallbackData.java
New file @@ -0,0 +1,41 @@ 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 { /** * 商户单标识。行程单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; } UserQYTTravel/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; } UserQYTTravel/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; } UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCreateData.java
New file @@ -0,0 +1,95 @@ 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; /** * 结算信息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; } UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOff1Data.java
New file @@ -0,0 +1,58 @@ 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; /** * 场景标识。交通场景传”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; } UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradePayOffData.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 TradePayOffData { /** * 商户号,由支付中心分配。测试环境5400004 */ private String partnerId; /** * 场景标识。交通场景传”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; } UserQYTTravel/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; } UserQYTTravel/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; }