From f21c57943c379c441bf3166f398d62bd9d72ec18 Mon Sep 17 00:00:00 2001 From: 18980591175 <470162950@qq.com> Date: Wed, 17 Jun 2026 10:36:39 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=A6=E8=BE=86=E4=B8=89=E6=A3=80=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E5=AE=A1=E6=A0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HotVehicleThreeInspectController.java | 22 ++ ...eThreeInspectMultiVehicleBatchAuditBo.java | 57 +++++ .../mapper/HotVehicleThreeInspectMapper.java | 14 ++ .../IHotVehicleThreeInspectService.java | 17 ++ .../HotVehicleThreeInspectServiceImpl.java | 194 ++++++++++++++++++ .../HotVehicleThreeInspectMapper.xml | 62 ++++++ 6 files changed, 366 insertions(+) create mode 100644 src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/bo/HotVehicleThreeInspectMultiVehicleBatchAuditBo.java 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 9fdb131..98b9f8a 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 @@ -2,6 +2,7 @@ package com.hotwj.platform.config.vehicleThreeInspect.controller; import com.hotwj.platform.config.vehicleThreeInspect.domain.bo.HotVehicleThreeInspectBo; import com.hotwj.platform.config.vehicleThreeInspect.domain.bo.HotVehicleThreeInspectBatchAuditBo; +import com.hotwj.platform.config.vehicleThreeInspect.domain.bo.HotVehicleThreeInspectMultiVehicleBatchAuditBo; 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.vo.HotVehicleThreeInspectReceivedVehicleVo; @@ -224,6 +225,27 @@ public class HotVehicleThreeInspectController extends BaseController { return hotVehicleThreeInspectService.querySummaryPageList(bo, pageQuery); } + /** + * 查询当前人员可进行多车辆批量审核的车辆三检列表 + */ + @GetMapping("/multiVehicleBatchAudit/list") + @Operation(summary = "分页查询当前人员可进行多车辆批量审核的车辆三检列表") + public TableDataInfo listMultiVehicleBatchAudit(HotVehicleThreeInspectVehicleQueryBo bo, PageQuery pageQuery) { + return hotVehicleThreeInspectService.queryBatchAuditVehiclePageList(bo, pageQuery); + } + + /** + * 多车辆批量审核车辆三检 + */ + @Log(title = "车辆三检多车辆批量审核", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PostMapping("/multiVehicleBatchAudit") + @Operation(summary = "多车辆批量审核车辆三检") + public R multiVehicleBatchAudit(@Validated @RequestBody HotVehicleThreeInspectMultiVehicleBatchAuditBo bo) { + hotVehicleThreeInspectService.multiVehicleBatchAudit(bo); + return R.ok(); + } + /** * 查询车辆三检历史记录列表 */ diff --git a/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/bo/HotVehicleThreeInspectMultiVehicleBatchAuditBo.java b/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/bo/HotVehicleThreeInspectMultiVehicleBatchAuditBo.java new file mode 100644 index 0000000..3ae4cb3 --- /dev/null +++ b/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/domain/bo/HotVehicleThreeInspectMultiVehicleBatchAuditBo.java @@ -0,0 +1,57 @@ +package com.hotwj.platform.config.vehicleThreeInspect.domain.bo; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * 车辆三检多车辆批量审核业务对象 + * + * @author shihongwei + * @date 2026-06-17 + */ +@Data +public class HotVehicleThreeInspectMultiVehicleBatchAuditBo { + + /** + * 三检流程ID集合 + */ + @NotEmpty(message = "三检流程ID不能为空") + private List inspectIds; + + /** + * 是否存在隐患 0=否, 1=是 + */ + @NotNull(message = "是否存在隐患不能为空") + private Long hasHiddenDanger; + + /** + * 评估人ID + */ + private Long evaluatorId; + + /** + * 审核时间 + */ + private Date auditTime; + + /** + * 审核结论 + */ + private String auditResult; + + /** + * 审核不通过原因 + */ + private String rejectReason; + + /** + * 审核人员签名图片url + */ + @NotBlank(message = "审核人员签名不能为空") + private String auditorSignImgUrl; +} 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 78d4e3e..e49dbf9 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,20 @@ public interface HotVehicleThreeInspectMapper extends BaseMapperPlus queryBatchAuditVehiclePageList( + Page page, + @Param("bo") HotVehicleThreeInspectVehicleQueryBo bo, + @Param("auditorId") Long auditorId + ); + /** * 按流程ID查询车辆三检聚合详情 * diff --git a/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/service/IHotVehicleThreeInspectService.java b/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/service/IHotVehicleThreeInspectService.java index f0f2827..2df1551 100644 --- a/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/service/IHotVehicleThreeInspectService.java +++ b/src/main/java/com/hotwj/platform/config/vehicleThreeInspect/service/IHotVehicleThreeInspectService.java @@ -2,6 +2,7 @@ package com.hotwj.platform.config.vehicleThreeInspect.service; import com.hotwj.platform.config.vehicleThreeInspect.domain.bo.HotVehicleThreeInspectBo; import com.hotwj.platform.config.vehicleThreeInspect.domain.bo.HotVehicleThreeInspectBatchAuditBo; +import com.hotwj.platform.config.vehicleThreeInspect.domain.bo.HotVehicleThreeInspectMultiVehicleBatchAuditBo; 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.HotVehicleThreeInspectReceivedVehicleVo; @@ -82,6 +83,15 @@ public interface IHotVehicleThreeInspectService { */ TableDataInfo querySummaryPageList(HotVehicleThreeInspectBo bo, PageQuery pageQuery); + /** + * 分页查询当前人员可进行多车辆批量审核的三检流程列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 聚合分页列表 + */ + TableDataInfo queryBatchAuditVehiclePageList(HotVehicleThreeInspectVehicleQueryBo bo, PageQuery pageQuery); + /** * 查询车辆三检历史记录分页列表 * @@ -181,4 +191,11 @@ public interface IHotVehicleThreeInspectService { * @param bo 批量审核业务对象 */ void batchAudit(HotVehicleThreeInspectBatchAuditBo bo); + + /** + * 多车辆批量审核车辆三检 + * + * @param bo 多车辆批量审核业务对象 + */ + void multiVehicleBatchAudit(HotVehicleThreeInspectMultiVehicleBatchAuditBo bo); } 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 b5290e9..1730e6b 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 @@ -10,6 +10,7 @@ import com.hotwj.platform.common.helper.DriverLoginContextHelper; import com.hotwj.platform.config.vehicleThreeInspect.domain.HotVehicleThreeInspect; import com.hotwj.platform.config.vehicleThreeInspect.domain.bo.HotVehicleThreeInspectBatchAuditBo; import com.hotwj.platform.config.vehicleThreeInspect.domain.bo.HotVehicleThreeInspectBo; +import com.hotwj.platform.config.vehicleThreeInspect.domain.bo.HotVehicleThreeInspectMultiVehicleBatchAuditBo; 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.HotVehicleThreeInspectReceivedVehicleVo; @@ -33,6 +34,7 @@ import com.hotwj.platform.securityManagement.vehicleInoutCheck.mapper.HotVehicle import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.json.utils.JsonUtils; @@ -47,10 +49,13 @@ import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.Date; import java.util.Collections; import java.util.Collection; import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Objects; @@ -224,6 +229,20 @@ public class HotVehicleThreeInspectServiceImpl implements IHotVehicleThreeInspec return TableDataInfo.build(result); } + @Override + public TableDataInfo queryBatchAuditVehiclePageList(HotVehicleThreeInspectVehicleQueryBo bo, PageQuery pageQuery) { + Long currentAuditorId = resolveCurrentAuditorId(); + LoginUser loginUser = LoginHelper.getLoginUser(); + if (bo == null) { + bo = new HotVehicleThreeInspectVehicleQueryBo(); + } + if (bo.getCompanyId() == null && loginUser != null) { + bo.setCompanyId(loginUser.getCompanyId()); + } + Page result = baseMapper.queryBatchAuditVehiclePageList(pageQuery.build(), bo, currentAuditorId); + return TableDataInfo.build(result); + } + @Override public TableDataInfo queryHistoryPageList(HotVehicleThreeInspectBo bo, PageQuery pageQuery) { return querySummaryPageList(bo, pageQuery); @@ -701,6 +720,15 @@ public class HotVehicleThreeInspectServiceImpl implements IHotVehicleThreeInspec } } + @Override + @Transactional(rollbackFor = Exception.class) + public void multiVehicleBatchAudit(HotVehicleThreeInspectMultiVehicleBatchAuditBo bo) { + validateMultiVehicleBatchAuditRequest(bo); + HotVehicleThreeInspectBatchAuditBo batchAuditBo = new HotVehicleThreeInspectBatchAuditBo(); + batchAuditBo.setAuditItems(buildMultiVehicleBatchAuditItems(bo)); + batchAudit(batchAuditBo); + } + private void validateBatchAuditAuditor(HotVehicleThreeInspectBatchAuditBo bo) { Long expectedAuditorId = null; String expectedAuditorName = null; @@ -856,6 +884,164 @@ public class HotVehicleThreeInspectServiceImpl implements IHotVehicleThreeInspec } } + private void validateMultiVehicleBatchAuditRequest(HotVehicleThreeInspectMultiVehicleBatchAuditBo bo) { + if (bo == null || bo.getInspectIds() == null || bo.getInspectIds().isEmpty()) { + throw new ServiceException("三检流程ID不能为空"); + } + if (Objects.equals(bo.getHasHiddenDanger(), 1L) && bo.getEvaluatorId() == null) { + throw new ServiceException("存在隐患时评估人不能为空"); + } + } + + private List buildMultiVehicleBatchAuditItems(HotVehicleThreeInspectMultiVehicleBatchAuditBo bo) { + Long currentAuditorId = resolveCurrentAuditorId(); + Long currentCompanyId = resolveCurrentCompanyId(); + LinkedHashSet inspectIdSet = new LinkedHashSet<>(); + for (Long inspectId : bo.getInspectIds()) { + if (inspectId != null) { + inspectIdSet.add(inspectId); + } + } + if (inspectIdSet.isEmpty()) { + throw new ServiceException("三检流程ID不能为空"); + } + + List detailList = baseMapper.querySummaryDetailList(new ArrayList<>(inspectIdSet)); + if (detailList == null || detailList.isEmpty()) { + throw new ServiceException("未查询到可批量审核的车辆三检数据"); + } + fillTaskId(detailList); + + Map> detailMap = new LinkedHashMap<>(); + for (HotVehicleThreeInspectVo detail : detailList) { + if (detail == null || detail.getInspectId() == null) { + continue; + } + detailMap.computeIfAbsent(detail.getInspectId(), key -> new ArrayList<>()).add(detail); + } + + Date auditTime = resolveBatchAuditTime(bo); + String auditResult = buildBatchAuditResult(bo); + List auditItems = new ArrayList<>(); + for (Long inspectId : inspectIdSet) { + List currentDetails = detailMap.get(inspectId); + if (currentDetails == null || currentDetails.isEmpty()) { + throw new ServiceException("三检流程不存在,inspectId=" + inspectId); + } + appendPendingAuditItems(bo, currentDetails, currentAuditorId, currentCompanyId, auditTime, auditResult, auditItems); + } + if (auditItems.isEmpty()) { + throw new ServiceException("没有符合批量审核条件的数据"); + } + return auditItems; + } + + private void appendPendingAuditItems(HotVehicleThreeInspectMultiVehicleBatchAuditBo bo, + List currentDetails, + Long currentAuditorId, + Long currentCompanyId, + Date auditTime, + String auditResult, + List auditItems) { + boolean hasBackCheck = false; + String plateNumber = null; + int pendingCount = 0; + for (HotVehicleThreeInspectVo detail : currentDetails) { + if (detail == null) { + continue; + } + if (Objects.equals(detail.getInspectPhase(), 3L)) { + hasBackCheck = true; + } + if (StringUtils.isBlank(plateNumber)) { + plateNumber = resolvePlateNumber(detail.getVehicleId()); + } + } + if (!hasBackCheck) { + throw new ServiceException(buildBatchAuditVehicleMessage(plateNumber, "尚未完成收车检查,不可批量审核")); + } + + for (HotVehicleThreeInspectVo detail : currentDetails) { + if (detail == null) { + continue; + } + if (currentCompanyId != null && !Objects.equals(currentCompanyId, detail.getCompanyId())) { + continue; + } + if (!Objects.equals(currentAuditorId, detail.getAuditorId())) { + continue; + } + if (!isPendingAuditRecord(detail)) { + continue; + } + if (StringUtils.isBlank(detail.getTaskId())) { + continue; + } + HotVehicleThreeInspectBo item = new HotVehicleThreeInspectBo(); + item.setId(detail.getId()); + item.setTaskId(detail.getTaskId()); + item.setAuditTime(auditTime); + item.setHasHiddenDanger(bo.getHasHiddenDanger()); + item.setAuditResult(auditResult); + item.setRejectReason(bo.getRejectReason()); + item.setAuditorSignImgUrl(bo.getAuditorSignImgUrl()); + item.setAuditorId(detail.getAuditorId()); + item.setAuditorName(detail.getAuditorName()); + item.setEvaluatorId(bo.getEvaluatorId()); + auditItems.add(item); + pendingCount++; + } + + if (pendingCount == 0) { + throw new ServiceException(buildBatchAuditVehicleMessage(plateNumber, "没有当前账号可审核的未审核数据")); + } + } + + private boolean isPendingAuditRecord(HotVehicleThreeInspectVo detail) { + if (detail == null) { + return false; + } + return !"APPROVED".equals(detail.getFlowStatus()) && !"REJECTED".equals(detail.getFlowStatus()); + } + + private Date resolveBatchAuditTime(HotVehicleThreeInspectMultiVehicleBatchAuditBo bo) { + return bo.getAuditTime() != null ? bo.getAuditTime() : new Date(); + } + + private String buildBatchAuditResult(HotVehicleThreeInspectMultiVehicleBatchAuditBo bo) { + String auditResult = StringUtils.trimToNull(bo.getAuditResult()); + if (auditResult != null) { + return auditResult; + } + if (Objects.equals(bo.getHasHiddenDanger(), 1L)) { + String rejectReason = StringUtils.trimToNull(bo.getRejectReason()); + return rejectReason != null ? "不通过:" + rejectReason : "不通过"; + } + return "通过"; + } + + private String buildBatchAuditVehicleMessage(String plateNumber, String suffix) { + String vehicleName = StringUtils.defaultIfBlank(StringUtils.trimToNull(plateNumber), "当前车辆"); + return vehicleName + suffix; + } + + private Long resolveCurrentAuditorId() { + String businessUserId = LoginHelper.getBusinessUserId(); + if (StringUtils.isBlank(businessUserId)) { + throw new ServiceException("当前登录人员不存在"); + } + try { + return Long.valueOf(businessUserId); + } catch (NumberFormatException e) { + throw new ServiceException("当前登录人员信息异常"); + } + } + + private Long resolveCurrentCompanyId() { + LoginUser loginUser = LoginHelper.getLoginUser(); + return loginUser != null ? loginUser.getCompanyId() : null; + } + private void refreshSummary(HotVehicleThreeInspectSummaryVo summary) { if (summary == null) { return; @@ -973,6 +1159,14 @@ public class HotVehicleThreeInspectServiceImpl implements IHotVehicleThreeInspec return normalized.substring(normalized.length() - 3); } + private String resolvePlateNumber(Long vehicleId) { + if (vehicleId == null) { + return null; + } + HotVehicle vehicle = hotVehicleMapper.selectById(String.valueOf(vehicleId)); + return vehicle == null ? null : StringUtils.trimToNull(vehicle.getPlateNumber()); + } + 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 c344989..1311ff5 100644 --- a/src/main/resources/mapper/securityManagement/HotVehicleThreeInspectMapper.xml +++ b/src/main/resources/mapper/securityManagement/HotVehicleThreeInspectMapper.xml @@ -268,6 +268,68 @@ GROUP BY t.inspect_id + +