From d4a3ddfeac6aea951c51bee91d9cf4eb57c4f4c4 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期二, 30 六月 2026 14:31:07 +0800
Subject: [PATCH] feat(safe): 完善安全巡检系统功能

---
 src/main/java/com/ruoyi/safe/controller/SafeLineInspectionController.java           |   48 ++++++
 src/main/java/com/ruoyi/safe/controller/SafeLineInspectionRecordController.java     |   39 +++++
 src/main/java/com/ruoyi/safe/service/impl/SafeLineInspectionHazardServiceImpl.java  |   25 +++
 src/main/java/com/ruoyi/safe/controller/SafeFacilityInspectionController.java       |   29 ++++
 src/main/java/com/ruoyi/safe/controller/SafeLineInspectionHazardController.java     |    2 
 src/main/java/com/ruoyi/safe/controller/SafeFacilityLedgerController.java           |   30 ++++
 src/main/java/com/ruoyi/safe/controller/SafeFacilityRectificationController.java    |    2 
 src/main/java/com/ruoyi/safe/service/impl/SafeLineInspectionRecordServiceImpl.java  |   48 ------
 src/main/java/com/ruoyi/safe/service/impl/SafeFacilityRectificationServiceImpl.java |   98 +++++++++++++
 src/main/java/com/ruoyi/safe/service/impl/SafeFacilityInspectionServiceImpl.java    |   80 +++++++++++
 10 files changed, 343 insertions(+), 58 deletions(-)

diff --git a/src/main/java/com/ruoyi/safe/controller/SafeFacilityInspectionController.java b/src/main/java/com/ruoyi/safe/controller/SafeFacilityInspectionController.java
index cf5627e..67e86c8 100644
--- a/src/main/java/com/ruoyi/safe/controller/SafeFacilityInspectionController.java
+++ b/src/main/java/com/ruoyi/safe/controller/SafeFacilityInspectionController.java
@@ -1,11 +1,14 @@
 package com.ruoyi.safe.controller;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.domain.R;
 import com.ruoyi.safe.pojo.SafeFacilityInspection;
+import com.ruoyi.safe.pojo.SafeFacilityRectification;
 import com.ruoyi.safe.service.SafeFacilityInspectionService;
+import com.ruoyi.safe.service.SafeFacilityRectificationService;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Operation;
 import lombok.AllArgsConstructor;
@@ -28,6 +31,7 @@
 public class SafeFacilityInspectionController {
 
     private SafeFacilityInspectionService safeFacilityInspectionService;
+    private SafeFacilityRectificationService safeFacilityRectificationService;
 
     @GetMapping("/page")
     @Operation(summary = "鍒嗛〉鏌ヨ")
@@ -45,7 +49,23 @@
     @Log(title = "瀹夊叏璁炬柦宸℃", businessType = BusinessType.INSERT)
     @PostMapping()
     public R add(@RequestBody SafeFacilityInspection safeFacilityInspection) {
+        if (isInspectionCodeExists(safeFacilityInspection.getInspectionCode(), null)) {
+            return R.fail("宸℃缂栧彿銆�" + safeFacilityInspection.getInspectionCode() + "銆嶅凡瀛樺湪");
+        }
+        if (safeFacilityInspection.getInspectorId() == null) {
+            Long currentUserId = SecurityUtils.getUserId();
+            safeFacilityInspection.setInspectorId(currentUserId.intValue());
+        }
+        safeFacilityInspection.setStatus("寰呭贰妫�");
         return R.ok(safeFacilityInspectionService.save(safeFacilityInspection));
+    }
+
+    private boolean isInspectionCodeExists(String code, Integer excludeId) {
+        if (code == null || code.isEmpty()) return false;
+        return safeFacilityInspectionService.lambdaQuery()
+                .eq(SafeFacilityInspection::getInspectionCode, code)
+                .ne(excludeId != null, SafeFacilityInspection::getId, excludeId)
+                .count() > 0;
     }
 
     @Operation(summary = "淇敼瀹夊叏璁炬柦宸℃")
@@ -58,7 +78,14 @@
     @Operation(summary = "鍒犻櫎瀹夊叏璁炬柦宸℃")
     @Log(title = "瀹夊叏璁炬柦宸℃", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
-    public R delSafeFacilityInspection(@RequestBody List<Integer> ids) {
+    public R delSafeFacilityInspection(@PathVariable List<Integer> ids) {
+        for (Integer id : ids) {
+            long count = safeFacilityRectificationService.lambdaQuery()
+                    .eq(SafeFacilityRectification::getInspectionId, id).count();
+            if (count > 0) {
+                return R.fail("璇ュ贰妫�璁板綍瀛樺湪鍏宠仈鐨勬暣鏀硅褰曪紝鏃犳硶鍒犻櫎");
+            }
+        }
         return R.ok(safeFacilityInspectionService.removeBatchByIds(ids));
     }
 }
diff --git a/src/main/java/com/ruoyi/safe/controller/SafeFacilityLedgerController.java b/src/main/java/com/ruoyi/safe/controller/SafeFacilityLedgerController.java
index 5b59298..a17f0a3 100644
--- a/src/main/java/com/ruoyi/safe/controller/SafeFacilityLedgerController.java
+++ b/src/main/java/com/ruoyi/safe/controller/SafeFacilityLedgerController.java
@@ -4,7 +4,9 @@
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.safe.pojo.SafeFacilityInspection;
 import com.ruoyi.safe.pojo.SafeFacilityLedger;
+import com.ruoyi.safe.service.SafeFacilityInspectionService;
 import com.ruoyi.safe.service.SafeFacilityLedgerService;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Operation;
@@ -28,6 +30,7 @@
 public class SafeFacilityLedgerController {
 
     private SafeFacilityLedgerService safeFacilityLedgerService;
+    private SafeFacilityInspectionService safeFacilityInspectionService;
 
     @GetMapping("/page")
     @Operation(summary = "鍒嗛〉鏌ヨ")
@@ -45,6 +48,9 @@
     @Log(title = "瀹夊叏璁炬柦鍙拌处", businessType = BusinessType.INSERT)
     @PostMapping()
     public R add(@RequestBody SafeFacilityLedger safeFacilityLedger) {
+        if (isCodeExists(safeFacilityLedger.getFacilityCode(), null)) {
+            return R.fail("璁炬柦缂栧彿銆�" + safeFacilityLedger.getFacilityCode() + "銆嶅凡瀛樺湪");
+        }
         return R.ok(safeFacilityLedgerService.save(safeFacilityLedger));
     }
 
@@ -52,13 +58,35 @@
     @Log(title = "瀹夊叏璁炬柦鍙拌处", businessType = BusinessType.UPDATE)
     @PutMapping()
     public R update(@RequestBody SafeFacilityLedger safeFacilityLedger) {
+        if (isCodeExists(safeFacilityLedger.getFacilityCode(), safeFacilityLedger.getId())) {
+            return R.fail("璁炬柦缂栧彿銆�" + safeFacilityLedger.getFacilityCode() + "銆嶅凡瀛樺湪");
+        }
         return R.ok(safeFacilityLedgerService.updateById(safeFacilityLedger));
+    }
+
+    private boolean isCodeExists(String code, Integer excludeId) {
+        if (code == null || code.isEmpty()) return false;
+        return safeFacilityLedgerService.lambdaQuery()
+                .eq(SafeFacilityLedger::getFacilityCode, code)
+                .ne(excludeId != null, SafeFacilityLedger::getId, excludeId)
+                .count() > 0;
     }
 
     @Operation(summary = "鍒犻櫎瀹夊叏璁炬柦鍙拌处")
     @Log(title = "瀹夊叏璁炬柦鍙拌处", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
-    public R delSafeFacilityLedger(@RequestBody List<Integer> ids) {
+    public R delSafeFacilityLedger(@PathVariable List<Integer> ids) {
+        // 鏍¢獙璁炬柦鏄惁鏈夊叧鑱旂殑宸℃璁板綍
+        for (Integer id : ids) {
+            long count = safeFacilityInspectionService.lambdaQuery()
+                    .eq(com.ruoyi.safe.pojo.SafeFacilityInspection::getFacilityId, id)
+                    .count();
+            if (count > 0) {
+                SafeFacilityLedger ledger = safeFacilityLedgerService.getById(id);
+                String name = ledger != null ? ledger.getFacilityName() : String.valueOf(id);
+                return R.fail("璁炬柦銆�" + name + "銆嶅瓨鍦ㄥ叧鑱旂殑宸℃璁板綍锛屾棤娉曞垹闄�");
+            }
+        }
         return R.ok(safeFacilityLedgerService.removeBatchByIds(ids));
     }
 }
diff --git a/src/main/java/com/ruoyi/safe/controller/SafeFacilityRectificationController.java b/src/main/java/com/ruoyi/safe/controller/SafeFacilityRectificationController.java
index 784204d..683ba88 100644
--- a/src/main/java/com/ruoyi/safe/controller/SafeFacilityRectificationController.java
+++ b/src/main/java/com/ruoyi/safe/controller/SafeFacilityRectificationController.java
@@ -58,7 +58,7 @@
     @Operation(summary = "鍒犻櫎瀹夊叏璁炬柦鏁存敼")
     @Log(title = "瀹夊叏璁炬柦鏁存敼", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
-    public R delSafeFacilityRectification(@RequestBody List<Integer> ids) {
+    public R delSafeFacilityRectification(@PathVariable List<Integer> ids) {
         return R.ok(safeFacilityRectificationService.removeBatchByIds(ids));
     }
 }
diff --git a/src/main/java/com/ruoyi/safe/controller/SafeLineInspectionController.java b/src/main/java/com/ruoyi/safe/controller/SafeLineInspectionController.java
index ac4ac33..b5a9f5d 100644
--- a/src/main/java/com/ruoyi/safe/controller/SafeLineInspectionController.java
+++ b/src/main/java/com/ruoyi/safe/controller/SafeLineInspectionController.java
@@ -6,6 +6,10 @@
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.domain.R;
 import com.ruoyi.safe.pojo.SafeLineInspection;
+import com.ruoyi.safe.pojo.SafeLineInspectionHazard;
+import com.ruoyi.safe.pojo.SafeLineInspectionRecord;
+import com.ruoyi.safe.service.SafeLineInspectionHazardService;
+import com.ruoyi.safe.service.SafeLineInspectionRecordService;
 import com.ruoyi.safe.service.SafeLineInspectionService;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Operation;
@@ -30,6 +34,8 @@
 public class SafeLineInspectionController {
 
     private SafeLineInspectionService safeLineInspectionService;
+    private SafeLineInspectionHazardService safeLineInspectionHazardService;
+    private SafeLineInspectionRecordService safeLineInspectionRecordService;
 
     @GetMapping("/page")
     @Operation(summary = "鍒嗛〉鏌ヨ")
@@ -47,8 +53,15 @@
     @Log(title = "绾胯矾宸℃", businessType = BusinessType.INSERT)
     @PostMapping()
     public R add(@RequestBody SafeLineInspection safeLineInspection) {
-        // 鏂板鏃堕粯璁ょ姸鎬佷负"寰呭贰妫�"
+        if (isInspectionCodeExists(safeLineInspection.getInspectionCode(), null)) {
+            return R.fail("宸℃缂栧彿銆�" + safeLineInspection.getInspectionCode() + "銆嶅凡瀛樺湪");
+        }
         safeLineInspection.setStatus("寰呭贰妫�");
+        Long currentUserId = SecurityUtils.getUserId();
+        safeLineInspection.setAssignUserId(currentUserId.intValue());
+        if (safeLineInspection.getInspectorId() != null && safeLineInspection.getInspectorId().isEmpty()) {
+            safeLineInspection.setInspectorId(null);
+        }
         return R.ok(safeLineInspectionService.save(safeLineInspection));
     }
 
@@ -56,7 +69,21 @@
     @Log(title = "绾胯矾宸℃", businessType = BusinessType.UPDATE)
     @PutMapping()
     public R update(@RequestBody SafeLineInspection safeLineInspection) {
+        if (isInspectionCodeExists(safeLineInspection.getInspectionCode(), safeLineInspection.getId())) {
+            return R.fail("宸℃缂栧彿銆�" + safeLineInspection.getInspectionCode() + "銆嶅凡瀛樺湪");
+        }
+        if (safeLineInspection.getInspectorId() != null && safeLineInspection.getInspectorId().isEmpty()) {
+            safeLineInspection.setInspectorId(null);
+        }
         return R.ok(safeLineInspectionService.updateById(safeLineInspection));
+    }
+
+    private boolean isInspectionCodeExists(String code, Integer excludeId) {
+        if (code == null || code.isEmpty()) return false;
+        return safeLineInspectionService.lambdaQuery()
+                .eq(SafeLineInspection::getInspectionCode, code)
+                .ne(excludeId != null, SafeLineInspection::getId, excludeId)
+                .count() > 0;
     }
 
     @Operation(summary = "瀹屾垚宸℃")
@@ -66,6 +93,14 @@
         SafeLineInspection inspection = safeLineInspectionService.getById(id);
         if (inspection == null) {
             return R.fail("宸℃浠诲姟涓嶅瓨鍦�");
+        }
+
+        // 鏍¢獙鏄惁鏈夋湭鏁存敼鐨勯殣鎮�
+        List<SafeLineInspectionHazard> hazards = safeLineInspectionHazardService.listByInspectionId(id);
+        boolean hasUnrectified = hazards.stream()
+                .anyMatch(h -> !"宸叉暣鏀�".equals(h.getStatus()));
+        if (hasUnrectified) {
+            return R.fail("瀛樺湪鏈暣鏀圭殑闅愭偅锛岃鍏堝畬鎴愰殣鎮f暣鏀�");
         }
 
         Long currentUserId = SecurityUtils.getUserId();
@@ -79,7 +114,16 @@
     @Operation(summary = "鍒犻櫎绾胯矾宸℃浠诲姟")
     @Log(title = "绾胯矾宸℃", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
-    public R delSafeLineInspection(@RequestBody List<Integer> ids) {
+    public R delSafeLineInspection(@PathVariable List<Integer> ids) {
+        for (Integer id : ids) {
+            long recordCount = safeLineInspectionRecordService.lambdaQuery()
+                    .eq(SafeLineInspectionRecord::getInspectionId, id).count();
+            long hazardCount = safeLineInspectionHazardService.lambdaQuery()
+                    .eq(SafeLineInspectionHazard::getInspectionId, id).count();
+            if (recordCount > 0 || hazardCount > 0) {
+                return R.fail("璇ュ贰妫�浠诲姟瀛樺湪鍏宠仈鐨勫贰妫�璁板綍鎴栭殣鎮o紝鏃犳硶鍒犻櫎");
+            }
+        }
         return R.ok(safeLineInspectionService.removeBatchByIds(ids));
     }
 }
diff --git a/src/main/java/com/ruoyi/safe/controller/SafeLineInspectionHazardController.java b/src/main/java/com/ruoyi/safe/controller/SafeLineInspectionHazardController.java
index 3a88df8..bdf0732 100644
--- a/src/main/java/com/ruoyi/safe/controller/SafeLineInspectionHazardController.java
+++ b/src/main/java/com/ruoyi/safe/controller/SafeLineInspectionHazardController.java
@@ -64,7 +64,7 @@
     @Operation(summary = "鍒犻櫎绾胯矾宸℃闅愭偅")
     @Log(title = "绾胯矾宸℃闅愭偅", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
-    public R delSafeLineInspectionHazard(@RequestBody List<Integer> ids) {
+    public R delSafeLineInspectionHazard(@PathVariable List<Integer> ids) {
         return R.ok(safeLineInspectionHazardService.removeBatchByIds(ids));
     }
 }
diff --git a/src/main/java/com/ruoyi/safe/controller/SafeLineInspectionRecordController.java b/src/main/java/com/ruoyi/safe/controller/SafeLineInspectionRecordController.java
index 0a1b4ad..b2e25f2 100644
--- a/src/main/java/com/ruoyi/safe/controller/SafeLineInspectionRecordController.java
+++ b/src/main/java/com/ruoyi/safe/controller/SafeLineInspectionRecordController.java
@@ -1,15 +1,20 @@
 package com.ruoyi.safe.controller;
 
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.safe.pojo.SafeLineInspection;
 import com.ruoyi.safe.pojo.SafeLineInspectionRecord;
 import com.ruoyi.safe.service.SafeLineInspectionRecordService;
+import com.ruoyi.safe.service.SafeLineInspectionService;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Operation;
 import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
+import java.time.LocalDateTime;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -27,6 +32,7 @@
 public class SafeLineInspectionRecordController {
 
     private SafeLineInspectionRecordService safeLineInspectionRecordService;
+    private SafeLineInspectionService safeLineInspectionService;
 
     @GetMapping("/list/{inspectionId}")
     @Operation(summary = "鏍规嵁宸℃浠诲姟ID鏌ヨ璁板綍")
@@ -38,7 +44,36 @@
     @Log(title = "绾胯矾宸℃璁板綍", businessType = BusinessType.INSERT)
     @PostMapping()
     public R add(@RequestBody SafeLineInspectionRecord safeLineInspectionRecord) {
-        return R.ok(safeLineInspectionRecordService.save(safeLineInspectionRecord));
+        boolean saved = safeLineInspectionRecordService.save(safeLineInspectionRecord);
+        if (saved && safeLineInspectionRecord.getInspectionId() != null) {
+            updateInspectionStatus(safeLineInspectionRecord.getInspectionId());
+        }
+        return R.ok(saved);
+    }
+
+    private void updateInspectionStatus(Integer inspectionId) {
+        SafeLineInspection inspection = safeLineInspectionService.getById(inspectionId);
+        if (inspection != null && "寰呭贰妫�".equals(inspection.getStatus())) {
+            Long currentUserId = SecurityUtils.getUserId();
+            String currentUserIdStr = String.valueOf(currentUserId);
+
+            String inspectorId = inspection.getInspectorId();
+            if (inspectorId == null || inspectorId.isEmpty()) {
+                inspectorId = currentUserIdStr;
+            } else {
+                String[] ids = inspectorId.split(",");
+                boolean exists = Arrays.stream(ids).anyMatch(id -> id.trim().equals(currentUserIdStr));
+                if (!exists) {
+                    inspectorId = inspectorId + "," + currentUserIdStr;
+                }
+            }
+
+            inspection.setStatus("宸℃涓�");
+            inspection.setInspectorId(inspectorId);
+            inspection.setUpdateTime(LocalDateTime.now());
+            inspection.setUpdateUser(currentUserId.intValue());
+            safeLineInspectionService.updateById(inspection);
+        }
     }
 
     @Operation(summary = "鎵归噺鏂板绾胯矾宸℃璁板綍")
@@ -58,7 +93,7 @@
     @Operation(summary = "鍒犻櫎绾胯矾宸℃璁板綍")
     @Log(title = "绾胯矾宸℃璁板綍", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
-    public R delSafeLineInspectionRecord(@RequestBody List<Integer> ids) {
+    public R delSafeLineInspectionRecord(@PathVariable List<Integer> ids) {
         return R.ok(safeLineInspectionRecordService.removeBatchByIds(ids));
     }
 }
diff --git a/src/main/java/com/ruoyi/safe/service/impl/SafeFacilityInspectionServiceImpl.java b/src/main/java/com/ruoyi/safe/service/impl/SafeFacilityInspectionServiceImpl.java
index e11b3f9..f3f83f7 100644
--- a/src/main/java/com/ruoyi/safe/service/impl/SafeFacilityInspectionServiceImpl.java
+++ b/src/main/java/com/ruoyi/safe/service/impl/SafeFacilityInspectionServiceImpl.java
@@ -2,11 +2,22 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysUserMapper;
 import com.ruoyi.safe.pojo.SafeFacilityInspection;
+import com.ruoyi.safe.pojo.SafeFacilityLedger;
 import com.ruoyi.safe.mapper.SafeFacilityInspectionMapper;
 import com.ruoyi.safe.service.SafeFacilityInspectionService;
+import com.ruoyi.safe.service.SafeFacilityLedgerService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -19,13 +30,80 @@
 @Service
 public class SafeFacilityInspectionServiceImpl extends ServiceImpl<SafeFacilityInspectionMapper, SafeFacilityInspection> implements SafeFacilityInspectionService {
 
+    @Autowired
+    private SafeFacilityLedgerService safeFacilityLedgerService;
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
+    @Override
+    public SafeFacilityInspection getById(Serializable id) {
+        SafeFacilityInspection record = super.getById(id);
+        if (record != null) {
+            fillExtraInfo(Collections.singletonList(record));
+        }
+        return record;
+    }
+
     @Override
     public IPage<SafeFacilityInspection> pageSafeFacilityInspection(Page page, SafeFacilityInspection safeFacilityInspection) {
-        return this.lambdaQuery()
+        IPage<SafeFacilityInspection> result = this.lambdaQuery()
                 .like(safeFacilityInspection.getInspectionCode() != null, SafeFacilityInspection::getInspectionCode, safeFacilityInspection.getInspectionCode())
                 .eq(safeFacilityInspection.getFacilityId() != null, SafeFacilityInspection::getFacilityId, safeFacilityInspection.getFacilityId())
                 .eq(safeFacilityInspection.getStatus() != null, SafeFacilityInspection::getStatus, safeFacilityInspection.getStatus())
                 .orderByDesc(SafeFacilityInspection::getCreateTime)
                 .page(page);
+
+        fillExtraInfo(result.getRecords());
+        return result;
+    }
+
+    private void fillExtraInfo(List<SafeFacilityInspection> records) {
+        if (records == null || records.isEmpty()) {
+            return;
+        }
+
+        // 鏀堕泦鎵�鏈夎鏂絀D
+        List<Integer> facilityIds = records.stream()
+                .map(SafeFacilityInspection::getFacilityId)
+                .filter(id -> id != null)
+                .distinct()
+                .collect(Collectors.toList());
+
+        // 鏀堕泦鎵�鏈夊贰妫�浜篒D
+        List<Long> inspectorIds = records.stream()
+                .map(SafeFacilityInspection::getInspectorId)
+                .filter(id -> id != null)
+                .map(Integer::longValue)
+                .distinct()
+                .collect(Collectors.toList());
+
+        // 鎵归噺鏌ヨ璁炬柦淇℃伅
+        Map<Integer, SafeFacilityLedger> facilityMap = Map.of();
+        if (!facilityIds.isEmpty()) {
+            facilityMap = safeFacilityLedgerService.listByIds(facilityIds).stream()
+                    .collect(Collectors.toMap(SafeFacilityLedger::getId, f -> f, (v1, v2) -> v1));
+        }
+
+        // 鎵归噺鏌ヨ宸℃浜轰俊鎭�
+        Map<Long, String> userMap = Map.of();
+        if (!inspectorIds.isEmpty()) {
+            List<SysUser> users = sysUserMapper.selectUserByIds(inspectorIds);
+            userMap = users.stream()
+                    .collect(Collectors.toMap(SysUser::getUserId, SysUser::getNickName, (v1, v2) -> v1));
+        }
+
+        // 濉厖瀛楁
+        for (SafeFacilityInspection record : records) {
+            if (record.getFacilityId() != null) {
+                SafeFacilityLedger facility = facilityMap.get(record.getFacilityId());
+                if (facility != null) {
+                    record.setFacilityName(facility.getFacilityName());
+                    record.setFacilityCode(facility.getFacilityCode());
+                }
+            }
+            if (record.getInspectorId() != null) {
+                record.setInspectorName(userMap.getOrDefault(record.getInspectorId().longValue(), "鏈煡鐢ㄦ埛"));
+            }
+        }
     }
 }
diff --git a/src/main/java/com/ruoyi/safe/service/impl/SafeFacilityRectificationServiceImpl.java b/src/main/java/com/ruoyi/safe/service/impl/SafeFacilityRectificationServiceImpl.java
index 82bead8..85df9ee 100644
--- a/src/main/java/com/ruoyi/safe/service/impl/SafeFacilityRectificationServiceImpl.java
+++ b/src/main/java/com/ruoyi/safe/service/impl/SafeFacilityRectificationServiceImpl.java
@@ -2,11 +2,22 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.safe.pojo.SafeFacilityLedger;
 import com.ruoyi.safe.pojo.SafeFacilityRectification;
 import com.ruoyi.safe.mapper.SafeFacilityRectificationMapper;
+import com.ruoyi.safe.service.SafeFacilityLedgerService;
 import com.ruoyi.safe.service.SafeFacilityRectificationService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -19,13 +30,98 @@
 @Service
 public class SafeFacilityRectificationServiceImpl extends ServiceImpl<SafeFacilityRectificationMapper, SafeFacilityRectification> implements SafeFacilityRectificationService {
 
+    @Autowired
+    private SafeFacilityLedgerService safeFacilityLedgerService;
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
+    @Override
+    public SafeFacilityRectification getById(Serializable id) {
+        SafeFacilityRectification record = super.getById(id);
+        if (record != null) {
+            fillExtraInfo(Collections.singletonList(record));
+        }
+        return record;
+    }
+
     @Override
     public IPage<SafeFacilityRectification> pageSafeFacilityRectification(Page page, SafeFacilityRectification safeFacilityRectification) {
-        return this.lambdaQuery()
+        IPage<SafeFacilityRectification> result = this.lambdaQuery()
                 .eq(safeFacilityRectification.getInspectionId() != null, SafeFacilityRectification::getInspectionId, safeFacilityRectification.getInspectionId())
                 .eq(safeFacilityRectification.getFacilityId() != null, SafeFacilityRectification::getFacilityId, safeFacilityRectification.getFacilityId())
                 .eq(safeFacilityRectification.getStatus() != null, SafeFacilityRectification::getStatus, safeFacilityRectification.getStatus())
                 .orderByDesc(SafeFacilityRectification::getCreateTime)
                 .page(page);
+
+        fillExtraInfo(result.getRecords());
+        return result;
+    }
+
+    private void fillExtraInfo(List<SafeFacilityRectification> records) {
+        if (records == null || records.isEmpty()) {
+            return;
+        }
+
+        // 鏀堕泦璁炬柦ID
+        List<Integer> facilityIds = records.stream()
+                .map(SafeFacilityRectification::getFacilityId)
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(Collectors.toList());
+
+        // 鏀堕泦鎵�鏈夌敤鎴稩D锛堟暣鏀硅矗浠讳汉 + 楠屾敹浜猴級
+        Set<Long> userIds = new HashSet<>();
+        records.stream().map(SafeFacilityRectification::getRectifyUserId).filter(Objects::nonNull).forEach(id -> userIds.add(id.longValue()));
+        records.stream().map(SafeFacilityRectification::getVerifyUserId).filter(Objects::nonNull).forEach(id -> userIds.add(id.longValue()));
+
+        // 鎵归噺鏌ヨ璁炬柦淇℃伅
+        Map<Integer, SafeFacilityLedger> facilityMap = facilityIds.isEmpty() ? Collections.emptyMap()
+                : safeFacilityLedgerService.listByIds(facilityIds).stream()
+                .collect(Collectors.toMap(SafeFacilityLedger::getId, f -> f, (v1, v2) -> v1));
+
+        // 鎵归噺鏌ヨ鐢ㄦ埛淇℃伅
+        Map<Long, String> userMap = userIds.isEmpty() ? Collections.emptyMap()
+                : sysUserMapper.selectUserByIds(new ArrayList<>(userIds)).stream()
+                .collect(Collectors.toMap(SysUser::getUserId, SysUser::getNickName, (v1, v2) -> v1));
+
+        for (SafeFacilityRectification record : records) {
+            if (record.getFacilityId() != null) {
+                SafeFacilityLedger facility = facilityMap.get(record.getFacilityId());
+                if (facility != null) {
+                    record.setFacilityName(facility.getFacilityName());
+                }
+            }
+            if (record.getRectifyUserId() != null) {
+                record.setRectifyUserName(userMap.getOrDefault(record.getRectifyUserId().longValue(), "鏈煡鐢ㄦ埛"));
+            }
+            if (record.getVerifyUserId() != null) {
+                record.setVerifyUserName(userMap.getOrDefault(record.getVerifyUserId().longValue(), "鏈煡鐢ㄦ埛"));
+            }
+        }
+    }
+
+    @Override
+    public boolean save(SafeFacilityRectification entity) {
+        Long currentUserId = SecurityUtils.getUserId();
+        if (entity.getRectifyUserId() == null) {
+            entity.setRectifyUserId(currentUserId.intValue());
+        }
+        if (entity.getStatus() == null) {
+            entity.setStatus("寰呮暣鏀�");
+        }
+        return super.save(entity);
+    }
+
+    @Override
+    public boolean updateById(SafeFacilityRectification entity) {
+        Long currentUserId = SecurityUtils.getUserId();
+        if ("宸叉暣鏀�".equals(entity.getStatus()) && entity.getActualTime() == null) {
+            entity.setActualTime(LocalDateTime.now());
+        }
+        if ("宸查獙鏀�".equals(entity.getStatus())) {
+            entity.setVerifyUserId(currentUserId.intValue());
+            entity.setVerifyTime(LocalDateTime.now());
+        }
+        return super.updateById(entity);
     }
 }
diff --git a/src/main/java/com/ruoyi/safe/service/impl/SafeLineInspectionHazardServiceImpl.java b/src/main/java/com/ruoyi/safe/service/impl/SafeLineInspectionHazardServiceImpl.java
index 733043d..3f2e43b 100644
--- a/src/main/java/com/ruoyi/safe/service/impl/SafeLineInspectionHazardServiceImpl.java
+++ b/src/main/java/com/ruoyi/safe/service/impl/SafeLineInspectionHazardServiceImpl.java
@@ -2,12 +2,14 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.safe.pojo.SafeLineInspectionHazard;
 import com.ruoyi.safe.mapper.SafeLineInspectionHazardMapper;
 import com.ruoyi.safe.service.SafeLineInspectionHazardService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -38,4 +40,27 @@
                 .orderByDesc(SafeLineInspectionHazard::getCreateTime)
                 .list();
     }
+
+    @Override
+    public boolean save(SafeLineInspectionHazard entity) {
+        if (entity.getHazardCode() == null || entity.getHazardCode().isEmpty()) {
+            entity.setHazardCode(generateHazardCode());
+        }
+        return super.save(entity);
+    }
+
+    @Override
+    public boolean updateById(SafeLineInspectionHazard entity) {
+        if ("宸叉暣鏀�".equals(entity.getStatus())) {
+            Long currentUserId = SecurityUtils.getUserId();
+            entity.setRectifyUserId(currentUserId.intValue());
+            entity.setRectifyTime(LocalDateTime.now());
+        }
+        return super.updateById(entity);
+    }
+
+    private String generateHazardCode() {
+        long count = this.count() + 1;
+        return "YH" + String.format("%05d", count);
+    }
 }
diff --git a/src/main/java/com/ruoyi/safe/service/impl/SafeLineInspectionRecordServiceImpl.java b/src/main/java/com/ruoyi/safe/service/impl/SafeLineInspectionRecordServiceImpl.java
index 5032ec7..89da3f0 100644
--- a/src/main/java/com/ruoyi/safe/service/impl/SafeLineInspectionRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/safe/service/impl/SafeLineInspectionRecordServiceImpl.java
@@ -1,17 +1,11 @@
 package com.ruoyi.safe.service.impl;
 
-import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.safe.pojo.SafeLineInspection;
 import com.ruoyi.safe.pojo.SafeLineInspectionRecord;
 import com.ruoyi.safe.mapper.SafeLineInspectionRecordMapper;
 import com.ruoyi.safe.service.SafeLineInspectionRecordService;
-import com.ruoyi.safe.service.SafeLineInspectionService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
-import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -25,53 +19,11 @@
 @Service
 public class SafeLineInspectionRecordServiceImpl extends ServiceImpl<SafeLineInspectionRecordMapper, SafeLineInspectionRecord> implements SafeLineInspectionRecordService {
 
-    @Autowired
-    private SafeLineInspectionService safeLineInspectionService;
-
     @Override
     public List<SafeLineInspectionRecord> listByInspectionId(Integer inspectionId) {
         return this.lambdaQuery()
                 .eq(SafeLineInspectionRecord::getInspectionId, inspectionId)
                 .orderByDesc(SafeLineInspectionRecord::getCheckTime)
                 .list();
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public boolean save(SafeLineInspectionRecord entity) {
-        // 淇濆瓨宸℃璁板綍
-        boolean result = super.save(entity);
-
-        if (result && entity.getInspectionId() != null) {
-            // 鏇存柊宸℃浠诲姟鐘舵�佷负"宸℃涓�"锛屽苟璁剧疆宸℃浜轰负褰撳墠鐧诲綍鐢ㄦ埛
-            updateInspectionStatus(entity.getInspectionId());
-        }
-
-        return result;
-    }
-
-    /**
-     * 鏇存柊宸℃浠诲姟鐘舵�佷负"宸℃涓�"锛屽苟娣诲姞褰撳墠鐢ㄦ埛鍒板贰妫�浜哄垪琛�
-     */
-    private void updateInspectionStatus(Integer inspectionId) {
-        SafeLineInspection inspection = safeLineInspectionService.getById(inspectionId);
-        if (inspection != null && "寰呭贰妫�".equals(inspection.getStatus())) {
-            Long currentUserId = SecurityUtils.getUserId();
-            String currentUserIdStr = String.valueOf(currentUserId);
-
-            // 娣诲姞褰撳墠鐢ㄦ埛鍒板贰妫�浜哄垪琛紙濡傛灉涓嶅瓨鍦級
-            String inspectorId = inspection.getInspectorId();
-            if (inspectorId == null || inspectorId.isEmpty()) {
-                inspectorId = currentUserIdStr;
-            } else if (!inspectorId.contains(currentUserIdStr)) {
-                inspectorId = inspectorId + "," + currentUserIdStr;
-            }
-
-            inspection.setStatus("宸℃涓�");
-            inspection.setInspectorId(inspectorId);
-            inspection.setUpdateTime(LocalDateTime.now());
-            inspection.setUpdateUser(currentUserId.intValue());
-            safeLineInspectionService.updateById(inspection);
-        }
     }
 }

--
Gitblit v1.9.3