package cn.iocoder.yudao.module.mes.service.pro.workorder;
|
|
import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemTechnicalFileRespVO;
|
import cn.iocoder.yudao.module.mdm.service.item.MdmItemTechnicalFileService;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.workorder.MesProWorkOrderTechnicalFileDO;
|
import cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder.MesProWorkOrderTechnicalFileMapper;
|
import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
|
import jakarta.annotation.Resource;
|
import org.springframework.stereotype.Service;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.function.Function;
|
import java.util.stream.Collectors;
|
|
@Service
|
public class MesProWorkOrderTechnicalFileService {
|
private static final String RECORD_TYPE = "mes_work_order_technical_file";
|
@Resource private MdmItemTechnicalFileService itemTechnicalFileService;
|
@Resource private MesProWorkOrderTechnicalFileMapper mapper;
|
@Resource private StorageAttachmentApi storageApi;
|
|
/** 调用方在工单事务中执行,避免清单与工单创建结果不一致。 */
|
public void snapshot(Long orderId, Long itemId) {
|
var files = itemTechnicalFileService.getTechnicalFileList(itemId);
|
for (var file : files) {
|
MesProWorkOrderTechnicalFileDO row = new MesProWorkOrderTechnicalFileDO();
|
row.setWorkOrderId(orderId);
|
row.setSourceFileId(file.getId());
|
row.setBlobId(file.getBlobId());
|
row.setVersionNo(file.getVersionNo());
|
row.setFileName(file.getFileName());
|
mapper.insert(row);
|
}
|
if (!files.isEmpty()) storageApi.bindAttachments("file", RECORD_TYPE, orderId,
|
files.stream().map(MdmItemTechnicalFileRespVO::getBlobId).distinct().toList());
|
}
|
|
public void replace(Long orderId, Long itemId) {
|
// 不调用 deleteAttachmentsByRecord:该接口会删除共享的底层文件。
|
mapper.delete(MesProWorkOrderTechnicalFileDO::getWorkOrderId, orderId);
|
snapshot(orderId, itemId);
|
}
|
|
public List<MdmItemTechnicalFileRespVO> list(Long orderId) {
|
var blobs = storageApi.listAttachments(RECORD_TYPE, orderId);
|
var byId = blobs == null ? Map.<Long, cn.iocoder.yudao.module.system.api.storage.dto.StorageBlobRespDTO>of()
|
: blobs.stream().collect(Collectors.toMap(b -> b.getId(), Function.identity(), (a, b) -> a));
|
return mapper.selectByWorkOrderId(orderId).stream().map(row -> {
|
MdmItemTechnicalFileRespVO result = new MdmItemTechnicalFileRespVO();
|
result.setId(row.getSourceFileId()); result.setBlobId(row.getBlobId());
|
result.setVersionNo(row.getVersionNo()); result.setFileName(row.getFileName());
|
var blob = byId.get(row.getBlobId());
|
if (blob != null) { result.setPreviewURL(blob.getPreviewURL()); result.setDownloadURL(blob.getDownloadURL()); }
|
return result;
|
}).toList();
|
}
|
}
|