feat(vehicleThreeInspect): 新增车辆三检聚合列表分页查询功能

新增聚合视图对象与全链路查询逻辑,实现车辆三检出车、行车、收车全流程数据的聚合展示,同时删除废弃的旧运维备注配置文件。
This commit is contained in:
2026-06-01 10:19:03 +08:00
parent 7f79698681
commit eab8a4693d
7 changed files with 346 additions and 30 deletions

View File

@@ -5,6 +5,7 @@ import com.hotwj.platform.config.vehicleThreeInspect.domain.bo.HotVehicleThreeIn
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectProcessVo; import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectProcessVo;
import com.hotwj.platform.config.vehicleThreeInspect.domain.bo.HotVehicleThreeInspectVehicleQueryBo; import com.hotwj.platform.config.vehicleThreeInspect.domain.bo.HotVehicleThreeInspectVehicleQueryBo;
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectReceivedVehicleVo; import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectReceivedVehicleVo;
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectSummaryVo;
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectUnreceivedVehicleVo; import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectUnreceivedVehicleVo;
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectVo; import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectVo;
import com.hotwj.platform.config.vehicleThreeInspect.service.IHotVehicleThreeInspectPrintService; import com.hotwj.platform.config.vehicleThreeInspect.service.IHotVehicleThreeInspectPrintService;
@@ -213,4 +214,13 @@ public class HotVehicleThreeInspectController extends BaseController {
@PathVariable Long[] ids) { @PathVariable Long[] ids) {
return toAjax(hotVehicleThreeInspectService.deleteWithValidByIds(List.of(ids), true)); return toAjax(hotVehicleThreeInspectService.deleteWithValidByIds(List.of(ids), true));
} }
/**
* 查询车辆三检聚合列表
*/
@GetMapping("/listSummary")
@Operation(summary = "分页查询车辆三检聚合列表")
public TableDataInfo<HotVehicleThreeInspectSummaryVo> listSummary(HotVehicleThreeInspectBo bo, PageQuery pageQuery) {
return hotVehicleThreeInspectService.querySummaryPageList(bo, pageQuery);
}
} }

View File

@@ -0,0 +1,100 @@
package com.hotwj.platform.config.vehicleThreeInspect.domain.vo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 车辆三检聚合列表视图对象
*
* @author shihongwei
* @date 2026-06-01
*/
@Data
public class HotVehicleThreeInspectSummaryVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 三检流程ID
*/
private Long inspectId;
/**
* 公司ID
*/
private Long companyId;
/**
* 车辆ID
*/
private Long vehicleId;
/**
* 车牌号
*/
private String plateNumber;
/**
* 驾驶员ID
*/
private String driverId;
/**
* 驾驶员姓名
*/
private String driverName;
/**
* 开始时间
*/
private Date startTime;
/**
* 结束时间
*/
private Date endTime;
/**
* 检查时间展示
*/
private String inspectTime;
/**
* 完成状态
*/
private String completeStatus;
/**
* 是否已完成
*/
private Boolean completed;
/**
* 审核完成状态
*/
private String auditCompleteStatus;
/**
* 是否完成审核
*/
private Boolean auditCompleted;
/**
* 出车检查
*/
private HotVehicleThreeInspectVo outCheck;
/**
* 行车检查
*/
private HotVehicleThreeInspectVo drivingCheck;
/**
* 收车检查
*/
private HotVehicleThreeInspectVo backCheck;
}

View File

@@ -6,6 +6,7 @@ import com.hotwj.platform.config.vehicleThreeInspect.domain.bo.HotVehicleThreeIn
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectProcessVo; import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectProcessVo;
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectPrintVo; import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectPrintVo;
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectReceivedVehicleVo; import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectReceivedVehicleVo;
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectSummaryVo;
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectUnreceivedVehicleVo; import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectUnreceivedVehicleVo;
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectVo; import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -44,6 +45,26 @@ public interface HotVehicleThreeInspectMapper extends BaseMapperPlus<HotVehicleT
@Param("bo") HotVehicleThreeInspectBo bo @Param("bo") HotVehicleThreeInspectBo bo
); );
/**
* 分页查询车辆三检聚合列表
*
* @param page 分页参数
* @param bo 查询条件
* @return 聚合分页列表
*/
Page<HotVehicleThreeInspectSummaryVo> querySummaryPageList(
Page<HotVehicleThreeInspectSummaryVo> page,
@Param("bo") HotVehicleThreeInspectBo bo
);
/**
* 按流程ID集合查询三检明细
*
* @param inspectIds 流程ID集合
* @return 三检明细列表
*/
List<HotVehicleThreeInspectVo> querySummaryDetailList(@Param("inspectIds") List<Long> inspectIds);
/** /**
* 查询所有三检未收车的车辆列表 * 查询所有三检未收车的车辆列表
* *

View File

@@ -5,6 +5,7 @@ import com.hotwj.platform.config.vehicleThreeInspect.domain.bo.HotVehicleThreeIn
import com.hotwj.platform.config.vehicleThreeInspect.domain.bo.HotVehicleThreeInspectVehicleQueryBo; import com.hotwj.platform.config.vehicleThreeInspect.domain.bo.HotVehicleThreeInspectVehicleQueryBo;
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectProcessVo; import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectProcessVo;
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectReceivedVehicleVo; import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectReceivedVehicleVo;
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectSummaryVo;
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectUnreceivedVehicleVo; import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectUnreceivedVehicleVo;
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectVo; import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectVo;
import com.hotwj.platform.resourceManagement.vehicleManagement.domain.vo.HotVehicleVo; import com.hotwj.platform.resourceManagement.vehicleManagement.domain.vo.HotVehicleVo;
@@ -72,6 +73,15 @@ public interface IHotVehicleThreeInspectService {
*/ */
TableDataInfo<HotVehicleThreeInspectProcessVo> queryProcessPageList(HotVehicleThreeInspectBo bo, PageQuery pageQuery); TableDataInfo<HotVehicleThreeInspectProcessVo> queryProcessPageList(HotVehicleThreeInspectBo bo, PageQuery pageQuery);
/**
* 分页查询车辆三检聚合列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 车辆三检聚合分页列表
*/
TableDataInfo<HotVehicleThreeInspectSummaryVo> querySummaryPageList(HotVehicleThreeInspectBo bo, PageQuery pageQuery);
/** /**
* 查询符合条件的车辆三检列表 * 查询符合条件的车辆三检列表
* *

View File

@@ -11,6 +11,7 @@ import com.hotwj.platform.config.vehicleThreeInspect.domain.bo.HotVehicleThreeIn
import com.hotwj.platform.config.vehicleThreeInspect.domain.bo.HotVehicleThreeInspectVehicleQueryBo; import com.hotwj.platform.config.vehicleThreeInspect.domain.bo.HotVehicleThreeInspectVehicleQueryBo;
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectProcessVo; import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectProcessVo;
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectReceivedVehicleVo; import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectReceivedVehicleVo;
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectSummaryVo;
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectUnreceivedVehicleVo; import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectUnreceivedVehicleVo;
import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectVo; import com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectVo;
import com.hotwj.platform.config.vehicleThreeInspectConfig.domain.HotVehicleThreeInspectConfig; import com.hotwj.platform.config.vehicleThreeInspectConfig.domain.HotVehicleThreeInspectConfig;
@@ -197,6 +198,47 @@ public class HotVehicleThreeInspectServiceImpl implements IHotVehicleThreeInspec
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
/**
* 分页查询车辆三检聚合列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 车辆三检聚合分页列表
*/
@Override
public TableDataInfo<HotVehicleThreeInspectSummaryVo> querySummaryPageList(HotVehicleThreeInspectBo bo, PageQuery pageQuery) {
Page<HotVehicleThreeInspectSummaryVo> result = baseMapper.querySummaryPageList(pageQuery.build(), bo);
List<HotVehicleThreeInspectSummaryVo> summaryList = result.getRecords();
if (summaryList == null || summaryList.isEmpty()) {
return TableDataInfo.build(result);
}
List<Long> inspectIds = summaryList.stream()
.map(HotVehicleThreeInspectSummaryVo::getInspectId)
.filter(Objects::nonNull)
.toList();
if (inspectIds.isEmpty()) {
return TableDataInfo.build(result);
}
List<HotVehicleThreeInspectVo> detailList = baseMapper.querySummaryDetailList(inspectIds);
fillTaskId(detailList);
Map<Long, HotVehicleThreeInspectSummaryVo> summaryMap = new HashMap<>(summaryList.size());
for (HotVehicleThreeInspectSummaryVo summary : summaryList) {
summaryMap.put(summary.getInspectId(), summary);
}
for (HotVehicleThreeInspectVo detail : detailList) {
HotVehicleThreeInspectSummaryVo summary = summaryMap.get(detail.getInspectId());
if (summary == null) {
continue;
}
attachPhaseDetail(summary, detail);
}
return TableDataInfo.build(result);
}
/** /**
* 查询符合条件的车辆三检列表 * 查询符合条件的车辆三检列表
* *
@@ -209,6 +251,39 @@ public class HotVehicleThreeInspectServiceImpl implements IHotVehicleThreeInspec
return baseMapper.selectVoList(lqw); return baseMapper.selectVoList(lqw);
} }
private void attachPhaseDetail(HotVehicleThreeInspectSummaryVo summary, HotVehicleThreeInspectVo detail) {
if (summary == null || detail == null || detail.getInspectPhase() == null) {
return;
}
if (detail.getInspectPhase() == 1L) {
if (summary.getOutCheck() == null) {
summary.setOutCheck(detail);
}
return;
}
if (detail.getInspectPhase() == 2L) {
if (summary.getDrivingCheck() == null) {
summary.setDrivingCheck(detail);
}
return;
}
if (detail.getInspectPhase() == 3L && summary.getBackCheck() == null) {
summary.setBackCheck(detail);
}
}
private void fillTaskId(List<HotVehicleThreeInspectVo> list) {
if (list == null || list.isEmpty()) {
return;
}
String businessUserId = LoginHelper.getBusinessUserId();
for (HotVehicleThreeInspectVo vo : list) {
if (StringUtils.isNotBlank(vo.getInstanceId())) {
vo.setTaskId(flowService.getTaskId(vo.getInstanceId(), businessUserId));
}
}
}
private LambdaQueryWrapper<HotVehicleThreeInspect> buildQueryWrapper(HotVehicleThreeInspectBo bo) { private LambdaQueryWrapper<HotVehicleThreeInspect> buildQueryWrapper(HotVehicleThreeInspectBo bo) {
Map<String, Object> params = bo.getParams(); Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<HotVehicleThreeInspect> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<HotVehicleThreeInspect> lqw = Wrappers.lambdaQuery();

View File

@@ -106,6 +106,96 @@
ORDER BY IFNULL(MAX(t.inspect_time), MAX(t.create_time)) DESC, MAX(t.create_time) DESC ORDER BY IFNULL(MAX(t.inspect_time), MAX(t.create_time)) DESC, MAX(t.create_time) DESC
</select> </select>
<select id="querySummaryPageList"
resultType="com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectSummaryVo">
SELECT
t.inspect_id AS inspectId,
MAX(t.company_id) AS companyId,
MAX(t.vehicle_id) AS vehicleId,
MAX(v.plate_number) AS plateNumber,
MAX(t.driver_id) AS driverId,
MAX(t.driver_name) AS driverName,
MIN(IFNULL(t.inspect_time, t.create_time)) AS startTime,
MAX(IFNULL(t.inspect_time, t.create_time)) AS endTime,
CASE
WHEN MIN(IFNULL(t.inspect_time, t.create_time)) = MAX(IFNULL(t.inspect_time, t.create_time))
THEN DATE_FORMAT(MIN(IFNULL(t.inspect_time, t.create_time)), '%Y-%m-%d %H:%i:%s')
ELSE CONCAT(
DATE_FORMAT(MIN(IFNULL(t.inspect_time, t.create_time)), '%Y-%m-%d %H:%i:%s'),
' ~ ',
DATE_FORMAT(MAX(IFNULL(t.inspect_time, t.create_time)), '%Y-%m-%d %H:%i:%s')
)
END AS inspectTime,
CASE
WHEN SUM(CASE WHEN t.inspect_phase = 3 THEN 1 ELSE 0 END) > 0 THEN '已完成'
ELSE '未完成'
END AS completeStatus,
CASE
WHEN SUM(CASE WHEN t.inspect_phase = 3 THEN 1 ELSE 0 END) > 0 THEN 1
ELSE 0
END AS completed,
CASE
WHEN COUNT(DISTINCT CASE WHEN t.flow_status = 'APPROVED' THEN t.inspect_phase END) = 3
THEN '已完成审核'
ELSE '未审核'
END AS auditCompleteStatus,
CASE
WHEN COUNT(DISTINCT CASE WHEN t.flow_status = 'APPROVED' THEN t.inspect_phase END) = 3
THEN 1
ELSE 0
END AS auditCompleted
FROM hot_vehicle_three_inspect t
LEFT JOIN hot_vehicle v ON t.vehicle_id = v.id
<where>
t.is_deleted = 0
AND t.inspect_id IS NOT NULL
<if test="bo.companyId != null">
AND t.company_id = #{bo.companyId}
</if>
<if test="bo.vehicleId != null">
AND t.vehicle_id = #{bo.vehicleId}
</if>
<if test="bo.driverId != null and bo.driverId != ''">
AND t.driver_id = #{bo.driverId}
</if>
<if test="bo.driverName != null and bo.driverName != ''">
AND t.driver_name LIKE CONCAT('%', #{bo.driverName}, '%')
</if>
<if test="bo.inspectId != null">
AND t.inspect_id = #{bo.inspectId}
</if>
<if test="bo.params != null and bo.params.beginTime != null and bo.params.beginTime != '' and bo.params.endTime != null and bo.params.endTime != ''">
AND EXISTS (
SELECT 1
FROM hot_vehicle_three_inspect t2
WHERE t2.inspect_id = t.inspect_id
AND t2.is_deleted = 0
AND t2.inspect_time BETWEEN #{bo.params.beginTime} AND #{bo.params.endTime}
)
</if>
<if test="bo.params != null and bo.params.beginTime != null and bo.params.beginTime != '' and (bo.params.endTime == null or bo.params.endTime == '')">
AND EXISTS (
SELECT 1
FROM hot_vehicle_three_inspect t2
WHERE t2.inspect_id = t.inspect_id
AND t2.is_deleted = 0
AND t2.inspect_time <![CDATA[>=]]> #{bo.params.beginTime}
)
</if>
<if test="bo.params != null and (bo.params.beginTime == null or bo.params.beginTime == '') and bo.params.endTime != null and bo.params.endTime != ''">
AND EXISTS (
SELECT 1
FROM hot_vehicle_three_inspect t2
WHERE t2.inspect_id = t.inspect_id
AND t2.is_deleted = 0
AND t2.inspect_time <![CDATA[<=]]> #{bo.params.endTime}
)
</if>
</where>
GROUP BY t.inspect_id
ORDER BY IFNULL(MAX(t.inspect_time), MAX(t.create_time)) DESC, MAX(t.create_time) DESC
</select>
<select id="selectPrintList" <select id="selectPrintList"
resultType="com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectPrintVo"> resultType="com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectPrintVo">
WITH base AS ( WITH base AS (
@@ -175,6 +265,46 @@
ORDER BY MAX(create_time) DESC ORDER BY MAX(create_time) DESC
</select> </select>
<select id="querySummaryDetailList"
resultType="com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectVo">
SELECT
t.id,
t.company_id,
t.vehicle_id,
t.driver_id,
t.driver_name,
t.inspect_phase,
t.inspect_id,
t.inspect_time,
t.auditor_id,
t.auditor_name,
t.inspect_result_json,
t.attach_img_url,
t.inspector_sign_img_url,
t.is_deleted,
t.is_false_report,
t.has_hidden_danger,
t.audit_time,
t.audit_result,
t.reject_reason,
t.auditor_sign_img_url,
t.instance_id,
t.flow_status,
t.evaluator_id
FROM hot_vehicle_three_inspect t
WHERE t.is_deleted = 0
AND t.inspect_id IS NOT NULL
AND t.inspect_id IN
<foreach collection="inspectIds" item="inspectId" open="(" separator="," close=")">
#{inspectId}
</foreach>
ORDER BY t.inspect_id DESC,
t.inspect_phase ASC,
IFNULL(t.inspect_time, t.create_time) DESC,
t.create_time DESC,
t.id DESC
</select>
<select id="queryUnreceivedVehicles" <select id="queryUnreceivedVehicles"
resultType="com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectUnreceivedVehicleVo"> resultType="com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectUnreceivedVehicleVo">
SELECT SELECT

View File

@@ -1,30 +0,0 @@
# 要清除的表
# 更改oss地址
# 更改nginx配置,以适配大文件上传,在http模块添加:client_max_body_size 100M;
# nginx配置 解决h5 预览pdf问题
http {
include mime.types;
types {
application/javascript mjs;
application/javascript mjs.map;
}
...
}
# 密码123.\HOT.WJ
账号:
lksy_lz
密码:
htwjj369
短信宝: https://console.smsbao.com/#/index
# 企业二维码注册链接
register-url: http://hott.xiaoshi98.top
# pdf预览连接 gotenberg
# app 验真与外网地址