修改查看保养工单数据

master
杨万里 2 weeks ago
parent dc9191630f
commit c354b57a9a

@ -25,6 +25,9 @@ import com.ruoyi.common.utils.file.MimeTypeUtils;
import com.ruoyi.framework.shiro.service.SysPasswordService; import com.ruoyi.framework.shiro.service.SysPasswordService;
import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.ISysUserService;
import static com.ruoyi.common.utils.file.FileUploadUtils.extractFilename;
import static com.ruoyi.common.utils.file.FileUploadUtils.uuidFilename;
/** /**
* *
* *
@ -161,6 +164,8 @@ public class SysProfileController extends BaseController
if (!file.isEmpty()) if (!file.isEmpty())
{ {
SysUser currentUser = getSysUser(); SysUser currentUser = getSysUser();
String fileName = uuidFilename(file);
System.out.println(fileName);
String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION, true); String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION, true);
if (userService.updateUserAvatar(currentUser.getUserId(), avatar)) if (userService.updateUserAvatar(currentUser.getUserId(), avatar))
{ {

@ -1,8 +1,10 @@
package com.ruoyi.web.controller.tyre; package com.ruoyi.web.controller.tyre;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.config.RuoYiConfig;
@ -10,9 +12,7 @@ import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.file.FileUploadUtils; import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.domain.*; import com.ruoyi.system.domain.*;
import com.ruoyi.system.service.IBaseCarService; import com.ruoyi.system.service.*;
import com.ruoyi.system.service.IBizOrderTireDetailService;
import com.ruoyi.system.service.ISysAttachmentService;
import com.sun.jna.platform.win32.OaIdl; import com.sun.jna.platform.win32.OaIdl;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -22,7 +22,6 @@ import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.service.IBizMaintenanceOrderService;
import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.utils.poi.ExcelUtil;
@ -46,6 +45,9 @@ public class BizMaintenanceOrderController extends BaseController
@Autowired @Autowired
private IBaseCarService baseCarService; private IBaseCarService baseCarService;
@Autowired
private IBaseTyreService baseTyreService;
@Autowired @Autowired
private IBizMaintenanceOrderService bizMaintenanceOrderService; private IBizMaintenanceOrderService bizMaintenanceOrderService;
@ -131,7 +133,7 @@ public class BizMaintenanceOrderController extends BaseController
} }
/** /**
* *
*/ */
@RequiresPermissions("system:order:edit") @RequiresPermissions("system:order:edit")
@GetMapping("/edit/{orderId}") @GetMapping("/edit/{orderId}")
@ -139,6 +141,25 @@ public class BizMaintenanceOrderController extends BaseController
{ {
BizMaintenanceOrder bizMaintenanceOrder = bizMaintenanceOrderService.selectBizMaintenanceOrderByOrderId(orderId); BizMaintenanceOrder bizMaintenanceOrder = bizMaintenanceOrderService.selectBizMaintenanceOrderByOrderId(orderId);
mmap.put("bizMaintenanceOrder", bizMaintenanceOrder); mmap.put("bizMaintenanceOrder", bizMaintenanceOrder);
//查询前一个工单
BizMaintenanceOrder bizMaintenanceOrderBefore = bizMaintenanceOrderService.selectBizMaintenanceOrderByOrderIdBefore(bizMaintenanceOrder);
BizOrderTireDetail bizOrderTireDetail = new BizOrderTireDetail();
List<Map> bizOrderTireDetailsBefore = new ArrayList<>();
if (bizMaintenanceOrderBefore==null){
//如果上一次的检查结果为空
//则数据为车辆目前的安装数据
//查询此车辆安装的轮胎数据
bizOrderTireDetailsBefore = bizOrderTireDetailService.selectBaseTrieInstall(bizMaintenanceOrder.getPlateNumber());
}else {
bizOrderTireDetail.setOrderId(bizMaintenanceOrderBefore.getOrderId());
bizOrderTireDetailsBefore = bizOrderTireDetailService.selectBizOrderTireDetail(bizOrderTireDetail);
}
//查询此车辆的维保数据
bizOrderTireDetail.setOrderId(orderId);
List<Map> bizOrderTireDetails = bizOrderTireDetailService.selectBizOrderTireDetail(bizOrderTireDetail);
mmap.put("bizOrderTireDetailsBefore", bizOrderTireDetailsBefore);
mmap.put("bizOrderTireDetails", bizOrderTireDetails);
return prefix + "/edit"; return prefix + "/edit";
} }
@ -188,8 +209,9 @@ public class BizMaintenanceOrderController extends BaseController
} }
/** /**
* PDA * PDA
* @param bizMaintenanceOrder * @param json
* @param files
* @return * @return
*/ */
@PostMapping("/PDASaveMaintenanceOrder") @PostMapping("/PDASaveMaintenanceOrder")

@ -28,6 +28,7 @@ import java.util.List;
public class RecordTyreInstallController extends BaseController public class RecordTyreInstallController extends BaseController
{ {
private String prefix = "tyre/install"; private String prefix = "tyre/install";
private String prefix_uninstall = "tyre/uninstall";
@Autowired @Autowired
private IRecordTyreInstallService recordTyreInstallService; private IRecordTyreInstallService recordTyreInstallService;
@ -39,6 +40,12 @@ public class RecordTyreInstallController extends BaseController
return prefix + "/install"; return prefix + "/install";
} }
@RequiresPermissions("tyre:install:uninstall")
@GetMapping("/uninstall")
public String uninstall()
{
return prefix_uninstall + "/install";
}
/** /**
* *
*/ */

@ -7,7 +7,7 @@ ruoyi:
# 版权年份 # 版权年份
copyrightYear: 2026 copyrightYear: 2026
# 实例演示开关 # 实例演示开关
demoEnabled: true demoEnabled: false
# 文件路径 示例( Windows配置D:/ruoyi/uploadPathLinux配置 /home/ruoyi/uploadPath # 文件路径 示例( Windows配置D:/ruoyi/uploadPathLinux配置 /home/ruoyi/uploadPath
profile: C:/ruoyi/uploadPath profile: C:/ruoyi/uploadPath
# 获取ip地址开关 # 获取ip地址开关

@ -83,7 +83,7 @@
<div class="panel-body" style="padding: 10px;"> <div class="panel-body" style="padding: 10px;">
<div style="display: flex; align-items: center;"> <div style="display: flex; align-items: center;">
<i class="fa fa-circle" style="color: #1ab394; margin-right: 5px;"></i> <i class="fa fa-circle" style="color: #1ab394; margin-right: 5px;"></i>
<span style="font-weight: bold; font-size: 16px;">全新胎</span> <span style="font-weight: bold; font-size: 14px;">全新胎</span>
</div> </div>
<h2 style="margin: 10px 0;" id="newTop">305</h2> <h2 style="margin: 10px 0;" id="newTop">305</h2>
<small id="new">在库: 305</small> <small id="new">在库: 305</small>
@ -96,7 +96,7 @@
<div class="panel-body" style="padding: 10px;"> <div class="panel-body" style="padding: 10px;">
<div style="display: flex; align-items: center;"> <div style="display: flex; align-items: center;">
<i class="fa fa-circle" style="color: #ed5565; margin-right: 5px;"></i> <i class="fa fa-circle" style="color: #ed5565; margin-right: 5px;"></i>
<span style="font-weight: bold; font-size: 16px;">翻新胎</span> <span style="font-weight: bold; font-size: 14px;">翻新胎</span>
</div> </div>
<h2 style="margin: 10px 0;" id="renovateTop">35</h2> <h2 style="margin: 10px 0;" id="renovateTop">35</h2>
<small id="renovate">在库: 34 </small> <small id="renovate">在库: 34 </small>
@ -109,7 +109,7 @@
<div class="panel-body" style="padding: 10px;"> <div class="panel-body" style="padding: 10px;">
<div style="display: flex; align-items: center;"> <div style="display: flex; align-items: center;">
<i class="fa fa-circle" style="color: #f8ac59; margin-right: 5px;"></i> <i class="fa fa-circle" style="color: #f8ac59; margin-right: 5px;"></i>
<span style="font-weight: bold; font-size: 16px;">周转胎</span> <span style="font-weight: bold; font-size: 14px;">周转胎</span>
</div> </div>
<h2 style="margin: 10px 0;" id="circulatingTop">1</h2> <h2 style="margin: 10px 0;" id="circulatingTop">1</h2>
<small id="circulating">在库: 1 </small> <small id="circulating">在库: 1 </small>
@ -122,7 +122,7 @@
<div class="panel-body" style="padding: 10px;"> <div class="panel-body" style="padding: 10px;">
<div style="display: flex; align-items: center;"> <div style="display: flex; align-items: center;">
<i class="fa fa-circle" style="color: #3c5dbf; margin-right: 5px;"></i> <i class="fa fa-circle" style="color: #3c5dbf; margin-right: 5px;"></i>
<span style="font-weight: bold; font-size: 16px;">实验胎</span> <span style="font-weight: bold; font-size: 14px;">实验胎</span>
</div> </div>
<h2 style="margin: 10px 0;"id="experimentalTop">1</h2> <h2 style="margin: 10px 0;"id="experimentalTop">1</h2>
<small id="experimental" >在库: 1 </small> <small id="experimental" >在库: 1 </small>

@ -41,8 +41,8 @@
<li> <li>
<p>操作类型</p> <p>操作类型</p>
<select name="type" th:with="type=${@dict.getType('install_type')}"> <select name="type" th:with="type=${@dict.getType('install_type')}">
<option value="">所有</option> <option value="0">安装</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option> <!-- <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>-->
</select> </select>
</li> </li>
<li> <li>

@ -126,6 +126,41 @@
border-radius: 4px; border-radius: 4px;
} }
/* 状态样式:装胎 (橙色/金色) */
.status-installed {
border: 2px solid #f8ac59 !important; /* 橙色边框 */
background-color: #2f4050;
position: relative; /* 确保伪元素定位正确 */
}
/* 位置标签背景色 */
.status-installed .pos-tag {
background: #f8ac59;
color: #fff; /* 确保文字清晰 */
}
/* 轮胎纹路:稍微调亮一点,表示是新胎或重点关注的胎 */
.status-installed .tyre-pattern {
opacity: 0.8;
}
/* 中间的文字标签 */
.status-installed::after {
content: "装胎";
position: absolute;
top: 30%;
left: 50%;
transform: translateX(-50%);
color: #f8ac59; /* 文字颜色与边框呼应 */
font-weight: bold;
font-size: 14px;
z-index: 4;
background: rgba(255, 255, 255, 0.95); /* 稍微不透明一点,保证文字可读性 */
padding: 2px 8px;
border-radius: 4px;
box-shadow: 0 2px 4px rgba(0,0,0,0.2); /* 加一点阴影更有立体感 */
}
/* 状态样式:空位 (灰色透明) */ /* 状态样式:空位 (灰色透明) */
.status-empty { .status-empty {
background: #e7eaec; background: #e7eaec;
@ -165,13 +200,16 @@
<span class="info-label">完成操作人:</span><span class="info-value" id="finishUser" th:text="*{bizMaintenanceOrder.updateBy}"></span> <span class="info-label">完成操作人:</span><span class="info-value" id="finishUser" th:text="*{bizMaintenanceOrder.updateBy}"></span>
</div> </div>
<div class="col-sm-3 info-row"> <div class="col-sm-3 info-row">
<span class="info-label">当前车辆里程(km)</span><span class="info-value" id="mileage" th:text="*{bizMaintenanceOrder.inputMileage}"></span> <span class="info-label">上次维保里程(km)</span><span class="info-value" id="lastMileage" th:text="*{bizMaintenanceOrder.lastMileage}"></span>
</div>
<div class="col-sm-3 info-row">
<span class="info-label">当前车辆里程(km)</span><span class="info-value" id="inputMileage" th:text="*{bizMaintenanceOrder.inputMileage}"></span>
</div> </div>
<div class="col-sm-3 info-row"> <div class="col-sm-3 info-row">
<span class="info-label">线路:</span><span class="info-value" id="route" th:text="*{bizMaintenanceOrder.line}"></span> <span class="info-label">线路:</span><span class="info-value" id="route" th:text="*{bizMaintenanceOrder.line}"></span>
</div> </div>
<div class="col-sm-3 info-row"> <div class="col-sm-3 info-row">
<span class="info-label">补充说明:</span><span class="info-value" id="remark" th:text="*{bizMaintenanceOrder.description}">-</span> <span class="info-label">补充说明:</span><span class="info-value" id="description" th:text="*{bizMaintenanceOrder.description}">-</span>
</div> </div>
<div class="col-sm-3 info-row"> <div class="col-sm-3 info-row">
<span class="info-label">备注:</span><span class="info-value" id="remark" th:text="*{bizMaintenanceOrder.remark}">-</span> <span class="info-label">备注:</span><span class="info-value" id="remark" th:text="*{bizMaintenanceOrder.remark}">-</span>
@ -195,7 +233,7 @@
<!-- 维保后 --> <!-- 维保后 -->
<div class="maint-section"> <div class="maint-section">
<div style="float: right;"> <div style="float: right;">
<button class="btn btn-white btn-xs"><i class="fa fa-history"></i> 操作记录</button> <!-- <button class="btn btn-white btn-xs"><i class="fa fa-history"></i> 操作记录</button>-->
</div> </div>
<div class="maint-title">维保后</div> <div class="maint-title">维保后</div>
<div id="after-container"> <div id="after-container">
@ -210,77 +248,169 @@
<script th:inline="javascript"> <script th:inline="javascript">
$(function() { $(function() {
// 模拟数据 // 模拟数据
const mockData = { const POSITION_ORDER = [
before: [ '左前轮', '右前轮', // 轴1
{ pos: '左前', brand: '米其林', spec: '275/70R22.5', dot: '1223', depth: '12.5mm', status: 'normal' }, '左外轮', '左内轮', '右内轮', '右外轮' // 轴2
{ pos: '右前', brand: '米其林', spec: '275/70R22.5', dot: '1223', depth: '12.0mm', status: 'normal' }, ];
{ pos: '左外', brand: '赛轮', spec: '245/70R19.5', dot: '3725', depth: '16.30mm', status: 'normal' }, var backendData = /*[[${bizOrderTireDetails}]]*/ null;
{ pos: '左内', brand: '赛轮', spec: '245/70R19.5', dot: '4425', depth: '16.30mm', status: 'normal' }, var beforeendData = /*[[${bizOrderTireDetailsBefore}]]*/ null;
{ pos: '右内', brand: '', spec: '', dot: '', depth: '', status: 'empty' }, // 空位
{ pos: '右外', brand: '', spec: '', dot: '', depth: '', status: 'empty' }
],
after: [
{ pos: '左前', brand: '米其林', spec: '275/70R22.5', dot: '1223', depth: '12.5mm', status: 'normal' },
{ pos: '右前', brand: '米其林', spec: '275/70R22.5', dot: '1223', depth: '12.0mm', status: 'normal' },
{ pos: '左外', brand: '赛轮', spec: '245/70R19.5', dot: '3725', depth: '16.30mm', status: 'removed' }, // 卸胎
{ pos: '左内', brand: '赛轮', spec: '245/70R19.5', dot: '4425', depth: '16.30mm', status: 'removed' }, // 卸胎
{ pos: '右内', brand: '', spec: '', dot: '', depth: '', status: 'empty' },
{ pos: '右外', brand: '', spec: '', dot: '', depth: '', status: 'empty' }
]
};
// 检查数据是否为空
if (!backendData) {
console.error("未获取到轮胎数据");
return;
}
if (!beforeendData) {
console.error("未获取到轮胎数据");
return;
}
// 使用新函数处理数据
var formattedData = transformTyreData(backendData);
var formattedDataBefore = transformTyreData(beforeendData);
// --- 数据格式化 ---
// 假设后端数据结构包含position(位置), brand(品牌), spec(规格), dot, depth(深度)
// 这里需要将后端数据映射为 renderTyres 函数需要的格式
// var formattedData = backendData.map(function(item) {
// // 这里的字段名需要根据你实际返回的 Map 的 Key 进行调整
// // 例如:如果后端返回的是 "tireBrand",这里就写 item.tireBrand
// return {
// pos: item.position || item.pos || '未知', // 轮胎位置 (左前/右后等)
// brand: item.brand || '-', // 品牌
// spec: item.spec || '-', // 规格
// dot: item.dot || '-', // DOT
// depth: (item.depth || '0') + 'mm', // 深度 (加上单位)
// // 逻辑判断:如果深度小于某个值或者有特定标记,标记为 'removed',否则 'normal'
// // 这里简化处理,假设只要数据存在就是 normal或者根据后端字段 item.status 判断
// status: item.status === 'removed' ? 'removed' : 'normal'
// };
// });
// var formattedDataBefore = beforeendData.map(function(item) {
// // 这里的字段名需要根据你实际返回的 Map 的 Key 进行调整
// // 例如:如果后端返回的是 "tireBrand",这里就写 item.tireBrand
// return {
// pos: item.position || item.pos || '未知', // 轮胎位置 (左前/右后等)
// brand: item.brand || '-', // 品牌
// spec: item.spec || '-', // 规格
// dot: item.dot || '-', // DOT
// depth: (item.depth || '0') + 'mm', // 深度 (加上单位)
// // 逻辑判断:如果深度小于某个值或者有特定标记,标记为 'removed',否则 'normal'
// // 这里简化处理,假设只要数据存在就是 normal或者根据后端字段 item.status 判断
// status: item.status || 'normal'
// };
// });
// 渲染函数 // 渲染函数
function renderTyres(data, containerId) { function renderTyres(data, containerId) {
let html = ''; let html = '';
// 第一轴 (前轮) // --- 第一轴 (前轮) ---
html += '<div class="axle-group">'; html += '<div class="axle-group">';
html += '<div class="axle-label">1</div>'; // 轴号 html += '<div class="axle-label">1</div>';
html += createTyreCard(data[0]);
html += createTyreCard(data[1]); // 渲染前轴的两个位置 (索引 0 和 1)
// 如果数据不存在,传入 null 或空对象
html += createTyreCard(data[0] || null);
html += createTyreCard(data[1] || null);
html += '</div>'; html += '</div>';
// 第二轴 (后轮) // --- 第二轴 (后轮) ---
html += '<div class="axle-group">'; html += '<div class="axle-group">';
html += '<div class="axle-label">2</div>'; // 轴号 html += '<div class="axle-label">2</div>';
html += createTyreCard(data[2]);
html += createTyreCard(data[3]); // 渲染后轴的四个位置 (索引 2, 3, 4, 5)
html += createTyreCard(data[4]); // 如果数据不存在,传入 null
html += createTyreCard(data[5]); html += createTyreCard(data[2] || null);
html += createTyreCard(data[3] || null);
html += createTyreCard(data[4] || null);
html += createTyreCard(data[5] || null);
html += '</div>'; html += '</div>';
$(containerId).html(html); $(containerId).html(html);
} }
// 创建单个轮胎卡片 // 创建单个轮胎卡片
function createTyreCard(tyre) { function createTyreCard(tyre) {
// 空位处理 // 1. 如果 tyre 是 null 或 undefined直接返回空位
if (tyre.status === 'empty') { if (!tyre) {
return `<div class="tyre-card status-empty"> return `
<div class="pos-tag">${tyre.pos}</div> <div class="tyre-card status-empty">
</div>`; <div class="pos-tag">未知</div>
</div>`;
} }
// 状态类名 // 2. 如果 tyre 存在,但 status 是 'empty' (根据你的旧逻辑)
let statusClass = tyre.status === 'removed' ? 'status-removed' : ''; if (tyre.status === 'empty') {
// 注意:这里你可能需要根据 tyre.pos 来显示位置,如果 tyre 对象里有 pos 字段
return `
<div class="tyre-card status-empty">
<div class="pos-tag">${tyre.pos || '未知'}</div>
</div>`;
}
return `<div class="tyre-card ${statusClass}"> // 3. 正常轮胎逻辑
<div class="pos-tag">${tyre.pos}</div> // let statusClass = tyre.status === 'removed' ? 'status-removed' : '';
<div class="tyre-pattern"></div> <!-- 胎纹背景 --> // 动态判断类名
<div class="tyre-info"> let statusClass = '';
<div class="tyre-brand">${tyre.brand}</div> if (tyre.status === 'removed') {
<div class="tyre-spec">${tyre.spec}</div> statusClass = 'status-removed';
<div class="tyre-dot">DOT ${tyre.dot}</div> } else if (tyre.status === 'installed') { // 假设装胎的状态值是 'installed'
<div class="tyre-depth">${tyre.depth}</div> statusClass = 'status-installed';
<div class="tyre-status">常规检查</div> }
</div> return `
</div>`; <div class="tyre-card ${statusClass}">
<div class="pos-tag">${tyre.pos}</div>
<div class="tyre-pattern"></div>
<div class="tyre-info">
<div class="tyre-brand">${tyre.brand}</div>
<div class="tyre-spec">${tyre.spec}</div>
<div class="tyre-dot">${tyre.dot}</div>
<div class="tyre-depth">${tyre.depth}</div>
<div class="tyre-status">常规检查</div>
</div>
</div>`;
}
// 执行渲染
renderTyres(formattedDataBefore, '#before-container');
renderTyres(formattedData, '#after-container');
// --- 工具函数:将后端扁平数据转换为固定长度的数组 ---
function transformTyreData(backendList) {
// 1. 先创建一个长度为6的空数组填充 null (代表空位)
let result = new Array(6).fill(null);
// 2. 遍历后端传来的每一条数据
if (backendList && backendList.length > 0) {
backendList.forEach(item => {
// 3. 获取后端数据中的位置名称
let pos = item.position || item.pos || '未知';
// 4. 查找这个位置在标准顺序 (POSITION_ORDER) 中的索引
// 例如:后端数据是 {position: "右内轮"},它在 POSITION_ORDER 中的索引是 4
let index = POSITION_ORDER.indexOf(pos);
// 5. 如果找到了对应的位置,就把格式化后的数据填入 result 数组的对应索引
if (index !== -1) {
result[index] = {
pos: pos,
brand: item.brand || '-',
spec: item.spec || '-',
dot: item.dot || '-',
depth: (item.depth || '0') + 'mm',
// 这里处理 status 逻辑:如果后端没传 status默认为 'normal'
status: item.status || 'normal'
};
}
// 如果没找到 (比如后端传了"备胎"这种页面不显示的位置),则忽略
});
}
return result; // 返回 [null, 轮胎数据, null, ...] 这种结构
} }
// 执行渲染
renderTyres(mockData.before, '#before-container');
renderTyres(mockData.after, '#after-container');
}); });
</script> </script>
</body> </body>
</html> </html>

@ -0,0 +1,46 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('新增轮胎安装记录')" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-install-add">
<div class="form-group">
<label class="col-sm-3 control-label">轮胎RFID</label>
<div class="col-sm-8">
<input name="tyreRfid" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">类型 0安装 1卸下</label>
<div class="col-sm-8">
<select name="type" class="form-control m-b">
<option value="">所有</option>
</select>
<span class="help-block m-b-none"><i class="fa fa-info-circle"></i> 代码生成请选择字典属性</span>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">里程:</label>
<div class="col-sm-8">
<input name="mileage" class="form-control" type="text">
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<script type="text/javascript">
var prefix = ctx + "tyre/install"
$("#form-install-add").validate({
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/add", $('#form-install-add').serialize());
}
}
</script>
</body>
</html>

@ -0,0 +1,65 @@
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
<th:block th:include="include :: header('修改轮胎安装记录')" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-install-edit" th:object="${recordTyreInstall}">
<input name="id" th:field="*{id}" type="hidden">
<div class="form-group">
<label class="col-sm-3 control-label">轮胎RFID</label>
<div class="col-sm-8">
<input name="tyreRfid" th:field="*{tyreRfid}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">轮胎胎号:</label>
<div class="col-sm-8">
<input name="tyreNo" th:field="*{tyreNo}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">轮胎自编号:</label>
<div class="col-sm-8">
<input name="selfNo" th:field="*{selfNo}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">车辆:</label>
<div class="col-sm-8">
<input name="carNo" th:field="*{carNo}" class="form-control" type="text">
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">轮位:</label>
<div class="col-sm-8">
<select name="wheelPostion" class="form-control m-b" th:with="type=${@dict.getType('WheelPosition')}">
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">里程:</label>
<div class="col-sm-8">
<input name="mileage" th:field="*{mileage}" class="form-control" type="text">
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
<script type="text/javascript">
var prefix = ctx + "tyre/install";
$("#form-install-edit").validate({
focusCleanup: true
});
function submitHandler() {
if ($.validate.form()) {
$.operate.save(prefix + "/edit", $('#form-install-edit').serialize());
}
}
</script>
</body>
</html>

@ -0,0 +1,173 @@
<!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 search-collapse">
<form id="formId">
<div class="select-list">
<ul>
<li>
<p>轮胎芯片:</p>
<input type="text" name="tyreRfid"/>
</li>
<li>
<p>胎号:</p>
<input type="text" name="tyreNo"/>
</li>
<li>
<p>自编号:</p>
<input type="text" name="selfNo"/>
</li>
<li>
<p>车牌号:</p>
<input type="text" name="carNo"/>
</li>
<li>
轮位:<select name="wheelPostion" th:with="type=${@dict.getType('WheelPosition')}">
<option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</li>
<li>
轮胎品牌:<select name="tyreBrand" th:with="type=${@dict.getType('brand')}">
<option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
</li>
<li>
<p>操作类型</p>
<select name="type" th:with="type=${@dict.getType('install_type')}">
<option value="1">卸下</option>
<!-- <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>-->
</select>
</li>
<li>
<a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i>&nbsp;搜索</a>
<a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i class="fa fa-refresh"></i>&nbsp;重置</a>
</li>
</ul>
</div>
</form>
</div>
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="tyre:install:add">
<i class="fa fa-plus"></i> 添加
</a>
<a class="btn btn-primary single disabled" onclick="$.operate.edit()" shiro:hasPermission="tyre:install:edit">
<i class="fa fa-edit"></i> 修改
</a>
<a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" shiro:hasPermission="tyre:install:remove">
<i class="fa fa-remove"></i> 删除
</a>
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="tyre:install:export">
<i class="fa fa-download"></i> 导出
</a>
</div>
<div class="col-sm-12 select-table table-striped">
<table id="bootstrap-table"></table>
</div>
</div>
</div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var editFlag = [[${@permission.hasPermi('tyre:install:edit')}]];
var removeFlag = [[${@permission.hasPermi('tyre:install:remove')}]];
var prefix = ctx + "tyre/install";
var datas = [[${@dict.getType('install_type')}]];
$(function() {
var options = {
url: prefix + "/list",
createUrl: prefix + "/add",
updateUrl: prefix + "/edit/{id}",
removeUrl: prefix + "/remove",
exportUrl: prefix + "/export",
modalName: "轮胎安装记录",
columns: [{
checkbox: true
},
{
field : 'id',
title : '主键',
visible: false
},
{
field : 'tyreRfid',
title : '轮胎芯片'
},
{
field : 'tyreNo',
title : '外胎号'
},
{
field : 'selfNo',
title : '自编号'
},
{
field : 'tyreBrand',
title : '品牌'
},
{
field : 'tyreModel',
title : '规格型号'
},
{
field : 'team',
title : '所属分公司车队'
},
{
field : 'carNo',
title : '车辆'
},
{
field : 'wheelPostion',
title : '轮位'
},
{
field : 'type',
title : '类型',
formatter: function(value, row, index) {
return $.table.selectDictLabel(datas, value);
}
},
{
field : 'mileage',
title : '里程(公里数)'
},
{
field : 'patternDepth',
title : '花纹深度(毫米)'
},
{
field : 'remark',
title : '备注'
},
{
field : 'createBy',
title : '操作人'
},
{
field : 'createTime',
title : '操作时间'
},
// {
// title: '操作',
// align: 'center',
// formatter: function(value, row, index) {
// var actions = [];
// actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> ');
// actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>删除</a>');
// return actions.join('');
// }
// }
]
};
$.table.init(options);
});
</script>
</body>
</html>

@ -47,6 +47,8 @@ public class BizOrderTireDetail extends BaseEntity
@Excel(name = "轮胎状态描述", readConverterExp = "截=图中的“新胎”、“模拟数据”") @Excel(name = "轮胎状态描述", readConverterExp = "截=图中的“新胎”、“模拟数据”")
private String tireStatus; private String tireStatus;
public void setDetailId(Long detailId) public void setDetailId(Long detailId)
{ {
this.detailId = detailId; this.detailId = detailId;

@ -63,4 +63,6 @@ public interface BizMaintenanceOrderMapper
public int deleteBizMaintenanceOrderByOrderIds(String[] orderIds); public int deleteBizMaintenanceOrderByOrderIds(String[] orderIds);
BizMaintenanceOrder selectBizMaintenanceOrderTD(); BizMaintenanceOrder selectBizMaintenanceOrderTD();
BizMaintenanceOrder selectBizMaintenanceOrderByOrderIdBefore(BizMaintenanceOrder bizMaintenanceOrder);
} }

@ -1,6 +1,8 @@
package com.ruoyi.system.mapper; package com.ruoyi.system.mapper;
import java.util.List; import java.util.List;
import java.util.Map;
import com.ruoyi.system.domain.BizOrderTireDetail; import com.ruoyi.system.domain.BizOrderTireDetail;
/** /**
@ -58,4 +60,8 @@ public interface BizOrderTireDetailMapper
* @return * @return
*/ */
public int deleteBizOrderTireDetailByDetailIds(String[] detailIds); public int deleteBizOrderTireDetailByDetailIds(String[] detailIds);
List<Map> selectBizOrderTireDetail(BizOrderTireDetail bizOrderTireDetail);
List<Map> selectBaseTrieInstall(String plateNumber);
} }

@ -2,6 +2,7 @@ package com.ruoyi.system.service;
import java.util.List; import java.util.List;
import com.ruoyi.system.domain.BizMaintenanceOrder; import com.ruoyi.system.domain.BizMaintenanceOrder;
import org.apache.ibatis.annotations.Param;
/** /**
* Service * Service
@ -63,4 +64,6 @@ public interface IBizMaintenanceOrderService
BizMaintenanceOrder selectBizMaintenanceOrderTD(); BizMaintenanceOrder selectBizMaintenanceOrderTD();
BizMaintenanceOrder selectBizMaintenanceOrderByOrderIdBefore(BizMaintenanceOrder bizMaintenanceOrder);
} }

@ -1,6 +1,8 @@
package com.ruoyi.system.service; package com.ruoyi.system.service;
import java.util.List; import java.util.List;
import java.util.Map;
import com.ruoyi.system.domain.BizOrderTireDetail; import com.ruoyi.system.domain.BizOrderTireDetail;
/** /**
@ -58,4 +60,8 @@ public interface IBizOrderTireDetailService
* @return * @return
*/ */
public int deleteBizOrderTireDetailByDetailId(Long detailId); public int deleteBizOrderTireDetailByDetailId(Long detailId);
List<Map> selectBizOrderTireDetail(BizOrderTireDetail bizOrderTireDetail);
List<Map> selectBaseTrieInstall(String plateNumber);
} }

@ -127,7 +127,7 @@ public class BaseInventoryServiceImpl implements IBaseInventoryService
int m=0,t=0; int m=0,t=0;
try { try {
if (isbaseInventory!=null){ if (isbaseInventory!=null){
return AjaxResult.error("该轮胎已仓库"); return AjaxResult.error("该轮胎已在!");
}else { }else {
//插入库存表以及基础信息表 //插入库存表以及基础信息表
baseInventory.setStatus("0"); baseInventory.setStatus("0");

@ -115,4 +115,9 @@ public class BizMaintenanceOrderServiceImpl implements IBizMaintenanceOrderServi
public BizMaintenanceOrder selectBizMaintenanceOrderTD() { public BizMaintenanceOrder selectBizMaintenanceOrderTD() {
return bizMaintenanceOrderMapper.selectBizMaintenanceOrderTD(); return bizMaintenanceOrderMapper.selectBizMaintenanceOrderTD();
} }
@Override
public BizMaintenanceOrder selectBizMaintenanceOrderByOrderIdBefore(BizMaintenanceOrder bizMaintenanceOrder) {
return bizMaintenanceOrderMapper.selectBizMaintenanceOrderByOrderIdBefore(bizMaintenanceOrder);
}
} }

@ -1,6 +1,8 @@
package com.ruoyi.system.service.impl; package com.ruoyi.system.service.impl;
import java.util.List; import java.util.List;
import java.util.Map;
import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -94,4 +96,14 @@ public class BizOrderTireDetailServiceImpl implements IBizOrderTireDetailService
{ {
return bizOrderTireDetailMapper.deleteBizOrderTireDetailByDetailId(detailId); return bizOrderTireDetailMapper.deleteBizOrderTireDetailByDetailId(detailId);
} }
@Override
public List<Map> selectBizOrderTireDetail(BizOrderTireDetail bizOrderTireDetail) {
return bizOrderTireDetailMapper.selectBizOrderTireDetail(bizOrderTireDetail);
}
@Override
public List<Map> selectBaseTrieInstall(String plateNumber) {
return bizOrderTireDetailMapper.selectBaseTrieInstall(plateNumber);
}
} }

@ -50,7 +50,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectBaseInventoryVo"/> <include refid="selectBaseInventoryVo"/>
<where> <where>
<if test="tyreRfid != null and tyreRfid != ''"> and tyre_rfid = #{tyreRfid}</if> <if test="tyreRfid != null and tyreRfid != ''"> and tyre_rfid = #{tyreRfid}</if>
<if test="tyreOutsideId != null and tyreOutsideId != ''"> and tyre_outside_id = #{tyreOutsideId}</if> <!-- <if test="tyreOutsideId != null and tyreOutsideId != ''"> and tyre_outside_id = #{tyreOutsideId}</if>-->
<if test="number != null "> and number = #{number}</if> <if test="number != null "> and number = #{number}</if>
</where> </where>
</select> </select>

@ -121,6 +121,40 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
WHERE WHERE
DATE(create_time) = CURDATE(); DATE(create_time) = CURDATE();
</select> </select>
<select id="selectBizMaintenanceOrderByOrderIdBefore"
resultMap="BizMaintenanceOrderResult" parameterType="BizMaintenanceOrder">
SELECT
order_id,
order_no,
vehicle_id,
plate_number,
type_code,
sd.dept_name as factoryName,
input_mileage,
last_mileage,
maintain_date,
description,
bmo.`STATUS`,
order_type,
su.user_name as create_by,
bmo.create_time,
sus.user_name as update_by,
bmo.update_time,
bmo.remark,
bc.line
FROM
biz_maintenance_order bmo
LEFT JOIN sys_dept sd ON bmo.factory_id = sd.dept_id
LEFT JOIN sys_user su ON su.login_name = bmo.create_by
LEFT JOIN sys_user sus ON sus.login_name = bmo.update_by
LEFT JOIN base_car bc ON bc.id = bmo.vehicle_id
WHERE
bmo.order_id != #{orderId}
AND bmo.plate_number = #{plateNumber}
ORDER BY
bmo.create_time DESC -- 关键点1按照维保日期倒序排列最近的时间在前
LIMIT 1; -- 关键点2只取第一条数据
</select>
<insert id="insertBizMaintenanceOrder" parameterType="BizMaintenanceOrder" useGeneratedKeys="true" keyProperty="orderId"> <insert id="insertBizMaintenanceOrder" parameterType="BizMaintenanceOrder" useGeneratedKeys="true" keyProperty="orderId">
insert into biz_maintenance_order insert into biz_maintenance_order

@ -37,10 +37,40 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</where> </where>
</select> </select>
<select id="selectBizOrderTireDetailByDetailId" parameterType="Long" resultMap="BizOrderTireDetailResult"> <select id="selectBizOrderTireDetailByDetailId" parameterType="Long" resultMap="BizOrderTireDetailResult">
<include refid="selectBizOrderTireDetailVo"/> <include refid="selectBizOrderTireDetailVo"/>
where detail_id = #{detailId} where detail_id = #{detailId}
</select> </select>
<select id="selectBizOrderTireDetail" resultType="java.util.Map" parameterType="BizOrderTireDetail">
SELECT
bt.tyre_brand as brand,
bt.tyre_model as spec,
botd.tire_code as dot,
botd.tread_depth as depth,
sdd.dict_label as position,
IFNULL(botd.tire_status, 'normal') as status
FROM
biz_order_tire_detail botd
LEFT JOIN base_tyre bt ON bt.tyre_id = botd.tire_id
LEFT JOIN sys_dict_data sdd ON sdd.dict_code = botd.position_id
<where>
<if test="orderId != null "> and order_id = #{orderId}</if>
</where>
</select>
<select id="selectBaseTrieInstall" resultType="java.util.Map" parameterType="String">
SELECT
bt.tyre_brand as brand,
bt.tyre_model as spec,
bt.tyre_no as dot,
bt.pattern_depth as depth,
bt.wheel_postion as position,
'installed' as status
FROM
base_tyre bt
WHERE
car_no = #{plateNumber}
</select>
<insert id="insertBizOrderTireDetail" parameterType="BizOrderTireDetail" useGeneratedKeys="true" keyProperty="detailId"> <insert id="insertBizOrderTireDetail" parameterType="BizOrderTireDetail" useGeneratedKeys="true" keyProperty="detailId">
insert into biz_order_tire_detail insert into biz_order_tire_detail

Loading…
Cancel
Save