package com.ruoyi.safe.specialequipment.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.dto.StorageBlobVO; 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.safe.specialequipment.mapper.SpecialEquipmentLedgerMapper; import com.ruoyi.safe.specialequipment.mapper.SpecialEquipmentRecordMapper; import com.ruoyi.safe.specialequipment.pojo.SpecialEquipmentLedger; import com.ruoyi.safe.specialequipment.pojo.SpecialEquipmentRecord; import com.ruoyi.safe.specialequipment.service.SpecialEquipmentRecordService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.util.Collections; import java.util.List; @Service @RequiredArgsConstructor public class SpecialEquipmentRecordServiceImpl extends ServiceImpl implements SpecialEquipmentRecordService { private final SpecialEquipmentRecordMapper mapper; private final SpecialEquipmentLedgerMapper ledgerMapper; private final FileUtil fileUtil; public IPage listPage(Page page, SpecialEquipmentRecord req) { IPage result = mapper.listPage(page, req); fillAttachments(result.getRecords()); return result; } public boolean save(SpecialEquipmentRecord entity) { entity.setTenantId(SecurityUtils.getLoginUser().getTenantId()); entity.setCreateUser(SecurityUtils.getLoginUser().getUserId()); entity.setCreateTime(LocalDateTime.now()); boolean saved = super.save(entity); syncAttachments(saved, entity); syncLedgerDate(entity); return saved; } @Override public boolean updateById(SpecialEquipmentRecord entity) { boolean updated = super.updateById(entity); syncAttachments(updated, entity); syncLedgerDate(entity); return updated; } private void syncLedgerDate(SpecialEquipmentRecord entity) { if (entity == null || entity.getEquipmentId() == null || entity.getRecordType() == null) { return; } SpecialEquipmentLedger ledger = ledgerMapper.selectById(entity.getEquipmentId()); if (ledger == null) { return; } if (entity.getRecordType() == 1) { ledger.setLatestInspectionDate(entity.getRecordDate()); ledger.setNextInspectionDate(entity.getNextDueDate()); } else if (entity.getRecordType() == 2) { ledger.setLatestMaintenanceDate(entity.getRecordDate()); ledger.setNextMaintenanceDate(entity.getNextDueDate()); } ledgerMapper.updateById(ledger); } private void syncAttachments(boolean success, SpecialEquipmentRecord entity) { if (!success || entity == null || entity.getId() == null || entity.getStorageBlobDTOs() == null) { return; } fileUtil.saveStorageAttachment( ApplicationTypeEnum.FILE, RecordTypeEnum.SPECIAL_EQUIPMENT_RECORD, entity.getId(), entity.getStorageBlobDTOs() ); } private void fillAttachments(List records) { if (records == null || records.isEmpty()) { return; } records.forEach(record -> { if (record.getId() == null) { return; } List attachments = fileUtil.getStorageBlobVOsByRecordTypeAndRecordId( RecordTypeEnum.SPECIAL_EQUIPMENT_RECORD, record.getId() ); record.setStorageBlobVOs(attachments == null ? Collections.emptyList() : attachments); }); } }