From e2fb5f7c27fed474a2f3fbe062199410c8e81386 Mon Sep 17 00:00:00 2001 From: gaoshuguang Date: Wed, 30 Jul 2025 17:19:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=82=E6=95=B0=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E6=9C=8D=E5=8A=A1=EF=BC=8C=E6=8A=A2=E9=99=A9=E6=95=91?= =?UTF-8?q?=E7=81=BE=E5=A2=9E=E9=87=8F=E7=94=9F=E6=88=90=E5=85=A5=E5=8F=82?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=8C=E5=B9=B6=E5=9C=A8tomcat=E7=9A=84?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E4=B8=AD=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=8F=AF=E9=85=8D=E7=BD=AE=E5=8F=82=E6=95=B0=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E5=87=A0=E5=A4=A9=E5=A2=9E=E9=87=8F=EF=BC=8C=E7=9B=AE=E5=89=8D?= =?UTF-8?q?=E6=8A=A2=E9=99=A9=E6=95=91=E7=81=BE=E5=A2=9E=E9=87=8F=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E4=B8=80=E5=A4=A9=E7=9A=84=E5=A2=9E=E9=87=8F=EF=BC=8C?= =?UTF-8?q?=E5=85=B6=E4=BB=96=E5=A2=9E=E9=87=8F=E8=BF=98=E6=98=AF=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD10=E5=A4=A9=E7=9A=84=E5=A2=9E=E9=87=8F=20#=E6=8A=A2?= =?UTF-8?q?=E9=99=A9=E6=95=91=E7=81=BE=E5=BD=93=E5=89=8D=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E5=87=A0=E5=A4=A9=E7=9A=84=E5=A2=9E=E9=87=8F=20EMERCARINCDay?= =?UTF-8?q?=3D1=20#=E9=99=A4=E6=8A=A2=E9=99=A9=E6=95=91=E7=81=BE=E5=A4=96?= =?UTF-8?q?=E5=85=B6=E4=BB=96=E5=A2=9E=E9=87=8F=E5=BD=93=E5=89=8D=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E5=87=A0=E5=A4=A9=E7=9A=84=E5=A2=9E=E9=87=8F=20incDay?= =?UTF-8?q?s=3D10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/CreateDbfByDllServiceImpl.java | 8 +- .../impl/CreateMinFeeSqbServiceImpl.java | 27 ++-- .../service/impl/ZipToSqbServiceImpl.java | 125 +++++++++++++++++- .../java/com/nm/gsgl/test/Test250730.java | 35 +++++ 4 files changed, 179 insertions(+), 16 deletions(-) create mode 100644 ParamDownload/src/main/java/com/nm/gsgl/test/Test250730.java diff --git a/ParamDownload/src/main/java/com/nm/gsgl/service/impl/CreateDbfByDllServiceImpl.java b/ParamDownload/src/main/java/com/nm/gsgl/service/impl/CreateDbfByDllServiceImpl.java index 5c383123..797aa908 100644 --- a/ParamDownload/src/main/java/com/nm/gsgl/service/impl/CreateDbfByDllServiceImpl.java +++ b/ParamDownload/src/main/java/com/nm/gsgl/service/impl/CreateDbfByDllServiceImpl.java @@ -10,6 +10,7 @@ import com.nm.gsgl.common.utils.FileUtil; import com.nm.gsgl.common.utils.LogUtil; import com.nm.gsgl.common.utils.MD5Util; import com.nm.gsgl.common.utils.PathUtil; +import com.nm.gsgl.common.utils.PropertiesUtil; import com.nm.gsgl.entity.FileInfo; import com.nm.gsgl.entity.NameTableAuto; import com.nm.gsgl.entity.dis.NewFileInfo; @@ -45,8 +46,8 @@ public class CreateDbfByDllServiceImpl implements CreateDbfByDllService { //dbf文件名称 private String dbName = ""; //加载几天的增量 - @Value("${incDays}") - public String incDays; + //@Value("${incDays}") + //public String incDays; @Value("${NFSFilePath}") public String NFSFilePath; @@ -240,7 +241,8 @@ public class CreateDbfByDllServiceImpl implements CreateDbfByDllService { LogUtil.WriteLog_HRBlackCard("[uuid:" + uuid + "]-调用动态库生成增量SQB文件完成,返回值为" + countSqb, "CreateDbfByDllServiceImpl"); } else { - + //获取当前加载几天的增量 + String incDays = StringUtils.isNotBlank(PropertiesUtil.getValue("incDays")) ? PropertiesUtil.getValue("incDays") : "10"; //每天生成一个备份zip文件夹存放增量下载的zip文件 String dayBackPath = NFSFilePath + PathUtil.downFileBackup + dbfDir + File.separator + dateTime + File.separator; FileUtil.fileCreat(dayBackPath); diff --git a/ParamDownload/src/main/java/com/nm/gsgl/service/impl/CreateMinFeeSqbServiceImpl.java b/ParamDownload/src/main/java/com/nm/gsgl/service/impl/CreateMinFeeSqbServiceImpl.java index 7d62dfcc..19f3b46a 100644 --- a/ParamDownload/src/main/java/com/nm/gsgl/service/impl/CreateMinFeeSqbServiceImpl.java +++ b/ParamDownload/src/main/java/com/nm/gsgl/service/impl/CreateMinFeeSqbServiceImpl.java @@ -34,7 +34,7 @@ import java.util.List; * @description: */ @Service -public class CreateMinFeeSqbServiceImpl implements CreateMinFeeSqbService{ +public class CreateMinFeeSqbServiceImpl implements CreateMinFeeSqbService { @Value("${sqliteDriverName}") private String sqliteDriverName; @Value("${sqliteUrl}") @@ -74,7 +74,7 @@ public class CreateMinFeeSqbServiceImpl implements CreateMinFeeSqbService{ String id = businessTask.getId(); //获取本地路径,将文件复制到本地路径生成SQB然后再移动到nfs共享目录中 String localDownZipPath = PropertiesUtil.getValue("localDownZipPath"); - String localUnZipPath = PropertiesUtil.getValue("localUnZipPath")+File.separator + id; + String localUnZipPath = PropertiesUtil.getValue("localUnZipPath") + File.separator + id; String localSqbPath = PropertiesUtil.getValue("localSqbPath"); FileUtil.fileCreat(localDownZipPath); FileUtil.fileCreat(localUnZipPath); @@ -90,7 +90,7 @@ public class CreateMinFeeSqbServiceImpl implements CreateMinFeeSqbService{ //更新sqlite任务表的任务状态为2-报错,轮询下次再处理 DatabaseUtil.insertSqlite(sqliteDriverName, sqliteUrl, Constant.ERROR_UPDATE_BUSINESS_HANDLER + businessTask.getId()); } else { - FileUtil.copyFile(nfsDownFilePath + fileName,localDownZipPath + fileName); + FileUtil.copyFile(nfsDownFilePath + fileName, localDownZipPath + fileName); //解压之前先清空解压目标目录 FileUtil.removeFiles(new File(localUnZipPath)); List stringList = UnzipUtil.decompress(localDownZipPath + fileName, localUnZipPath); @@ -110,15 +110,24 @@ public class CreateMinFeeSqbServiceImpl implements CreateMinFeeSqbService{ String subComNO; subComNO = String.valueOf(nameTable.getSubComNo()); switch (subComNO) { - case "37"://十大 + //十大 + case "37": subComNO = "38"; break; - case "34"://大东 和城大 + //大东 和城大 + case "34": subComNO = "33"; break; - case "29"://东察 + //东察 + case "29": subComNO = "35"; break; + //巴银归属到乌银分公司 + case "46": + subComNO = "55"; + break; + default: + break; } Integer staNo = nameTable.getStaNo(); LogUtil.WriteLog_MinFee("[uuid:" + uuid + "]-获取分公司编号为=" + subComNO, "CreateMinFeeSqbServiceImpl"); @@ -182,7 +191,7 @@ public class CreateMinFeeSqbServiceImpl implements CreateMinFeeSqbService{ //获取生成的zlib的文件名 String zlibFileNameMd5 = FileUtil.zlibFileName(localSqbPathDll, zlibName.replace(Constant.STR_ZLIB, Constant.NULL_STRING) + Constant.STR_); LogUtil.WriteLog_MinFee("[uuid:" + uuid + "]-获取zlib的文件名称为" + zlibFileNameMd5, "CreateMinFeeSqbServiceImpl"); - FileUtil.copyFile(localSqbPathDll+ File.separator +zlibFileNameMd5, nfsSqbPathDll + zlibFileNameMd5); + FileUtil.copyFile(localSqbPathDll + File.separator + zlibFileNameMd5, nfsSqbPathDll + zlibFileNameMd5); //获取高路分中心需要下发的收费站编码,如果是多个站,站编码用,间隔 String glMinFeeFZXs = PropertiesUtil.getValue("GLMinFeeFZXs"); @@ -245,10 +254,10 @@ public class CreateMinFeeSqbServiceImpl implements CreateMinFeeSqbService{ disMinFeeFileMapper.update(null, updateWrap); } FileUtil.delete(new File(sqbFileDllPath)); - FileUtil.delete(new File(localUnZipPath +File.separator+ businessTask.getFileName())); + FileUtil.delete(new File(localUnZipPath + File.separator + businessTask.getFileName())); FileUtil.delete(new File(localDownZipPath + businessTask.getFileName())); FileUtil.delete(new File(NFSFilePath + PathUtil.downFile + businessTask.getFileName())); - FileUtil.delete(new File(localSqbPathDll+ File.separator +zlibFileNameMd5)); + FileUtil.delete(new File(localSqbPathDll + File.separator + zlibFileNameMd5)); String nowString = DateTimeUtil.getFormateString(new Date(), Constant.YYYY_MM_DD_HH_MM_SS); String sqlParam = Constant.UPDATE_BUSINESS_HANDLER + nowString + Constant.PUBLISH_TIME + nowString + Constant.WHERE_ID + businessTask.getId(); if (DatabaseUtil.insertSqlite(sqliteDriverName, sqliteUrl, sqlParam) > 0) { diff --git a/ParamDownload/src/main/java/com/nm/gsgl/service/impl/ZipToSqbServiceImpl.java b/ParamDownload/src/main/java/com/nm/gsgl/service/impl/ZipToSqbServiceImpl.java index 3ed6bdd0..62987bf6 100644 --- a/ParamDownload/src/main/java/com/nm/gsgl/service/impl/ZipToSqbServiceImpl.java +++ b/ParamDownload/src/main/java/com/nm/gsgl/service/impl/ZipToSqbServiceImpl.java @@ -13,6 +13,7 @@ import com.nm.gsgl.common.utils.FileUtil; import com.nm.gsgl.common.utils.LogUtil; import com.nm.gsgl.common.utils.MD5Util; import com.nm.gsgl.common.utils.PathUtil; +import com.nm.gsgl.common.utils.PropertiesUtil; import com.nm.gsgl.common.utils.UnzipUtil; import com.nm.gsgl.entity.FileInfo; import com.nm.gsgl.entity.NameTableAuto; @@ -54,8 +55,8 @@ public class ZipToSqbServiceImpl implements ZipToSqbService { @Value("${sqliteUrl}") private String sqliteUrl; //加载几天的增量 - @Value("${incDays}") - public String incDays; + //@Value("${incDays}") + //public String incDays; @Value("${NFSFilePath}") public String NFSFilePath; @@ -185,7 +186,7 @@ public class ZipToSqbServiceImpl implements ZipToSqbService { break; case Constant.STR_920://抢险救灾车增量 dbName = "EMERCARINC.DBF"; - type = 4; + type = 5; etcType = 10; dbfDir = "EMERCAR"; qlSqbName = "SQB_EMERCARALL"; @@ -224,7 +225,121 @@ public class ZipToSqbServiceImpl implements ZipToSqbService { LogUtil.WriteLog_HRBlackCard("[uuid:" + uuid + "]-调用动态库生成全量SQB文件完成,返回值为" + countSqb, "ZipToSqbServiceImpl"); - } else { + } else if (type == 5){ + //获取当前加载几天的增量 + String emercarincDay = StringUtils.isNotBlank(PropertiesUtil.getValue("EMERCARINCDay")) ? PropertiesUtil.getValue("EMERCARINCDay") : "1"; + LogUtil.WriteLog_HRBlackCard("[uuid:" + uuid + "]-调用动态库生成增量SQB文件中,协议类型为" + protocolType + "zip文件名为" + fileName, "ZipToSqbServiceImpl-createSqbByDll"); + //每天生成一个备份zip文件夹存放增量下载的zip文件 + dayBackPath = NFSFilePath + PathUtil.downFileBackup + dbfDir + File.separator + dateTime + File.separator; + FileUtil.fileCreat(dayBackPath); + FileUtil.copyFile(localPath + fileName, dayBackPath + fileName); + //将下载的增量文件复制到入库文件夹下 + String insertDbPath = NFSFilePath + File.separator + "ParamInsertDb" + File.separator + "zipFilePath" + File.separator; + FileUtil.fileCreat(insertDbPath); + FileUtil.copyFile(localPath + fileName, insertDbPath + fileName); + //当前时段是否生成新版本增量 + boolean isGenerate = false; + //根据主键protocolType查询DIS_NEWFILEINFO_JAVA表中上次的生成时间 + NewFileInfo newFileInfo = newFileInfoMapper.selectById(protocolType); + if (newFileInfo != null) { + Date updateTime = newFileInfo.getUpdateTime(); + LogUtil.WriteLog_HRBlackCard("[uuid:" + uuid + "]-根据主键protocolType=" + protocolType + "查询DIS_NEWFILEINFO_JAVA表中上次的生成时间为" + updateTime, "ZipToSqbServiceImpl-createSqbByDll"); + int hours = DateTimeUtil.getHour(date); + if (updateTime != null) { + if (hours != DateTimeUtil.getHour(updateTime)) { + isGenerate = true; + } + } else { + isGenerate = true; + } + } else { + isGenerate = true; + } + + + if (isGenerate) { + //如果是增量先查询上一版本的版本号 + if (Constant.ONE_HOUR_ISSUED.contains(protocolType)) { + version = getVersion(protocolType, date); + LogUtil.WriteLog_HRBlackCard("[uuid:" + uuid + "]-最终增量本次版本号为" + version, "ZipToSqbServiceImpl-createSqbByDll"); + } + //增量目录名称 + StringBuilder incDirLst = new StringBuilder(); + boolean fDir = false; + for (int i = 0; i < Integer.parseInt(emercarincDay); i++) { + if (fDir) { + incDirLst.append("|"); + } + incDirLst.append(NFSFilePath).append(PathUtil.downFileBackup).append(dbfDir).append(File.separator).append(DateTimeUtil.getFormateString(DateTimeUtil.addDateDays(date, -i), Constant.YYYYMMDD)); + fDir = true; + } + + zlibSqbName = bfSqbName + Constant.STR_ + formateString + Constant.STR_ + version + Constant.STR_ZLIB; + sqbZlibPathName = sqbPath + dbfDir + File.separator + zlibSqbName; + + LogUtil.WriteLog_HRBlackCard("[uuid:" + uuid + "]-调用动态库生成增量SQB文件中,协议类型为" + protocolType + "zip文件名为" + fileName, "ZipToSqbServiceImpl-createSqbByDll"); + + //获取最新的全量sqb文件全路径 + //全量文件 + String sqbQlFileDir = NFSFilePath + PathUtil.sqbBackPath + dbfDir; + String pblackAllFileName = ""; + List fileInfos2 = new ArrayList<>(); + File[] files2 = new File(sqbQlFileDir).listFiles(); + if (null != files2 && files2.length > 0) { + for (File file : files2) { + if (file.isFile() && file.getName().endsWith(Constant.STR_SQB) && file.getName().contains(qlSqbName)) { + FileInfo fileInfo = new FileInfo(); + fileInfo.setFileName(file.getName()); + fileInfo.setLastModified(new Date(file.lastModified())); + fileInfo.setFilePath(file.getPath()); + fileInfos2.add(fileInfo); + } + } + //获取当前时间的全量文件版本号 + String nowVersion = DateTimeUtil.getFormateString(date, Constant.YYMMDD) + "103"; + + if (fileInfos2.size() > 0) { + + //对文件的最后修改时间进行排序 + fileInfos2.sort(Comparator.comparing(FileInfo::getLastModified)); + for (FileInfo fileInfo2 : fileInfos2) { + if (DateUtils.isSameDay(date, fileInfo2.getLastModified()) || fileInfo2.getFileName().contains(nowVersion)) { + pblackAllFileName = fileInfo2.getFileName(); + break; + } + } + if (StringUtils.isBlank(pblackAllFileName)) { + pblackAllFileName = fileInfos2.get(0).getFileName(); + } + } else { + LogUtil.WriteLog_Error("[uuid:" + uuid + "]-获取当日全量SQB文件失败", "ZipToSqbServiceImpl-createSqbByDll"); + //更新sqlite任务表的任务状态为2-报错 + DatabaseUtil.insertSqlite(sqliteDriverName, sqliteUrl, Constant.ERROR_UPDATE_BUSINESS_HANDLER + businessTask.getId()); + } + LogUtil.WriteLog_HRBlackCard("[uuid:" + uuid + "]-获取当日全量SQB文件名称" + pblackAllFileName, "ZipToSqbServiceImpl-createSqbByDll"); + } + //如果没有最新的全量SQB文件时,不生成增量文件 + if (StringUtils.isNotBlank(pblackAllFileName)) { + LogUtil.WriteLog_HRBlackCard("[uuid:" + uuid + "]-调用动态库生成增量入参,全量SQB文件全路径" + (sqbQlFileDir + File.separator + pblackAllFileName).replace("\\", "/"), "ZipToSqbServiceImpl-createSqbByDll"); + LogUtil.WriteLog_HRBlackCard("[uuid:" + uuid + "]-调用动态库生成增量入参,生成SQB文件全路径" + sqbPathName.replace("\\", "/"), "ZipToSqbServiceImpl-createSqbByDll"); + LogUtil.WriteLog_HRBlackCard("[uuid:" + uuid + "]-调用动态库生成增量入参,生成SQBzlib文件全路径" + sqbZlibPathName.replace("\\", "/"), "ZipToSqbServiceImpl-createSqbByDll"); + + countSqb = CMinFeeCreator.INSTANCE.MakeBlackIncSQB(etcType, version, format, incDirLst.toString(), + (sqbQlFileDir + File.separator + pblackAllFileName).replace("\\", "/"), + sqbPathName.replace("\\", "/"), sqbZlibPathName.replace("\\", "/"), bytMd5); + LogUtil.WriteLog_HRBlackCard("[uuid:" + uuid + "]-]调用动态库生成增量SQB文件完成,返回值为" + countSqb, "ZipToSqbServiceImpl-createSqbByDll"); + } + + } else { + LogUtil.WriteLog_HRBlackCard("[uuid:" + uuid + "]-该时间点" + protocolType + "已下发/或者该点不下发", "ZipToSqbServiceImpl-createSqbByDll"); + //更新sqlite任务表的任务状态为3-不下发 + DatabaseUtil.insertSqlite(sqliteDriverName, sqliteUrl, + Constant.NOT_DIS_UPDATE_BUSINESS_HANDLER + DateTimeUtil.getFormateString(new Date(), Constant.YYYY_MM_DD_HH_MM_SS) + Constant.WHERE_ID + businessTask.getId()); + LogUtil.WriteLog_HRBlackCard("[uuid:" + uuid + "]-更新business_tasks_info任务表的下发状态为3-不下发,id为" + businessTask.getId(), "ZipToSqbServiceImpl-createSqbByDll"); + } + }else{ + //获取当前加载几天的增量 + String incDays = StringUtils.isNotBlank(PropertiesUtil.getValue("incDays")) ? PropertiesUtil.getValue("incDays") : "10"; LogUtil.WriteLog_HRBlackCard("[uuid:" + uuid + "]-调用动态库生成增量SQB文件中,协议类型为" + protocolType + "zip文件名为" + fileName, "ZipToSqbServiceImpl-createSqbByDll"); //每天生成一个备份zip文件夹存放增量下载的zip文件 dayBackPath = NFSFilePath + PathUtil.downFileBackup + dbfDir + File.separator + dateTime + File.separator; @@ -515,6 +630,8 @@ public class ZipToSqbServiceImpl implements ZipToSqbService { LogUtil.WriteLog_MDBlackCard("[uuid:" + uuid + "]-调用动态库生成全量SQB文件完成,返回值为" + countSqb, "ZipToSqbServiceImpl-createMDSqbByDll"); } else { + //获取当前加载几天的增量 + String incDays = StringUtils.isNotBlank(PropertiesUtil.getValue("incDays")) ? PropertiesUtil.getValue("incDays") : "10"; LogUtil.WriteLog_MDBlackCard("[uuid:" + uuid + "]-调用动态库生成增量SQB文件中,协议类型为" + protocolType + "zip文件名为" + fileName, "ZipToSqbServiceImpl-createMDSqbByDll"); //每天生成一个备份zip文件夹存放增量下载的zip文件 diff --git a/ParamDownload/src/main/java/com/nm/gsgl/test/Test250730.java b/ParamDownload/src/main/java/com/nm/gsgl/test/Test250730.java new file mode 100644 index 00000000..cd78686a --- /dev/null +++ b/ParamDownload/src/main/java/com/nm/gsgl/test/Test250730.java @@ -0,0 +1,35 @@ +package com.nm.gsgl.test; + +import com.nm.gsgl.common.Constant; +import com.nm.gsgl.common.utils.DateTimeUtil; +import com.nm.gsgl.common.utils.PathUtil; +import com.nm.gsgl.common.utils.PropertiesUtil; +import org.apache.commons.lang3.StringUtils; + +import java.io.File; +import java.util.Date; + +/** + * @author: shuguang + * @date: 2025年07月30日 15:35 + * @description: + */ +public class Test250730 { + public static void main(String[] args) { + Date date = new Date(); + //获取当前加载几天的增量 + String emercarincDay = "1"; + String dbfDir = "EMERCAR"; + + StringBuilder incDirLst = new StringBuilder(); + boolean fDir = false; + for (int i = 0; i < Integer.parseInt(emercarincDay); i++) { + if (fDir) { + incDirLst.append("|"); + } + incDirLst.append("/usr/test").append(File.separator).append(DateTimeUtil.getFormateString(DateTimeUtil.addDateDays(date, -i), Constant.YYYYMMDD)); + fDir = true; + } + System.out.println(incDirLst); + } +}