yangys
2025-09-13 083df8d788c95c009a94378e620684eb5de2bd21
注释问题修复
已删除1个文件
已添加5个文件
已重命名1个文件
已修改18个文件
560 ■■■■ 文件已修改
blade-service/blade-mdm/pom.xml 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/ParamConstants.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/controller/RemindController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/EmailService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/InternalEmailProperties.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/InternalEmailService.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/ParamService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowBusinessService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileScanService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/MachineBackFileExcelVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DNCSendBackService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/ProgramAnnotationService.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AbstractProcessor.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProcessor.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProperties.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationUtil.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/DefaultProcessor.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/FanucProcessor.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/ProcessorHelper.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/InternalEmailNotifyTask.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/main/java/org/springblade/mdm/test/MyTestController.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/test/java/org/springblade/mdm/commons/service/InternalEmailServiceTest.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/src/test/java/org/springblade/mdm/program/service/programannotation/AnnotationUtilTest.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
blade-service/blade-mdm/pom.xml
@@ -108,6 +108,36 @@
            <version>4.0.28</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>4.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>4.1.3</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-xjc</artifactId>
            <version>4.0.5</version>
        </dependency>
       <!-- <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-core</artifactId>
            <version>2.3.0.1</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>4.0.5</version>
            <scope>runtime</scope>
        </dependency>-->
    </dependencies>
    <build>
        <plugins>
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/contants/ParamConstants.java
@@ -33,4 +33,17 @@
     * é‡å¤æ´¾å·¥å¤©æ•°éªŒè¯é—´éš”天数
     */
    public static String TASK_EXPIRE_DAYS = "taskExpireDays";
    /**
     * é‚®ä»¶é€šçŸ¥å¼€å¯æ ‡å¿—:1:开启;0:关闭
     */
    public static String EMAIL_NOTIFY_FLAG = "emailNotifyFlag";
    /**
     * é‚®ä»¶æé†’标志 ï¼šå¼€
     */
    public static String EMAIL_NOTIFY_FLAG_ON = "1";
    /**
     * é‚®ä»¶æé†’标志 ï¼šå…³
     */
    public static String EMAIL_NOTIFY_FLAG_OFF = "1";
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/controller/RemindController.java
@@ -44,7 +44,7 @@
public class RemindController {
    @Autowired
    NcProgramApprovedService ncProgramApprovedService;
    private NcProgramApprovedService ncProgramApprovedService;
    @Autowired
    private FlowBusinessService businessService;
    @Autowired
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/EmailService.java
ÎļþÒÑɾ³ý
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/InternalEmailProperties.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package org.springblade.mdm.commons.service;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "mail-remind")
@Data
public class InternalEmailProperties {
    private String senderAccount;
    private String mailServiceAddr;
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/InternalEmailService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
package org.springblade.mdm.commons.service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
@Service
@Slf4j
public class InternalEmailService {
    @Autowired
    private InternalEmailProperties internalEmailProperties;
    public void send(String fromid,String toids, String ccids, String bccids, String subject, String content, String[] paths) {
        try {
            // åˆ›å»ºåŠ¨æ€å®¢æˆ·ç«¯å·¥åŽ‚
            JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
            // åˆ›å»ºå®¢æˆ·ç«¯
            //Client client = dcf.createClient("http://localhost:8080/services/EmailService?wsdl");
            Object[] result;
            try (Client client = dcf.createClient(internalEmailProperties.getMailServiceAddr())) {
                // è°ƒç”¨æ–¹æ³•
                result = client.invoke("sendInternalMail", fromid, toids, ccids, bccids, subject, content, null);
                // å¤„理响应
                if (result != null && result.length > 0) {
                    System.out.println("响应: " + result[0]);
                }
            }
        }catch(Exception e) {
            log.error("内部邮件发送失败",e);
        }
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/commons/service/ParamService.java
@@ -20,9 +20,6 @@
public class ParamService{
    public static String NETWORK_TYPE= "networkType";
    /**
     * å®¡æ‰¹ç”¨æˆ·è§’色别名参数key,逗号分隔
     */
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/excution/cure/NormalCureFinishDataHandler.java
@@ -22,6 +22,9 @@
import org.springblade.mdm.program.service.NcNodeService;
import org.springblade.mdm.program.service.NcProgramApprovedService;
import org.springblade.mdm.program.service.ProgramAnnotationService;
import org.springblade.mdm.program.service.programannotation.AnnotationProperties;
import org.springblade.mdm.program.service.programannotation.AnnotationUtil;
import org.springblade.mdm.program.service.programannotation.MachineAnnotationConfig;
import org.springblade.mdm.utils.EntityUtil;
import org.springblade.system.feign.ISysClient;
import org.springblade.system.pojo.entity.DictBiz;
@@ -45,9 +48,8 @@
@Component("normalCureFinishDataHandler")
public class NormalCureFinishDataHandler implements FinishDataHandler {
    @Autowired
    private NcProgramApprovedService approvedService;
    @Autowired
    private ApproveRecordService approveRecordService;
    private MachineAnnotationConfig config;
    @Autowired
    private FlowProgramFileService flowProgramFileService;
    @Autowired
@@ -209,8 +211,13 @@
            byte[] bytes = IOUtils.toByteArray(ins);
            ByteArrayInputStream byteInputStream =  new ByteArrayInputStream(bytes);
            InputStream finishedStream = programAnnotationService.setGHAnnotation(byteInputStream,controlSystem,annoDicts);
            //InputStream finishedStream = programAnnotationService.setGHAnnotation(byteInputStream,controlSystem,annoDicts);
            List<DictBiz> annoDictList = programAnnotationService.getAnnotionDictList();
            AnnotationProperties annoProps = config.getConfigMap().get(controlSystem);
            if(annoProps == null){
                annoProps = AnnotationProperties.getDefault();
            }
            InputStream finishedStream =AnnotationUtil.setAnnotationAndGetInputStream(byteInputStream, "GH", annoProps.getStatusLineIndex(), controlSystem, annoDictList);
            try(finishedStream) {
                finishedStream.reset();
                BladeFile bfile = ossTemplate.putFile(flowProgramFile.getName(), finishedStream);
@@ -222,6 +229,7 @@
        }
    }
    /**
     * è®¡ç®—有效期
     * @return
blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/FlowBusinessService.java
@@ -36,7 +36,7 @@
/**
 * æµç¨‹ä¸šåŠ¡å®žçŽ°ç±»
 *
 * @author Chill
 * @author yangys
 */
@Service
@AllArgsConstructor
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/service/MachineFileScanService.java
@@ -8,6 +8,7 @@
import org.springblade.mdm.commons.service.ParamService;
import org.springblade.mdm.machinefile.entity.MachineFile;
import org.springblade.mdm.program.service.ProgramAnnotationService;
import org.springblade.mdm.program.service.programannotation.AnnotationUtil;
import org.springblade.mdm.utils.FileContentUtil;
import org.springblade.system.pojo.entity.DictBiz;
import org.springframework.beans.factory.annotation.Autowired;
@@ -185,7 +186,7 @@
            }
            bis.reset();
            String statusLine = FileContentUtil.readLineAt(ins,ProgramAnnotationService.STATUS_LINE_INDEX);
            if(programAnnotationService.isAnnotation(statusLine,controlSystem,annotatiionList)){
            if(AnnotationUtil.isAnnotation(statusLine,controlSystem,annotatiionList)){
                String progStatusTxt = programAnnotationService.removeAnnotation(controlSystem,statusLine,annotatiionList);
                if(ProgramAnnotationService.SQ.equals(progStatusTxt)){
                    programStatus = MachineFile.PROGRAM_STATUS_TRY;
blade-service/blade-mdm/src/main/java/org/springblade/mdm/machinefile/vo/MachineBackFileExcelVO.java
@@ -6,17 +6,17 @@
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import org.springblade.mdm.commons.vo.BaseVO;
import java.util.Date;
@EqualsAndHashCode(callSuper = true)
@Data
@ColumnWidth(25)
@HeadRowHeight(20)
@ContentRowHeight(18)
@Setter
@Getter
public class MachineBackFileExcelVO extends BaseVO {
    @ExcelProperty("文件名称")
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/DNCSendBackService.java
@@ -26,10 +26,7 @@
import org.springblade.mdm.program.entity.NcNode;
import org.springblade.mdm.program.entity.NcProgramExchange;
import org.springblade.mdm.program.mapper.NcProgramExchangeMapper;
import org.springblade.mdm.program.service.programannotation.AnnotationProcessor;
import org.springblade.mdm.program.service.programannotation.DefaultProcessor;
import org.springblade.mdm.program.service.programannotation.FanucProcessor;
import org.springblade.mdm.program.service.programannotation.MachineAnnotationConfig;
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;
@@ -71,8 +68,6 @@
    private final ParamService paramService;
    private final MachineAnnotationConfig machineAnnotationConfig;
    private final FanucProcessor fanucProcessor;
    private final DefaultProcessor defaultProcessor;
    /**
     * åç¦»å•文件末尾的模式:P+数字
     */
@@ -161,36 +156,30 @@
                    InputStream ins = zipFile.getInputStream(entry);
                    ByteArrayInputStream bais = new ByteArrayInputStream(IOUtils.toByteArray(ins));;
                    progData.setFileBackTime(DateUtil.fromInstant(entry.getLastModifiedTime().toInstant()));
                    //machineAnnotationConfig.getConfigMap().get(machine.getcon)
                    Pattern fanucPattern = Pattern.compile("^[oO]\\d{4}");
                    String testLine = FileContentUtil.readLineAt(bais,2);//TODO,fanuc这行是下发路径,其他机器是状态
                    AnnotationProperties defAnnoProperties =AnnotationProperties.getDefault();
                    statusLine = FileContentUtil.readLineAt(bais,defAnnoProperties.getStatusLineIndex());//状态注释行
                    bais.reset();
                    //boolean isFanuc = fanucPattern.matcher(testLine).matches();
                    boolean isFanuc = !StringUtils.containsAny(testLine,"(SQ)","(GH)","(PL)");
                    if(isFanuc){
                        statusLine = FileContentUtil.readLineAt(bais,3);//fanuc的状态读第4行
                    }else{
                        statusLine = testLine;
                    }
                    if(statusLine.contains("SQ")){
                        //试切
                        programPackageNode = ncNodeService.getLastEditionTryingProgramPackage(packageName);//,processEdition
                        programPackageNode = ncNodeService.getLastEditionTryingProgramPackage(packageName);//TODO è¿˜éœ€æ ¹æ®æœºåºŠç»„(如何获取?根据下发路径获取机床,进而获取),,processEdition
                    }else if(statusLine.contains("GH")){
                        //固化
                        //TODO å›ºåŒ–,根本不需要回传,应该提示报错。或者不进入列表,或列表中不可选则入库
                        programPackageNode = ncNodeService.getLastEditionCuredProgramPackage(packageName);
                    }else if(statusLine.contains("PL")){
                        //偏离
                        programPackageNode =ncNodeService.getLastEditionDeviationProgramPackage(packageName);
                    }else{
                        //查询是否车床,是车床可以放过,按试切处理
                        //查询是否车床/现场编制,是车床可以放过,按试切处理,
                        //TODO çŽ°åœºç¼–åˆ¶çš„ç¨‹åºï¼Œæ‰“åŒ…æ—¶å¿…é¡»åœ¨æ–‡ä»¶ä¸­å¢žåŠ ä¸‹å‘è·¯å¾„ï¼ˆåŠ å…¥åŽï¼‰
                        programPackageNode = ncNodeService.getLastEditionTryingProgramPackage(packageName);
                        if(programPackageNode!=null){
                            Machine machine = machineService.getByCode(programPackageNode.getMachineCode());
                            String chechuangVal = paramService.turninngValue();
                            if(StringUtils.equals(machine.getMachineSpec(),chechuangVal)){
                                //车床
                                ProgramAnnotation pa = programAnnotationService.getProgramAnnotationFormat(machine.getControlSystem(),annotionDictList);
                                ProgramAnnotation pa = AnnotationUtil.getProgramAnnotationFormat(machine.getControlSystem(),annotionDictList);
                                statusLine = pa.addAnnotation(ProgramAnnotationService.SQ);
                            }
                        }
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.program.service.programannotation.AnnotationUtil;
import org.springblade.mdm.program.vo.ProgramAnnotation;
import org.springblade.mdm.utils.FileContentUtil;
import org.springblade.system.feign.IDictBizClient;
@@ -74,6 +75,7 @@
     * @param annotationList æ³¨é‡Šæ³¨é‡Šå­—典项列表
     * @return
     */
    /*
    public boolean isAnnotation(String line,String systemDictVal,List<DictBiz> annotationList){
        ProgramAnnotation progAnnotation = this.getProgramAnnotationFormat(systemDictVal,annotationList);
@@ -86,7 +88,7 @@
    public String generateAnnotation(String oriTest,String systemDictVal,List<DictBiz> annotationList) {
        ProgramAnnotation progAnnotation = this.getProgramAnnotationFormat(systemDictVal,annotationList);
        return progAnnotation.addAnnotation(oriTest);
    }
    }*/
    /**
     * æå–注释中的文本
@@ -94,13 +96,13 @@
     * @param text æ¸…除注释标记
     * @return æ¸…除后的文本
     */
    public String removeAnnotation(String systemDictVal,String text){
        List<DictBiz> annoDicts = getAnnotionDictList();
        return removeAnnotation(systemDictVal,text,annoDicts);
    }
    public String removeAnnotation(String systemDictVal,String text,List<DictBiz> annotatiionList){
        ProgramAnnotation panno = this.getProgramAnnotationFormat(systemDictVal,annotatiionList);
        ProgramAnnotation panno = AnnotationUtil.getProgramAnnotationFormat(systemDictVal,annotatiionList);
        return panno.cleanAnnotation(text);
    }
        /**
@@ -111,9 +113,10 @@
         * @return åŠ å¥½æ³¨é‡Šçš„
         * @throws IOException
         */
        /*
    public InputStream setGHAnnotation(InputStream inputStream, String systemDictVal,List<DictBiz> annoDictList) throws IOException {
        return setAnnotationAndGetInputStream(inputStream, systemDictVal, annoDictList, GH, STATUS_LINE_INDEX);
    }
    }*/
    /**
     * è®¾ç½®åç¦»å•注释
@@ -123,10 +126,12 @@
     * @return åŠ å¥½æ³¨é‡Šçš„è¾“å…¥æµ
     * @throws IOException è®¿é—®æµå¯èƒ½æŠ›å‡ºå¼‚常
     */
    /*
    public InputStream setPldAnnotation(String deviation,InputStream inputStream,String systemDictVal,List<DictBiz> annoDictList) throws IOException {
        return setAnnotationAndGetInputStream(inputStream, systemDictVal, annoDictList, deviation, STATUS_DEVIATION_INDEX);
    }
     */
    /*
    @NotNull
    private InputStream setAnnotationAndGetInputStream(InputStream inputStream, String systemDictVal, List<DictBiz> annoDictList, String text, int lineIndex) throws IOException {
        InputStream finishedStream;
@@ -149,6 +154,7 @@
        return finishedStream;
    }
    */
    /**
     * ä¸ºè¾“入流设置发送目录(第二行)和状态(第三行)
@@ -159,6 +165,7 @@
     * @return åŠ å¥½å‘é€è·¯å¾„å’ŒçŠ¶æ€æ–‡æœ¬çš„è¾“å…¥æµ
     * @throws IOException
     */
    /*
    public InputStream setSendDirAndStatusAnnotation(String sendPath,String statusText,InputStream inputStream, String systemDictVal) throws IOException {
        List<DictBiz> annoDicts = getAnnotionDictList();
@@ -192,7 +199,7 @@
        }
        return finishedStream;
    }
    }*/
    /**
     * è§£æžå‡ºæœºåºŠç¨‹åºæ³¨é‡Šçš„æ ¼å¼
@@ -200,6 +207,7 @@
     * @param annoDictList é…ç½®çš„æ³¨é‡Šå­—典数据
     * @return
     */
    /*
    ProgramAnnotation getProgramAnnotationFormat(String systemDictVal,List<DictBiz> annoDictList){
        String begin;
        String end;
@@ -224,7 +232,7 @@
        programAnnotation.setBegin(begin);
        programAnnotation.setEnd(end);
        return programAnnotation;
    }
    }*/
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AbstractProcessor.java
@@ -5,7 +5,6 @@
import org.springblade.mdm.utils.FileContentUtil;
import org.springblade.system.pojo.entity.DictBiz;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -29,7 +28,7 @@
            ByteArrayInputStream byteInputStream =  new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
            //1加入发送路径的注释
            String sendPathAnnotation = generateAnnotation(annoData.getSendPath(),getControlSystem(),annoDicts);//加了注释之后的文本
            String sendPathAnnotation = AnnotationUtil.generateAnnotation(annoData.getSendPath(),getControlSystem(),annoDicts);//加了注释之后的文本
            String sendDirLine = FileContentUtil.readLineAt(byteInputStream,annotationProperties.getSendPathLineIndex());//第2行是发送路径
            byteInputStream.reset();
@@ -37,7 +36,7 @@
            byteInputStream.reset();
            InputStream insAfterSetSendDir ;
            if(isAnnotation(sendDirLine,getControlSystem(),annoDicts)){
            if(AnnotationUtil.isAnnotation(sendDirLine,getControlSystem(),annoDicts)){
                insAfterSetSendDir = FileContentUtil.replaceAtLine(byteInputStream,annotationProperties.getSendPathLineIndex(),sendPathAnnotation);
            }else{
                insAfterSetSendDir = FileContentUtil.insertLine(byteInputStream,annotationProperties.getSendPathLineIndex(),sendPathAnnotation);
@@ -45,8 +44,8 @@
            insAfterSetSendDir.reset();
            //加入状态注释行
            String statusAnnotation = generateAnnotation(annoData.getProgramStatus(),getControlSystem(),annoDicts);//注释后的状态文本
            if(isAnnotation(statusLine,getControlSystem(),annoDicts)){
            String statusAnnotation = AnnotationUtil.generateAnnotation(annoData.getProgramStatus(),getControlSystem(),annoDicts);//注释后的状态文本
            if(AnnotationUtil.isAnnotation(statusLine,getControlSystem(),annoDicts)){
                finishedStream = FileContentUtil.replaceAtLine(insAfterSetSendDir,annotationProperties.getStatusLineIndex(),statusAnnotation);
            }else{
                finishedStream = FileContentUtil.insertLine(insAfterSetSendDir,annotationProperties.getStatusLineIndex(),statusAnnotation);
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProcessor.java
@@ -12,44 +12,8 @@
import java.util.Optional;
public interface AnnotationProcessor {
    static final String DEFAULT_ANNOTATION_SETTING = "(,)";
    default String generateAnnotation(String oriTest, String systemDictVal, List<DictBiz> annotationList) {
        ProgramAnnotation progAnnotation = this.getProgramAnnotationFormat(systemDictVal,annotationList);
        return progAnnotation.addAnnotation(oriTest);
    }
    default boolean isAnnotation(String line,String systemDictVal,List<DictBiz> annotationList){
        ProgramAnnotation progAnnotation = this.getProgramAnnotationFormat(systemDictVal,annotationList);
        line = StringUtils.trim(line);//去首尾空格
        return progAnnotation.isAnnotation(line);
    }
    default ProgramAnnotation getProgramAnnotationFormat(String systemDictVal,List<DictBiz> annoDictList){
        String begin;
        String end;
        Optional<DictBiz> dictOpt = annoDictList.stream().filter(dict -> {return dict.getDictKey().equals(systemDictVal);}).findFirst();
        String annotationSetting = DEFAULT_ANNOTATION_SETTING;
        if(dictOpt.isPresent()) {
            annotationSetting = dictOpt.get().getRemark();
        }
        String[] arr = StringUtils.split(annotationSetting,",");
        if(arr.length == 2){
            begin = arr[0];
            end = arr[1];
        }else if(arr.length == 1){
            begin = arr[0];
            end = "";
        }else{
            throw new ServiceException("注释格式配置错误,应该为1到2段,中间用逗号分隔");
        }
        ProgramAnnotation programAnnotation = new ProgramAnnotation();
        programAnnotation.setBegin(begin);
        programAnnotation.setEnd(end);
        return programAnnotation;
    }
    void setControlSystem(String controlSystemDictVal);
    void setAnnotationProperties(AnnotationProperties annotationProperties);
    String getControlSystem();
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationProperties.java
@@ -5,8 +5,17 @@
@Data
public class AnnotationProperties {
    private String beanId;
    private int programNameLineIndex;
    private int sendPathLineIndex;
    private int statusLineIndex;
    private int deviationLineIndex;
    public static AnnotationProperties getDefault(){
        AnnotationProperties def = new AnnotationProperties();
        def.setProgramNameLineIndex(1);
        def.setSendPathLineIndex(2);
        def.setStatusLineIndex(3);
        def.setDeviationLineIndex(4);
        return def;
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/AnnotationUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
package org.springblade.mdm.program.service.programannotation;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.mdm.program.vo.ProgramAnnotation;
import org.springblade.mdm.utils.FileContentUtil;
import org.springblade.system.pojo.entity.DictBiz;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Optional;
public class AnnotationUtil {
    static String DEFAULT_ANNOTATION_SETTING = "(,)";
    public static ProgramAnnotation getProgramAnnotationFormat(String systemDictVal, List<DictBiz> annoDictList){
        String begin;
        String end;
        Optional<DictBiz> dictOpt = annoDictList.stream().filter(dict -> {return dict.getDictKey().equals(systemDictVal);}).findFirst();
        String annotationSetting = DEFAULT_ANNOTATION_SETTING;
        if(dictOpt.isPresent()) {
            annotationSetting = dictOpt.get().getRemark();
        }
        String[] arr = StringUtils.split(annotationSetting,",");
        if(arr.length == 2){
            begin = arr[0];
            end = arr[1];
        }else if(arr.length == 1){
            begin = arr[0];
            end = "";
        }else{
            throw new ServiceException("注释格式配置错误,应该为1到2段,中间用逗号分隔");
        }
        ProgramAnnotation programAnnotation = new ProgramAnnotation();
        programAnnotation.setBegin(begin);
        programAnnotation.setEnd(end);
        return programAnnotation;
    }
    public static boolean isAnnotation(String line,String systemDictVal,List<DictBiz> annotationList){
        ProgramAnnotation progAnnotation = AnnotationUtil.getProgramAnnotationFormat(systemDictVal,annotationList);
        line = StringUtils.trim(line);//去首尾空格
        return progAnnotation.isAnnotation(line);
    }
    public static String generateAnnotation(String oriTest, String systemDictVal, List<DictBiz> annotationList) {
        ProgramAnnotation progAnnotation = AnnotationUtil.getProgramAnnotationFormat(systemDictVal,annotationList);
        return progAnnotation.addAnnotation(oriTest);
    }
    public static InputStream setAnnotationAndGetInputStream(InputStream inputStream, String text, int lineIndex, String systemDictVal, List<DictBiz> annoDictList) throws IOException {
        InputStream finishedStream;
        try(inputStream){
            ByteArrayInputStream byteInputStream =  new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
            String annoTxt = generateAnnotation(text,systemDictVal,annoDictList);//加了注释之后的文本
            String lineText = FileContentUtil.readLineAt(byteInputStream, lineIndex);
            byteInputStream.reset();
            if(isAnnotation(lineText,systemDictVal,annoDictList)){
                finishedStream = FileContentUtil.replaceAtLine(byteInputStream, lineIndex,annoTxt);
            }else{
                finishedStream = FileContentUtil.insertLine(byteInputStream, lineIndex,annoTxt);
            }
            finishedStream.reset();
        }
        return finishedStream;
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/DefaultProcessor.java
@@ -1,8 +1,17 @@
package org.springblade.mdm.program.service.programannotation;
import com.qiniu.util.IOUtils;
import org.apache.commons.io.FilenameUtils;
import org.springblade.mdm.program.service.ProgramAnnotationService;
import org.springblade.mdm.utils.FileContentUtil;
import org.springblade.system.pojo.entity.DictBiz;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
@Component("defaultProcessor")
@@ -11,17 +20,32 @@
    @Autowired
    private ProgramAnnotationService programAnnotationService;
    private String controlSystem;
    private AnnotationProperties annotationPropreties;
    @Override
    public InputStream setAnnotation(AnnotationData annoData, InputStream inputStream) throws IOException {
        List<DictBiz> annoDicts = programAnnotationService.getAnnotionDictList();
        ByteArrayInputStream bais = new ByteArrayInputStream(IOUtils.toByteArray(inputStream));
        String line = FileContentUtil.readLineAt(bais, annotationProperties.getProgramNameLineIndex());
        bais.reset();
        boolean isAnnotation = AnnotationUtil.isAnnotation(line,controlSystem,annoDicts);
        InputStream insAfter;
        //加入程序名注释行
        String proNameLine =  AnnotationUtil.generateAnnotation(FilenameUtils.removeExtension(annoData.getFilename()),getControlSystem(),annoDicts);
        if(isAnnotation){
            insAfter = FileContentUtil.replaceAtLine(bais, annotationProperties.getProgramNameLineIndex(),proNameLine);
        }else{
            insAfter = FileContentUtil.insertLine(bais, annotationProperties.getProgramNameLineIndex(),proNameLine);
        }
        return super.setAnnotation(annoData, insAfter);
    }
    @Override
    public void setControlSystem(String controlSystemDictVal) {
        this.controlSystem = controlSystemDictVal;
    }
    @Override
    public void setAnnotationProperties(AnnotationProperties annotationProperties) {
        this.annotationPropreties= annotationProperties;
    }
    @Override
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/FanucProcessor.java
@@ -19,7 +19,6 @@
    @Autowired
    private ProgramAnnotationService programAnnotationService;
    private String controlSystem;
    //AnnotationProperties annotationProperties;
    private Pattern PATTERN = Pattern.compile("^[oO]\\d{4}");
    private final int O_LINE = 1;
    @Override
@@ -32,7 +31,7 @@
        InputStream ins1;
        if(oMatched){
            List<DictBiz> annoDicts = programAnnotationService.getAnnotionDictList();
            String newline =  line + generateAnnotation(FilenameUtils.removeExtension(annoData.getFilename()),getControlSystem(),annoDicts);
            String newline =  line + AnnotationUtil.generateAnnotation(FilenameUtils.removeExtension(annoData.getFilename()),getControlSystem(),annoDicts);
            ins1 = FileContentUtil.replaceAtLine(bais,O_LINE,newline);
        }else{
            ins1 = bais;
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/service/programannotation/ProcessorHelper.java
@@ -12,10 +12,12 @@
        AnnotationProcessor processor;
        if(props != null){
            processor = SpringUtil.getBean(props.getBeanId());
            processor.setAnnotationProperties(props);
        }else{
            processor = SpringUtil.getBean(DefaultProcessor.class);
            processor.setAnnotationProperties(AnnotationProperties.getDefault());
        }
        processor.setAnnotationProperties(props);
        return processor;
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/program/vo/NcNodeVO.java
@@ -11,7 +11,7 @@
@Setter
@Getter
@EqualsAndHashCode
@EqualsAndHashCode(callSuper = false)
public class NcNodeVO extends BaseVO {
    @Schema(description = "节点名称")
    private String name;
blade-service/blade-mdm/src/main/java/org/springblade/mdm/task/InternalEmailNotifyTask.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,127 @@
package org.springblade.mdm.task;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.TaskService;
import org.flowable.task.api.TaskQuery;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.mdm.basesetting.producedivision.entity.MdmUser;
import org.springblade.mdm.basesetting.producedivision.service.MdmUserService;
import org.springblade.mdm.commons.contants.ParamConstants;
import org.springblade.mdm.commons.service.InternalEmailProperties;
import org.springblade.mdm.commons.service.InternalEmailService;
import org.springblade.mdm.commons.service.ParamService;
import org.springblade.mdm.program.service.NcProgramApprovedService;
import org.springblade.mdm.program.vo.NcProgramExportDncPageVO;
import org.springblade.mdm.program.vo.NcProgramExportDncQueryVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * å†…部邮件任务提醒定时任务
 */
@Slf4j
@Component
@EnableScheduling
public class InternalEmailNotifyTask {
    @Autowired
    private MdmUserService mdmUserService;
    @Autowired
    private ParamService paramService;
    @Autowired
    private TaskService taskService;
    @Autowired
    private InternalEmailService internalEmailService;
    @Autowired
    private NcProgramApprovedService ncProgramApprovedService;
    @Autowired
    private InternalEmailProperties internalEmailProperties;
    //@Value("${mail-remind.sender-account:xxx}")
    //private String senderAccount;
    @Scheduled(cron = "${task.cron.innernal_email_notify:0 0 9 * * ?}")
    public void execute() {
        String notifyFlag = paramService.getParamValue(ParamConstants.EMAIL_NOTIFY_FLAG,ParamConstants.EMAIL_NOTIFY_FLAG_OFF);
        if("1".equals(notifyFlag)){
            //状态为开启,执行邮件通知
            queryAllUserTodo();
        }
    }
    void queryAllUserTodo(){
        List<MdmUser> allUsers = mdmUserService.list();
        for(MdmUser user : allUsers){
            queryAndSendNotify(user);
        }
    }
    /**
     * æŸ¥è¯¢ç”¨æˆ·todo并发送通知邮件
     * @param user
     */
    private void queryAndSendNotify(MdmUser user) {
        long flowTodoCount = queryFlowTodo(user.getId());
        long expTodoCount = queryExportTodo(user.getId());
        if(flowTodoCount + expTodoCount > 0){
            sendRemindEmail(flowTodoCount,expTodoCount,user.getAccount());
        }
    }
    /**
     * å‘送提醒邮件
     * @param flowTodoCount
     * @param expTodoCount
     * @param userAccount
     */
    void sendRemindEmail(long flowTodoCount,long expTodoCount,String userAccount){
        String content = buildMailConent(flowTodoCount,expTodoCount);
        internalEmailService.send(this.internalEmailProperties.getSenderAccount(),userAccount,null,null,"MDM程序管理任务提醒",content,null);
    }
    String buildMailConent(long flowTodoCount,long expTodoCount){
        String content= String.format("您共有%s条任务待处理",(flowTodoCount+expTodoCount));
        if(flowTodoCount>0){
            content += ","+flowTodoCount+"条为待审批流程";
        }
        if(flowTodoCount>0){
            content += ","+expTodoCount+"条为待导出工控网程序";
        }
        return content+"。";
    }
    private long queryFlowTodo(long userId){
        String userIdStr = "" + userId;
        TaskQuery todoQuery = taskService.createTaskQuery().taskAssignee(userIdStr).active().includeProcessVariables();
        return todoQuery.count();
    }
    private long queryExportTodo(long userId){
        NcProgramExportDncQueryVO query = new NcProgramExportDncQueryVO();
        query.setCurrent(1);
        query.setSize(1);
        List<String> userRoleAliasList = Func.toStrList(",", AuthUtil.getUserRole());//角色别名,多个角色逗号分隔
        String managerRole = paramService.getProgramManagerRoleAlias();
        if(!userRoleAliasList.contains(managerRole) && !AuthUtil.isAdministrator() && !AuthUtil.isAdmin()){
            //非数控管理员角色、管理员,限制未只能导出自己的程序
            query.setUserId(userId);
        }
        IPage<NcProgramExportDncPageVO> pages = ncProgramApprovedService.exportDncPageQuery(query);
        return pages.getTotal();
    }
}
blade-service/blade-mdm/src/main/java/org/springblade/mdm/test/MyTestController.java
@@ -3,17 +3,22 @@
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.mail.MessagingException;
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.mdm.basesetting.machine.entity.Machine;
import org.springblade.mdm.commons.service.EmailService;
import org.springblade.mdm.commons.service.InternalEmailService;
import org.springblade.mdm.flow.service.WIthdrawService;
import org.springblade.mdm.machinefile.entity.MachineFile;
import org.springblade.mdm.machinefile.service.MachineFileScanService;
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.InternalEmailNotifyTask;
import org.springblade.mdm.task.MachineFileScanTask;
import org.springblade.mdm.utils.FileContentUtil;
import org.springblade.system.feign.IDictBizClient;
@@ -23,6 +28,7 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.wsdl.WSDLException;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -44,11 +50,13 @@
    @Autowired
    private IDictBizClient bizDictClient;
    @Autowired
    private EmailService mailService;
    private InternalEmailService mailService;
    @Autowired
    private MachineFileScanService machineFileScanService;
    @Autowired
    private WIthdrawService withdrawService;
    @Autowired
    private InternalEmailNotifyTask notifyTask;
    /**
     * æ–°å¢ž
     */
@@ -88,21 +96,6 @@
        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 = "biz", description = "test扫描")
@@ -129,4 +122,9 @@
        machineFileScanService.scanMachineFile();
    }
    @GetMapping("/notify")
    public void emailNotify(){
        SOAPException s;
        notifyTask.execute();
    }
}
blade-service/blade-mdm/src/test/java/org/springblade/mdm/commons/service/InternalEmailServiceTest.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package org.springblade.mdm.commons.service;
import org.junit.jupiter.api.Test;
public class InternalEmailServiceTest {
    @Test
    public void testSend(){
        InternalEmailService service = new InternalEmailService();
        service.send("from","to","cc","bcc","邮件提醒","您有那条任务要处理",new String[]{"Path1"});
    }
}
blade-service/blade-mdm/src/test/java/org/springblade/mdm/program/service/programannotation/AnnotationUtilTest.java
ÎļþÃû´Ó blade-service/blade-mdm/src/test/java/org/springblade/mdm/program/service/ProgramAnnotationServiceTest.java ÐÞ¸Ä
@@ -1,13 +1,14 @@
package org.springblade.mdm.program.service;
package org.springblade.mdm.program.service.programannotation;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springblade.mdm.program.service.ProgramAnnotationService;
import org.springblade.system.pojo.entity.DictBiz;
import java.util.Arrays;
import java.util.List;
public class ProgramAnnotationServiceTest {
public class AnnotationUtilTest {
    @Test
    public void testIsAnnotation(){
@@ -23,9 +24,9 @@
        xmz.setRemark("*-,");
        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));
        Assertions.assertTrue(AnnotationUtil.isAnnotation("(abc)","FANUC", dictList));
        Assertions.assertFalse(AnnotationUtil.isAnnotation("*-","FANUC",dictList));
        Assertions.assertTrue(AnnotationUtil.isAnnotation("*-","XIMENZI", dictList));
    }
    @Test
@@ -42,8 +43,8 @@
        xmz.setRemark("*-,");
        List<DictBiz> dictList = Arrays.asList(fanucDict, xmz);
        Assertions.assertEquals("(A)",s.generateAnnotation("A","FANUC",dictList));
        Assertions.assertEquals("(A)",AnnotationUtil.generateAnnotation("A","FANUC",dictList));
        Assertions.assertEquals("*-A",s.generateAnnotation("A","XIMENZI",dictList));
        Assertions.assertEquals("*-A",AnnotationUtil.generateAnnotation("A","XIMENZI",dictList));
    }
}