@sokeai/cli 1.0.17 → 1.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/package.json +1 -1
- package/skills/soke-course/README.md +203 -0
- package/skills/soke-course/SKILL.md +531 -0
- package/skills/soke-course/SUMMARY.md +236 -0
- package/skills/soke-course/references/course-list-courses.md +251 -0
- package/skills/soke-course/references/examples.md +480 -0
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
# 课程查询使用示例
|
|
2
|
+
|
|
3
|
+
本文档提供了使用 `soke-course` skill 的实际示例。
|
|
4
|
+
|
|
5
|
+
## 示例1: 查询本月的课程
|
|
6
|
+
|
|
7
|
+
### 需求
|
|
8
|
+
查询2024年5月创建的所有已发布课程。
|
|
9
|
+
|
|
10
|
+
### 步骤
|
|
11
|
+
|
|
12
|
+
**1. 计算时间戳**
|
|
13
|
+
|
|
14
|
+
```javascript
|
|
15
|
+
// 2024年5月1日 00:00:00
|
|
16
|
+
const startTime = new Date('2024-05-01 00:00:00').getTime();
|
|
17
|
+
console.log(startTime); // 1714492800000
|
|
18
|
+
|
|
19
|
+
// 2024年5月31日 23:59:59
|
|
20
|
+
const endTime = new Date('2024-05-31 23:59:59').getTime();
|
|
21
|
+
console.log(endTime); // 1717171199000
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**2. 执行查询**
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
soke-cli course +list-courses \
|
|
28
|
+
--start-time 1714492800000 \
|
|
29
|
+
--end-time 1717171199000 \
|
|
30
|
+
--status 1
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**3. 预期输出**
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
uuid title category_id status lesson_num create_time
|
|
37
|
+
------------------------------------ ----------------- ----------- ------ ---------- -------------
|
|
38
|
+
abc123-def456-ghi789 Go语言入门 cat001 1 20 1714492800000
|
|
39
|
+
xyz789-uvw456-rst123 Python基础教程 cat002 1 15 1714579200000
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 示例2: 统计课程完成率
|
|
45
|
+
|
|
46
|
+
### 需求
|
|
47
|
+
统计某个课程的学习完成情况,包括完成人数、平均进度等。
|
|
48
|
+
|
|
49
|
+
### 步骤
|
|
50
|
+
|
|
51
|
+
**1. 获取课程学习记录**
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
soke-cli course +list-course-users \
|
|
55
|
+
--course-id "abc123-def456-ghi789" \
|
|
56
|
+
--page-size 100
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**2. 分析返回数据**
|
|
60
|
+
|
|
61
|
+
假设返回数据如下:
|
|
62
|
+
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"data": {
|
|
66
|
+
"list": [
|
|
67
|
+
{
|
|
68
|
+
"dept_user_id": "user001",
|
|
69
|
+
"dept_user_name": "张三",
|
|
70
|
+
"study_progress": 100,
|
|
71
|
+
"finish_status": 1,
|
|
72
|
+
"study_duration": 7200
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"dept_user_id": "user002",
|
|
76
|
+
"dept_user_name": "李四",
|
|
77
|
+
"study_progress": 50,
|
|
78
|
+
"finish_status": 0,
|
|
79
|
+
"study_duration": 3600
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"dept_user_id": "user003",
|
|
83
|
+
"dept_user_name": "王五",
|
|
84
|
+
"study_progress": 100,
|
|
85
|
+
"finish_status": 1,
|
|
86
|
+
"study_duration": 6800
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**3. 计算统计数据**
|
|
94
|
+
|
|
95
|
+
```javascript
|
|
96
|
+
const data = response.data.list;
|
|
97
|
+
|
|
98
|
+
// 总人数
|
|
99
|
+
const totalUsers = data.length; // 3
|
|
100
|
+
|
|
101
|
+
// 完成人数
|
|
102
|
+
const completedUsers = data.filter(u => u.finish_status === 1).length; // 2
|
|
103
|
+
|
|
104
|
+
// 完成率
|
|
105
|
+
const completionRate = (completedUsers / totalUsers * 100).toFixed(2); // 66.67%
|
|
106
|
+
|
|
107
|
+
// 平均进度
|
|
108
|
+
const avgProgress = (data.reduce((sum, u) => sum + u.study_progress, 0) / totalUsers).toFixed(2); // 83.33%
|
|
109
|
+
|
|
110
|
+
// 平均学习时长(小时)
|
|
111
|
+
const avgDuration = (data.reduce((sum, u) => sum + u.study_duration, 0) / totalUsers / 3600).toFixed(2); // 1.62小时
|
|
112
|
+
|
|
113
|
+
console.log(`总人数: ${totalUsers}`);
|
|
114
|
+
console.log(`完成人数: ${completedUsers}`);
|
|
115
|
+
console.log(`完成率: ${completionRate}%`);
|
|
116
|
+
console.log(`平均进度: ${avgProgress}%`);
|
|
117
|
+
console.log(`平均学习时长: ${avgDuration}小时`);
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 示例3: 查询用户的学习情况
|
|
123
|
+
|
|
124
|
+
### 需求
|
|
125
|
+
查询"张三"在某个课程的学习情况。
|
|
126
|
+
|
|
127
|
+
### 步骤
|
|
128
|
+
|
|
129
|
+
**1. 查询用户ID**
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
soke-cli contact +search-user --name "张三"
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
假设返回:
|
|
136
|
+
```json
|
|
137
|
+
{
|
|
138
|
+
"data": {
|
|
139
|
+
"dept_user_id": "user001",
|
|
140
|
+
"dept_user_name": "张三"
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**2. 查询课程学习记录**
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
soke-cli course +get-course-user \
|
|
149
|
+
--course-id "abc123-def456-ghi789" \
|
|
150
|
+
--dept-user-id "user001"
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**3. 预期输出**
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"data": {
|
|
158
|
+
"target_id": "record001",
|
|
159
|
+
"dept_user_id": "user001",
|
|
160
|
+
"dept_user_name": "张三",
|
|
161
|
+
"study_progress": 100,
|
|
162
|
+
"finish_status": 1,
|
|
163
|
+
"study_duration": 7200,
|
|
164
|
+
"create_time": 1714492800000,
|
|
165
|
+
"update_time": 1714579200000
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**4. 解读结果**
|
|
171
|
+
|
|
172
|
+
- 学习进度: 100%(已完成)
|
|
173
|
+
- 完成状态: 1(已完成)
|
|
174
|
+
- 学习时长: 7200秒(2小时)
|
|
175
|
+
- 开始时间: 2024-05-01
|
|
176
|
+
- 最后更新: 2024-05-02
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## 示例4: 查询课程的课件学习详情
|
|
181
|
+
|
|
182
|
+
### 需求
|
|
183
|
+
查询某个课程的所有课件,并统计每个课件的学习情况。
|
|
184
|
+
|
|
185
|
+
### 步骤
|
|
186
|
+
|
|
187
|
+
**1. 获取课程课件列表**
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
soke-cli course +list-lessons \
|
|
191
|
+
--course-id "abc123-def456-ghi789"
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**2. 预期输出**
|
|
195
|
+
|
|
196
|
+
```json
|
|
197
|
+
{
|
|
198
|
+
"data": {
|
|
199
|
+
"list": [
|
|
200
|
+
{
|
|
201
|
+
"uuid": "lesson001",
|
|
202
|
+
"title": "第1课:Go语言简介",
|
|
203
|
+
"type": "video",
|
|
204
|
+
"duration": 1800,
|
|
205
|
+
"sort": 1
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"uuid": "lesson002",
|
|
209
|
+
"title": "第2课:环境搭建",
|
|
210
|
+
"type": "video",
|
|
211
|
+
"duration": 2400,
|
|
212
|
+
"sort": 2
|
|
213
|
+
}
|
|
214
|
+
]
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**3. 查询每个课件的学习记录**
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
# 查询第1课的学习记录
|
|
223
|
+
soke-cli course +list-lesson-learns --lesson-id "lesson001"
|
|
224
|
+
|
|
225
|
+
# 查询第2课的学习记录
|
|
226
|
+
soke-cli course +list-lesson-learns --lesson-id "lesson002"
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
**4. 统计分析**
|
|
230
|
+
|
|
231
|
+
```javascript
|
|
232
|
+
// 假设lesson001有50人学习,40人完成
|
|
233
|
+
// 假设lesson002有50人学习,30人完成
|
|
234
|
+
|
|
235
|
+
const lessonStats = [
|
|
236
|
+
{ title: "第1课:Go语言简介", total: 50, completed: 40, rate: "80%" },
|
|
237
|
+
{ title: "第2课:环境搭建", total: 50, completed: 30, rate: "60%" }
|
|
238
|
+
];
|
|
239
|
+
|
|
240
|
+
console.table(lessonStats);
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## 示例5: 按分类查询课程
|
|
246
|
+
|
|
247
|
+
### 需求
|
|
248
|
+
查询"技术培训"分类下的所有已发布课程。
|
|
249
|
+
|
|
250
|
+
### 步骤
|
|
251
|
+
|
|
252
|
+
**1. 获取课程分类列表**
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
soke-cli course +list-categories
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**2. 找到目标分类**
|
|
259
|
+
|
|
260
|
+
假设返回:
|
|
261
|
+
```json
|
|
262
|
+
{
|
|
263
|
+
"data": {
|
|
264
|
+
"list": [
|
|
265
|
+
{
|
|
266
|
+
"uuid": "cat001",
|
|
267
|
+
"title": "技术培训",
|
|
268
|
+
"parent_id": "0"
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"uuid": "cat002",
|
|
272
|
+
"title": "管理培训",
|
|
273
|
+
"parent_id": "0"
|
|
274
|
+
}
|
|
275
|
+
]
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
**3. 查询该分类下的课程**
|
|
281
|
+
|
|
282
|
+
```bash
|
|
283
|
+
soke-cli course +list-courses \
|
|
284
|
+
--start-time 1704038400000 \
|
|
285
|
+
--end-time 1735660799000 \
|
|
286
|
+
--category-id "cat001" \
|
|
287
|
+
--status 1
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## 示例6: 查询人脸识别记录
|
|
293
|
+
|
|
294
|
+
### 需求
|
|
295
|
+
查询某个课件的人脸识别记录,确保学员本人学习。
|
|
296
|
+
|
|
297
|
+
### 步骤
|
|
298
|
+
|
|
299
|
+
**1. 查询课件的人脸识别记录**
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
soke-cli course +list-lesson-faces \
|
|
303
|
+
--lesson-id "lesson001" \
|
|
304
|
+
--start-time 1714492800000 \
|
|
305
|
+
--end-time 1717171199000
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
**2. 预期输出**
|
|
309
|
+
|
|
310
|
+
```json
|
|
311
|
+
{
|
|
312
|
+
"data": {
|
|
313
|
+
"list": [
|
|
314
|
+
{
|
|
315
|
+
"uuid": "face001",
|
|
316
|
+
"dept_user_id": "user001",
|
|
317
|
+
"dept_user_name": "张三",
|
|
318
|
+
"face_status": 1,
|
|
319
|
+
"face_time": 1714492800000
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
"uuid": "face002",
|
|
323
|
+
"dept_user_id": "user002",
|
|
324
|
+
"dept_user_name": "李四",
|
|
325
|
+
"face_status": 2,
|
|
326
|
+
"face_time": 1714493400000
|
|
327
|
+
}
|
|
328
|
+
]
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
**3. 分析识别结果**
|
|
334
|
+
|
|
335
|
+
- `face_status = 1`: 识别成功(张三)
|
|
336
|
+
- `face_status = 2`: 识别失败(李四)
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
340
|
+
## 示例7: 批量查询多个用户的学习记录
|
|
341
|
+
|
|
342
|
+
### 需求
|
|
343
|
+
查询多个用户在某个课程的学习情况。
|
|
344
|
+
|
|
345
|
+
### 步骤
|
|
346
|
+
|
|
347
|
+
**1. 准备用户ID列表**
|
|
348
|
+
|
|
349
|
+
```bash
|
|
350
|
+
# 用户ID列表(逗号分隔,最多100个)
|
|
351
|
+
USER_IDS="user001,user002,user003,user004,user005"
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
**2. 批量查询**
|
|
355
|
+
|
|
356
|
+
```bash
|
|
357
|
+
soke-cli course +list-course-users \
|
|
358
|
+
--course-id "abc123-def456-ghi789" \
|
|
359
|
+
--userid-list "$USER_IDS"
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
**3. 预期输出**
|
|
363
|
+
|
|
364
|
+
```json
|
|
365
|
+
{
|
|
366
|
+
"data": {
|
|
367
|
+
"list": [
|
|
368
|
+
{
|
|
369
|
+
"dept_user_id": "user001",
|
|
370
|
+
"dept_user_name": "张三",
|
|
371
|
+
"study_progress": 100,
|
|
372
|
+
"finish_status": 1
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
"dept_user_id": "user002",
|
|
376
|
+
"dept_user_name": "李四",
|
|
377
|
+
"study_progress": 50,
|
|
378
|
+
"finish_status": 0
|
|
379
|
+
}
|
|
380
|
+
// ... 其他用户
|
|
381
|
+
]
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
---
|
|
387
|
+
|
|
388
|
+
## 示例8: 查询某个时间段完成的学习记录
|
|
389
|
+
|
|
390
|
+
### 需求
|
|
391
|
+
查询2024年5月完成课程学习的所有用户。
|
|
392
|
+
|
|
393
|
+
### 步骤
|
|
394
|
+
|
|
395
|
+
**1. 计算时间范围**
|
|
396
|
+
|
|
397
|
+
```javascript
|
|
398
|
+
const finishStartTime = new Date('2024-05-01 00:00:00').getTime(); // 1714492800000
|
|
399
|
+
const finishEndTime = new Date('2024-05-31 23:59:59').getTime(); // 1717171199000
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
**2. 查询完成记录**
|
|
403
|
+
|
|
404
|
+
```bash
|
|
405
|
+
soke-cli course +list-course-users \
|
|
406
|
+
--course-id "abc123-def456-ghi789" \
|
|
407
|
+
--finish-start-time 1714492800000 \
|
|
408
|
+
--finish-end-time 1717171199000
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
**3. 筛选已完成的记录**
|
|
412
|
+
|
|
413
|
+
```javascript
|
|
414
|
+
const data = response.data.list;
|
|
415
|
+
const completedUsers = data.filter(u => u.finish_status === 1);
|
|
416
|
+
|
|
417
|
+
console.log(`5月完成学习的用户数: ${completedUsers.length}`);
|
|
418
|
+
completedUsers.forEach(u => {
|
|
419
|
+
console.log(`- ${u.dept_user_name}: ${u.study_progress}%`);
|
|
420
|
+
});
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
---
|
|
424
|
+
|
|
425
|
+
## 常用脚本
|
|
426
|
+
|
|
427
|
+
### 脚本1: 课程完成率统计脚本
|
|
428
|
+
|
|
429
|
+
```bash
|
|
430
|
+
#!/bin/bash
|
|
431
|
+
|
|
432
|
+
COURSE_ID="abc123-def456-ghi789"
|
|
433
|
+
|
|
434
|
+
# 获取学习记录
|
|
435
|
+
RESULT=$(soke-cli course +list-course-users --course-id "$COURSE_ID" --page-size 100)
|
|
436
|
+
|
|
437
|
+
# 使用jq解析JSON(需要安装jq)
|
|
438
|
+
TOTAL=$(echo "$RESULT" | jq '.data.list | length')
|
|
439
|
+
COMPLETED=$(echo "$RESULT" | jq '[.data.list[] | select(.finish_status == 1)] | length')
|
|
440
|
+
RATE=$(echo "scale=2; $COMPLETED * 100 / $TOTAL" | bc)
|
|
441
|
+
|
|
442
|
+
echo "课程ID: $COURSE_ID"
|
|
443
|
+
echo "总人数: $TOTAL"
|
|
444
|
+
echo "完成人数: $COMPLETED"
|
|
445
|
+
echo "完成率: $RATE%"
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
### 脚本2: 批量导出课程数据
|
|
449
|
+
|
|
450
|
+
```bash
|
|
451
|
+
#!/bin/bash
|
|
452
|
+
|
|
453
|
+
START_TIME=1704038400000
|
|
454
|
+
END_TIME=1735660799000
|
|
455
|
+
OUTPUT_FILE="courses.json"
|
|
456
|
+
|
|
457
|
+
# 导出所有课程
|
|
458
|
+
soke-cli course +list-courses \
|
|
459
|
+
--start-time "$START_TIME" \
|
|
460
|
+
--end-time "$END_TIME" \
|
|
461
|
+
--page-size 100 > "$OUTPUT_FILE"
|
|
462
|
+
|
|
463
|
+
echo "课程数据已导出到: $OUTPUT_FILE"
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
---
|
|
467
|
+
|
|
468
|
+
## 注意事项
|
|
469
|
+
|
|
470
|
+
1. **时间戳格式**: 所有时间参数必须使用毫秒级Unix时间戳
|
|
471
|
+
2. **分页处理**: 如果数据量大,需要循环分页查询
|
|
472
|
+
3. **权限检查**: 确保已完成认证并有相应权限
|
|
473
|
+
4. **错误处理**: 建议在脚本中添加错误处理逻辑
|
|
474
|
+
5. **API限流**: 注意API调用频率限制
|
|
475
|
+
|
|
476
|
+
## 相关资源
|
|
477
|
+
|
|
478
|
+
- [SKILL.md](./SKILL.md) - 完整文档
|
|
479
|
+
- [README.md](./README.md) - 快速开始
|
|
480
|
+
- [course-list-courses.md](./references/course-list-courses.md) - 详细参考
|