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.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 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) { if (!ValidateUtil.validateString(dateDay)) { return null; } 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 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 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目录不存在或不是有效的目录"); } } }