From 4f55d3cb4bc644e4534106336f2047af1a4db5df Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 29 五月 2026 18:09:46 +0800
Subject: [PATCH] feat(config): 添加新环境配置并扩展设备台账功能

---
 src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java |  480 +++++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 366 insertions(+), 114 deletions(-)

diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
index 54dbd90..f21e386 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
@@ -6,39 +6,36 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.basic.dto.StorageBlobDTO;
-import com.ruoyi.basic.mapper.StorageAttachmentMapper;
-import com.ruoyi.basic.mapper.StorageBlobMapper;
-import com.ruoyi.basic.pojo.StorageAttachment;
-import com.ruoyi.basic.pojo.StorageBlob;
-import com.ruoyi.basic.service.StorageAttachmentService;
-import com.ruoyi.common.enums.FileNameType;
-import com.ruoyi.common.utils.MinioUtils;
+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.common.utils.StringUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.device.mapper.DeviceAreaMapper;
+import com.ruoyi.device.mapper.DeviceLedgerMapper;
+import com.ruoyi.device.pojo.DeviceArea;
+import com.ruoyi.device.mapper.DeviceRepairMapper;
+import com.ruoyi.device.pojo.DeviceLedger;
+import com.ruoyi.device.pojo.DeviceRepair;
 import com.ruoyi.inspectiontask.dto.InspectionTaskDto;
 import com.ruoyi.inspectiontask.mapper.InspectionTaskMapper;
 import com.ruoyi.inspectiontask.pojo.InspectionTask;
 import com.ruoyi.inspectiontask.service.InspectionTaskService;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysUserMapper;
-import com.ruoyi.sales.mapper.CommonFileMapper;
-import com.ruoyi.sales.pojo.CommonFile;
-import com.ruoyi.sales.service.impl.CommonFileServiceImpl;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.io.IOException;
 import java.time.format.DateTimeFormatter;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Date;
 import java.util.*;
-import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Function;
 import java.util.stream.Collectors;
-
-import static com.ruoyi.common.constant.StorageAttachmentConstants.StorageAttachmentFile;
-import static com.ruoyi.common.enums.StorageAttachmentRecordType.InspectionTasks;
 
 /**
  * @author :yys
@@ -46,51 +43,35 @@
  */
 @Service
 @Slf4j
+@RequiredArgsConstructor
 public class InspectionTaskServiceImpl extends ServiceImpl<InspectionTaskMapper, InspectionTask> implements InspectionTaskService {
 
 
-    @Autowired
-    private InspectionTaskMapper inspectionTaskMapper;
+    private final InspectionTaskMapper inspectionTaskMapper;
 
-    @Autowired
-    private StorageAttachmentService storageAttachmentService;
+    private final SysUserMapper sysUserMapper;
 
-    @Autowired
-    private StorageBlobMapper storageBlobMapper;
+    private final FileUtil fileUtil;
 
-    @Autowired
-    private StorageAttachmentMapper storageAttachmentMapper;
+    private final DeviceRepairMapper deviceRepairMapper;
 
-    @Autowired
-    private MinioUtils minioUtils;
+    private final DeviceLedgerMapper deviceLedgerMapper;
 
-    @Autowired
-    private SysUserMapper sysUserMapper;
+    private final DeviceAreaMapper deviceAreaMapper;
 
-    @Autowired
-    private CommonFileMapper commonFileMapper;
-
-    @Autowired
-    private CommonFileServiceImpl commonFileService;
+    private static final String INSPECTION_RESULT_ABNORMAL = "0";
+    private static final String INSPECTION_RESULT_NORMAL = "1";
+    private static final int REPAIR_STATUS_PENDING = 0;
 
     @Override
     public IPage<InspectionTaskDto> selectInspectionTaskList(Page<InspectionTask> page, InspectionTaskDto inspectionTaskDto) {
-        LambdaQueryWrapper<InspectionTask> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.orderByDesc(InspectionTask::getCreateTime);
-        if (StringUtils.isNotBlank(inspectionTaskDto.getTaskName())) {
-            queryWrapper.like(InspectionTask::getTaskName, inspectionTaskDto.getTaskName());
-        }
-        IPage<InspectionTask> entityPage = inspectionTaskMapper.selectPage(page, queryWrapper);
+        IPage<InspectionTask> entityPage = inspectionTaskMapper.selectInspectionTaskAggregatePage(page, inspectionTaskDto);
 
-        //  鏃犳暟鎹彁鍓嶈繑鍥�
         if (CollectionUtils.isEmpty(entityPage.getRecords())) {
             return new Page<>(entityPage.getCurrent(), entityPage.getSize(), entityPage.getTotal());
         }
-        // 鑾峰彇id闆嗗悎
-        List<Long> ids = entityPage.getRecords().stream().map(InspectionTask::getId).collect(Collectors.toList());
-        //鐧昏浜篿ds
+
         List<Long> registrantIds = entityPage.getRecords().stream().map(InspectionTask::getRegistrantId).collect(Collectors.toList());
-        // 鎵归噺鏌ヨ鐧昏浜�
         Map<Long, SysUser> sysUserMap;
         if (!registrantIds.isEmpty()) {
             List<SysUser> sysUsers = sysUserMapper.selectUsersByIds(registrantIds);
@@ -98,12 +79,9 @@
         } else {
             sysUserMap = new HashMap<>();
         }
-        //宸℃浜篿ds
-        List<String> inspectorIds = entityPage.getRecords().stream().map(InspectionTask::getInspectorId).collect(Collectors.toList());
 
-        //鑾峰彇鎵�鏈変笉閲嶅鐨勭敤鎴稩D
         Set<Long> allUserIds = entityPage.getRecords().stream()
-                .map(InspectionTask::getInspectorId) // 鑾峰彇"2,3"杩欐牱鐨勫瓧绗︿覆
+                .map(InspectionTask::getInspectorId)
                 .filter(StringUtils::isNotBlank)
                 .flatMap(idsStr -> Arrays.stream(idsStr.split(",")))
                 .map(idStr -> {
@@ -116,7 +94,6 @@
                 .filter(Objects::nonNull)
                 .collect(Collectors.toSet());
 
-        // 浣跨敤SQL鎵归噺鏌ヨ鐢ㄦ埛淇℃伅
         Map<Long, String> userIdToNameMap = allUserIds.isEmpty()
                 ? Collections.emptyMap()
                 : sysUserMapper.selectUsersByIds(new ArrayList<>(allUserIds))
@@ -126,95 +103,369 @@
                         SysUser::getNickName,
                         (existing, replacement) -> existing));
 
-        //澶勭悊闄勪欢
-        List<CommonFile> commonFiles = commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>()
-                .in(CommonFile::getCommonId, ids)
-                .in(CommonFile::getType, Arrays.asList(FileNameType.INSPECTION.getValue(), FileNameType.INSPECTION_PRODUCTION_BEFORE.getValue(), FileNameType.INSPECTION_PRODUCTION_AFTER.getValue())));
-        if(commonFiles == null){
-            commonFiles = new ArrayList<>();
+        Set<Long> areaIds = entityPage.getRecords().stream()
+                .map(InspectionTask::getAreaId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
+        Map<Long, String> areaNameMap = new HashMap<>();
+        if (!areaIds.isEmpty()) {
+            List<DeviceArea> areas = deviceAreaMapper.selectBatchIds(new ArrayList<>(areaIds));
+            areas.forEach(area -> areaNameMap.put(area.getId(), area.getAreaName()));
         }
-        AtomicReference<List<CommonFile>> finalCommonFiles = new AtomicReference<>(commonFiles);
 
-        List<InspectionTaskDto> dtoList = entityPage.getRecords().stream().map(inspectionTask -> {
-            InspectionTaskDto dto = new InspectionTaskDto();
-            BeanUtils.copyProperties(inspectionTask, dto);  // 澶嶅埗涓诲璞″睘鎬�
+        List<InspectionTaskDto> dtoList = buildInspectionTaskDtoList(
+                entityPage.getRecords(),
+                sysUserMap,
+                userIdToNameMap,
+                areaNameMap
+        );
 
-            // 璁剧疆鐧昏浜�
-            SysUser sysUser = sysUserMap.get(inspectionTask.getRegistrantId());
-            if (sysUser != null) {
-                dto.setRegistrant(sysUser.getNickName());
-            }
-            // 澶勭悊宸℃浜哄悕绉�
-            if (StringUtils.isNotBlank(inspectionTask.getInspectorId())) {
-                String inspectorNames = Arrays.stream(inspectionTask.getInspectorId().split(","))
-                        .map(String::trim)
-                        .map(idStr -> {
-                            try {
-                                Long userId = Long.parseLong(idStr);
-                                return userIdToNameMap.getOrDefault(userId, "鏈煡鐢ㄦ埛(" + idStr + ")");
-                            } catch (NumberFormatException e) {
-                                return "鏃犳晥ID(" + idStr + ")";
-                            }
-                        })
-                        .collect(Collectors.joining(","));
-                dto.setInspector(inspectorNames);
-            }
-
-            dto.setDateStr(inspectionTask.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
-            finalCommonFiles.set(finalCommonFiles.get().stream().filter(commonFile -> commonFile.getCommonId().equals(inspectionTask.getId())).collect(Collectors.toList()));
-            // 鍒濆鍖栦笁涓檮浠跺垪琛�
-            dto.setCommonFileList(finalCommonFiles.get().stream().filter(commonFile -> commonFile.getType().equals(FileNameType.INSPECTION.getValue())).collect(Collectors.toList()));
-            dto.setCommonFileListAfter(finalCommonFiles.get().stream().filter(commonFile -> commonFile.getType().equals(FileNameType.INSPECTION_PRODUCTION_AFTER.getValue())).collect(Collectors.toList()));
-            dto.setCommonFileListBefore(finalCommonFiles.get().stream().filter(commonFile -> commonFile.getType().equals(FileNameType.INSPECTION_PRODUCTION_BEFORE.getValue())).collect(Collectors.toList()));
-
-
-            return dto;
-        }).collect(Collectors.toList());
-
-        // 7. 鏋勫缓杩斿洖鍒嗛〉瀵硅薄
         IPage<InspectionTaskDto> resultPage = new Page<>();
         BeanUtils.copyProperties(entityPage, resultPage);
         resultPage.setRecords(dtoList);
         return resultPage;
     }
 
-    // 鎻愬彇鍒涘缓BlobDTO鐨勫叕鍏辨柟娉�
-    private StorageBlobDTO createBlobDto(StorageBlob blob) {
-        StorageBlobDTO dto = new StorageBlobDTO();
-        BeanUtils.copyProperties(blob, dto);
+    private List<InspectionTaskDto> buildInspectionTaskDtoList(List<InspectionTask> records,
+                                                               Map<Long, SysUser> sysUserMap,
+                                                               Map<Long, String> userIdToNameMap,
+                                                               Map<Long, String> areaNameMap) {
+        if (CollectionUtils.isEmpty(records)) {
+            return Collections.emptyList();
+        }
+        return records.stream()
+                .map(record -> buildInspectionTaskDto(record, sysUserMap, userIdToNameMap, areaNameMap))
+                .collect(Collectors.toList());
+    }
 
-        // 璁剧疆URL
-        dto.setUrl(minioUtils.getPreviewUrls(
-                blob.getBucketFilename(),
-                blob.getBucketName(),
-                true
-        ));
+    private InspectionTaskDto buildInspectionTaskDto(InspectionTask baseTask,
+                                                     Map<Long, SysUser> sysUserMap,
+                                                     Map<Long, String> userIdToNameMap,
+                                                     Map<Long, String> areaNameMap) {
+        InspectionTaskDto dto = new InspectionTaskDto();
+        BeanUtils.copyProperties(baseTask, dto);
 
-        // 璁剧疆涓嬭浇URL
-        dto.setDownloadUrl(minioUtils.getDownloadUrls(
-                blob.getBucketFilename(),
-                blob.getBucketName(),
-                blob.getOriginalFilename(),
-                true
-        ));
+        SysUser sysUser = sysUserMap.get(baseTask.getRegistrantId());
+        if (sysUser != null) {
+            dto.setRegistrant(sysUser.getNickName());
+        }
+        if (StringUtils.isNotBlank(baseTask.getInspectorId())) {
+            String inspectorNames = Arrays.stream(baseTask.getInspectorId().split(","))
+                    .map(String::trim)
+                    .map(idStr -> {
+                        try {
+                            Long userId = Long.parseLong(idStr);
+                            return userIdToNameMap.getOrDefault(userId, "鏈煡鐢ㄦ埛(" + idStr + ")");
+                        } catch (NumberFormatException e) {
+                            return "鏃犳晥ID(" + idStr + ")";
+                        }
+                    })
+                    .collect(Collectors.joining(","));
+            dto.setInspector(inspectorNames);
+        }
+
+        if (baseTask.getCreateTime() != null) {
+            dto.setDateStr(baseTask.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+        }
+        if (baseTask.getAreaId() != null) {
+            dto.setAreaName(areaNameMap.getOrDefault(baseTask.getAreaId(), ""));
+        }
+        dto.setCommonFileListVO(fileUtil.getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum.FILE, RecordTypeEnum.INSPECTION_TASK, baseTask.getId()));
+        dto.setCommonFileListAfterVO(fileUtil.getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum.AFTER_FILE, RecordTypeEnum.INSPECTION_TASK, baseTask.getId()));
+        dto.setCommonFileListBeforeVO(fileUtil.getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum.BEFORE_FILE, RecordTypeEnum.INSPECTION_TASK, baseTask.getId()));
         return dto;
     }
 
     @Override
+    public IPage<InspectionTaskDto> selectInspectionTaskRecordList(Page<InspectionTask> page, Long timingId) {
+        InspectionTaskDto queryDto = new InspectionTaskDto();
+        queryDto.setTimingId(timingId);
+        queryDto.setCreateTimeStart(LocalDate.now().atStartOfDay());
+        queryDto.setCreateTimeEnd(queryDto.getCreateTimeStart().plusDays(1));
+
+        IPage<InspectionTask> entityPage = inspectionTaskMapper.selectInspectionTaskAggregatePage(page, queryDto);
+        if (CollectionUtils.isEmpty(entityPage.getRecords())) {
+            return new Page<>(entityPage.getCurrent(), entityPage.getSize(), entityPage.getTotal());
+        }
+
+        List<Long> registrantIds = entityPage.getRecords().stream().map(InspectionTask::getRegistrantId).collect(Collectors.toList());
+        Map<Long, SysUser> sysUserMap;
+        if (!registrantIds.isEmpty()) {
+            List<SysUser> sysUsers = sysUserMapper.selectUsersByIds(registrantIds);
+            sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
+        } else {
+            sysUserMap = new HashMap<>();
+        }
+
+        Set<Long> allUserIds = entityPage.getRecords().stream()
+                .map(InspectionTask::getInspectorId)
+                .filter(StringUtils::isNotBlank)
+                .flatMap(idsStr -> Arrays.stream(idsStr.split(",")))
+                .map(idStr -> {
+                    try {
+                        return Long.parseLong(idStr.trim());
+                    } catch (NumberFormatException e) {
+                        return null;
+                    }
+                })
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
+
+        Map<Long, String> userIdToNameMap = allUserIds.isEmpty()
+                ? Collections.emptyMap()
+                : sysUserMapper.selectUsersByIds(new ArrayList<>(allUserIds))
+                .stream()
+                .collect(Collectors.toMap(
+                        SysUser::getUserId,
+                        SysUser::getNickName,
+                        (existing, replacement) -> existing));
+
+        Set<Long> areaIds = entityPage.getRecords().stream()
+                .map(InspectionTask::getAreaId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
+        Map<Long, String> areaNameMap = new HashMap<>();
+        if (!areaIds.isEmpty()) {
+            List<DeviceArea> areas = deviceAreaMapper.selectBatchIds(new ArrayList<>(areaIds));
+            areas.forEach(area -> areaNameMap.put(area.getId(), area.getAreaName()));
+        }
+
+        List<InspectionTaskDto> dtoList = entityPage.getRecords().stream()
+                .map(task -> buildInspectionTaskDto(task, sysUserMap, userIdToNameMap, areaNameMap))
+                .collect(Collectors.toList());
+
+        IPage<InspectionTaskDto> resultPage = new Page<>();
+        BeanUtils.copyProperties(entityPage, resultPage);
+        resultPage.setRecords(dtoList);
+        return resultPage;
+    }
+
+    @Override
     @Transactional(rollbackFor = Exception.class)
-    public int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto) throws IOException {
+    public int addOrEditInspectionTask(InspectionTaskDto inspectionTaskDto) {
+        InspectionTask oldInspectionTask = null;
+        if (Objects.nonNull(inspectionTaskDto.getId())) {
+            oldInspectionTask = inspectionTaskMapper.selectById(inspectionTaskDto.getId());
+            if (oldInspectionTask == null) {
+                throw new IllegalArgumentException("宸℃浠诲姟涓嶅瓨鍦�");
+            }
+        }
+        validateInspectionInput(inspectionTaskDto, oldInspectionTask);
+
         InspectionTask inspectionTask = new InspectionTask();
         BeanUtils.copyProperties(inspectionTaskDto, inspectionTask);
         inspectionTask.setRegistrantId(SecurityUtils.getLoginUser().getUserId());
         inspectionTask.setRegistrant(SecurityUtils.getLoginUser().getUsername());
+        inspectionTask.setInspectionStatus(2);
+        fillAcceptanceInfo(inspectionTask, oldInspectionTask);
         int i;
         if (Objects.isNull(inspectionTaskDto.getId())) {
             i = inspectionTaskMapper.insert(inspectionTask);
         } else {
             i = inspectionTaskMapper.updateById(inspectionTask);
         }
-        commonFileService.migrateTempFilesToFormal(inspectionTask.getId(),inspectionTaskDto.getTempFileIds());
+        if (i <= 0) {
+            return i;
+        }
+        Long linkedRepairId = syncRepairOrderIfAbnormal(inspectionTask, oldInspectionTask);
+        if (linkedRepairId != null && !Objects.equals(linkedRepairId, inspectionTask.getDeviceRepairId())) {
+            InspectionTask relationUpdate = new InspectionTask();
+            relationUpdate.setId(inspectionTask.getId());
+            relationUpdate.setDeviceRepairId(linkedRepairId);
+            inspectionTaskMapper.updateById(relationUpdate);
+            inspectionTask.setDeviceRepairId(linkedRepairId);
+        }
+        // 淇濆瓨鏂囦欢锛堝瓧娈典笉浼犲垯淇濈暀鍘嗗彶锛�
+        saveInspectionAttachments(inspectionTask.getId(), inspectionTaskDto);
+
         return i;
+    }
+
+    private void validateInspectionInput(InspectionTaskDto inspectionTaskDto, InspectionTask oldInspectionTask) {
+        String inspectionResult = inspectionTaskDto.getInspectionResult();
+        if (StringUtils.isBlank(inspectionResult) && oldInspectionTask != null) {
+            inspectionResult = oldInspectionTask.getInspectionResult();
+        }
+        if (StringUtils.isBlank(inspectionResult)) {
+            throw new IllegalArgumentException("璇烽�夋嫨宸℃缁撴灉");
+        }
+        if (!INSPECTION_RESULT_ABNORMAL.equals(inspectionResult) && !INSPECTION_RESULT_NORMAL.equals(inspectionResult)) {
+            throw new IllegalArgumentException("宸℃缁撴灉浠呮敮鎸侊細0-寮傚父锛�1-姝e父");
+        }
+        inspectionTaskDto.setInspectionResult(inspectionResult);
+
+        if (!INSPECTION_RESULT_ABNORMAL.equals(inspectionResult)) {
+            return;
+        }
+
+        String abnormalDescription = inspectionTaskDto.getAbnormalDescription();
+        if (StringUtils.isBlank(abnormalDescription) && oldInspectionTask != null) {
+            abnormalDescription = oldInspectionTask.getAbnormalDescription();
+        }
+        if (StringUtils.isBlank(abnormalDescription)) {
+            throw new IllegalArgumentException("宸℃缁撴灉涓哄紓甯告椂锛屽紓甯告弿杩颁笉鑳戒负绌�");
+        }
+        inspectionTaskDto.setAbnormalDescription(abnormalDescription);
+
+        if (!hasAnyInspectionPhotoAfterSave(inspectionTaskDto, oldInspectionTask)) {
+            throw new IllegalArgumentException("宸℃缁撴灉涓哄紓甯告椂锛屽繀椤讳笂浼犺嚦灏戜竴寮犵収鐗�");
+        }
+    }
+
+    private boolean hasAnyInspectionPhotoAfterSave(InspectionTaskDto inspectionTaskDto, InspectionTask oldInspectionTask) {
+        Long recordId = oldInspectionTask == null ? null : oldInspectionTask.getId();
+        return hasApplicationPhotoAfterSave(inspectionTaskDto.getCommonFileListDTO(), ApplicationTypeEnum.FILE, recordId)
+                || hasApplicationPhotoAfterSave(inspectionTaskDto.getCommonFileListAfterDTO(), ApplicationTypeEnum.AFTER_FILE, recordId)
+                || hasApplicationPhotoAfterSave(inspectionTaskDto.getCommonFileListBeforeDTO(), ApplicationTypeEnum.BEFORE_FILE, recordId);
+    }
+
+    private boolean hasApplicationPhotoAfterSave(List<StorageBlobDTO> requestPhotos, ApplicationTypeEnum applicationType, Long recordId) {
+        if (requestPhotos != null) {
+            return !requestPhotos.isEmpty();
+        }
+        if (recordId == null) {
+            return false;
+        }
+        return CollectionUtils.isNotEmpty(fileUtil.getStorageAttachmentsByApplicationAndRecordTypeAndRecordId(applicationType, RecordTypeEnum.INSPECTION_TASK, recordId));
+    }
+
+    private void fillAcceptanceInfo(InspectionTask inspectionTask, InspectionTask oldInspectionTask) {
+        Long acceptanceUserId = inspectionTask.getAcceptanceUserId();
+        if (acceptanceUserId == null && oldInspectionTask != null) {
+            acceptanceUserId = oldInspectionTask.getAcceptanceUserId();
+        }
+        if (acceptanceUserId != null) {
+            inspectionTask.setAcceptanceUserId(acceptanceUserId);
+        }
+
+        String acceptanceName = inspectionTask.getAcceptanceName();
+        if (StringUtils.isBlank(acceptanceName) && acceptanceUserId != null) {
+            SysUser acceptanceUser = sysUserMapper.selectUserById(acceptanceUserId);
+            if (acceptanceUser != null) {
+                acceptanceName = acceptanceUser.getNickName();
+            }
+        }
+        if (StringUtils.isBlank(acceptanceName) && oldInspectionTask != null) {
+            acceptanceName = oldInspectionTask.getAcceptanceName();
+        }
+        inspectionTask.setAcceptanceName(acceptanceName);
+    }
+
+    private Long syncRepairOrderIfAbnormal(InspectionTask inspectionTask, InspectionTask oldInspectionTask) {
+        if (!INSPECTION_RESULT_ABNORMAL.equals(inspectionTask.getInspectionResult())) {
+            return inspectionTask.getDeviceRepairId();
+        }
+        Long linkedRepairId = inspectionTask.getDeviceRepairId();
+        if (linkedRepairId == null && oldInspectionTask != null) {
+            linkedRepairId = oldInspectionTask.getDeviceRepairId();
+        }
+
+        if (linkedRepairId != null) {
+            DeviceRepair updateRepair = new DeviceRepair();
+            updateRepair.setId(linkedRepairId);
+            updateRepair.setRemark(inspectionTask.getAbnormalDescription());
+            deviceRepairMapper.updateById(updateRepair);
+            return linkedRepairId;
+        }
+
+        DeviceRepair deviceRepair = buildDeviceRepair(inspectionTask, oldInspectionTask);
+        deviceRepairMapper.insert(deviceRepair);
+        return deviceRepair.getId();
+    }
+
+    private DeviceRepair buildDeviceRepair(InspectionTask inspectionTask, InspectionTask oldInspectionTask) {
+        DeviceRepair deviceRepair = new DeviceRepair();
+        Long deviceLedgerId = resolveDeviceLedgerId(inspectionTask, oldInspectionTask);
+        DeviceLedger deviceLedger = resolveDeviceLedger(deviceLedgerId);
+        deviceRepair.setDeviceLedgerId(deviceLedgerId);
+        deviceRepair.setDeviceName(resolveDeviceName(inspectionTask, oldInspectionTask, deviceLedger));
+        deviceRepair.setDeviceModel(deviceLedger == null ? null : deviceLedger.getDeviceModel());
+        deviceRepair.setRepairName(resolveRepairReporter(inspectionTask, oldInspectionTask));
+        deviceRepair.setRepairTime(new Date());
+        deviceRepair.setRemark(inspectionTask.getAbnormalDescription());
+        deviceRepair.setMachineryCategory(deviceLedger == null ? null : deviceLedger.getType());
+        deviceRepair.setStatus(REPAIR_STATUS_PENDING);
+        return deviceRepair;
+    }
+
+    private Long resolveDeviceLedgerId(InspectionTask inspectionTask, InspectionTask oldInspectionTask) {
+        Integer taskId = inspectionTask.getTaskId();
+        if (taskId == null && oldInspectionTask != null) {
+            taskId = oldInspectionTask.getTaskId();
+        }
+        if (taskId == null || taskId <= 0) {
+            return null;
+        }
+        return taskId.longValue();
+    }
+
+    private DeviceLedger resolveDeviceLedger(Long deviceLedgerId) {
+        if (deviceLedgerId == null) {
+            return null;
+        }
+        return deviceLedgerMapper.selectById(deviceLedgerId);
+    }
+
+    private String resolveDeviceName(InspectionTask inspectionTask, InspectionTask oldInspectionTask, DeviceLedger deviceLedger) {
+        String taskName = inspectionTask.getTaskName();
+        if (StringUtils.isBlank(taskName) && oldInspectionTask != null) {
+            taskName = oldInspectionTask.getTaskName();
+        }
+        if (StringUtils.isNotBlank(taskName)) {
+            return taskName;
+        }
+        return deviceLedger == null ? null : deviceLedger.getDeviceName();
+    }
+
+    private String resolveRepairReporter(InspectionTask inspectionTask, InspectionTask oldInspectionTask) {
+        String reporter = inspectionTask.getInspector();
+        if (StringUtils.isBlank(reporter) && oldInspectionTask != null) {
+            reporter = oldInspectionTask.getInspector();
+        }
+        if (StringUtils.isNotBlank(reporter)) {
+            return reporter;
+        }
+        String inspectorNameByUserId = resolveInspectorNameByUserId(inspectionTask.getInspectorId());
+        if (StringUtils.isBlank(inspectorNameByUserId) && oldInspectionTask != null) {
+            inspectorNameByUserId = resolveInspectorNameByUserId(oldInspectionTask.getInspectorId());
+        }
+        if (StringUtils.isNotBlank(inspectorNameByUserId)) {
+            return inspectorNameByUserId;
+        }
+        try {
+            return SecurityUtils.getUsername();
+        } catch (Exception ignored) {
+            return "system";
+        }
+    }
+
+    private String resolveInspectorNameByUserId(String inspectorIds) {
+        if (StringUtils.isBlank(inspectorIds)) {
+            return null;
+        }
+        String firstInspectorId = Arrays.stream(inspectorIds.split(","))
+                .map(String::trim)
+                .filter(StringUtils::isNotBlank)
+                .findFirst()
+                .orElse(null);
+        if (!StringUtils.isNumeric(firstInspectorId)) {
+            return null;
+        }
+        SysUser sysUser = sysUserMapper.selectUserById(Long.parseLong(firstInspectorId));
+        return sysUser == null ? null : sysUser.getNickName();
+    }
+
+    private void saveInspectionAttachments(Long inspectionTaskId, InspectionTaskDto inspectionTaskDto) {
+        saveAttachmentIfPresent(inspectionTaskId, ApplicationTypeEnum.FILE, inspectionTaskDto.getCommonFileListDTO());
+        saveAttachmentIfPresent(inspectionTaskId, ApplicationTypeEnum.AFTER_FILE, inspectionTaskDto.getCommonFileListAfterDTO());
+        saveAttachmentIfPresent(inspectionTaskId, ApplicationTypeEnum.BEFORE_FILE, inspectionTaskDto.getCommonFileListBeforeDTO());
+    }
+
+    private void saveAttachmentIfPresent(Long inspectionTaskId, ApplicationTypeEnum applicationTypeEnum, List<StorageBlobDTO> storageBlobDTOS) {
+        if (storageBlobDTOS == null) {
+            return;
+        }
+        fileUtil.saveStorageAttachment(applicationTypeEnum, RecordTypeEnum.INSPECTION_TASK, inspectionTaskId, storageBlobDTOS);
     }
 
     @Override
@@ -224,9 +475,10 @@
         if (ids == null || ids.length == 0) {
             return 0;
         }
-        commonFileService.deleteByBusinessIds(Arrays.asList(ids),FileNameType.INSPECTION.getValue());
-        commonFileService.deleteByBusinessIds(Arrays.asList(ids),FileNameType.INSPECTION_PRODUCTION_BEFORE.getValue());
-        commonFileService.deleteByBusinessIds(Arrays.asList(ids),FileNameType.INSPECTION_PRODUCTION_AFTER.getValue());
+        // 鍒犻櫎鏂囦欢
+        fileUtil.deleteStorageAttachmentsByApplicationAndRecordTypeAndRecordIds(ApplicationTypeEnum.FILE, RecordTypeEnum.INSPECTION_TASK, Arrays.asList(ids));
+        fileUtil.deleteStorageAttachmentsByApplicationAndRecordTypeAndRecordIds(ApplicationTypeEnum.AFTER_FILE, RecordTypeEnum.INSPECTION_TASK, Arrays.asList(ids));
+        fileUtil.deleteStorageAttachmentsByApplicationAndRecordTypeAndRecordIds(ApplicationTypeEnum.BEFORE_FILE, RecordTypeEnum.INSPECTION_TASK, Arrays.asList(ids));
         return inspectionTaskMapper.deleteBatchIds(Arrays.asList(ids));
     }
 

--
Gitblit v1.9.3