From c7452b6eec025b3cbb596cce6bd6ec2950c85526 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=9C=E5=A8=81=E5=9E=9A?= <273231185@qq.com> Date: Tue, 17 Dec 2024 23:43:28 +0800 Subject: [PATCH] czrz --- db/dbuml.db3 | Bin 36864 -> 36864 bytes src/model/DataManager.java | 111 ++++++++++++++++++++++++++++++++----- 2 files changed, 96 insertions(+), 15 deletions(-) diff --git a/db/dbuml.db3 b/db/dbuml.db3 index 6cb7524b777edcfd7d1b6a2f7c8359b073fb3739..385a51e7ff1255a59aba87f59a0c8dcdc7cda69c 100644 GIT binary patch delta 1159 zcmaiy&ubGw6vub7*=Bp#d6ncMdT7z~5;onL*_}-`gdR!}L9~eAsh}qhf<pZRwig=< ziq)i2RHOt&1udx+f*~r1|9}S(#bY<Ipj7%7xSNTa-A${<dGo%X_v8B(*At8DiIpSb z#GRuv;>6~K$ADxsDZmOGL!Xd?CbtfaWsq}TPHBhJ*^+tc%n58!!!U|PN(z>_{eGiU zd$V)5?!K+M%eT6<XPp~Oq7y^IM8noOLTy^GO_C3Cf4qL$U4Cwldz$Wx+Fa5DL$;I) zfpu1}3=Sq7>m0x(%;WY`|8mKkG=wxUqpaAu*Kq5P`pA8W*fv={$P9>=odic-9CT@z zxPYl!X}PT`{>SjTZQ^{8$&tJ5`*^o~v$NXRsod^A+>N@oIsb7*<i#!xip?98Sr&1x zKlyJp%JM<x!PU0kJ#bq!cXi1x_-Z_<BN^5N_z7R&1H6Pa&-Ep6GLj|^n&5`Zv0%@v zWHiXvEk%QTVTrV)jSiT6E>#c&Mcosi4cA}_{YIN;0Z~=l^V;~PI@5}xrA4)rRnN}O zgs+cyHze<WY!R2sDMf=gz;7Ir#E{&-DOL<Q>NLwE!}{KgY)Id~ATy+ImSrUeqfpAi z$<zJz{kfTiajd#-`}Q#_tj5#j<d9xBtb(q`^~A7sEAM?o^wp`WpEC-~3-AlRLIWPc zN2tI8%zN9N<tE4Xs`%E0g1ud(qCviZk+hT(V`IsY7;m+AApwyZ7R5}Lyu_{V&hfE7 D_}G27 delta 75 zcmZozz|^pSX@WGP_(U0JM)8daOZXSFC<p+t!Dbc(CIJq82L3(##r*o41r-$eC+p{5 e<znVP!odHQ|0e$tpx8G4$+7jkn=jVu3jhEZjTU79 diff --git a/src/model/DataManager.java b/src/model/DataManager.java index 09d1dc3..f072755 100644 --- a/src/model/DataManager.java +++ b/src/model/DataManager.java @@ -169,25 +169,106 @@ public class DataManager { OperationLog log = new OperationLog(id, operationType, operationTarget, operator, LocalDateTime.now(), details); operationLogs.add(log); + + // 添加数据库操作 + String url = "jdbc:sqlite:db/dbuml.db3"; + String sql = "INSERT INTO operation_logs (id, operation_type, operation_target, operator, operation_time, details) " + + "VALUES (?, ?, ?, ?, ?, ?)"; + + try (Connection conn = DriverManager.getConnection(url); + PreparedStatement pstmt = conn.prepareStatement(sql)) { + + pstmt.setString(1, log.getId()); + pstmt.setString(2, log.getOperationType()); + pstmt.setString(3, log.getOperationTarget()); + pstmt.setString(4, log.getOperator()); + pstmt.setString(5, log.getOperationTime().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); + pstmt.setString(6, log.getDetails()); + + pstmt.executeUpdate(); + + } catch (SQLException e) { + e.printStackTrace(); + showAlert("错误", "保存操作日志失败:" + e.getMessage()); + } } public List<OperationLog> getOperationLogs() { - return new ArrayList<>(operationLogs); + List<OperationLog> logs = new ArrayList<>(); + String url = "jdbc:sqlite:db/dbuml.db3"; + String sql = "SELECT * FROM operation_logs ORDER BY operation_time DESC"; + + try (Connection conn = DriverManager.getConnection(url); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery(sql)) { + + while (rs.next()) { + OperationLog log = new OperationLog( + rs.getString("id"), + rs.getString("operation_type"), + rs.getString("operation_target"), + rs.getString("operator"), + LocalDateTime.parse(rs.getString("operation_time")), + rs.getString("details") + ); + logs.add(log); + } + + } catch (SQLException e) { + e.printStackTrace(); + showAlert("错误", "读取操作日志失败:" + e.getMessage()); + } + + return logs; } public List<OperationLog> getFilteredOperationLogs(LocalDateTime startDate, LocalDateTime endDate, String operationType) { - return operationLogs.stream() - .filter(log -> { - boolean timeMatch = true; - if (startDate != null && endDate != null) { - timeMatch = !log.getOperationTime().isBefore(startDate) && - !log.getOperationTime().isAfter(endDate); - } - boolean typeMatch = "全部".equals(operationType) || - operationType.equals(log.getOperationType()); - return timeMatch && typeMatch; - }) - .collect(Collectors.toList()); + List<OperationLog> logs = new ArrayList<>(); + String url = "jdbc:sqlite:db/dbuml.db3"; + + StringBuilder sql = new StringBuilder("SELECT * FROM operation_logs WHERE 1=1"); + List<Object> params = new ArrayList<>(); + + if (startDate != null && endDate != null) { + sql.append(" AND operation_time BETWEEN ? AND ?"); + params.add(startDate.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); + params.add(endDate.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); + } + + if (!"全部".equals(operationType)) { + sql.append(" AND operation_type = ?"); + params.add(operationType); + } + + sql.append(" ORDER BY operation_time DESC"); + + try (Connection conn = DriverManager.getConnection(url); + PreparedStatement pstmt = conn.prepareStatement(sql.toString())) { + + // 设置参数 + for (int i = 0; i < params.size(); i++) { + pstmt.setObject(i + 1, params.get(i)); + } + + ResultSet rs = pstmt.executeQuery(); + while (rs.next()) { + OperationLog log = new OperationLog( + rs.getString("id"), + rs.getString("operation_type"), + rs.getString("operation_target"), + rs.getString("operator"), + LocalDateTime.parse(rs.getString("operation_time")), + rs.getString("details") + ); + logs.add(log); + } + + } catch (SQLException e) { + e.printStackTrace(); + showAlert("错误", "读取操作日志失败:" + e.getMessage()); + } + + return logs; } @@ -219,8 +300,8 @@ public class DataManager { // Synchronize memory data addGoods(goods); - // Add operation log - addOperationLog("新增", goods.getId(), "当前用户", "新增货物: " + goods.getName()); + // 将操作日志类型从"新增"改为"修改" + addOperationLog("修改", goods.getId(), "当前用户", "修改货物: " + goods.getName()); } catch (SQLException e) { e.printStackTrace(); showAlert("错误", "添加货物失败:" + e.getMessage());