修改PDA工单最终提交的接口方法,增加图片上传

master
杨万里 2 weeks ago
parent 0a2262a922
commit dc9191630f

@ -8,11 +8,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.BaseCar;
@ -148,9 +144,10 @@ public class BaseCarController extends BaseController
{
return toAjax(baseCarService.deleteBaseCarByIds(ids));
}
@PostMapping("/PdaQueryCarList")
@ResponseBody
public AjaxResult PdaQueryCarList(BaseCar baseCar)
public AjaxResult PdaQueryCarList(@RequestBody BaseCar baseCar)
{
List<BaseCar> list = baseCarService.selectBaseCarList(baseCar);
return AjaxResult.success(list);

@ -5,6 +5,7 @@ import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.ShiroUtils;
@ -24,10 +25,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -179,117 +177,10 @@ public class BaseTyreController extends BaseController
return getDataTable(list);
}
@PostMapping("/statList")
public AjaxResult statList() {
List<TyreStatVO> list = new ArrayList<>();
// --- 模拟数据开始 ---
// 1. 观澜修理厂
TyreStatVO row1 = new TyreStatVO();
row1.setDeptName("观澜修理厂");
row1.setFactoryName("观澜修理厂");
row1.setNewTyre(23);
row1.setRotateTyre(20);
row1.setRemoldTyre(0);
row1.setRepairTyre(0);
row1.setOnCarTyre(768);
row1.setPendingAppraise(0);
row1.setPendingRepair(0);
row1.setPendingRemold(0);
row1.setPendingScrap(0);
row1.setScrapped(0);
list.add(row1);
// 2. 观湖修理厂
TyreStatVO row2 = new TyreStatVO();
row2.setDeptName("观湖修理厂");
row2.setFactoryName("观湖修理厂");
row2.setNewTyre(71);
row2.setRotateTyre(2);
row2.setRemoldTyre(0);
row2.setRepairTyre(0);
row2.setOnCarTyre(753);
row2.setPendingAppraise(0);
row2.setPendingRepair(0);
row2.setPendingRemold(0);
row2.setPendingScrap(0);
row2.setScrapped(0);
list.add(row2);
// 3. 清湖修理厂
TyreStatVO row3 = new TyreStatVO();
row3.setDeptName("清湖修理厂");
row3.setFactoryName("清湖修理厂");
row3.setNewTyre(22);
row3.setRotateTyre(10);
row3.setRemoldTyre(0);
row3.setRepairTyre(0);
row3.setOnCarTyre(695);
row3.setPendingAppraise(0);
row3.setPendingRepair(0);
row3.setPendingRemold(0);
row3.setPendingScrap(0);
row3.setScrapped(0);
list.add(row3);
// 4. 松岗修理厂
TyreStatVO row4 = new TyreStatVO();
row4.setDeptName("松岗修理厂");
row4.setFactoryName("松岗修理厂");
row4.setNewTyre(74);
row4.setRotateTyre(1);
row4.setRemoldTyre(1);
row4.setRepairTyre(0);
row4.setOnCarTyre(484);
row4.setPendingAppraise(0);
row4.setPendingRepair(0);
row4.setPendingRemold(0);
row4.setPendingScrap(1);
row4.setScrapped(0);
list.add(row4);
// 5. 新和修理厂
TyreStatVO row5 = new TyreStatVO();
row5.setDeptName("新和修理厂");
row5.setFactoryName("新和修理厂");
row5.setNewTyre(131);
row5.setRotateTyre(1);
row5.setRemoldTyre(0);
row5.setRepairTyre(0);
row5.setOnCarTyre(473);
row5.setPendingAppraise(0);
row5.setPendingRepair(0);
row5.setPendingRemold(0);
row5.setPendingScrap(0);
row5.setScrapped(1);
list.add(row5);
// --- 计算合计行 ---
TyreStatVO total = new TyreStatVO();
total.setDeptName("合计");
total.setFactoryName(""); // 合计行通常不需要显示场站名
// 这里简单手动累加一下,实际生产中可以用 Stream API
int newSum = list.stream().mapToInt(TyreStatVO::getNewTyre).sum();
int rotSum = list.stream().mapToInt(TyreStatVO::getRotateTyre).sum();
int remSum = list.stream().mapToInt(TyreStatVO::getRemoldTyre).sum();
int repSum = list.stream().mapToInt(TyreStatVO::getRepairTyre).sum();
int onCarSum = list.stream().mapToInt(TyreStatVO::getOnCarTyre).sum();
int penScrapSum = list.stream().mapToInt(TyreStatVO::getPendingScrap).sum();
int scrapSum = list.stream().mapToInt(TyreStatVO::getScrapped).sum();
total.setNewTyre(newSum);
total.setRotateTyre(rotSum);
total.setRemoldTyre(remSum);
total.setRepairTyre(repSum);
total.setOnCarTyre(onCarSum);
total.setPendingScrap(penScrapSum);
total.setScrapped(scrapSum);
// 将合计行插入到第一位(或者最后一位,看你需求,图中是在第一位)
list.add(0, total);
return AjaxResult.success(list);
@ResponseBody
public TableDataInfo statList(SysDept sysDept) {
List<Map> list = baseTyreService.vTyreStockSummary(sysDept);
return getDataTable(list);
}
@PostMapping("/getCarBingTire")

@ -9,11 +9,11 @@ import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.domain.BaseCar;
import com.ruoyi.system.domain.BizOrderTireDetail;
import com.ruoyi.system.domain.MaintenanceOrderDTO;
import com.ruoyi.system.domain.*;
import com.ruoyi.system.service.IBaseCarService;
import com.ruoyi.system.service.IBizOrderTireDetailService;
import com.ruoyi.system.service.ISysAttachmentService;
import com.sun.jna.platform.win32.OaIdl;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@ -22,7 +22,6 @@ import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.BizMaintenanceOrder;
import com.ruoyi.system.service.IBizMaintenanceOrderService;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
@ -30,6 +29,8 @@ import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.web.multipart.MultipartFile;
import static com.ruoyi.common.utils.file.FileUploadUtils.extractFilename;
/**
* Controller
*
@ -51,6 +52,9 @@ public class BizMaintenanceOrderController extends BaseController
@Autowired
private IBizOrderTireDetailService bizOrderTireDetailService;
@Autowired
private ISysAttachmentService iSysAttachmentService;
@RequiresPermissions("system:order:view")
@GetMapping()
public String order()
@ -191,8 +195,9 @@ public class BizMaintenanceOrderController extends BaseController
@PostMapping("/PDASaveMaintenanceOrder")
@ResponseBody
@Transactional(rollbackFor = Exception.class)
public AjaxResult PDASaveMaintenanceOrder(@RequestBody MaintenanceOrderDTO bizMaintenanceOrder)
public AjaxResult PDASaveMaintenanceOrder(String json, List<MultipartFile> files)
{
MaintenanceOrderDTO bizMaintenanceOrder= JSONObject.parseObject(json, MaintenanceOrderDTO.class);
// 2. 校验参数
if (bizMaintenanceOrder == null || bizMaintenanceOrder.getOrder() == null) {
return error("参数不能为空");
@ -215,6 +220,27 @@ public class BizMaintenanceOrderController extends BaseController
bizOrderTireDetailService.insertBizOrderTireDetail(bizOrderTireDetail);
}
}
if (files!=null && files.size()>0){
//保存图片
for (int i = 0; i < files.size(); i++) {
try {
String filePath= FileUploadUtils.upload(RuoYiConfig.getUploadPath(), files.get(i));
//设置图片名称
String fileName = extractFilename(files.get(i));
//保存图片表
SysAttachment sysAttachment =new SysAttachment();
sysAttachment.setFileName(fileName);
sysAttachment.setFilePath(filePath);
sysAttachment.setFileSize(files.get(i).getSize());
sysAttachment.setFileType(files.get(i).getContentType());
sysAttachment.setOrderId(orderId);
iSysAttachmentService.insertSysAttachment(sysAttachment);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
return success("保存成功");
} else {
// 5. 如果更新失败,直接返回错误,且不会执行下面的插入操作
@ -229,14 +255,11 @@ public class BizMaintenanceOrderController extends BaseController
String fileName = null;
try {
fileName = FileUploadUtils.upload(RuoYiConfig.getUploadPath(), files.get(i));
tireDetails.get(i).setName(fileName);
// tireDetails.get(i).setName(fileName);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return AjaxResult.error();
}

@ -143,39 +143,38 @@
<!-- 顶部基础信息 -->
<div class="info-card">
<span class="license-plate" id="licensePlate">粤B71857D</span>
<span class="license-plate" id="licensePlate" th:text="*{bizMaintenanceOrder.plateNumber}"></span>
<div class="row">
<div class="col-sm-3 info-row">
<span class="info-label">所属场站:</span><span class="info-value" id="factory">清湖修理厂</span>
<span class="info-label">所属场站:</span><span class="info-value" id="factory" th:text="*{bizMaintenanceOrder.factoryName}"></span>
</div>
<div class="col-sm-3 info-row">
<span class="info-label">保养日期:</span><span class="info-value" id="maintDate">2026-04-16</span>
<span class="info-label">保养日期:</span><span class="info-value" id="maintDate" th:text="${#dates.format(bizMaintenanceOrder.maintainDate, 'yyyy-MM-dd')}"></span>
</div>
<div class="col-sm-3 info-row">
<span class="info-label">创建时间:</span><span class="info-value" id="createTime">2026-04-17 10:49:49</span>
<span class="info-label">创建时间:</span><span class="info-value" id="createTime" th:text="${#dates.format(bizMaintenanceOrder.createTime, 'yyyy-MM-dd HH:mm:ss')}"></span>
</div>
<div class="col-sm-3 info-row">
<span class="info-label">创建人:</span><span class="info-value" id="creator">冯伟</span>
<span class="info-label">创建人:</span><span class="info-value" id="creator" th:text="*{bizMaintenanceOrder.createBy}"></span>
</div>
<div class="col-sm-3 info-row">
<span class="info-label">完成时间:</span><span class="info-value" id="finishTime">2026-04-17 10:51:07</span>
<span class="info-label">完成时间:</span><span class="info-value" id="finishTime" th:text="${#dates.format(bizMaintenanceOrder.updateTime, 'yyyy-MM-dd HH:mm:ss')}"></span>
</div>
<div class="col-sm-3 info-row">
<span class="info-label">完成操作人:</span><span class="info-value" id="finishUser">冯伟</span>
<span class="info-label">完成操作人:</span><span class="info-value" id="finishUser" th:text="*{bizMaintenanceOrder.updateBy}"></span>
</div>
<div class="col-sm-3 info-row">
<span class="info-label">当前车辆里程(km)</span><span class="info-value" id="mileage">311233.00</span>
<span class="info-label">当前车辆里程(km)</span><span class="info-value" id="mileage" th:text="*{bizMaintenanceOrder.inputMileage}"></span>
</div>
<div class="col-sm-3 info-row">
<span class="info-label">线路:</span><span class="info-value" id="route">M204</span>
</div>
<div class="col-sm-3 info-row">
<span class="info-label">所属部门:</span><span class="info-value" id="dept">第四分公司-同胜</span>
<span class="info-label">线路:</span><span class="info-value" id="route" th:text="*{bizMaintenanceOrder.line}"></span>
</div>
<div class="col-sm-3 info-row">
<span class="info-label">备注:</span><span class="info-value" id="remark">-</span>
<span class="info-label">补充说明:</span><span class="info-value" id="remark" th:text="*{bizMaintenanceOrder.description}">-</span>
</div>
<div class="col-sm-3 info-row">
<span class="info-label">备注:</span><span class="info-value" id="remark" th:text="*{bizMaintenanceOrder.remark}">-</span>
</div>
</div>
</div>

@ -10,21 +10,10 @@
<form id="formId">
<div class="select-list">
<ul>
<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>
<p>修理厂站:</p>
<input name="deptName" onclick="selectDeptTree()" id="treeName" type="text"/>
</li>
<li>
<p>轮胎类别:</p>
<select name="tyreType" th:with="type=${@dict.getType('tyre_type')}">
<option value="">所有</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>
@ -48,12 +37,12 @@
</div>
<th:block th:include="include :: footer" />
<script th:inline="javascript">
var prefix = ctx + "demo/table";
var prefix = ctx + "tyre/tyre";
var datas = [[${@dict.getType('sys_normal_disable')}]];
$(function() {
var options = {
url: prefix + "/list",
url: prefix + "/statList",
showSearch: false,
showRefresh: false,
showToggle: false,
@ -62,7 +51,7 @@
[{
title : '统计维度',
align : 'center',
colspan : 2
colspan : 1
}, {
title : '可用轮胎库存',
align : 'center',
@ -75,24 +64,20 @@
}
],
[
{
field : 'userId',
title : '所属部门'
}, {
field : 'userCode',
[{
field : 'dept_name',
title : '所属场站'
}, {
field : 'userName',
field : '新胎',
title : '全新胎'
}, {
field : 'userPhone',
field : '周转胎',
title : '周转胎'
}, {
field : 'userEmail',
field : '翻新胎',
title : '翻新胎'
}, {
field : 'userBalance',
field : '实验胎',
title : '实验胎'
}
]
@ -100,6 +85,33 @@
};
$.table.init(options);
});
/* 用户管理-新增-选择部门树 */
function selectDeptTree() {
var treeId = $("#treeId").val();
var deptId = $.common.isEmpty(treeId) ? "100" : $("#treeId").val();
var url = ctx + "system/user/selectDeptTree/" + deptId;
var btn = ['<i class="fa fa-check"></i> 确认', '<i class="fa fa-trash-o"></i> 清除', '<i class="fa fa-close"></i> 关闭'];
var options = {
title: '选择部门',
width: "380",
url: url,
btn: btn,
btn2: function(index, layero) {
$("#treeId").val("");
$("#treeName").val("");
$.modal.close(index);
},
callBack: doSubmit
};
$.modal.openOptions(options);
}
function doSubmit(index, layero){
var body = $.modal.getChildFrame(index);
$("#treeId").val(body.find('#treeId').val());
$("#treeName").val(body.find('#treeName').val());
$.modal.close(index);
}
</script>
</body>

@ -10,6 +10,8 @@ import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import java.math.BigDecimal;
/**
* base_car
*
@ -38,6 +40,17 @@ public class BaseCar extends BaseEntity
@NotBlank(message = "扫描RFID不能为空")
private String rfid;
private BigDecimal inputMileage;
public BigDecimal getInputMileage() {
return inputMileage;
}
public void setInputMileage(BigDecimal inputMileage) {
this.inputMileage = inputMileage;
}
public String getRfid() {
return rfid;
}

@ -76,8 +76,18 @@ public class BizMaintenanceOrder extends BaseEntity
private String updateName;
@Excel(name = "维保时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
private String line;
public String getLine() {
return line;
}
public void setLine(String line) {
this.line = line;
}
public String getUserName() {
return userName;

@ -1,6 +1,7 @@
package com.ruoyi.system.domain;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@ -11,4 +12,6 @@ public class MaintenanceOrderDTO {
// 原来的轮胎详情对象(如果是列表,可以用 List<BizOrderTireDetail>
private List<BizOrderTireDetail> tireDetails;
private List<MultipartFile> multipartFiles;
}

@ -2,10 +2,12 @@ package com.ruoyi.system.mapper;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.system.domain.BaseTyre;
import com.ruoyi.system.domain.vo.BaseTyreVo;
import java.util.List;
import java.util.Map;
/**
* Mapper
@ -69,4 +71,5 @@ public interface BaseTyreMapper
String getTeamByUser(String createBy);
List<Map> vTyreStockSummary(SysDept sysDept);
}

@ -2,10 +2,12 @@ package com.ruoyi.system.service;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.system.domain.BaseTyre;
import com.ruoyi.system.domain.vo.BaseTyreVo;
import java.util.List;
import java.util.Map;
/**
* Service
@ -71,4 +73,6 @@ public interface IBaseTyreService
List<BaseTyre> getCarBingTireList(BaseTyre baseTyre);
String importBaseTyre(List<BaseTyreVo> baseTyreVoList, boolean updateSupport, String operName);
List<Map> vTyreStockSummary(SysDept sysDept);
}

@ -20,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import static com.ruoyi.common.utils.ShiroUtils.getLoginName;
@ -205,4 +206,10 @@ public class BaseTyreServiceImpl implements IBaseTyreService
}
return successMsg.toString();
}
@Override
public List<Map> vTyreStockSummary(SysDept sysDept) {
List<Map> mapList = baseTyreMapper.vTyreStockSummary(sysDept);
return mapList;
}
}

@ -16,6 +16,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="remark" column="remark" />
<result property="line" column="line" />
<result property="type" column="type" />
<result property="inputMileage" column="input_mileage" />
</resultMap>
<sql id="selectBaseCarVo">
@ -23,10 +24,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</sql>
<select id="selectBaseCarList" parameterType="BaseCar" resultMap="BaseCarResult">
select b.id, b.car_no, b.dept_id, b.create_by, b.create_time, b.update_by, b.update_time, b.remark,d.dept_name as team,b.line,b.type from base_car b
LEFT JOIN sys_dept d ON d.dept_id = b.dept_id
where b.id is not null
<if test="carNo != null and carNo != ''"> and car_no like concat('%', #{carNo}, '%')</if>
select b.id, b.car_no, b.dept_id, b.create_by, b.create_time, b.update_by, b.update_time, b.remark,d.dept_name as team,b.line,b.type, T.input_mileage from base_car b
LEFT JOIN sys_dept d ON d.dept_id = b.dept_id
LEFT JOIN (SELECT create_time,input_mileage,vehicle_id FROM biz_maintenance_order WHERE type_code = 1 AND status ='COMPLETED'
ORDER BY create_time DESC LIMIT 1) T ON T.vehicle_id = b.id
where b.id is not null
<if test="carNo != null and carNo != ''"> and b.car_no like concat('%', #{carNo}, '%')</if>
<if test="team != null and team != ''"> and d.dept_name = #{team}</if>
<if test="line != null and line != ''"> and b.line like concat('%', #{line}, '%')</if>
<if test="type != null and type != ''"> and b.type like concat('%', #{type}, '%')</if>

@ -77,6 +77,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
WHERE
su.login_name = #{createBy}
</select>
<select id="vTyreStockSummary" resultType="java.util.Map" parameterType="SysDept">
SELECT
IFNULL(dept_name, '合计') AS dept_name,
new_count AS '新胎',
circulating_count AS '周转胎',
renovate_count AS '翻新胎',
experimental_count AS '实验胎'
FROM
v_tyre_stock_summary
<where>
<if test="deptName != null and deptName != ''"> and dept_name = #{deptName}</if>
</where>
</select>
<insert id="insertBaseTyre" parameterType="BaseTyre">

@ -25,6 +25,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateName" column="update_name" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
<result property="line" column="line" />
</resultMap>
<sql id="selectBizMaintenanceOrderVo">
@ -85,7 +86,31 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectBizMaintenanceOrderByOrderId" parameterType="Long" resultMap="BizMaintenanceOrderResult">
<include refid="selectBizMaintenanceOrderVo"/>
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 order_id = #{orderId}
</select>
<select id="selectBizMaintenanceOrderTD" resultMap="BizMaintenanceOrderResult">

Loading…
Cancel
Save