1. 项目架构与技术选型解析
这套公司资产管理系统采用了当前主流的前后端分离架构,后端基于SpringBoot 2.7.x构建,前端使用Vue3+TypeScript实现,数据持久层采用MyBatis-Plus 3.5.x。这种技术组合在2023年的企业级应用中已经成为事实上的标准方案,我在多个金融和制造业客户项目中验证过其稳定性。
技术栈的版本选择值得特别说明:
- SpringBoot选用2.7.x而非3.0+系列,主要考虑企业环境对JDK17的适配尚在过渡期
- Vue3放弃Options API全面采用Composition API,这对复杂业务逻辑的组织更有利
- MyBatis-Plus而非原生MyBatis,其Lambda查询构建器能减少30%以上的样板代码
数据库设计遵循几个核心原则:
- 资产主表采用"一物一码"设计,每个资产都有唯一的UUID+自增ID双主键
- 审批流程使用状态机模式,通过status字段和history表记录完整生命周期
- 所有删除操作都是逻辑删除,通过is_deleted字段控制
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 后端工程关键实现细节
2.1 分层架构与包结构
项目采用严格的四层架构:
code复制com.company.asset
├── config # 配置类
├── controller # 暴露的API接口
├── service # 业务逻辑
│ ├── impl # 实现类
├── dao # 数据访问层
├── entity # 数据库实体
├── dto # 数据传输对象
└── util # 工具类
这种结构在大型项目中表现出色,我在某央企项目中使用类似结构管理了超过200个业务模块。特别要注意的是DTO的使用规范:
- Controller层只接收和返回DTO对象
- Service层内部使用Entity进行业务处理
- 禁止在Controller中直接操作Entity
2.2 审计日志实现方案
资产管理系统必须满足等保要求,我们通过AOP实现了完善的审计日志:
java复制@Aspect
@Component
public class AuditLogAspect {
@AfterReturning(pointcut = "@annotation(auditLog)", returning = "result")
public void afterReturning(JoinPoint joinPoint, AuditLog auditLog, Object result) {
String operation = auditLog.value();
// 获取当前用户信息
// 记录操作内容
// 异步写入数据库
}
}
实际使用中发现两个关键点:
- 必须对日志写入做异步处理,否则会影响主业务性能
- 敏感字段需要特殊处理,如密码等字段应该脱敏存储
3. 前端工程架构实践
3.1 Vue3组合式API实践
彻底放弃Options API后,我们建立了这样的代码组织方式:
typescript复制// asset-list.vue
<script setup lang="ts">
