From 31ecdb8c700529a59dd762f0c47f0ed9c66d5092 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期四, 25 九月 2025 20:40:07 +0800
Subject: [PATCH] 工控网任务
---
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/NcProgramExportInnerService.java | 130 +++++++++++++++++++++++++++++++++++--------
1 files changed, 105 insertions(+), 25 deletions(-)
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/NcProgramExportInnerService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/NcProgramExportInnerService.java
index 25aa000..26e4aac 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/NcProgramExportInnerService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/NcProgramExportInnerService.java
@@ -4,16 +4,30 @@
import jakarta.servlet.ServletOutputStream;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
import org.springblade.core.mp.base.BizServiceImpl;
import org.springblade.core.oss.OssTemplate;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.mdm.basesetting.machine.entity.Machine;
+import org.springblade.mdm.basesetting.machine.service.MachineService;
+import org.springblade.mdm.flow.excution.events.CureFinishedEvent;
+import org.springblade.mdm.gkw.task.entity.MachineBackTask;
+import org.springblade.mdm.gkw.task.service.MachineBackTaskService;
+import org.springblade.mdm.machinefile.entity.MachineAcceptedFile;
import org.springblade.mdm.machinefile.entity.MachineFile;
+import org.springblade.mdm.machinefile.events.ExportedToInnerEvent;
import org.springblade.mdm.program.entity.NcProgramExchange;
import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
-import org.springblade.mdm.program.service.NcNodeService;
-import org.springblade.mdm.program.service.NcProgramService;
+import org.springblade.mdm.program.service.ProgramAnnotationService;
+import org.springblade.mdm.program.service.programannotation.*;
+import org.springblade.mdm.utils.FileContentUtil;
import org.springblade.mdm.utils.ProgramFileNameParser;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
@@ -30,62 +44,128 @@
@Service
@AllArgsConstructor
public class NcProgramExportInnerService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> {
- private final MachineAcceptedFileService machineBackFileService;
- private final NcProgramService progService;
- private final MachineFileService machineFileService;
- private final NcNodeService ncNodeService;
+ private final MachineAcceptedFileService machineAcceptedService;
private final OssTemplate ossTemplate;
+ private final MachineFileService machineFileService;
+ private final MachineService machineService;
+ private final AnnotationProcessorHelper annotationProcessorHelper;
+ private final ProgramAnnotationService programAnnotationService;
- public static final String PROGRAM_JSON_FILE = "exp_mdm_nc_program.json";
- public static final String NODE_JSON_FILE = "exp_mdm_nc_node.json";
- public static final String APPROVE_RECORD_JSON_FILE = "exp_mdm_approve_record.json";
-
-
+ private final MachineBackTaskService machineBackTaskService;
/**
* 瀵煎嚭鍒版秹瀵嗙綉
- * @param machineFileIds
+ * @param acceptedFileIds
* @param os
* @throws IOException
*/
- public void exportToInner(List<Long> machineFileIds, ServletOutputStream os) throws IOException {
- //FileOutputStream fos = new FileOutputStream("d:/exportDnc.zip");
- try (ZipOutputStream zipOut = new ZipOutputStream(os);) {//os
+ @Transactional
+ public void exportToInner(List<Long> acceptedFileIds, ServletOutputStream os) throws IOException {
- List<MachineFile> machineFiles = machineFileService.lambdaQuery().in(MachineFile::getId,machineFileIds).list();
- Map<String,List<MachineFile>> map = machineFiles.stream()
+ List<MachineAcceptedFile> acceptedFiles = machineAcceptedService.lambdaQuery().in(MachineAcceptedFile::getId,acceptedFileIds).list();
+ try (ZipOutputStream zipOut = new ZipOutputStream(os);) {//os
+ Map<String,List<MachineAcceptedFile>> map = acceptedFiles.stream()
.collect(Collectors.groupingBy(s -> ProgramFileNameParser.parseProgramName(s.getName()).logicProgramName()));
- for (Map.Entry<String, List<MachineFile>> entry : map.entrySet()) {
+ for (Map.Entry<String, List<MachineAcceptedFile>> entry : map.entrySet()) {
String programName = entry.getKey();
- List<MachineFile> progMachineFiles = entry.getValue();
- for (MachineFile mf : progMachineFiles) {
- try(InputStream ins = machineFileService.getInputStream(mf)) {
- addInputStreamToZip(zipOut,ins , programName + "/" + mf.getName());
+ List<MachineAcceptedFile> acceptedFileList = entry.getValue();
+ for (MachineAcceptedFile acceptedFile : acceptedFileList) {
+ try(InputStream ins = ossTemplate.statFileStream(acceptedFile.getOssName()) ) {
+ MachineFile machineFile = machineFileService.getById(acceptedFile.getMachineFileId());
+ addInputStreamToZip(zipOut,ins , programName + "/" + acceptedFile.getName(),acceptedFile.getName(),machineFile.getMachineCode());
}
+ acceptedFile.setExportTime(DateUtil.now());
+ acceptedFile.setStatus(MachineAcceptedFile.STATUS_EXPORTED);
}
}
+
+ machineAcceptedService.updateBatchById(acceptedFiles);
+
+ //鏇存柊浠诲姟鐘舵��
+ List<Long> backTaskIdList = acceptedFiles.stream().map(MachineAcceptedFile::getBackTaskId).filter(Objects::nonNull).toList();
+ this.finishTask(backTaskIdList);
+
+ SpringUtil.publishEvent(new ExportedToInnerEvent("exportToInner",acceptedFiles));
}
os.close();
+
+
}
+ void finishTask(List<Long> backTaskIdList){
+ if(backTaskIdList.isEmpty()){
+ return;
+ }
+ List<MachineBackTask> tasks = machineBackTaskService.lambdaQuery().in(MachineBackTask::getId,backTaskIdList).list();
+ for(MachineBackTask backTask : tasks){
+ backTask.setStatus(MachineBackTask.STATUS_FINISHED);
+ backTask.setFinishTime(new Date());
- public void addInputStreamToZip(ZipOutputStream zipOut, InputStream inputStream, String entryName)
+ machineBackTaskService.updateById(backTask);
+ }
+
+ }
+
+ /**
+ * j灏嗚緭鍏ユ祦鍔犲叆zip
+ * @param zipOut zip鏂囦欢杈撳嚭閲岃矾
+ * @param inputStream 鏂囦欢鐨勮緭鍏ユ祦
+ * @param entryName entryName
+ * @param filename 鍘熷鏂囦欢鍚�
+ * @param machineCode 鏈哄簥浠g爜
+ * @throws IOException 寮傚父
+ */
+ public void addInputStreamToZip(ZipOutputStream zipOut, InputStream inputStream, String entryName,String filename,String machineCode)
throws IOException {
// 鍒涘缓鏂扮殑 ZIP 鏉$洰
ZipEntry zipEntry = new ZipEntry(entryName);
zipOut.putNextEntry(zipEntry);
-
+ InputStream insAdded = setAnnotations(inputStream,filename,machineCode);
// 灏嗚緭鍏ユ祦鍐欏叆 ZIP 杈撳嚭娴�
byte[] buffer = new byte[1024];
int length;
- while ((length = inputStream.read(buffer)) >= 0) {
+ while ((length = insAdded.read(buffer)) >= 0) {
zipOut.write(buffer, 0, length);
}
// 鍏抽棴褰撳墠鏉$洰
zipOut.closeEntry();
}
+
+ /**
+ * 缁欏鍑烘枃浠跺鍔犳敞閲婏紝娑夊瘑缃戣鐢�
+ * @param inputStream 杈撳叆娴�
+ * @param filename 鏂囦欢鍚�
+ * @param machineCode 鏈哄簥浠g爜
+ * @return 瀹屾垚鍚庣殑stream
+ * @throws IOException 鎿嶄綔寮傚父
+ */
+ InputStream setAnnotations(InputStream inputStream,String filename,String machineCode) throws IOException {
+ Machine machine = this.machineService.getByCode(machineCode);
+ AnnotationProcessor annoProcessor = annotationProcessorHelper.getProcessor(machine.getControlSystem());
+
+ AnnotationData annoData = new AnnotationData();
+ annoData.setFilename(filename);
+ annoData.setSendPath(machine.getProgSendDir());
+
+ AnnotationProperties annoProps = annoProcessor.getAnnotationProperties();
+
+ ByteArrayInputStream byteInsStream = new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
+ String statusLine = FileContentUtil.readLineAt(byteInsStream,annoProps.getStatusLineIndex());
+ String text = programAnnotationService.removeAnnotation(machine.getControlSystem(),statusLine);
+
+ if(AnnotationUtil.isStatusContent(text)){
+ //鏄�3绉嶇姸鎬佷箣涓�
+ annoData.setProgramStatus(text);
+ }else{
+ //娌℃湁鎸夎瘯鍒囧鐞�
+ annoData.setProgramStatus(AnnotationUtil.SQ);
+ }
+ byteInsStream.reset();
+ //
+ return annoProcessor.putAnnotation(annoData,byteInsStream);
+ }
}
--
Gitblit v1.9.3