|
|
软件详细设计报告(详细设计)
|
|
|
|
|
|
1. 总体说明
|
|
|
本报告基于当前代码实现,细化至类/接口、方法职责、数据流与异常处理,覆盖后端各模块与前端关键交互点。
|
|
|
|
|
|
2. 后端详细设计
|
|
|
2.1 统一基础设施
|
|
|
- `com.prj.common.core.controller.BaseController`
|
|
|
- `startPage()`:开启分页(集成 MyBatis PageHelper);
|
|
|
- `getDataByPage(List)`:封装为 `TableDataInfo`;
|
|
|
- `toAjax(int rows)`:封装影响行数到 `AjaxResult`;
|
|
|
- `AjaxResult`:统一返回结构 `{ code, msg, data }`;
|
|
|
|
|
|
2.2 鉴权与验证码
|
|
|
- `CaptchaController`
|
|
|
- 依赖:`captchaProducerMath`、`RedisCache`
|
|
|
- 主要流程:生成运算验证码 → Redis存储(键:`Constants.CAPTCHA_CODE_KEY + uuid`) → Base64图片返回
|
|
|
- 异常:`ImageIO.write` 抛出 `IOException` 时,返回 `AjaxResult.error(msg)`
|
|
|
- `LoginController`
|
|
|
- 依赖:`LoginService`
|
|
|
- 主要流程:校验验证码 → 账号认证 → 生成 `token` → 返回 `Constants.TOKEN` 字段
|
|
|
|
|
|
2.3 部门信息管理
|
|
|
- `DeptController`
|
|
|
- `GET /dept_info/list`:`startPage()` → `IDeptService.selectDeptList(Dept)` → `getDataByPage(list)`
|
|
|
- `GET /dept_info/{id}`:`IDeptService.selectDeptById(id)`
|
|
|
- `POST /dept_info`:`IDeptService.insertDept(Dept)` → `toAjax(rows)`
|
|
|
- `PUT /dept_info`:`IDeptService.updateDept(Dept)` → `toAjax(rows)`
|
|
|
- `DELETE /dept_info/{ids}`:`IDeptService.deleteDeptByIds(Long[])` → `toAjax(rows)`
|
|
|
- Service 与持久化
|
|
|
- `IDeptService`/impl:参数校验与 CRUD 组合;
|
|
|
- `DeptMapper.xml`:对应 SQL(与实体字段一致);
|
|
|
|
|
|
2.4 员工信息管理
|
|
|
- `EmployeeController`
|
|
|
- 同 Dept 接口集合;
|
|
|
- `PUT /employee`:`@Transactional(timeout=20, readOnly=false, isolation=DEFAULT, propagation=REQUIRED)`
|
|
|
- 设计目的:保证更新过程中的一致性,可在方法内扩展多表写操作;
|
|
|
- Service 与持久化
|
|
|
- `IEmployeeService`/impl` + `EmployeeMapper.xml`
|
|
|
|
|
|
2.5 员工评价管理
|
|
|
- `EmployeeKpiController` + `IEmployeeKpiService` + `EmployeeKpiMapper.xml`
|
|
|
- 五个CRUD端点,同上模式;
|
|
|
|
|
|
2.6 招人名额管理
|
|
|
- `HireNumController` + `IHireNumService` + `HirenumRepo`/`HireNumMapper.xml`
|
|
|
- 实体 `HireNum` 使用 JPA 注解(`@Entity @Table(name="hire_num")`),字段 `id/dept/num/endtime`;
|
|
|
|
|
|
2.7 薪资标准管理
|
|
|
- `SalaryLevelController` + `ISalaryLevelService` + `SalaryLevelMapper.xml`
|
|
|
|
|
|
2.8 领域模型
|
|
|
- `Dept{id, name, manager, reportto}`
|
|
|
- `Employee{id, dept, name, position, salary}`
|
|
|
- `EmployeeKpi{id, kpi, bonus, manager}`
|
|
|
- `HireNum{id, dept, num, endtime}`
|
|
|
- `SalaryLevel{id, jobType, salary, salaryrange}`
|
|
|
|
|
|
2.9 异常与错误处理
|
|
|
- 控制器返回 `AjaxResult.error(msg)` 或 `code!=200`;
|
|
|
- 登录401由前端捕获并触发重新登录;
|
|
|
|
|
|
3. 前端详细设计
|
|
|
3.1 路由
|
|
|
- `src/router/index.js`:
|
|
|
- `/index` 首页;
|
|
|
- 业务模块:`/dept_info`、`/salary_level`、`/hirenum`、`/employee`、`/employee_kpi`;
|
|
|
- `/login` 登录页;
|
|
|
|
|
|
3.2 请求封装
|
|
|
- `src/utils/request.js`
|
|
|
- Request 拦截器:若存在 `Admin-Token`,注入 `Authorization: Bearer <token>`;
|
|
|
- Response 拦截器:基于 `code` 统一处理 401/500/非200 异常;
|
|
|
- `timeout=2000ms`,`baseURL=VUE_APP_BASE_API`;
|
|
|
- `src/utils/auth.js`:基于 Cookie 管理 `Admin-Token`;
|
|
|
|
|
|
3.3 API 模块
|
|
|
- `src/api/*.js` 与后端控制器一一对应(URL 完全匹配),方法:`list/get/add/update/del`;
|
|
|
|
|
|
4. 典型时序(文本)
|
|
|
4.1 登录
|
|
|
用户 → `/captchaImage` → 返回 `uuid,img`;用户提交 `/login{username,password,code,uuid}` → 返回 `token`;前端保存 Cookie 并携带到后续请求。
|
|
|
|
|
|
4.2 列表分页
|
|
|
页面 → 调用 `list` API(query→实体字段映射)→ Controller `startPage()` → Service/Mapper 查询 → `TableDataInfo` 返回。
|
|
|
|
|
|
4.3 更新(员工示例)
|
|
|
页面 → `PUT /employee` → Controller(事务)→ Service → Mapper/JPA → 受影响行数 → `AjaxResult`。
|
|
|
|
|
|
5. 数据校验与约束
|
|
|
- 控制器层假定实体字段按类型传入;
|
|
|
- 业务层可扩展非空、范围、唯一性校验(当前代码未显式实现高级校验规则)。
|
|
|
|
|
|
6. 配置要点
|
|
|
- `application.yml`:数据源/端口/Redis等;
|
|
|
- `logback.xml`:日志级别与输出;
|
|
|
|
|
|
7. 安全与权限
|
|
|
- 以 Token 作为会话凭证;未实现细粒度 RBAC 的控制器级别权限;
|
|
|
|
|
|
8. 扩展点
|
|
|
- 在Service引入DTO与校验框架;
|
|
|
- 统一异常处理与错误码枚举;
|
|
|
- 审计日志与操作记录;
|
|
|
|
|
|
|