From 3560e5ca81618e856cc24c49500c466092242285dd86ab4f87b687457f33b1f3 Mon Sep 17 00:00:00 2001 From: attiya <2413103649@qq.com> Date: Wed, 10 Dec 2025 10:24:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E8=BD=A6=E8=BE=86=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/EbikeBikeInfoController.java | 13 +++++++++ .../model/dto/EbikeOrderBikeListDto.java | 17 +++++++++++ .../service/EbikeBikeInfoService.java | 8 +++++ .../impl/EbikeBikeInfoServiceImpl.java | 5 ++++ .../impl/EbikeBikeOrderServiceImpl.java | 29 ++++++++++++++++++- 5 files changed, 71 insertions(+), 1 deletion(-) diff --git a/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeBikeInfoController.java b/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeBikeInfoController.java index 66bb2b6..1c292bb 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeBikeInfoController.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeBikeInfoController.java @@ -135,4 +135,17 @@ public class EbikeBikeInfoController { EbikeUserBikeInfo info = ebikeBikeInfoService.bikeInfo(bikeCode); return JsonResult.success(info); } + + /** + * 中控换绑 + * + * @param bikeCode 车辆编号 + * @param ecuSn 中控编号 + * @return 结果 + */ + @GetMapping("/changeEcu") + public JsonResult changeEcu(@RequestParam("bikeCode") String bikeCode, @RequestParam("ecuSn") String ecuSn) { + ebikeBikeInfoService.changeEcu(bikeCode, ecuSn); + return JsonResult.success(); + } } diff --git a/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeOrderBikeListDto.java b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeOrderBikeListDto.java index 0d42685..59389c3 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeOrderBikeListDto.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeOrderBikeListDto.java @@ -87,4 +87,21 @@ public class EbikeOrderBikeListDto implements Serializable { * 是否在线 */ private Boolean online; + + + /** + * 是否24小时无单 + */ + private Boolean over24Hours; + + + /** + * 是否24小时无单 + */ + private Boolean isInParkingArea; + + /** + * 无单时长 + */ + private Integer hoursSinceLastCycling; } diff --git a/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeBikeInfoService.java b/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeBikeInfoService.java index f1720d5..b506b9b 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeBikeInfoService.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeBikeInfoService.java @@ -88,4 +88,12 @@ public interface EbikeBikeInfoService extends IService { * @param bikeCode 车辆编号 */ EbikeUserLockDto lock(String bikeCode); + + /** + * 中控换绑 + * + * @param bikeCode 车辆编号 + * @param ecuSn 中控编号 + */ + void changeEcu(String bikeCode, String ecuSn); } diff --git a/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeInfoServiceImpl.java b/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeInfoServiceImpl.java index b2a682c..5e74816 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeInfoServiceImpl.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeInfoServiceImpl.java @@ -482,6 +482,11 @@ public class EbikeBikeInfoServiceImpl extends ServiceImpl ebikeSpecialDays) { LocalDate today = LocalDate.now(); DayOfWeek dayOfWeek = today.getDayOfWeek(); diff --git a/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeOrderServiceImpl.java b/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeOrderServiceImpl.java index 0c2a022..493a2b0 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeOrderServiceImpl.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeOrderServiceImpl.java @@ -40,6 +40,7 @@ import static com.cdzy.operations.model.entity.table.EbikeBikeInfoTableDef.EBIKE import static com.cdzy.operations.model.entity.table.EbikeBikeOrderTableDef.EBIKE_BIKE_ORDER; import static com.cdzy.operations.model.entity.table.EbikeBorrowBatteryRecordTableDef.EBIKE_BORROW_BATTERY_RECORD; import static com.cdzy.operations.model.entity.table.EbikeEcuInfoTableDef.EBIKE_ECU_INFO; +import static com.cdzy.operations.model.entity.table.EbikeSiteTableDef.EBIKE_SITE; /** * 工单信息 服务层实现。 @@ -447,6 +448,7 @@ public class EbikeBikeOrderServiceImpl extends ServiceImpl bikeList(Long regionId) throws IOException { + QueryWrapper queryWrapper = QueryWrapper.create() .select( EBIKE_BIKE_INFO.BIKE_CODE, @@ -496,8 +498,33 @@ public class EbikeBikeOrderServiceImpl extends ServiceImpl 24")) + .then(true) + .else_(false) + .end().as(EbikeOrderBikeListDto::getOver24Hours), + QueryMethods.case_() + .when(QueryMethods.exists( + QueryWrapper.create() + .from(EBIKE_SITE) + .where(EBIKE_SITE.REGION_ID.eq(regionId)) // 同一运营区 + .and(EBIKE_SITE.SITE_TYPE.eq(1)) // 站点类型为1(普通停车站点) + .and(EBIKE_SITE.IS_DELETED.eq(false)) + .and( + // 使用 ST_Contains 或 ST_Within 判断点是否在多边形内 + // 假设 EBIKE_BIKE_INFO 有经纬度字段 latitude 和 longitude + QueryMethods.raw( + "ST_Contains(EBIKE_SITE.SITE_POLYGON::geometry,EBIKE_BIKE_INFO.LOCATION::geometry)" + ) + ) + )) + .then(true) + .else_(false) + .end().as("is_in_parking_area") ) + .select("EXTRACT(EPOCH FROM (NOW() - ebike_bike_info.latest_cycling_time)) / 3600 AS hours_since_last_cycling") .where(EBIKE_BIKE_INFO.REGION_ID.eq(regionId)) .where(EBIKE_BIKE_INFO.STATUS.eq(BikeStatus.LAUNCH)) .where(EBIKE_BIKE_INFO.USAGE_STATUS.ne(BikeUsageStatus.BIND))