diff --git a/ruoyi-admin/src/main/resources/templates/tyre/tyre/typreDetill2.html b/ruoyi-admin/src/main/resources/templates/tyre/tyre/typreDetill2.html index 35918300..fb640d3b 100644 --- a/ruoyi-admin/src/main/resources/templates/tyre/tyre/typreDetill2.html +++ b/ruoyi-admin/src/main/resources/templates/tyre/tyre/typreDetill2.html @@ -452,6 +452,7 @@
-
+
车牌号:-
卸下时间:-
该程行驶里程:-
本程剩余花纹:-
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/CarLifecycleSummaryDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/CarLifecycleSummaryDTO.java index 70848bc6..30aa357b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/CarLifecycleSummaryDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/CarLifecycleSummaryDTO.java @@ -26,10 +26,10 @@ public class CarLifecycleSummaryDTO implements Serializable /** 所属车队名称,由部门ID关联翻译而来,前端直接展示。 */ private String team; - /** 线路名称,车辆运营的公交/客运线路。 */ + /** 线路名称 */ private String line; - /** 车型,例如:纯电动大巴、混合动力公交等字典值。 */ + /** 车型 */ private String type; /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/RecordTyreMileage.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/RecordTyreMileage.java index 5de261bf..07cf7a6d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/RecordTyreMileage.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/RecordTyreMileage.java @@ -42,8 +42,19 @@ public class RecordTyreMileage extends BaseEntity @Excel(name = "花纹深度") private String patternDepth; + /** 车牌号码快照:里程记录按卸胎时车辆归属追溯,避免后续轮胎换车后丢失历史车辆关系。 */ + private String plateNumber; + private String recordId; + public String getPlateNumber() { + return plateNumber; + } + + public void setPlateNumber(String plateNumber) { + this.plateNumber = plateNumber; + } + public String getRecordId() { return recordId; } @@ -137,6 +148,8 @@ public class RecordTyreMileage extends BaseEntity .append("mileage", getMileage()) + .append("plateNumber", getPlateNumber()) + .append("createBy", getCreateBy()) .append("createTime", getCreateTime()) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BaseTyreMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BaseTyreMapper.java index 957dbad0..ac6f78b4 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BaseTyreMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/BaseTyreMapper.java @@ -95,5 +95,13 @@ public interface BaseTyreMapper int updateBaseTyreByEpc(BaseTyre baseTyre); + /** + * 按轮胎RFID批量查询当前安装车牌 + * + * @param tyreEpcs 轮胎RFID集合 + * @return 轮胎基础信息集合 + */ + List selectCarNoByTyreEpcs(List tyreEpcs); + double selectSumMileageByRFID(@Param("tyreEpc") String tyreEpc); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RecordTyreInstallMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RecordTyreInstallMapper.java index b370cb7e..543dc835 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RecordTyreInstallMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RecordTyreInstallMapper.java @@ -31,6 +31,7 @@ public interface RecordTyreInstallMapper */ public List selectRecordTyreInstallList(RecordTyreInstall recordTyreInstall); + /** * 新增轮胎安装记录 * @@ -64,4 +65,13 @@ public interface RecordTyreInstallMapper public int deleteRecordTyreInstallByIds(String[] ids); RecordTyreInstall selectRecordTyreInstallStart(RecordTyreInstall start); + + /** + * 按记录号批量查询装卸记录车牌 + * + * @param recordIds 记录号集合 + * @return 装卸记录集合 + */ + public List selectCarNoByRecordIds(List recordIds); + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BaseTyreServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BaseTyreServiceImpl.java index 3019681c..0346acdf 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BaseTyreServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BaseTyreServiceImpl.java @@ -364,6 +364,9 @@ public class BaseTyreServiceImpl implements IBaseTyreService return map; } + // 10. 老数据可能未写 record_tyre_mileage.plate_number,按需补查车牌,避免页面层猜测或全量查询。 + fillMissingMileagePlateNumber(mileageList); + // 10. 解析初始花纹深度,并计算各段磨损量 BigDecimal initialDepth = TyreLifecycleCalc.parseDepth(resultBase.getPatternDepth()); Map wearMap = TyreLifecycleCalc.computeSegmentWears(initialDepth, mileageList); @@ -394,6 +397,7 @@ public class BaseTyreServiceImpl implements IBaseTyreService vo.put("remark", item.getRemark()); // 备注信息 vo.put("tyreBrand", item.getTyreBrand()); // 轮胎品牌 vo.put("tyreNo", item.getTyreNo()); // 轮胎编号 + vo.put("plateNumber", item.getPlateNumber()); // 卸胎时的车牌快照,用于详情页按里程段追溯车辆归属 vo.put("wearDepth", item.getId() == null ? null : wearMap.get(item.getId())); // 磨损深度(从计算结果取) // 14. 累加有效里程值(mileage 为 Long 类型,表示该段 km 差值) if (item.getMileage() != null) @@ -412,6 +416,8 @@ public class BaseTyreServiceImpl implements IBaseTyreService return map; } + + private List castInstallList(Object value) { // 1. 初始化空结果列表,用于存放转换后的安装记录 @@ -432,4 +438,79 @@ public class BaseTyreServiceImpl implements IBaseTyreService // 4. 返回类型安全的安装记录列表 return result; } + + + + + // 轮胎生命周期里程记录填充车牌号 + private void fillMissingMileagePlateNumber(List mileageList) + { + Set recordIdSet = new LinkedHashSet<>(); + for (RecordTyreMileage item : mileageList) + { + if (item != null && StringUtils.isBlank(item.getPlateNumber()) && !StringUtils.isBlank(item.getRecordId())) + { + recordIdSet.add(item.getRecordId()); + } + } + if (!recordIdSet.isEmpty()) + { + List installList = recordTyreInstallMapper.selectCarNoByRecordIds(new ArrayList<>(recordIdSet)); + Map recordIdCarNoMap = new HashMap<>(); + if (installList != null && !installList.isEmpty()) + { + for (RecordTyreInstall install : installList) + { + if (install != null && !StringUtils.isBlank(install.getRecordId()) && !StringUtils.isBlank(install.getCarNo())) + { + recordIdCarNoMap.put(install.getRecordId(), install.getCarNo()); + } + } + } + for (RecordTyreMileage item : mileageList) + { + if (item != null && StringUtils.isBlank(item.getPlateNumber()) && !StringUtils.isBlank(item.getRecordId())) + { + // record_id 对应卸胎当次装卸记录,优先使用它保留历史车辆归属,不被轮胎后续换车影响。 + item.setPlateNumber(recordIdCarNoMap.get(item.getRecordId())); + } + } + } + + Set tyreRfidSet = new LinkedHashSet<>(); + for (RecordTyreMileage item : mileageList) + { + if (item != null && StringUtils.isBlank(item.getPlateNumber()) && !StringUtils.isBlank(item.getTyreRfid())) + { + tyreRfidSet.add(item.getTyreRfid()); + } + } + if (tyreRfidSet.isEmpty()) + { + return; + } + + List tyreList = baseTyreMapper.selectCarNoByTyreEpcs(new ArrayList<>(tyreRfidSet)); + if (tyreList == null || tyreList.isEmpty()) + { + return; + } + + Map tyreRfidCarNoMap = new HashMap<>(); + for (BaseTyre tyre : tyreList) + { + if (tyre != null && !StringUtils.isBlank(tyre.getTyreEpc()) && !StringUtils.isBlank(tyre.getCarNo())) + { + tyreRfidCarNoMap.put(tyre.getTyreEpc(), tyre.getCarNo()); + } + } + for (RecordTyreMileage item : mileageList) + { + if (item != null && StringUtils.isBlank(item.getPlateNumber()) && !StringUtils.isBlank(item.getTyreRfid())) + { + // tyre_rfid 只作为历史记录缺 record_id 时的兜底,按当前轮胎基础信息补齐展示字段。 + item.setPlateNumber(tyreRfidCarNoMap.get(item.getTyreRfid())); + } + } + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RecordTyreInstallServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RecordTyreInstallServiceImpl.java index 945cd9b1..0d4c1fdf 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RecordTyreInstallServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/RecordTyreInstallServiceImpl.java @@ -173,6 +173,8 @@ public class RecordTyreInstallServiceImpl implements IRecordTyreInstallService recordTyreMileage.setCreateTime(DateUtils.getNowDate()); recordTyreMileage.setCreateBy(recordTyreInstall.getCreateBy()); recordTyreMileage.setRecordId(recordId); + // 车牌号按卸胎当下车辆归属写入里程快照,避免轮胎后续换车后历史里程记录无法追溯车辆。 + // recordTyreMileage.setPlateNumber(recordTyreInstall.getCarNo()); recordTyreMileageMapper.insertRecordTyreMileage(recordTyreMileage); if (n>0&&m>0){ return AjaxResult.success("卸胎成功!"); diff --git a/ruoyi-system/src/main/resources/mapper/tyre/BaseTyreMapper.xml b/ruoyi-system/src/main/resources/mapper/tyre/BaseTyreMapper.xml index f170a134..14959c65 100644 --- a/ruoyi-system/src/main/resources/mapper/tyre/BaseTyreMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/tyre/BaseTyreMapper.xml @@ -301,4 +301,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where tyre_rfid = #{tyreEpc} + + + + diff --git a/ruoyi-system/src/main/resources/mapper/tyre/RecordTyreInstallMapper.xml b/ruoyi-system/src/main/resources/mapper/tyre/RecordTyreInstallMapper.xml index 46be076a..d56e1c81 100644 --- a/ruoyi-system/src/main/resources/mapper/tyre/RecordTyreInstallMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/tyre/RecordTyreInstallMapper.xml @@ -25,6 +25,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -56,6 +57,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ${params.dataScope} + + select record_id, car_no + from record_tyre_install + where car_no is not null + and car_no != '' + and record_id in + + #{recordId} + + + + diff --git a/ruoyi-system/src/main/resources/mapper/tyre/RecordTyreMileageMapper.xml b/ruoyi-system/src/main/resources/mapper/tyre/RecordTyreMileageMapper.xml index eea6851f..3c948b31 100644 --- a/ruoyi-system/src/main/resources/mapper/tyre/RecordTyreMileageMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/tyre/RecordTyreMileageMapper.xml @@ -18,15 +18,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + - select id, tyre_rfid, start_time, end_time, mileage, pattern_depth, create_by, create_time, update_by, update_time, remark from record_tyre_mileage + select id, tyre_rfid, start_time, end_time, mileage, pattern_depth, plate_number, record_id, create_by, create_time, update_by, update_time, remark from record_tyre_mileage - +