From 4c7296d45efe849dc70a3b2e2240c905481a91c9 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期一, 29 九月 2025 17:44:46 +0800
Subject: [PATCH] 工控网涉密网联调
---
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java | 134 ++++++++++++++++++++++++++++++++++----------
1 files changed, 104 insertions(+), 30 deletions(-)
diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java
index 0052fa3..11c384f 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/ReceiveFileCheckService.java
@@ -1,16 +1,25 @@
package org.springblade.mdm.machinefile.service;
+import com.qiniu.util.IOUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.lang3.StringUtils;
import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.tool.utils.Func;
import org.springblade.mdm.basesetting.machine.entity.Machine;
import org.springblade.mdm.basesetting.machine.service.MachineService;
+import org.springblade.mdm.commons.contants.RegExpConstants;
+import org.springblade.mdm.commons.service.MachineDirTranslator;
import org.springblade.mdm.commons.service.ParamService;
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.entity.MachineFile;
+import org.springblade.mdm.program.entity.ProgramOnMachine;
import org.springblade.mdm.program.service.ProgramAnnotationService;
-import org.springblade.mdm.program.service.programannotation.AnnotationUtil;
+import org.springblade.mdm.program.service.ProgramOnMachineService;
+import org.springblade.mdm.program.service.programannotation.*;
import org.springblade.mdm.utils.FileContentUtil;
import org.springblade.mdm.utils.ProgramFileNameParser;
import org.springblade.system.pojo.entity.DictBiz;
@@ -19,10 +28,7 @@
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -31,6 +37,7 @@
import java.util.Date;
import java.util.List;
import java.util.Optional;
+import java.util.regex.Matcher;
@Slf4j
@Component
@@ -40,58 +47,125 @@
@Autowired
private MachineService machineService;
@Autowired
- private ParamService paramService;
+ private ProgramOnMachineService programOnMachineService;
@Autowired
private FileSendRecordService fileSendRecordService;
+ @Autowired
+ private AnnotationProcessorHelper annoProcessHelper;
+ @Autowired
+ private MachineDirTranslator machineDirTranslator;
+ @Autowired
+ private MachineBackTaskService machineBackTaskService;
/**
* 鏂囦欢鍚堟硶鎬ф鏌�
* @param machineFile
*/
@Transactional(rollbackFor = Exception.class)
public void check(MachineFile machineFile,List<MachineFile> allFilesInDir,Machine machine) throws IOException {
- String srcFilepath = MachineFileService.getBasePath(machine,machineFile.getDirType())+ File.separator+machineFile.getName();
- Path source = Paths.get(srcFilepath);
- if(!source.toFile().exists()){
+
+ String srcFilepath = machineDirTranslator.trans(MachineFileService.getBasePath(machine,machineFile.getDirType())+ File.separator+machineFile.getName());
+ log.info("寮�濮嬫鏌ユ枃浠秢}",srcFilepath);
+ Path checkFilePath = Paths.get(srcFilepath);
+ if(!checkFilePath.toFile().exists()){
return;
}
- try(InputStream fileIns = Files.newInputStream(Paths.get(srcFilepath));) {
- if(!FileContentUtil.isTextFile(fileIns)){
+
+ try(InputStream fileIns = Files.newInputStream(checkFilePath);) {
+ int excepType = MachineFile.EXCEPTION_OK;
+ ByteArrayInputStream byteStream = new ByteArrayInputStream(IOUtils.toByteArray(fileIns));
+ if(!FileContentUtil.isTextFile(byteStream)){
//闈炴枃鏈�
- machineFile.setExceptionType(MachineFile.EXCEPTION_NOT_TEXT);
+ excepType = MachineFile.EXCEPTION_NOT_TEXT;
}else{
ProgramNameVO progNameVO = ProgramFileNameParser.parseProgramName(machineFile.getName());
- if(!progNameVO.isValidFilename()){
- machineFile.setExceptionType(MachineFile.EXCEPTION_BAD_FILENAME);
+ boolean filenameValid = progNameVO.isValidFilename();
+ if(!filenameValid){
+ excepType = MachineFile.EXCEPTION_BAD_FILENAME;
}else {
+
String prefix = progNameVO.logicProgramName()+"-";
long matchCount = allFilesInDir.stream().filter(file -> file.getName().startsWith(prefix)).count();
if(matchCount != progNameVO.getSegmentCount()){//鏂囦欢娈垫暟缂哄け
- machineFile.setExceptionType(MachineFile.EXCEPTION_LOST_FILES);
+ excepType = MachineFile.EXCEPTION_LOST_FILES;
}else{
- //妫�鏌ユ槸鍚﹀尮閰嶄笅鍙戣褰曠殑娈垫暟
- //姝h礋3绉掍綔涓烘煡璇㈡椂闂�
- Date beginTime = new Date(machineFile.getFileCreateTime().getTime()-3000);
- Date endTime = new Date(machineFile.getFileCreateTime().getTime()+3000);
+ //妫�鏌ユ槸鍚﹀尮閰嶆満搴婂洖浼犱换鍔�
+ byteStream.reset();
+ AnnotationProcessor annoProcessor = this.annoProcessHelper.getProcessor(machine.getControlSystem());
+ AnnotationData annoData = annoProcessor.readAnnotationData(byteStream);
+ Optional<MachineBackTask> taskOpt = backTaskForFile(machineFile,annoData);
+
+ /*
+ String nameLikeStr;
+ if(StringUtils.isNotBlank(progNameVO.getLgPart())){
+ nameLikeStr = prefix +"%P%";
+ }else{
+ nameLikeStr = prefix;
+ }
Optional<FileSendRecord> optFile = fileSendRecordService.lambdaQuery()
.eq(FileSendRecord::getMachineCode,machineFile.getMachineCode())
- .likeRight(FileSendRecord::getName,prefix).between(FileSendRecord::getCreateTime,beginTime,endTime).oneOpt();
-
- if(optFile.isPresent()){
- //纭疄涓嬪彂杩囷紝姣斿鎬绘鏁版槸鍚︾浉鍚�
- FileSendRecord sendFile = optFile.get();
- ProgramNameVO sendProgNameVO = ProgramFileNameParser.parseProgramName(sendFile.getName());
- if(progNameVO.getSegmentCount() != sendProgNameVO.getSegmentCount()){
- //娈垫暟涓嶅尮閰�
- machineFile.setExceptionType(MachineFile.EXCEPTION_NOT_MATCH_SEND);
+ .likeRight(FileSendRecord::getName,nameLikeStr).last("limit 1")
+ .orderByDesc(FileSendRecord::getCreateTime).oneOpt();
+ */
+ //boolean matchSendRecord;//鏂囦欢鏄惁鏈変笅鍙戣褰�
+ if(taskOpt.isPresent()){
+ //鏈変换鍔★紝姣斿鎬绘鏁版槸鍚︾浉鍚�
+ MachineBackTask backTask = taskOpt.get();
+ //FileSendRecord sendFile = optFile.get();
+ //ProgramNameVO sendProgNameVO = ProgramFileNameParser.parseProgramName(sendFile.getName());
+ if(!backTask.isProgramOnMachineTask() ){//宸ヨ壓缂栧埗
+ if(progNameVO.getSegmentCount() != backTask.getSegCount()) {
+ //娈垫暟涓嶅尮閰嶄笅鍙戣褰�
+ excepType = MachineFile.EXCEPTION_NOT_MATCH_SEND_SEG_COUNT;
+ }
}else{
- machineFile.setExceptionType(MachineFile.EXCEPTION_OK);
+ //鐜板満缂栫▼锛屾鏌ユ洿鏀瑰崟搴忓彿
+ if(StringUtils.isNotBlank(backTask.getDeviationSerial()) && !StringUtils.equals(backTask.getDeviationSerial(),progNameVO.lgSerial())){
+ excepType = MachineFile.EXCEPTION_NOT_MATCH_SEND_LG;
+ }
}
+
+ }else{
+ excepType = MachineFile.EXCEPTION_NOT_MATCH_RECORD;
}
+
+ /*
+ if(!matchSendRecord){//濡傛灉鏂囦欢鏈笅鍙戣繃锛屾煡鐪嬫槸鍚︽湁鐜板満缂栫▼璁板綍
+ String devSerial = null;
+ if(StringUtils.isNotBlank(progNameVO.getLgPart())){
+ devSerial = progNameVO.getLgPart().substring(1);
+ }
+ long progOnMachineCount = programOnMachineService.lambdaQuery()
+ .eq(ProgramOnMachine::getDrawingNo,progNameVO.getDrawingNo())
+ .eq(ProgramOnMachine::getProcessNo,progNameVO.getProcessNo())
+ .eq(ProgramOnMachine::getProcessEdition,progNameVO.getProcessEdition())
+ .eq(devSerial != null,ProgramOnMachine::getDeviationSerial,devSerial)
+ .eq(ProgramOnMachine::getMachineCode,machineFile.getMachineCode()).count();
+
+ if(progOnMachineCount == 0){//鏃犵幇鍦虹紪绋嬭褰�
+ excepType = MachineFile.EXCEPTION_NOT_MATCH_RECORD;
+ }
+
+ }
+
+ */
}
}
}
-
+ machineFile.setExceptionType(excepType);
+ log.info("妫�鏌ユ枃浠剁粨鏉焮}",srcFilepath);
machineFileService.updateById(machineFile);
}
}
+
+ Optional<MachineBackTask> backTaskForFile(MachineFile machineFile,AnnotationData annoData){
+ ProgramNameVO progNameVO = ProgramFileNameParser.parseProgramName(machineFile.getName());
+
+ return machineBackTaskService.lambdaQuery()
+ .eq(MachineBackTask::getStatus,MachineBackTask.STATUS_PENDING)
+ .eq(MachineBackTask::getMachineCode,machineFile.getMachineCode())
+ .eq(MachineBackTask::getProgramName,progNameVO.logicProgramName())
+ .eq(progNameVO.lgSerial()!=null,MachineBackTask::getDeviation,annoData.getDeviation())
+ .eq(progNameVO.lgSerial()!=null,MachineBackTask::getDeviationSerial,progNameVO.lgSerial())
+ .last("limit 1").oneOpt();
+ }
}
--
Gitblit v1.9.3