hyingbo
7 天以前 cc0e9036de6e922e8fe254fef01d8de9996024b7
lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DncPassLogServiceImpl.java
@@ -1,73 +1,17 @@
package org.jeecg.modules.dnc.service.impl;
import cn.hutool.crypto.SmUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.modules.dnc.dto.SysLogTypeObjectDto;
import org.jeecg.modules.dnc.entity.DncPassLog;
import org.jeecg.modules.dnc.mapper.DncPassLogMapper;
import org.jeecg.modules.dnc.response.SysLogMessageDto;
import org.jeecg.modules.dnc.utils.FileClient;
import org.jeecg.modules.dnc.utils.SyslogClient;
import org.jeecg.modules.dnc.utils.TelnetUtil;
import org.jeecg.modules.dnc.utils.ValidateUtil;
import org.jeecg.modules.dnc.utils.date.DateUtil;
import org.jeecg.modules.system.service.ISysDictItemService;
import org.jeecg.modules.system.service.ISysDictService;
import org.jeecg.modules.dnc.service.IDncPassLogService;
import org.jeecg.modules.dnc.utils.file.FileUtilS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.scheduling.annotation.Scheduled;
import org.jeecg.modules.dnc.utils.ValidateUtil;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.Duration;
import java.time.Instant;
import java.util.List;
import java.util.stream.Stream;
/**
 * @author clown
 * * @date 2023/11/29
 */
@Service
public class DncPassLogServiceImpl extends ServiceImpl<DncPassLogMapper, DncPassLog> implements IDncPassLogService {
    @Value("${securedoc.serverIp}")
    private String serverIp;
    @Value("${securedoc.serverPort}")
    private String serverPort;
    @Value("${securedoc.username}")
    private String usernameService;
    @Value("${securedoc.pwd}")
    private String pwdService;
    @Value("${securedoc.addressToken}")
    private String addressToken;
    @Value("${securedoc.addressUploadFile}")
    private String addressUploadFile;
    @Value("${securedoc.localFilePath}")
    private String localFilePathC;
    @Value("${securedoc.servicePath}")
    private String servicePathS;
    @Value("${securedoc.copyFilePath}")
    private String newFilePathC;
    @Value("${securedoc.logIp}")
    private String logIp;
    @Value("${securedoc.logPort}")
    private String logPort;
    @Autowired
    private ISysDictService iSysDictService;
    @Autowired
    private ISysDictItemService iSysDictItemService;
    @Override
    public DncPassLog findDayTime(String dateDay) {
@@ -76,214 +20,4 @@
        }
        return super.baseMapper.findDateTimeDay(dateDay);
    }
    @Override
    @Scheduled(cron = "${fileCron}")
    public void fileClientTxtOrNc() {
        SysLogMessageDto message = new SysLogMessageDto();
        String host = "127.0.0.1";
        if (StringUtils.isNotBlank(serverIp)) {
            host = serverIp;
        }
        String port = "8299";
        if (StringUtils.isNotBlank(serverPort)) {
            port = serverPort;
        }
        String username = "admin";
        if (StringUtils.isNotBlank(usernameService)) {
            username = usernameService;
        }
        String pwd = "123";
        if (StringUtils.isNotBlank(pwdService)) {
            pwd = pwdService;
        }
        //文件本地地址,根据地址找到文件,将文件解析成文件流
        String localFilePath = "/jar/test/a/";
//        String localFilePath = "E:\\test\\a\\";
        if (StringUtils.isNotBlank(localFilePathC)) {
            localFilePath = localFilePathC;
        }
        //文件上传目的地址,将文件上传到该地址
        String servicePath = "/jar/test/b/";
//        String servicePath = "E:\\test\\b\\";
        if (StringUtils.isNotBlank(servicePathS)) {
            servicePath = servicePathS;
        }
        boolean btelnetPort =  TelnetUtil.telnetPort(serverIp,Integer.valueOf(serverPort),10);
        if (!btelnetPort) {
            System.out.println("服务器连接: " + serverIp + ":" + serverPort + " 异常!" );
            return;
        }
        //第一步,获取token
        String token = null;
        try {
            token = FileClient.getToken(host,port,username,pwd,addressToken);
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        //若获取token成功,再进行上传文件接口调用
        if (token !=null && !token.equals("")){
            try {
                File f3 = new File(localFilePath);
                File[] files = f3.listFiles();
                for (File fi : files){
                    if (fi.isFile()){
                        SysLogTypeObjectDto objectName = new SysLogTypeObjectDto();
                        objectName.setDateTime(DateUtil.format(DateUtil.getNow(),DateUtil.STR_DATE_TIME_SMALL));
                        objectName.setFileName(fi.getName());
                        objectName.setFileSize(FileUtilS.changeFileFormatKb(String.valueOf(new File(localFilePath).length())));
                        objectName.setSourceAddress(localFilePath);
                        objectName.setDestination(serverIp);//服务端IP
                        //顺序号
                        DncPassLog passLog = getById("num0001");
                        if (passLog == null) {
                            passLog = new DncPassLog();
                            passLog.setId("num0001");
                            passLog.setSequenceNumber(1);
                            objectName.setFileNum(Integer.toString(1));
                            save(passLog);
                        } else {
                            Integer number = passLog.getSequenceNumber()+1;
                            removeById("num0001");
                            objectName.setFileNum(Integer.toString(number));
                            passLog = new DncPassLog();
                            passLog.setId("num0001");
                            passLog.setSequenceNumber(number);
                            save(passLog);
                        }
                        InetAddress address = null;
                        try {
                            address = InetAddress.getLocalHost();
                            String ip = address.getHostAddress();
                            objectName.setSourceAddress("20.10.17.11");//客户端IP
                            objectName.setAddress(ip);
                        } catch (UnknownHostException e) {
                            objectName.setSourceAddress("127.0.0.1");
                            objectName.setAddress("127.0.0.1");
                        }
                        objectName.setDestination(host);
                        objectName.setResult("失败");
                        //获取某个文件下的所有文件
                        String loFilePath = localFilePath + fi.getName();
                        String servicePathName =servicePath + fi.getName();
//                        String loFilePath = localFilePath + "\\" + fi.getName();
//                        String servicePathName =servicePath + "\\" + fi.getName();
                        File file = new File(loFilePath);
                        if (file == null || !file.exists()){
                            objectName.setAbstract1("sm3");
                        } else {
                            String sm3 = SmUtil.sm3(file);
                            objectName.setAbstract1(sm3);
                        }
                        String b  = FileClient.uploadFile(host,port,token,fi.getName(),servicePathName,loFilePath,addressUploadFile);
                        //文件备份删除
                        if (b == null) {
                            try {
                                objectName.setResult("失败");
                                objectName.setTypes("error");
                                SyslogClient.sendClient(logIp,Integer.valueOf(logPort),objectName.toString());
                            }catch (Exception e) {
                                return;
                            }
                        }
                        else if ( b.equals("成功")) {
                            //备份数据
                            boolean fCopy = FileUtilS.copyNcFile(loFilePath,newFilePathC + "/" + DateUtil.format(DateUtil.getNow(),
                                    DateUtil.STR_YEARMONTHDAY) + "/" +fi.getName());
                            if (fCopy) {
                                FileUtilS.deleteNcFile(loFilePath);
                            } else {
                                FileUtilS.copyNcFile(loFilePath,newFilePathC + "/" + DateUtil.format(DateUtil.getNow(),
                                        DateUtil.STR_YEARMONTHDAY) + "/" +fi.getName());
                                FileUtilS.deleteNcFile(loFilePath);
                            }
                            try {
                                objectName.setTypes("Info");
                                objectName.setResult("成功");
                                SyslogClient.sendClient(logIp,Integer.valueOf(logPort),objectName.toString());
                            }catch (Exception e) {
                                return;
                            }
                        } else {
                            try {
                                objectName.setResult("失败");
                                objectName.setTypes("error");
                                SyslogClient.sendClient(logIp,Integer.valueOf(logPort),objectName.toString());
                            }catch (Exception e) {
                                return;
                            }
                        }
                    }
                }
            } catch (Throwable throwable) {
                throwable.printStackTrace();
            }
        }
    }
    /**
     * 定时任务执行器参数  每天凌晨1.30执行
     */
    @Override
//    @Scheduled(cron = "0 30 1 * * ?")
    public void deleteNcSendFile() {
        Integer day;
        //取字典时间
        List<DictModel> singleDictionaries=iSysDictService.queryDictItemsByCode("DEL_TIME_SEND");
        if (singleDictionaries.size()!=1){
            return;
        }else {
            day= Integer.valueOf(singleDictionaries.get(0).getValue());
        }
        Path ncDirectory = Paths.get("jar/NC");
        //天转秒
        long dayToSecond = day * 24 * 60 * 60;
        if (Files.exists(ncDirectory) && Files.isDirectory(ncDirectory)) {
            // 递归查找NC目录下所有名为send的文件夹
            try (Stream<Path> sendFolders = Files.walk(ncDirectory)
                    .filter(Files::isDirectory)
                    .filter(path -> path.getFileName().toString().equalsIgnoreCase("send"))) {
                sendFolders.forEach(sendFolder -> {
                    try {
                        // 获取当前时间
                        Instant now = Instant.now();
                        // 遍历SEND文件夹内的所有文件
                        Files.walk(sendFolder)
                                .filter(Files::isRegularFile)
                                .forEach(file -> {
                                    try {
                                        // 获取文件的最后修改时间
                                        Instant lastModified = Files.getLastModifiedTime(file).toInstant();
                                        // 计算时间差
                                        Duration duration = Duration.between(lastModified, now);
                                        // 判断是否超时(时间存在字典中,base_single_dictionary)
                                        if (duration.getSeconds() > dayToSecond) {
                                            try {
                                                Files.delete(file);
                                                System.out.println("已删除文件: " + file);
                                            } catch (IOException e) {
                                                System.err.println("删除文件 " + file + " 时出现错误: " + e.getMessage());
                                            }
                                        }
                                    } catch (IOException e) {
                                        System.err.println("获取文件 " + file + " 的最后修改时间时出现错误: " + e.getMessage());
                                    }
                                });
                    } catch (IOException e) {
                        System.err.println("遍历 " + sendFolder + " 文件夹时出现错误: " + e.getMessage());
                    }
                });
            } catch (IOException e) {
                System.err.println("查找send文件夹时出现错误: " + e.getMessage());
            }
        } else {
            System.err.println("jar的NC目录不存在或不是有效的目录");
        }
    }
}