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