2025年08月21日 1.0.3 删除定时任务获取对账文件,迁移到项目GetDataInterface中

main
gaoshuguang 3 months ago
parent 09dbc18bb8
commit 11d6c135a6

Binary file not shown.

@ -259,6 +259,18 @@
<version>1.8.0</version> <version>1.8.0</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<!-- goldendb驱动 -->
<dependency>
<groupId>com.zte.goldendb</groupId> <!-- 假设的groupId -->
<artifactId>gdb_mysql-connector-java</artifactId> <!-- 假设的artifactId -->
<version>5.1.46.67</version> <!-- 版本号 -->
</dependency>
<!-- SM4加密依赖包 -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk18on</artifactId>
<version>1.78.1</version>
</dependency>
</dependencies> </dependencies>

@ -1,6 +1,7 @@
package com.nmg.gs.common.config; 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.PropertiesUtil;
import com.nmg.gs.common.utils.PathUtil; import com.nmg.gs.common.utils.PathUtil;
import com.trkf.PasswordEncryption.PassWordUtils; import com.trkf.PasswordEncryption.PassWordUtils;
@ -44,10 +45,17 @@ public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor {
properties.load(new FileInputStream(path)); properties.load(new FileInputStream(path));
String DBType = properties.getProperty("DBType") == null ? "1" : properties.getProperty("DBType"); String DBType = properties.getProperty("DBType") == null ? "1" : properties.getProperty("DBType");
Newproperties.load(new FileInputStream(NewPath)); Newproperties.load(new FileInputStream(NewPath));
//获取是否是goldenDB数据库
String IsGolDen = properties.getProperty("IsGolDen") == null ? "0" : properties.getProperty("IsGolDen");
properties.setProperty("spring.logback.logPath", PathUtil.TomcatPath + "/logs"); properties.setProperty("spring.logback.logPath", PathUtil.TomcatPath + "/logs");
properties.setProperty("spring.datasource.url", properties.getProperty("DBUrl")); properties.setProperty("spring.datasource.url", properties.getProperty("DBUrl"));
properties.setProperty("spring.datasource.username", properties.getProperty("DBUserName")); properties.setProperty("spring.datasource.username", properties.getProperty("DBUserName"));
properties.setProperty("spring.datasource.password", PassWordUtils.decrypt(properties.getProperty("DBPassWord"))); 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) { switch (DBType) {
case "1": case "1":
properties.setProperty("spring.datasource.driver-class-name", Newproperties.getProperty("sqlClassName")); properties.setProperty("spring.datasource.driver-class-name", Newproperties.getProperty("sqlClassName"));
@ -70,6 +78,7 @@ public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor {
properties.setProperty("spring.datasource.hikari.connection-test-query", Newproperties.getProperty("MySQLvalidationQuery")); properties.setProperty("spring.datasource.hikari.connection-test-query", Newproperties.getProperty("MySQLvalidationQuery"));
break; break;
} }
}
System.out.println("--------------------------CPCReconciliation-本次载入数据库----------------------"); System.out.println("--------------------------CPCReconciliation-本次载入数据库----------------------");
System.out.println(" server.port : " + properties.getProperty("server.port")); System.out.println(" server.port : " + properties.getProperty("server.port"));
System.out.println(" url : " + properties.getProperty("spring.datasource.url")); System.out.println(" url : " + properties.getProperty("spring.datasource.url"));

@ -10,7 +10,16 @@ public enum MessageEnum {
* *
*/ */
("0", "成功"), ("0", "成功"),
/**
*
*/
("701", "鉴权码不存在"),
md5("702", "md5校验失败"),
POST("703", "POST参数校验失败"),
("704", "请求文件名参数校验失败"),
("705", "请求数据不存在"),
("706", "当前数据已为最新"),
("707", "最小费额文件不存在"),
/** /**
* *
*/ */
@ -19,6 +28,10 @@ public enum MessageEnum {
("20003", "返回数据格式错误"), ("20003", "返回数据格式错误"),
("20004", "查询数据失败"), ("20004", "查询数据失败"),
("20005", "数据库连接异常"), ("20005", "数据库连接异常"),
("20006", "复制文件失败"),
("20007", "文件移动重命名失败"),
("20008", "加密失败"),
("20009", "解密失败"),
("99999","操作失败"), ("99999","操作失败"),
; ;
private String code; private String code;

@ -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: 20230208 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;
}
}

@ -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));
}
}
}

@ -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: 20221013 10:52
* @description:
*/
@Slf4j
public class FileUtil {
/**
*
*
* @param folderPath
* @return java.util.List<java.lang.String>
* @author shuguang
* @date 2023-02-27 16:50
*/
public static List<Long> folderNames(String folderPath) {
List<Long> 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<java.lang.String>
* @author shuguang
* @date 2023-02-28 14:19
*/
public static List<String> obtainFileName(String filePath, List<String> 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<File> 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<File> getAllFile(String dirFilePath) {
if (StrUtil.isBlank(dirFilePath)) {
return null;
}
return getAllFile(new File(dirFilePath));
}
/**
*
*
* @param dirFile
*/
public static List<File> 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<File> files = new ArrayList<>();
for (File childFile : childrenFiles) {
// 如果是文件,直接添加到结果集合
if (childFile.isFile()) {
files.add(childFile);
}
//以下几行代码取消注释后可以将所有子文件夹里的文件也获取到列表里
// else {
// // 如果是文件夹,则将其内部文件添加进结果集合
// List<File> 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());
}
}
/**
* zipzipNametargetDirName
*
* @param zipName
* @param targetDirName
* @return java.util.List<java.lang.String>
* @author shuguang
* @date 2022-10-22 13:45
*/
public static List<String> upZipFile(String zipName, String targetDirName) {
//记录解压后的文件路径
List<String> 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<String> 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<String> 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<java.lang.String>
* @author shuguang
* @date 2023-02-08 9:48
*/
public static List<String> getJsonPaths(String destDir) {
List<String> 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<java.lang.String>
* @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);
}
}

@ -9,6 +9,7 @@ import java.io.FileNotFoundException;
import java.math.BigInteger; import java.math.BigInteger;
import java.nio.MappedByteBuffer; import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel; import java.nio.channels.FileChannel;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
@ -19,6 +20,14 @@ import java.security.NoSuchAlgorithmException;
*/ */
@Slf4j @Slf4j
public class MD5Util { public class MD5Util {
/**
* MD5
*
* @param password
* @return java.lang.String
* @author shuguang
* @date 2022-10-16 13:30
*/
/** /**
* MD5 * MD5
* *
@ -28,16 +37,24 @@ public class MD5Util {
* @date 2022-10-16 13:30 * @date 2022-10-16 13:30
*/ */
public static String md5(String password) { public static String md5(String password) {
//生成一个md5加密器 if (password == null) {
return null;
}
try { try {
// 使用UTF-8编码将字符串转换为字节数组
byte[] bytes = password.getBytes(StandardCharsets.UTF_8);
MessageDigest md = MessageDigest.getInstance("MD5"); MessageDigest md = MessageDigest.getInstance("MD5");
//计算MD5 的值 md.update(bytes);
md.update(password.getBytes()); byte[] digest = md.digest();
//BigInteger 将8位的字符串 转成16位的字符串 得到的字符串形式是哈希码值 BigInteger no = new BigInteger(1, digest);
//BigInteger(参数1,参数2) 参数1 是 1为正数 0为零 -1为负数 String hashtext = no.toString(16);
return new BigInteger(1, md.digest()).toString(16); while (hashtext.length() < 32) {
hashtext = "0" + hashtext;
}
return hashtext;
} catch (NoSuchAlgorithmException e) { } catch (NoSuchAlgorithmException e) {
log.error("MD5Util对字符串进行MD5加密失败报错{}", e.getMessage()); // 记录错误日志
System.err.println("MD5 algorithm not found: " + e.getMessage());
} }
return null; return null;
} }
@ -83,10 +100,8 @@ public class MD5Util {
return value; return value;
} }
public static void main(String[] args) throws FileNotFoundException { public static void main(String[] args) throws FileNotFoundException {
String s = "123456"; String input = "BASIC_LINKOWNERDOWNLOAD_REQ_15_20250820151211000.json"+"8c602c65fe6f57c4b721c5078bb8a916";
System.out.println(MD5Util.md5(s)); String md5 = MD5Util.md5(input);
File file = new File("D:\\file\\download\\notice_table.txt"); System.out.println("MD5: " + md5);
String md5ByFile = MD5Util.getMd5ByFile(file);
System.out.println(md5ByFile);
} }
} }

@ -26,6 +26,14 @@ public class PathUtil {
public static String webName = "CPCReconciliation"; public static String webName = "CPCReconciliation";
public static String downFile; public static String downFile;
/**
*
*/
public static String encryptedFile;
/**
*
*/
public static String decryptedFile;
public static String downZipInsertBackup; public static String downZipInsertBackup;
/** /**
* zipjson * zipjson
@ -41,6 +49,8 @@ public class PathUtil {
webappsPath = java.net.URLDecoder.decode(TomcatPath + "\\webapps\\", "utf-8"); webappsPath = java.net.URLDecoder.decode(TomcatPath + "\\webapps\\", "utf-8");
uploadPath = java.net.URLDecoder.decode("\\uploadfiles\\" + webName, "utf-8"); uploadPath = java.net.URLDecoder.decode("\\uploadfiles\\" + webName, "utf-8");
downFile = java.net.URLDecoder.decode(uploadPath + "\\downFile\\", "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"); unZip = java.net.URLDecoder.decode(uploadPath + "\\unZip\\", "utf-8");
downZipInsertBackup = java.net.URLDecoder.decode(uploadPath + "\\downZipInsertBackup\\", "utf-8"); downZipInsertBackup = java.net.URLDecoder.decode(uploadPath + "\\downZipInsertBackup\\", "utf-8");
if (projectApplicationPath.charAt(0) == '/' || projectApplicationPath.charAt(0) == '\\') { if (projectApplicationPath.charAt(0) == '/' || projectApplicationPath.charAt(0) == '\\') {
@ -51,6 +61,8 @@ public class PathUtil {
webappsPath = java.net.URLDecoder.decode(TomcatPath + "/webapps/", "utf-8"); webappsPath = java.net.URLDecoder.decode(TomcatPath + "/webapps/", "utf-8");
uploadPath = java.net.URLDecoder.decode("/uploadfiles/" + webName, "utf-8"); uploadPath = java.net.URLDecoder.decode("/uploadfiles/" + webName, "utf-8");
downFile = java.net.URLDecoder.decode(uploadPath + "/downFile/", "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"); unZip = java.net.URLDecoder.decode(uploadPath + "/unZip/", "utf-8");
downZipInsertBackup = java.net.URLDecoder.decode(uploadPath + "/downZipInsertBackup/", "utf-8"); downZipInsertBackup = java.net.URLDecoder.decode(uploadPath + "/downZipInsertBackup/", "utf-8");
versionPath = Objects.requireNonNull(ClassUtils.getDefaultClassLoader().getResource("")).getPath() + "version/"; versionPath = Objects.requireNonNull(ClassUtils.getDefaultClassLoader().getResource("")).getPath() + "version/";

@ -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: 20250617 8:30
* @description:
*/
@RestController
public class RecaptureDataController {
@Resource
private RequestInterfaceService requestInterfaceService;
@PostMapping("/recaptureDataByDate")
public Res queryProgramVersion(@RequestBody Map<String, Object> map) {
String uuid = UuidUtil.getUuid();
String dateString = map.get("dT").toString();
requestInterfaceService.getRequestInterface(uuid,dateString);
return Res.success();
}
}

@ -1,16 +0,0 @@
package com.nmg.gs.service;
/**
* @author: shuguang
* @date: 20250418 14:03
* @description:
*/
public interface RequestInterfaceService {
/**
* CPC
*
* @author shuguang
* @date 2025-04-18 14:05
*/
void getRequestInterface(String uuid,String beforeDateString);
}

@ -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: 20250418 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<String> 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);
}
/**
* zipjsonDCPC_GD_PAY_INFODCPC_GD_SUMMARY_INFO
*/
private void insertGdCpcPayInfo(String uuid, String cpcDownFilePath, String fileName) throws IOException {
List<String> jsonPathList = unzipFile(uuid, cpcDownFilePath, fileName);
Summary summary = null;
List<GDCpcPayInfo> 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<GDCpcPayInfo> 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<GDCpcPayInfo> 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<Summary> 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);
}
}
}

@ -1,5 +1,6 @@
package com.nmg.gs.test; package com.nmg.gs.test;
import com.google.common.base.CaseFormat;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import com.google.common.base.Optional; import com.google.common.base.Optional;
@ -55,6 +56,27 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
* @description: * @description:
*/ */
public class GuavaTest { 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<String> split = Splitter.on(',')
.trimResults()
.omitEmptyStrings()
.split("foo,bar,, qux");
System.out.println(split);
}
/** /**
* Immutable Collections * Immutable Collections
*/ */

@ -0,0 +1,12 @@
package com.nmg.gs.test;
/**
* @author: shuguang
* @date: 20250626 8:21
* @description:
*/
public class Test02 {
public static void main(String[] args) {
}
}

@ -7,3 +7,4 @@
reconciliationInterfaceUrl=https://openapi.mtuoluo.com/api/dcpc/billCheck reconciliationInterfaceUrl=https://openapi.mtuoluo.com/api/dcpc/billCheck
2 2025年06月18日 1.0.1 增加查询明细及统计日对账查询页面 2 2025年06月18日 1.0.1 增加查询明细及统计日对账查询页面
3 2025年06月20日 1.0.2 重新获取统计日期的明细及汇总文件时DCPC_GD_PAY_INFO、DCPC_GD_SUMMARY_INFO按主键先删后插 3 2025年06月20日 1.0.2 重新获取统计日期的明细及汇总文件时DCPC_GD_PAY_INFO、DCPC_GD_SUMMARY_INFO按主键先删后插
4 2025年08月21日 1.0.3 删除定时任务获取对账文件迁移到项目GetDataInterface中

@ -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按主键先删后插

@ -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按主键先删后插

@ -1,3 +0,0 @@
version=0.0.1-SNAPSHOT
groupId=com.nmg.gs
artifactId=CPCReconciliation

@ -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

@ -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
Loading…
Cancel
Save