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/basesetting/machine/service/MachineService.java |  106 +++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 90 insertions(+), 16 deletions(-)

diff --git a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/service/MachineService.java b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/service/MachineService.java
index 7c3f930..cbb5456 100644
--- a/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/service/MachineService.java
+++ b/blade-service/blade-mdm/src/main/java/org/springblade/mdm/basesetting/machine/service/MachineService.java
@@ -1,6 +1,7 @@
 package org.springblade.mdm.basesetting.machine.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.MybatisUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BizServiceImpl;
@@ -15,6 +16,7 @@
 import org.springblade.mdm.basesetting.machine.vo.MachineSaveVO;
 import org.springblade.mdm.basesetting.machine.vo.MachineVO;
 import org.springblade.mdm.basesetting.producedivision.service.MdmDeptService;
+import org.springblade.mdm.commons.service.MachineDirTranslator;
 import org.springblade.mdm.commons.service.ParamService;
 import org.springblade.mdm.machinefile.entity.MachineFile;
 import org.springblade.mdm.machinefile.filewatch.DynamicDirectoryWatcher;
@@ -34,6 +36,7 @@
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
+import java.util.Optional;
 
 @Service
 public class MachineService extends BizServiceImpl<MachineMapper, Machine> {
@@ -43,11 +46,17 @@
 	private DynamicDirectoryWatcher dynamicDirectoryWatcher;
 	@Autowired
 	private ParamService paramService;
+	@Autowired
+	private MachineDirTranslator machineDirTranslator;
+
 	@Transactional(rollbackFor = Exception.class)
 	public void saveMachine(MachineSaveVO vo) throws IOException {
 		checkMachine(vo);
 		if(existsByCode(vo.getCode(),null)){
 			throw new ServiceException("鏈哄簥缂栫爜宸插瓨鍦�:"+vo.getCode());
+		}
+		if(existsByEquipmentCode(vo.getEquipmentCode(),null)){
+			throw new ServiceException("璁惧缂栧彿宸插瓨鍦�:"+vo.getEquipmentCode());
 		}
 
 		Machine machine = new Machine();
@@ -62,16 +71,15 @@
 	void makeMachineDirs(Machine machine) throws IOException {
 		Path dir;
 		if(StringUtils.isNotBlank(machine.getProgSendDir())){
-			createDirIsNotExists(machine.getProgSendDir());
-
+			createDirIsNotExists(machineDirTranslator.trans(machine.getProgSendDir()));
 		}
 
-		if(StringUtils.isNotBlank(machine.getProgReceiveDir())){
-			createDirIsNotExists(machine.getProgReceiveDir());
+		if(StringUtils.isNotBlank(machineDirTranslator.trans(machine.getProgReceiveDir()))){
+			createDirIsNotExists(machineDirTranslator.trans(machine.getProgReceiveDir()));
 		}
 
-		if(StringUtils.isNotBlank(machine.getProgTempDir())){
-			createDirIsNotExists(machine.getProgTempDir());
+		if(StringUtils.isNotBlank(machineDirTranslator.trans(machine.getProgTempDir()))){
+			createDirIsNotExists(machineDirTranslator.trans(machine.getProgTempDir()));
 		}
 	}
 
@@ -92,13 +100,17 @@
 			ProgramAnnotationService annoService = SpringUtil.getBean(ProgramAnnotationService.class);
 
 			if(StringUtils.isNotBlank(machine.getProgSendDir())) {
+
+				String sendDir = machineDirTranslator.trans(machine.getProgSendDir());
+
 				WatchInfo watchInfoSend = new WatchInfo();
 				watchInfoSend.setMachine(machine);
 				watchInfoSend.setDirType(MachineFile.DIR_TYPE_SEND);
-				watchInfoSend.setPath(machine.getProgSendDir());
+				watchInfoSend.setPath(sendDir);
 
-				if(!dynamicDirectoryWatcher.containsPath(Paths.get(machine.getProgSendDir()))) {
-					dynamicDirectoryWatcher.addDirectory(Paths.get(machine.getProgSendDir()),
+				Path path = Paths.get(sendDir);
+				if(!dynamicDirectoryWatcher.containsPath(path)) {
+					dynamicDirectoryWatcher.addDirectory(path,
 						new MachineFileChangeListener(machineFileService,
 							annoService,
 							watchInfoSend));
@@ -106,12 +118,16 @@
 			}
 
 			if(StringUtils.isNotBlank(machine.getProgReceiveDir())) {
+
+				String recDir = machineDirTranslator.trans(machine.getProgReceiveDir());
+
 				WatchInfo watchInfoRec = new WatchInfo();
 				watchInfoRec.setMachine(machine);
 				watchInfoRec.setDirType(MachineFile.DIR_TYPE_REC);
-				watchInfoRec.setPath(machine.getProgReceiveDir());
-				if(!dynamicDirectoryWatcher.containsPath(Paths.get(machine.getProgReceiveDir()))) {
-					dynamicDirectoryWatcher.addDirectory(Paths.get(machine.getProgReceiveDir()),
+				watchInfoRec.setPath(recDir);
+				Path path = Paths.get(recDir);
+				if(!dynamicDirectoryWatcher.containsPath(path)) {
+					dynamicDirectoryWatcher.addDirectory(path,
 						new MachineFileChangeListener(machineFileService,
 							annoService,
 							watchInfoRec));
@@ -119,12 +135,14 @@
 			}
 
 			if(StringUtils.isNotBlank(machine.getProgTempDir())) {
+				String tempDir = machineDirTranslator.trans(machine.getProgTempDir());
 				WatchInfo watchInfoTemp = new WatchInfo();
 				watchInfoTemp.setMachine(machine);
 				watchInfoTemp.setDirType(MachineFile.DIR_TYPE_TEMP);
-				watchInfoTemp.setPath(machine.getProgTempDir());
-				if(!dynamicDirectoryWatcher.containsPath(Paths.get(machine.getProgTempDir()))) {
-					dynamicDirectoryWatcher.addDirectory(Paths.get(machine.getProgTempDir()),
+				watchInfoTemp.setPath(tempDir);
+				Path path = Paths.get(machine.getProgTempDir());
+				if(!dynamicDirectoryWatcher.containsPath(path)) {
+					dynamicDirectoryWatcher.addDirectory(path,
 						new MachineFileChangeListener(machineFileService,
 							annoService,
 							watchInfoTemp));
@@ -168,6 +186,17 @@
 	}
 
 	/**
+	 * 鏍规嵁 璁惧缂栧彿鍒ゆ柇鏈哄簥鏄惁瀛樺湪
+	 * @param equipmentCode 璁惧缂栧彿
+	 * @param excludeId 鎺掗櫎id
+	 * @return 鏄惁瀛樺湪
+	 */
+	boolean existsByEquipmentCode(String equipmentCode,Long excludeId){
+		return this.lambdaQuery().eq(Machine::getEquipmentCode, equipmentCode).ne(excludeId!=null,Machine::getId, excludeId).count()>0;
+	}
+
+
+	/**
 	 * 淇敼鏈哄簥淇℃伅
 	 * @param vo
 	 * @return
@@ -178,7 +207,9 @@
 		if(existsByCode(vo.getCode(),vo.getId())){
 			throw new ServiceException("鏈哄簥缂栫爜宸插瓨鍦�:"+vo.getCode());
 		}
-
+		if(existsByEquipmentCode(vo.getEquipmentCode(),vo.getId())){
+			throw new ServiceException("璁惧缂栧彿宸插瓨鍦�:"+vo.getEquipmentCode());
+		}
 		Machine machine = this.getById(vo.getId());
 
 		Machine machineBak = new Machine();
@@ -186,6 +217,7 @@
 
 		machine.setMachineSpec(vo.getMachineSpec());
 		machine.setCode(vo.getCode());
+		machine.setEquipmentCode(vo.getEquipmentCode());
 		machine.setName(vo.getName());
 		machine.setMachineGroupCode(vo.getMachineGroupCode());
 		machine.setManufacturer(vo.getManufacturer());
@@ -321,4 +353,46 @@
 		return lambdaQuery().eq(Machine::getStatus,Machine.STATUS_ENABLE).list();
     }
 
+	public String escapeSqlWildcard(String value) {
+		if (StringUtils.isBlank(value)) {
+			return value;
+		}
+		return value.replace("\\", "\\\\")
+			.replace("%", "\\%")
+			.replace("_", "\\_");
+	}
+	/**
+	 * 鏍规嵁涓嬪彂璺緞鐨勬敞閲婃煡璇㈡満搴�
+	 * @param sendPathLine 涓嬪彂璺緞娉ㄩ噴鏂囨湰
+	 */
+    public Machine getMachineBySendPathAnnotation(String sendPathLine) {
+		//璺緞涓虹┖锛屼笉鍖归厤浠讳綍鏈哄櫒
+		if(StringUtils.isBlank(sendPathLine)){
+			return null;
+		}
+		//鍘绘帀鏈熬鎷彿(鍙戦偅绉�) ,鏈熬璺緞鍒嗛殧绗�
+		String oriPath = StringUtils.removeEnd(StringUtils.removeEnd(StringUtils.removeEnd(sendPathLine,")"),"/"),"\\");
+
+		String tempPathRepl1 = StringUtils.replace(oriPath,"/","\\");//鍙嶆枩鏉犵増鏈殑璺緞
+		String tempPathRepl2 = StringUtils.replace(oriPath,"\\","/");//姝f枩鏉犵増鏈殑璺緞
+
+		//鍘绘帀鍓�2浣嶅彲鑳界殑娉ㄩ噴(*-)銆�
+		String sendPath1 = escapeSqlWildcard(StringUtils.trim(StringUtils.substring(tempPathRepl1,2)));
+		String sendPath2 = escapeSqlWildcard(StringUtils.trim(StringUtils.substring(tempPathRepl2,2)));
+
+		Optional<Machine> machineOpt = lambdaQuery().eq(Machine::getStatus,Machine.STATUS_ENABLE).and(w -> {
+			w.like(Machine::getProgSendDir,sendPath1).or().like(Machine::getProgSendDir,sendPath2);
+		}).last("limit 1").oneOpt();
+
+		return machineOpt.orElse(null);
+    }
+
+	/**
+	 * 鏍规嵁璁惧缂栧彿鏌ヨ鏈哄簥
+	 * @param equipmentCode 璁惧缂栧彿
+	 * @return 鏈哄簥瀵硅薄
+	 */
+	public Machine getByEquipmentCode(String equipmentCode) {
+		return this.lambdaQuery().eq(Machine::getEquipmentCode, equipmentCode).one();
+	}
 }

--
Gitblit v1.9.3