From 380fd117c5fd91524f6bf1740da96d3be9df1919 Mon Sep 17 00:00:00 2001 From: b2894lxlx <517289602@qq.com> Date: Fri, 18 Sep 2026 22:12:43 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=AE=9A=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/DeptController.java | 4 +- .../service/impl/OASyncServiceImpl.java | 8 +- .../controller/WaybillController.java | 2 +- .../service/impl/WaybillServiceImpl.java | 77 +++++++++++++------ .../src/main/resources/application-dev.yml | 1 + .../thirdparty/lbs/config/LbsProperties.java | 5 ++ .../thirdparty/lbs/feign/ILbsClient.java | 9 +++ .../lbs/pojo/vo/LbsLocateResponse.java | 24 ++++-- doc/nacos/blade-dev.yaml | 1 + doc/nacos/blade-prod.yaml | 1 + doc/nacos/third-party-api.yaml | 1 + 11 files changed, 96 insertions(+), 37 deletions(-) diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/DeptController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/DeptController.java index e407597..b2f2280 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/DeptController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/DeptController.java @@ -182,7 +182,7 @@ public class DeptController extends BladeController { @Operation(summary = "同步OA公司") public R syncOaCompany( @RequestParam(defaultValue = "1") Integer current, - @RequestParam(defaultValue = "50") Integer size) { + @RequestParam(defaultValue = "20") Integer size) { return R.data(oaSyncService.syncCompanyPage(current, size)); } @@ -195,7 +195,7 @@ public class DeptController extends BladeController { @Operation(summary = "同步OA部门") public R syncOaDepartment( @RequestParam(defaultValue = "1") Integer current, - @RequestParam(defaultValue = "50") Integer size) { + @RequestParam(defaultValue = "20") Integer size) { return R.data(oaSyncService.syncDepartmentPage(current, size)); } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/OASyncServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/OASyncServiceImpl.java index 5e208c7..0792dc2 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/OASyncServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/OASyncServiceImpl.java @@ -321,7 +321,7 @@ public class OASyncServiceImpl implements IOASyncService { */ private OaOrgSyncPageVO syncCompanyFromOaPage(int current, int size) { int pageNo = current < 1 ? 1 : current; - int pageSize = size < 1 ? 50 : Math.min(size, 200); + int pageSize = size < 1 ? 20 : Math.min(size, 200); OACompanySearch companySearch = buildCompanySearch(null); companySearch.setCurPage(pageNo); companySearch.setPageSize(pageSize); @@ -355,7 +355,7 @@ public class OASyncServiceImpl implements IOASyncService { */ private OaOrgSyncPageVO syncDepartmentFromOaPage(int current, int size) { int pageNo = current < 1 ? 1 : current; - int pageSize = size < 1 ? 50 : Math.min(size, 200); + int pageSize = size < 1 ? 20 : Math.min(size, 200); String subCompanyIds = getSubCompanyIds(); if (StringUtils.isEmpty(subCompanyIds)) { ComposeLogUtil.getLastLog().warn("未查询到子公司查询参数,跳过部门同步"); @@ -420,7 +420,7 @@ public class OASyncServiceImpl implements IOASyncService { private OACompanySearch buildCompanySearch(Date startTime) { OACompanySearch companySearch = new OACompanySearch(); companySearch.setCurPage(1); - companySearch.setPageSize(50); + companySearch.setPageSize(20); if (startTime != null) { companySearch.setModified(DateUtil.format(startTime, DateUtil.PATTERN_DATETIME)); } @@ -437,7 +437,7 @@ public class OASyncServiceImpl implements IOASyncService { private OADepartmentSearch buildDepartmentSearch(Date startTime, String subCompanyIds) { OADepartmentSearch departmentSearch = new OADepartmentSearch(); departmentSearch.setCurPage(1); - departmentSearch.setPageSize(50); + departmentSearch.setPageSize(20); departmentSearch.setSubcompanyid1(subCompanyIds); if (startTime != null) { departmentSearch.setModified(DateUtil.format(startTime, DateUtil.PATTERN_DATETIME)); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/WaybillController.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/WaybillController.java index ba2c241..68b83b1 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/WaybillController.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/controller/WaybillController.java @@ -120,7 +120,7 @@ public class WaybillController extends BladeController { @PostMapping("/track") @ApiOperationSupport(order = 1) - @Operation(summary = "车辆历史轨迹", description = "按运单绑定车牌 + 日期区间调用 LBS_LOCATE") + @Operation(summary = "车辆历史轨迹", description = "按运单绑定车牌 + 日期区间调用 LBS_TRACK") public R track( @Parameter(description = "运单ID", required = true) @RequestParam Long id, @Parameter(description = "开始日期 YYYY-MM-DD", required = true) @RequestParam String startDate, diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java index b22ce13..42d9932 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/WaybillServiceImpl.java @@ -142,8 +142,8 @@ public class WaybillServiceImpl extends BaseServiceImpl public WaybillLocateVO locateVehicle(Long id) { Waybill waybill = requireWaybillWithVehicleNo(id, "无法实时定位"); String vehicleNo = waybill.getVehicleNo().trim(); - LbsLocateResponse response = invokeLbsLocate(id, vehicleNo, new LbsLocateRequest(vehicleNo), "实时定位"); - List> pointMaps = extractLbsPointMaps(response.getData()); + LbsLocateResponse response = invokeLbs(id, vehicleNo, new LbsLocateRequest(vehicleNo), false, "实时定位"); + List> pointMaps = extractLbsPointMaps(response); if (pointMaps.isEmpty()) { throw new ServiceException("暂无车辆实时定位数据"); } @@ -159,9 +159,9 @@ public class WaybillServiceImpl extends BaseServiceImpl if (LocalDate.parse(normalizedStart).isAfter(LocalDate.parse(normalizedEnd))) { throw new ServiceException("开始日期不能晚于结束日期"); } - LbsLocateResponse response = invokeLbsLocate(id, vehicleNo, - new LbsLocateRequest(vehicleNo, normalizedStart, normalizedEnd), "历史轨迹"); - List> pointMaps = extractLbsPointMaps(response.getData()); + LbsLocateResponse response = invokeLbs(id, vehicleNo, + new LbsLocateRequest(vehicleNo, normalizedStart, normalizedEnd), true, "历史轨迹"); + List> pointMaps = extractLbsPointMaps(response); WaybillTrackVO trackVO = new WaybillTrackVO(); trackVO.setWaybillId(id); trackVO.setVehicleNo(vehicleNo); @@ -195,10 +195,11 @@ public class WaybillServiceImpl extends BaseServiceImpl return waybill; } - private LbsLocateResponse invokeLbsLocate(Long waybillId, String vehicleNo, LbsLocateRequest request, String scene) { + private LbsLocateResponse invokeLbs(Long waybillId, String vehicleNo, LbsLocateRequest request, + boolean trackMode, String scene) { LbsLocateResponse response; try { - response = lbsClient.locate(request); + response = trackMode ? lbsClient.track(request) : lbsClient.locate(request); } catch (Exception exception) { log.error("调用LBS{}失败 waybillId={}, vehicleNo={}", scene, waybillId, vehicleNo, exception); throw new ServiceException("调用车辆" + scene + "接口失败"); @@ -223,29 +224,55 @@ public class WaybillServiceImpl extends BaseServiceImpl } /** - * 提取 LBS 轨迹点列表,兼容 data 数组 或 data.list 数组 + * 提取 LBS 轨迹点:优先 list,其次 obj,再兼容 data / data.list / data.obj */ - private List> extractLbsPointMaps(JsonNode dataNode) { + private List> extractLbsPointMaps(LbsLocateResponse response) { List> pointMaps = new ArrayList<>(); - if (dataNode == null || dataNode.isNull()) { + if (response == null) { return pointMaps; } - JsonNode listNode = dataNode; - if (dataNode.isObject() && dataNode.has("list")) { - listNode = dataNode.get("list"); + appendLbsNodes(pointMaps, response.getList()); + if (!pointMaps.isEmpty()) { + return pointMaps; } - if (listNode != null && listNode.isArray()) { - for (JsonNode item : listNode) { + appendLbsNodes(pointMaps, response.getObj()); + if (!pointMaps.isEmpty()) { + return pointMaps; + } + JsonNode dataNode = response.getData(); + if (dataNode != null && !dataNode.isNull()) { + if (dataNode.isObject() && dataNode.has("list")) { + appendLbsNodes(pointMaps, dataNode.get("list")); + if (!pointMaps.isEmpty()) { + return pointMaps; + } + } + if (dataNode.isObject() && dataNode.has("obj")) { + appendLbsNodes(pointMaps, dataNode.get("obj")); + if (!pointMaps.isEmpty()) { + return pointMaps; + } + } + appendLbsNodes(pointMaps, dataNode); + } + return pointMaps; + } + + private void appendLbsNodes(List> pointMaps, JsonNode node) { + if (node == null || node.isNull()) { + return; + } + if (node.isArray()) { + for (JsonNode item : node) { if (item != null && item.isObject()) { pointMaps.add(JsonUtil.toMap(item.toString())); } } - return pointMaps; + return; } - if (dataNode.isObject()) { - pointMaps.add(JsonUtil.toMap(dataNode.toString())); + if (node.isObject()) { + pointMaps.add(JsonUtil.toMap(node.toString())); } - return pointMaps; } /** @@ -271,10 +298,10 @@ public class WaybillServiceImpl extends BaseServiceImpl target.setLongitude(firstDecimal(pointMap, "longitude", "lon", "lng", "x", "jd", "Longitude", "LON", "LNG", "JD", "X")); target.setLatitude(firstDecimal(pointMap, "latitude", "lat", "y", "wd", "Latitude", "LAT", "WD", "Y")); target.setAddress(firstText(pointMap, "address", "addr", "adr", "wz", "Address", "ADDR", "ADR")); - target.setLocateTime(firstText(pointMap, "locationTime", "pos_time", "locateTime", "gpsTime", "gpstime", "time", "gpszdsj", "GPSTime", "Time")); - target.setSpeed(firstText(pointMap, "speed", "v", "sd", "Speed", "SD", "V")); + target.setLocateTime(firstText(pointMap, "utc", "locationTime", "pos_time", "locateTime", "gpsTime", "gpstime", "time", "gpszdsj", "GPSTime", "Time")); + target.setSpeed(firstText(pointMap, "spd", "speed", "v", "sd", "Speed", "SD", "V")); target.setDirection(firstText(pointMap, "direct", "direction", "h", "fx", "Direction", "FX", "course", "H")); - String responseVehicleNo = firstText(pointMap, "cph", "vehicleNo", "plateNo", "CPH"); + String responseVehicleNo = firstText(pointMap, "vno", "cph", "vehicleNo", "plateNo", "CPH", "VNO"); if (Func.isNotEmpty(responseVehicleNo)) { target.setVehicleNo(responseVehicleNo); } @@ -284,10 +311,10 @@ public class WaybillServiceImpl extends BaseServiceImpl target.setLongitude(firstDecimal(pointMap, "longitude", "lon", "lng", "x", "jd", "Longitude", "LON", "LNG", "JD", "X")); target.setLatitude(firstDecimal(pointMap, "latitude", "lat", "y", "wd", "Latitude", "LAT", "WD", "Y")); target.setAddress(firstText(pointMap, "address", "addr", "adr", "wz", "Address", "ADDR", "ADR")); - target.setLocateTime(firstText(pointMap, "locationTime", "pos_time", "locateTime", "gpsTime", "gpstime", "time", "gpszdsj", "GPSTime", "Time")); - target.setSpeed(firstText(pointMap, "speed", "v", "sd", "Speed", "SD", "V")); + target.setLocateTime(firstText(pointMap, "utc", "locationTime", "pos_time", "locateTime", "gpsTime", "gpstime", "time", "gpszdsj", "GPSTime", "Time")); + target.setSpeed(firstText(pointMap, "spd", "speed", "v", "sd", "Speed", "SD", "V")); target.setDirection(firstText(pointMap, "direct", "direction", "h", "fx", "Direction", "FX", "course", "H")); - String responseVehicleNo = firstText(pointMap, "cph", "vehicleNo", "plateNo", "CPH"); + String responseVehicleNo = firstText(pointMap, "vno", "cph", "vehicleNo", "plateNo", "CPH", "VNO"); if (Func.isNotEmpty(responseVehicleNo)) { target.setVehicleNo(responseVehicleNo); } diff --git a/blade-service/blade-transport/src/main/resources/application-dev.yml b/blade-service/blade-transport/src/main/resources/application-dev.yml index 29ae464..ebffbff 100644 --- a/blade-service/blade-transport/src/main/resources/application-dev.yml +++ b/blade-service/blade-transport/src/main/resources/application-dev.yml @@ -14,4 +14,5 @@ thirdParty: lbs: baseUrl: ${LBS_BASE_URL:http://172.16.204.83:38000} locateUrl: ${LBS_LOCATE_URL:/gwzh/LBS/LBS_LOCATE} + trackUrl: ${LBS_TRACK_URL:/gwzh/LBS/LBS_TRACK} authorization: ${LBS_AUTHORIZATION:${OA_AUTHORIZATION:${IAM_SSO_AUTHORIZATION:Z3d6aF90bXMtOVJJU0RVN1U6YW0yYkcwWnBJZ0RQZmtrSjNaZkZjUDBSaGFuSEtxQng=}}} diff --git a/blade-third-party-api/blade-lbs-api/src/main/java/org/springblade/thirdparty/lbs/config/LbsProperties.java b/blade-third-party-api/blade-lbs-api/src/main/java/org/springblade/thirdparty/lbs/config/LbsProperties.java index 0e8b780..5b4f355 100644 --- a/blade-third-party-api/blade-lbs-api/src/main/java/org/springblade/thirdparty/lbs/config/LbsProperties.java +++ b/blade-third-party-api/blade-lbs-api/src/main/java/org/springblade/thirdparty/lbs/config/LbsProperties.java @@ -47,6 +47,11 @@ public class LbsProperties { */ private String locateUrl = "/gwzh/LBS/LBS_LOCATE"; + /** + * 车辆历史轨迹路径 + */ + private String trackUrl = "/gwzh/LBS/LBS_TRACK"; + /** * gwzh 网关 Authorization(Basic),与 OA 人员接口一致 */ diff --git a/blade-third-party-api/blade-lbs-api/src/main/java/org/springblade/thirdparty/lbs/feign/ILbsClient.java b/blade-third-party-api/blade-lbs-api/src/main/java/org/springblade/thirdparty/lbs/feign/ILbsClient.java index e19a148..7db03f2 100644 --- a/blade-third-party-api/blade-lbs-api/src/main/java/org/springblade/thirdparty/lbs/feign/ILbsClient.java +++ b/blade-third-party-api/blade-lbs-api/src/main/java/org/springblade/thirdparty/lbs/feign/ILbsClient.java @@ -48,4 +48,13 @@ public interface ILbsClient { */ @PostMapping("${thirdParty.lbs.locateUrl:/gwzh/LBS/LBS_LOCATE}") LbsLocateResponse locate(@RequestBody LbsLocateRequest request); + + /** + * 车辆历史轨迹 + * + * @param request 请求(cph、start_date、end_date) + * @return 轨迹结果 + */ + @PostMapping("${thirdParty.lbs.trackUrl:/gwzh/LBS/LBS_TRACK}") + LbsLocateResponse track(@RequestBody LbsLocateRequest request); } diff --git a/blade-third-party-api/blade-lbs-api/src/main/java/org/springblade/thirdparty/lbs/pojo/vo/LbsLocateResponse.java b/blade-third-party-api/blade-lbs-api/src/main/java/org/springblade/thirdparty/lbs/pojo/vo/LbsLocateResponse.java index 6432a2b..be72bc6 100644 --- a/blade-third-party-api/blade-lbs-api/src/main/java/org/springblade/thirdparty/lbs/pojo/vo/LbsLocateResponse.java +++ b/blade-third-party-api/blade-lbs-api/src/main/java/org/springblade/thirdparty/lbs/pojo/vo/LbsLocateResponse.java @@ -34,7 +34,10 @@ import java.io.Serial; import java.io.Serializable; /** - * LBS 定位/历史轨迹响应 + * LBS 定位/历史轨迹响应。 + *

+ * 实际网关返回示例: + * {@code {"code":200,"obj":{...},"list":null,"msg":"OK"}} * * @author Chill */ @@ -51,7 +54,7 @@ public class LbsLocateResponse implements Serializable { private Integer status; /** - * 兼容 code 字段(网关常返回 "1") + * 响应代码(网关返回 200 或 "1") */ private String code; @@ -66,7 +69,17 @@ public class LbsLocateResponse implements Serializable { private String message; /** - * 定位/轨迹数据(数组,或 {list,total}) + * 单点定位对象 + */ + private JsonNode obj; + + /** + * 历史轨迹点列表 + */ + private JsonNode list; + + /** + * 兼容旧字段 data */ private JsonNode data; @@ -89,10 +102,11 @@ public class LbsLocateResponse implements Serializable { * 错误信息 */ public String errorMessage() { - if (msg != null && !msg.isBlank()) { + if (msg != null && !msg.isBlank() && !"OK".equalsIgnoreCase(msg) && !"Success".equalsIgnoreCase(msg)) { return msg; } - if (message != null && !message.isBlank()) { + if (message != null && !message.isBlank() + && !"OK".equalsIgnoreCase(message) && !"Success".equalsIgnoreCase(message)) { return message; } return "LBS接口调用失败"; diff --git a/doc/nacos/blade-dev.yaml b/doc/nacos/blade-dev.yaml index 0ff37d3..d6b0821 100644 --- a/doc/nacos/blade-dev.yaml +++ b/doc/nacos/blade-dev.yaml @@ -95,6 +95,7 @@ thirdParty: # LBS 网关地址(车辆实时定位) baseUrl: http://172.16.204.83:38000 locateUrl: /gwzh/LBS/LBS_LOCATE + trackUrl: /gwzh/LBS/LBS_TRACK authorization: ${LBS_AUTHORIZATION:${OA_AUTHORIZATION:${IAM_SSO_AUTHORIZATION:Z3d6aF90bXMtOVJJU0RVN1U6YW0yYkcwWnBJZ0RQZmtrSjNaZkZjUDBSaGFuSEtxQng=}}} track: # 轨迹开放接口地址 diff --git a/doc/nacos/blade-prod.yaml b/doc/nacos/blade-prod.yaml index cfc872f..407b09c 100644 --- a/doc/nacos/blade-prod.yaml +++ b/doc/nacos/blade-prod.yaml @@ -67,6 +67,7 @@ thirdParty: # LBS 网关地址(车辆实时定位) baseUrl: http://172.16.204.83:38000 locateUrl: /gwzh/LBS/LBS_LOCATE + trackUrl: /gwzh/LBS/LBS_TRACK authorization: ${LBS_AUTHORIZATION:${OA_AUTHORIZATION:${IAM_SSO_AUTHORIZATION:Z3d6aF90bXMtOVJJU0RVN1U6YW0yYkcwWnBJZ0RQZmtrSjNaZkZjUDBSaGFuSEtxQng=}}} track: # 轨迹开放接口地址 diff --git a/doc/nacos/third-party-api.yaml b/doc/nacos/third-party-api.yaml index e71be46..11e17b3 100644 --- a/doc/nacos/third-party-api.yaml +++ b/doc/nacos/third-party-api.yaml @@ -19,6 +19,7 @@ thirdParty: # LBS 网关地址(车辆实时定位) baseUrl: ${LBS_BASE_URL:${OA_BASE_URL:http://172.16.204.83:38000}} locateUrl: ${LBS_LOCATE_URL:/gwzh/LBS/LBS_LOCATE} + trackUrl: ${LBS_TRACK_URL:/gwzh/LBS/LBS_TRACK} authorization: ${LBS_AUTHORIZATION:${OA_AUTHORIZATION:${IAM_SSO_AUTHORIZATION:}}} track: # 轨迹开放接口地址