|
@@ -22,6 +22,7 @@ import javax.annotation.Resource;
|
|
|
import java.io.File;
|
|
|
import java.io.IOException;
|
|
|
import java.nio.file.Files;
|
|
|
+import java.nio.file.Path;
|
|
|
import java.nio.file.Paths;
|
|
|
import java.nio.file.StandardCopyOption;
|
|
|
import java.util.*;
|
|
@@ -141,6 +142,100 @@ public class OutProcessServiceImpl extends OutBaseService implements IOutProcess
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 同步文件
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void copy() {
|
|
|
+ //获取外网同步正式目录
|
|
|
+ String syncDir = syncDIr();
|
|
|
+ //获取外网同步备份目录
|
|
|
+ String bakDir = bakDir();
|
|
|
+ String target="/home/ftp/upload/";
|
|
|
+
|
|
|
+ try {
|
|
|
+ // 创建File对象
|
|
|
+ File dirFile = new File(syncDir);
|
|
|
+ if (dirFile.isDirectory()) {
|
|
|
+ //先获取目录下所有json格式文件
|
|
|
+ File[] files = dirFile.listFiles(((dir, name) -> name.endsWith(".json")));
|
|
|
+ if (files != null && files.length > 0) {
|
|
|
+ Arrays.sort(files, Comparator.comparing(File::getName));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ for (File file : files) {
|
|
|
+ //获取文件同步顺序,如果报错,则不同步
|
|
|
+ //校验JSON文件名格式
|
|
|
+ if (!file.getName().startsWith("sync-")) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ long sort = Long.parseLong(file.getName().split("-")[1]);
|
|
|
+ ObjectMapper mapper = new ObjectMapper();
|
|
|
+ FileDesc desc = mapper.readValue(file, FileDesc.class);
|
|
|
+ boolean isZip = desc.getName().indexOf(".zip") != -1;
|
|
|
+ File syncFile = new File(syncDir + desc.getName());
|
|
|
+ String md5 = DigestUtils.md5Hex(Files.newInputStream(syncFile.toPath()));
|
|
|
+ if (md5.equals(desc.getMd5())) {
|
|
|
+ Date start = new Date();
|
|
|
+ //上传json文件
|
|
|
+ Files.copy(file.toPath(), Paths.get(target+file.getName()), StandardCopyOption.REPLACE_EXISTING);
|
|
|
+ boolean flag = true;
|
|
|
+ boolean flag1 = false;
|
|
|
+ //上传zip文件
|
|
|
+ List<File> list = new ArrayList<>();
|
|
|
+ if (isZip) {
|
|
|
+ ZipFile zipFile = new ZipFile(syncFile.getPath());
|
|
|
+ if (zipFile.isSplitArchive()) {
|
|
|
+ //如果是分卷压缩文件,则需要读取所有文件名上传
|
|
|
+ list = zipFile.getSplitZipFiles();
|
|
|
+ for (File f : list) {
|
|
|
+ Files.copy(f.toPath(), Paths.get(target+f.getName()), StandardCopyOption.REPLACE_EXISTING);
|
|
|
+ flag1 = true;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ Files.copy(zipFile.getFile().toPath(), Paths.get(target+zipFile.getFile().getName()), StandardCopyOption.REPLACE_EXISTING);
|
|
|
+ flag1 = true;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ flag1 = true;
|
|
|
+ Files.copy(syncFile.toPath(), Paths.get(target+syncFile.getName()), StandardCopyOption.REPLACE_EXISTING);
|
|
|
+ }
|
|
|
+
|
|
|
+ Date end = new Date();
|
|
|
+
|
|
|
+ String status = "N";
|
|
|
+ if (flag && flag1) {
|
|
|
+ //移动文件到备份目录
|
|
|
+ Files.move(file.toPath(), Paths.get(bakDir + file.getName()), StandardCopyOption.REPLACE_EXISTING);
|
|
|
+ Files.move(syncFile.toPath(), Paths.get(bakDir + syncFile.getName()), StandardCopyOption.REPLACE_EXISTING);
|
|
|
+ for (File f : list) {
|
|
|
+ Files.move(f.toPath(), Paths.get(bakDir + f.getName()), StandardCopyOption.REPLACE_EXISTING);
|
|
|
+ }
|
|
|
+ status = "Y";
|
|
|
+ }
|
|
|
+
|
|
|
+ OutSyncInfo info = new OutSyncInfo();
|
|
|
+ info.setSyncType(desc.getType().toString());
|
|
|
+ info.setCostTime(end.getTime() - start.getTime());
|
|
|
+ info.setSyncFileMd5(desc.getMd5());
|
|
|
+ info.setSyncFileName(desc.getName());
|
|
|
+ info.setSyncSort(sort);
|
|
|
+ info.setSyncFileSize(file.length());
|
|
|
+ info.setUploadTime(start);
|
|
|
+ info.setUploadStatus(status);
|
|
|
+ syncInfoService.insertOutSyncInfo(info);
|
|
|
+ } else {
|
|
|
+ log.error("MD5校验未成功,暂时不上传" + desc.toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("上传出错啦{}", e.getMessage());
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 上传文件到光闸FTP
|
|
|
*/
|
|
|
@Override
|
|
@@ -165,6 +260,7 @@ public class OutProcessServiceImpl extends OutBaseService implements IOutProcess
|
|
|
|
|
|
/**
|
|
|
* 删除过期文件
|
|
|
+ *
|
|
|
* @param day 指定过期天数
|
|
|
*/
|
|
|
@Override
|