diff --git a/CPCReconciliation.zip b/CPCReconciliation.zip deleted file mode 100644 index 6598867..0000000 Binary files a/CPCReconciliation.zip and /dev/null differ diff --git a/CPCReconciliation/pom.xml b/CPCReconciliation/pom.xml index 5f49f12..e55f8ce 100644 --- a/CPCReconciliation/pom.xml +++ b/CPCReconciliation/pom.xml @@ -259,6 +259,18 @@ 1.8.0 compile + + + com.zte.goldendb + gdb_mysql-connector-java + 5.1.46.67 + + + + org.bouncycastle + bcprov-jdk18on + 1.78.1 + diff --git a/CPCReconciliation/src/main/java/com/nmg/gs/common/config/MyEnvironmentPostProcessor.java b/CPCReconciliation/src/main/java/com/nmg/gs/common/config/MyEnvironmentPostProcessor.java index e06441f..ce831f6 100644 --- a/CPCReconciliation/src/main/java/com/nmg/gs/common/config/MyEnvironmentPostProcessor.java +++ b/CPCReconciliation/src/main/java/com/nmg/gs/common/config/MyEnvironmentPostProcessor.java @@ -1,6 +1,7 @@ package com.nmg.gs.common.config; +import com.nmg.gs.common.emnu.Constant; import com.nmg.gs.common.utils.PropertiesUtil; import com.nmg.gs.common.utils.PathUtil; import com.trkf.PasswordEncryption.PassWordUtils; @@ -44,31 +45,39 @@ public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor { properties.load(new FileInputStream(path)); String DBType = properties.getProperty("DBType") == null ? "1" : properties.getProperty("DBType"); Newproperties.load(new FileInputStream(NewPath)); - properties.setProperty("spring.logback.logPath",PathUtil.TomcatPath+"/logs"); - properties.setProperty("spring.datasource.url",properties.getProperty("DBUrl")); - properties.setProperty("spring.datasource.username",properties.getProperty("DBUserName")); - properties.setProperty("spring.datasource.password",PassWordUtils.decrypt(properties.getProperty("DBPassWord"))); - switch (DBType) { - case "1": - properties.setProperty("spring.datasource.driver-class-name", Newproperties.getProperty("sqlClassName")); - properties.setProperty("spring.datasource.validationQuery", Newproperties.getProperty("sqlvalidationQuery")); - properties.setProperty("spring.datasource.hikari.connection-test-query", Newproperties.getProperty("sqlvalidationQuery")); - break; - case "2": - properties.setProperty("spring.datasource.driver-class-name", Newproperties.getProperty("OracleClassName")); - properties.setProperty("spring.datasource.validationQuery", Newproperties.getProperty("OraclevalidationQuery")); - properties.setProperty("spring.datasource.hikari.connection-test-query", Newproperties.getProperty("OraclevalidationQuery")); - break; - case "3": - properties.setProperty("spring.datasource.driver-class-name", Newproperties.getProperty("DMClassName")); - properties.setProperty("spring.datasource.validationQuery", Newproperties.getProperty("DMvalidationQuery")); - properties.setProperty("spring.datasource.hikari.connection-test-query", Newproperties.getProperty("DMvalidationQuery")); - break; - case "4": - properties.setProperty("spring.datasource.driver-class-name", Newproperties.getProperty("MySQLClassName")); - properties.setProperty("spring.datasource.validationQuery", Newproperties.getProperty("MySQLvalidationQuery")); - properties.setProperty("spring.datasource.hikari.connection-test-query", Newproperties.getProperty("MySQLvalidationQuery")); - break; + //获取是否是goldenDB数据库 + String IsGolDen = properties.getProperty("IsGolDen") == null ? "0" : properties.getProperty("IsGolDen"); + properties.setProperty("spring.logback.logPath", PathUtil.TomcatPath + "/logs"); + properties.setProperty("spring.datasource.url", properties.getProperty("DBUrl")); + properties.setProperty("spring.datasource.username", properties.getProperty("DBUserName")); + properties.setProperty("spring.datasource.password", PassWordUtils.decrypt(properties.getProperty("DBPassWord"))); + if(Constant.STR_ONE.equals(IsGolDen)){ + properties.setProperty("spring.datasource.driver-class-name", Newproperties.getProperty("GoldenDBClassName")); + properties.setProperty("spring.datasource.validationQuery", Newproperties.getProperty("GoldenvalidationQuery")); + properties.setProperty("spring.datasource.hikari.connection-test-query", Newproperties.getProperty("GoldenvalidationQuery")); + }else { + switch (DBType) { + case "1": + properties.setProperty("spring.datasource.driver-class-name", Newproperties.getProperty("sqlClassName")); + properties.setProperty("spring.datasource.validationQuery", Newproperties.getProperty("sqlvalidationQuery")); + properties.setProperty("spring.datasource.hikari.connection-test-query", Newproperties.getProperty("sqlvalidationQuery")); + break; + case "2": + properties.setProperty("spring.datasource.driver-class-name", Newproperties.getProperty("OracleClassName")); + properties.setProperty("spring.datasource.validationQuery", Newproperties.getProperty("OraclevalidationQuery")); + properties.setProperty("spring.datasource.hikari.connection-test-query", Newproperties.getProperty("OraclevalidationQuery")); + break; + case "3": + properties.setProperty("spring.datasource.driver-class-name", Newproperties.getProperty("DMClassName")); + properties.setProperty("spring.datasource.validationQuery", Newproperties.getProperty("DMvalidationQuery")); + properties.setProperty("spring.datasource.hikari.connection-test-query", Newproperties.getProperty("DMvalidationQuery")); + break; + case "4": + properties.setProperty("spring.datasource.driver-class-name", Newproperties.getProperty("MySQLClassName")); + properties.setProperty("spring.datasource.validationQuery", Newproperties.getProperty("MySQLvalidationQuery")); + properties.setProperty("spring.datasource.hikari.connection-test-query", Newproperties.getProperty("MySQLvalidationQuery")); + break; + } } System.out.println("--------------------------CPCReconciliation-本次载入数据库----------------------"); System.out.println(" server.port : " + properties.getProperty("server.port")); diff --git a/CPCReconciliation/src/main/java/com/nmg/gs/common/emnu/MessageEnum.java b/CPCReconciliation/src/main/java/com/nmg/gs/common/emnu/MessageEnum.java index a75703a..75f5684 100644 --- a/CPCReconciliation/src/main/java/com/nmg/gs/common/emnu/MessageEnum.java +++ b/CPCReconciliation/src/main/java/com/nmg/gs/common/emnu/MessageEnum.java @@ -10,7 +10,16 @@ public enum MessageEnum { * 成功 */ 成功("0", "成功"), - + /** + * 参数校验 + */ + 鉴权码不存在("701", "鉴权码不存在"), + md5校验失败("702", "md5校验失败"), + POST参数校验失败("703", "POST参数校验失败"), + 请求文件名参数校验失败("704", "请求文件名参数校验失败"), + 请求数据不存在("705", "请求数据不存在"), + 当前数据已为最新("706", "当前数据已为最新"), + 最小费额文件不存在("707", "最小费额文件不存在"), /** * 异常 */ @@ -19,6 +28,10 @@ public enum MessageEnum { 返回数据格式错误("20003", "返回数据格式错误"), 查询数据失败("20004", "查询数据失败"), 数据库连接异常("20005", "数据库连接异常"), + 复制文件失败("20006", "复制文件失败"), + 文件移动重命名失败("20007", "文件移动重命名失败"), + 加密失败("20008", "加密失败"), + 解密失败("20009", "解密失败"), 系统异常("99999","操作失败"), ; private String code; diff --git a/CPCReconciliation/src/main/java/com/nmg/gs/common/timetask/TaskThreadPoolConfig.java b/CPCReconciliation/src/main/java/com/nmg/gs/common/timetask/TaskThreadPoolConfig.java deleted file mode 100644 index d970e6a..0000000 --- a/CPCReconciliation/src/main/java/com/nmg/gs/common/timetask/TaskThreadPoolConfig.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.nmg.gs.common.timetask; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; - -import java.util.concurrent.Executor; -import java.util.concurrent.ThreadPoolExecutor; - -/** - * @author: shuguang - * @date: 2023年02月08日 20:35 - * @description: 定时任务线程池 - */ -@Configuration -@EnableScheduling // 开启定时任务 -@EnableAsync //开启对异步定时任务的支持 -public class TaskThreadPoolConfig { - @Bean("taskGdPayInfo") // bean的名称,默认为首字母小写的方法名 - public Executor taskGdPayInfo() { - ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); - //线程前缀名 - executor.setThreadNamePrefix("task-GdPayInfo-"); - //最大线程数 - executor.setMaxPoolSize(1); - //核心线程数 - executor.setCorePoolSize(1); - //任务队列的大小 - executor.setQueueCapacity(5); - //这种策略下,因为线程池已经无法接纳新的任务了,那么谁提交的这个任务,谁就去跑这个业务; - // - //比如,主线程向线程池提交了一个任务,线程池已经不能接纳这个任务了,那么此时就会让这个提交任务的主线程去执行这个任务; - // - //这种策略有两点好处:(1)这种策略,避免了业务损失;(2)可以让任务提交的速度降低下来,比如主线程提交的任务被打回来后,主线程就必须执行完这个被打回来的任务后,才能够向线程池提交下一个任务,而这就相当于给了线程池一个缓冲的时间; - //executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); - //这种策略,会默默的把新来的这个任务给丢弃;我们不会得到通知; - executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy()); - //线程初始化 - executor.initialize(); - - return executor; - } - - -} diff --git a/CPCReconciliation/src/main/java/com/nmg/gs/common/timetask/TimeTaskInfo.java b/CPCReconciliation/src/main/java/com/nmg/gs/common/timetask/TimeTaskInfo.java deleted file mode 100644 index ac3fdf3..0000000 --- a/CPCReconciliation/src/main/java/com/nmg/gs/common/timetask/TimeTaskInfo.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.nmg.gs.common.timetask; - -import com.google.common.base.Stopwatch; -import com.nmg.gs.common.emnu.Constant; -import com.nmg.gs.common.utils.DateTimeUtil; -import com.nmg.gs.common.utils.PropertiesUtil; -import com.nmg.gs.common.utils.UuidUtil; -import com.nmg.gs.service.RequestInterfaceService; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.springframework.context.annotation.PropertySource; -import org.springframework.scheduling.annotation.Async; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import java.time.LocalDateTime; -import java.util.Date; -import java.util.concurrent.TimeUnit; - -/** - * @author: shuguang - * @date: 2025-4-23 15:18 - * @description: 定时执行线程任务 - */ -@PropertySource(value = "classpath:static/timeTask.properties") -@Component -@EnableAsync -@Slf4j -public class TimeTaskInfo { - - @Resource - private RequestInterfaceService requestInterfaceService; - - /** - * 根据配置时间定时执行获取国道CPC对账文件进行入库操作 - * - * @author shuguang - * @date 2025-4-23 15:18 - */ - @Async("taskGdPayInfo") - @Scheduled(cron = "${time.corn1}") - public void timeTaskGdPayInfo() { - String uuid = UuidUtil.getUuid(); - log.info("[uuid:{}]-定时执行获取国道CPC对账文件进行入库操作,当前时间={}", uuid, LocalDateTime.now()); - // 启动计时器 - Stopwatch stopwatch = Stopwatch.createStarted(); - try { - String isOpenDCPCTimeTask = PropertiesUtil.getValue("isOpenDCPCTimeTask"); - if(StringUtils.isBlank(isOpenDCPCTimeTask) || !Constant.STR_ONE.equals(isOpenDCPCTimeTask.trim())){ - log.info("[uuid:{}]-定时执行获取国道CPC对账文件进行入库操作未开启", uuid); - // 停止计时 - stopwatch.stop(); - return; - } - //获取前一天 - String beforeDateString = DateTimeUtil.getFormateString(DateTimeUtil.addDateDays(new Date(), -1), Constant.YYYY_MM_DD); - requestInterfaceService.getRequestInterface(uuid,beforeDateString); - } catch (Exception e) { - log.error("[uuid:{}]-定时执行获取国道CPC对账文件进行入库操作服务异常", uuid, e); - } - finally { - stopwatch.stop(); - log.info("[uuid:{}]-定时执行获取国道CPC对账文件进行入库操作服务执行完成,耗时{}毫秒", uuid, stopwatch.elapsed(TimeUnit.MILLISECONDS)); - } - } -} diff --git a/CPCReconciliation/src/main/java/com/nmg/gs/common/utils/FileUtil.java b/CPCReconciliation/src/main/java/com/nmg/gs/common/utils/FileUtil.java new file mode 100644 index 0000000..f117508 --- /dev/null +++ b/CPCReconciliation/src/main/java/com/nmg/gs/common/utils/FileUtil.java @@ -0,0 +1,802 @@ +package com.nmg.gs.common.utils; + +import cn.hutool.core.util.StrUtil; +import com.nmg.gs.common.emnu.MessageEnum; +import com.nmg.gs.common.exception.PPException; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.filefilter.AndFileFilter; +import org.apache.commons.io.filefilter.FileFileFilter; +import org.apache.commons.io.filefilter.FileFilterUtils; +import org.apache.commons.io.filefilter.IOFileFilter; +import org.apache.commons.io.filefilter.TrueFileFilter; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.URLDecoder; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.attribute.BasicFileAttributes; +import java.nio.file.attribute.FileTime; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import java.util.Objects; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + +/** + * @author: shuguang + * @date: 2022年10月13日 10:52 + * @description: 文件工具类 + */ +@Slf4j +public class FileUtil { + + /** + * 获取文件夹下的所有文件夹的名称 + * + * @param folderPath 文件夹下 + * @return java.util.List + * @author shuguang + * @date 2023-02-27 16:50 + */ + public static List folderNames(String folderPath) { + List strings = new ArrayList<>(); + // 获得指定文件对象 + File file = new File(folderPath); + if (file.exists()) { + File[] array = file.listFiles(); + if (null != array && array.length > 0) { + for (File file1 : array) { + if (file1.isDirectory()) { + strings.add(Long.parseLong(file1.getName())); + } + } + } + } + return strings; + } + + + /** + * 获取文件夹下的所有文件名称 + * + * @param filePath + * @param list + * @return java.util.List + * @author shuguang + * @date 2023-02-28 14:19 + */ + public static List obtainFileName(String filePath, List list) { + // 获得指定文件对象 + File file = new File(filePath); + //判断目录是否存在 + if (file.exists()) { + // 获得该文件夹内的所有文件 + File[] array = file.listFiles(); + if (null != array && array.length > 0) { + for (File value : array) { + //如果是文件 + if (value.isFile()) { + list.add(value.getName()); + } else { + obtainFileName(value.getPath(), list); + } + } + } + } + return list; + } + + /** + * 获取文件夹下的包含str字符串的文件名 + * + * @param filePath 文件夹下 + * @param str 字符串 + * @return java.lang.String + * @author shuguang + * @date 2023-02-28 17:16 + */ + public static String zlibFileName(String filePath, String str) { + //获取的文件名称 + String fileName = ""; + // 获得指定文件对象 + File file = new File(filePath); + //判断目录是否存在 + if (file.exists()) { + // 获得该文件夹内的所有文件 + File[] array = file.listFiles(); + if (null != array && array.length > 0) { + for (File value : array) { + //如果是文件 + if (value.isFile() && value.getName().contains(str)) { + fileName = value.getName(); + break; + } + } + } + } + return fileName; + } + + public static void fileCopyReName(String oldFileNamePath, String newFileNamePath) { + try { + FileUtils.copyFile(new File(oldFileNamePath), new File(newFileNamePath)); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + /** + * 判断文件是否存在 + */ + public static boolean fileExists(String plainFilePath) { + File file = new File(plainFilePath); + return file.exists(); + } + + /** + * 清理目录中过期的文件 + * + * @param dirPath 文件路径 + * @param ms 时间 /毫秒 + */ + public static void timeout(String dirPath, long ms) { + // 该日期之前的文件 + Date pointDate = new Date(System.currentTimeMillis() - ms); + // 文件过滤条件 + IOFileFilter timeFileFilter = FileFilterUtils.ageFileFilter(pointDate, true); + IOFileFilter fileFiles = new AndFileFilter(FileFileFilter.FILE, timeFileFilter); + File directory = new File(dirPath); + Iterator itFile = FileUtils.iterateFiles(directory, fileFiles, TrueFileFilter.INSTANCE); + // 删除符合条件的文件 + while (itFile.hasNext()) { + delete(itFile.next()); + } + } + + /** + * 删除 + * + * @param file + */ + public static void delete(File file) { + boolean result = file.delete(); + //if (result) { + // log.info("删除: {} 成功", file.getAbsolutePath()); + //} else { + // log.warn("删除: {} 失败", file.getAbsolutePath()); + //} + + } + + /** + * 删除总服务器上的超时备份文件 + * + * @param backUpPath 文件路径 + * @param days 超时天数 + * @param fileType 文件名后缀 + * @author shuguang + * @date 2023-01-12 8:59 + */ + public static void DeleteBackFile(String backUpPath, int days, String fileType) { + File[] files = new File(backUpPath).listFiles(); + try { + for (File file : files) { + if (!file.isDirectory()) { + String backFileName = file.getName(); + if (backFileName.contains("TB_")) { + // 根据文件的绝对路径获取Path + Path path = Paths.get(file.getAbsolutePath()); + // 根据path获取文件的基本属性类 + BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class); + // 从基本属性类中获取文件创建时间 + FileTime fileTime = attrs.creationTime(); + // 将文件创建时间转成毫秒 + long millis = fileTime.toMillis(); + //获取当前时间毫秒值 + Date date = new Date(); + long nowMillis = date.getTime(); + long diffDays = (nowMillis - millis) / (1000L * 60 * 60 * 24); + if (diffDays > days && backFileName.contains(fileType)) { + file.delete(); + } + + } + } + + + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + + /** + * 删除空的文件夹 + * + * @param folder 指定目录文件 + */ + + public static void deleteEmptyFolder(File folder) { + if (folder.isDirectory()) { + File[] files = folder.listFiles(); + if (files != null && files.length > 0) { + for (File file : files) { + deleteEmptyFolder(file); + } + } + if (Objects.requireNonNull(folder.listFiles()).length == 0) { + folder.delete(); + } + } + } + + + /** + * 获取指定文件夹下所有文件,不含文件夹里的文件 + * + * @param dirFilePath 文件夹路径 + */ + public static List getAllFile(String dirFilePath) { + if (StrUtil.isBlank(dirFilePath)) { + return null; + } + return getAllFile(new File(dirFilePath)); + } + + + /** + * 获取指定文件夹下所有文件,不含文件夹里的文件 + * + * @param dirFile 文件夹 + */ + public static List getAllFile(File dirFile) { + // 如果文件夹不存在或着不是文件夹,则返回 null + if (Objects.isNull(dirFile) || !dirFile.exists() || dirFile.isFile()) { + return null; + } + + File[] childrenFiles = dirFile.listFiles(); + if (Objects.isNull(childrenFiles) || childrenFiles.length == 0) { + return null; + } + + List files = new ArrayList<>(); + for (File childFile : childrenFiles) { + // 如果是文件,直接添加到结果集合 + if (childFile.isFile()) { + files.add(childFile); + } + //以下几行代码取消注释后可以将所有子文件夹里的文件也获取到列表里 +// else { +// // 如果是文件夹,则将其内部文件添加进结果集合 +// List cFiles = getAllFile(childFile); +// if (Objects.isNull(cFiles) || cFiles.isEmpty()) continue; +// files.addAll(cFiles); +// } + } + return files; + } + + /** + * 复制文件到新的文件路径 + * + * @param oldFilePath 源文件路径 + * @param newFilePath 复制文件路径 + * @author shuguang + * @date 2023-01-12 8:33 + */ + public static void copyFile(String oldFilePath, String newFilePath) { + //拷贝备份文件到备份目录 + try { + FileUtils.copyFile(new File(oldFilePath), new File(newFilePath)); + } catch (IOException e) { + log.error("拷贝备份文件{},到{}失败:{}", oldFilePath, newFilePath, e.getMessage(), e); + throw new PPException(MessageEnum.复制文件失败.getCode(), MessageEnum.复制文件失败.getMessage()); + } + } + + /** + * 将指定的zip文件解压到指定目录下,其中:zipName:文件名,targetDirName:需解压到的目录 + * + * @param zipName 文件名 + * @param targetDirName 需解压到的目录 + * @return java.util.List 解压后的文件路径 + * @author shuguang + * @date 2022-10-22 13:45 + */ + public static List upZipFile(String zipName, String targetDirName) { + //记录解压后的文件路径 + List srcList = new ArrayList<>(); + //log.info("开始解压缩文件{}", zipName); + try { + byte[] buffer = new byte[1024]; + ZipInputStream zis = new ZipInputStream(new FileInputStream(zipName)); + //获取压缩包中的entry,并将其解压 + ZipEntry zipEntry = zis.getNextEntry(); + int i = 0; + while (zipEntry != null) { + File newFile = newFile(new File(targetDirName), zipEntry); + srcList.add(newFile.getAbsolutePath()); + FileOutputStream fos = new FileOutputStream(newFile); + int len; + while ((len = zis.read(buffer)) > 0) { + fos.write(buffer, 0, len); + } + fos.close(); + i++; + //解压完成一个entry,再解压下一个 + zipEntry = zis.getNextEntry(); + } + //log.info("解压缩文件完成,文件数为{}", i); + zis.closeEntry(); + zis.close(); + } catch (IOException e) { + log.error("解压缩{}失败:{}", zipName, e.getMessage(), e); + throw new PPException(MessageEnum.系统异常.getCode(), MessageEnum.系统异常.getMessage()); + } + return srcList; + } + + + /** + * 在解压目标文件夹,新建一个文件 + * + * @return java.io.File + * @author shuguang + * @date 2022-10-22 13:47 + */ + public static File newFile(File destinationDir, ZipEntry zipEntry) throws IOException { + File destFile = new File(destinationDir, zipEntry.getName()); + if (destFile.isDirectory()) { + // 如果zn是一个目录,则创建目录 + new File(String.valueOf(destFile)).mkdirs(); + } else { + // 如果zn是文件,则创建父目录 + new File(String.valueOf(destFile)).getParentFile().mkdirs(); + } + // 否则创建文件 + new File(String.valueOf(destFile)); + String destDirPath = destinationDir.getCanonicalPath(); + String destFilePath = destFile.getCanonicalPath(); + if (!destFilePath.startsWith(destDirPath + File.separator)) { + throw new IOException("该解压项在目标文件夹之外: " + zipEntry.getName()); + } + return destFile; + } + + + /** + * 读取文本操作 + * + * @param path 文件全路径 + * @return java.lang.String[] + * @author shuguang + * @date 2022-10-16 15:40 + */ + public static String[] readTxt(String path) { + InputStreamReader isr; + List list = new ArrayList<>(); + String[] strings; + try { + isr = new InputStreamReader(new FileInputStream(path), "GBK"); + BufferedReader read = new BufferedReader(isr); + String s; + while ((s = read.readLine()) != null) { + if (s.trim().length() > 1) { + list.add(s.trim()); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + //确定数组长度 + strings = new String[list.size()]; + for (int i = 0; i < list.size(); i++) { + String s = list.get(i); + strings[i] = s; + } + return strings; + } + + /** + * 根据路径创建文件夹 + * + * @param path 路径 + * @author shuguang + * @date 2022-10-16 13:07 + */ + public static void fileCreat(String path) { + File file = new File(path); + if (!file.isDirectory()) { + file.mkdirs(); + } + + } + + /** + * 根据路径创建新文件 + * + * @param path 文件全路径 + * @author shuguang + * @date 2023-07-26 13:07 + */ + public static void newFileCreat(String path) { + File file = new File(path); + if (!file.exists()) { + //创建文件 + try { + file.createNewFile(); + } catch (IOException e) { + //log.error(e.getMessage(), e); + } + } + + } + + /** + * 根据路径删除文件 + * + * @param path 路径 + * @author shuguang + * @date 2022-10-16 13:07 + */ + public static void fileDelete(String path) { + File file = new File(path); + if (file.exists()) { + file.delete(); + } + + } + + /** + * 移动文件并重命名 + * + * @param oldPath 原路径 + * @param newPath 移动后的路径 + * @author shuguang + * @date 2023-01-31 10:14 + */ + public static void moveFileReName(String oldPath, String newPath) { + try { + FileUtils.moveFile(new File(oldPath), new File(newPath)); + } catch (IOException e) { + e.printStackTrace(); + throw new PPException(MessageEnum.文件移动重命名失败.getCode(), MessageEnum.文件移动重命名失败.getMessage()); + } + + } + + + /** + * 写入txt + * + * @param filePath 路径 + * @param str 字符串 + * @author shuguang + * @date 2022-10-13 14:25 + */ + public static void writeStringToFile(String filePath, String str) { + try { + FileOutputStream fos = new FileOutputStream(filePath); + fos.write(str.getBytes()); + fos.close(); + //log.info("路径下:{},字符串:{},写入txt完成", filePath, str); + } catch (Exception e) { + //log.error(e.getMessage(), e); + throw new PPException(MessageEnum.系统异常.getCode(), MessageEnum.系统异常.getMessage()); + } + } + + + /** + * 压缩zip + * + * @param srcFiles 图片名称 + * @param zipFile 文件路径 + */ + public static void zipFiles(List srcFiles, File zipFile, String localFileDir) { + // 创建 FileOutputStream 对象 + FileOutputStream fileOutputStream; + // 创建 ZipOutputStream + ZipOutputStream zipOutputStream; + // 创建 FileInputStream 对象 + BufferedInputStream bis = null; + FileInputStream inputStream = null; + // 判断压缩后的文件存在不,不存在则创建 + try { + if (!zipFile.exists()) { + zipFile.createNewFile(); + } + // 实例化 FileOutputStream 对象 + fileOutputStream = new FileOutputStream(zipFile); + // 实例化 ZipOutputStream 对象 + zipOutputStream = new ZipOutputStream(fileOutputStream); + // 创建 ZipEntry 对象 + ZipEntry zipEntry; + // 遍历源文件数组 + for (String file : srcFiles) { + // 将源文件数组中的当前文件读入 FileInputStream 流中 + String fileName = file; + fileName = URLDecoder.decode(fileName, "UTF-8"); + //获取文件输入流 localFileDir是服务端存储文件的路径 + File files = new File(localFileDir + File.separator + fileName); + inputStream = new FileInputStream(files); + // 文件后缀名称 + // 实例化 ZipEntry 对象,源文件数组中的当前文件 + zipEntry = new ZipEntry(fileName); + zipOutputStream.putNextEntry(zipEntry); + // 该变量记录每次真正读的字节个数 + int len; + // 定义每次读取的字节数组 + byte[] buffer = new byte[4096]; + while ((len = inputStream.read(buffer)) > 0) { + zipOutputStream.write(buffer, 0, len); + } + + } + zipOutputStream.closeEntry(); + zipOutputStream.close(); + + fileOutputStream.close(); + } catch (IOException e) { + log.error(e.getMessage(), e); + throw new PPException(MessageEnum.系统异常.getCode(), MessageEnum.系统异常.getMessage()); + } finally { + try { + if (bis != null) { + bis.close(); + } + if (inputStream != null) { + inputStream.close(); + } + } catch (IOException e) { + //log.error(e.getMessage(), e); + } + } + } + + /** + * 获取类路径 + * return 绝对路径地址 + */ + public static String getTemplatePath() { + String realPath = Objects.requireNonNull(FileUtil.class.getClassLoader().getResource("")).getFile(); + File file = new File(realPath); + realPath = file.getAbsolutePath(); + try { + realPath = URLDecoder.decode(realPath, "utf-8"); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new PPException(MessageEnum.系统异常.getCode(), MessageEnum.系统异常.getMessage()); + } + return realPath; + } + + public static void fileInput(HttpServletResponse response, String filename, File filePath) { + if (filePath.exists()) { + FileInputStream fis = null; + BufferedInputStream bis = null; + try { + response.setContentType("application/octet-stream;charset=utf-8"); + response.setHeader("content-disposition", "attachment;filename=" + java.net.URLEncoder.encode(filename, "UTF-8")); + byte[] buffer = new byte[4096]; + fis = new FileInputStream(filePath); + //增加文件的大小 + response.setContentLengthLong(fis.available()); + bis = new BufferedInputStream(fis); + OutputStream os = response.getOutputStream(); + int i = bis.read(buffer); + while (i != -1) { + os.write(buffer, 0, i); + i = bis.read(buffer); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new PPException(MessageEnum.系统异常.getCode(), MessageEnum.系统异常.getMessage()); + } finally { + if (bis != null) { + try { + bis.close(); + // 删除临时文件 + filePath.delete(); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } + if (fis != null) { + try { + fis.close(); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } + } + } + } + + + /** + * 删除文件夹以及文件夹下的文件 + * + * @param file 文件夹 + * @return boolean + * @author shuguang + * @date 2022-10-14 15:42 + */ + public static boolean delFile(File file) { + if (!file.exists()) { + return false; + } + if (file.isDirectory()) { + File[] files = file.listFiles(); + if (files != null) { + for (File f : files) { + delFile(f); + } + } + } + return file.delete(); + } + + /** + * 将上传的文件存储到临时位置 + * + * @param multipartFile 上传的zip文件 + * @param temporaryFolder 临时文件夹 + * @param temporaryFilePath 临时文件全路径 + * @author shuguang + * @date 2022-10-17 9:40 + */ + public static void temporaryFile(MultipartFile multipartFile, String temporaryFolder, String temporaryFilePath) { + if (multipartFile != null) { + try { + InputStream in = multipartFile.getInputStream(); + File file = new File(temporaryFolder); + if (!file.exists()) { + file.mkdirs(); + } + FileOutputStream out = new FileOutputStream(temporaryFilePath); + byte[] bytes = new byte[1024]; + int count; + while ((count = in.read(bytes)) >= 0) { + out.write(bytes, 0, count); + } + out.flush(); + out.close(); + in.close(); + //log.info("{}文件下载成功", multipartFile.getOriginalFilename()); + } catch (IOException e) { + log.error("文件下载失败{}", e.getMessage(), e); + throw new PPException(MessageEnum.系统异常.getCode(), MessageEnum.系统异常.getMessage()); + } + } + } + + /** + * 删除指定文件夹下的全部内容 + * + * @param file 指定文件夹 + */ + public static void removeFiles(File file) { + //将file子目录及子文件放进文件数组 + File[] files = file.listFiles(); + //如果包含文件进行删除操作 + if (files != null && files.length > 0) { + for (File value : files) { + //删除子文件 + if (value.isFile()) { + value.delete(); + //通过递归方法删除子目录的文件 + } else if (value.isDirectory()) { + removeFiles(value); + } + value.delete();//删除子目录 + } + } + } + + /** + * 根据解压路径获取json文件的绝对路径 + * + * @param destDir 存放json文件的文件夹路径 + * @return java.util.List + * @author shuguang + * @date 2023-02-08 9:48 + */ + public static List getJsonPaths(String destDir) { + List jsonPathList = new ArrayList<>(); + File file = new File(destDir); + File[] files = file.listFiles(); + if (files != null && files.length > 0) { + for (File file1 : files) { + jsonPathList.add(destDir + file1.getName()); + } + } + return jsonPathList; + } + + /** + * 根据解压路径获取json文件的绝对路径 + * + * @param destDir 存放json文件的文件夹路径 + * @return java.util.List + * @author shuguang + * @date 2023-02-08 9:48 + */ + public static String getJsonPath(String destDir) { + String jsonPath = ""; + File file = new File(destDir); + File[] files = file.listFiles(); + if (files != null && files.length > 0) { + for (File file1 : files) { + jsonPath = destDir + file1.getName(); + } + } + return jsonPath; + } + + /** + * 获取文件大小 + * + * @param file 文件 + * @return long + * @author shuguang + * @date 2023-02-20 20:36 + */ + public static long getFileSize(File file) { + long length = file.length(); + return length; + } + + /** + * 计算文件大小 + * + * @param fileS 文件字节 + * @return java.lang.String + * @author shuguang + * @date 2022-11-22 16:45 + */ + public static String formatFileSize(long fileS) { + DecimalFormat df = new DecimalFormat("#.00"); + String fileSizeString; + String wrongSize = "0B"; + if (fileS == 0) { + return wrongSize; + } + if (fileS < 1024) { + fileSizeString = df.format((double) fileS) + " B"; + } else if (fileS < 1048576) { + fileSizeString = df.format((double) fileS / 1024) + " KB"; + } else if (fileS < 1073741824) { + fileSizeString = df.format((double) fileS / 1048576) + " MB"; + } else { + fileSizeString = df.format((double) fileS / 1073741824) + " GB"; + } + return fileSizeString; + } + + public static void main(String[] args) throws IOException { + String path = "D:\\桌面\\增量\\123\\234\\"; + String s = "D:\\桌面\\增量\\123\\234\\ALLROADMINFEE_20230728001_G5511150100100_49_1110.SQB"; + fileCreat(path); + newFileCreat(s); + } +} diff --git a/CPCReconciliation/src/main/java/com/nmg/gs/common/utils/MD5Util.java b/CPCReconciliation/src/main/java/com/nmg/gs/common/utils/MD5Util.java index 7b6b5ba..9e9da74 100644 --- a/CPCReconciliation/src/main/java/com/nmg/gs/common/utils/MD5Util.java +++ b/CPCReconciliation/src/main/java/com/nmg/gs/common/utils/MD5Util.java @@ -9,6 +9,7 @@ import java.io.FileNotFoundException; import java.math.BigInteger; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; +import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -19,6 +20,14 @@ import java.security.NoSuchAlgorithmException; */ @Slf4j public class MD5Util { + /** + * 对字符串进行MD5加密 + * + * @param password 字符串 + * @return java.lang.String + * @author shuguang + * @date 2022-10-16 13:30 + */ /** * 对字符串进行MD5加密 * @@ -28,16 +37,24 @@ public class MD5Util { * @date 2022-10-16 13:30 */ public static String md5(String password) { - //生成一个md5加密器 + if (password == null) { + return null; + } try { + // 使用UTF-8编码将字符串转换为字节数组 + byte[] bytes = password.getBytes(StandardCharsets.UTF_8); MessageDigest md = MessageDigest.getInstance("MD5"); - //计算MD5 的值 - md.update(password.getBytes()); - //BigInteger 将8位的字符串 转成16位的字符串 得到的字符串形式是哈希码值 - //BigInteger(参数1,参数2) 参数1 是 1为正数 0为零 -1为负数 - return new BigInteger(1, md.digest()).toString(16); + md.update(bytes); + byte[] digest = md.digest(); + BigInteger no = new BigInteger(1, digest); + String hashtext = no.toString(16); + while (hashtext.length() < 32) { + hashtext = "0" + hashtext; + } + return hashtext; } catch (NoSuchAlgorithmException e) { - log.error("MD5Util对字符串进行MD5加密失败,报错:{}", e.getMessage()); + // 记录错误日志 + System.err.println("MD5 algorithm not found: " + e.getMessage()); } return null; } @@ -83,10 +100,8 @@ public class MD5Util { return value; } public static void main(String[] args) throws FileNotFoundException { - String s = "123456"; - System.out.println(MD5Util.md5(s)); - File file = new File("D:\\file\\download\\notice_table.txt"); - String md5ByFile = MD5Util.getMd5ByFile(file); - System.out.println(md5ByFile); + String input = "BASIC_LINKOWNERDOWNLOAD_REQ_15_20250820151211000.json"+"8c602c65fe6f57c4b721c5078bb8a916"; + String md5 = MD5Util.md5(input); + System.out.println("MD5: " + md5); } } diff --git a/CPCReconciliation/src/main/java/com/nmg/gs/common/utils/PathUtil.java b/CPCReconciliation/src/main/java/com/nmg/gs/common/utils/PathUtil.java index 9cebc9a..cc89684 100644 --- a/CPCReconciliation/src/main/java/com/nmg/gs/common/utils/PathUtil.java +++ b/CPCReconciliation/src/main/java/com/nmg/gs/common/utils/PathUtil.java @@ -26,6 +26,14 @@ public class PathUtil { public static String webName = "CPCReconciliation"; public static String downFile; + /** + * 加密文件路径 + */ + public static String encryptedFile; + /** + * 解密文件路径 + */ + public static String decryptedFile; public static String downZipInsertBackup; /** * zip解压成json文件文件夹 @@ -41,6 +49,8 @@ public class PathUtil { webappsPath = java.net.URLDecoder.decode(TomcatPath + "\\webapps\\", "utf-8"); uploadPath = java.net.URLDecoder.decode("\\uploadfiles\\" + webName, "utf-8"); downFile = java.net.URLDecoder.decode(uploadPath + "\\downFile\\", "utf-8"); + encryptedFile = java.net.URLDecoder.decode(uploadPath + "\\encryptedFile\\", "utf-8"); + decryptedFile = java.net.URLDecoder.decode(uploadPath + "\\decryptedFile\\", "utf-8"); unZip = java.net.URLDecoder.decode(uploadPath + "\\unZip\\", "utf-8"); downZipInsertBackup = java.net.URLDecoder.decode(uploadPath + "\\downZipInsertBackup\\", "utf-8"); if (projectApplicationPath.charAt(0) == '/' || projectApplicationPath.charAt(0) == '\\') { @@ -51,6 +61,8 @@ public class PathUtil { webappsPath = java.net.URLDecoder.decode(TomcatPath + "/webapps/", "utf-8"); uploadPath = java.net.URLDecoder.decode("/uploadfiles/" + webName, "utf-8"); downFile = java.net.URLDecoder.decode(uploadPath + "/downFile/", "utf-8"); + encryptedFile = java.net.URLDecoder.decode(uploadPath + "/encryptedFile/", "utf-8"); + decryptedFile = java.net.URLDecoder.decode(uploadPath + "/decryptedFile/", "utf-8"); unZip = java.net.URLDecoder.decode(uploadPath + "/unZip/", "utf-8"); downZipInsertBackup = java.net.URLDecoder.decode(uploadPath + "/downZipInsertBackup/", "utf-8"); versionPath = Objects.requireNonNull(ClassUtils.getDefaultClassLoader().getResource("")).getPath() + "version/"; diff --git a/CPCReconciliation/src/main/java/com/nmg/gs/controller/RecaptureDataController.java b/CPCReconciliation/src/main/java/com/nmg/gs/controller/RecaptureDataController.java deleted file mode 100644 index 7a96562..0000000 --- a/CPCReconciliation/src/main/java/com/nmg/gs/controller/RecaptureDataController.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.nmg.gs.controller; - -import com.nmg.gs.common.utils.UuidUtil; -import com.nmg.gs.entity.Res; -import com.nmg.gs.service.RequestInterfaceService; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - -import javax.annotation.Resource; -import java.util.Map; - -/** - * @author: shuguang - * @date: 2025年06月17日 8:30 - * @description: - */ -@RestController -public class RecaptureDataController { - @Resource - private RequestInterfaceService requestInterfaceService; - @PostMapping("/recaptureDataByDate") - public Res queryProgramVersion(@RequestBody Map map) { - String uuid = UuidUtil.getUuid(); - String dateString = map.get("dT").toString(); - requestInterfaceService.getRequestInterface(uuid,dateString); - return Res.success(); - } -} diff --git a/CPCReconciliation/src/main/java/com/nmg/gs/service/RequestInterfaceService.java b/CPCReconciliation/src/main/java/com/nmg/gs/service/RequestInterfaceService.java deleted file mode 100644 index 85450e3..0000000 --- a/CPCReconciliation/src/main/java/com/nmg/gs/service/RequestInterfaceService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.nmg.gs.service; - -/** - * @author: shuguang - * @date: 2025年04月18日 14:03 - * @description: - */ -public interface RequestInterfaceService { - /** - * 请求接口获取国道CPC对账数据 - * - * @author shuguang - * @date 2025-04-18 14:05 - */ - void getRequestInterface(String uuid,String beforeDateString); -} diff --git a/CPCReconciliation/src/main/java/com/nmg/gs/service/impl/RequestInterfaceServiceImpl.java b/CPCReconciliation/src/main/java/com/nmg/gs/service/impl/RequestInterfaceServiceImpl.java deleted file mode 100644 index f186237..0000000 --- a/CPCReconciliation/src/main/java/com/nmg/gs/service/impl/RequestInterfaceServiceImpl.java +++ /dev/null @@ -1,206 +0,0 @@ -package com.nmg.gs.service.impl; - -import com.alibaba.fastjson2.JSON; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.nmg.gs.common.emnu.Constant; -import com.nmg.gs.common.emnu.MessageEnum; -import com.nmg.gs.common.exception.PPException; -import com.nmg.gs.common.utils.MyOkHttpUtil; -import com.nmg.gs.common.utils.NewFileUtils; -import com.nmg.gs.common.utils.PathUtil; -import com.nmg.gs.common.utils.PropertiesUtil; -import com.nmg.gs.common.utils.SignUtil; -import com.nmg.gs.common.utils.UnzipUtil; -import com.nmg.gs.entity.GDCpcPayInfo; -import com.nmg.gs.entity.Signature; -import com.nmg.gs.entity.Summary; -import com.nmg.gs.mapper.GDCpcPayInfoMapper; -import com.nmg.gs.mapper.SummaryMapper; -import com.nmg.gs.service.RequestInterfaceService; -import lombok.extern.slf4j.Slf4j; -import okhttp3.HttpUrl; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import org.apache.commons.io.FileUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; -import org.springframework.util.ResourceUtils; - -import javax.annotation.Resource; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Objects; - -/** - * @author: shuguang - * @date: 2025年04月18日 14:04 - * @description: - */ -@Service -@Slf4j -public class RequestInterfaceServiceImpl implements RequestInterfaceService { - - @Resource - private GDCpcPayInfoMapper gdCpcPayInfoMapper; - @Resource - private SummaryMapper summaryMapper; - - /** - * 请求接口获取国道CPC对账数据 - * - * @author shuguang - * @date 2025-04-18 14:05 - */ - @Override - public void getRequestInterface(String uuid, String beforeDateString) { - log.info("[uuid:{}]-开始请求接口获取统计日{}的数据", uuid, beforeDateString); - String timestamp = String.valueOf(System.currentTimeMillis() / 1000); - String encryptTimestamp = SignUtil.generateSign(timestamp); - String verifyInterfaceUrl = PropertiesUtil.getValue("verifyInterfaceUrl"); - String reconciliationInterfaceUrl = PropertiesUtil.getValue("reconciliationInterfaceUrl"); - - // 构建包含查询参数的URL - HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(verifyInterfaceUrl)).newBuilder(); - urlBuilder.addQueryParameter("timestamp", timestamp); - - String requestUrl = urlBuilder.build().toString(); - - OkHttpClient client = new OkHttpClient().newBuilder() - .build(); - - Request request = new Request.Builder() - .url(requestUrl) - .method("GET", null) - .addHeader("app-key", Constant.APP_KEY) - .addHeader("signature", encryptTimestamp) - .build(); - - try (Response response = client.newCall(request).execute()) { - if (!response.isSuccessful()) { - log.error("[uuid:{}]-请求接口{}失败,返回码:{}", uuid, verifyInterfaceUrl, response.code()); - throw new IOException("返回码 " + response.code()); - } - - String responseData = Objects.requireNonNull(response.body()).string(); - - // 检查返回数据是否为 JSON 格式 - if (!isJson(responseData)) { - log.error("[uuid:{}]-请求接口{}返回数据格式错误,返回内容:{}", uuid, verifyInterfaceUrl, responseData); - throw new PPException(MessageEnum.返回数据格式错误.getCode(), MessageEnum.返回数据格式错误.getMessage()); - } - - log.info("[uuid:{}]-请求验签接口{}成功,返回数据:{}", uuid, verifyInterfaceUrl, responseData); - Signature signature = JSON.parseObject(responseData, Signature.class); - if (signature.getCode().equals(Constant.INT_10000)) { - log.info("[uuid:{}]-开始请求对账接口{}获取统计日{}的数据", uuid, reconciliationInterfaceUrl, beforeDateString); - String cpcDownFilePath = PropertiesUtil.getValue("cpcDownFilePath"); - // 调用工具类方法下载文件 - String fileName = MyOkHttpUtil.downloadFile(reconciliationInterfaceUrl, timestamp, beforeDateString, cpcDownFilePath + PathUtil.downFile); - if (StringUtils.isNotBlank(fileName)) { - insertGdCpcPayInfo(uuid, cpcDownFilePath, fileName); - } else { - log.info("[uuid:{}]-无统计日{}的数据", uuid, beforeDateString); - } - } - } catch (IOException e) { - log.error("[uuid:{}]-请求接口{}失败,报错:{}", uuid, verifyInterfaceUrl, e.getMessage()); - throw new PPException(MessageEnum.请求接口失败.getCode(), MessageEnum.请求接口失败.getMessage()); - } - } - - /** - * 检查字符串是否为 JSON 格式 - * - * @param str 输入字符串 - * @return 如果是 JSON 格式返回 true,否则返回 false - */ - private boolean isJson(String str) { - try { - JSON.parseObject(str); - return true; - } catch (Exception e) { - return false; - } - } - - - /** - * 解压文件 - */ - private List unzipFile(String uuid, String cpcDownFilePath, String fileName) { - log.info("[uuid:{}]-解压zip文件开始 {}", uuid, fileName); - //被解压的压缩文件 - String fileZip = cpcDownFilePath + PathUtil.downFile + fileName; - //解压的目标目录 - String destDir = cpcDownFilePath + PathUtil.unZip; - NewFileUtils.fileCreat(destDir); - //解压之前先清空解压目标目录 - log.info("[uuid:{}]-清空解压目标目录 {}", uuid, fileName); - NewFileUtils.removeFiles(new File(destDir)); - log.info("[uuid:{}]-解析zip文件{}生成json转对象开始", uuid, fileName); - //解压缩文件 - UnzipUtil.dealUnZip(fileZip, destDir); - - return NewFileUtils.getJsonPaths(destDir); - - } - - /** - * 将zip文件中的json数据插入数据库表中DCPC_GD_PAY_INFO和统计日汇总表DCPC_GD_SUMMARY_INFO - */ - private void insertGdCpcPayInfo(String uuid, String cpcDownFilePath, String fileName) throws IOException { - List jsonPathList = unzipFile(uuid, cpcDownFilePath, fileName); - Summary summary = null; - List detailList = new ArrayList<>(); - - if (jsonPathList.size() > 0) { - for (String jsonPath : jsonPathList) { - File file2 = ResourceUtils.getFile(jsonPath); - String json = FileUtils.readFileToString(file2, Constant.UTF_8); - if (jsonPath.contains("summary")) { - // 解析 Summary 对象 - summary = JSON.parseObject(json, Summary.class); - } else if (jsonPath.contains("detail")) { - // 解析 GDCpcPayInfo 列表 - List details = JSON.parseArray(json, GDCpcPayInfo.class); - if (details != null) { - detailList.addAll(details); - } - } - } - } - int count = 0; - log.info("[uuid:{}]-解析zip文件{}生成对象完成", uuid, fileName); - Date nowDate = new Date(); - if (!detailList.isEmpty()) { - log.info("[uuid:{}]-数据库表DCPC_GD_PAY_INFO按照主键PAY_NO先删后插", uuid); - for (GDCpcPayInfo info : detailList) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("PAY_NO", info.getPay_no()); - //按主键先删后插 - gdCpcPayInfoMapper.delete(queryWrapper); - info.setZip_filename(fileName); - info.setInsert_date(nowDate); - gdCpcPayInfoMapper.insert(info); - count++; - } - log.info("[uuid:{}]-插入数据库表DCPC_GD_PAY_INFO条数为{}", uuid, count); - } - - if (summary != null) { - log.info("[uuid:{}]-数据库表DCPC_GD_SUMMARY_INFO按照主键CLASS_DATE先删后插", uuid); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("CLASS_DATE", summary.getClass_date()); - summaryMapper.delete(queryWrapper); - summary.setZip_filename(fileName); - summary.setInsert_date(nowDate); - int insert = summaryMapper.insert(summary); - log.info("[uuid:{}]-插入数据库表DCPC_GD_SUMMARY_INFO,统计日:{},条数:{}", uuid, summary.getClass_date(), insert); - } - } - -} diff --git a/CPCReconciliation/src/main/java/com/nmg/gs/test/GuavaTest.java b/CPCReconciliation/src/main/java/com/nmg/gs/test/GuavaTest.java index 2b29e93..df4e51b 100644 --- a/CPCReconciliation/src/main/java/com/nmg/gs/test/GuavaTest.java +++ b/CPCReconciliation/src/main/java/com/nmg/gs/test/GuavaTest.java @@ -1,5 +1,6 @@ package com.nmg.gs.test; +import com.google.common.base.CaseFormat; import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.base.Optional; @@ -55,6 +56,27 @@ import static org.junit.jupiter.api.Assertions.assertThrows; * @description: */ public class GuavaTest { + @Test + public void test17() { + String constant_name = CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "CONSTANT_NAME"); + String constant_name2 = CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_UNDERSCORE, "CONSTANT_NAME"); + String constant_name3 = CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_HYPHEN, "CONSTANT_NAME"); + String constant_name4 = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_UNDERSCORE, "constant_name"); + String constant_name5 = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, "constant_name"); + System.out.println(constant_name); + System.out.println(constant_name2); + System.out.println(constant_name3); + System.out.println(constant_name4); + System.out.println(constant_name5); + } + @Test + public void test16() { + Iterable split = Splitter.on(',') + .trimResults() + .omitEmptyStrings() + .split("foo,bar,, qux"); + System.out.println(split); + } /** * Immutable Collections:不可变集合 */ diff --git a/CPCReconciliation/src/main/java/com/nmg/gs/test/Test02.java b/CPCReconciliation/src/main/java/com/nmg/gs/test/Test02.java new file mode 100644 index 0000000..f1ac42d --- /dev/null +++ b/CPCReconciliation/src/main/java/com/nmg/gs/test/Test02.java @@ -0,0 +1,12 @@ +package com.nmg.gs.test; + +/** + * @author: shuguang + * @date: 2025年06月26日 8:21 + * @description: + */ +public class Test02 { + public static void main(String[] args) { + + } +} diff --git a/CPCReconciliation/src/main/resources/version/1.0.2.txt b/CPCReconciliation/src/main/resources/version/1.0.3.txt similarity index 88% rename from CPCReconciliation/src/main/resources/version/1.0.2.txt rename to CPCReconciliation/src/main/resources/version/1.0.3.txt index c4ba3cf..812da03 100644 --- a/CPCReconciliation/src/main/resources/version/1.0.2.txt +++ b/CPCReconciliation/src/main/resources/version/1.0.3.txt @@ -7,3 +7,4 @@ reconciliationInterfaceUrl=https://openapi.mtuoluo.com/api/dcpc/billCheck 2 2025年06月18日 1.0.1 增加查询明细及统计日对账查询页面 3 2025年06月20日 1.0.2 重新获取统计日期的明细及汇总文件时DCPC_GD_PAY_INFO、DCPC_GD_SUMMARY_INFO按主键先删后插 +4 2025年08月21日 1.0.3 删除定时任务获取对账文件,迁移到项目GetDataInterface中 diff --git a/CPCReconciliation/target/CPCReconciliation.war b/CPCReconciliation/target/CPCReconciliation.war deleted file mode 100644 index 4323d4f..0000000 Binary files a/CPCReconciliation/target/CPCReconciliation.war and /dev/null differ diff --git a/CPCReconciliation/target/CPCReconciliation.war.original b/CPCReconciliation/target/CPCReconciliation.war.original deleted file mode 100644 index d2c0eb0..0000000 Binary files a/CPCReconciliation/target/CPCReconciliation.war.original and /dev/null differ diff --git a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/config/CorsConfig.class b/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/config/CorsConfig.class index 8914fbb..89e1122 100644 Binary files a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/config/CorsConfig.class and b/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/config/CorsConfig.class differ diff --git a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/config/MyEnvironmentPostProcessor.class b/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/config/MyEnvironmentPostProcessor.class index 4840239..dff31d7 100644 Binary files a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/config/MyEnvironmentPostProcessor.class and b/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/config/MyEnvironmentPostProcessor.class differ diff --git a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/emnu/MessageEnum.class b/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/emnu/MessageEnum.class index 5f2a6ed..ca4da6b 100644 Binary files a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/emnu/MessageEnum.class and b/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/emnu/MessageEnum.class differ diff --git a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/utils/ClobUtils.class b/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/utils/ClobUtils.class deleted file mode 100644 index 0c19072..0000000 Binary files a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/utils/ClobUtils.class and /dev/null differ diff --git a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/utils/FileUtil$1.class b/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/utils/FileUtil$1.class deleted file mode 100644 index f006549..0000000 Binary files a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/utils/FileUtil$1.class and /dev/null differ diff --git a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/utils/FileUtil.class b/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/utils/FileUtil.class index 0683310..fbb1a06 100644 Binary files a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/utils/FileUtil.class and b/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/utils/FileUtil.class differ diff --git a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/utils/LogUtil.class b/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/utils/LogUtil.class deleted file mode 100644 index 6502162..0000000 Binary files a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/utils/LogUtil.class and /dev/null differ diff --git a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/utils/MD5Util.class b/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/utils/MD5Util.class index 2f0aca7..21a94b7 100644 Binary files a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/utils/MD5Util.class and b/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/common/utils/MD5Util.class differ diff --git a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/test/HttpRequestHandler.class b/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/test/HttpRequestHandler.class deleted file mode 100644 index 33993c8..0000000 Binary files a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/test/HttpRequestHandler.class and /dev/null differ diff --git a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/test/Test.class b/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/test/Test.class deleted file mode 100644 index 64a42d3..0000000 Binary files a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/com/nmg/gs/test/Test.class and /dev/null differ diff --git a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/version/1.0.2.txt b/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/version/1.0.2.txt deleted file mode 100644 index c4ba3cf..0000000 --- a/CPCReconciliation/target/CPCReconciliation/WEB-INF/classes/version/1.0.2.txt +++ /dev/null @@ -1,9 +0,0 @@ -序号 日期 版本号 说明 -1 2025年04月18日 1.0.0 初始版本号(数字CPC车道系统-国道服务器对接接口-对账) - #DCPC验签接口及获取对账文件接口--目前是测试环境,后期换成内网地址 - #是否开启获取国道CPC对账文件 0--不开启,1-开启 - isOpenDCPCTimeTask=0 - verifyInterfaceUrl=https://openapi.mtuoluo.com/api/dcpc/user - reconciliationInterfaceUrl=https://openapi.mtuoluo.com/api/dcpc/billCheck -2 2025年06月18日 1.0.1 增加查询明细及统计日对账查询页面 -3 2025年06月20日 1.0.2 重新获取统计日期的明细及汇总文件时DCPC_GD_PAY_INFO、DCPC_GD_SUMMARY_INFO按主键先删后插 diff --git a/CPCReconciliation/target/classes/com/nmg/gs/common/config/CorsConfig.class b/CPCReconciliation/target/classes/com/nmg/gs/common/config/CorsConfig.class index 8914fbb..89e1122 100644 Binary files a/CPCReconciliation/target/classes/com/nmg/gs/common/config/CorsConfig.class and b/CPCReconciliation/target/classes/com/nmg/gs/common/config/CorsConfig.class differ diff --git a/CPCReconciliation/target/classes/com/nmg/gs/common/config/MyEnvironmentPostProcessor.class b/CPCReconciliation/target/classes/com/nmg/gs/common/config/MyEnvironmentPostProcessor.class index 4840239..dff31d7 100644 Binary files a/CPCReconciliation/target/classes/com/nmg/gs/common/config/MyEnvironmentPostProcessor.class and b/CPCReconciliation/target/classes/com/nmg/gs/common/config/MyEnvironmentPostProcessor.class differ diff --git a/CPCReconciliation/target/classes/com/nmg/gs/common/emnu/MessageEnum.class b/CPCReconciliation/target/classes/com/nmg/gs/common/emnu/MessageEnum.class index 5f2a6ed..ca4da6b 100644 Binary files a/CPCReconciliation/target/classes/com/nmg/gs/common/emnu/MessageEnum.class and b/CPCReconciliation/target/classes/com/nmg/gs/common/emnu/MessageEnum.class differ diff --git a/CPCReconciliation/target/classes/com/nmg/gs/common/utils/MD5Util.class b/CPCReconciliation/target/classes/com/nmg/gs/common/utils/MD5Util.class index 2f0aca7..21a94b7 100644 Binary files a/CPCReconciliation/target/classes/com/nmg/gs/common/utils/MD5Util.class and b/CPCReconciliation/target/classes/com/nmg/gs/common/utils/MD5Util.class differ diff --git a/CPCReconciliation/target/classes/com/nmg/gs/common/utils/PathUtil.class b/CPCReconciliation/target/classes/com/nmg/gs/common/utils/PathUtil.class index 3023214..db8a7cb 100644 Binary files a/CPCReconciliation/target/classes/com/nmg/gs/common/utils/PathUtil.class and b/CPCReconciliation/target/classes/com/nmg/gs/common/utils/PathUtil.class differ diff --git a/CPCReconciliation/target/classes/version/1.0.2.txt b/CPCReconciliation/target/classes/version/1.0.2.txt deleted file mode 100644 index c4ba3cf..0000000 --- a/CPCReconciliation/target/classes/version/1.0.2.txt +++ /dev/null @@ -1,9 +0,0 @@ -序号 日期 版本号 说明 -1 2025年04月18日 1.0.0 初始版本号(数字CPC车道系统-国道服务器对接接口-对账) - #DCPC验签接口及获取对账文件接口--目前是测试环境,后期换成内网地址 - #是否开启获取国道CPC对账文件 0--不开启,1-开启 - isOpenDCPCTimeTask=0 - verifyInterfaceUrl=https://openapi.mtuoluo.com/api/dcpc/user - reconciliationInterfaceUrl=https://openapi.mtuoluo.com/api/dcpc/billCheck -2 2025年06月18日 1.0.1 增加查询明细及统计日对账查询页面 -3 2025年06月20日 1.0.2 重新获取统计日期的明细及汇总文件时DCPC_GD_PAY_INFO、DCPC_GD_SUMMARY_INFO按主键先删后插 diff --git a/CPCReconciliation/target/maven-archiver/pom.properties b/CPCReconciliation/target/maven-archiver/pom.properties deleted file mode 100644 index 45dcb14..0000000 --- a/CPCReconciliation/target/maven-archiver/pom.properties +++ /dev/null @@ -1,3 +0,0 @@ -version=0.0.1-SNAPSHOT -groupId=com.nmg.gs -artifactId=CPCReconciliation diff --git a/CPCReconciliation/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/CPCReconciliation/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst deleted file mode 100644 index c1d82b1..0000000 --- a/CPCReconciliation/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ /dev/null @@ -1,44 +0,0 @@ -com\nmg\gs\common\utils\PropertiesUtil.class -com\nmg\gs\common\utils\TokenUtil.class -com\nmg\gs\test\Test01.class -com\nmg\gs\common\utils\LogUtil.class -com\nmg\gs\common\timetask\TimeTaskInfo.class -com\nmg\gs\entity\Trace.class -com\nmg\gs\test\Test03.class -com\nmg\gs\common\exception\PPExceptionHandler.class -com\nmg\gs\entity\Signature.class -com\nmg\gs\common\utils\SignUtil.class -com\nmg\gs\common\config\MybatisConfig.class -com\nmg\gs\common\emnu\Constant.class -com\nmg\gs\common\config\CaptchaConfig.class -com\nmg\gs\common\utils\MyOkHttpUtil.class -com\nmg\gs\test\Test05.class -com\nmg\gs\common\config\ErrorConfig.class -com\nmg\gs\CPCReconciliationApplication.class -com\nmg\gs\common\utils\DateTimeUtil.class -com\nmg\gs\common\utils\UuidUtil.class -com\nmg\gs\common\timetask\TaskThreadPoolConfig.class -com\nmg\gs\common\config\FilterConfig.class -com\nmg\gs\entity\GDCpcPayInfo.class -com\nmg\gs\test\Test.class -com\nmg\gs\common\config\RedisSessionConfig.class -com\nmg\gs\common\config\MyEnvironmentPostProcessor.class -com\nmg\gs\test\HttpRequestHandler.class -com\nmg\gs\mapper\SummaryMapper.class -com\nmg\gs\service\RequestInterfaceService.class -com\nmg\gs\common\emnu\MessageEnum.class -com\nmg\gs\common\utils\ClobUtils.class -com\nmg\gs\common\utils\PathUtil.class -com\nmg\gs\common\utils\PagesUtils.class -com\nmg\gs\entity\Summary.class -com\nmg\gs\common\config\CorsConfig.class -com\nmg\gs\mapper\GDCpcPayInfoMapper.class -com\nmg\gs\common\utils\UnzipUtil.class -com\nmg\gs\common\exception\Result.class -com\nmg\gs\common\exception\PPException.class -com\nmg\gs\common\utils\FileUtil.class -com\nmg\gs\entity\Res.class -com\nmg\gs\common\utils\MD5Util.class -com\nmg\gs\service\impl\RequestInterfaceServiceImpl.class -com\nmg\gs\common\utils\FileUtil$1.class -com\nmg\gs\test\Test04.class diff --git a/CPCReconciliation/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/CPCReconciliation/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst deleted file mode 100644 index 8d4ea19..0000000 --- a/CPCReconciliation/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ /dev/null @@ -1,43 +0,0 @@ -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\config\ErrorConfig.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\utils\ClobUtils.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\entity\Trace.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\timetask\TaskThreadPoolConfig.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\test\Test03.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\utils\PathUtil.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\utils\LogUtil.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\emnu\MessageEnum.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\mapper\SummaryMapper.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\utils\DateTimeUtil.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\entity\GDCpcPayInfo.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\utils\UnzipUtil.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\config\CorsConfig.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\exception\PPException.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\test\Test.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\test\HttpRequestHandler.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\emnu\Constant.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\service\impl\RequestInterfaceServiceImpl.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\utils\FileUtil.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\config\MybatisConfig.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\utils\PropertiesUtil.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\utils\MyOkHttpUtil.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\exception\PPExceptionHandler.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\service\RequestInterfaceService.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\entity\Res.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\utils\PagesUtils.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\config\MyEnvironmentPostProcessor.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\utils\UuidUtil.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\CPCReconciliationApplication.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\test\Test05.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\test\Test01.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\utils\MD5Util.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\mapper\GDCpcPayInfoMapper.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\utils\SignUtil.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\exception\Result.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\utils\TokenUtil.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\config\RedisSessionConfig.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\config\FilterConfig.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\timetask\TimeTaskInfo.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\common\config\CaptchaConfig.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\entity\Summary.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\entity\Signature.java -D:\myproject\git\JT-CPCReconciliation\CPCReconciliation\src\main\java\com\nmg\gs\test\Test04.java