From c29596337f413a9033e7e2411ae8d8156dac8b42 Mon Sep 17 00:00:00 2001 From: 18980591175 <470162950@qq.com> Date: Tue, 2 Jun 2026 10:02:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=BD=A6=E8=BE=86=E4=B8=89?= =?UTF-8?q?=E6=A3=80=E7=9A=84=E4=B8=89=E6=A3=80=E5=8E=86=E5=8F=B2=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/VehicleThreeInspectApi.md | 42 ++++ ..._three_inspect_history_fields_20260601.sql | 14 ++ .../HotVehicleThreeInspectController.java | 20 ++ .../domain/HotVehicleThreeInspect.java | 10 + .../domain/bo/HotVehicleThreeInspectBo.java | 10 + .../vo/HotVehicleThreeInspectPrintVo.java | 56 +++-- .../vo/HotVehicleThreeInspectSummaryVo.java | 30 +++ .../domain/vo/HotVehicleThreeInspectVo.java | 12 + .../mapper/HotVehicleThreeInspectMapper.java | 8 + .../IHotVehicleThreeInspectService.java | 17 ++ .../HotVehicleThreeInspectServiceImpl.java | 219 +++++++++++++++--- .../HotVehicleThreeInspectMapper.xml | 96 ++++++-- .../vehicle/vehicleThreeInspectRecord.html.vm | 55 ++--- 13 files changed, 477 insertions(+), 112 deletions(-) create mode 100644 sql/alter_hot_vehicle_three_inspect_history_fields_20260601.sql diff --git a/docs/VehicleThreeInspectApi.md b/docs/VehicleThreeInspectApi.md index 4f8b27b..8f5c2d3 100644 --- a/docs/VehicleThreeInspectApi.md +++ b/docs/VehicleThreeInspectApi.md @@ -111,3 +111,45 @@ ADD COLUMN reject_reason varchar(500) NULL COMMENT '审核不通过原因'; - 详情接口、列表接口、导出接口会返回 `rejectReason` 字段。 - 审核驳回通知优先展示 `rejectReason`,没有时才回退展示 `auditResult`。 + +## 6. 三检历史记录接口 + +### 6.1 新增字段 + +- `inspectNo`:三检记录编号,规则为 `SJ + 三检创建日期(yyyyMMdd) + 车牌号后3位 + 4位随机数` +- `inspectLocation`:检查地点,出车前、行车中、收车后三个阶段都支持保存 + +### 6.2 历史列表接口 + +- 路径:`GET /securityManagement/vehicleThreeInspect/history/list` +- 说明:按 `inspectId` 聚合查询一轮三检历史记录,支持分页 + +返回核心字段: + +- `inspectId`:三检流程ID +- `inspectNo`:三检记录编号 +- `plateNumber`:车牌号 +- `inspectorName`:检查人 +- `startTime`:检查开始时间(出车提交时间) +- `endTime`:检查结束时间(收车提交时间) +- `auditorName`:审核人 +- `outInspectLocation`:出车前检查地点 +- `drivingInspectLocation`:行车中检查地点 +- `backInspectLocation`:收车后检查地点 +- `outCheck` / `drivingCheck` / `backCheck`:三个阶段详情 + +### 6.3 历史详情接口 + +- 路径:`GET /securityManagement/vehicleThreeInspect/history/{inspectId}` +- 说明:返回指定 `inspectId` 下三个阶段的车辆三检详情 + +### 6.4 数据库脚本 + +新增脚本: + +- `sql/alter_hot_vehicle_three_inspect_history_fields_20260601.sql` + +脚本内容包含: + +- 为 `hot_vehicle_three_inspect` 增加 `inspect_no`、`inspect_location` 字段 +- 对历史数据回填 `inspect_no` diff --git a/sql/alter_hot_vehicle_three_inspect_history_fields_20260601.sql b/sql/alter_hot_vehicle_three_inspect_history_fields_20260601.sql new file mode 100644 index 0000000..99a7f3d --- /dev/null +++ b/sql/alter_hot_vehicle_three_inspect_history_fields_20260601.sql @@ -0,0 +1,14 @@ +ALTER TABLE hot_vehicle_three_inspect + ADD COLUMN inspect_no varchar(32) NULL COMMENT '三检记录编号', + ADD COLUMN inspect_location varchar(255) NULL COMMENT '检查地点'; + +UPDATE hot_vehicle_three_inspect t +LEFT JOIN hot_vehicle v ON v.id = t.vehicle_id +SET t.inspect_no = CONCAT( + 'SJ', + DATE_FORMAT(COALESCE(t.inspect_time, t.create_time), '%Y%m%d'), + RIGHT(COALESCE(v.plate_number, '000'), 3), + LPAD(MOD(COALESCE(t.inspect_id, t.id), 10000), 4, '0') + ) +WHERE (t.inspect_no IS NULL OR t.inspect_no = '') + AND t.is_deleted = 0; diff --git a/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/controller/HotVehicleThreeInspectController.java b/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/controller/HotVehicleThreeInspectController.java index d7ce771..9fdb131 100644 --- a/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/controller/HotVehicleThreeInspectController.java +++ b/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/controller/HotVehicleThreeInspectController.java @@ -223,4 +223,24 @@ public class HotVehicleThreeInspectController extends BaseController { public TableDataInfo listSummary(HotVehicleThreeInspectBo bo, PageQuery pageQuery) { return hotVehicleThreeInspectService.querySummaryPageList(bo, pageQuery); } + + /** + * 查询车辆三检历史记录列表 + */ + @GetMapping("/history/list") + @Operation(summary = "分页查询车辆三检历史记录列表") + public TableDataInfo listHistory(HotVehicleThreeInspectBo bo, PageQuery pageQuery) { + return hotVehicleThreeInspectService.queryHistoryPageList(bo, pageQuery); + } + + /** + * 查询车辆三检历史记录详情 + */ + @GetMapping("/history/{inspectId}") + @Operation(summary = "查询车辆三检历史记录详情") + public R getHistoryDetail(@NotNull(message = "三检流程ID不能为空") + @Parameter(name = "inspectId", description = "三检流程ID", required = true, example = "1") + @PathVariable Long inspectId) { + return R.ok(hotVehicleThreeInspectService.queryHistoryDetail(inspectId)); + } } diff --git a/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/HotVehicleThreeInspect.java b/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/HotVehicleThreeInspect.java index bb23334..10ac465 100644 --- a/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/HotVehicleThreeInspect.java +++ b/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/HotVehicleThreeInspect.java @@ -60,11 +60,21 @@ public class HotVehicleThreeInspect extends BaseEntity { */ private Long inspectId; + /** + * 三检记录编号 + */ + private String inspectNo; + /** * 检查时间 */ private Date inspectTime; + /** + * 检查地点 + */ + private String inspectLocation; + /** * 审核人ID */ diff --git a/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/bo/HotVehicleThreeInspectBo.java b/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/bo/HotVehicleThreeInspectBo.java index 66fa9a1..063c40b 100644 --- a/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/bo/HotVehicleThreeInspectBo.java +++ b/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/bo/HotVehicleThreeInspectBo.java @@ -63,12 +63,22 @@ public class HotVehicleThreeInspectBo extends BaseEntity { */ private Long inspectId; + /** + * 三检记录编号 + */ + private String inspectNo; + /** * 检查时间 */ @NotNull(message = "检查时间不能为空", groups = {AddGroup.class, EditGroup.class}) private Date inspectTime; + /** + * 检查地点 + */ + private String inspectLocation; + /** * 审核人ID */ diff --git a/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/vo/HotVehicleThreeInspectPrintVo.java b/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/vo/HotVehicleThreeInspectPrintVo.java index a9e6c55..46a14a1 100644 --- a/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/vo/HotVehicleThreeInspectPrintVo.java +++ b/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/vo/HotVehicleThreeInspectPrintVo.java @@ -13,50 +13,48 @@ public class HotVehicleThreeInspectPrintVo { */ private Long inspectId; + /** + * 三检记录编号 + */ + private String inspectNo; + /** * 车牌号 */ private String plateNumber; - // --- 出车前 Phase 1 --- /** - * 出车前-检查时间 + * 检查人 */ - private String startPhaseTime; - /** - * 出车前-状态 - */ - private String startPhaseStatus; - /** - * 出车前-隐患 - */ - private String startPhaseHiddenDanger; + private String inspectorName; - // --- 行车中 Phase 2 --- /** - * 行车中-检查时间 + * 审核人 */ - private String runningPhaseTime; - /** - * 行车中-状态 - */ - private String runningPhaseStatus; - /** - * 行车中-隐患 - */ - private String runningPhaseHiddenDanger; + private String auditorName; - // --- 收车后 Phase 3 --- /** - * 收车后-检查时间 + * 检查开始时间 */ - private String endPhaseTime; + private String startTime; + /** - * 收车后-状态 + * 检查结束时间 */ - private String endPhaseStatus; + private String endTime; + /** - * 收车后-隐患 + * 出车前检查地点 */ - private String endPhaseHiddenDanger; + private String outInspectLocation; + + /** + * 行车中检查地点 + */ + private String drivingInspectLocation; + + /** + * 收车后检查地点 + */ + private String backInspectLocation; } diff --git a/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/vo/HotVehicleThreeInspectSummaryVo.java b/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/vo/HotVehicleThreeInspectSummaryVo.java index 0253850..649ff1c 100644 --- a/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/vo/HotVehicleThreeInspectSummaryVo.java +++ b/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/vo/HotVehicleThreeInspectSummaryVo.java @@ -23,6 +23,11 @@ public class HotVehicleThreeInspectSummaryVo implements Serializable { */ private Long inspectId; + /** + * 三检记录编号 + */ + private String inspectNo; + /** * 公司ID */ @@ -48,6 +53,16 @@ public class HotVehicleThreeInspectSummaryVo implements Serializable { */ private String driverName; + /** + * 检查人 + */ + private String inspectorName; + + /** + * 审核人 + */ + private String auditorName; + /** * 开始时间 */ @@ -83,6 +98,21 @@ public class HotVehicleThreeInspectSummaryVo implements Serializable { */ private Boolean auditCompleted; + /** + * 出车前检查地点 + */ + private String outInspectLocation; + + /** + * 行车中检查地点 + */ + private String drivingInspectLocation; + + /** + * 收车后检查地点 + */ + private String backInspectLocation; + /** * 出车检查 */ diff --git a/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/vo/HotVehicleThreeInspectVo.java b/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/vo/HotVehicleThreeInspectVo.java index 1e5356d..6894cac 100644 --- a/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/vo/HotVehicleThreeInspectVo.java +++ b/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/vo/HotVehicleThreeInspectVo.java @@ -66,12 +66,24 @@ public class HotVehicleThreeInspectVo implements Serializable { */ private Long inspectId; + /** + * 三检记录编号 + */ + @ExcelProperty(value = "三检记录编号") + private String inspectNo; + /** * 检查时间 */ @ExcelProperty(value = "检查时间") private Date inspectTime; + /** + * 检查地点 + */ + @ExcelProperty(value = "检查地点") + private String inspectLocation; + /** * 审核人ID */ diff --git a/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/mapper/HotVehicleThreeInspectMapper.java b/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/mapper/HotVehicleThreeInspectMapper.java index e37df8c..78d4e3e 100644 --- a/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/mapper/HotVehicleThreeInspectMapper.java +++ b/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/mapper/HotVehicleThreeInspectMapper.java @@ -57,6 +57,14 @@ public interface HotVehicleThreeInspectMapper extends BaseMapperPlus querySummaryPageList(HotVehicleThreeInspectBo bo, PageQuery pageQuery); + /** + * 查询车辆三检历史记录分页列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 历史记录分页列表 + */ + TableDataInfo queryHistoryPageList(HotVehicleThreeInspectBo bo, PageQuery pageQuery); + + /** + * 按三检流程ID查询历史详情 + * + * @param inspectId 三检流程ID + * @return 历史详情 + */ + HotVehicleThreeInspectSummaryVo queryHistoryDetail(Long inspectId); + /** * 查询符合条件的车辆三检列表 * diff --git a/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/service/impl/HotVehicleThreeInspectServiceImpl.java b/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/service/impl/HotVehicleThreeInspectServiceImpl.java index 4cefa3b..02e3f1e 100644 --- a/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/service/impl/HotVehicleThreeInspectServiceImpl.java +++ b/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/service/impl/HotVehicleThreeInspectServiceImpl.java @@ -1,5 +1,6 @@ package com.hotwj.platform.config.vehicleThreeInspect.service.impl; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -40,12 +41,14 @@ import org.dromara.common.satoken.utils.LoginHelper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.Date; import java.util.Collections; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.concurrent.ThreadLocalRandom; /** * 车辆三检Service业务层处理 @@ -208,35 +211,28 @@ public class HotVehicleThreeInspectServiceImpl implements IHotVehicleThreeInspec @Override public TableDataInfo querySummaryPageList(HotVehicleThreeInspectBo bo, PageQuery pageQuery) { Page result = baseMapper.querySummaryPageList(pageQuery.build(), bo); - List summaryList = result.getRecords(); - if (summaryList == null || summaryList.isEmpty()) { - return TableDataInfo.build(result); - } + enrichSummaryList(result.getRecords()); + return TableDataInfo.build(result); + } - List inspectIds = summaryList.stream() - .map(HotVehicleThreeInspectSummaryVo::getInspectId) - .filter(Objects::nonNull) - .toList(); - if (inspectIds.isEmpty()) { - return TableDataInfo.build(result); - } + @Override + public TableDataInfo queryHistoryPageList(HotVehicleThreeInspectBo bo, PageQuery pageQuery) { + return querySummaryPageList(bo, pageQuery); + } - List detailList = baseMapper.querySummaryDetailList(inspectIds); + @Override + public HotVehicleThreeInspectSummaryVo queryHistoryDetail(Long inspectId) { + HotVehicleThreeInspectSummaryVo summary = baseMapper.querySummaryByInspectId(inspectId); + if (summary == null) { + throw new ServiceException("车辆三检历史记录不存在"); + } + List detailList = baseMapper.querySummaryDetailList(Collections.singletonList(inspectId)); fillTaskId(detailList); - - Map 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); + refreshSummary(summary); + return summary; } /** @@ -255,20 +251,33 @@ public class HotVehicleThreeInspectServiceImpl implements IHotVehicleThreeInspec if (summary == null || detail == null || detail.getInspectPhase() == null) { return; } - if (detail.getInspectPhase() == 1L) { + if (StringUtils.isBlank(summary.getInspectNo()) && StringUtils.isNotBlank(detail.getInspectNo())) { + summary.setInspectNo(detail.getInspectNo()); + } + if (StringUtils.isBlank(summary.getInspectorName()) && StringUtils.isNotBlank(detail.getDriverName())) { + summary.setInspectorName(detail.getDriverName()); + } + if (StringUtils.isBlank(summary.getAuditorName()) && StringUtils.isNotBlank(detail.getAuditorName())) { + summary.setAuditorName(detail.getAuditorName()); + } + Long inspectPhase = detail.getInspectPhase(); + if (Objects.equals(inspectPhase, 1L)) { if (summary.getOutCheck() == null) { summary.setOutCheck(detail); + summary.setOutInspectLocation(detail.getInspectLocation()); } return; } - if (detail.getInspectPhase() == 2L) { + if (Objects.equals(inspectPhase, 2L)) { if (summary.getDrivingCheck() == null) { summary.setDrivingCheck(detail); + summary.setDrivingInspectLocation(detail.getInspectLocation()); } return; } - if (detail.getInspectPhase() == 3L && summary.getBackCheck() == null) { + if (Objects.equals(inspectPhase, 3L) && summary.getBackCheck() == null) { summary.setBackCheck(detail); + summary.setBackInspectLocation(detail.getInspectLocation()); } } @@ -320,6 +329,8 @@ public class HotVehicleThreeInspectServiceImpl implements IHotVehicleThreeInspec lqw.eq(bo.getInspectPhase() != null, HotVehicleThreeInspect::getInspectPhase, bo.getInspectPhase()); lqw.eq(bo.getInspectTime() != null, HotVehicleThreeInspect::getInspectTime, bo.getInspectTime()); lqw.eq(bo.getInspectId() != null, HotVehicleThreeInspect::getInspectId, bo.getInspectId()); + lqw.eq(StringUtils.isNotBlank(bo.getInspectNo()), HotVehicleThreeInspect::getInspectNo, bo.getInspectNo()); + lqw.like(StringUtils.isNotBlank(bo.getInspectLocation()), HotVehicleThreeInspect::getInspectLocation, bo.getInspectLocation()); lqw.eq(bo.getAuditorId() != null, HotVehicleThreeInspect::getAuditorId, bo.getAuditorId()); lqw.like(StringUtils.isNotBlank(bo.getAuditorName()), HotVehicleThreeInspect::getAuditorName, bo.getAuditorName()); lqw.eq(StringUtils.isNotBlank(bo.getInspectResultJson()), HotVehicleThreeInspect::getInspectResultJson, bo.getInspectResultJson()); @@ -337,6 +348,8 @@ public class HotVehicleThreeInspectServiceImpl implements IHotVehicleThreeInspec */ @Override public Boolean insertByBo(HotVehicleThreeInspectBo bo) { + normalizeInspectLocation(bo); + prepareInspectIdentity(bo); validateAttachImgUrlRequiredWhenAbnormal(bo); HotVehicleThreeInspect add = MapstructUtils.convert(bo, HotVehicleThreeInspect.class); validEntityBeforeSave(add); @@ -401,6 +414,7 @@ public class HotVehicleThreeInspectServiceImpl implements IHotVehicleThreeInspec boolean flag = baseMapper.insert(add) > 0; if (flag) { + patchNewRoundInspectIdentity(add, bo); bo.setId(add.getId()); // 开启车辆三检的流程 @@ -542,6 +556,7 @@ public class HotVehicleThreeInspectServiceImpl implements IHotVehicleThreeInspec @Override @Transactional(rollbackFor = Exception.class) public Boolean updateByBo(HotVehicleThreeInspectBo bo) { + normalizeInspectLocation(bo); validateAttachImgUrlRequiredWhenAbnormal(bo); HotVehicleThreeInspect update = MapstructUtils.convert(bo, HotVehicleThreeInspect.class); validEntityBeforeSave(update); @@ -798,4 +813,156 @@ public class HotVehicleThreeInspectServiceImpl implements IHotVehicleThreeInspec .last("LIMIT 1") ); } + + private void enrichSummaryList(List summaryList) { + if (summaryList == null || summaryList.isEmpty()) { + return; + } + List inspectIds = summaryList.stream() + .map(HotVehicleThreeInspectSummaryVo::getInspectId) + .filter(Objects::nonNull) + .toList(); + if (inspectIds.isEmpty()) { + return; + } + + List detailList = baseMapper.querySummaryDetailList(inspectIds); + fillTaskId(detailList); + + Map 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); + } + + for (HotVehicleThreeInspectSummaryVo summary : summaryList) { + refreshSummary(summary); + } + } + + private void refreshSummary(HotVehicleThreeInspectSummaryVo summary) { + if (summary == null) { + return; + } + if (summary.getOutCheck() != null) { + summary.setStartTime(summary.getOutCheck().getInspectTime()); + if (StringUtils.isBlank(summary.getInspectNo())) { + summary.setInspectNo(summary.getOutCheck().getInspectNo()); + } + } + if (summary.getBackCheck() != null) { + summary.setEndTime(summary.getBackCheck().getInspectTime()); + } + if (StringUtils.isBlank(summary.getInspectorName())) { + summary.setInspectorName(summary.getDriverName()); + } + summary.setInspectTime(buildInspectTimeRange(summary.getStartTime(), summary.getEndTime())); + } + + private String buildInspectTimeRange(Date startTime, Date endTime) { + if (startTime == null && endTime == null) { + return null; + } + if (startTime == null) { + return DateUtil.formatDateTime(endTime); + } + if (endTime == null || Objects.equals(startTime, endTime)) { + return DateUtil.formatDateTime(startTime); + } + return DateUtil.formatDateTime(startTime) + " ~ " + DateUtil.formatDateTime(endTime); + } + + private void normalizeInspectLocation(HotVehicleThreeInspectBo bo) { + if (bo == null) { + return; + } + bo.setInspectLocation(StringUtils.trimToNull(bo.getInspectLocation())); + } + + private void prepareInspectIdentity(HotVehicleThreeInspectBo bo) { + if (bo == null || bo.getVehicleId() == null || bo.getInspectPhase() == null) { + return; + } + HotVehicleThreeInspect latestInspect = selectLatestInspect(bo.getVehicleId()); + if (Objects.equals(bo.getInspectPhase(), 1L)) { + if (StringUtils.isBlank(bo.getInspectNo())) { + bo.setInspectNo(generateInspectNo(bo.getInspectTime(), bo.getVehicleId())); + } + return; + } + if (latestInspect == null) { + return; + } + if (bo.getInspectId() == null) { + bo.setInspectId(latestInspect.getInspectId() != null ? latestInspect.getInspectId() : latestInspect.getId()); + } + if (StringUtils.isBlank(bo.getInspectNo())) { + bo.setInspectNo(latestInspect.getInspectNo()); + } + } + + private void patchNewRoundInspectIdentity(HotVehicleThreeInspect add, HotVehicleThreeInspectBo bo) { + if (add == null || !Objects.equals(add.getInspectPhase(), 1L)) { + return; + } + boolean changed = false; + if (add.getInspectId() == null) { + add.setInspectId(add.getId()); + changed = true; + } + if (StringUtils.isBlank(add.getInspectNo())) { + add.setInspectNo(generateInspectNo(add.getInspectTime(), add.getVehicleId())); + changed = true; + } + if (!changed) { + return; + } + baseMapper.updateById(add); + bo.setInspectId(add.getInspectId()); + bo.setInspectNo(add.getInspectNo()); + } + + private String generateInspectNo(Date inspectTime, Long vehicleId) { + Date recordDate = inspectTime == null ? new Date() : inspectTime; + String dateText = DateUtil.format(recordDate, "yyyyMMdd"); + String plateSuffix = resolvePlateSuffix(vehicleId); + for (int i = 0; i < 10; i++) { + String candidate = "SJ" + dateText + plateSuffix + randomFourDigits(); + Long count = baseMapper.selectCount( + Wrappers.lambdaQuery() + .eq(HotVehicleThreeInspect::getInspectNo, candidate) + ); + if (count == null || count == 0L) { + return candidate; + } + } + return "SJ" + dateText + plateSuffix + String.format("%04d", System.currentTimeMillis() % 10000); + } + + private String resolvePlateSuffix(Long vehicleId) { + if (vehicleId == null) { + return "000"; + } + HotVehicle vehicle = hotVehicleMapper.selectById(String.valueOf(vehicleId)); + String plateNumber = vehicle == null ? null : StringUtils.trimToNull(vehicle.getPlateNumber()); + if (plateNumber == null) { + return "000"; + } + String normalized = plateNumber.replace(" ", ""); + if (normalized.length() <= 3) { + return normalized; + } + return normalized.substring(normalized.length() - 3); + } + + private String randomFourDigits() { + return String.format("%04d", ThreadLocalRandom.current().nextInt(1000, 10000)); + } } diff --git a/src/main/resources/mapper/securityManagement/HotVehicleThreeInspectMapper.xml b/src/main/resources/mapper/securityManagement/HotVehicleThreeInspectMapper.xml index 675d761..268c541 100644 --- a/src/main/resources/mapper/securityManagement/HotVehicleThreeInspectMapper.xml +++ b/src/main/resources/mapper/securityManagement/HotVehicleThreeInspectMapper.xml @@ -8,10 +8,13 @@ resultType="com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectProcessVo"> SELECT t.inspect_id AS inspectId, + MAX(t.inspect_no) AS inspectNo, MAX(t.company_id) AS companyId, MAX(t.vehicle_id) AS vehicleId, MAX(v.plate_number) AS plateNumber, MAX(t.driver_name) AS driverName, + MAX(t.driver_name) AS inspectorName, + MAX(t.auditor_name) AS auditorName, MIN(t.inspect_time) AS startTime, MAX(t.inspect_time) AS endTime, CASE @@ -74,6 +77,9 @@ AND t.inspect_id = #{bo.inspectId} + + AND t.inspect_no = #{bo.inspectNo} + AND EXISTS ( SELECT 1 @@ -110,11 +116,14 @@ resultType="com.hotwj.platform.config.vehicleThreeInspect.domain.vo.HotVehicleThreeInspectSummaryVo"> SELECT t.inspect_id AS inspectId, + MAX(t.inspect_no) AS inspectNo, 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, + MAX(t.driver_name) AS inspectorName, + MAX(t.auditor_name) AS auditorName, MIN(IFNULL(t.inspect_time, t.create_time)) AS startTime, MAX(IFNULL(t.inspect_time, t.create_time)) AS endTime, CASE @@ -164,6 +173,9 @@ AND t.inspect_id = #{bo.inspectId} + + AND t.inspect_no = #{bo.inspectNo} + AND EXISTS ( SELECT 1 @@ -196,21 +208,67 @@ ORDER BY IFNULL(MAX(t.inspect_time), MAX(t.create_time)) DESC, MAX(t.create_time) DESC + +