| | |
| | | package org.jeecg.modules.dnc.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import liquibase.pro.packaged.S; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.jeecg.modules.dnc.constant.DocAttributionTypeEnum; |
| | | import org.jeecg.modules.dnc.dto.ComponentHierarchy; |
| | | import org.jeecg.modules.dnc.dto.TransferPackage; |
| | | import org.jeecg.modules.dnc.entity.*; |
| | | import org.jeecg.modules.dnc.exception.ExceptionCast; |
| | | import org.jeecg.modules.dnc.mapper.DocRelativeMapper; |
| | | import org.jeecg.modules.dnc.response.ActivitiCode; |
| | | import org.jeecg.modules.dnc.response.DocumentCode; |
| | | import org.jeecg.modules.dnc.service.IDocClassificationService; |
| | | import org.jeecg.modules.dnc.service.IDocFileService; |
| | | import org.jeecg.modules.dnc.service.IDocInfoService; |
| | | import org.jeecg.modules.dnc.service.IDocRelativeService; |
| | | import org.jeecg.modules.dnc.utils.CompressionUtils; |
| | | import org.jeecg.modules.dnc.utils.JsonUtils; |
| | | import org.jeecg.modules.dnc.utils.file.FileUtilS; |
| | | import org.jeecg.modules.dncFlow.service.IAssignFileStreamService; |
| | | import org.jeecg.modules.mdc.entity.MdcEquipment; |
| | | import org.jeecg.modules.mdc.mapper.MdcEquipmentMapper; |
| | | import org.jeecg.modules.system.service.IMdcProductionService; |
| | |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.io.File; |
| | | import java.io.IOException; |
| | | import java.nio.charset.StandardCharsets; |
| | |
| | | import java.nio.file.StandardCopyOption; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | |
| | | @Service |
| | | public class FileFerryService { |
| | | |
| | | private final DataPackageService dataPackageService; |
| | | private final SecurityService securityService; |
| | | |
| | | private static final Logger logger = LoggerFactory.getLogger(FileFerryService.class); |
| | | |
| | |
| | | @Value("${fileHomePath}") |
| | | private String fileHomePath; |
| | | |
| | | @Autowired |
| | | @Value("${jeecg.path.upload}") |
| | | private String upLoadPath; |
| | | |
| | | @Resource |
| | | private MdcEquipmentMapper mdcEquipmentMapper; |
| | | |
| | | @Autowired |
| | | private IMdcProductionService mdcProductionService; |
| | | |
| | | @Autowired |
| | | private IDocInfoService docInfoService; |
| | | |
| | | @Autowired |
| | | private IDocClassificationService classificationService; |
| | | |
| | | @Autowired |
| | | private IDocRelativeService docRelativeService; |
| | | |
| | | @Autowired |
| | | private IDocInfoService docInfoService; |
| | | |
| | | @Autowired |
| | | public FileFerryService(DataPackageService dataPackageService, SecurityService securityService) { |
| | | this.dataPackageService = dataPackageService; |
| | | this.securityService = securityService; |
| | | } |
| | | private DataPackageService dataPackageService; |
| | | |
| | | public String exportData(TransferPackage.DataType type, String id,String fileName) { |
| | | // 1. 获取封装数据 |
| | |
| | | long number = Long.parseLong(numericPart); |
| | | number--; // 获取前一个序列号 |
| | | |
| | | // 保持相同位数格式 |
| | | String newNumeric = String.format("%0" + numericPart.length() + "d", number); |
| | | String ncFileName = prefix + newNumeric + "_" + equipmentId+".NC"; |
| | | String ncFilePath = path.getParent().resolve(ncFileName).toString(); |
| | | |
| | | // 6. 获取文件复制目标路径 |
| | | DocRelative docRelative=pkg.getDocRelative(); |
| | | DocFile docFile = pkg.getTraceChain().getDocFile(); |
| | | DocInfo docInfo = pkg.getTraceChain().getDocInfo(); |
| | | if (docFile == null) { |
| | | throw new IllegalStateException("传输包中缺少文档文件信息"); |
| | | } |
| | | |
| | | // 保持相同位数格式 |
| | | String newNumeric = String.format("%0" + numericPart.length() + "d", number); |
| | | String ncFileName = ""; |
| | | if (Objects.equals(docRelative.getAttributionType(), DocAttributionTypeEnum.PROCESS.getCode()) || |
| | | Objects.equals(docRelative.getAttributionType(), DocAttributionTypeEnum.WORKSITE.getCode())) { |
| | | //NC文件的拷贝 |
| | | ncFileName = prefix + newNumeric + "_" + equipmentId+".NC"; |
| | | }else { |
| | | //其他文档的拷贝 |
| | | ncFileName = prefix + newNumeric + "_" + equipmentId+"."+docFile.getFileSuffix(); |
| | | docInfo.setDocDispatchStatus(3); |
| | | pkg.getTraceChain().setDocInfo(docInfo); |
| | | } |
| | | String ncFilePath = path.getParent().resolve(ncFileName).toString(); |
| | | // 构建目标路径 |
| | | String targetDirectory = fileHomePath + docFile.getFilePath(); |
| | | String targetPath = Paths.get(targetDirectory, docFile.getFileEncodeName()).toString(); |
| | |
| | | DocClassification classification = classificationService.getByCode("send"); |
| | | if(classification == null) |
| | | ExceptionCast.cast(DocumentCode.DOC_CLASS_ERROR); |
| | | DocRelative docRelative = new DocRelative(); |
| | | docRelative.setDocId(docInfo.getDocId()); |
| | | docRelative.setClassificationId(classification.getClassificationId()); |
| | | docRelative.setAttributionType(7); |
| | | docRelative.setAttributionId(mdcEquipment.getId()); |
| | | docRelativeService.save(docRelative); |
| | | DocRelative newDocRelative = new DocRelative(); |
| | | newDocRelative.setDocId(docInfo.getDocId()); |
| | | newDocRelative.setClassificationId(classification.getClassificationId()); |
| | | newDocRelative.setAttributionType(7); |
| | | newDocRelative.setAttributionId(mdcEquipment.getId()); |
| | | docRelativeService.save(newDocRelative); |
| | | } |
| | | String sendPath = StringUtils.join(strings.toArray(), "/"); |
| | | boolean copyFileNc = FileUtilS.copyFileNc(docFile.getFilePath(), sendPath + "/" + mdcEquipment.getEquipmentId(), |
| | |
| | | } else { |
| | | throw new RuntimeException("文件传输路径获取失败"); |
| | | } |
| | | //获取序列化的程序确认表数据 |
| | | GuideCardBatch guideCardBatch=pkg.getTraceChain().getGuideCardBatch(); |
| | | if (guideCardBatch!=null){ |
| | | // 计算后一个文件名 |
| | | long nextNumber = Long.parseLong(numericPart); |
| | | nextNumber++; |
| | | //获取文件路径 |
| | | String pictureUrl=guideCardBatch.getPicture(); |
| | | |
| | | // 10.删除临时NC文件与json文件 |
| | | // 保持相同位数格式 |
| | | String nextNumeric = String.format("%0" + numericPart.length() + "d", nextNumber); |
| | | String nextFileName = prefix + nextNumeric + "_" + equipmentId+"."+pictureUrl.split("\\.")[1]; |
| | | String nextFilePath = path.getParent().resolve(nextFileName).toString(); |
| | | |
| | | //拼接现有路径 |
| | | String picturePtah=upLoadPath+"/"+pictureUrl; |
| | | |
| | | // 9. 复制文件并重命名 |
| | | logger.info("复制文件: {} → {}", nextFilePath,picturePtah); |
| | | Path PicSource= Paths.get(nextFilePath); |
| | | Files.copy(PicSource, Paths.get(picturePtah), StandardCopyOption.REPLACE_EXISTING); |
| | | Files.delete(PicSource); |
| | | } |
| | | |
| | | // 删除文件 |
| | | logger.info("删除临时文件: {}", ncFilePath); |
| | | Files.delete(source); |
| | | Files.delete(path); |
| | | |
| | | return JsonUtils.fromJson(json, TransferPackage.class); |
| | | return pkg; |
| | | |
| | | } catch (NumberFormatException e) { |
| | | throw new RuntimeException("文件名中的数字格式无效: " + e.getMessage(), e); |
| | |
| | | pkg.getTraceChain().getComponentHierarchy().getComponents().size() < 4) { |
| | | return; |
| | | } |
| | | |
| | | ComponentHierarchy hierarchy = pkg.getTraceChain().getComponentHierarchy(); |
| | | List<ComponentInfo> compressed = new ArrayList<>(); |
| | | |