Skip to content

Commit 00fbd33

Browse files
author
darksheep
committed
[fix]流程图 #0.2.0 fix 发现的bug
1 parent b8343a3 commit 00fbd33

9 files changed

Lines changed: 279 additions & 137 deletions

File tree

about.md

Lines changed: 0 additions & 71 deletions
This file was deleted.

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66
}
77

88
group = "com.darksheep"
9-
version = "2023-0620-03"
9+
version = "2025-03-12"
1010

1111
repositories {
1212
/*上述代码将阿里云Maven仓库设置为优先级最高,

doc/features.md

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
## 功能特点
66

77
### 1. 代码笔记
8+
89
- 支持在代码中选中文本并添加笔记
910
- 笔记自动关联到对应的代码位置
1011
- 可以快速跳转到笔记关联的代码处
@@ -19,6 +20,7 @@
1920
- 新笔记自动添加到列表开头并选中
2021

2122
### 2. 流程图功能
23+
2224
- 支持创建和编辑流程图,可视化代码之间的关系
2325
- 流程图节点可以关联到具体的代码笔记
2426
- 节点功能:
@@ -43,13 +45,15 @@
4345
- 支持删除连接
4446

4547
### 3. 标签管理
48+
4649
- 支持为笔记添加标签
4750
- 标签自动关联到流程图
4851
- 支持通过标签快速查找相关笔记
4952
- 标签自动去重和格式化
5053
- 支持批量添加和删除标签
5154

5255
### 4. 搜索功能
56+
5357
- 支持按标题和内容搜索笔记
5458
- 实时搜索结果展示
5559
- 可以直接从搜索结果创建流程图节点
@@ -59,6 +63,7 @@
5963
## 技术实现
6064

6165
### 前端实现
66+
6267
- 使用原生 JavaScript 和 CSS 构建界面
6368
- 采用 Apple 设计风格:
6469
- 磨砂玻璃效果(backdrop-filter)
@@ -75,6 +80,7 @@
7580
- 右键菜单支持
7681

7782
### 后端实现
83+
7884
- 基于 IntelliJ Platform Plugin SDK
7985
- 使用 JCEF (Java Chromium Embedded Framework) 实现现代化界面
8086
- 数据存储:
@@ -87,6 +93,7 @@
8793
- 异步处理避免阻塞
8894

8995
### 流程图实现
96+
9097
- 使用 jsPlumb 实现节点连接
9198
- 自定义布局算法:
9299
- 力导向图布局
@@ -100,11 +107,13 @@
100107
## 使用说明
101108

102109
### 创建笔记
110+
103111
1. 在代码中选中要做笔记的文本
104112
2. 使用快捷键或右键菜单创建笔记
105113
3. 输入笔记内容并保存
106114

107115
### 使用流程图
116+
108117
1. 点击工具栏的流程图按钮打开流程图界面
109118
2. 使用"新建节点"按钮创建节点
110119
3. 可以:
@@ -115,6 +124,7 @@
115124
5. 使用"加载流程图"按钮查看已保存的流程图
116125

117126
## 数据存储
127+
118128
- 笔记数据:
119129
- 标题、内容、代码位置
120130
- 创建和更新时间
@@ -128,15 +138,29 @@
128138
- 所有数据存储在本地 SQLite 数据库中
129139

130140
## 未来计划
141+
131142
### 笔记列表
132-
- [ ] 每个笔记可以绑定多个tag,用,分割 (已实现)
133-
- [ ] 笔记列表增加tags视图,可以查看当前的所有tag,筛选某个tag或者多个tag下的笔记
134-
- [ ] 笔记搜索功能增强,支持按照笔记代码内容和标题搜索
135-
- [ ] 修改当前在IDEA编辑器选中代码做笔记的功能,新建笔记时,可以选择一个或多个tag,默认为上次选择的tag,可以下拉搜索或新建tag
143+
144+
- [X] 每个笔记可以绑定多个tag,用,分割 (已实现)
145+
- [X] 笔记列表增加tags视图,可以查看当前的所有tag,筛选某个tag或者多个tag下的笔记
146+
- [X] 笔记搜索功能增强,支持按照笔记代码内容和标题搜索
147+
- [X] 修改当前在IDEA编辑器选中代码做笔记的功能,新建笔记时,可以选择一个或多个tag,默认为上次选择的tag,可以下拉搜索或新建tag
148+
136149
### 流程图
137-
- [ ] 按照IOS的设计风格,美化流程图顶部操作栏
138-
- [ ] 加载流程图时,编辑后再次保存,更新之前的流程图,而非新建一个新的流程图
150+
151+
- [X] 按照IOS的设计风格,美化流程图顶部操作栏
152+
- [X] 加载流程图时,编辑后再次保存,更新之前的流程图,而非新建一个新的流程图
139153
- [ ] 流程图节点连接线默认为直线,可以调整为曲线
140154
- [ ] 流程图节点支持拖拽调整大小
141155
- [ ] 流程图可以导出为图片
142156
- [ ] 绘制流程图时,ctrl+s保存流程图
157+
158+
#### bug修复
159+
160+
- [X] 新建流程图时,会覆盖上一个加载的流程图,不确定是id=0导致,还是currentFlowchartId没有reset
161+
- [X] 新建,保存后再编辑,因为save没有回显id,导致编辑丢失
162+
- [X] 笔记列表 tag面板应该一行最多显示5个tag,多余5个时换行,
163+
- [X] 笔记详情 noteLineNumber和path拼在一个div内,导致编辑笔记时,会把path+number的值传给了path
164+
- [X] 笔记详情 NoteFilePath 不hover时也显示按钮
165+
- [X] 笔记列表根据tag筛选笔记时,多选tag,应该是并集,而不是交集
166+
- [X] 当前选择tag可以筛选出笔记,但是点击列表某个笔记时,会展示笔记详情,但是列表会变为所有笔记,丢失了筛选效果

src/main/java/com/darksheep/sheepnote/config/NoteDataRepository.java

Lines changed: 51 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,13 @@ public class NoteDataRepository {
2929
private static void initFlowchartTable() {
3030
try (Statement stmt = getConnection().createStatement()) {
3131
stmt.execute(
32-
"CREATE TABLE IF NOT EXISTS flowcharts (" +
33-
"id INTEGER PRIMARY KEY AUTOINCREMENT," +
34-
"name TEXT NOT NULL," +
35-
"data TEXT NOT NULL," +
36-
"create_time BIGINT NOT NULL" +
37-
")"
32+
"CREATE TABLE IF NOT EXISTS flowcharts (" +
33+
"id INTEGER PRIMARY KEY AUTOINCREMENT," +
34+
"name TEXT NOT NULL," +
35+
"data TEXT NOT NULL," +
36+
"create_time DATETIME DEFAULT CURRENT_TIMESTAMP," +
37+
"update_time DATETIME DEFAULT CURRENT_TIMESTAMP" +
38+
")"
3839
);
3940
} catch (SQLException e) {
4041
e.printStackTrace();
@@ -138,16 +139,30 @@ public static void deleteNoteData(Integer noteId){
138139
}
139140

140141
// 流程图相关方法
141-
public static void saveFlowchart(FlowchartData flowchart) {
142-
String sql = "INSERT OR REPLACE INTO flowcharts (name, data, create_time,id) VALUES (?, ?, ?,?)";
142+
public static Integer saveFlowchart(FlowchartData flowchart) {
143+
String sql = "INSERT OR REPLACE INTO flowcharts (name, data, update_time,id) VALUES (?, ?,datetime('now'),?)";
143144
try (PreparedStatement pstmt = getConnection().prepareStatement(sql)) {
144145
pstmt.setString(1, flowchart.getName());
145146
pstmt.setString(2, flowchart.getData());
146-
pstmt.setLong(3, flowchart.getCreateTime());
147-
pstmt.setInt(4, flowchart.getId());
147+
if (flowchart.getId() != null) {
148+
pstmt.setInt(3, flowchart.getId());
149+
} else {
150+
pstmt.setNull(3, java.sql.Types.INTEGER);
151+
}
148152
pstmt.executeUpdate();
153+
if(flowchart.getId() != null){
154+
return flowchart.getId();
155+
}
156+
try (ResultSet generatedKeys = pstmt.getGeneratedKeys()) {
157+
if (generatedKeys.next()) {
158+
return generatedKeys.getInt(1);
159+
} else {
160+
throw new SQLException("Creating flowchart failed, no ID obtained.");
161+
}
162+
}
149163
} catch (SQLException e) {
150164
e.printStackTrace();
165+
throw new RuntimeException("Failed to save flowchart: " + e.getMessage());
151166
}
152167
}
153168

@@ -160,34 +175,46 @@ public static List<FlowchartData> getAllFlowcharts() {
160175

161176
while (rs.next()) {
162177
FlowchartData flowchart = new FlowchartData();
178+
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
163179
flowchart.setId(rs.getInt("id"));
164180
flowchart.setName(rs.getString("name"));
165181
flowchart.setData(rs.getString("data"));
166-
flowchart.setCreateTime(rs.getLong("create_time"));
182+
String createTime = rs.getString("create_time");
183+
String updateTime = rs.getString("update_time");
184+
flowchart.createTime = dateFormat.parse(createTime);
185+
flowchart.updateTime = dateFormat.parse(updateTime);
167186
flowcharts.add(flowchart);
168187
}
169188
} catch (SQLException e) {
170189
e.printStackTrace();
190+
} catch (ParseException e) {
191+
throw new RuntimeException(e);
171192
}
172-
193+
173194
return flowcharts;
174195
}
175196

176197
public static FlowchartData getFlowchartById(int id) {
177198
String sql = "SELECT * FROM flowcharts WHERE id = ?";
178199
try (PreparedStatement pstmt = getConnection().prepareStatement(sql)) {
200+
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
179201
pstmt.setInt(1, id);
180202
ResultSet rs = pstmt.executeQuery();
181203
FlowchartData flowchart = new FlowchartData();
182204
if (rs.next()) {
183205
flowchart.setId(rs.getInt("id"));
184206
flowchart.setName(rs.getString("name"));
185207
flowchart.setData(rs.getString("data"));
186-
flowchart.setCreateTime(rs.getLong("create_time"));
208+
String createTime = rs.getString("create_time");
209+
String updateTime = rs.getString("update_time");
210+
flowchart.createTime = dateFormat.parse(createTime);
211+
flowchart.updateTime = dateFormat.parse(updateTime);
187212
return flowchart;
188213
}
189214
} catch (SQLException e) {
190215
e.printStackTrace();
216+
} catch (ParseException e) {
217+
throw new RuntimeException(e);
191218
}
192219
return null;
193220
}
@@ -301,4 +328,15 @@ public static void updateNote(NoteData noteData) {
301328
throw new RuntimeException("Failed to update note: " + e.getMessage());
302329
}
303330
}
331+
332+
public static void deleteFlowchart(int id) {
333+
String sql = "DELETE FROM flowcharts WHERE id = ?";
334+
try (PreparedStatement pstmt = getConnection().prepareStatement(sql)) {
335+
pstmt.setInt(1, id);
336+
pstmt.executeUpdate();
337+
} catch (SQLException e) {
338+
e.printStackTrace();
339+
throw new RuntimeException("Failed to delete flowchart: " + e.getMessage());
340+
}
341+
}
304342
}

src/main/java/com/darksheep/sheepnote/data/FlowchartData.java

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,31 @@
22

33
import org.jetbrains.annotations.NotNull;
44

5+
import java.util.Date;
6+
57
public class FlowchartData {
6-
private int id;
8+
private Integer id;
79
private String name;
810
private String data;
9-
private long createTime;
11+
public Date createTime;
12+
13+
public Date updateTime;
1014

1115
public FlowchartData(@NotNull String name, @NotNull String data) {
1216
this.name = name;
1317
this.data = data;
14-
this.createTime = System.currentTimeMillis();
18+
this.createTime = new Date();
19+
this.updateTime = new Date();
1520
}
1621

1722
public FlowchartData() {
1823
}
1924

20-
public FlowchartData(int id, @NotNull String name, @NotNull String data, long createTime) {
21-
this.id = id;
22-
this.name = name;
23-
this.data = data;
24-
this.createTime = createTime;
25-
}
26-
27-
public int getId() {
25+
public Integer getId() {
2826
return id;
2927
}
3028

31-
public void setId(int id) {
29+
public void setId(Integer id) {
3230
this.id = id;
3331
}
3432

@@ -50,11 +48,19 @@ public void setData(@NotNull String data) {
5048
this.data = data;
5149
}
5250

53-
public long getCreateTime() {
51+
public Date getUpdateTime() {
52+
return updateTime;
53+
}
54+
55+
public void setUpdateTime(Date updateTime) {
56+
this.updateTime = updateTime;
57+
}
58+
59+
public Date getCreateTime() {
5460
return createTime;
5561
}
5662

57-
public void setCreateTime(long createTime) {
63+
public void setCreateTime(Date createTime) {
5864
this.createTime = createTime;
5965
}
60-
}
66+
}

0 commit comments

Comments
 (0)