From cecd7580b5e629173bdb5b258f2676d16d580f72 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期四, 30 七月 2026 15:49:55 +0800
Subject: [PATCH] fix: 安全培训考核签到修改

---
 src/main/java/com/ruoyi/safe/service/impl/SafeLineInspectionServiceImpl.java |  170 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 166 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/ruoyi/safe/service/impl/SafeLineInspectionServiceImpl.java b/src/main/java/com/ruoyi/safe/service/impl/SafeLineInspectionServiceImpl.java
index d86d586..0ed6055 100644
--- a/src/main/java/com/ruoyi/safe/service/impl/SafeLineInspectionServiceImpl.java
+++ b/src/main/java/com/ruoyi/safe/service/impl/SafeLineInspectionServiceImpl.java
@@ -2,15 +2,29 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.enums.ApplicationTypeEnum;
+import com.ruoyi.basic.enums.RecordTypeEnum;
+import com.ruoyi.basic.utils.FileUtil;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.safe.dto.SafeLineInspectionExecuteDto;
 import com.ruoyi.safe.pojo.SafeLineInspection;
 import com.ruoyi.safe.mapper.SafeLineInspectionMapper;
+import com.ruoyi.safe.pojo.SafeLineInspectionHazard;
+import com.ruoyi.safe.pojo.SafeLineInspectionRecord;
+import com.ruoyi.safe.pojo.SafeHidden;
+import com.ruoyi.safe.service.SafeHiddenService;
+import com.ruoyi.safe.service.SafeLineInspectionHazardService;
+import com.ruoyi.safe.service.SafeLineInspectionRecordService;
 import com.ruoyi.safe.service.SafeLineInspectionService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.project.system.mapper.SysUserMapper;
 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.Arrays;
 import java.util.List;
 import java.util.Map;
@@ -29,14 +43,24 @@
 
     @Autowired
     private SysUserMapper sysUserMapper;
+    @Autowired
+    private SafeLineInspectionRecordService safeLineInspectionRecordService;
+    @Autowired
+    private SafeLineInspectionHazardService safeLineInspectionHazardService;
+    @Autowired
+    private SafeHiddenService safeHiddenService;
+    @Autowired
+    private FileUtil fileUtil;
 
     @Override
     public IPage<SafeLineInspection> pageSafeLineInspection(Page page, SafeLineInspection safeLineInspection) {
         IPage<SafeLineInspection> result = this.lambdaQuery()
-                .like(safeLineInspection.getInspectionCode() != null, SafeLineInspection::getInspectionCode, safeLineInspection.getInspectionCode())
-                .like(safeLineInspection.getInspectionName() != null, SafeLineInspection::getInspectionName, safeLineInspection.getInspectionName())
-                .like(safeLineInspection.getLineName() != null, SafeLineInspection::getLineName, safeLineInspection.getLineName())
-                .eq(safeLineInspection.getStatus() != null, SafeLineInspection::getStatus, safeLineInspection.getStatus())
+                .eq(safeLineInspection.getScheduleTaskId() != null, SafeLineInspection::getScheduleTaskId, safeLineInspection.getScheduleTaskId())
+                .like(StringUtils.isNotBlank(safeLineInspection.getInspectionCode()), SafeLineInspection::getInspectionCode, safeLineInspection.getInspectionCode())
+                .like(StringUtils.isNotBlank(safeLineInspection.getInspectionName()), SafeLineInspection::getInspectionName, safeLineInspection.getInspectionName())
+                .like(StringUtils.isNotBlank(safeLineInspection.getLineName()), SafeLineInspection::getLineName, safeLineInspection.getLineName())
+                .like(StringUtils.isNotBlank(safeLineInspection.getInspectionProject()), SafeLineInspection::getInspectionProject, safeLineInspection.getInspectionProject())
+                .eq(StringUtils.isNotBlank(safeLineInspection.getStatus()), SafeLineInspection::getStatus, safeLineInspection.getStatus())
                 .orderByDesc(SafeLineInspection::getCreateTime)
                 .page(page);
 
@@ -46,6 +70,144 @@
         return result;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean executeInspection(SafeLineInspectionExecuteDto executeDto) {
+        if (executeDto == null || executeDto.getInspectionId() == null) {
+            throw new IllegalArgumentException("宸℃璁板綍涓嶈兘涓虹┖");
+        }
+        SafeLineInspection inspection = this.getById(executeDto.getInspectionId());
+        if (inspection == null) {
+            throw new IllegalArgumentException("宸℃璁板綍涓嶅瓨鍦�");
+        }
+        if ("宸插畬鎴�".equals(inspection.getStatus())) {
+            throw new IllegalArgumentException("宸℃璁板綍宸插畬鎴愶紝璇峰嬁閲嶅鎵ц");
+        }
+        if (!"姝e父".equals(executeDto.getCheckResult()) && !"寮傚父".equals(executeDto.getCheckResult())) {
+            throw new IllegalArgumentException("璇烽�夋嫨宸℃缁撴灉");
+        }
+
+        LocalDateTime checkTime = executeDto.getCheckTime() == null ? LocalDateTime.now() : executeDto.getCheckTime();
+        SafeLineInspectionRecord record = buildInspectionRecord(inspection, executeDto, checkTime);
+        safeLineInspectionRecordService.save(record);
+
+        inspection.setInspectionResult(executeDto.getCheckResult());
+        inspection.setActualInspectionTime(checkTime);
+        inspection.setUpdateTime(LocalDateTime.now());
+        inspection.setUpdateUser(SecurityUtils.getUserId().intValue());
+        appendCurrentInspector(inspection);
+
+        if ("寮傚父".equals(executeDto.getCheckResult())) {
+            validateHazard(executeDto);
+            SafeHidden hidden = createSafeHidden(executeDto);
+            safeHiddenService.add(hidden);
+            fileUtil.saveStorageAttachment(
+                    ApplicationTypeEnum.IMAGE,
+                    RecordTypeEnum.SAFE_HIDDEN,
+                    hidden.getId().longValue(),
+                    executeDto.getStorageBlobDTOs()
+            );
+
+            SafeLineInspectionHazard hazard = buildLineHazard(inspection, record, hidden, executeDto);
+            safeLineInspectionHazardService.save(hazard);
+
+            inspection.setHiddenId(hidden.getId());
+            inspection.setStatus("寰呮暣鏀�");
+        } else {
+            inspection.setHiddenId(null);
+            inspection.setStatus("宸插畬鎴�");
+        }
+
+        return this.updateById(inspection);
+    }
+
+    private SafeLineInspectionRecord buildInspectionRecord(SafeLineInspection inspection,
+                                                           SafeLineInspectionExecuteDto executeDto,
+                                                           LocalDateTime checkTime) {
+        SafeLineInspectionRecord record = new SafeLineInspectionRecord();
+        record.setInspectionId(inspection.getId());
+        record.setCheckPoint(inspection.getLineName());
+        record.setCheckContent(inspection.getInspectionProject());
+        record.setCheckResult(executeDto.getCheckResult());
+        record.setCheckDesc("寮傚父".equals(executeDto.getCheckResult()) ? null : executeDto.getCheckDesc());
+        record.setCheckTime(checkTime);
+        record.setStorageBlobDTOs(executeDto.getStorageBlobDTOs());
+        return record;
+    }
+
+    private void validateHazard(SafeLineInspectionExecuteDto executeDto) {
+        if (executeDto.getStorageBlobDTOs() == null || executeDto.getStorageBlobDTOs().isEmpty()) {
+            throw new IllegalArgumentException("宸℃寮傚父鏃惰涓婁紶寮傚父鐓х墖");
+        }
+        if (StringUtils.isBlank(executeDto.getHiddenType())) {
+            throw new IllegalArgumentException("璇烽�夋嫨闅愭偅绫诲瀷");
+        }
+        if (StringUtils.isBlank(executeDto.getRiskLevel())) {
+            throw new IllegalArgumentException("璇烽�夋嫨闅愭偅椋庨櫓绛夌骇");
+        }
+        if (StringUtils.isBlank(executeDto.getHazardLocation())) {
+            throw new IllegalArgumentException("璇疯緭鍏ラ殣鎮d綅缃�");
+        }
+        if (StringUtils.isBlank(executeDto.getHazardDesc())) {
+            throw new IllegalArgumentException("璇疯緭鍏ュ紓甯告弿杩�/鏁存敼瑕佹眰");
+        }
+        if (executeDto.getRectifyUserId() == null) {
+            throw new IllegalArgumentException("璇烽�夋嫨鏁存敼璐d换浜�");
+        }
+        if (executeDto.getRectifyTime() == null) {
+            throw new IllegalArgumentException("璇烽�夋嫨鏁存敼瀹屾垚鏈熼檺");
+        }
+    }
+
+    private SafeHidden createSafeHidden(SafeLineInspectionExecuteDto executeDto) {
+        SafeHidden hidden = new SafeHidden();
+        hidden.setType(executeDto.getHiddenType());
+        hidden.setRiskLevel(executeDto.getRiskLevel());
+        hidden.setLocation(executeDto.getHazardLocation());
+        hidden.setHiddenDesc(executeDto.getHazardDesc());
+        hidden.setRectifyUserId(executeDto.getRectifyUserId());
+        hidden.setRectifyUserMobile(executeDto.getRectifyUserMobile());
+        hidden.setRectifyTime(executeDto.getRectifyTime());
+        return hidden;
+    }
+
+    private SafeLineInspectionHazard buildLineHazard(SafeLineInspection inspection,
+                                                     SafeLineInspectionRecord record,
+                                                     SafeHidden hidden,
+                                                     SafeLineInspectionExecuteDto executeDto) {
+        SafeLineInspectionHazard hazard = new SafeLineInspectionHazard();
+        hazard.setInspectionId(inspection.getId());
+        hazard.setRecordId(record.getId());
+        hazard.setSafeHiddenId(hidden.getId());
+        hazard.setHazardCode(hidden.getHiddenCode());
+        hazard.setHazardDesc(executeDto.getHazardDesc());
+        hazard.setHazardLevel(executeDto.getRiskLevel());
+        hazard.setHazardLocation(executeDto.getHazardLocation());
+        hazard.setStatus("寰呮暣鏀�");
+        hazard.setRectifyUserId(executeDto.getRectifyUserId());
+        hazard.setRectifyDeadline(executeDto.getRectifyTime());
+        return hazard;
+    }
+
+    private void appendCurrentInspector(SafeLineInspection inspection) {
+        Long currentUserId = SecurityUtils.getUserId();
+        if (currentUserId == null) {
+            return;
+        }
+        String currentUserIdStr = String.valueOf(currentUserId);
+        String inspectorId = inspection.getInspectorId();
+        if (StringUtils.isBlank(inspectorId)) {
+            inspection.setInspectorId(currentUserIdStr);
+            return;
+        }
+        boolean exists = Arrays.stream(inspectorId.split(","))
+                .map(String::trim)
+                .anyMatch(currentUserIdStr::equals);
+        if (!exists) {
+            inspection.setInspectorId(inspectorId + "," + currentUserIdStr);
+        }
+    }
+
     /**
      * 濉厖宸℃浜哄悕绉帮紙鏀寔澶氬贰妫�浜猴紝閫楀彿鍒嗛殧锛�
      */

--
Gitblit v1.9.3