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/program/service/MdmProgramImportService.java | 521 ++++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 398 insertions(+), 123 deletions(-)
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
index 3133dde..75c8c24 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
@@ -1,185 +1,460 @@
package org.springblade.mdm.program.service;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import lombok.AllArgsConstructor;
+import jodd.util.annotation.AnnotationParser;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
-import org.apache.commons.compress.archivers.zip.ZipFile;
-import org.apache.commons.compress.utils.SeekableInMemoryByteChannel;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BizServiceImpl;
-import org.springblade.core.tool.utils.FileUtil;
+import org.springblade.core.oss.OssTemplate;
+import org.springblade.core.oss.model.BladeFile;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.IoUtil;
-import org.springblade.mdm.flow.service.CureFlowService;
-import org.springblade.mdm.program.entity.NcProgram;
+import org.springblade.mdm.basesetting.machine.service.MachineService;
+import org.springblade.mdm.basesetting.machine.entity.Machine;
+import org.springblade.mdm.commons.contants.RegExpConstants;
+import org.springblade.mdm.commons.contants.ZipConstants;
+import org.springblade.mdm.gkw.programnode.vo.ProgramNameVO;
+import org.springblade.mdm.gkw.task.entity.MachineBackTask;
+import org.springblade.mdm.gkw.task.service.MachineBackTaskService;
+import org.springblade.mdm.machinefile.entity.FileSendRecord;
+import org.springblade.mdm.machinefile.service.FileSendRecordService;
import org.springblade.mdm.program.entity.NcProgramExchange;
import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
-import org.springblade.mdm.program.vo.DncSendBackData;
+import org.springblade.mdm.program.service.programannotation.*;
import org.springblade.mdm.program.vo.MdmProgramImportVO;
-import org.springblade.mdm.utils.CustomBinaryReader;
+import org.springblade.mdm.utils.FileContentUtil;
+import org.springblade.mdm.utils.ProgramFileNameParser;
+import org.springblade.system.pojo.entity.DictBiz;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.time.LocalDateTime;
+import java.time.Duration;
import java.util.*;
-
+import java.nio.file.*;
+import java.util.regex.Matcher;
+import java.util.stream.Stream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
/**
* MDM绋嬪簭瀵煎叆锛堝伐鎺х綉鍔熻兘锛�
- *
+ * 鐩墠宸ユ帶缃戝睍鐜板舰寮忔湭瀹氾紝鏆傛椂瀹炵幇鏆傚仠
* @author yangys
*/
@Slf4j
@Service
-@AllArgsConstructor
public class MdmProgramImportService extends BizServiceImpl<NcProgramExchangeMapper, NcProgramExchange> {
- private final CureFlowService cureFlowService;
- private final NcProgramService ncProgramService;
+ @Autowired
+ private BladeRedis bladeRedis;
+ @Autowired
+ private ProgramAnnotationService programAnnotationService;
+ @Autowired
+ private MachineService machineService;
+ @Autowired
+ private FileSendRecordService fileSendRecordService;
+ @Autowired
+ private OssTemplate ossTemplate;
+ @Autowired
+ private AnnotationProcessorHelper annotationProcessorHelper;
+ @Autowired
+ private MachineBackTaskService machineBackTaskService;
+
+ private String getFileKey(){
+ return "mdmgkwimpfile-"+ AuthUtil.getUserId();
+ }
/**
- * MDM瀵煎叆鏂囦欢涓婁紶
+ * 宸ユ帶MDM瀵煎叆鏂囦欢涓婁紶
* @param file MDM娑夊瘑缃戝鍑烘枃浠�
* @return
*/
public List<MdmProgramImportVO> mdmImportUpload(MultipartFile file) {
List<MdmProgramImportVO> list;
try {
- //String fileName = file.getOriginalFilename();
- //InputStream zipFileInputStream = FileExchangeUtil.convertFileToZip(file.getInputStream());
- InputStream zipFileInputStream = file.getInputStream();//test
+ if(file == null || file.isEmpty()){
+ throw new ServiceException("鏂囦欢涓虹┖");
+ }
+ /*
+ if(!StringUtils.endsWith(file.getOriginalFilename(),".zip")){
+ throw new ServiceException("鏂囦欢蹇呴』涓簔ip鍖�");
+ }*/
+ String tempDir = System.getProperty("java.io.tmpdir");
+ Path tempPath = Paths.get(tempDir);
+ Path extractDir = Files.createTempDirectory(tempPath, "unzip_"+System.currentTimeMillis());
+ bladeRedis.setEx(getFileKey(),extractDir.toString(), Duration.ofHours(2));
+ if(StringUtils.endsWithIgnoreCase(file.getOriginalFilename(),".zip")){
+ // 鍒涘缓瑙e帇鐩爣鐩綍锛堝湪涓存椂鐩綍涓嬪垱寤轰竴涓敮涓�瀛愮洰褰曪級
+ Path tempZipFile = Files.createTempFile("mdmimpfile-"+System.currentTimeMillis(), ".zip");
+ file.transferTo(tempZipFile);
+ extractZipToTempDir(tempZipFile,extractDir);
+ }else{
+ //鏅�氭枃浠讹紝鐩存帴鏀惧叆extract鏂囦欢澶�
+ file.transferTo(Paths.get(extractDir.toString()+File.separator+file.getOriginalFilename()));
+ }
- byte[] bytes = FileUtil.copyToByteArray(zipFileInputStream);
- list = parseMdmZipFromByteArray(bytes);
-
-
+ //璇诲彇鏂囦欢鐩綍
+ list = readTempDir(extractDir);
} catch (IOException e) {
- log.error("涓婁紶dnc鍥炰紶鏂囦欢澶辫触",e);
- list = Collections.emptyList();
+ log.error("瀵煎叆娑夊瘑缃戞憜娓℃枃浠跺け璐�",e);
+ throw new ServiceException("瑙f瀽DNC鍥炰紶鏁版嵁澶辫触");
}
return list;
- }
-
- InputStream convertFileToZip(InputStream inputStream) throws IOException {
-
- File tempFile = createTempFile();
- FileOutputStream fos = new FileOutputStream(tempFile);
- CustomBinaryReader.read(inputStream,fos);
-
-
- FileInputStream dInstream = new FileInputStream(tempFile);
-
- return dInstream;
}
/**
- * 鍒涘缓涓�涓复鏃舵枃浠�
- * @return
- * @throws IOException
+ * 瑙e帇zip鍖呭埌涓存椂璺緞
+ * @param zipFilePath zip鍖呮枃浠舵湇鍔″櫒涓婄殑璺緞
+ * @param extractDir 鐩爣鐩綍
+ * @throws IOException 鏂囦欢鎿嶄綔寮傚父
*/
- File createTempFile() throws IOException {
- Path tempDir = Paths.get(System.getProperty("java.io.tmpdir"));
- // 鍦ㄤ复鏃剁洰褰曚腑鍒涘缓鏂囦欢
- String tfilename = "t"+System.currentTimeMillis();
- Path tempFile = Files.createTempFile(tempDir, tfilename, ".tmp");
- System.out.println("鍒涘缓鐨勪复鏃舵枃浠�: " + tempFile);
- return tempFile.toFile();
+ public void extractZipToTempDir(Path zipFilePath,Path extractDir) throws IOException{
+ for (String encoding : ZipConstants.TRY_ENCODINGS) {
+ try {
+ extractZipToTempDirWithCharset(zipFilePath,extractDir,Charset.forName(encoding));
+ log.error("浣跨敤缂栫爜 {} 瑙f瀽鎴愬姛 ",encoding);
+ break;
+ } catch (Exception e) {
+ log.error("浣跨敤缂栫爜 {} 瑙f瀽澶辫触: ",encoding,e);
+ }
+ }
}
- public static List<MdmProgramImportVO> parseMdmZipFromByteArray(byte[] zipData) throws IOException {
- List<MdmProgramImportVO> list = new ArrayList<>();
- Map<String,String> fileMd5Map = new HashMap<>();
- Map<String,MdmProgramImportVO> fileDataMap = new HashMap<>();
- try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(zipData);
- ZipFile zipFile = new ZipFile(channel)) {
+ public void extractZipToTempDirWithCharset(Path zipFilePath, Path extractDir, Charset charset) throws IOException {
+ // 鑾峰彇绯荤粺涓存椂鐩綍
+ String tempDir = System.getProperty("java.io.tmpdir");
- ZipArchiveEntry entry;
- Enumeration<ZipArchiveEntry> entries = zipFile.getEntries();
- while (entries.hasMoreElements()) {
- entry = entries.nextElement();
+ // 鍒涘缓瑙e帇鐩爣鐩綍锛堝湪涓存椂鐩綍涓嬪垱寤轰竴涓敮涓�瀛愮洰褰曪級
+ try (InputStream fis = Files.newInputStream(zipFilePath);
+ ZipInputStream zis = new ZipInputStream(fis,charset)) {
- String entryName = entry.getName();
+ ZipEntry zipEntry = zis.getNextEntry();
+ while (zipEntry != null) {
+ Path newPath = zipSlipProtect(zipEntry, extractDir);
- if (!entry.isDirectory()) {
- //鐩存帴瑙f瀽绋嬪簭鐨刯son鏂囦欢
- if(entryName.equals(NcProgramExportDNCService.PROGRAM_JSON_FILE)){
-
- try (InputStream inputStream = zipFile.getInputStream(entry)) {
- String jsonStr = IoUtil.readToString(inputStream);
-
- JSONArray jsonArray = JSONArray.parseArray(jsonStr);
- for(int i=0;i<jsonArray.size();i++){
- JSONObject jsonObject = jsonArray.getJSONObject(i);
- MdmProgramImportVO d = new MdmProgramImportVO();
- d.setName(jsonObject.getString("name"));
- d.setId(jsonObject.getLong("id"));
- d.setCode(jsonObject.getString("code"));
- d.setDescription(jsonObject.getString("description"));
- d.setCategory(jsonObject.getString("category"));
- d.setBindNcNodeId(jsonObject.getLong("bindNcNodeId"));
- d.setIsLastEdition(jsonObject.getInteger("isLastEdition"));
- d.setIsLocked(jsonObject.getInteger("isLocked"));
- d.setIsTest(jsonObject.getInteger("isTest"));
- d.setMachineCode(jsonObject.getString("machineCode"));
- d.setNcNodeId(jsonObject.getLong("ncNodeId"));
- d.setPartNo(jsonObject.getString("partNo"));
- d.setProcessEdition(jsonObject.getString("processEdition"));
-
- fileDataMap.put(d.getName(),d);
-
- list.add(d);
- }
-
- }
- }else{
- try (InputStream inputStream = zipFile.getInputStream(entry)) {
- fileMd5Map.put(entryName,DigestUtils.md5Hex(inputStream));//鑾峰彇鏂囦欢MD5
- }
-
+ if (zipEntry.isDirectory()) {
+ Files.createDirectories(newPath);
+ } else {
+ // 纭繚鐖剁洰褰曞瓨鍦�
+ if (newPath.getParent() != null) {
+ Files.createDirectories(newPath.getParent());
}
+ // 鍐欏叆鏂囦欢
+ try (OutputStream fos = Files.newOutputStream(newPath)) {
+ byte[] buffer = new byte[1024];
+ int len;
+ while ((len = zis.read(buffer)) > 0) {
+ fos.write(buffer, 0, len);
+ }
+ }
}
-
+ zipEntry = zis.getNextEntry();
}
-
+ zis.closeEntry();
}
- //璁剧疆md5鍊�
- fileDataMap.forEach((k,v)->{
- if(fileMd5Map.containsKey(k)){
- v.setMd5(fileMd5Map.get(k));
- }
- });
- return list;
}
+ /**
+ * 闃叉ZIP Slip鏀诲嚮
+ * @param zipEntry zip鍐呴儴鏂囦欢璺緞
+ * @param targetDir 鐩爣鏂囦欢澶�
+ * @return 鏂囦欢璺緞
+ * @throws IOException 鎿嶄綔鏂囦欢IO寮傚父
+ */
+ Path zipSlipProtect(ZipEntry zipEntry, Path targetDir) throws IOException {
+ Path targetDirResolved = targetDir.resolve(zipEntry.getName());
+ // 瑙勮寖鍖栬矾寰�
+ Path normalizePath = targetDirResolved.normalize();
+
+ if (!normalizePath.startsWith(targetDir)) {
+ throw new IOException("鎭舵剰ZIP鏉$洰: " + zipEntry.getName());
+ }
+
+ return normalizePath;
+ }
+
+ /**
+ * 璇诲彇瑙e帇鏂囦欢澶逛笅鎵�鏈夋枃浠� 瑙f瀽鎴恦o鍒楄〃
+ * @param extractDir 瑙e帇鏂囦欢澶�
+ * @return vo鍒楄〃
+ * @throws IOException 瑙f瀽鏂囦欢鐨勫紓甯�
+ */
+ public List<MdmProgramImportVO> readTempDir(Path extractDir) throws IOException {
+ List<MdmProgramImportVO> list = new ArrayList<>();
+ try (Stream<Path> paths = Files.walk(extractDir)) {
+ List<Path> filePathList = paths
+ .filter(Files::isRegularFile).toList(); // 鍙繚鐣欐櫘閫氭枃浠讹紝鎺掗櫎鐩綍
+
+ for(Path path : filePathList){
+ list.add(readFileToVO(path));
+ }
+ }
+ /*
+ //璇诲彇鎵�鏈夋枃浠跺す
+ try (DirectoryStream<Path> stream = Files.newDirectoryStream(extractDir)) {
+ for (Path path : stream) {
+ if (Files.isDirectory(path)) {
+ // 濡傛灉鏄瓙鐩綍锛岃鍙栧叾涓殑鏂囦欢
+ try (DirectoryStream<Path> subStream = Files.newDirectoryStream(path)) {
+ for (Path subPath : subStream) {
+ if (Files.isRegularFile(subPath)) {
+ System.out.println("鎵惧埌鏂囦欢: " + subPath);
+ }
+ }
+ }
+ } else if (Files.isRegularFile(path)) {
+ System.out.println("鎵惧埌鏂囦欢2: " + path);
+ //杩欓噷 鎵惧埌鐨勬枃浠朵笉鏄�
+ list.add(readFileToVO(path));
+ }
+ }
+ }*/
+ return list;
+ }
+ public static byte[] getUTF8BytesFromGBKString(String gbkStr) {
+ int n = gbkStr.length();
+ byte[] utfBytes = new byte[3 * n];
+ int k = 0;
+ for (int i = 0; i < n; i++) {
+ int m = gbkStr.charAt(i);
+ if (m < 128 && m >= 0) {
+ utfBytes[k++] = (byte) m;
+ continue;
+ }
+ utfBytes[k++] = (byte) (0xe0 | (m >> 12));
+ utfBytes[k++] = (byte) (0x80 | ((m >> 6) & 0x3f));
+ utfBytes[k++] = (byte) (0x80 | (m & 0x3f));
+ }
+ if (k < utfBytes.length) {
+ byte[] tmp = new byte[k];
+ System.arraycopy(utfBytes, 0, tmp, 0, k);
+ return tmp;
+ }
+ return utfBytes;
+ }
+
+ ProgramNameVO tryParseProgramName(String fiilename){
+ ProgramNameVO pnmameVO = ProgramFileNameParser.parseProgramName(fiilename);//鏍囧噯utf8缂栫爜
+ if(pnmameVO.getDrawingNo() == null) {
+ //浣跨敤GBK缂栫爜瑙f瀽
+ pnmameVO = ProgramFileNameParser.parseProgramName(new String(getUTF8BytesFromGBKString(fiilename), StandardCharsets.UTF_8));
+ }
+ return pnmameVO;
+ }
+ /**
+ * 灏嗘枃浠剁粍缁囨垚VO
+ * @param path 鏂囦欢path
+ * @return vo
+ */
+ MdmProgramImportVO readFileToVO(Path path) throws UnsupportedEncodingException {
+ MdmProgramImportVO vo = new MdmProgramImportVO();
+ vo.setFilename(path.getFileName().toString());
+
+ ProgramNameVO pnmameVO = tryParseProgramName(vo.getFilename());
+ vo.setDrawingNo(pnmameVO.getDrawingNo());
+
+ try (InputStream inputStream = Files.newInputStream(path)) {
+ // 浣跨敤杈撳叆娴佽鍙栨枃浠跺唴瀹�
+ byte[] buffer = new byte[2000];
+ inputStream.read(buffer);
+ vo.setMd5(DigestUtils.md5Hex(buffer));
+ } catch (IOException e) {
+ log.error("璇诲彇鏂囦欢md5澶辫触",e);
+ }
+
+ try (InputStream inputStream = Files.newInputStream(path, StandardOpenOption.READ)) {
+ // 浣跨敤杈撳叆娴佽鍙栨枃浠跺唴瀹�
+ ByteArrayInputStream bas = new ByteArrayInputStream(inputStream.readAllBytes());
+
+ AnnotationProperties defAnnoProperties = AnnotationProperties.getDefault();
+ String sendPathLine = FileContentUtil.readLineAt(bas,defAnnoProperties.getSendPathLineIndex());
+
+ bas.reset();
+ String statusLine = FileContentUtil.readLineAt(bas,defAnnoProperties.getStatusLineIndex());
+ log.info("sendPathLine={}", sendPathLine);
+
+ Machine matchedMachine = machineService.getMachineBySendPathAnnotation(sendPathLine);
+
+ if (matchedMachine != null) {
+ vo.setName(pnmameVO.logicProgramName());
+ vo.setMachineCode(matchedMachine.getCode());
+
+ vo.setFullPath(path.toString());//鏂囦欢鍦板潃
+ vo.setSendPath(matchedMachine.getProgSendDir());
+ vo.setId(vo.getFullPath());
+ vo.setProgramStatus(programAnnotationService.removeAnnotation(matchedMachine.getControlSystem(),statusLine));
+ }
+ } catch (IOException e) {
+ log.error("璇诲彇鏂囦欢澶辫触",e);
+ throw new ServiceException("瀵煎叆绋嬪簭澶辫触"+path.getFileName().toString()+","+e.getMessage());
+ }
+ return vo;
+ }
+ /**
+ * 瑙f瀽鍑洪浂缁勪欢濂�
+ * @param filename
+ * @return
+ */
+ /*
+ String parseDrawingNo(String filename){
+
+ /*
+ String drawingNo = "";
+ int idx = filename.lastIndexOf("-");
+ String temp;
+ if(idx != -1){
+ temp = filename.substring(0,idx);
+
+ idx = temp.lastIndexOf("-");
+ if(idx != -1){
+ temp = temp.substring(0,idx);
+
+ //鍘绘帀宸ュ簭鐗堟
+ idx = temp.lastIndexOf("-");
+ if(idx != -1){
+ temp = temp.substring(0,idx);
+
+ //鍘绘帀宸ュ簭鍙�
+ idx = temp.lastIndexOf("-");
+ if(idx != -1){
+ drawingNo = temp.substring(0,idx);
+ }
+ }
+ }
+ //浠ヤ笂鍘绘帀浜嗘渶鍚�2娈垫鏁板拰娈靛彿
+
+
+ }
+ return drawingNo;
+
+
+ }
+
+ String parseProgramName(String filename){
+ String programName = "";
+ int idx = filename.lastIndexOf("-");
+ String temp;
+ if(idx != -1){
+ temp = filename.substring(0,idx);
+
+ idx = temp.lastIndexOf("-");
+ if(idx != -1){
+ temp = temp.substring(0,idx);
+
+ //鍘绘帀宸ュ簭鐗堟
+ idx = temp.lastIndexOf("-");
+ if(idx != -1){
+ programName = temp.substring(0,idx);
+ }
+ }
+ //浠ヤ笂鍘绘帀浜嗘渶鍚�2娈垫鏁板拰娈靛彿
+ }
+ return programName;
+ }
+*/
/**
* 鍏ュ簱mdm娑夊瘑缃戞枃浠�
* @param ids id鍒楄〃閫楀彿鍒嗛殧
- * @return
*/
- public void mdmFileAccept(String ids) {
- /*
- List<Long> idList = Func.toLongList(ids);
- List<NcProgram> progList = ncProgramService.listByIds(idList);
- NcProgramExchange exchange;
- //NcProgram program;
- //NcNode programNode;
+ public void mdmFileAccept(String ids) throws IOException {
- for(NcProgram prog:progList){
- exchange = new NcProgramExchange();
- exchange.setName(prog.getName());
- exchange.setExchangeType(2);//鍥炰紶
- exchange.setNcProgramId(prog.getId());
+ List<FileSendRecord> importedRecords = new ArrayList<>();
+ List<String> idList = Func.toStrList(ids);
- this.save(exchange);
-
+ String dictStr = bladeRedis.get(getFileKey());
+ if(dictStr == null){
+ throw new ServiceException("鏂囦欢缂撳瓨宸茶繃鏈燂紝璇烽噸鏂颁笂浼犳枃浠躲��");
}
- //鐩存帴鍏ュ簱锛屾棤娴佺▼
- */
+ Path extractDir = Paths.get(dictStr);
+ List<MdmProgramImportVO> list = readTempDir(extractDir);
+ List<DictBiz> annoDictList = programAnnotationService.getAnnotionDictList();
+ String destFileFull;
+ for(String str : idList){
+ Optional<MdmProgramImportVO> optVO = list.stream().filter(vo -> vo.getId().equals(str)).findFirst();
+
+ if(optVO.isEmpty()){
+ continue;
+ }
+
+ MdmProgramImportVO vo = optVO.get();
+
+ destFileFull = vo.getSendPath()+File.separator+vo.getFilename();
+ File destFile = new File(destFileFull);
+ FileUtils.forceMkdirParent(destFile);
+ FileUtils.copyFile(new File(str),destFile);
+
+ FileSendRecord record = new FileSendRecord();
+ record.setName(destFile.getName());
+ Path destPath = Paths.get(destFileFull);
+ record.setMachineCode(vo.getMachineCode());
+ record.setFileSize(Files.size(destPath));
+
+ try(InputStream inputStream = new FileInputStream(destFile)){
+ BladeFile bFile = ossTemplate.putFile(record.getName(), inputStream);
+ record.setOssName(bFile.getName());
+ }
+
+ try(InputStream inputStream = ossTemplate.statFileStream(record.getOssName())){
+ //璇诲彇绋嬪簭鐘舵��
+ Machine machine = this.machineService.getByCode(record.getMachineCode());
+ AnnotationProcessor processor = annotationProcessorHelper.getProcessor(machine.getControlSystem());
+ AnnotationData annotationData = processor.readAnnotationData(inputStream);
+ /*
+ ProgramNameVO nameVO = ProgramFileNameParser.parseProgramName(record.getName());
+ if(StringUtils.isNotBlank(nameVO.getLgPart())) {
+ record.setDeviation(annotationData.getDeviation());
+ }*/
+ record.setProgramStatus(annotationData.getProgramStatus());
+ }
+ fileSendRecordService.save(record);
+
+ importedRecords.add(record);
+ }
+
+ machineBackTaskService.saveBatch(parseMachineBackTask(importedRecords));
+ }
+
+ /**
+ * 鍒涘缓鏈哄簥鍥炰紶浠诲姟
+ * @param importedRecords
+ */
+ List<MachineBackTask> parseMachineBackTask(List<FileSendRecord> importedRecords){
+ List<FileSendRecord> recList = importedRecords.stream().filter(r ->{
+ return AnnotationUtil.SQ.equals(r.getProgramStatus())
+ || AnnotationUtil.LG.equals(r.getProgramStatus());}).toList();
+
+ Map<String,FileSendRecord> map = new HashMap<>();
+ for(FileSendRecord record : recList){
+ ProgramNameVO nameVO = ProgramFileNameParser.parseProgramName(record.getName());
+ String key = record.getMachineCode()+","+nameVO.logicProgramName();
+ map.put(key,record);
+ }
+
+ List<MachineBackTask> backTasks = new ArrayList<>();
+ for(String key : map.keySet()){
+ MachineBackTask task = new MachineBackTask();
+ task.setTaskType(MachineBackTask.TASK_TYPE_PROGRAM);
+
+ FileSendRecord record = map.get(key);
+ task.setMachineCode(record.getMachineCode());
+
+ ProgramNameVO nameVO = ProgramFileNameParser.parseProgramName(record.getName());
+ task.setProgramName(nameVO.logicProgramName());
+ task.setSegCount(nameVO.getSegmentCount());
+ backTasks.add(task);
+ }
+ //鎻愬彇绋嬪簭鍖呭悕锛屾満搴婄紪鐮侀泦鍚�
+ return backTasks;
}
}
--
Gitblit v1.9.3