diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tyre/BaseTyreController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tyre/BaseTyreController.java index b63107d9..bb5eccb4 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tyre/BaseTyreController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tyre/BaseTyreController.java @@ -499,4 +499,14 @@ public class BaseTyreController extends BaseController { this.color = color; } } + + /** + * PDA查询轮胎累计行驶里程 + */ + @PostMapping("/pdaQueryTyreMileage") + @ResponseBody + public AjaxResult pdaQueryTyreMileage(String tyreEpc) + { + return success(baseTyreService.queryTyreMileageSummary(tyreEpc)); + } } 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 fab9ea3f..eb6eb831 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 @@ -40,6 +40,10 @@ public class RecordTyreMileage extends BaseEntity private Long mileage; private Long mileageOld; + /** 历史段里程(差值) */ + @Excel(name = "段里程") + private Long mileageOld; + @Excel(name = "花纹深度") private String patternDepth; @@ -154,6 +158,16 @@ public class RecordTyreMileage extends BaseEntity return mileage; } + public void setMileageOld(Long mileageOld) + { + this.mileageOld = mileageOld; + } + + public Long getMileageOld() + { + return mileageOld; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RecordTyreMileageMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RecordTyreMileageMapper.java index bfb32d0a..9b7a25c2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RecordTyreMileageMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/RecordTyreMileageMapper.java @@ -61,4 +61,11 @@ public interface RecordTyreMileageMapper * @return 结果 */ public int deleteRecordTyreMileageByIds(String[] ids); + + /** + * 根据轮胎RFID查询累计行驶里程 + * @param tyreRfid + * @return + */ + public Long selectTotalMileageByTyreRfid(String tyreRfid); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IBaseTyreService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IBaseTyreService.java index 7e3dd4cc..2e7b56cd 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/IBaseTyreService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IBaseTyreService.java @@ -94,4 +94,6 @@ public interface IBaseTyreService *

*/ Map selectTyreDetailForWeb(BaseTyre baseTyre); + + Map queryTyreMileageSummary(String tyreRfid); } 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 0346acdf..805f06e3 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 @@ -513,4 +513,67 @@ public class BaseTyreServiceImpl implements IBaseTyreService } } } + + @Override + public Map queryTyreMileageSummary(String tyreRfid) { + Map result = new HashMap<>(); + BaseTyre query = new BaseTyre(); + query.setTyreEpc(tyreRfid); + BaseTyre tyre = baseTyreMapper.selectBaseTyreByEpc(query); + if (tyre == null) { + return result; + } + + result.put("tyreNo", tyre.getTyreNo()); + result.put("tyreBrand", tyre.getTyreBrand()); + result.put("carNo", tyre.getCarNo()); + result.put("wheelPostion", tyre.getWheelPostion()); + result.put("tyreType", tyre.getTyreType()); + + // 1. 获取已结算的累计里程 (record_tyre_mileage 表中的 SUM(mileage_old)) + Long settledMileage = recordTyreMileageMapper.selectTotalMileageByTyreRfid(tyreRfid); + if (settledMileage == null) { + settledMileage = 0L; + } + + // 2. 计算当前在车里程 (如果是已装车状态) + long onCarMileage = 0; + if (StringUtils.isNotEmpty(tyre.getCarNo())) { + // 查找该轮胎在该车上的最近一次装车记录 + RecordTyreInstall installQuery = new RecordTyreInstall(); + installQuery.setTyreRfid(tyreRfid); + installQuery.setCarNo(tyre.getCarNo()); + installQuery.setType("0"); // 装车 + RecordTyreInstall lastInstall = recordTyreInstallMapper.selectRecordTyreInstallStart(installQuery); + + if (lastInstall != null) { + // 查找该车辆最新的维保记录 (获取当前里程快照) + BizMaintenanceOrder orderQuery = new BizMaintenanceOrder(); + orderQuery.setPlateNumber(tyre.getCarNo()); + // 后台列表查询按时间倒序 + List orders = bizMaintenanceOrderMapper.selectBizMaintenanceOrderList(orderQuery); + if (orders != null && !orders.isEmpty()) { + BizMaintenanceOrder latestOrder = orders.get(0); + if (latestOrder.getInputMileage() != null) { + long currentCarMileage = latestOrder.getInputMileage().longValue(); + if (currentCarMileage > lastInstall.getMileage()) { + onCarMileage = currentCarMileage - lastInstall.getMileage(); + } + } + } + } + } + + result.put("settledMileage", settledMileage); + result.put("onCarMileage", onCarMileage); + result.put("totalMileage", settledMileage + onCarMileage); + + // 3. 获取历史明细 + RecordTyreMileage mileageQuery = new RecordTyreMileage(); + mileageQuery.setTyreRfid(tyreRfid); + List details = recordTyreMileageMapper.selectRecordTyreMileageList(mileageQuery); + result.put("mileageDetails", details); + + return result; + } } 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 0d4c1fdf..21e70ce9 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 @@ -165,11 +165,19 @@ public class RecordTyreInstallServiceImpl implements IRecordTyreInstallService * 计算里程差插入里程记录表 */ long between = calculateMileageDifference(recordTyreInstall.getMileage(), start.getMileage()); + + // 获取该轮胎的历史累计里程 + Long totalMileage = recordTyreMileageMapper.selectTotalMileageByTyreRfid(recordTyreInstall.getTyreRfid()); + if (totalMileage == null) { + totalMileage = 0L; + } + RecordTyreMileage recordTyreMileage =new RecordTyreMileage(); recordTyreMileage.setTyreRfid(recordTyreInstall.getTyreRfid()); recordTyreMileage.setStartTime(start.getCreateTime()); recordTyreMileage.setEndTime(DateUtils.getNowDate()); - recordTyreMileage.setMileage(between); + recordTyreMileage.setMileage(totalMileage + between); // 当前累计总里程 + recordTyreMileage.setMileageOld(between); // 本段行驶里程 recordTyreMileage.setCreateTime(DateUtils.getNowDate()); recordTyreMileage.setCreateBy(recordTyreInstall.getCreateBy()); recordTyreMileage.setRecordId(recordId); diff --git a/ruoyi-system/src/main/resources/mapper/tyre/RecordTyreMileageMapper.xml b/ruoyi-system/src/main/resources/mapper/tyre/RecordTyreMileageMapper.xml index 3c948b31..779e85bc 100644 --- a/ruoyi-system/src/main/resources/mapper/tyre/RecordTyreMileageMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/tyre/RecordTyreMileageMapper.xml @@ -10,6 +10,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -23,10 +24,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + select id, tyre_rfid, start_time, end_time, mileage, mileage_old, 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 + select COALESCE(SUM(mileage_old), 0) from record_tyre_mileage where tyre_rfid = #{tyreRfid} + +