yangys
2025-08-18 254a64e2a3b773e6f743c179916db2c8c31ff140
处理其他文件在固化后消失的问题
已删除1个文件
已添加1个文件
已修改6个文件
274 ■■■■ 文件已修改
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/cure/CureFinishOperateTask.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramAnnotationService.java 116 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/test/MyTest2Controller.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/test/MyTestController.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/test/OssTestController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/resources/rebel.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/test/java/org/springblade/mdm/program/service/ProgramAnnotationServiceTest.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/task/cure/CureFinishOperateTask.java
@@ -22,6 +22,7 @@
import org.springblade.mdm.utils.FileContentUtil;
import org.springblade.system.feign.ISysClient;
import org.springblade.system.pojo.entity.Dict;
import org.springblade.system.pojo.entity.DictBiz;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@@ -45,7 +46,6 @@
    private final OssTemplate ossTemplate;
    private final ProgramAnnotationService programAnnotationService;
    private final MachineService machineService;
    /**
     * é»˜è®¤æœ‰æ•ˆæœŸé—´ï¼ˆæœˆæ•°ï¼‰,2å¹´
@@ -118,16 +118,24 @@
            //处理程序包下层的程序节点111
            List<NcNode> programNodes = nodeService.lambdaQuery().eq(NcNode::getParentId,hisPackageNode.getId()).list();
            FlowProgramFile pfile;
            for(NcNode programNode : programNodes){
                programNode.setIsLastEdition(0);
                programNode.setParentIds(hisPackageNode.getParentIds()+","+hisPackageNode.getId());
                programNode.setIsLastEdition(0);
                pfile = flowProgramFileService.getById(programNode.getFlowProgramFileId());
                if(programNode.getParentId().equals(pkgNode.getId()) && !pfile.isProgram()){
                    //当前固化程序包名下的“其他文件”非程序文件。不设置为老版本,直接挪到固化树下,两个网络之间只交换程序文件,其他文件只能保留
                    programNode.setIsLastEdition(1);
                }
            }
            nodeService.updateBatchById(programNodes);
        }
        nodeService.updateBatchById(historyProgramPackageNodes);
        Machine machine = machineService.getByCode(pkgNode.getMachineCode());
        List<Dict> annoDicts = programAnnotationService.getAnnotionList();
        List<DictBiz> annoDicts = programAnnotationService.getAnnotionList();
        //新的流程文件,需要在包节点下新建,不能用老的
        List<FlowProgramFile> files = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId,pkgNode.getProcessInstanceId()).list();
        for(FlowProgramFile flowProgramFile : files){
@@ -156,28 +164,31 @@
        }
    }
    /**
     * è®¾ç½®å›ºåŒ–注释,实现方式,获取文件字节下,修改后替换文件
     * @param flowProgramFile oss æ–‡ä»¶
     *
     */
    void setGhAnnotation(FlowProgramFile flowProgramFile,String machineGroup,List<Dict> annoDicts) throws IOException {
    void setGhAnnotation(FlowProgramFile flowProgramFile,String machineGroup,List<DictBiz> annoDicts) throws IOException {
        String ossName = flowProgramFile.getOssName();
        //
        try(InputStream ins = ossTemplate.statFileStream(ossName);){
            byte[] bytes = IOUtils.toByteArray(ins);
            ByteArrayInputStream byteInputStream =  new ByteArrayInputStream(bytes);
            InputStream finishedStream = programAnnotationService.setGHAnnotation(byteInputStream,machineGroup,annoDicts);
            /*
            String annoTxt = programAnnotationService.generateAnnotation("GH",machineGroup,annoDicts);
            int statusLineIndex = 2;
            String line2 = FileContentUtil.readLineAt(byteInputStream,statusLineIndex);//第三行应该是状态注释
            //int statusLineIndex = 2;
            String line2 = FileContentUtil.readLineAt(byteInputStream,ProgramAnnotationService.STATUS_LINE_INDEX);//第三行应该是状态注释
            byteInputStream.reset();
            InputStream finishedStream;
            if(programAnnotationService.isAnnotation(line2,machineGroup,annoDicts)){
                finishedStream = FileContentUtil.replaceAtLine(byteInputStream,statusLineIndex,annoTxt);
                finishedStream = FileContentUtil.replaceAtLine(byteInputStream,ProgramAnnotationService.STATUS_LINE_INDEX,annoTxt);
            }else{
                finishedStream = FileContentUtil.insertLine(byteInputStream,statusLineIndex,annoTxt);
            }
                finishedStream = FileContentUtil.insertLine(byteInputStream,ProgramAnnotationService.STATUS_LINE_INDEX,annoTxt);
            }*/
            try(finishedStream) {
                finishedStream.reset();
                BladeFile bfile = ossTemplate.putFile(flowProgramFile.getName(), finishedStream);
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/NcProgramExportDNCService.java
@@ -123,14 +123,16 @@
        }else if(programPackageNode.hasCured()){
            status = "GH";
        }
        List<Dict> annotationList = programAnnotationService.getAnnotionList();
        //List<Dict> annotationList = programAnnotationService.getAnnotionList();
        for (NcNode node : programNodes) {
            String filePathInZip = packageFolder + node.getName();
            programFile = this.flowProgramFileService.getById(node.getFlowProgramFileId());
            if(programFile.isProgram()) {//程序文件,才会加入压缩包
                InputStream inputStream = ossTemplate.statFileStream(programFile.getOssName());
                InputStream addedIns1 = addSendDirAnnotation(inputStream, machine, annotationList);
                InputStream addedIns2 = addProgramStatusAnnotation(addedIns1, status, machine, annotationList);
                //InputStream addedIns1 = addSendDirAnnotation(inputStream, machine, annotationList);
                //InputStream addedIns2 = addProgramStatusAnnotation(addedIns1, status, machine, annotationList);
                String sendDir = machine.getProgSendDir()==null? StringUtil.EMPTY:machine.getProgSendDir();
                InputStream addedIns2 = programAnnotationService.setSendDirAndStatusAnnotation(sendDir,status,inputStream,machine.getMachineGroupCode());
                this.addInputStreamToZip(zipOut, addedIns2, filePathInZip);
            }
        }
@@ -143,13 +145,14 @@
     * @param inputStream
     * @return
     */
    /*
    InputStream addSendDirAnnotation(InputStream inputStream,Machine machine,List<Dict> annotationList) throws IOException {
        //检测第二行是否是路径
        String annotationText = programAnnotationService.generateAnnotation(machine.getProgSendDir()==null? StringUtil.EMPTY:machine.getProgSendDir(),machine.getMachineGroupCode(),annotationList);
        //TODO æ”¹åˆ¤æ–­è¡Œå†…容
        return FileContentUtil.insertLine(inputStream,1,annotationText);
    }
    }*/
    /**
     * æ·»åŠ ç¨‹åºä¸“æ”¹çš„æ³¨é‡Š
@@ -160,11 +163,12 @@
     * @return
     * @throws IOException
     */
    /*
    InputStream addProgramStatusAnnotation(InputStream inputStream,String status,Machine machine,List<Dict> annotationList) throws IOException {
        String annoText= programAnnotationService.generateAnnotation(status,machine.getMachineGroupCode(),annotationList);
        return FileContentUtil.insertLine(inputStream,2,annoText);
    }
    }*/
    /**
     * åˆ¤æ–­ä¸€è¡Œæ–‡æœ¬æ˜¯å¦æ˜¯æ³¨é‡Š
@@ -172,11 +176,12 @@
     * @param annotationList
     * @return
     */
    /*
    boolean isAnnotation(String line,List<Dict> annotationList){
        boolean isAnno = false;
        return isAnno;
    }
    }*/
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramAnnotationService.java
@@ -4,12 +4,10 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.oss.model.BladeFile;
import org.springblade.core.tool.api.R;
import org.springblade.mdm.flow.entity.FlowProgramFile;
import org.springblade.mdm.utils.FileContentUtil;
import org.springblade.system.feign.IDictClient;
import org.springblade.system.pojo.entity.Dict;
import org.springblade.system.feign.IDictBizClient;
import org.springblade.system.pojo.entity.DictBiz;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -30,17 +28,32 @@
public class ProgramAnnotationService {
    @Autowired
    private IDictClient dictClient;
    private IDictBizClient bizDictClient;
    private static final String DEFAULT_ANNOTATION_SETTING = "(,)";
    public static final String ANNOTATION_DICT = "machine_annotation";
    /**
     * å‘送目录行索引(第2行) 0 based
     */
    public static final int SENDPATH_LINE_INDEX = 1;
    /**
     * çŠ¶æ€è¡Œç´¢å¼•ï¼ˆç¬¬ä¸‰è¡Œï¼‰ 0 based
     */
    public static final int STATUS_LINE_INDEX = 2;
    public List<Dict> getAnnotionList(){
        List<Dict> annotationList;
        R<List<Dict>> dictsResult = dictClient.getList(ANNOTATION_DICT);
        if(dictsResult.isSuccess()) {
            annotationList = dictsResult.getData();
    public static final String SQ = "SQ";
    public static final String GH = "GH";
    public static final String PL = "PL";
    public List<DictBiz> getAnnotionList(){
        List<DictBiz> annotationList;
        //R<List<Dict>> dictsResult = dictClient.getList(ANNOTATION_DICT);
        R<List<DictBiz>> dictBizResult = bizDictClient.getList(ANNOTATION_DICT);
        R<List<DictBiz>> gr = bizDictClient.getList("machine_group");
        R<List<DictBiz>> gcate = bizDictClient.getList("org_category");
        if(dictBizResult.isSuccess()) {
            annotationList = dictBizResult.getData();
        }else{
            annotationList = Collections.emptyList();
        }
@@ -55,9 +68,9 @@
     * @param annotationList æ³¨é‡Šæ³¨é‡Šå­—典项列表
     * @return
     */
    public boolean isAnnotation(String line,String machineGroupCode,List<Dict> annotationList){
    public boolean isAnnotation(String line,String machineGroupCode,List<DictBiz> annotationList){
        boolean isAnno = false;
        Optional<Dict> dictOpt = annotationList.stream().filter(dict -> {return dict.getDictKey().equals(machineGroupCode);}).findFirst();
        Optional<DictBiz> dictOpt = annotationList.stream().filter(dict -> {return dict.getDictKey().equals(machineGroupCode);}).findFirst();
        String annotationSetting = DEFAULT_ANNOTATION_SETTING;
        if(dictOpt.isPresent()) {
            annotationSetting = dictOpt.get().getRemark();
@@ -75,13 +88,12 @@
    public String generateAnnotation(String oriTest,String machineGroupCode,List<Dict> annotationList) {
    public String generateAnnotation(String oriTest,String machineGroupCode,List<DictBiz> annotationList) {
        String annotation = oriTest;
        String begin = "(";
        String end = ")";
        Optional<Dict> dictOpt = annotationList.stream().filter(dict -> {return dict.getDictKey().equals(machineGroupCode);}).findFirst();
        Optional<DictBiz> dictOpt = annotationList.stream().filter(dict -> {return dict.getDictKey().equals(machineGroupCode);}).findFirst();
        String annotationSetting = DEFAULT_ANNOTATION_SETTING;
        if(dictOpt.isPresent()) {
            annotationSetting = dictOpt.get().getRemark();
@@ -99,12 +111,12 @@
        return annotation;
    }
    public String[] getAnnotationStartAndEnd(String machineGroupCode,List<Dict> annotationList) {
    public String[] getAnnotationStartAndEnd(String machineGroupCode,List<DictBiz> annotationList) {
        String begin = "(";
        String end = ")";
        Optional<Dict> dictOpt = annotationList.stream().filter(dict -> {return dict.getDictKey().equals(machineGroupCode);}).findFirst();
        Optional<DictBiz> dictOpt = annotationList.stream().filter(dict -> {return dict.getDictKey().equals(machineGroupCode);}).findFirst();
        String annotationSetting = DEFAULT_ANNOTATION_SETTING;
        if(dictOpt.isPresent()) {
            annotationSetting = dictOpt.get().getRemark();
@@ -123,7 +135,7 @@
    }
    public String removeAnnotation(String machineGroupCode,String text,String begin,String end){
        List<Dict> annoDicts = getAnnotionList();
        List<DictBiz> annoDicts = getAnnotionList();
        String[] arr = getAnnotationStartAndEnd(machineGroupCode,annoDicts);
        return removeAnnotationInner(text,begin,end);
    }
@@ -133,31 +145,31 @@
        return temp;
    }
    /**
     * ä¸ºç¨‹åºæ–‡ä»¶å¢žåŠ æ³¨é‡Š
     * @param oriText åŽŸå§‹æ–‡æœ¬
     * @param lineIndex è¡Œç´¢å¼• 0 based
     * @param inputStream æ–‡ä»¶çš„输入流
     * @param machineGroup æœºåºŠç»„ ç”Ÿæˆæ³¨é‡Šç”¨
     * @return åŠ æ³¨é‡ŠåŽçš„æµ
     * è®¾ç½®å›ºåŒ–注释行
     * @param inputStream
     * @param machineGroup
     * @param annoDicts
     * @return
     * @throws IOException
     */
    public InputStream setAnnotation(String oriText,int lineIndex,InputStream inputStream, String machineGroup) throws IOException {
        List<Dict> annoDicts = getAnnotionList();
    public InputStream setGHAnnotation(InputStream inputStream, String machineGroup,List<DictBiz> annoDicts) throws IOException {
        //
        InputStream finishedStream;
        try(inputStream){
            ByteArrayInputStream byteInputStream =  new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
            String annoTxt = generateAnnotation(oriText,machineGroup,annoDicts);//加了注释之后的文本
            String annoTxt = generateAnnotation(GH,machineGroup,annoDicts);//加了注释之后的文本
            String lineText = FileContentUtil.readLineAt(byteInputStream,lineIndex);//第三行应该是状态注释
            String lineText = FileContentUtil.readLineAt(byteInputStream,STATUS_LINE_INDEX);//第三行应该是状态注释
            byteInputStream.reset();
            if(isAnnotation(lineText,machineGroup,annoDicts)){
                finishedStream = FileContentUtil.replaceAtLine(byteInputStream,lineIndex,annoTxt);
                finishedStream = FileContentUtil.replaceAtLine(byteInputStream,STATUS_LINE_INDEX,annoTxt);
            }else{
                finishedStream = FileContentUtil.insertLine(byteInputStream,lineIndex,annoTxt);
                finishedStream = FileContentUtil.insertLine(byteInputStream,STATUS_LINE_INDEX,annoTxt);
            }
            finishedStream.reset();
@@ -165,5 +177,49 @@
        return finishedStream;
    }
    /**
     * ä¸ºè¾“入流设置发送目录(第二行)和状态(第三行)
     * @param sendPath å‘送路径
     * @param statusText çŠ¶æ€æ–‡æœ¬
     * @param inputStream è¾“入流
     * @param machineGroup æœºåºŠç»„代码
     * @return åŠ å¥½å‘é€è·¯å¾„å’ŒçŠ¶æ€æ–‡æœ¬çš„è¾“å…¥æµ
     * @throws IOException
     */
    public InputStream setSendDirAndStatusAnnotation(String sendPath,String statusText,InputStream inputStream, String machineGroup) throws IOException {
        List<DictBiz> annoDicts = getAnnotionList();
        InputStream finishedStream;
        try(inputStream){
            ByteArrayInputStream byteInputStream =  new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
            //1加入发送路径的注释
            String sendPathAnnotation = generateAnnotation(sendPath,machineGroup,annoDicts);//加了注释之后的文本
            InputStream insAfterSetSendDir ;
            String sendDirLine = FileContentUtil.readLineAt(byteInputStream,SENDPATH_LINE_INDEX);//第2行是发送路径
            byteInputStream.reset();
            String statusLine = FileContentUtil.readLineAt(byteInputStream,STATUS_LINE_INDEX);//第三行是状态注释
            byteInputStream.reset();
            if(isAnnotation(sendDirLine,machineGroup,annoDicts)){
                insAfterSetSendDir = FileContentUtil.replaceAtLine(byteInputStream,SENDPATH_LINE_INDEX,sendPathAnnotation);
            }else{
                insAfterSetSendDir = FileContentUtil.insertLine(byteInputStream,SENDPATH_LINE_INDEX,sendPathAnnotation);
            }
            insAfterSetSendDir.reset();
            //加入状态注释行
            String statusAnnotation = generateAnnotation(statusText,machineGroup,annoDicts);//注释后的状态文本
            if(isAnnotation(statusLine,machineGroup,annoDicts)){
                finishedStream = FileContentUtil.replaceAtLine(insAfterSetSendDir,STATUS_LINE_INDEX,statusAnnotation);
            }else{
                finishedStream = FileContentUtil.insertLine(insAfterSetSendDir,STATUS_LINE_INDEX,statusAnnotation);
            }
        }
        return finishedStream;
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/test/MyTest2Controller.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
package org.springblade.mdm.test;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.springblade.core.tool.api.R;
import org.springblade.mdm.basesetting.machine.entity.Machine;
import org.springblade.mdm.gkw.programnode.entity.MachineFile;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.service.NcNodeService;
import org.springblade.mdm.program.service.ProgramAnnotationService;
import org.springblade.mdm.task.MachineFileScanTask;
import org.springblade.mdm.utils.FileContentUtil;
import org.springblade.system.feign.IDictBizClient;
import org.springblade.system.pojo.entity.DictBiz;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
@Slf4j
@RestController
@RequestMapping("/pure")
@Tag(name = "测试", description = "测试")
public class MyTest2Controller {
    @Autowired
    private IDictBizClient bizDictClient;
    @GetMapping("/dict-biz")
    @Operation(summary = "替换注释", description = "test扫描")
    public R<List<DictBiz>> giz(String code) throws IOException {
        return this.bizDictClient.getList(code);
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/test/MyTestController.java
@@ -3,13 +3,17 @@
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.springblade.core.tool.api.R;
import org.springblade.mdm.basesetting.machine.entity.Machine;
import org.springblade.mdm.gkw.programnode.entity.MachineFile;
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.service.NcNodeService;
import org.springblade.mdm.program.service.ProgramAnnotationService;
import org.springblade.mdm.task.MachineFileScanTask;
import org.springblade.mdm.utils.FileContentUtil;
import org.springblade.system.feign.IDictBizClient;
import org.springblade.system.pojo.entity.DictBiz;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -18,6 +22,7 @@
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
@Slf4j
@@ -31,7 +36,10 @@
    @Autowired
    private MachineFileScanTask machineFileScanTask;
    @Autowired
    private ProgramAnnotationService programAnnotationService;
    @Autowired
    private IDictBizClient bizDictClient;
    /**
     * æ–°å¢ž
     */
@@ -71,4 +79,27 @@
        return R.success();
    }
    @GetMapping("/repalce-anno")
    @Operation(summary = "替换注释", description = "test扫描")
    public R<List<String>> repalceAnno() throws IOException {
        InputStream res;
        try(FileInputStream fis = new FileInputStream("d:/b.txt");) {
            res = programAnnotationService.setSendDirAndStatusAnnotation("D:/mysend", "PL", fis,"FANUC");
        }
        List<String> lines = null;
        if(res!=null) {
            try(res) {
                lines = IOUtils.readLines(res, "utf-8");
            }
        }
        return R.data(lines);
    }
    @GetMapping("/dict-biz")
    @Operation(summary = "替换注释", description = "test扫描")
    public R<List<DictBiz>> giz(String code) throws IOException {
        return this.bizDictClient.getList(code);
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/test/OssTestController.java
@@ -16,6 +16,7 @@
import org.springblade.mdm.program.service.ProgramAnnotationService;
import org.springblade.mdm.utils.FileContentUtil;
import org.springblade.system.pojo.entity.Dict;
import org.springblade.system.pojo.entity.DictBiz;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -98,7 +99,7 @@
        String filename = "CP3-1-1-1.txt";
        String machineGroup = "FANUC";
        List<Dict> annoDicts = programAnnotationService.getAnnotionList();
        List<DictBiz> annoDicts = programAnnotationService.getAnnotionList();
        BladeFile bfile = null;
        try(InputStream ins = ossTemplate.statFileStream(ossName);){
            byte[] bytes = IOUtils.toByteArray(ins);
blade-service/blade-mdm/src/main/resources/rebel.xml
ÎļþÒÑɾ³ý
blade-service/blade-mdm/src/test/java/org/springblade/mdm/program/service/ProgramAnnotationServiceTest.java
@@ -2,7 +2,7 @@
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springblade.system.pojo.entity.Dict;
import org.springblade.system.pojo.entity.DictBiz;
import java.util.Arrays;
import java.util.List;
@@ -12,40 +12,37 @@
    @Test
    public void testIsAnnotation(){
        ProgramAnnotationService s = new ProgramAnnotationService();
        Dict fanucDict = new Dict();
        DictBiz fanucDict = new DictBiz();
        fanucDict.setCode("machine_annotation");
        fanucDict.setDictKey("FANUC");
        fanucDict.setRemark("(,)");
        Dict xmz = new Dict();
        DictBiz xmz = new DictBiz();
        xmz.setCode("machine_annotation");
        xmz.setDictKey("XIMENZI");
        xmz.setRemark("*-,");
        List<Dict> dictList = Arrays.asList(fanucDict, xmz);
        List<DictBiz> dictList = Arrays.asList(fanucDict, xmz);
        Assertions.assertTrue(s.isAnnotation("(abc)","FANUC", dictList));
        Assertions.assertFalse(s.isAnnotation("*-","FANUC",dictList));
        Assertions.assertTrue(s.isAnnotation("*-","XIMENZI", dictList));
    }
    @Test
    public void testIsAnnotation2(){
        ProgramAnnotationService s = new ProgramAnnotationService();
        Dict fanucDict = new Dict();
        DictBiz fanucDict = new DictBiz();
        fanucDict.setCode("machine_annotation");
        fanucDict.setDictKey("FANUC");
        fanucDict.setRemark("(,)");
        Dict xmz = new Dict();
        DictBiz xmz = new DictBiz();
        xmz.setCode("machine_annotation");
        xmz.setDictKey("XIMENZI");
        xmz.setRemark("*-,");
        List<Dict> dictList = Arrays.asList(fanucDict, xmz);
        List<DictBiz> dictList = Arrays.asList(fanucDict, xmz);
        Assertions.assertEquals("(A)",s.generateAnnotation("A","FANUC",dictList));
        Assertions.assertEquals("*-A",s.generateAnnotation("A","XIMENZI",dictList));
    }