feat:更新埃学习文档
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
  为解决企业内部线下培训成本高、进度难追踪的问题,开发了一套企业在线学习平台,用于员工课程学习、在线考试、培训计划管理与数据统计分析,已全面接入企业微信工作台。
|
||||
|
||||
# 二、系统架构
|
||||

|
||||
|
||||
# 三、核心模块
|
||||
## 3.1 员工端
|
||||
@@ -31,7 +32,15 @@
|
||||
| **视频处理** | Java JAVE 2 (FFmpeg 封装,视频压缩转码) |
|
||||
| **运维** | Docker、Fluent Bit (日志采集)、OpenObserver (日志可视化) |
|
||||
|
||||
# 五、难点/亮点
|
||||
# 五、核心设计
|
||||
- 基于 Spring Boot 3 + MyBatis‑Plus 构建稳定的后端架构,通过 Sa‑Token 实现接口级鉴权,保障系统安全与权限可控。
|
||||
- 集成企业微信 SDK,实现企业微信工作台免登录认证;通过企业微信消息通知机制,自动推送学习任务与提醒。
|
||||
- 设计课程、学习计划与考试等核心业务模型,支持批量下发培训任务;实现随机组卷、自动阅卷与成绩统计,并自动提醒员工完成学习任务。
|
||||
- 基于 JAVE2(FFmpeg)实现视频自动压缩与转码,适配多终端播放;采用 AList 作为统一文件存储平台,集中管理音视频及课件资源。
|
||||
- 基于 Vue 3 + Element Plus + Pinia 构建管理员端与员工端页面,集成 vue‑office 实现多格式文档在线预览,集合ECharts实现多维度数据分析。
|
||||
- 使用 Docker 容器化部署,结合 Fluent Bit + OpenObserver 构建统一日志监控体系,提升系统可观测性与运维效率。
|
||||
|
||||
# 六、难点/亮点
|
||||
## 5.1 公网视频播放卡顿
|
||||
* 问题
|
||||
  服务器公网带宽小,高清视频并发播放严重卡顿。
|
||||
@@ -62,7 +71,7 @@
|
||||
* 效果
|
||||
  培训通知实时触达,未读提醒显著提高培训完成率;管理员无需手动维护人员信息,降低了系统运维成本。
|
||||
|
||||
# 六、成果
|
||||
# 七、成果
|
||||
1. 平台全面替代线下培训,年度培训计划完成率由 60% 提升至 95% 以上,满足了企业合规培训要求。
|
||||
2. 过视频压缩方案解决了公网带宽瓶颈,结合企业微信自动化通知,大幅降低人工催办成本,整体培训运营成本下降约 40%。
|
||||
3. 实现了学习进度防作弊与学习记录全跟踪,为公司提供精准的数据统计报表,支撑人才盘点与绩效评估。
|
||||
|
||||
BIN
docs/Practice/images/aixuexi_arch.png
Normal file
BIN
docs/Practice/images/aixuexi_arch.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 35 KiB |
@@ -262,10 +262,47 @@ public interface UserMapper {
|
||||
</resultMap>
|
||||
```
|
||||
|
||||
  其中`<collection>`也可以使用嵌套查询:
|
||||
  对应的数据结构为:
|
||||
```java
|
||||
public class Blog {
|
||||
private Integer id;
|
||||
private String title;
|
||||
private Author author; // 一对一
|
||||
private List<Post> posts; // 一对多
|
||||
}
|
||||
|
||||
public class Author {
|
||||
private Integer id;
|
||||
private String username;
|
||||
private String password;
|
||||
private String email;
|
||||
private String bio;
|
||||
private String favouriteSection;
|
||||
}
|
||||
|
||||
public class Post {
|
||||
private Integer id;
|
||||
private String subject;
|
||||
private Author author; // 一对一
|
||||
private List<Comment> comments; // 一对多
|
||||
private List<Tag> tags; // 一对多
|
||||
}
|
||||
|
||||
public class Comment {
|
||||
private Integer id;
|
||||
}
|
||||
|
||||
public class Tag {
|
||||
private Integer id;
|
||||
}
|
||||
```
|
||||
|
||||
  其中`<collection>`也可以使用嵌套查询,例如`<collection property="posts" ofType="Post" select="queryPost"/>`:
|
||||
|
||||
```xml
|
||||
<collection property="posts" ofType="Post" select="queryPost"/>
|
||||
<select id="queryPost" resultMap="postResultMap">
|
||||
|
||||
</select>
|
||||
|
||||
<resultMap id="postResultMap" type="Post">
|
||||
<id property="id" column="post_id"/>
|
||||
@@ -281,11 +318,6 @@ public interface UserMapper {
|
||||
<case value="1" resultType="DraftPost"/>
|
||||
</discriminator>
|
||||
</resultMap>
|
||||
|
||||
<select id="queryPost" resultMap="postResultMap">
|
||||
|
||||
</select>
|
||||
|
||||
```
|
||||
|
||||
  如果需要传递参数,可以在`<collection>`添加`column`属性:
|
||||
@@ -306,6 +338,11 @@ public interface UserMapper {
|
||||
+ 映射语句文件中的所有 insert、update 和 delete 语句会刷新缓存。
|
||||
+ 一级缓存和二级缓存区别在于一级缓存只针对一次SqlSession,二级缓存针对全局范围。
|
||||
|
||||
::: tip
|
||||
一级缓存作用于service里面的同一个方法(一个方法就是一个SqlSession),多次查询时,直接返回缓存数据,如果是同一个service里面的不同方法,就是多个SqlSession,一级缓存会失效。
|
||||
二级缓存作用于同一个mapper,即使是不同的service的不同方法,只要是同一个mapper,都可以使用二级缓存。
|
||||
:::
|
||||
|
||||
## 4.6 动态SQL
|
||||
+ if :是/否
|
||||
|
||||
|
||||
Reference in New Issue
Block a user