From 3e440781124fc489de37e7d53c9cba7287034a0e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 03:29:03 +0000 Subject: [PATCH 1/3] Initial plan From 5e3f52b10a4daecafce88ba0e48b3e23201f9c55 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 28 Feb 2026 03:51:20 +0000 Subject: [PATCH 2/3] Fix bugs and improve code quality across the codebase - Fix integer overflow in Cache.CACHE_HOLD_1DAY (24*60*60*1000*1000*1000L overflows int) - Fix Cache.get() to use generic type K instead of String - Fix DelayedItem.getDelay() unit conversion (convert from NANOSECONDS, not unit) - Fix ZIP entry duplicate name bug in DataBaseDocumentController - Fix LogAspect.doAround() return type from Map to Object for void methods - Replace e.printStackTrace() with SLF4J logging in 16 locations - Make SimpleCache constants static final - Fix incorrect javadoc on BaseUtils.callbackNotFound - Fix raw types in CacheManage CACHE_MAP - Replace magic numbers in BaseUtils char case methods with Character API Co-authored-by: unknowIfGuestInDream <57802425+unknowIfGuestInDream@users.noreply.github.com> --- .../java/com/tlcsdm/gen/aspect/LogAspect.java | 13 +++++------ .../java/com/tlcsdm/gen/base/BaseUtils.java | 22 ++++++++++--------- .../java/com/tlcsdm/gen/base/CacheManage.java | 2 +- .../gen/controller/CacheManageController.java | 12 +++++----- .../DataBaseDocumentController.java | 2 +- .../controller/DataBaseInfoController.java | 4 +++- .../gen/factory/DataSourceUtilFactory.java | 6 ++++- .../java/com/tlcsdm/gen/util/cache/Cache.java | 15 ++++++++----- .../tlcsdm/gen/util/cache/DelayedItem.java | 2 +- .../tlcsdm/gen/util/cache/SimpleCache.java | 12 +++++----- .../gen/util/dataSource/DataSourceUtil.java | 19 ++++++++++------ .../gen/util/template/FreeMarkerUtil.java | 8 +++++-- 12 files changed, 68 insertions(+), 49 deletions(-) diff --git a/src/main/java/com/tlcsdm/gen/aspect/LogAspect.java b/src/main/java/com/tlcsdm/gen/aspect/LogAspect.java index 32c1d5fd..400dd813 100644 --- a/src/main/java/com/tlcsdm/gen/aspect/LogAspect.java +++ b/src/main/java/com/tlcsdm/gen/aspect/LogAspect.java @@ -10,8 +10,6 @@ import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; -import java.util.Map; - /** * 日志处理 * @@ -38,21 +36,20 @@ public void logPointCut() { */ @AfterThrowing(value = "logPointCut()", throwing = "e") public void doAfterThrowing(Exception e) { - log.error(e.getMessage()); - e.printStackTrace(); + log.error(e.getMessage(), e); } /** * 环绕处理 * @param pjd ProceedingJoinPoint - * @return Map + * @return 方法执行结果 * @throws Throwable */ @Around("logPointCut()") - public Map doAround(ProceedingJoinPoint pjd) throws Throwable { - Map result; + public Object doAround(ProceedingJoinPoint pjd) throws Throwable { + Object result; try { - result = (Map) pjd.proceed(); + result = pjd.proceed(); } catch (Exception e) { return BaseUtils.failed(e.getMessage()); diff --git a/src/main/java/com/tlcsdm/gen/base/BaseUtils.java b/src/main/java/com/tlcsdm/gen/base/BaseUtils.java index 2625281e..b4c92ba2 100644 --- a/src/main/java/com/tlcsdm/gen/base/BaseUtils.java +++ b/src/main/java/com/tlcsdm/gen/base/BaseUtils.java @@ -15,6 +15,9 @@ import java.util.*; import java.util.stream.Collectors; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * 常用方法封装 * @@ -24,6 +27,8 @@ */ public class BaseUtils { + private static final Logger log = LoggerFactory.getLogger(BaseUtils.class); + /** * 类不能实例化 */ @@ -231,7 +236,7 @@ public static String getHostName() { return InetAddress.getLocalHost().getHostName(); } catch (UnknownHostException e) { - e.printStackTrace(); + log.error("获取主机名失败", e); } return "未知"; } @@ -291,7 +296,7 @@ public static String toLowerCase4Index(String string) { } char[] chars = string.toCharArray(); - chars[0] += 32; + chars[0] = Character.toLowerCase(chars[0]); return String.valueOf(chars); } @@ -300,7 +305,7 @@ public static String toLowerCase4Index(String string) { */ public static String toUpperCase4Index(String string) { char[] chars = string.toCharArray(); - chars[0] = toUpperCase(chars[0]); + chars[0] = Character.toUpperCase(chars[0]); return String.valueOf(chars); } @@ -308,10 +313,7 @@ public static String toUpperCase4Index(String string) { * 字符转成大写 */ public static char toUpperCase(char chars) { - if (97 <= chars && chars <= 122) { - chars ^= 32; - } - return chars; + return Character.toUpperCase(chars); } /** @@ -347,10 +349,10 @@ public static Object deepClone(Object object) { } /** - * 深度克隆 + * 错误页面回调 */ public static void callbackNotFound(HttpServletResponse response, Exception e) { - e.printStackTrace(); + log.error("请求处理失败", e); response.setContentType("text/html;charset=utf-8"); @Cleanup PrintWriter out = null; @@ -365,7 +367,7 @@ public static void callbackNotFound(HttpServletResponse response, Exception e) { out.flush(); } catch (IOException ex) { - ex.printStackTrace(); + log.error("写入错误页面失败", ex); } } diff --git a/src/main/java/com/tlcsdm/gen/base/CacheManage.java b/src/main/java/com/tlcsdm/gen/base/CacheManage.java index 89325846..a4c6ae9a 100644 --- a/src/main/java/com/tlcsdm/gen/base/CacheManage.java +++ b/src/main/java/com/tlcsdm/gen/base/CacheManage.java @@ -22,7 +22,7 @@ public class CacheManage { public static Cache>> TABLES_CACHE = new Cache<>(); // 所有缓存存储 - public static Map CACHE_MAP = new ConcurrentHashMap() { + public static Map>>> CACHE_MAP = new ConcurrentHashMap<>() { { put("procedures", PROCEDURES_CACHE); put("tables", TABLES_CACHE); diff --git a/src/main/java/com/tlcsdm/gen/controller/CacheManageController.java b/src/main/java/com/tlcsdm/gen/controller/CacheManageController.java index 3f488f2a..31de44c5 100644 --- a/src/main/java/com/tlcsdm/gen/controller/CacheManageController.java +++ b/src/main/java/com/tlcsdm/gen/controller/CacheManageController.java @@ -42,11 +42,11 @@ public ModelAndView manageCache() { @Log(title = "缓存管理", operateType = "查询项目缓存") public Map selectCaches() { List> list = new ArrayList<>(); - for (Cache cache : CACHE_MAP.values()) { - Map map = cache.getMap(); + for (Cache>> cache : CACHE_MAP.values()) { + Map>> map = cache.getMap(); Map result = new HashMap<>(4); - for (Map.Entry entry : map.entrySet()) { - String mapKey = (String) entry.getKey(); + for (Map.Entry>> entry : map.entrySet()) { + String mapKey = entry.getKey(); Object mapValue = entry.getValue(); result.put("key", mapKey); result.put("value", mapValue); @@ -81,12 +81,12 @@ public Map getCaches(@PathVariable(required = false) String name List list = new ArrayList<>(); if (StringUtils.isEmpty(name)) { - for (Cache cache : CACHE_MAP.values()) { + for (Cache>> cache : CACHE_MAP.values()) { list.addAll(cache.keys()); } } else { - for (Cache cache : CACHE_MAP.values()) { + for (Cache>> cache : CACHE_MAP.values()) { Object o = cache.get(name); if (null != o) { list.add(o); diff --git a/src/main/java/com/tlcsdm/gen/controller/DataBaseDocumentController.java b/src/main/java/com/tlcsdm/gen/controller/DataBaseDocumentController.java index 056389e2..f156718c 100644 --- a/src/main/java/com/tlcsdm/gen/controller/DataBaseDocumentController.java +++ b/src/main/java/com/tlcsdm/gen/controller/DataBaseDocumentController.java @@ -75,7 +75,7 @@ public void genDataBaseDocument(String url, String driver, String userName, Stri @Cleanup InputStream inputStream = new ByteArrayInputStream(file.getBytes(StandardCharsets.UTF_8)); // 将文件写入zip内,即将文件进行打包 - zos.putNextEntry(new ZipEntry(fileName)); + zos.putNextEntry(new ZipEntry(fileName + EngineFileType.valueOf(engineFileType).getFileSuffix())); inputStream.transferTo(zos); // 关闭输入输出流 zos.closeEntry(); diff --git a/src/main/java/com/tlcsdm/gen/controller/DataBaseInfoController.java b/src/main/java/com/tlcsdm/gen/controller/DataBaseInfoController.java index 92655e51..73ee6b56 100644 --- a/src/main/java/com/tlcsdm/gen/controller/DataBaseInfoController.java +++ b/src/main/java/com/tlcsdm/gen/controller/DataBaseInfoController.java @@ -6,6 +6,7 @@ import com.tlcsdm.gen.service.DataBaseInfoService; import lombok.Cleanup; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; @@ -25,6 +26,7 @@ */ @RestController @RequiredArgsConstructor +@Slf4j public class DataBaseInfoController { private final DataBaseInfoService dataBaseInfoService; @@ -116,7 +118,7 @@ public Map testConnect(String URL, String DRIVER, String USERNAM con = DriverManager.getConnection(URL, USERNAME, PASSWORD); } catch (SQLException e) { - e.printStackTrace(); + log.error("数据源连接测试失败", e); } if (con != null) { return BaseUtils.success(); diff --git a/src/main/java/com/tlcsdm/gen/factory/DataSourceUtilFactory.java b/src/main/java/com/tlcsdm/gen/factory/DataSourceUtilFactory.java index df6507cb..62af9798 100644 --- a/src/main/java/com/tlcsdm/gen/factory/DataSourceUtilFactory.java +++ b/src/main/java/com/tlcsdm/gen/factory/DataSourceUtilFactory.java @@ -5,6 +5,8 @@ import com.tlcsdm.gen.util.dataSource.DruidDataSourceUtil; import com.tlcsdm.gen.util.dataSource.HikariDataSourceUtil; import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.List; import java.util.Map; @@ -21,6 +23,8 @@ */ public class DataSourceUtilFactory { + private static final Logger log = LoggerFactory.getLogger(DataSourceUtilFactory.class); + private static Map strategyMap = new ConcurrentHashMap<>(); /** @@ -72,7 +76,7 @@ private static DataSourceUtil createDataSourceUtil(String url, String driver, St register(url + userName, dataSourceUtil); } catch (Exception e) { - e.printStackTrace(); + log.error("创建数据源失败", e); remove(url + userName); } return dataSourceUtil; diff --git a/src/main/java/com/tlcsdm/gen/util/cache/Cache.java b/src/main/java/com/tlcsdm/gen/util/cache/Cache.java index 786c417e..1b31e734 100644 --- a/src/main/java/com/tlcsdm/gen/util/cache/Cache.java +++ b/src/main/java/com/tlcsdm/gen/util/cache/Cache.java @@ -5,6 +5,9 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.DelayQueue; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * 具有过期时间的缓存 向缓存添加内容时,给每一个key设定过期时间,系统自动将超过过期时间的key清除。 *

@@ -18,6 +21,8 @@ */ public class Cache { + private static final Logger log = LoggerFactory.getLogger(Cache.class); + // 存储缓存 public ConcurrentHashMap map = new ConcurrentHashMap<>(); @@ -31,7 +36,7 @@ public class Cache { public static final long CACHE_HOLD_30MINUTE = 30 * 60 * 1000 * 1000 * 1000L; // 缓存1天 - public static final long CACHE_HOLD_1DAY = 24 * 60 * 60 * 1000 * 1000 * 1000L; + public static final long CACHE_HOLD_1DAY = 24L * 60 * 60 * 1000 * 1000 * 1000; // 永久保存 public static final long CACHE_HOLD_FOREVER = Long.MAX_VALUE; @@ -63,10 +68,10 @@ public void clear() { /** * 取出一个缓存对象 - * @param cacheName 缓存名称 + * @param key 缓存键 */ - public V get(String cacheName) { - return map.get(cacheName); + public V get(K key) { + return map.get(key); } /** @@ -104,7 +109,7 @@ public void checkOverdueKey() { Thread.sleep(300); } catch (Exception e) { - e.printStackTrace(); + log.error("缓存过期检查异常", e); } } } diff --git a/src/main/java/com/tlcsdm/gen/util/cache/DelayedItem.java b/src/main/java/com/tlcsdm/gen/util/cache/DelayedItem.java index 23d54d46..9ab18c3b 100644 --- a/src/main/java/com/tlcsdm/gen/util/cache/DelayedItem.java +++ b/src/main/java/com/tlcsdm/gen/util/cache/DelayedItem.java @@ -40,7 +40,7 @@ public int compareTo(Delayed o) { @Override public long getDelay(TimeUnit unit) { - return unit.convert(removeTime - System.nanoTime(), unit); + return unit.convert(removeTime - System.nanoTime(), TimeUnit.NANOSECONDS); } public T getT() { diff --git a/src/main/java/com/tlcsdm/gen/util/cache/SimpleCache.java b/src/main/java/com/tlcsdm/gen/util/cache/SimpleCache.java index 9b39b51b..3e85b471 100644 --- a/src/main/java/com/tlcsdm/gen/util/cache/SimpleCache.java +++ b/src/main/java/com/tlcsdm/gen/util/cache/SimpleCache.java @@ -15,17 +15,17 @@ */ public class SimpleCache { - public static String DATABASETYPE = "dataBaseType"; + public static final String DATABASETYPE = "dataBaseType"; - public static String GENPROCEDUREMODELTYPE = "genProcedureModelType"; + public static final String GENPROCEDUREMODELTYPE = "genProcedureModelType"; - public static String NAMECONVENTTYPE = "nameConventType"; + public static final String NAMECONVENTTYPE = "nameConventType"; - public static String ENGINEFILETYPE = "engineFileType"; + public static final String ENGINEFILETYPE = "engineFileType"; - public static String GENCODEMODELTYPE = "genCodeModelType"; + public static final String GENCODEMODELTYPE = "genCodeModelType"; - public static String JAVACLASS = "javaClass"; + public static final String JAVACLASS = "javaClass"; private static Map>> map = new ConcurrentHashMap<>(); diff --git a/src/main/java/com/tlcsdm/gen/util/dataSource/DataSourceUtil.java b/src/main/java/com/tlcsdm/gen/util/dataSource/DataSourceUtil.java index 4d9856b7..77f47098 100644 --- a/src/main/java/com/tlcsdm/gen/util/dataSource/DataSourceUtil.java +++ b/src/main/java/com/tlcsdm/gen/util/dataSource/DataSourceUtil.java @@ -9,6 +9,9 @@ import java.util.List; import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * 数据源工具抽象类 * @@ -18,6 +21,8 @@ */ public abstract class DataSourceUtil { + private static final Logger log = LoggerFactory.getLogger(DataSourceUtil.class); + protected DataSource dataSource; /** @@ -73,7 +78,7 @@ public int executeUpdate(String sql, Object... obj) throws SQLException { x = ps.executeUpdate(); } catch (SQLException e) { - e.printStackTrace(); + log.error("执行SQL更新失败", e); } finally { release(conn, ps); @@ -100,7 +105,7 @@ public int getCount(String sql, Object... obj) throws SQLException { } } catch (SQLException e) { - e.printStackTrace(); + log.error("获取数据个数失败", e); } finally { release(conn, ps, rs); @@ -139,7 +144,7 @@ public List> executeQuery(String sql, Object... obj) { } } catch (SQLException e) { - e.printStackTrace(); + log.error("执行SQL查询失败", e); } finally { release(conn, ps, rs); @@ -156,7 +161,7 @@ public void release(Connection conn, PreparedStatement ps, ResultSet rs, Callabl cs.close(); } catch (SQLException e) { - e.printStackTrace(); + log.error("关闭CallableStatement失败", e); } } if (rs != null) { @@ -164,7 +169,7 @@ public void release(Connection conn, PreparedStatement ps, ResultSet rs, Callabl rs.close(); } catch (SQLException e) { - e.printStackTrace(); + log.error("关闭ResultSet失败", e); } } if (ps != null) { @@ -172,7 +177,7 @@ public void release(Connection conn, PreparedStatement ps, ResultSet rs, Callabl ps.close(); } catch (SQLException e) { - e.printStackTrace(); + log.error("关闭PreparedStatement失败", e); } } if (conn != null) { @@ -180,7 +185,7 @@ public void release(Connection conn, PreparedStatement ps, ResultSet rs, Callabl conn.close(); } catch (SQLException e) { - e.printStackTrace(); + log.error("关闭Connection失败", e); } } } diff --git a/src/main/java/com/tlcsdm/gen/util/template/FreeMarkerUtil.java b/src/main/java/com/tlcsdm/gen/util/template/FreeMarkerUtil.java index 58ebd48c..028a7862 100644 --- a/src/main/java/com/tlcsdm/gen/util/template/FreeMarkerUtil.java +++ b/src/main/java/com/tlcsdm/gen/util/template/FreeMarkerUtil.java @@ -3,6 +3,8 @@ import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; import java.io.IOException; @@ -18,6 +20,8 @@ */ public class FreeMarkerUtil { + private static final Logger log = LoggerFactory.getLogger(FreeMarkerUtil.class); + private FreeMarkerUtil() { } @@ -36,7 +40,7 @@ public static String getTemplateContent(Configuration configuration, Map Date: Sat, 28 Feb 2026 03:52:25 +0000 Subject: [PATCH 3/3] Address code review feedback: use TimeUnit for cache constants, fix null message in LogAspect Co-authored-by: unknowIfGuestInDream <57802425+unknowIfGuestInDream@users.noreply.github.com> --- src/main/java/com/tlcsdm/gen/aspect/LogAspect.java | 2 +- src/main/java/com/tlcsdm/gen/util/cache/Cache.java | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/tlcsdm/gen/aspect/LogAspect.java b/src/main/java/com/tlcsdm/gen/aspect/LogAspect.java index 400dd813..a3b60025 100644 --- a/src/main/java/com/tlcsdm/gen/aspect/LogAspect.java +++ b/src/main/java/com/tlcsdm/gen/aspect/LogAspect.java @@ -36,7 +36,7 @@ public void logPointCut() { */ @AfterThrowing(value = "logPointCut()", throwing = "e") public void doAfterThrowing(Exception e) { - log.error(e.getMessage(), e); + log.error("日志切面拦截到异常", e); } /** diff --git a/src/main/java/com/tlcsdm/gen/util/cache/Cache.java b/src/main/java/com/tlcsdm/gen/util/cache/Cache.java index 1b31e734..0c206f88 100644 --- a/src/main/java/com/tlcsdm/gen/util/cache/Cache.java +++ b/src/main/java/com/tlcsdm/gen/util/cache/Cache.java @@ -29,14 +29,14 @@ public class Cache { // 延迟队列 public DelayQueue> queue = new DelayQueue<>(); - // 缓存30秒 - public static final long CACHE_HOLD_30SECOND = 30 * 1000 * 1000 * 1000L; + // 缓存30秒(纳秒) + public static final long CACHE_HOLD_30SECOND = java.util.concurrent.TimeUnit.SECONDS.toNanos(30); - // 缓存30分钟 - public static final long CACHE_HOLD_30MINUTE = 30 * 60 * 1000 * 1000 * 1000L; + // 缓存30分钟(纳秒) + public static final long CACHE_HOLD_30MINUTE = java.util.concurrent.TimeUnit.MINUTES.toNanos(30); - // 缓存1天 - public static final long CACHE_HOLD_1DAY = 24L * 60 * 60 * 1000 * 1000 * 1000; + // 缓存1天(纳秒) + public static final long CACHE_HOLD_1DAY = java.util.concurrent.TimeUnit.DAYS.toNanos(1); // 永久保存 public static final long CACHE_HOLD_FOREVER = Long.MAX_VALUE;