fix(维保工单): 修正维保前数据查询逻辑:“上一张已完成维保工单的维保后结果”

根据业务口径,维保前数据应取上一张已完成维保工单的维保后结果,不再混入车辆实时装胎状态。修改SQL查询条件,确保只获取符合条件的上一张已完成工单数据。
master
zch 14 hours ago
parent 79f0acec7f
commit fdc578b403

@ -141,17 +141,11 @@ 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); BizMaintenanceOrder bizMaintenanceOrderBefore = bizMaintenanceOrderService.selectBizMaintenanceOrderByOrderIdBefore(bizMaintenanceOrder);
BizOrderTireDetail bizOrderTireDetail = new BizOrderTireDetail(); BizOrderTireDetail bizOrderTireDetail = new BizOrderTireDetail();
List<Map> bizOrderTireDetailsBefore = new ArrayList<>(); List<Map> bizOrderTireDetailsBefore = new ArrayList<>();
if (bizMaintenanceOrderBefore==null){ if (bizMaintenanceOrderBefore != null){
//如果上一次的检查结果为空
//则数据为车辆目前的安装数据
//查询此车辆安装的轮胎数据
bizOrderTireDetailsBefore = bizOrderTireDetailService.selectBaseTrieInstall(bizMaintenanceOrder.getPlateNumber());
}else {
bizOrderTireDetail.setOrderId(bizMaintenanceOrderBefore.getOrderId()); bizOrderTireDetail.setOrderId(bizMaintenanceOrderBefore.getOrderId());
bizOrderTireDetailsBefore = bizOrderTireDetailService.selectBizOrderTireDetail(bizOrderTireDetail); bizOrderTireDetailsBefore = bizOrderTireDetailService.selectBizOrderTireDetail(bizOrderTireDetail);
} }

@ -124,6 +124,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="selectBizMaintenanceOrderByOrderIdBefore" <select id="selectBizMaintenanceOrderByOrderIdBefore"
resultMap="BizMaintenanceOrderResult" parameterType="BizMaintenanceOrder"> resultMap="BizMaintenanceOrderResult" parameterType="BizMaintenanceOrder">
SELECT
order_id,
order_no,
vehicle_id,
plate_number,
type_code,
factoryName,
input_mileage,
last_mileage,
maintain_date,
description,
status,
order_type,
create_by,
create_time,
update_by,
update_time,
remark,
line
FROM
(
SELECT SELECT
order_id, order_id,
order_no, order_no,
@ -142,7 +163,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
sus.user_name as update_by, sus.user_name as update_by,
bmo.update_time, bmo.update_time,
bmo.remark, bmo.remark,
bc.line bc.line,
ROW_NUMBER() OVER (ORDER BY bmo.create_time DESC, bmo.order_id DESC) AS rn
FROM FROM
biz_maintenance_order bmo biz_maintenance_order bmo
LEFT JOIN sys_dept sd ON bmo.factory_id = sd.dept_id LEFT JOIN sys_dept sd ON bmo.factory_id = sd.dept_id
@ -152,9 +174,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
WHERE WHERE
bmo.order_id != #{orderId} bmo.order_id != #{orderId}
AND bmo.plate_number = #{plateNumber} AND bmo.plate_number = #{plateNumber}
ORDER BY AND bmo.status = 'COMPLETED'
bmo.create_time DESC -- 关键点1按照维保日期倒序排列最近的时间在前 AND bmo.type_code IN ('1', '4')
LIMIT 1; -- 关键点2只取第一条数据 <!-- 维保前按“上一张已完成维保工单的维保后结果”取数,必须排除当前工单之后创建的完成单。 -->
<if test="createTime != null">
AND (bmo.create_time &lt; #{createTime}
OR (bmo.create_time = #{createTime} AND bmo.order_id &lt; #{orderId}))
</if>
<if test="createTime == null">
AND bmo.order_id &lt; #{orderId}
</if>
) prev_order
WHERE prev_order.rn = 1
</select> </select>
<insert id="insertBizMaintenanceOrder" parameterType="BizMaintenanceOrder" useGeneratedKeys="true" keyProperty="orderId"> <insert id="insertBizMaintenanceOrder" parameterType="BizMaintenanceOrder" useGeneratedKeys="true" keyProperty="orderId">

Loading…
Cancel
Save