From b0dd4e46f6a1958fa9e14581e659a0b182212a941307e3a495f24e3cdf2ccb10 Mon Sep 17 00:00:00 2001 From: PC <2413103649@qq.com> Date: Mon, 26 Jan 2026 15:51:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=AB=E7=A0=81=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/EbikeBikeInfoController.java | 17 +- .../model/dto/EbikeBikeInfoDto.java | 2 - .../model/dto/EbikeScanInfoDto.java | 162 ++++++++++++++++++ .../service/EbikeBikeInfoService.java | 12 +- .../impl/EbikeBikeInfoServiceImpl.java | 53 +++++- .../EbikeOperationsApplicationTests.java | 11 +- 6 files changed, 240 insertions(+), 17 deletions(-) create mode 100644 ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeScanInfoDto.java 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 83c538d..9c97552 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 @@ -2,10 +2,7 @@ package com.cdzy.operations.controller; import com.cdzy.common.model.request.PageParam; import com.cdzy.common.model.response.JsonResult; -import com.cdzy.operations.model.dto.EbikeBikeInfoDto; -import com.cdzy.operations.model.dto.EbikeDto; -import com.cdzy.operations.model.dto.EbikeUserBikeInfo; -import com.cdzy.operations.model.dto.EbikeUserLockDto; +import com.cdzy.operations.model.dto.*; import com.cdzy.operations.model.entity.EbikeBikeInfo; import com.cdzy.operations.model.vo.*; import com.cdzy.operations.service.EbikeBikeInfoService; @@ -198,4 +195,16 @@ public class EbikeBikeInfoController { } return JsonResult.success(); } + + /** + * 车辆扫码详情 + * + * @param bikeCode 车辆编号 + * @return 结果 + */ + @GetMapping("/scanInfo") + public JsonResult info(@RequestParam("bikeCode") String bikeCode) { + EbikeScanInfoDto info = ebikeBikeInfoService.scanInfo(bikeCode); + return JsonResult.success(info); + } } diff --git a/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeBikeInfoDto.java b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeBikeInfoDto.java index 78683b0..07a5488 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeBikeInfoDto.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeBikeInfoDto.java @@ -97,7 +97,6 @@ public class EbikeBikeInfoDto implements Serializable { /** * 创建时间 */ - @Column(onInsertValue = "now()") private LocalDateTime createdAt; /** @@ -108,7 +107,6 @@ public class EbikeBikeInfoDto implements Serializable { /** * 修改时间 */ - @Column(onUpdateValue = "now()") private LocalDateTime updatedAt; /** diff --git a/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeScanInfoDto.java b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeScanInfoDto.java new file mode 100644 index 0000000..dcdd0b9 --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeScanInfoDto.java @@ -0,0 +1,162 @@ +package com.cdzy.operations.model.dto; + +import com.cdzy.operations.handler.PointDeserializer; +import com.cdzy.operations.handler.PointSerializer; +import com.cdzy.operations.handler.PointTypeHandler; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.mybatisflex.annotation.Column; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.locationtech.jts.geom.Point; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 车辆扫一扫详情。 + * + * @author attiya + * @since 2025-10-21 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EbikeScanInfoDto implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 车辆详情ID + */ + private Long bikeInfoId; + + /** + * 运营商ID + */ + private Long operatorId; + + /** + * 运营区ID + */ + private Long regionId; + + /** + * 运营区名称 + */ + private String regionName; + + /** + * 车辆编号(与车辆二维码编号相同 + */ + private String bikeCode; + + /** + * 电池ID + */ + private Long batteryId; + + /** + * 中控ID + */ + private Long ecuId; + + /** + * 头盔ID + */ + private Long helmetId; + + /** + * 定位 + */ + @Column(typeHandler = PointTypeHandler.class) + @JsonSerialize(using = PointSerializer.class) + @JsonDeserialize(using = PointDeserializer.class) + private Point location; + + /** + * 备注 + */ + private String remarks; + + /** + * 车辆状态 + */ + private Integer status; + + /** + * 车辆使用状态 + */ + private Integer usageStatus; + + /** + * 创建时间 + */ + private LocalDateTime createdAt; + + /** + * 创建人 + */ + private Long createdBy; + + /** + * 修改时间 + */ + private LocalDateTime updatedAt; + + /** + * 修改人 + */ + private Long updatedBy; + + /** + * 是否包含头盔 + */ + private Boolean hasHelme; + + /** + * 是否包含巡检 + */ + private Boolean hasInspection = false; + + /** + * 是否自己已接单巡检工单 + */ + private Boolean inspectionAcceptSelf = false; + + /** + * 是否包含换电 + */ + private Boolean hasBatterySwap = false; + + /** + * 是否自己已接单换电工单 + */ + private Boolean batterySwapAcceptSelf = false; + + /** + * 是否包含调度 + */ + private Boolean hasDispatch = false; + + /** + * 是否自己已接单调度工单 + */ + private Boolean dispatchAcceptSelf = false; + + /** + * 是否包含维修 + */ + private Boolean hasRepair = false; + + /** + * 是否自己已接单维修工单 + */ + private Boolean repairAcceptSelf = false; + +} 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 4738ca1..5c2d5b7 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 @@ -1,10 +1,7 @@ package com.cdzy.operations.service; import com.cdzy.common.model.request.PageParam; -import com.cdzy.operations.model.dto.EbikeBikeInfoDto; -import com.cdzy.operations.model.dto.EbikeDto; -import com.cdzy.operations.model.dto.EbikeUserBikeInfo; -import com.cdzy.operations.model.dto.EbikeUserLockDto; +import com.cdzy.operations.model.dto.*; import com.cdzy.operations.model.entity.EbikeBikeInfo; import com.cdzy.operations.model.vo.*; import com.ebike.feign.model.vo.EbikeLockVo; @@ -100,4 +97,11 @@ public interface EbikeBikeInfoService extends IService { * @param ecuSn 中控编号 */ EbikeEcuMsgDto getEcuMsg(String ecuSn); + + /** + * 车辆扫码详情 + * @param bikeCode 车辆编号 + * @return 车辆详情 + */ + EbikeScanInfoDto scanInfo(String bikeCode); } 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 f2891e8..9137197 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 @@ -23,10 +23,7 @@ import com.cdzy.operations.mapper.EbikeDefaultBillingConfigurationMapper; import com.cdzy.operations.mapper.EbikeRegionMapper; import com.cdzy.operations.mapper.EbikeSiteMapper; import com.cdzy.operations.mapper.EbikeSpecialBillingConfigurationMapper; -import com.cdzy.operations.model.dto.EbikeBikeInfoDto; -import com.cdzy.operations.model.dto.EbikeDto; -import com.cdzy.operations.model.dto.EbikeUserBikeInfo; -import com.cdzy.operations.model.dto.EbikeUserLockDto; +import com.cdzy.operations.model.dto.*; import com.cdzy.operations.model.entity.EbikeBatteryInfo; import com.cdzy.operations.model.entity.EbikeBikeInfo; import com.cdzy.operations.model.entity.EbikeBikeOrder; @@ -546,7 +543,7 @@ public class EbikeBikeInfoServiceImpl extends ServiceImpl 0){ + if (count > 0) { throw new EbikeException("中控已绑定其他车辆,不能进行换绑"); } queryWrapper.clear(); @@ -573,10 +570,54 @@ public class EbikeBikeInfoServiceImpl extends ServiceImpl list = orderMapper.selectListByQuery(queryWrapper); + long staffId = StpUtil.getLoginIdAsLong(); + if (!list.isEmpty()) { + for (EbikeBikeOrder order : list) { + switch (order.getOrderType()) { + case BikeOrderType.INSPECTION -> { + ebikeScanInfoDto.setHasInspection(Boolean.TRUE); + if (order.getReceiverId() != null && staffId == order.getReceiverId()) { + ebikeScanInfoDto.setInspectionAcceptSelf(Boolean.TRUE); + } + } + case BikeOrderType.BATTERY_SWAP -> { + ebikeScanInfoDto.setHasBatterySwap(Boolean.TRUE); + if (order.getReceiverId() != null && staffId == order.getReceiverId()) { + ebikeScanInfoDto.setBatterySwapAcceptSelf(Boolean.TRUE); + } + } + case BikeOrderType.DISPATCH -> { + ebikeScanInfoDto.setHasDispatch(Boolean.TRUE); + if (order.getReceiverId() != null && staffId == order.getReceiverId()) { + ebikeScanInfoDto.setDispatchAcceptSelf(Boolean.TRUE); + } + } + case BikeOrderType.REPAIR -> { + ebikeScanInfoDto.setHasRepair(Boolean.TRUE); + if (order.getReceiverId() != null && staffId == order.getReceiverId()) { + ebikeScanInfoDto.setRepairAcceptSelf(Boolean.TRUE); + } + } + } + } + } + return ebikeScanInfoDto; + } + static EbikeSpecialDay getEbikeSpecialDay(List ebikeSpecialDays) { LocalDate today = LocalDate.now(); diff --git a/ebike-operations/src/test/java/com/cdzy/operations/EbikeOperationsApplicationTests.java b/ebike-operations/src/test/java/com/cdzy/operations/EbikeOperationsApplicationTests.java index b4b1af6..b69cdd4 100644 --- a/ebike-operations/src/test/java/com/cdzy/operations/EbikeOperationsApplicationTests.java +++ b/ebike-operations/src/test/java/com/cdzy/operations/EbikeOperationsApplicationTests.java @@ -1,9 +1,11 @@ package com.cdzy.operations; +import com.cdzy.common.model.dto.ResGPSDto; import com.cdzy.operations.mapper.EbikeBikeOrderMapper; import com.cdzy.operations.model.dto.EbikeBikeOrderDayCountDto; import com.cdzy.operations.model.dto.EbikeBikeOrderMonthCountDto; import com.cdzy.operations.model.dto.EbikeBikeOrderWeekCountDto; +import com.cdzy.operations.utils.RedisUtil; import jakarta.annotation.Resource; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @@ -16,6 +18,9 @@ class EbikeOperationsApplicationTests { @Resource private EbikeBikeOrderMapper orderMapper; + @Resource + private RedisUtil redisUtil; + @Test void monthCount() { List monthCountDtos = orderMapper.monthCount(320131029184712704L); @@ -40,6 +45,10 @@ class EbikeOperationsApplicationTests { } } - + @Test + void test() { + ResGPSDto ecu = (ResGPSDto) redisUtil.getEcu("2370171956"); + System.out.println(ecu.getVoltage()/1000.0); + } }