blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/RegExpConstants.java
@@ -7,7 +7,7 @@ /** * ç¨åºæä»¶å æ£å */ public static final Pattern PROGRAM_FILE_PATTERN = Pattern.compile("^([\\w\\-]+)-([0-9a-zA-Z]+)-([0-9a-zA-Z]+)-(\\d+)-(\\d+)-?([Pp]\\d+)?(\\.[a-zA-Z]+)?$"); public static final Pattern PROGRAM_FILE_PATTERN = Pattern.compile("^([\\w\\-]+)-([0-9a-zA-Z]+)-([\\u4e00-\\u9fa5a-zA-Z0-9]+)-(\\d+)-(\\d+)-?([Pp]\\d+)?(\\.[a-zA-Z]+)?$"); //public static final Pattern PROGRAM_PACKAGE_PATTERN = Pattern.compile("[\\w\\-]+\\-\\w+\\-\\w+"); public static final Pattern PROGRAM_PACKAGE_PATTERN = Pattern.compile("([\\w\\-]+)-[0-9a-zA-Z]+-[0-9a-zA-Z]+"); blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/ZipConstants.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,8 @@ package org.springblade.mdm.commons.contants; public class ZipConstants { /** * è¯éªè§£å çç¼ç æ°ç» */ public static final String[] TRY_ENCODINGS = {"UTF-8","GBK", "GB2312", "ISO-8859-1"}; } blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/mapper/MdmDictBizMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,17 @@ package org.springblade.mdm.commons.mapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; import org.springblade.core.mp.mapper.BladeMapper; import org.springblade.mdm.flow.entity.ApproveRecord; import org.springblade.mdm.flow.vo.DoneQueryVO; import org.springblade.mdm.flow.vo.FlowVO; import org.springblade.system.pojo.entity.DictBiz; import java.util.List; public interface MdmDictBizMapper{ List<DictBiz> getList(@Param("code") String code); } blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/mapper/MdmDictBizMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.springblade.mdm.commons.mapper.MdmDictBizMapper"> <!--æ¥è¯¢ç¨æ·å·²åå表--> <select id="getList" resultType="org.springblade.system.pojo.entity.DictBiz"> select id,code,dict_key,dict_value,remark from blade_dict_biz where code=#{code} and is_deleted=0 order by sort </select> </mapper> blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/MdmDictBizService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,28 @@ package org.springblade.mdm.commons.service; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.mdm.commons.mapper.MdmDictBizMapper; import org.springblade.system.pojo.entity.DictBiz; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * ç³»ç»åæ°è·åæå¡ * * @author yangys */ @Slf4j @Service @AllArgsConstructor public class MdmDictBizService { @Autowired private MdmDictBizMapper mdmDictBizMapper; public List<DictBiz> getList(String code){ return mdmDictBizMapper.getList(code); } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/config/InitBean.java
@@ -62,12 +62,15 @@ * åå§åçæ§ç®å½ */ void initMachineDirMonitor() { /* boolean locked = directorLockService.acquireLock(); if (!locked) { log.info("åä¼ æ¥æ¶ç®å½å·²ç»è¢«å ¶ä»é¨ç½²ç¹ä½éå®ï¼ç´æ¥è¿å"); return; } */ List<Machine> machineList = machineService.getEnableMachines();; List<WatchInfo> monitorInfoList = new ArrayList<>(); machineList.forEach(m -> { blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileScanService.java
@@ -180,16 +180,16 @@ public int readProgramStatus(Path filePath,String controlSystem,List<DictBiz> annotatiionList) throws IOException { int programStatus = MachineFile.PROGRAM_STATUS_UNKNOWN; try(InputStream ins = Files.newInputStream(filePath); BufferedInputStream bis = new BufferedInputStream(ins)){ BufferedInputStream byteInsStream = new BufferedInputStream(ins)){ boolean isText= FileContentUtil.isTextFile(bis); boolean isText= FileContentUtil.isTextFile(byteInsStream); if(!isText){ return MachineFile.PROGRAM_STATUS_UNKNOWN; } bis.reset(); byteInsStream.reset(); AnnotationProcessor annoProcessor = ProcessorHelper.getProcessor(controlSystem,annoConfig); String statusLine = FileContentUtil.readLineAt(ins, annoProcessor.getAnnotationProperties().getStatusLineIndex()); String statusLine = FileContentUtil.readLineAt(byteInsStream, annoProcessor.getAnnotationProperties().getStatusLineIndex()); if(AnnotationUtil.isAnnotation(statusLine,controlSystem,annotatiionList)){ String progStatusTxt = AnnotationUtil.removeAnnotation(controlSystem,statusLine,annotatiionList); if(AnnotationUtil.SQ.equals(progStatusTxt)){ blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DNCSendBackService.java
@@ -1,7 +1,6 @@ package org.springblade.mdm.program.service; import lombok.AllArgsConstructor; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FilenameUtils; @@ -18,10 +17,7 @@ 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.basesetting.producedivision.entity.QinzheFgb; import org.springblade.mdm.basesetting.producedivision.service.QinzheFgbService; import org.springblade.mdm.commons.contants.RegExpConstants; import org.springblade.mdm.commons.service.ParamService; import org.springblade.mdm.commons.contants.ZipConstants; import org.springblade.mdm.flow.entity.FlowProgramFile; import org.springblade.mdm.flow.service.CureFlowService; import org.springblade.mdm.flow.service.FlowCommonService; @@ -32,11 +28,8 @@ import org.springblade.mdm.program.service.programannotation.*; import org.springblade.mdm.program.vo.DncSendBackData; import org.springblade.mdm.program.vo.DncSendBackFile; import org.springblade.mdm.program.vo.ProgramAnnotation; import org.springblade.mdm.utils.FileContentUtil; import org.springblade.mdm.utils.ProgramFileNameParser; import org.springblade.mdm.utils.ZipTextFileContentUtil; import org.springblade.system.pojo.entity.DictBiz; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -49,11 +42,8 @@ import java.nio.file.StandardOpenOption; import java.time.Duration; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipInputStream; /** * DNCåä¼ æä»¶å¤çæå¡ @@ -82,7 +72,7 @@ * å离åæä»¶æ«å°¾ç模å¼ï¼P+æ°å */ private static final String P_NUMBER_PATTERN = "(?i)P\\d+"; static String[] encodings = {"UTF-8","GBK", "GB2312", "ISO-8859-1"}; //static String[] encodings = {"UTF-8","GBK", "GB2312", "ISO-8859-1"}; private String getFileKey(){ return "dncimpfile-"+ AuthUtil.getUserId(); } @@ -125,7 +115,7 @@ List<DncSendBackData> result = null; ByteArrayInputStream byteInsStream = new ByteArrayInputStream(FileUtil.copyToByteArray(inputStream)); for (String encoding : encodings) { for (String encoding : ZipConstants.TRY_ENCODINGS) { try { result = parseProgramListByCharset(byteInsStream,Charset.forName(encoding)); log.error("使ç¨ç¼ç {} è§£ææå ",encoding); @@ -274,7 +264,7 @@ Map<Long, List<FlowProgramFile>> pkgIdFileMap = new HashMap<>(); //ByteArrayInputStream byteInsStream = new ByteArrayInputStream(FileUtil.copyToByteArray(inputStream)); for (String encoding : encodings) { for (String encoding : ZipConstants.TRY_ENCODINGS) { try { pkgIdFileMap = dealWithBackFileWithCharset(ossFileName,acceptIdList,Charset.forName(encoding)); log.error("使ç¨ç¼ç {} è§£ææå ",encoding); @@ -290,7 +280,7 @@ /** * å¤çåä¼ æä»¶ * @param inputStream * @param ossFileName * @param acceptIdList * @return * @throws IOException blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/MdmProgramImportService.java
@@ -16,6 +16,7 @@ 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.machinefile.entity.FileSendRecord; import org.springblade.mdm.machinefile.service.FileSendRecordService; @@ -30,6 +31,8 @@ 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; @@ -85,14 +88,8 @@ Path tempZipFile = Files.createTempFile("mdmimpfile-"+System.currentTimeMillis(), ".zip"); file.transferTo(tempZipFile); extractZipToTempDir(tempZipFile,extractDir); }else{ //æ®éæä»¶ï¼ç´æ¥æ¾å ¥extractæä»¶å¤¹ String basename = FilenameUtils.getBaseName(file.getOriginalFilename()); String ext = FilenameUtils.getExtension(file.getOriginalFilename()); //Path filepath = Files.createTempFile(extractDir,basename,StringUtils.isEmpty(ext) ? "": "."+ext); //Path filepath = Files.createFile(); file.transferTo(Paths.get(extractDir.toString()+File.separator+file.getOriginalFilename())); } @@ -111,13 +108,24 @@ * @param extractDir ç®æ ç®å½ * @throws IOException æä»¶æä½å¼å¸¸ */ public void extractZipToTempDir(Path zipFilePath,Path extractDir) throws IOException { public void extractZipToTempDir(Path zipFilePath,Path extractDir) throws IOException{ for (String encoding : ZipConstants.TRY_ENCODINGS) { try { extractZipToTempDirWithCharset(zipFilePath,extractDir,Charset.forName(encoding)); log.error("使ç¨ç¼ç {} è§£ææå ",encoding); break; } catch (Exception e) { log.error("使ç¨ç¼ç {} è§£æå¤±è´¥: ",encoding,e); } } } public void extractZipToTempDirWithCharset(Path zipFilePath, Path extractDir, Charset charset) throws IOException { // è·åç³»ç»ä¸´æ¶ç®å½ String tempDir = System.getProperty("java.io.tmpdir"); // å建解åç®æ ç®å½ï¼å¨ä¸´æ¶ç®å½ä¸å建ä¸ä¸ªå¯ä¸åç®å½ï¼ try (InputStream fis = Files.newInputStream(zipFilePath); ZipInputStream zis = new ZipInputStream(fis)) { ZipInputStream zis = new ZipInputStream(fis,charset)) { ZipEntry zipEntry = zis.getNextEntry(); while (zipEntry != null) { @@ -177,8 +185,7 @@ try (Stream<Path> paths = Files.walk(extractDir)) { List<Path> filePathList = paths .filter(Files::isRegularFile).toList(); // åªä¿çæ®éæä»¶ï¼æé¤ç®å½ //.collect(Collectors.toList()); //System.out.println("æææä»¶"+filePathList); for(Path path : filePathList){ list.add(readFileToVO(path)); } @@ -205,19 +212,47 @@ }*/ 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ç¼ç è§£æ pnmameVO = ProgramFileNameParser.parseProgramName(new String(getUTF8BytesFromGBKString(fiilename), StandardCharsets.UTF_8)); } return pnmameVO; } /** * å°æä»¶ç»ç»æVO * @param path æä»¶path * @return vo */ MdmProgramImportVO readFileToVO(Path path){ MdmProgramImportVO readFileToVO(Path path) throws UnsupportedEncodingException { MdmProgramImportVO vo = new MdmProgramImportVO(); vo.setFilename(path.getFileName().toString()); ProgramNameVO pnmameVO = ProgramFileNameParser.parseProgramName(vo.getFilename()); ProgramNameVO pnmameVO = tryParseProgramName(vo.getFilename()); vo.setDrawingNo(pnmameVO.getDrawingNo()); //vo.setDrawingNo(parseDrawingNo(vo.getFilename())); try (InputStream inputStream = Files.newInputStream(path)) { // 使ç¨è¾å ¥æµè¯»åæä»¶å 容 @@ -234,7 +269,7 @@ AnnotationProperties defAnnoProperties = AnnotationProperties.getDefault(); String sendPathLine = FileContentUtil.readLineAt(bas,defAnnoProperties.getSendPathLineIndex()); //bas.mark(0); bas.reset(); String statusLine = FileContentUtil.readLineAt(bas,defAnnoProperties.getStatusLineIndex()); log.info("sendPathLine={}", sendPathLine); @@ -242,7 +277,6 @@ Machine matchedMachine = machineService.getMachineBySendPathAnnotation(sendPathLine); if (matchedMachine != null) { //vo.setName(parseProgramName(vo.getFilename())); vo.setName(pnmameVO.logicProgramName()); vo.setMachineCode(matchedMachine.getCode()); blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramAnnotationService.java
@@ -7,6 +7,7 @@ import org.jetbrains.annotations.NotNull; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.tool.api.R; import org.springblade.mdm.commons.service.MdmDictBizService; import org.springblade.mdm.program.service.programannotation.AnnotationUtil; import org.springblade.mdm.program.vo.ProgramAnnotation; import org.springblade.mdm.utils.FileContentUtil; @@ -33,7 +34,8 @@ @Autowired private IDictBizClient bizDictClient; @Autowired private MdmDictBizService mdmDictBizService; //private static final String DEFAULT_ANNOTATION_SETTING = "(,)"; public static final String ANNOTATION_DICT = "machine_annotation"; @@ -54,6 +56,7 @@ public List<DictBiz> getAnnotionDictList(){ /* List<DictBiz> annotationList; R<List<DictBiz>> dictBizResult = bizDictClient.getList(ANNOTATION_DICT); @@ -63,7 +66,8 @@ annotationList = Collections.emptyList(); } return annotationList; return annotationList;*/ return mdmDictBizService.getList(ANNOTATION_DICT); } blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/MachineFileScanTask.java
@@ -17,13 +17,7 @@ @EnableScheduling public class MachineFileScanTask { @Autowired private MachineFileService machineFileService; @Autowired private MachineService machineService; @Autowired private ParamService paramService; @Autowired private ProgramAnnotationService programAnnotationService; @Autowired private MachineFileScanService machineFileScanService; // æ¯5ç§æ§è¡ä¸æ¬¡ blade-service/blade-mdm/src/main/java/org/springblade/mdm/test/MyTestController.java
@@ -8,9 +8,6 @@ import jakarta.xml.soap.SOAPException; import jakarta.xml.ws.WebServiceContext; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.apache.neethi.AssertionBuilderFactory; import org.apache.ws.commons.schema.XmlSchemaSerializer; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.SpringUtil; blade-service/blade-mdm/src/test/java/org/springblade/mdm/utils/ProgramFileNameParserTest.java
@@ -41,6 +41,15 @@ ProgramNameVO vo = ProgramFileNameParser.parseProgramName("CS-A-1-1-1-P1.nc"); Assertions.assertTrue(vo.isValidFilename()); vo = ProgramFileNameParser.parseProgramName("CS-A-æ -1-1.txt"); Assertions.assertEquals("CS",vo.getDrawingNo()); Assertions.assertEquals("æ ",vo.getProcessEdition()); ProgramNameVO pnmame1 = ProgramFileNameParser.parseProgramName("CP3-2-1-æ -1-1.txt"); Assertions.assertEquals("æ ",pnmame1.getProcessEdition()); } }