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());