Merge branch 'master' of http://1.13.177.47:3000/Yangwl/SZXBGJ_HT
# Conflicts: # ruoyi-admin/src/main/java/com/ruoyi/web/controller/tyre/BaseTyreController.java # ruoyi-system/src/main/java/com/ruoyi/system/domain/BaseTyre.java # ruoyi-system/src/main/java/com/ruoyi/system/mapper/BaseTyreMapper.java # ruoyi-system/src/main/java/com/ruoyi/system/service/IBaseTyreService.java # ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BaseTyreServiceImpl.javamaster
commit
615601866d
@ -0,0 +1,181 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
|
||||
<head>
|
||||
<th:block th:include="include :: header('轮胎批量入库')" />
|
||||
<style>
|
||||
.batch-panel { padding: 15px; }
|
||||
.batch-actions { margin-top: 10px; }
|
||||
.batch-summary { margin-top: 15px; }
|
||||
.batch-table { margin-top: 10px; max-height: 360px; overflow: auto; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="gray-bg">
|
||||
<div class="container-div batch-panel">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 search-collapse">
|
||||
<form id="batchForm" class="form-inline">
|
||||
<div class="form-group">
|
||||
<label>入库编码:</label>
|
||||
<input id="inboundCode" name="inboundCode" type="text" class="form-control" placeholder="请输入入库编码" autocomplete="off"/>
|
||||
</div>
|
||||
<div class="batch-actions">
|
||||
<a class="btn btn-primary" onclick="previewBatch()" shiro:hasPermission="tyre:inventory:batch">
|
||||
<i class="fa fa-search"></i> 预览批次
|
||||
</a>
|
||||
<a class="btn btn-success" onclick="submitBatch()" shiro:hasPermission="tyre:inventory:batch">
|
||||
<i class="fa fa-upload"></i> 一键入库
|
||||
</a>
|
||||
<a class="btn btn-danger" onclick="rollbackBatch()" shiro:hasPermission="tyre:inventory:batchRollback">
|
||||
<i class="fa fa-undo"></i> 撤回入库
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="col-sm-12 batch-summary" id="summaryPanel" style="display:none;"></div>
|
||||
<div class="col-sm-12 batch-table" id="detailPanel" style="display:none;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script th:inline="javascript">
|
||||
var prefix = ctx + "tyre/inventory";
|
||||
var processing = false;
|
||||
|
||||
function normalizeCode() {
|
||||
var code = $.trim($("#inboundCode").val());
|
||||
if (!code) {
|
||||
$.modal.alertWarning("请输入入库编码");
|
||||
return "";
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
function previewBatch() {
|
||||
var code = normalizeCode();
|
||||
if (!code) {
|
||||
return;
|
||||
}
|
||||
postBatch(prefix + "/batchInbound/preview", code, function (data) {
|
||||
renderPreview(data);
|
||||
});
|
||||
}
|
||||
|
||||
function submitBatch() {
|
||||
var code = normalizeCode();
|
||||
if (!code) {
|
||||
return;
|
||||
}
|
||||
$.modal.confirm("确认按入库编码 [" + escapeHtml(code) + "] 一键入库?", function () {
|
||||
// 入库是批量写库存与流水的动作,前端二次确认用于避免现场误点。
|
||||
postBatch(prefix + "/batchInbound", code, function (data) {
|
||||
renderResult("批量入库完成", data);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function rollbackBatch() {
|
||||
var code = normalizeCode();
|
||||
if (!code) {
|
||||
return;
|
||||
}
|
||||
$.modal.confirm("确认撤回入库编码 [" + escapeHtml(code) + "] 仍在库的库存记录?", function () {
|
||||
// 撤回只处理仍在库的当前库存记录,已发生后续出库的轮胎由后端跳过。
|
||||
postBatch(prefix + "/batchInbound/rollback", code, function (data) {
|
||||
renderResult("批量撤回完成", data);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function postBatch(url, code, callback) {
|
||||
if (processing) {
|
||||
return;
|
||||
}
|
||||
processing = true;
|
||||
setButtonsDisabled(true);
|
||||
$.modal.loading("处理中,请稍候...");
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: "post",
|
||||
data: { inboundCode: code },
|
||||
success: function (res) {
|
||||
if (res.code === 0) {
|
||||
callback(res.data || {});
|
||||
} else {
|
||||
$.modal.alertError(res.msg || "操作失败");
|
||||
}
|
||||
},
|
||||
error: function () {
|
||||
$.modal.alertError("请求失败,请稍后重试");
|
||||
},
|
||||
complete: function () {
|
||||
$.modal.closeLoading();
|
||||
processing = false;
|
||||
setButtonsDisabled(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function renderPreview(data) {
|
||||
var html = "<div class='alert alert-info'>批次:" + escapeHtml(data.inboundCode) +
|
||||
",共 " + (data.total || 0) + " 条,已存在 " + (data.exists || 0) +
|
||||
" 条,待入库 " + (data.pending || 0) + " 条</div>";
|
||||
$("#summaryPanel").html(html).show();
|
||||
renderItems(data.items || [], "status");
|
||||
}
|
||||
|
||||
function renderResult(title, data) {
|
||||
if (typeof data === "number") {
|
||||
// 后端写操作按 RuoYi Service 风格返回影响条数,页面只展示本次实际成功处理数。
|
||||
$("#summaryPanel").html("<div class='alert alert-success'>" + title + ",成功处理 " + data + " 条</div>").show();
|
||||
$("#detailPanel").hide().empty();
|
||||
return;
|
||||
}
|
||||
var html = "<div class='alert alert-success'>" + title + ",批次:" + escapeHtml(data.inboundCode) +
|
||||
",共 " + (data.total || 0) + " 条,成功 " + (data.success || 0) +
|
||||
" 条,跳过 " + (data.skip || 0) + " 条,失败 " + (data.fail || 0) + " 条</div>";
|
||||
$("#summaryPanel").html(html).show();
|
||||
renderFailures(data.failures || []);
|
||||
}
|
||||
|
||||
function renderItems(items, statusField) {
|
||||
var rows = items.map(function (item) {
|
||||
return "<tr><td>" + escapeHtml(item.tyreEpc) + "</td><td>" + escapeHtml(item.tyreNo) +
|
||||
"</td><td>" + escapeHtml(item.tyreBrand) + "</td><td>" + escapeHtml(item.tyreModel) +
|
||||
"</td><td>" + escapeHtml(item[statusField]) + "</td></tr>";
|
||||
}).join("");
|
||||
var table = "<table class='table table-bordered table-striped'><thead><tr><th>RFID标签</th><th>胎号</th><th>品牌</th><th>型号</th><th>状态</th></tr></thead><tbody>" + rows + "</tbody></table>";
|
||||
$("#detailPanel").html(table).show();
|
||||
}
|
||||
|
||||
function renderFailures(failures) {
|
||||
if (!failures.length) {
|
||||
$("#detailPanel").hide().empty();
|
||||
return;
|
||||
}
|
||||
var rows = failures.map(function (item) {
|
||||
return "<tr><td>" + escapeHtml(item.tyreEpc) + "</td><td>" + escapeHtml(item.tyreNo) +
|
||||
"</td><td>" + escapeHtml(item.reason) + "</td></tr>";
|
||||
}).join("");
|
||||
var table = "<table class='table table-bordered table-striped'><thead><tr><th>RFID标签</th><th>胎号</th><th>失败原因</th></tr></thead><tbody>" + rows + "</tbody></table>";
|
||||
$("#detailPanel").html(table).show();
|
||||
}
|
||||
|
||||
function setButtonsDisabled(disabled) {
|
||||
$(".batch-actions .btn").toggleClass("disabled", disabled);
|
||||
}
|
||||
|
||||
function escapeHtml(value) {
|
||||
return String(value == null ? "" : value)
|
||||
.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, """)
|
||||
.replace(/'/g, "'");
|
||||
}
|
||||
|
||||
$("#batchForm").on("submit", function (e) {
|
||||
e.preventDefault();
|
||||
previewBatch();
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@ -0,0 +1,115 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
|
||||
<head>
|
||||
<th:block th:include="include :: header('轮胎收货')" />
|
||||
</head>
|
||||
<body class="gray-bg">
|
||||
<div class="container-div">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<form id="formId" class="form-inline">
|
||||
<div class="form-group">
|
||||
<label>入库编码:</label>
|
||||
<input id="inboundCode" name="inboundCode" type="text"
|
||||
class="form-control" placeholder="请输入供应商提供的入库编码" autocomplete="off"
|
||||
style="width: 280px;"/>
|
||||
</div>
|
||||
<a class="btn btn-primary" onclick="doPreview()"><i class="fa fa-search"></i> 查询</a>
|
||||
</form>
|
||||
<div id="previewPanel" class="mt20" style="display:none;">
|
||||
<div class="alert alert-info" id="previewSummary"></div>
|
||||
<div class="table-responsive" style="max-height: 300px; overflow-y: auto;">
|
||||
<table class="table table-bordered table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>RFID</th>
|
||||
<th>胎号</th>
|
||||
<th>品牌</th>
|
||||
<th>型号</th>
|
||||
<th>状态</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="previewTbody"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-right mt20">
|
||||
<a id="confirmBtn" class="btn btn-success disabled" onclick="doConfirm()"
|
||||
shiro:hasPermission="tyre:tyre:receive">
|
||||
<i class="fa fa-check"></i> 确认入库
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<th:block th:include="include :: footer" />
|
||||
<script th:inline="javascript">
|
||||
var prefix = ctx + "tyre/tyre";
|
||||
var lastPreview = null;
|
||||
|
||||
function doPreview() {
|
||||
var code = $.trim($("#inboundCode").val());
|
||||
if (!code) { $.modal.alertWarning("请输入入库编码"); return; }
|
||||
$.modal.loading("正在查询...");
|
||||
$.ajax({
|
||||
url: prefix + "/receive/preview",
|
||||
type: "post",
|
||||
data: { inboundCode: code },
|
||||
success: function (res) {
|
||||
$.modal.closeLoading();
|
||||
if (res.code !== 0) { $.modal.alertError(res.msg); return; }
|
||||
lastPreview = res.data || {};
|
||||
renderPreview(lastPreview);
|
||||
$("#confirmBtn").toggleClass("disabled", !(lastPreview.pending > 0));
|
||||
},
|
||||
error: function () {
|
||||
$.modal.closeLoading();
|
||||
$.modal.alertError("网络异常,请重试");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function renderPreview(data) {
|
||||
var summary = "批次:" + data.inboundCode + ",共 " + data.total + " 条,已入库 "
|
||||
+ data.exists + " 条,<b style='color:red'>待入库 " + data.pending + " 条</b>";
|
||||
$("#previewSummary").html(summary);
|
||||
var rows = "";
|
||||
var items = data.items || [];
|
||||
for (var i = 0; i < items.length; i++) {
|
||||
var item = items[i];
|
||||
var statusLabel = item.status === '待入库'
|
||||
? '<span class="label label-warning">待入库</span>'
|
||||
: '<span class="label label-success">已存在库存记录</span>';
|
||||
rows += "<tr><td>" + (item.tyreEpc || '') + "</td><td>" + (item.tyreNo || '')
|
||||
+ "</td><td>" + (item.tyreBrand || '') + "</td><td>" + (item.tyreModel || '')
|
||||
+ "</td><td>" + statusLabel + "</td></tr>";
|
||||
}
|
||||
$("#previewTbody").html(rows);
|
||||
$("#previewPanel").show();
|
||||
}
|
||||
|
||||
function doConfirm() {
|
||||
if (!lastPreview || !lastPreview.pending || lastPreview.pending <= 0) { return; }
|
||||
var code = lastPreview.inboundCode;
|
||||
$.modal.confirm("确认按批次 [" + code + "] 一次性入库 " + lastPreview.pending + " 条?", function () {
|
||||
$.modal.loading("正在入库...");
|
||||
$.ajax({
|
||||
url: prefix + "/receive",
|
||||
type: "post",
|
||||
data: { inboundCode: code },
|
||||
success: function (res) {
|
||||
$.modal.closeLoading();
|
||||
if (res.code !== 0) { $.modal.alertError(res.msg); return; }
|
||||
$.modal.msgSuccess("已入库 " + res.data + " 条");
|
||||
doPreview();
|
||||
},
|
||||
error: function () {
|
||||
$.modal.closeLoading();
|
||||
$.modal.alertError("网络异常,请重试");
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@ -0,0 +1,69 @@
|
||||
package com.ruoyi.system.domain.vo;
|
||||
|
||||
/**
|
||||
* 批量入库预览明细。
|
||||
*
|
||||
* @author zch
|
||||
*/
|
||||
public class InboundBatchPreviewItemVo
|
||||
{
|
||||
private String tyreEpc; // 轮胎 RFID/EPC 唯一标识
|
||||
|
||||
private String tyreNo; // 轮胎外部编号
|
||||
|
||||
private String tyreBrand; // 轮胎品牌
|
||||
|
||||
private String tyreModel; // 轮胎型号
|
||||
|
||||
private String status; // 状态:待入库 / 已存在库存记录
|
||||
|
||||
public String getTyreEpc()
|
||||
{
|
||||
return tyreEpc;
|
||||
}
|
||||
|
||||
public void setTyreEpc(String tyreEpc)
|
||||
{
|
||||
this.tyreEpc = tyreEpc;
|
||||
}
|
||||
|
||||
public String getTyreNo()
|
||||
{
|
||||
return tyreNo;
|
||||
}
|
||||
|
||||
public void setTyreNo(String tyreNo)
|
||||
{
|
||||
this.tyreNo = tyreNo;
|
||||
}
|
||||
|
||||
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 getStatus()
|
||||
{
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus(String status)
|
||||
{
|
||||
this.status = status;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,55 @@
|
||||
package com.ruoyi.system.service;
|
||||
|
||||
import java.util.List;
|
||||
import com.ruoyi.system.domain.CarCheckLifecycleDTO;
|
||||
import com.ruoyi.system.domain.CarLifecycleDTO;
|
||||
import com.ruoyi.system.domain.CarLifecycleQuery;
|
||||
import com.ruoyi.system.domain.CarMaintenanceLifecycleDTO;
|
||||
import com.ruoyi.system.domain.CarMileageLifecycleDTO;
|
||||
import com.ruoyi.system.domain.CarTyreInstallLifecycleDTO;
|
||||
|
||||
/**
|
||||
* 车辆全生命周期报表Service接口。
|
||||
*/
|
||||
public interface IBaseCarLifecycleService
|
||||
{
|
||||
/**
|
||||
* 查询车辆生命周期概要。
|
||||
*
|
||||
* @param query 生命周期查询参数
|
||||
* @return 车辆生命周期概要
|
||||
*/
|
||||
public CarLifecycleDTO selectLifecycle(CarLifecycleQuery query);
|
||||
|
||||
/**
|
||||
* 查询车辆装卸历史。
|
||||
*
|
||||
* @param query 生命周期查询参数
|
||||
* @return 装卸历史集合
|
||||
*/
|
||||
public List<CarTyreInstallLifecycleDTO> selectInstallList(CarLifecycleQuery query);
|
||||
|
||||
/**
|
||||
* 查询车辆维保工单历史。
|
||||
*
|
||||
* @param query 生命周期查询参数
|
||||
* @return 维保工单集合
|
||||
*/
|
||||
public List<CarMaintenanceLifecycleDTO> selectMaintenanceList(CarLifecycleQuery query);
|
||||
|
||||
/**
|
||||
* 查询车辆关联轮胎质检历史。
|
||||
*
|
||||
* @param query 生命周期查询参数
|
||||
* @return 质检历史集合
|
||||
*/
|
||||
public List<CarCheckLifecycleDTO> selectCheckList(CarLifecycleQuery query);
|
||||
|
||||
/**
|
||||
* 查询车辆关联轮胎里程历史。
|
||||
*
|
||||
* @param query 生命周期查询参数
|
||||
* @return 里程历史集合
|
||||
*/
|
||||
public List<CarMileageLifecycleDTO> selectMileageList(CarLifecycleQuery query);
|
||||
}
|
||||
@ -0,0 +1,269 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.system.mapper.BaseCarLifecycleMapper">
|
||||
|
||||
<resultMap type="CarLifecycleSummaryDTO" id="CarLifecycleSummaryResult">
|
||||
<result property="carId" column="car_id"/>
|
||||
<result property="carNo" column="car_no"/>
|
||||
<result property="deptId" column="dept_id"/>
|
||||
<result property="team" column="team"/>
|
||||
<result property="line" column="line"/>
|
||||
<result property="type" column="type"/>
|
||||
<result property="inputMileage" column="input_mileage"/>
|
||||
</resultMap>
|
||||
|
||||
<select id="selectLifecycleCar" parameterType="CarLifecycleQuery" resultMap="CarLifecycleSummaryResult">
|
||||
select b.id as car_id,
|
||||
b.car_no,
|
||||
b.dept_id,
|
||||
d.dept_name as team,
|
||||
b.line,
|
||||
b.type,
|
||||
max(o.input_mileage) as input_mileage
|
||||
from base_car b
|
||||
left join sys_dept d on d.dept_id = b.dept_id
|
||||
left join sys_user u on u.dept_id = d.dept_id
|
||||
left join biz_maintenance_order o on o.plate_number = b.car_no
|
||||
where b.car_no = #{carNo}
|
||||
${params.dataScope}
|
||||
group by b.id, b.car_no, b.dept_id, d.dept_name, b.line, b.type
|
||||
</select>
|
||||
|
||||
<select id="selectMountedTyres" parameterType="CarLifecycleQuery" resultType="CarMountedTyreDTO">
|
||||
select bt.tyre_id as tyreId,
|
||||
bt.tyre_no as tyreNo,
|
||||
bt.self_no as selfNo,
|
||||
bt.tyre_epc as tyreEpc,
|
||||
bt.tyre_brand as tyreBrand,
|
||||
bt.tyre_model as tyreModel,
|
||||
bt.wheel_postion as wheelPostion,
|
||||
bt.pattern_depth as patternDepth
|
||||
from base_tyre bt
|
||||
where bt.car_no = #{carNo}
|
||||
order by bt.wheel_postion, bt.tyre_id
|
||||
</select>
|
||||
|
||||
<select id="selectInstallList" parameterType="CarLifecycleQuery" resultType="CarTyreInstallLifecycleDTO">
|
||||
select rti.id as id,
|
||||
rti.tyre_rfid as tyreRfid,
|
||||
rti.type as installType,
|
||||
rti.mileage as mileage,
|
||||
rti.create_time as createTime,
|
||||
rti.wheel_postion as wheelPostion,
|
||||
rti.pattern_depth as patternDepth,
|
||||
bt.tyre_no as tyreNo,
|
||||
bt.self_no as selfNo,
|
||||
bt.tyre_brand as tyreBrand,
|
||||
bt.tyre_model as tyreModel
|
||||
from record_tyre_install rti
|
||||
left join base_tyre bt on bt.tyre_epc = rti.tyre_rfid
|
||||
where rti.car_no = #{carNo}
|
||||
order by rti.create_time desc, rti.id desc
|
||||
</select>
|
||||
|
||||
<select id="selectMaintenanceList" parameterType="CarLifecycleQuery" resultType="CarMaintenanceLifecycleDTO">
|
||||
select o.order_id as orderId,
|
||||
o.order_no as orderNo,
|
||||
o.vehicle_id as vehicleId,
|
||||
o.plate_number as plateNumber,
|
||||
o.type_code as typeCode,
|
||||
o.status as status,
|
||||
o.input_mileage as inputMileage,
|
||||
o.last_mileage as lastMileage,
|
||||
o.maintain_date as maintainDate,
|
||||
d.dept_name as factoryName,
|
||||
o.description as description
|
||||
from biz_maintenance_order o
|
||||
left join sys_dept d on d.dept_id = o.factory_id
|
||||
where o.plate_number = #{carNo}
|
||||
order by o.maintain_date desc, o.order_id desc
|
||||
</select>
|
||||
|
||||
<select id="selectCheckList" parameterType="CarLifecycleQuery" resultType="CarCheckLifecycleDTO">
|
||||
select rc.id as id,
|
||||
rc.tyre_rfid as tyreRfid,
|
||||
bt.tyre_no as tyreNo,
|
||||
bt.tyre_brand as tyreBrand,
|
||||
bt.tyre_model as tyreModel,
|
||||
rc.result as result,
|
||||
rc.maintenance_type as maintenanceType,
|
||||
rc.mileage as mileage,
|
||||
rc.pattern_depth as patternDepth,
|
||||
rc.create_time as createTime
|
||||
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
|
||||
order by rc.create_time desc, rc.id desc
|
||||
</select>
|
||||
|
||||
<select id="selectMileageList" parameterType="CarLifecycleQuery" resultType="CarMileageLifecycleDTO">
|
||||
select rtm.id as id,
|
||||
rtm.tyre_rfid as tyreRfid,
|
||||
bt.tyre_no as tyreNo,
|
||||
bt.tyre_brand as tyreBrand,
|
||||
rtm.start_time as startTime,
|
||||
rtm.end_time as endTime,
|
||||
rtm.mileage as mileage,
|
||||
rtm.pattern_depth as patternDepth
|
||||
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 rtm.start_time desc, rtm.id desc
|
||||
</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 count(1)
|
||||
from record_tyre_install rti
|
||||
where rti.car_no = #{carNo}
|
||||
</select>
|
||||
|
||||
<select id="countMaintenanceOrders" parameterType="CarLifecycleQuery" resultType="int">
|
||||
select count(1)
|
||||
from biz_maintenance_order o
|
||||
where o.plate_number = #{carNo}
|
||||
</select>
|
||||
|
||||
<select id="countCheckRecords" parameterType="CarLifecycleQuery" resultType="int">
|
||||
select count(distinct rc.id)
|
||||
from record_check rc
|
||||
inner join record_tyre_install rti on rti.tyre_rfid = rc.tyre_rfid
|
||||
where rti.car_no = #{carNo}
|
||||
</select>
|
||||
|
||||
<select id="countMileageRecords" parameterType="CarLifecycleQuery" resultType="int">
|
||||
select count(distinct rtm.id)
|
||||
from record_tyre_mileage rtm
|
||||
inner join record_tyre_install rti on rti.tyre_rfid = rtm.tyre_rfid
|
||||
where rti.car_no = #{carNo}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue