| | |
| | | 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) { |
| | |
| | | } |
| | | 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目录不存在或不是有效的目录"); |
| | | } |
| | | } |
| | | |
| | | } |