Merge remote-tracking branch 'origin/master'

master
wanghao 7 hours ago
commit fc7664bf34

@ -280,10 +280,11 @@
recordWarehousingList=${resultMap['recordWarehousingList']}, recordWarehousingList=${resultMap['recordWarehousingList']},
recordTyreInstallList=${resultMap['recordTyreInstallList']}, recordTyreInstallList=${resultMap['recordTyreInstallList']},
recordTyreMileageList=${resultMap['recordTyreMileageList']}, recordTyreMileageList=${resultMap['recordTyreMileageList']},
maintenanceMileageList=${resultMap['maintenanceMileageList']},
totalMileage=${resultMap['totalMileage']}, totalMileage=${resultMap['totalMileage']},
currentPatternDepth=${resultMap['currentPatternDepth']}, currentPatternDepth=${resultMap['currentPatternDepth']},
bizMaintenanceOrder=${resultMap['bizMaintenanceOrder']}, bizMaintenanceOrder=${resultMap['bizMaintenanceOrder']},
bizOrderTireDetailList=${resultMap['bizMaintenanceOrder'] == null ? null : resultMap['bizMaintenanceOrder'].bizOrderTireDetailList}"> bizMaintenanceOrderList=${resultMap['bizMaintenanceOrderList']}">
<div class="summary-panel"> <div class="summary-panel">
<div class="summary-main"> <div class="summary-main">
<div> <div>
@ -334,7 +335,7 @@
</div> </div>
<div class="info-cell"> <div class="info-cell">
<div class="info-label">当前剩余花纹</div> <div class="info-label">当前剩余花纹</div>
<!-- 当前花纹取装卸记录最新一条非空 pattern_depth保持与装卸业务录入口径一致--> <!-- 当前花纹统一取保养记录最新花纹,避免装卸记录和维保记录口径混用-->
<div class="info-value" th:text="${#strings.isEmpty(currentPatternDepth) ? '-' : currentPatternDepth + ' mm'}">-</div> <div class="info-value" th:text="${#strings.isEmpty(currentPatternDepth) ? '-' : currentPatternDepth + ' mm'}">-</div>
</div> </div>
<div class="info-cell"> <div class="info-cell">
@ -388,8 +389,8 @@
<span class="life-count" th:text="${'出入库记录:' + (#lists.isEmpty(recordWarehousingList) ? 0 : #lists.size(recordWarehousingList))}">出入库记录0</span> <span class="life-count" th:text="${'出入库记录:' + (#lists.isEmpty(recordWarehousingList) ? 0 : #lists.size(recordWarehousingList))}">出入库记录0</span>
<span class="life-count" th:text="${'装卸车记录:' + (#lists.isEmpty(recordTyreInstallList) ? 0 : #lists.size(recordTyreInstallList))}">装卸车记录0</span> <span class="life-count" th:text="${'装卸车记录:' + (#lists.isEmpty(recordTyreInstallList) ? 0 : #lists.size(recordTyreInstallList))}">装卸车记录0</span>
<span class="life-count" th:text="${'里程使用记录:' + (#lists.isEmpty(recordTyreMileageList) ? 0 : #lists.size(recordTyreMileageList))}">里程使用记录0</span> <span class="life-count" th:text="${'里程使用记录:' + (#lists.isEmpty(recordTyreMileageList) ? 0 : #lists.size(recordTyreMileageList))}">里程使用记录0</span>
<span class="life-count" th:text="${'维保工单:' + (bizMaintenanceOrder == null ? 0 : 1)}">维保工单0</span> <span class="life-count" th:text="${'保养记录:' + (#lists.isEmpty(maintenanceMileageList) ? 0 : #lists.size(maintenanceMileageList))}">保养记录0</span>
<span class="life-count" th:if="${bizMaintenanceOrder != null}" th:text="${'维保轮胎明细:' + (#lists.isEmpty(bizOrderTireDetailList) ? 0 : #lists.size(bizOrderTireDetailList))}">维保轮胎明细0</span> <span class="life-count" th:text="${'维保工单:' + (#lists.isEmpty(bizMaintenanceOrderList) ? 0 : #lists.size(bizMaintenanceOrderList))}">维保工单0</span>
</div> </div>
<div class="life-section" th:if="${!#lists.isEmpty(recordWarehousingList)}"> <div class="life-section" th:if="${!#lists.isEmpty(recordWarehousingList)}">
@ -465,10 +466,34 @@
</ul> </ul>
</div> </div>
<div class="life-section" th:if="${bizMaintenanceOrder != null}"> <div class="life-section" th:if="${!#lists.isEmpty(maintenanceMileageList)}">
<div class="life-section-title">保养记录</div>
<ul class="life-list">
<li class="life-item is-maintenance" th:each="item : ${maintenanceMileageList}">
<span class="life-dot"></span>
<div class="life-title-row">
<div class="life-title">轮胎保养</div>
<div class="life-time" th:text="${item.createTime == null ? '-' : #dates.format(item.createTime, 'yyyy-MM-dd HH:mm:ss')}">-</div>
</div>
<div class="life-meta">
<div th:text="${#strings.isEmpty(item.plateNumber) ? '车牌号:-' : '车牌号:' + item.plateNumber}">车牌号:-</div>
<div th:text="${item.mileage == null ? '行驶里程:-' : '行驶里程:' + item.mileage + ' km'}">行驶里程:-</div>
<div th:text="${#strings.isEmpty(item.patternDepth) ? '当前剩余花纹:-' : '当前剩余花纹:' + item.patternDepth + ' mm'}">当前剩余花纹:-</div>
<!-- 磨损数由后端按当前保养和上一条有效保养花纹相减,首条或脏数据不强行推算。 -->
<div th:text="${#strings.isEmpty(item.wearDepth) ? '磨损数:-' : '磨损数:' + item.wearDepth + ' mm'}">磨损数:-</div>
<div th:text="${item.startTime == null ? '开始时间:-' : '开始时间:' + #dates.format(item.startTime, 'yyyy-MM-dd HH:mm:ss')}">开始时间:-</div>
<div th:text="${item.endTime == null ? '结束时间:-' : '结束时间:' + #dates.format(item.endTime, 'yyyy-MM-dd HH:mm:ss')}">结束时间:-</div>
<div th:text="${#strings.isEmpty(item.createBy) ? '记录人:-' : '记录人:' + item.createBy}">记录人:-</div>
<div class="life-remark" th:if="${!#strings.isEmpty(item.remark)}" th:text="${'备注:' + item.remark}">备注:-</div>
</div>
</li>
</ul>
</div>
<div class="life-section" th:if="${!#lists.isEmpty(bizMaintenanceOrderList)}">
<div class="life-section-title">维保工单</div> <div class="life-section-title">维保工单</div>
<ul class="life-list"> <ul class="life-list">
<li class="life-item is-maintenance"> <li class="life-item is-maintenance" th:each="bizMaintenanceOrder : ${bizMaintenanceOrderList}">
<span class="life-dot"></span> <span class="life-dot"></span>
<div class="life-title-row"> <div class="life-title-row">
<div class="life-title"> <div class="life-title">
@ -507,9 +532,9 @@
<div class="life-remark" th:if="${!#strings.isEmpty(bizMaintenanceOrder.remark)}" th:text="${'备注:' + bizMaintenanceOrder.remark}">备注:-</div> <div class="life-remark" th:if="${!#strings.isEmpty(bizMaintenanceOrder.remark)}" th:text="${'备注:' + bizMaintenanceOrder.remark}">备注:-</div>
<div class="life-remark">如该工单涉及多条轮胎明细,请以维保工单详情页为完整明细来源。</div> <div class="life-remark">如该工单涉及多条轮胎明细,请以维保工单详情页为完整明细来源。</div>
<div class="tire-detail-list" th:if="${!#lists.isEmpty(bizOrderTireDetailList)}"> <div class="tire-detail-list" th:if="${!#lists.isEmpty(bizMaintenanceOrder.bizOrderTireDetailList)}">
<div class="tire-detail-title">轮胎执行明细</div> <div class="tire-detail-title">轮胎执行明细</div>
<div class="tire-detail-row" th:each="detail : ${bizOrderTireDetailList}"> <div class="tire-detail-row" th:each="detail : ${bizMaintenanceOrder.bizOrderTireDetailList}">
<div th:text="${#strings.isEmpty(detail.dataType) ? '动作:-' : '动作:' + detail.dataType}">动作:-</div> <div th:text="${#strings.isEmpty(detail.dataType) ? '动作:-' : '动作:' + detail.dataType}">动作:-</div>
<div th:text="${#strings.isEmpty(detail.positionName) ? '轮位:-' : '轮位:' + detail.positionName}">轮位:-</div> <div th:text="${#strings.isEmpty(detail.positionName) ? '轮位:-' : '轮位:' + detail.positionName}">轮位:-</div>
<div th:text="${#strings.isEmpty(detail.tireCode) ? '轮胎编号:-' : '轮胎编号:' + detail.tireCode}">轮胎编号:-</div> <div th:text="${#strings.isEmpty(detail.tireCode) ? '轮胎编号:-' : '轮胎编号:' + detail.tireCode}">轮胎编号:-</div>
@ -525,7 +550,7 @@
</ul> </ul>
</div> </div>
<div class="empty-life" th:if="${#lists.isEmpty(recordWarehousingList) and #lists.isEmpty(recordTyreInstallList) and #lists.isEmpty(recordTyreMileageList) and bizMaintenanceOrder == null}"> <div class="empty-life" th:if="${#lists.isEmpty(recordWarehousingList) and #lists.isEmpty(recordTyreInstallList) and #lists.isEmpty(recordTyreMileageList) and #lists.isEmpty(maintenanceMileageList) and #lists.isEmpty(bizMaintenanceOrderList)}">
暂无生命周期记录 暂无生命周期记录
</div> </div>
</div> </div>

@ -7,9 +7,9 @@ import java.util.List;
/** /**
* DTO * DTO
* <p> * <p>
* *
* 线 * 线
* *
* </p> * </p>
*/ */
public class CarLifecycleDTO implements Serializable public class CarLifecycleDTO implements Serializable
@ -22,9 +22,6 @@ public class CarLifecycleDTO implements Serializable
/** 当前装车轮胎快照,数量较少(通常不超过车辆轮位数),随概要一次返回用于首屏快速展示。 */ /** 当前装车轮胎快照,数量较少(通常不超过车辆轮位数),随概要一次返回用于首屏快速展示。 */
private List<CarMountedTyreDTO> mountedTyres = new ArrayList<>(); private List<CarMountedTyreDTO> mountedTyres = new ArrayList<>();
/** 最近事件时间线,聚合装卸与维保两类关键事件,按时间倒序排列,用于快速定位最新动作。 */
private List<CarLifecycleEventDTO> recentEvents = new ArrayList<>();
/** 车辆维保工单历史,随生命周期聚合接口返回,避免页面重复调用单独的维保列表接口。 */ /** 车辆维保工单历史,随生命周期聚合接口返回,避免页面重复调用单独的维保列表接口。 */
private List<CarMaintenanceLifecycleDTO> maintenanceList = new ArrayList<>(); private List<CarMaintenanceLifecycleDTO> maintenanceList = new ArrayList<>();
@ -60,16 +57,6 @@ public class CarLifecycleDTO implements Serializable
this.mountedTyres = mountedTyres; this.mountedTyres = mountedTyres;
} }
public List<CarLifecycleEventDTO> getRecentEvents()
{
return recentEvents;
}
public void setRecentEvents(List<CarLifecycleEventDTO> recentEvents)
{
this.recentEvents = recentEvents;
}
public List<CarMaintenanceLifecycleDTO> getMaintenanceList() public List<CarMaintenanceLifecycleDTO> getMaintenanceList()
{ {
return maintenanceList; return maintenanceList;

@ -1,304 +0,0 @@
package com.ruoyi.system.domain;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* DTO
* <p>
* 线
* 便eventType
* INSTALL MAINTENANCE
* </p>
*/
public class CarLifecycleEventDTO implements Serializable
{
private static final long serialVersionUID = 1L;
/** 事件类型字典值区分数据来源。例如INSTALL轮胎装卸、MAINTENANCE维保工单。 */
private String eventType;
/** 事件发生时间,统一取各来源表中的操作/创建时间,用于时间轴排序。 */
private Date eventTime;
/** 轮胎RFID编码仅在事件类型为轮胎装卸时有效。 */
private String tyreRfid;
/** 轮胎编号,业务展示用。 */
private String tyreNo;
/** 轮胎自编号,与 tyreNo 区分,用于内部管理。 */
private String selfNo;
/** 轮胎品牌。 */
private String tyreBrand;
/** 轮胎规格型号。 */
private String tyreModel;
/** 轮位名称,例如:左前轮、右后第二轴等,仅在装卸事件中有效。 */
private String wheelPostion;
/** 事件关联的行驶里程(字符串形式,保留原始录入格式)。 */
private String mileage;
/** 事件关联的花纹深度(毫米),用于磨损评估。 */
private String patternDepth;
/** 状态字典值,例如:工单状态、轮胎状态等,视 eventType 而定。 */
private String status;
/** 工单编号,仅在事件类型为维保工单时有效。 */
private String orderNo;
/** 类型编码,例如:维保类型字典值、操作类型字典值。 */
private String typeCode;
/** 修理厂/工厂名称,仅在维保工单事件中有效。 */
private String factoryName;
/** 录入里程(数值型),维保工单或质检记录中由用户录入的当前总里程。 */
private BigDecimal inputMileage;
/** 上次里程(数值型),维保工单中记录的上一次保养时的里程。 */
private BigDecimal lastMileage;
/** 保养/维修日期,维保工单事件中的计划或实际执行日期。 */
private Date maintainDate;
/** 事件描述/故障描述,维保工单中的故障现象或备注信息。 */
private String description;
/** 质检结果,仅在轮胎质检相关事件中有效。 */
private String result;
/** 维保/检测类型字典值,例如:一级保养、二级保养、日常巡检。 */
private String maintenanceType;
/** 轮胎里程记录开始时间,仅在里程类事件中有效。 */
private Date startTime;
/** 轮胎里程记录结束时间,仅在里程类事件中有效。 */
private Date endTime;
public String getEventType()
{
return eventType;
}
public void setEventType(String eventType)
{
this.eventType = eventType;
}
public Date getEventTime()
{
return eventTime;
}
public void setEventTime(Date eventTime)
{
this.eventTime = eventTime;
}
public String getTyreRfid()
{
return tyreRfid;
}
public void setTyreRfid(String tyreRfid)
{
this.tyreRfid = tyreRfid;
}
public String getTyreNo()
{
return tyreNo;
}
public void setTyreNo(String tyreNo)
{
this.tyreNo = tyreNo;
}
public String getSelfNo()
{
return selfNo;
}
public void setSelfNo(String selfNo)
{
this.selfNo = selfNo;
}
public String getTyreBrand()
{
return tyreBrand;
}
public void setTyreBrand(String tyreBrand)
{
this.tyreBrand = tyreBrand;
}
public String getTyreModel()
{
return tyreModel;
}
public void setTyreModel(String tyreModel)
{
this.tyreModel = tyreModel;
}
public String getWheelPostion()
{
return wheelPostion;
}
public void setWheelPostion(String wheelPostion)
{
this.wheelPostion = wheelPostion;
}
public String getMileage()
{
return mileage;
}
public void setMileage(String mileage)
{
this.mileage = mileage;
}
public String getPatternDepth()
{
return patternDepth;
}
public void setPatternDepth(String patternDepth)
{
this.patternDepth = patternDepth;
}
public String getStatus()
{
return status;
}
public void setStatus(String status)
{
this.status = status;
}
public String getOrderNo()
{
return orderNo;
}
public void setOrderNo(String orderNo)
{
this.orderNo = orderNo;
}
public String getTypeCode()
{
return typeCode;
}
public void setTypeCode(String typeCode)
{
this.typeCode = typeCode;
}
public String getFactoryName()
{
return factoryName;
}
public void setFactoryName(String factoryName)
{
this.factoryName = factoryName;
}
public BigDecimal getInputMileage()
{
return inputMileage;
}
public void setInputMileage(BigDecimal inputMileage)
{
this.inputMileage = inputMileage;
}
public BigDecimal getLastMileage()
{
return lastMileage;
}
public void setLastMileage(BigDecimal lastMileage)
{
this.lastMileage = lastMileage;
}
public Date getMaintainDate()
{
return maintainDate;
}
public void setMaintainDate(Date maintainDate)
{
this.maintainDate = maintainDate;
}
public String getDescription()
{
return description;
}
public void setDescription(String description)
{
this.description = description;
}
public String getResult()
{
return result;
}
public void setResult(String result)
{
this.result = result;
}
public String getMaintenanceType()
{
return maintenanceType;
}
public void setMaintenanceType(String maintenanceType)
{
this.maintenanceType = maintenanceType;
}
public Date getStartTime()
{
return startTime;
}
public void setStartTime(Date startTime)
{
this.startTime = startTime;
}
public Date getEndTime()
{
return endTime;
}
public void setEndTime(Date endTime)
{
this.endTime = endTime;
}
}

@ -38,6 +38,9 @@ public class CarMileageLifecycleDTO implements Serializable
/** 统计结束时的花纹深度(毫米),用于与起始深度对比评估磨损速率。 */ /** 统计结束时的花纹深度(毫米),用于与起始深度对比评估磨损速率。 */
private String patternDepth; private String patternDepth;
/** 里程记录类型,数据库 record_type 为 varchar对应实体使用 String。 */
private String recordType;
public Long getId() public Long getId()
{ {
return id; return id;
@ -117,4 +120,14 @@ public class CarMileageLifecycleDTO implements Serializable
{ {
this.patternDepth = patternDepth; this.patternDepth = patternDepth;
} }
public String getRecordType()
{
return recordType;
}
public void setRecordType(String recordType)
{
this.recordType = recordType;
}
} }

@ -63,7 +63,13 @@ public class RecordTyreMileage extends BaseEntity
this.recordType = recordType; this.recordType = recordType;
} }
public Long getMileageOld() {
return mileageOld;
}
public void setMileageOld(Long mileageOld) {
this.mileageOld = mileageOld;
}
public String getPlateNumber() { public String getPlateNumber() {
return plateNumber; return plateNumber;
@ -111,82 +117,74 @@ public class RecordTyreMileage extends BaseEntity
this.id = id; this.id = id;
} }
public Long getId() public Long getId()
{ {
return id; return id;
} }
public void setTyreRfid(String tyreRfid) public void setTyreRfid(String tyreRfid)
{ {
this.tyreRfid = tyreRfid; this.tyreRfid = tyreRfid;
} }
public String getTyreRfid() public String getTyreRfid()
{ {
return tyreRfid; return tyreRfid;
} }
public void setStartTime(Date startTime) public void setStartTime(Date startTime)
{ {
this.startTime = startTime; this.startTime = startTime;
} }
public Date getStartTime() public Date getStartTime()
{ {
return startTime; return startTime;
} }
public void setEndTime(Date endTime) public void setEndTime(Date endTime)
{ {
this.endTime = endTime; this.endTime = endTime;
} }
public Date getEndTime() public Date getEndTime()
{ {
return endTime; return endTime;
} }
public void setMileage(Long mileage) public void setMileage(Long mileage)
{ {
this.mileage = mileage; this.mileage = mileage;
} }
public Long getMileage() public Long getMileage()
{ {
return mileage; return mileage;
} }
public void setMileageOld(Long mileageOld)
{
this.mileageOld = mileageOld;
}
public Long getMileageOld()
{
return mileageOld;
}
@Override @Override
public String toString() { public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId()) .append("id", getId())
.append("tyreRfid", getTyreRfid()) .append("tyreRfid", getTyreRfid())
.append("startTime", getStartTime()) .append("startTime", getStartTime())
.append("endTime", getEndTime()) .append("endTime", getEndTime())
.append("mileage", getMileage()) .append("mileage", getMileage())
.append("plateNumber", getPlateNumber()) .append("plateNumber", getPlateNumber())
.append("createBy", getCreateBy()) .append("recordType", getRecordType())
.append("createTime", getCreateTime()) .append("createBy", getCreateBy())
.append("updateBy", getUpdateBy()) .append("createTime", getCreateTime())
.append("updateTime", getUpdateTime()) .append("updateBy", getUpdateBy())
.append("remark", getRemark()) .append("updateTime", getUpdateTime())
.toString();
.append("remark", getRemark())
.toString();
} }
} }

@ -2,7 +2,6 @@ package com.ruoyi.system.mapper;
import java.util.List; import java.util.List;
import com.ruoyi.system.domain.CarCheckLifecycleDTO; import com.ruoyi.system.domain.CarCheckLifecycleDTO;
import com.ruoyi.system.domain.CarLifecycleEventDTO;
import com.ruoyi.system.domain.CarLifecycleQuery; import com.ruoyi.system.domain.CarLifecycleQuery;
import com.ruoyi.system.domain.CarLifecycleSummaryDTO; import com.ruoyi.system.domain.CarLifecycleSummaryDTO;
import com.ruoyi.system.domain.CarMaintenanceLifecycleDTO; import com.ruoyi.system.domain.CarMaintenanceLifecycleDTO;
@ -16,7 +15,7 @@ import com.ruoyi.system.domain.CarTyreInstallLifecycleDTO;
* *
* *
* 1. carNo join sys_dept {@link DataScope} * 1. carNo join sys_dept {@link DataScope}
* 2. selectLifecycleCar / selectMountedTyres / selectRecentEvents / count*select*List * 2. selectLifecycleCar / selectMountedTyres / selectMaintenanceList / count*select*List
* 3. 使 carId * 3. 使 carId
* </p> * </p>
*/ */
@ -46,18 +45,6 @@ public interface BaseCarLifecycleMapper
*/ */
public List<CarMountedTyreDTO> selectMountedTyres(CarLifecycleQuery query); public List<CarMountedTyreDTO> selectMountedTyres(CarLifecycleQuery query);
/**
* 线TopN
* <p>
* N 10
*
* </p>
*
* @param query carId
* @return
*/
public List<CarLifecycleEventDTO> selectRecentEvents(CarLifecycleQuery query);
/** /**
* *
* <p> * <p>

@ -4,9 +4,11 @@ package com.ruoyi.system.mapper;
import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.system.domain.BaseTyre; import com.ruoyi.system.domain.BaseTyre;
import com.ruoyi.system.domain.RecordTyreMileage;
import com.ruoyi.system.domain.vo.BaseTyreVo; import com.ruoyi.system.domain.vo.BaseTyreVo;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -104,4 +106,28 @@ public interface BaseTyreMapper
List<BaseTyre> selectCarNoByTyreEpcs(List<String> tyreEpcs); List<BaseTyre> selectCarNoByTyreEpcs(List<String> tyreEpcs);
double selectSumMileageByRFID(@Param("tyreEpc") String tyreEpc); double selectSumMileageByRFID(@Param("tyreEpc") String tyreEpc);
/**
* RFID record_type
*
* @param tyreEpc RFID
* @return
*/
BigDecimal selectTotalMileageByRFID(@Param("tyreEpc") String tyreEpc);
/**
* RFID
*
* @param tyreEpc RFID
* @return
*/
List<String> selectRecentMaintenancePatternDepthByRFID(@Param("tyreEpc") String tyreEpc);
/**
* RFID
*
* @param tyreEpc RFID
* @return
*/
List<RecordTyreMileage> selectMaintenanceMileageListByRFID(@Param("tyreEpc") String tyreEpc);
} }

@ -51,7 +51,6 @@ public class BaseCarLifecycleServiceImpl implements IBaseCarLifecycleService
* *
* - 线 * - 线
* - mountedTyres * - mountedTyres
* - 线recentEvents
* - maintenanceList * - maintenanceList
* - installCount / maintenanceCount / checkCount / mileageCount * - installCount / maintenanceCount / checkCount / mileageCount
* *
@ -73,19 +72,17 @@ public class BaseCarLifecycleServiceImpl implements IBaseCarLifecycleService
dto.setCar(car); dto.setCar(car);
// 4. 查询当前装车的轮胎列表 // 4. 查询当前装车的轮胎列表
dto.setMountedTyres(baseCarLifecycleMapper.selectMountedTyres(query)); dto.setMountedTyres(baseCarLifecycleMapper.selectMountedTyres(query));
// 5. 查询最近发生的事件时间线 // 5. 当前车辆生命周期页面只展示维保工单,避免查询未渲染的装卸/质检/里程聚合事件。
dto.setRecentEvents(baseCarLifecycleMapper.selectRecentEvents(query));
// 6. 查询维保工单历史列表
dto.setMaintenanceList(baseCarLifecycleMapper.selectMaintenanceList(query)); dto.setMaintenanceList(baseCarLifecycleMapper.selectMaintenanceList(query));
// 7. 统计装卸记录总条数 // 6. 统计装卸记录总条数
dto.setInstallCount(baseCarLifecycleMapper.countInstallRecords(query)); dto.setInstallCount(baseCarLifecycleMapper.countInstallRecords(query));
// 8. 统计维保工单总条数 // 7. 统计维保工单总条数
dto.setMaintenanceCount(baseCarLifecycleMapper.countMaintenanceOrders(query)); dto.setMaintenanceCount(baseCarLifecycleMapper.countMaintenanceOrders(query));
// 9. 统计质检记录总条数 // 8. 统计质检记录总条数
dto.setCheckCount(baseCarLifecycleMapper.countCheckRecords(query)); dto.setCheckCount(baseCarLifecycleMapper.countCheckRecords(query));
// 10. 统计里程记录总条数 // 9. 统计里程记录总条数
dto.setMileageCount(baseCarLifecycleMapper.countMileageRecords(query)); dto.setMileageCount(baseCarLifecycleMapper.countMileageRecords(query));
// 11. 返回聚合后的生命周期数据 // 10. 返回聚合后的生命周期数据
return dto; return dto;
} }

@ -33,7 +33,7 @@ import static com.ruoyi.common.utils.ShiroUtils.getLoginName;
/** /**
* Service * Service
* *
* @author highway * @author highway
* @date 2025-12-16 * @date 2025-12-16
*/ */
@ -60,7 +60,7 @@ public class BaseTyreServiceImpl implements IBaseTyreService
/** /**
* *
* *
* @param tyreId ID * @param tyreId ID
* @return * @return
*/ */
@ -72,7 +72,7 @@ public class BaseTyreServiceImpl implements IBaseTyreService
/** /**
* *
* *
* @param baseTyre * @param baseTyre
* @return * @return
*/ */
@ -85,7 +85,7 @@ public class BaseTyreServiceImpl implements IBaseTyreService
/** /**
* *
* *
* @param baseTyre * @param baseTyre
* @return * @return
*/ */
@ -125,7 +125,7 @@ public class BaseTyreServiceImpl implements IBaseTyreService
/** /**
* *
* *
* @param baseTyre * @param baseTyre
* @return * @return
*/ */
@ -260,7 +260,7 @@ public class BaseTyreServiceImpl implements IBaseTyreService
@Override @Override
@DataScope(deptAlias = "d", userAlias = "u") @DataScope(deptAlias = "d", userAlias = "u")
public List<Map> vTyreStockSummary(SysDept sysDept) { public List<Map> vTyreStockSummary(SysDept sysDept) {
List<Map> mapList = baseTyreMapper.vTyreStockSummary(sysDept); List<Map> mapList = baseTyreMapper.vTyreStockSummary(sysDept);
return mapList; return mapList;
} }
@ -331,6 +331,8 @@ public class BaseTyreServiceImpl implements IBaseTyreService
// 3. 初始化里程相关字段默认值,确保返回结构完整 // 3. 初始化里程相关字段默认值,确保返回结构完整
map.put("recordTyreMileageList", new ArrayList<>()); map.put("recordTyreMileageList", new ArrayList<>());
map.put("maintenanceMileageList", new ArrayList<>());
map.put("bizMaintenanceOrderList", new ArrayList<>());
map.put("totalMileage", null); map.put("totalMileage", null);
map.put("currentPatternDepth", null); map.put("currentPatternDepth", null);
@ -350,42 +352,59 @@ public class BaseTyreServiceImpl implements IBaseTyreService
// 原 PDA 方法历史上会在 EPC 为空时按空条件查流转表Web 详情必须置空,避免误把全量历史展示给用户。 // 原 PDA 方法历史上会在 EPC 为空时按空条件查流转表Web 详情必须置空,避免误把全量历史展示给用户。
map.put("recordWarehousingList", new ArrayList<>()); map.put("recordWarehousingList", new ArrayList<>());
map.put("recordTyreInstallList", new ArrayList<>()); map.put("recordTyreInstallList", new ArrayList<>());
map.put("bizMaintenanceOrder", null);
return map; return map;
} }
// 7. 转换安装记录列表并计算当前花纹深度 // 7. Web 详情按“保养”记录作为花纹口径,避免装卸记录和维保记录混用导致当前花纹漂移。
List<RecordTyreInstall> installList = castInstallList(map.get("recordTyreInstallList")); List<String> recentMaintenanceDepthList = baseTyreMapper.selectRecentMaintenancePatternDepthByRFID(tyreRfid);
map.put("currentPatternDepth", TyreLifecycleCalc.currentPatternDepth(installList)); if (!StringUtils.isEmpty(recentMaintenanceDepthList))
{
map.put("currentPatternDepth", normalizeDepthText(recentMaintenanceDepthList.get(0)));
}
List<RecordTyreMileage> maintenanceMileageList = baseTyreMapper.selectMaintenanceMileageListByRFID(tyreRfid);
if (maintenanceMileageList != null && !maintenanceMileageList.isEmpty())
{
fillMissingMileagePlateNumber(maintenanceMileageList);
}
map.put("maintenanceMileageList", buildMaintenanceMileageVoList(maintenanceMileageList));
putMaintenanceOrderList(map, resultBase);
// 8. 构造里程查询对象并执行查询 // 8. 轮胎总行驶里程直接由 Mapper 聚合 record_tyre_mileage.mileage不按 record_type 过滤。
BigDecimal totalMileage = baseTyreMapper.selectTotalMileageByRFID(tyreRfid);
map.put("totalMileage", totalMileage == null ? null : totalMileage.stripTrailingZeros().toPlainString());
// 9. 构造里程查询对象并执行查询
RecordTyreMileage query = new RecordTyreMileage(); RecordTyreMileage query = new RecordTyreMileage();
query.setTyreRfid(tyreRfid); query.setTyreRfid(tyreRfid);
List<RecordTyreMileage> mileageList = recordTyreMileageMapper.selectRecordTyreMileageList(query); List<RecordTyreMileage> mileageList = recordTyreMileageMapper.selectRecordTyreMileageList(query);
// 9. 若无里程记录,直接返回当前已组装的数据 // 10. 若无里程记录,直接返回当前已组装的数据
if (mileageList == null || mileageList.isEmpty()) if (mileageList == null || mileageList.isEmpty())
{ {
return map; return map;
} }
// 10. 老数据可能未写 record_tyre_mileage.plate_number按需补查车牌避免页面层猜测或全量查询。 // 11. 老数据可能未写 record_tyre_mileage.plate_number按需补查车牌避免页面层猜测或全量查询。
fillMissingMileagePlateNumber(mileageList); fillMissingMileagePlateNumber(mileageList);
// 10. 解析初始花纹深度,并计算各段磨损量 // 12. 解析初始花纹深度,并计算各段磨损量
BigDecimal initialDepth = TyreLifecycleCalc.parseDepth(resultBase.getPatternDepth()); BigDecimal initialDepth = TyreLifecycleCalc.parseDepth(resultBase.getPatternDepth());
Map<Long, String> wearMap = TyreLifecycleCalc.computeSegmentWears(initialDepth, mileageList); Map<Long, String> wearMap = TyreLifecycleCalc.computeSegmentWears(initialDepth, mileageList);
// 11. 初始化总里程累加器和标志位
BigDecimal totalMileage = BigDecimal.ZERO;
boolean hasMileage = false;
// 12. 按开始时间降序、ID 降序对里程记录排序,确保时间线正确 // 13. 按开始时间降序、ID 降序对里程记录排序,确保时间线正确
mileageList.sort(Comparator mileageList.sort(Comparator
.comparing(RecordTyreMileage::getStartTime, Comparator.nullsLast(Comparator.reverseOrder())) .comparing(RecordTyreMileage::getStartTime, Comparator.nullsLast(Comparator.reverseOrder()))
.thenComparing(RecordTyreMileage::getId, Comparator.nullsLast(Comparator.reverseOrder()))); .thenComparing(RecordTyreMileage::getId, Comparator.nullsLast(Comparator.reverseOrder())));
// 13. 遍历里程记录,构造前端展示用的 VO 列表 // 14. 遍历里程记录,构造前端展示用的 VO 列表
List<Map<String, Object>> mileageVoList = new ArrayList<>(mileageList.size()); List<Map<String, Object>> mileageVoList = new ArrayList<>(mileageList.size());
for (RecordTyreMileage item : mileageList) for (RecordTyreMileage item : mileageList)
{ {
if ("保养".equals(item.getRecordType()))
{
// 保养记录已在“保养记录”生命周期块按花纹磨损口径单独展示,避免同一条记录在里程块重复出现。
continue;
}
Map<String, Object> vo = new HashMap<>(); Map<String, Object> vo = new HashMap<>();
vo.put("id", item.getId()); // 记录主键 vo.put("id", item.getId()); // 记录主键
vo.put("tyreRfid", item.getTyreRfid()); // 轮胎 RFID vo.put("tyreRfid", item.getTyreRfid()); // 轮胎 RFID
@ -401,24 +420,168 @@ public class BaseTyreServiceImpl implements IBaseTyreService
vo.put("tyreBrand", item.getTyreBrand()); // 轮胎品牌 vo.put("tyreBrand", item.getTyreBrand()); // 轮胎品牌
vo.put("tyreNo", item.getTyreNo()); // 轮胎编号 vo.put("tyreNo", item.getTyreNo()); // 轮胎编号
vo.put("plateNumber", item.getPlateNumber()); // 卸胎时的车牌快照,用于详情页按里程段追溯车辆归属 vo.put("plateNumber", item.getPlateNumber()); // 卸胎时的车牌快照,用于详情页按里程段追溯车辆归属
vo.put("recordType", item.getRecordType()); // 记录类型,便于页面区分装胎、卸胎、保养来源
vo.put("wearDepth", item.getId() == null ? null : wearMap.get(item.getId())); // 磨损深度(从计算结果取) vo.put("wearDepth", item.getId() == null ? null : wearMap.get(item.getId())); // 磨损深度(从计算结果取)
// 14. 累加有效里程值mileage 为 Long 类型,表示该段 km 差值)
if (item.getMileage() != null)
{
// mileage 实体类型是 Long表示该程 km 差值,直接累加可避免 varchar 花纹解析逻辑误入里程路径。
totalMileage = totalMileage.add(BigDecimal.valueOf(item.getMileage()));
hasMileage = true;
}
mileageVoList.add(vo); mileageVoList.add(vo);
} }
// 15. 将组装好的里程列表和总里程写入返回 Map // 15. 将组装好的里程列表写入返回 Map
map.put("recordTyreMileageList", mileageVoList); map.put("recordTyreMileageList", mileageVoList);
map.put("totalMileage", hasMileage ? totalMileage.stripTrailingZeros().toPlainString() : null);
// 16. 返回完整的轮胎详情数据 // 16. 返回完整的轮胎详情数据
return map; return map;
} }
private List<Map<String, Object>> buildMaintenanceMileageVoList(List<RecordTyreMileage> maintenanceMileageList)
{
List<Map<String, Object>> voList = new ArrayList<>();
if (maintenanceMileageList == null || maintenanceMileageList.isEmpty())
{
return voList;
}
Map<Long, String> wearMap = computeMaintenanceWearMap(maintenanceMileageList);
List<RecordTyreMileage> sortedList = new ArrayList<>();
for (RecordTyreMileage item : maintenanceMileageList)
{
if (item != null)
{
sortedList.add(item);
}
}
sortedList.sort(Comparator
.comparing(this::maintenanceRecordTime, Comparator.nullsLast(Comparator.reverseOrder()))
.thenComparing(RecordTyreMileage::getId, Comparator.nullsLast(Comparator.reverseOrder())));
for (RecordTyreMileage item : sortedList)
{
Map<String, Object> vo = new HashMap<>();
vo.put("id", item.getId());
vo.put("tyreRfid", item.getTyreRfid());
vo.put("startTime", item.getStartTime());
vo.put("endTime", item.getEndTime());
vo.put("mileage", item.getMileage());
vo.put("patternDepth", normalizeDepthText(item.getPatternDepth()));
vo.put("plateNumber", item.getPlateNumber());
vo.put("recordId", item.getRecordId());
vo.put("recordType", item.getRecordType());
vo.put("createBy", item.getCreateBy());
vo.put("createTime", item.getCreateTime());
vo.put("updateBy", item.getUpdateBy());
vo.put("updateTime", item.getUpdateTime());
vo.put("remark", item.getRemark());
// 磨损数只比较当前保养和上一条“有效花纹”保养,空值/脏值不参与,避免把异常录入放大到页面。
vo.put("wearDepth", item.getId() == null ? null : wearMap.get(item.getId()));
voList.add(vo);
}
return voList;
}
private Map<Long, String> computeMaintenanceWearMap(List<RecordTyreMileage> maintenanceMileageList)
{
Map<Long, String> wearMap = new HashMap<>();
List<RecordTyreMileage> sortedList = new ArrayList<>();
for (RecordTyreMileage item : maintenanceMileageList)
{
if (item != null)
{
sortedList.add(item);
}
}
sortedList.sort(Comparator
.comparing(this::maintenanceRecordTime, Comparator.nullsLast(Comparator.naturalOrder()))
.thenComparing(RecordTyreMileage::getId, Comparator.nullsLast(Comparator.naturalOrder())));
BigDecimal previousDepth = null;
for (RecordTyreMileage item : sortedList)
{
BigDecimal currentDepth = TyreLifecycleCalc.parseDepth(item.getPatternDepth());
if (currentDepth == null)
{
continue;
}
if (previousDepth != null && item.getId() != null)
{
wearMap.put(item.getId(), formatDecimal(previousDepth.subtract(currentDepth)));
}
previousDepth = currentDepth;
}
return wearMap;
}
private void putMaintenanceOrderList(Map map, BaseTyre resultBase)
{
if (resultBase.getTyreId() == null)
{
map.put("bizMaintenanceOrder", null);
return;
}
BizOrderTireDetail query = new BizOrderTireDetail();
query.setTireId(resultBase.getTyreId());
List<BizOrderTireDetail> detailList = bizOrderTireDetailMapper.selectBizOrderTireDetailList(query);
if (detailList == null || detailList.isEmpty())
{
map.put("bizMaintenanceOrder", null);
return;
}
Map<Long, List<BizOrderTireDetail>> detailMap = new LinkedHashMap<>();
for (BizOrderTireDetail detail : detailList)
{
if (detail != null && detail.getOrderId() != null)
{
detailMap.computeIfAbsent(detail.getOrderId(), key -> new ArrayList<>()).add(detail);
}
}
List<BizMaintenanceOrder> orderList = new ArrayList<>();
for (Map.Entry<Long, List<BizOrderTireDetail>> entry : detailMap.entrySet())
{
BizMaintenanceOrder order = bizMaintenanceOrderMapper.selectBizMaintenanceOrderByOrderId(entry.getKey());
if (order == null)
{
continue;
}
order.setBizOrderTireDetailList(entry.getValue());
if (order.getLastMileage() == null)
{
order.setLastMileage(BigDecimal.ZERO);
}
orderList.add(order);
}
orderList.sort(Comparator
.comparing(BizMaintenanceOrder::getMaintainDate, Comparator.nullsLast(Comparator.reverseOrder()))
.thenComparing(BizMaintenanceOrder::getOrderId, Comparator.nullsLast(Comparator.reverseOrder())));
map.put("bizMaintenanceOrderList", orderList);
// 保留旧 key 便于已有模板或脚本兜底,但 Web 新模板会按列表展示全部维保工单。
map.put("bizMaintenanceOrder", orderList.isEmpty() ? null : orderList.get(0));
}
private Date maintenanceRecordTime(RecordTyreMileage item)
{
if (item == null)
{
return null;
}
// 保养记录的“最新”优先按创建时间判定;历史补录缺 create_time 时再退回业务开始时间。
return item.getCreateTime() != null ? item.getCreateTime() : item.getStartTime();
}
private String normalizeDepthText(String value)
{
if (StringUtils.isBlank(value))
{
return null;
}
return value.trim();
}
private String formatDecimal(BigDecimal value)
{
return value == null ? null : value.stripTrailingZeros().toPlainString();
}
private List<RecordTyreInstall> castInstallList(Object value) private List<RecordTyreInstall> castInstallList(Object value)

@ -127,6 +127,22 @@ public class RecordTyreInstallServiceImpl implements IRecordTyreInstallService
baseTyre.setTyreNo(recordTyreInstall.getTyreNo()); baseTyre.setTyreNo(recordTyreInstall.getTyreNo());
int m = baseTyreMapper.updateBaseTyre(baseTyre); int m = baseTyreMapper.updateBaseTyre(baseTyre);
if (n>0&&m>0){ if (n>0&&m>0){
// 装车时插入一条里程快照记录段里程为0仅记录装车时刻的累计总里程
Long totalMileage = recordTyreMileageMapper.selectTotalMileageByTyreRfid(recordTyreInstall.getTyreRfid());
if (totalMileage == null) {
totalMileage = 0L;
}
RecordTyreMileage recordTyreMileage = new RecordTyreMileage();
recordTyreMileage.setTyreRfid(recordTyreInstall.getTyreRfid());
recordTyreMileage.setStartTime(DateUtils.getNowDate());
recordTyreMileage.setMileage(totalMileage); // 装车时累计总里程不变
recordTyreMileage.setMileageOld(0L); // 装车操作本身不产生行驶里程
recordTyreMileage.setPlateNumber(recordTyreInstall.getCarNo());
recordTyreMileage.setPatternDepth(recordTyreInstall.getPatternDepth());
recordTyreMileage.setRecordType("install"); // 标记为装车记录
recordTyreMileage.setCreateTime(DateUtils.getNowDate());
recordTyreMileage.setCreateBy(recordTyreInstall.getCreateBy());
recordTyreMileageMapper.insertRecordTyreMileage(recordTyreMileage);
return AjaxResult.success("安装成功!"); return AjaxResult.success("安装成功!");
} }
}catch (Exception e){ }catch (Exception e){
@ -178,6 +194,8 @@ public class RecordTyreInstallServiceImpl implements IRecordTyreInstallService
recordTyreMileage.setEndTime(DateUtils.getNowDate()); recordTyreMileage.setEndTime(DateUtils.getNowDate());
recordTyreMileage.setMileage(totalMileage + between); // 当前累计总里程 recordTyreMileage.setMileage(totalMileage + between); // 当前累计总里程
recordTyreMileage.setMileageOld(between); // 本段行驶里程 recordTyreMileage.setMileageOld(between); // 本段行驶里程
recordTyreMileage.setPlateNumber(recordTyreInstall.getCarNo()); // 车牌快照
recordTyreMileage.setRecordType("uninstall"); // 标记为卸车记录
recordTyreMileage.setCreateTime(DateUtils.getNowDate()); recordTyreMileage.setCreateTime(DateUtils.getNowDate());
recordTyreMileage.setCreateBy(recordTyreInstall.getCreateBy()); recordTyreMileage.setCreateBy(recordTyreInstall.getCreateBy());
recordTyreMileage.setRecordId(recordId); recordTyreMileage.setRecordId(recordId);

@ -111,7 +111,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
rtm.start_time as startTime, rtm.start_time as startTime,
rtm.end_time as endTime, rtm.end_time as endTime,
rtm.mileage as mileage, rtm.mileage as mileage,
rtm.pattern_depth as patternDepth rtm.pattern_depth as patternDepth,
rtm.record_type as recordType
from record_tyre_mileage rtm from record_tyre_mileage rtm
inner join ( inner join (
select distinct tyre_rfid select distinct tyre_rfid
@ -123,123 +124,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
order by rtm.start_time desc, rtm.id desc order by rtm.start_time desc, rtm.id desc
</select> </select>
<select id="selectRecentEvents" parameterType="CarLifecycleQuery" resultType="CarLifecycleEventDTO">
select 'INSTALL' as eventType,
rti.create_time as eventTime,
rti.tyre_rfid as tyreRfid,
bt.tyre_no as tyreNo,
bt.self_no as selfNo,
bt.tyre_brand as tyreBrand,
bt.tyre_model as tyreModel,
rti.wheel_postion as wheelPostion,
rti.mileage as mileage,
rti.pattern_depth as patternDepth,
rti.type as status,
null as orderNo,
null as typeCode,
null as factoryName,
null as inputMileage,
null as lastMileage,
null as maintainDate,
null as description,
null as result,
null as maintenanceType,
null as startTime,
null as endTime
from record_tyre_install rti
left join base_tyre bt on bt.tyre_epc = rti.tyre_rfid
where rti.car_no = #{carNo}
union all
select 'MAINTENANCE' as eventType,
o.maintain_date as eventTime,
null as tyreRfid,
null as tyreNo,
null as selfNo,
null as tyreBrand,
null as tyreModel,
null as wheelPostion,
o.input_mileage as mileage,
null as patternDepth,
o.status as status,
o.order_no as orderNo,
o.type_code as typeCode,
d.dept_name as factoryName,
o.input_mileage as inputMileage,
o.last_mileage as lastMileage,
o.maintain_date as maintainDate,
o.description as description,
null as result,
null as maintenanceType,
null as startTime,
null as endTime
from biz_maintenance_order o
left join sys_dept d on d.dept_id = o.factory_id
where o.plate_number = #{carNo}
union all
select 'CHECK' as eventType,
rc.create_time as eventTime,
rc.tyre_rfid as tyreRfid,
bt.tyre_no as tyreNo,
bt.self_no as selfNo,
bt.tyre_brand as tyreBrand,
bt.tyre_model as tyreModel,
null as wheelPostion,
rc.mileage as mileage,
rc.pattern_depth as patternDepth,
null as status,
null as orderNo,
null as typeCode,
null as factoryName,
null as inputMileage,
null as lastMileage,
null as maintainDate,
null as description,
rc.result as result,
rc.maintenance_type as maintenanceType,
null as startTime,
null as endTime
from record_check rc
inner join (
select distinct tyre_rfid
from record_tyre_install
where car_no = #{carNo}
and tyre_rfid is not null
) car_tyre on car_tyre.tyre_rfid = rc.tyre_rfid
left join base_tyre bt on bt.tyre_epc = rc.tyre_rfid
union all
select 'MILEAGE' as eventType,
rtm.start_time as eventTime,
rtm.tyre_rfid as tyreRfid,
bt.tyre_no as tyreNo,
bt.self_no as selfNo,
bt.tyre_brand as tyreBrand,
bt.tyre_model as tyreModel,
null as wheelPostion,
rtm.mileage as mileage,
rtm.pattern_depth as patternDepth,
null as status,
null as orderNo,
null as typeCode,
null as factoryName,
null as inputMileage,
null as lastMileage,
null as maintainDate,
null as description,
null as result,
null as maintenanceType,
rtm.start_time as startTime,
rtm.end_time as endTime
from record_tyre_mileage rtm
inner join (
select distinct tyre_rfid
from record_tyre_install
where car_no = #{carNo}
and tyre_rfid is not null
) car_tyre on car_tyre.tyre_rfid = rtm.tyre_rfid
left join base_tyre bt on bt.tyre_epc = rtm.tyre_rfid
order by eventTime desc
</select>
<select id="countInstallRecords" parameterType="CarLifecycleQuery" resultType="int"> <select id="countInstallRecords" parameterType="CarLifecycleQuery" resultType="int">
select count(1) select count(1)
from record_tyre_install rti from record_tyre_install rti

@ -301,6 +301,48 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where tyre_rfid = #{tyreEpc} where tyre_rfid = #{tyreEpc}
</select> </select>
<select id="selectTotalMileageByRFID" resultType="java.math.BigDecimal">
select coalesce(sum(mileage), 0)
from record_tyre_mileage
where tyre_rfid = #{tyreEpc}
</select>
<select id="selectRecentMaintenancePatternDepthByRFID" resultType="java.lang.String">
select pattern_depth
from (
select pattern_depth,
row_number() over (order by create_time desc, id desc) as rn
from record_tyre_mileage
where tyre_rfid = #{tyreEpc}
and record_type = '保养'
and pattern_depth is not null
and pattern_depth &lt;&gt; ''
) recent_maintenance
where rn &lt;= 2
order by rn
</select>
<select id="selectMaintenanceMileageListByRFID" resultType="RecordTyreMileage">
select id,
tyre_rfid as tyreRfid,
start_time as startTime,
end_time as endTime,
mileage,
pattern_depth as patternDepth,
plate_number as plateNumber,
record_id as recordId,
record_type as recordType,
create_by as createBy,
create_time as createTime,
update_by as updateBy,
update_time as updateTime,
remark
from record_tyre_mileage
where tyre_rfid = #{tyreEpc}
and record_type = '保养'
order by create_time desc, id desc
</select>

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper <!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.RecordTyreMileageMapper"> <mapper namespace="com.ruoyi.system.mapper.RecordTyreMileageMapper">
<resultMap type="RecordTyreMileage" id="RecordTyreMileageResult"> <resultMap type="RecordTyreMileage" id="RecordTyreMileageResult">
<result property="id" column="id" /> <result property="id" column="id" />
<result property="tyreRfid" column="tyre_rfid" /> <result property="tyreRfid" column="tyre_rfid" />
@ -21,27 +21,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="patternDepth" column="pattern_depth" /> <result property="patternDepth" column="pattern_depth" />
<result property="plateNumber" column="plate_number" /> <result property="plateNumber" column="plate_number" />
<result property="recordId" column="record_id" /> <result property="recordId" column="record_id" />
<result property="recordType" column="record_type" />
</resultMap> </resultMap>
<sql id="selectRecordTyreMileageVo"> <sql id="selectRecordTyreMileageVo">
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, record_type, 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
</sql> </sql>
<select id="selectRecordTyreMileageList" parameterType="RecordTyreMileage" resultMap="RecordTyreMileageResult"> <select id="selectRecordTyreMileageList" parameterType="RecordTyreMileage" resultMap="RecordTyreMileageResult">
select rtm.id, rtm.tyre_rfid, rtm.start_time, rtm.end_time, rtm.mileage, rtm.mileage_old, rtm.pattern_depth, rtm.plate_number, rtm.record_id,
rtm.create_by, rtm.create_time, rtm.update_by, rtm.update_time, rtm.remark, bt.tyre_brand, bt.tyre_no
select rtm.id, rtm.tyre_rfid, rtm.start_time, rtm.end_time, rtm.mileage, rtm.mileage_old, rtm.pattern_depth, select rtm.id, rtm.tyre_rfid, rtm.start_time, rtm.end_time, rtm.mileage, rtm.mileage_old, rtm.pattern_depth,
rtm.create_by, rtm.create_time, rtm.update_by, rtm.update_time, rtm.remark,bt.tyre_brand,bt.tyre_no rtm.create_by, rtm.create_time, rtm.update_by, rtm.update_time, rtm.remark,bt.tyre_brand,bt.tyre_no
select rtm.id, rtm.tyre_rfid, rtm.start_time, rtm.end_time, rtm.mileage, rtm.pattern_depth, select rtm.id, rtm.tyre_rfid, rtm.start_time, rtm.end_time, rtm.mileage, rtm.pattern_depth,
rtm.create_by, rtm.create_time, rtm.update_by, rtm.update_time, rtm.remark, rtm.plate_number, rtm.record_id, bt.tyre_brand, bt.tyre_no rtm.create_by, rtm.create_time, rtm.update_by, rtm.update_time, rtm.remark, rtm.plate_number, rtm.record_id, rtm.record_type, bt.tyre_brand, bt.tyre_no
from record_tyre_mileage rtm from record_tyre_mileage rtm
LEFT JOIN base_tyre bt ON rtm.tyre_rfid = bt.tyre_epc LEFT JOIN base_tyre bt ON rtm.tyre_rfid = bt.tyre_epc
where rtm.id is not null where rtm.id is not null
<if test="tyreRfid != null and tyreRfid != ''"> and rtm.tyre_rfid = #{tyreRfid}</if> <if test="tyreRfid != null and tyreRfid != ''"> and rtm.tyre_rfid = #{tyreRfid}</if>
<if test="startTime != null "> and rtm.start_time = #{startTime}</if> <if test="startTime != null "> and rtm.start_time = #{startTime}</if>
<if test="endTime != null "> and rtm.end_time = #{endTime}</if> <if test="endTime != null "> and rtm.end_time = #{endTime}</if>
<if test="mileage != null "> and rtm.mileage = #{mileage}</if> <if test="mileage != null "> and rtm.mileage = #{mileage}</if>
<if test="tyreBrand != null and tyreBrand != ''"> and bt.tyre_brand = #{tyreBrand}</if> <if test="recordType != null and recordType != ''"> and rtm.record_type = #{recordType}</if>
<if test="tyreNo != null and tyreNo != ''"> and bt.tyre_no = #{tyreNo}</if> <if test="tyreBrand != null and tyreBrand != ''"> and bt.tyre_brand = #{tyreBrand}</if>
<if test="tyreNo != null and tyreNo != ''"> and bt.tyre_no = #{tyreNo}</if>
${params.dataScope} ${params.dataScope}
</select> </select>
@ -49,7 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectRecordTyreMileageVo"/> <include refid="selectRecordTyreMileageVo"/>
where id = #{id} where id = #{id}
</select> </select>
<insert id="insertRecordTyreMileage" parameterType="RecordTyreMileage"> <insert id="insertRecordTyreMileage" parameterType="RecordTyreMileage">
insert into record_tyre_mileage insert into record_tyre_mileage
<trim prefix="(" suffix=")" suffixOverrides=","> <trim prefix="(" suffix=")" suffixOverrides=",">
@ -67,7 +70,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="patternDepth != null ">pattern_depth,</if> <if test="patternDepth != null ">pattern_depth,</if>
<if test="plateNumber != null and plateNumber != ''">plate_number,</if> <if test="plateNumber != null and plateNumber != ''">plate_number,</if>
<if test="recordId != null ">record_id,</if> <if test="recordId != null ">record_id,</if>
</trim> <if test="recordType != null and recordType != ''">record_type,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null ">#{id},</if> <if test="id != null ">#{id},</if>
<if test="tyreRfid != null and tyreRfid != ''">#{tyreRfid},</if> <if test="tyreRfid != null and tyreRfid != ''">#{tyreRfid},</if>
@ -83,7 +87,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="patternDepth != null and patternDepth != ''">#{patternDepth},</if> <if test="patternDepth != null and patternDepth != ''">#{patternDepth},</if>
<if test="plateNumber != null and plateNumber != ''">#{plateNumber},</if> <if test="plateNumber != null and plateNumber != ''">#{plateNumber},</if>
<if test="recordId != null and recordId != ''">#{recordId},</if> <if test="recordId != null and recordId != ''">#{recordId},</if>
</trim> <if test="recordType != null and recordType != ''">#{recordType},</if>
</trim>
</insert> </insert>
<update id="updateRecordTyreMileage" parameterType="RecordTyreMileage"> <update id="updateRecordTyreMileage" parameterType="RecordTyreMileage">
@ -100,6 +105,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="updateTime != null ">update_time = #{updateTime},</if> <if test="updateTime != null ">update_time = #{updateTime},</if>
<if test="patternDepth != null ">pattern_depth = #{patternDepth},</if> <if test="patternDepth != null ">pattern_depth = #{patternDepth},</if>
<if test="plateNumber != null and plateNumber != ''">plate_number = #{plateNumber},</if> <if test="plateNumber != null and plateNumber != ''">plate_number = #{plateNumber},</if>
<if test="recordType != null and recordType != ''">record_type = #{recordType},</if>
<if test="remark != null and remark != ''">remark = #{remark},</if> <if test="remark != null and remark != ''">remark = #{remark},</if>
</trim> </trim>
where id = #{id} where id = #{id}
@ -110,7 +116,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</delete> </delete>
<delete id="deleteRecordTyreMileageByIds" parameterType="String"> <delete id="deleteRecordTyreMileageByIds" parameterType="String">
delete from record_tyre_mileage where id in delete from record_tyre_mileage where id in
<foreach item="id" collection="array" open="(" separator="," close=")"> <foreach item="id" collection="array" open="(" separator="," close=")">
#{id} #{id}
</foreach> </foreach>

Loading…
Cancel
Save