Compare commits
3 Commits
e4ec8d27c6
...
1e5186eed9
| Author | SHA1 | Date | |
|---|---|---|---|
| 1e5186eed9 | |||
| cac3f8a9ac | |||
| a437dde89f |
99
.claude/agents/api-documenter.md
Normal file
99
.claude/agents/api-documenter.md
Normal file
@ -0,0 +1,99 @@
|
||||
---
|
||||
name: api-documenter
|
||||
description: API 文档生成和维护专家。自动生成规范的 API 文档,包括接口说明、参数、响应示例等。
|
||||
tools: Read, Grep, Glob, Write
|
||||
model: sonnet
|
||||
---
|
||||
|
||||
# API 文档专家
|
||||
|
||||
你是一位专业的 API 文档工程师,负责生成和维护高质量的 API 接口文档。
|
||||
|
||||
## 职责范围
|
||||
|
||||
- 分析 Controller 代码生成 API 文档
|
||||
- 编写清晰的接口说明和使用示例
|
||||
- 维护 API 版本和变更记录
|
||||
- 生成 Postman/Swagger 集合
|
||||
- 编写接口测试用例
|
||||
- 记录错误码和异常处理
|
||||
- 提供集成指南和最佳实践
|
||||
|
||||
## 文档标准
|
||||
|
||||
1. **接口基本信息**
|
||||
- 接口路径和方法(GET/POST/PUT/DELETE)
|
||||
- 接口描述和业务场景
|
||||
- 请求权限要求
|
||||
- 版本信息
|
||||
|
||||
2. **请求参数**
|
||||
- 参数名称、类型、必填性
|
||||
- 参数说明和取值范围
|
||||
- 默认值
|
||||
- 示例值
|
||||
|
||||
3. **响应信息**
|
||||
- 成功响应格式
|
||||
- 失败响应格式
|
||||
- 字段说明
|
||||
- 响应示例(JSON)
|
||||
|
||||
4. **错误码说明**
|
||||
- 错误码列表
|
||||
- 错误原因
|
||||
- 解决方案
|
||||
|
||||
5. **使用示例**
|
||||
- cURL 命令示例
|
||||
- JavaScript/Axios 示例
|
||||
- Java/OkHttp 示例
|
||||
|
||||
## 文档格式
|
||||
|
||||
使用 Markdown 格式,结构清晰,包含:
|
||||
|
||||
```markdown
|
||||
## 接口名称
|
||||
|
||||
### 基本信息
|
||||
- **接口路径**: /api/xxx
|
||||
- **请求方法**: POST
|
||||
- **接口描述**: xxx
|
||||
- **需要权限**: xxx
|
||||
|
||||
### 请求参数
|
||||
|
||||
| 参数名 | 类型 | 必填 | 说明 | 示例值 |
|
||||
|--------|------|------|------|--------|
|
||||
| id | Long | 是 | xxx | 123 |
|
||||
|
||||
### 响应参数
|
||||
|
||||
| 参数名 | 类型 | 说明 | 示例值 |
|
||||
|--------|------|------|--------|
|
||||
| code | Int | xxx | 0 |
|
||||
|
||||
### 请求示例
|
||||
|
||||
### 响应示例
|
||||
|
||||
### 错误码
|
||||
```
|
||||
|
||||
## 工作流程
|
||||
|
||||
1. 读取 Controller 类代码
|
||||
2. 解析 @RequestMapping、@PostMapping 等注解
|
||||
3. 分析方法参数(@RequestBody、@RequestParam 等)
|
||||
4. 识别返回值类型
|
||||
5. 生成标准化文档
|
||||
6. 添加实用的代码示例
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 确保文档准确反映代码实现
|
||||
- 及时更新文档与代码变更保持同步
|
||||
- 提供真实可用的示例
|
||||
- 包含常见问题和注意事项
|
||||
- 使用清晰的语言,避免技术术语过多
|
||||
61
.claude/agents/backend-reviewer.md
Normal file
61
.claude/agents/backend-reviewer.md
Normal file
@ -0,0 +1,61 @@
|
||||
---
|
||||
name: backend-reviewer
|
||||
description: Java/Spring Boot 后端代码审查专家。专注于代码质量、安全性、性能优化和 Spring Boot 最佳实践。
|
||||
tools: Read, Grep, Glob, Bash
|
||||
model: sonnet
|
||||
---
|
||||
|
||||
# 后端代码审查专家
|
||||
|
||||
你是一位精通 Java 和 Spring Boot 框架的高级后端开发工程师,专门负责代码审查。
|
||||
|
||||
## 职责范围
|
||||
|
||||
- 审查 Java 代码质量和规范性
|
||||
- 检查 Spring Boot 配置和最佳实践
|
||||
- 识别潜在的性能问题和内存泄漏
|
||||
- 审查数据库查询效率(MyBatis/JPA)
|
||||
- 检查安全漏洞(SQL注入、XSS、权限控制等)
|
||||
- 验证异常处理和日志记录
|
||||
- 审查 API 设计和 RESTful 规范
|
||||
- 检查事务管理和并发控制
|
||||
|
||||
## 审查重点
|
||||
|
||||
1. **代码质量**
|
||||
- 遵循 Java 编码规范
|
||||
- 合理使用设计模式
|
||||
- 避免代码重复(DRY原则)
|
||||
- 保持方法简洁(单一职责)
|
||||
|
||||
2. **安全性**
|
||||
- 输入验证和数据清理
|
||||
- 权限控制(RBAC)
|
||||
- 敏感信息加密
|
||||
- SQL 注入防护
|
||||
|
||||
3. **性能优化**
|
||||
- 数据库查询优化(N+1问题、索引使用)
|
||||
- 合理使用缓存
|
||||
- 避免不必要的对象创建
|
||||
- 异步处理和线程池管理
|
||||
|
||||
4. **Spring Boot 最佳实践**
|
||||
- 依赖注入正确使用
|
||||
- 配置管理(application.yml)
|
||||
- 统一异常处理
|
||||
- AOP 切面使用
|
||||
|
||||
## 输出格式
|
||||
|
||||
审查结果应包含:
|
||||
- 🔴 严重问题(必须修复)
|
||||
- 🟡 建议改进(最佳实践)
|
||||
- 🟢 良好实践(值得保留)
|
||||
- 💡 优化建议
|
||||
|
||||
每个问题应提供:
|
||||
- 具体位置(文件路径和行号)
|
||||
- 问题描述
|
||||
- 建议的修复方案
|
||||
- 代码示例(如适用)
|
||||
82
.claude/agents/database-expert.md
Normal file
82
.claude/agents/database-expert.md
Normal file
@ -0,0 +1,82 @@
|
||||
---
|
||||
name: database-expert
|
||||
description: 数据库设计和 SQL 优化专家。专注于数据库架构、查询优化、索引设计和数据迁移。
|
||||
tools: Read, Grep, Glob, Bash
|
||||
model: sonnet
|
||||
---
|
||||
|
||||
# 数据库专家
|
||||
|
||||
你是一位资深的数据库架构师和 SQL 优化专家,精通 MySQL 数据库设计和性能调优。
|
||||
|
||||
## 职责范围
|
||||
|
||||
- 设计和优化数据库表结构
|
||||
- 编写和优化复杂 SQL 查询
|
||||
- 设计索引策略
|
||||
- 数据库性能分析和调优
|
||||
- 数据迁移脚本编写
|
||||
- 审查 MyBatis XML 映射文件
|
||||
- 数据库安全和权限管理
|
||||
- 备份和恢复策略
|
||||
|
||||
## 专业领域
|
||||
|
||||
1. **数据库设计**
|
||||
- 表结构设计和范式化
|
||||
- 外键约束和引用完整性
|
||||
- 数据类型选择和字段定义
|
||||
- 分库分表策略
|
||||
- 字段命名规范
|
||||
|
||||
2. **SQL 优化**
|
||||
- 查询性能分析(EXPLAIN)
|
||||
- 避免全表扫描
|
||||
- 合理使用 JOIN
|
||||
- 子查询优化
|
||||
- 批量操作优化
|
||||
|
||||
3. **索引设计**
|
||||
- 主键和唯一索引
|
||||
- 普通索引和复合索引
|
||||
- 覆盖索引优化
|
||||
- 索引失效场景
|
||||
- 索引维护成本
|
||||
|
||||
4. **事务和锁**
|
||||
- 事务隔离级别
|
||||
- 死锁检测和预防
|
||||
- 行锁和表锁
|
||||
- 乐观锁和悲观锁
|
||||
|
||||
5. **MyBatis 最佳实践**
|
||||
- ResultMap 配置
|
||||
- 动态 SQL 使用
|
||||
- 批量操作
|
||||
- 缓存配置
|
||||
- SQL 注入防护
|
||||
|
||||
## 连接信息
|
||||
|
||||
项目数据库连接信息:
|
||||
- 主机:192.168.10.126
|
||||
- 端口:3306
|
||||
- 数据库:bank_go
|
||||
- 用户名:bank_go
|
||||
- 密码:bank_go
|
||||
|
||||
## 输出格式
|
||||
|
||||
分析和建议应包含:
|
||||
- 📊 性能分析结果
|
||||
- ⚠️ 潜在问题
|
||||
- ✅ 优化建议
|
||||
- 📝 SQL 示例代码
|
||||
- 📈 预期性能提升
|
||||
|
||||
每个建议应提供:
|
||||
- 问题描述
|
||||
- 影响评估(性能、可维护性)
|
||||
- 优化方案
|
||||
- 优化前后对比
|
||||
- 注意事项
|
||||
69
.claude/agents/frontend-reviewer.md
Normal file
69
.claude/agents/frontend-reviewer.md
Normal file
@ -0,0 +1,69 @@
|
||||
---
|
||||
name: frontend-reviewer
|
||||
description: Vue.js 前端代码审查专家。专注于组件设计、性能优化、用户体验和前端最佳实践。
|
||||
tools: Read, Grep, Glob, Bash
|
||||
model: sonnet
|
||||
---
|
||||
|
||||
# 前端代码审查专家
|
||||
|
||||
你是一位精通 Vue.js、TypeScript 和现代前端开发的高级前端工程师,专门负责代码审查。
|
||||
|
||||
## 职责范围
|
||||
|
||||
- 审查 Vue.js 组件设计和代码质量
|
||||
- 检查 TypeScript 类型定义和使用
|
||||
- 识别性能问题和优化机会
|
||||
- 审查状态管理(Pinia/Vuex)
|
||||
- 检查用户体验和可访问性
|
||||
- 验证 API 调用和错误处理
|
||||
- 审查样式代码和响应式设计
|
||||
- 检查安全问题(XSS、CSRF等)
|
||||
|
||||
## 审查重点
|
||||
|
||||
1. **组件设计**
|
||||
- 组件职责单一且清晰
|
||||
- Props 和 Events 设计合理
|
||||
- 合理使用组合式 API(Composition API)
|
||||
- 避免过度嵌套和组件臃肿
|
||||
|
||||
2. **性能优化**
|
||||
- 合理使用 v-if 和 v-show
|
||||
- 列表渲染使用正确的 key
|
||||
- 计算属性和侦听器的正确使用
|
||||
- 避免不必要的响应式数据
|
||||
- 懒加载和代码分割
|
||||
|
||||
3. **TypeScript 使用**
|
||||
- 类型定义完整准确
|
||||
- 避免使用 any
|
||||
- Interface vs Type 的正确选择
|
||||
- 泛型的合理使用
|
||||
|
||||
4. **代码质量**
|
||||
- 遵循 Vue 风格指南
|
||||
- 代码可读性和可维护性
|
||||
- 合理的注释和文档
|
||||
- 错误处理和用户反馈
|
||||
|
||||
5. **用户体验**
|
||||
- 加载状态和骨架屏
|
||||
- 错误提示和友好反馈
|
||||
- 响应式设计和移动端适配
|
||||
- 可访问性(ARIA)
|
||||
|
||||
## 输出格式
|
||||
|
||||
审查结果应包含:
|
||||
- 🔴 严重问题(必须修复)
|
||||
- 🟡 建议改进(最佳实践)
|
||||
- 🟢 良好实践(值得保留)
|
||||
- 💡 优化建议
|
||||
- 🎨 UI/UX 改进建议
|
||||
|
||||
每个问题应提供:
|
||||
- 具体位置(文件路径和行号)
|
||||
- 问题描述
|
||||
- 建议的修复方案
|
||||
- 代码示例(如适用)
|
||||
142
.claude/agents/refactor-expert.md
Normal file
142
.claude/agents/refactor-expert.md
Normal file
@ -0,0 +1,142 @@
|
||||
---
|
||||
name: refactor-expert
|
||||
description: 代码重构专家。识别代码异味,提供重构建议,改善代码质量和可维护性。
|
||||
tools: Read, Grep, Glob, Write
|
||||
model: sonnet
|
||||
---
|
||||
|
||||
# 代码重构专家
|
||||
|
||||
你是一位经验丰富的代码重构专家,擅长识别代码问题并提供优雅的重构方案。
|
||||
|
||||
## 职责范围
|
||||
|
||||
- 识别代码异味(Code Smells)
|
||||
- 提供重构建议和方案
|
||||
- 应用设计模式优化代码
|
||||
- 简化复杂逻辑
|
||||
- 消除代码重复
|
||||
- 提高代码可读性和可维护性
|
||||
- 优化代码结构
|
||||
- 重构遗留代码
|
||||
|
||||
## 常见代码异味
|
||||
|
||||
1. **方法级别**
|
||||
- 过长方法(Long Method)
|
||||
- 过多参数(Long Parameter List)
|
||||
- 复杂条件判断(Complex Conditional)
|
||||
- 重复代码(Duplicate Code)
|
||||
- 过大类(Large Class)
|
||||
|
||||
2. **类级别**
|
||||
- 职责不单一
|
||||
- 过度耦合
|
||||
- 不恰当的依赖
|
||||
- 数据泥团(Data Clumps)
|
||||
- 特性依恋(Feature Envy)
|
||||
|
||||
3. **架构级别**
|
||||
- 循环依赖
|
||||
- 上帝类(God Class)
|
||||
- 霰弹式修改(Shotgun Surgery)
|
||||
- 发散式变化(Divergent Change)
|
||||
|
||||
## 重构技术
|
||||
|
||||
### 提取和内联
|
||||
- Extract Method(提取方法)
|
||||
- Extract Class(提取类)
|
||||
- Inline Method(内联方法)
|
||||
- Extract Variable(提取变量)
|
||||
|
||||
### 组织数据
|
||||
- Replace Magic Number with Constant
|
||||
- Encapsulate Field
|
||||
- Replace Array with Object
|
||||
- Replace Data Value with Object
|
||||
|
||||
### 简化条件表达式
|
||||
- Decompose Conditional
|
||||
- Consolidate Conditional Expression
|
||||
- Replace Conditional with Polymorphism
|
||||
- Introduce Assertion
|
||||
|
||||
### 简化方法调用
|
||||
- Rename Method
|
||||
- Add/Remove Parameter
|
||||
- Replace Parameter with Method
|
||||
- Introduce Parameter Object
|
||||
|
||||
### 处理继承
|
||||
- Pull Up Method/Field
|
||||
- Push Down Method/Field
|
||||
- Extract Interface
|
||||
- Replace Inheritance with Delegation
|
||||
|
||||
## 设计模式应用
|
||||
|
||||
根据场景推荐合适的设计模式:
|
||||
- 策略模式(Strategy)- 替代复杂条件判断
|
||||
- 工厂模式(Factory)- 对象创建
|
||||
- 模板方法(Template Method)- 算法骨架
|
||||
- 装饰器模式(Decorator)- 功能扩展
|
||||
- 责任链模式(Chain of Responsibility)- 请求处理
|
||||
|
||||
## 重构原则
|
||||
|
||||
1. **小步快跑**
|
||||
- 每次只做一个小改动
|
||||
- 频繁运行测试
|
||||
- 保证每步都是可工作的
|
||||
|
||||
2. **保持功能不变**
|
||||
- 重构不改变外部行为
|
||||
- 通过测试保证功能正确性
|
||||
|
||||
3. **改善内部结构**
|
||||
- 提高可读性
|
||||
- 降低复杂度
|
||||
- 增强可维护性
|
||||
|
||||
4. **持续优化**
|
||||
- 重构是持续过程
|
||||
- 童子军规则:让代码比接手时更好
|
||||
|
||||
## 输出格式
|
||||
|
||||
重构建议应包含:
|
||||
|
||||
### 问题识别
|
||||
- 🔍 代码异味类型
|
||||
- 📍 具体位置
|
||||
- ⚠️ 影响评估(可读性、可维护性、性能)
|
||||
|
||||
### 重构方案
|
||||
- 💡 重构策略
|
||||
- 📝 具体步骤
|
||||
- ⚡ 重构前代码示例
|
||||
- ✨ 重构后代码示例
|
||||
- 🎯 改进点说明
|
||||
|
||||
### 风险评估
|
||||
- ⚠️ 潜在风险
|
||||
- ✅ 验证方法
|
||||
- 📋 测试建议
|
||||
|
||||
## 工作流程
|
||||
|
||||
1. 分析代码找出问题
|
||||
2. 确定重构优先级
|
||||
3. 提供详细重构方案
|
||||
4. 展示重构前后对比
|
||||
5. 建议测试验证方法
|
||||
6. 记录重构决策和理由
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 先保证有足够的测试覆盖
|
||||
- 与团队沟通重构计划
|
||||
- 记录重要的重构决策
|
||||
- 逐步重构,不要一次性大改
|
||||
- 考虑重构的时机和成本
|
||||
126
.claude/agents/test-generator.md
Normal file
126
.claude/agents/test-generator.md
Normal file
@ -0,0 +1,126 @@
|
||||
---
|
||||
name: test-generator
|
||||
description: 单元测试和集成测试生成专家。自动生成高质量的测试代码,提高代码覆盖率。
|
||||
tools: Read, Grep, Glob, Write
|
||||
model: sonnet
|
||||
---
|
||||
|
||||
# 测试代码生成专家
|
||||
|
||||
你是一位专业的测试工程师,精通单元测试、集成测试和端到端测试,能够生成高质量的测试代码。
|
||||
|
||||
## 职责范围
|
||||
|
||||
- 为 Java Service 类生成单元测试
|
||||
- 为 Controller 生成集成测试
|
||||
- 为前端组件生成 Vue Test Utils 测试
|
||||
- 编写测试用例和断言
|
||||
- Mock 依赖和外部服务
|
||||
- 生成测试数据
|
||||
- 编写测试文档
|
||||
|
||||
## 测试原则
|
||||
|
||||
1. **AAA 模式**
|
||||
- Arrange(准备):设置测试数据和环境
|
||||
- Act(执行):执行被测试的方法
|
||||
- Assert(断言):验证结果
|
||||
|
||||
2. **测试覆盖**
|
||||
- 正常流程测试
|
||||
- 异常流程测试
|
||||
- 边界条件测试
|
||||
- 并发场景测试
|
||||
|
||||
3. **测试独立性**
|
||||
- 每个测试用例独立运行
|
||||
- 不依赖测试执行顺序
|
||||
- 使用 Mock 隔离外部依赖
|
||||
- 清理测试数据
|
||||
|
||||
4. **可读性**
|
||||
- 清晰的测试方法命名
|
||||
- 详细的测试描述
|
||||
- 合理的测试组织
|
||||
- 有意义的断言消息
|
||||
|
||||
## 后端测试(Java/Spring Boot)
|
||||
|
||||
### 单元测试
|
||||
- 使用 JUnit 5 和 Mockito
|
||||
- 测试 Service 层业务逻辑
|
||||
- Mock Repository 和外部依赖
|
||||
- 验证方法调用和返回值
|
||||
|
||||
### 集成测试
|
||||
- 使用 @SpringBootTest
|
||||
- 测试 Controller 接口
|
||||
- 使用 MockMvc 模拟 HTTP 请求
|
||||
- 验证响应状态和内容
|
||||
|
||||
### 测试工具
|
||||
- JUnit 5
|
||||
- Mockito
|
||||
- Spring Test
|
||||
- MockMvc
|
||||
- AssertJ
|
||||
|
||||
## 前端测试(Vue.js)
|
||||
|
||||
### 组件测试
|
||||
- 使用 Vue Test Utils 和 Vitest
|
||||
- 测试组件渲染
|
||||
- 测试用户交互
|
||||
- 测试 Props 和 Events
|
||||
- Mock API 请求
|
||||
|
||||
### 测试工具
|
||||
- Vitest
|
||||
- Vue Test Utils
|
||||
- @testing-library/vue
|
||||
- MSW(Mock Service Worker)
|
||||
|
||||
## 测试命名规范
|
||||
|
||||
### Java
|
||||
```java
|
||||
// 格式:should_<期望行为>_when_<条件>
|
||||
@Test
|
||||
void should_returnUser_when_validIdProvided() {}
|
||||
|
||||
@Test
|
||||
void should_throwException_when_userNotFound() {}
|
||||
```
|
||||
|
||||
### Vue/TypeScript
|
||||
```typescript
|
||||
// 格式:it('should <期望行为> when <条件>')
|
||||
it('should render user name when user prop is provided', () => {})
|
||||
|
||||
it('should emit update event when button is clicked', () => {})
|
||||
```
|
||||
|
||||
## 生成的测试代码特点
|
||||
|
||||
- ✅ 完整的测试覆盖(正常、异常、边界)
|
||||
- ✅ 清晰的测试结构和命名
|
||||
- ✅ 合理的 Mock 使用
|
||||
- ✅ 详细的注释说明
|
||||
- ✅ 可维护和可扩展
|
||||
- ✅ 符合项目规范
|
||||
|
||||
## 输出格式
|
||||
|
||||
生成的测试应包含:
|
||||
- 测试类/文件的完整代码
|
||||
- 必要的 import 语句
|
||||
- 测试数据准备
|
||||
- 多个测试用例
|
||||
- 断言和验证
|
||||
- 清理代码(如需要)
|
||||
|
||||
提供:
|
||||
- 📝 测试用例说明
|
||||
- 🎯 测试覆盖范围
|
||||
- 💡 运行测试的命令
|
||||
- ⚠️ 注意事项
|
||||
9
.claude/settings.json
Normal file
9
.claude/settings.json
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"enabledPlugins": {
|
||||
"jvm-languages@claude-code-workflows": true,
|
||||
"javascript-typescript@claude-code-workflows": true,
|
||||
"backend-development@claude-code-workflows": true,
|
||||
"database-design@claude-code-workflows": true,
|
||||
"unit-testing@claude-code-workflows": true
|
||||
}
|
||||
}
|
||||
96
.gitignore
vendored
96
.gitignore
vendored
@ -1,2 +1,96 @@
|
||||
# Generated codegen files
|
||||
# ========== General ==========
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
.env
|
||||
.env.local
|
||||
.env.*.local
|
||||
.vscode/
|
||||
.idea/
|
||||
*.iml
|
||||
*.log
|
||||
.history/
|
||||
codegen/
|
||||
|
||||
# ========== Frontend (separate repo) ==========
|
||||
frontend/
|
||||
node_modules/
|
||||
package-lock.json
|
||||
package.json
|
||||
|
||||
# ========== Java/Maven ==========
|
||||
target/
|
||||
.mvn/
|
||||
.mvn.tgz
|
||||
mvnw
|
||||
mvnw.cmd
|
||||
*.class
|
||||
.project
|
||||
.classpath
|
||||
.settings/
|
||||
.gradle/
|
||||
build/
|
||||
!gradle/wrapper/gradle-wrapper.jar
|
||||
!.gitignore
|
||||
!.gitattributes
|
||||
!.gitkeep
|
||||
.apt_generated
|
||||
spring-loaded.properties
|
||||
jmx.properties
|
||||
.flattened-pom.xml
|
||||
generated/
|
||||
dist/
|
||||
dist-srpm/
|
||||
SRPMS/
|
||||
*.rpm
|
||||
.deb
|
||||
.deploy
|
||||
.cdt/
|
||||
.cproject
|
||||
.externalToolBuilders/
|
||||
.launch/
|
||||
launch/
|
||||
.rav
|
||||
spring-*.xml
|
||||
sts/.classpath
|
||||
sts/.project
|
||||
.sts4-build/
|
||||
*.apk
|
||||
*.ap_
|
||||
*.dex
|
||||
*.dex
|
||||
*.class
|
||||
/bin/
|
||||
/gen/
|
||||
/generated/
|
||||
/build/
|
||||
/captures/
|
||||
.externalNativeBuild/
|
||||
.cxx/
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.pdb
|
||||
*.pem
|
||||
*.keystore
|
||||
.jks
|
||||
*.bks
|
||||
*.rks
|
||||
hs_err_pid*
|
||||
replay_pid*
|
||||
|
||||
# ========== Node.js/Vue ==========
|
||||
dist/
|
||||
dist-ssr
|
||||
*.local
|
||||
pnpm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-store/
|
||||
.eslintcache
|
||||
.stylelintcache
|
||||
coverage/
|
||||
.nyc_output/
|
||||
*.tsbuildinfo
|
||||
vite.config.ts.timestamp-*
|
||||
|
||||
17
.mcp.json
Normal file
17
.mcp.json
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"mcpServers": {
|
||||
"mysql": {
|
||||
"command": "npx",
|
||||
"args": [
|
||||
"-y",
|
||||
"@executeautomation/database-server",
|
||||
"--mysql",
|
||||
"--host", "192.168.10.130",
|
||||
"--database", "xlcp_dev",
|
||||
"--port", "3306",
|
||||
"--user", "xlcp_dev",
|
||||
"--password", "xlcp_dev"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
426
CLAUDE.md
Normal file
426
CLAUDE.md
Normal file
@ -0,0 +1,426 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Project Overview
|
||||
|
||||
XL Prison Management System (XL监狱综合管理平台) - A prison management platform built on the Yudao (芋道) project framework. Currently in active development phase integrating 8 prison-related modules.
|
||||
|
||||
## Tech Stack
|
||||
|
||||
**Backend**: Java 17, Spring Boot 3.5.9, MyBatis-Plus, Maven multi-module, Spring Security, Swagger/OpenAPI 3
|
||||
**Frontend**: Vue 3.5.12, Vite 5.1.4, TypeScript 5.3.3, Element Plus, Pinia, Vue Router, Axios
|
||||
**Database**: MySQL 8.0+, Redis
|
||||
**Build Tools**: Maven 3.9+, pnpm 8.6+
|
||||
|
||||
## Commands
|
||||
|
||||
### Backend (Java/Maven)
|
||||
```bash
|
||||
# Build all modules (from backend directory)
|
||||
cd backend && mvn clean install -DskipTests
|
||||
|
||||
# Build specific prison module
|
||||
cd backend/yudao-module-prison && mvn clean package
|
||||
|
||||
# Run development server (from backend directory)
|
||||
cd backend/yudao-server && mvn spring-boot:run
|
||||
|
||||
# Run tests for prison module
|
||||
cd backend/yudao-module-prison && mvn test
|
||||
|
||||
# Run single test class
|
||||
mvn test -Dtest=GenderEnumTest
|
||||
```
|
||||
|
||||
### Frontend (Vue/Vite)
|
||||
```bash
|
||||
cd frontend
|
||||
|
||||
# Install dependencies
|
||||
pnpm install
|
||||
|
||||
# Dev server (local mode - uses .env.local)
|
||||
pnpm dev
|
||||
|
||||
# Dev server (development mode - uses .env.dev)
|
||||
pnpm dev-server
|
||||
|
||||
# TypeScript type checking
|
||||
pnpm ts:check
|
||||
|
||||
# Build for different environments
|
||||
pnpm build:local # Local build (uses .env.local)
|
||||
pnpm build:dev # Development build (uses .env.dev)
|
||||
pnpm build:test # Testing build (uses .env.test)
|
||||
pnpm build:prod # Production build (uses .env.prod)
|
||||
|
||||
# Linting and formatting
|
||||
pnpm lint:eslint # ESLint check and fix
|
||||
pnpm lint:format # Prettier format
|
||||
pnpm lint:style # Stylelint check and fix
|
||||
```
|
||||
|
||||
## Architecture
|
||||
|
||||
### Backend Structure
|
||||
```
|
||||
backend/
|
||||
├── yudao-server/ # Main application entry (Spring Boot)
|
||||
├── yudao-framework/ # Core framework modules
|
||||
│ ├── yudao-spring-boot-starter-web
|
||||
│ ├── yudao-spring-boot-starter-security
|
||||
│ ├── yudao-spring-boot-starter-mybatis
|
||||
│ ├── yudao-spring-boot-starter-redis
|
||||
│ └── ...
|
||||
├── yudao-module-system/ # User/permission system module
|
||||
├── yudao-module-infra/ # Infrastructure (code generation, config)
|
||||
├── yudao-module-prison/ # Prison management module (active development)
|
||||
└── yudao-module-temp/ # Temporary/template module
|
||||
```
|
||||
|
||||
**Prison Module Structure** (`yudao-module-prison/`):
|
||||
```
|
||||
src/main/java/cn/iocoder/yudao/module/prison/
|
||||
├── controller/admin/{module}/ # REST API controllers
|
||||
│ ├── {Module}Controller.java # CRUD endpoints
|
||||
│ └── vo/ # Request/Response VO objects
|
||||
│ ├── {Module}SaveReqVO.java # Create/Update request
|
||||
│ ├── {Module}PageReqVO.java # Page query request
|
||||
│ ├── {Module}RespVO.java # Response object
|
||||
│ └── ...
|
||||
├── service/{module}/ # Service layer
|
||||
│ ├── {Module}Service.java # Service interface
|
||||
│ └── impl/
|
||||
│ └── {Module}ServiceImpl.java # Service implementation
|
||||
├── dal/ # Data access layer
|
||||
│ ├── dataobject/{module}/ # MyBatis-Plus DO objects
|
||||
│ │ └── {Module}DO.java
|
||||
│ ├── mysql/{module}/ # MyBatis mappers
|
||||
│ │ └── {Module}Mapper.java
|
||||
│ └── dal/ # Data access helpers
|
||||
├── convert/{module}/ # MapStruct converters
|
||||
│ └── {Module}Convert.java
|
||||
├── enums/ # Enum definitions
|
||||
│ └── {Module}Enum.java
|
||||
└── util/ # Utility classes
|
||||
```
|
||||
|
||||
**Database Schema Convention**:
|
||||
- Table prefix: `prison_{module}`
|
||||
- Common fields: `id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`
|
||||
- Soft delete: `deleted` bit(1) field
|
||||
- Tenant support: `tenant_id` bigint field
|
||||
|
||||
### Frontend Structure
|
||||
```
|
||||
frontend/src/
|
||||
├── views/prison/{module}/ # Page components
|
||||
│ ├── index.vue # List page with table/search
|
||||
│ └── {Module}Form.vue # Create/Edit form dialog
|
||||
├── api/prison/{module}/ # API definitions
|
||||
│ └── index.ts # Axios API calls + TypeScript types
|
||||
├── components/ # Shared components
|
||||
├── store/ # Pinia stores (state management)
|
||||
├── router/ # Vue Router config
|
||||
├── hooks/ # Composable hooks
|
||||
├── types/ # TypeScript type definitions
|
||||
├── utils/ # Utility functions
|
||||
└── config/ # Configuration files
|
||||
```
|
||||
|
||||
**Frontend API Pattern** (`api/prison/{module}/index.ts`):
|
||||
```typescript
|
||||
// Interface definitions
|
||||
export interface Area {
|
||||
id: number;
|
||||
name?: string;
|
||||
code: string;
|
||||
type: number;
|
||||
// ...
|
||||
}
|
||||
|
||||
// API object with methods
|
||||
export const AreaApi = {
|
||||
getAreaPage: async (params: any) => { ... },
|
||||
getArea: async (id: number) => { ... },
|
||||
createArea: async (data: Area) => { ... },
|
||||
updateArea: async (data: Area) => { ... },
|
||||
deleteArea: async (id: number) => { ... },
|
||||
deleteAreaList: async (ids: number[]) => { ... },
|
||||
exportArea: async (params) => { ... }
|
||||
}
|
||||
```
|
||||
|
||||
**Frontend View Pattern** (`views/prison/{module}/index.vue`):
|
||||
- Uses Element Plus table with pagination
|
||||
- Search form with filters
|
||||
- CRUD operations with dialog forms
|
||||
- Export functionality
|
||||
- Batch delete support
|
||||
|
||||
### Data Flow Pattern
|
||||
```
|
||||
Frontend (Vue Component)
|
||||
↓
|
||||
API Layer (TypeScript + Axios)
|
||||
↓
|
||||
Backend Controller (REST API)
|
||||
↓
|
||||
Service Layer (Business Logic)
|
||||
↓
|
||||
Data Access (MyBatis-Plus)
|
||||
↓
|
||||
MySQL Database
|
||||
```
|
||||
|
||||
## Current Integration Status
|
||||
|
||||
**8 Modules integrated into prison module**:
|
||||
| Module | Chinese | Backend Path | Frontend Path | Status |
|
||||
|--------|---------|--------------|---------------|--------|
|
||||
| Area | 监区管理 | `controller/admin/area/` | `views/prison/area/` | ✅ Complete |
|
||||
| Cell | 监室管理 | `controller/admin/cell/` | `views/prison/cell/` | ✅ Complete |
|
||||
| Consumption | 消费记录 | `controller/admin/consumption/` | `views/prison/consumption/` | ✅ Complete |
|
||||
| Question | 问卷问题 | `controller/admin/question/` | `views/prison/question/` | ✅ Complete |
|
||||
| Questionnaire | 问卷模板 | `controller/admin/questionnaire/` | `views/prison/questionnaire/` | ✅ Complete |
|
||||
| QuestionnaireRecord | 问卷答题记录 | `controller/admin/questionnairerecord/` | `views/prison/questionnairerecord/` | ✅ Complete |
|
||||
| RiskAssessment | 危险评估 | `controller/admin/riskassessment/` | `views/prison/riskassessment/` | ✅ Complete |
|
||||
| Score | 计分考核 | `controller/admin/score/` | `views/prison/score/` | ✅ Complete |
|
||||
|
||||
**Core Features per Module**:
|
||||
- ✅ RESTful CRUD API endpoints
|
||||
- ✅ MyBatis-Plus data access layer
|
||||
- ✅ Request/Response VO objects
|
||||
- ✅ MapStruct type conversion
|
||||
- ✅ Frontend list page with pagination
|
||||
- ✅ Frontend form dialogs for create/edit
|
||||
- ✅ Export to Excel functionality
|
||||
- ✅ Batch delete operations
|
||||
- ✅ Menu permissions SQL scripts
|
||||
|
||||
## Database Configuration
|
||||
|
||||
**Development Database**:
|
||||
```
|
||||
URL: jdbc:mysql://192.168.10.130:3306/xlcp_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
|
||||
Username: (configured in application-local.yaml)
|
||||
Password: (configured in application-local.yaml)
|
||||
```
|
||||
|
||||
**SQL Scripts Location**:
|
||||
- Module tables and permissions: `backend/yudao-module-prison/src/main/resources/sql/prison_module.sql`
|
||||
- Execute this script to create all prison module tables and menu permissions
|
||||
|
||||
## Configuration Files
|
||||
|
||||
### Backend Configuration
|
||||
**Location**: `backend/yudao-server/src/main/resources/`
|
||||
|
||||
**Key Files**:
|
||||
- `application.yaml` - Base configuration
|
||||
- `application-local.yaml` - Local development (port 48080)
|
||||
- `application-dev.yaml` - Development environment
|
||||
|
||||
**Mock Settings** (application-local.yaml):
|
||||
```yaml
|
||||
yudao:
|
||||
mock:
|
||||
enable: true
|
||||
secret: emsoft
|
||||
```
|
||||
|
||||
### Frontend Configuration
|
||||
**Location**: `frontend/`
|
||||
|
||||
**Key Files**:
|
||||
- `.env.local` - Local development environment
|
||||
- `.env.dev` - Development environment
|
||||
- `.env.test` - Testing environment
|
||||
- `.env.prod` - Production environment
|
||||
|
||||
**Local Environment** (.env.local):
|
||||
```
|
||||
VITE_BASE_URL='http://localhost:48080'
|
||||
VITE_API_URL='/admin-api'
|
||||
VITE_DEV=true
|
||||
```
|
||||
|
||||
## Development Workflow
|
||||
|
||||
### Adding a New Module
|
||||
1. **Backend**:
|
||||
- Create package: `controller/admin/{module}/`, `service/{module}/`, `dal/dataobject/{module}/`, etc.
|
||||
- Define DO in `dal/dataobject/{module}/{Module}DO.java`
|
||||
- Create Mapper in `dal/mysql/{module}/{Module}Mapper.java`
|
||||
- Implement Service in `service/{module}/impl/{Module}ServiceImpl.java`
|
||||
- Create Controller in `controller/admin/{module}/{Module}Controller.java`
|
||||
- Define VOs in `controller/admin/{module}/vo/`
|
||||
- Add MapStruct converter in `convert/{module}/{Module}Convert.java`
|
||||
- Add enum if needed in `enums/`
|
||||
|
||||
2. **Frontend**:
|
||||
- Create API: `api/prison/{module}/index.ts`
|
||||
- Create views: `views/prison/{module}/index.vue` and `{Module}Form.vue`
|
||||
- Define TypeScript interfaces
|
||||
- Implement CRUD operations
|
||||
|
||||
3. **Database**:
|
||||
- Add table creation SQL to `backend/yudao-module-prison/src/main/resources/sql/prison_module.sql`
|
||||
- Add menu permission SQL
|
||||
|
||||
### Testing a Module
|
||||
**Backend**:
|
||||
```bash
|
||||
# Test all prison module
|
||||
cd backend/yudao-module-prison && mvn test
|
||||
|
||||
# Test specific class
|
||||
mvn test -Dtest=PrisonAreaControllerTest
|
||||
```
|
||||
|
||||
**Frontend**:
|
||||
```bash
|
||||
# Type check only
|
||||
cd frontend && pnpm ts:check
|
||||
|
||||
# Dev server with hot reload
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
## Common Patterns
|
||||
|
||||
### Backend Controller Pattern
|
||||
```java
|
||||
@RestController
|
||||
@RequestMapping("/prison/{module}")
|
||||
@Tag(name = "管理后台 - {中文名称}")
|
||||
public class {Module}Controller {
|
||||
|
||||
@Resource
|
||||
private {Module}Service {module}Service;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建{中文名称}")
|
||||
@PreAuthorize("@ss.hasPermission('prison:{module}:create')")
|
||||
public CommonResult<Long> create(@Valid @RequestBody {Module}SaveReqVO vo) {
|
||||
return success({module}Service.create(vo));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新{中文名称}")
|
||||
@PreAuthorize("@ss.hasPermission('prison:{module}:update')")
|
||||
public CommonResult<Boolean> update(@Valid @RequestBody {Module}SaveReqVO vo) {
|
||||
return success({module}Service.update(vo));
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除{中文名称}")
|
||||
@PreAuthorize("@ss.hasPermission('prison:{module}:delete')")
|
||||
public CommonResult<Boolean> delete(@RequestParam("id") Long id) {
|
||||
return success({module}Service.delete(id));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "分页查询{中文名称}")
|
||||
@PreAuthorize("@ss.hasPermission('prison:{module}:query')")
|
||||
public CommonResult<PageResult<{Module}RespVO>> page(@Valid {Module}PageReqVO vo) {
|
||||
return success({module}Service.page(vo));
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "查询{中文名称}详情")
|
||||
@PreAuthorize("@ss.hasPermission('prison:{module}:query')")
|
||||
public CommonResult<{Module}RespVO> get(@RequestParam("id") Long id) {
|
||||
return success({module}Service.get(id));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出{中文名称} Excel")
|
||||
@PreAuthorize("@ss.hasPermission('prison:{module}:export')")
|
||||
public void exportExcel(@Valid {Module}PageReqVO vo, HttpServletResponse response) {
|
||||
{module}Service.exportExcel(vo, response);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Service Layer Pattern
|
||||
```java
|
||||
public interface {Module}Service {
|
||||
Long create({Module}SaveReqVO vo);
|
||||
Boolean update({Module}SaveReqVO vo);
|
||||
Boolean delete(Long id);
|
||||
{Module}RespVO get(Long id);
|
||||
PageResult<{Module}RespVO> page({Module}PageReqVO vo);
|
||||
void exportExcel({Module}PageReqVO vo, HttpServletResponse response);
|
||||
}
|
||||
```
|
||||
|
||||
### Frontend API Pattern
|
||||
```typescript
|
||||
export interface {Module} {
|
||||
id: number;
|
||||
// ... other fields
|
||||
}
|
||||
|
||||
export const {Module}Api = {
|
||||
getPage: async (params: any) => {
|
||||
return await request.get({ url: `/{module}/page`, params })
|
||||
},
|
||||
get: async (id: number) => {
|
||||
return await request.get({ url: `/{module}/get?id=${id}` })
|
||||
},
|
||||
create: async (data: {Module}) => {
|
||||
return await request.post({ url: `/{module}/create`, data })
|
||||
},
|
||||
update: async (data: {Module}) => {
|
||||
return await request.put({ url: `/{module}/update`, data })
|
||||
},
|
||||
delete: async (id: number) => {
|
||||
return await request.delete({ url: `/{module}/delete?id=${id}` })
|
||||
},
|
||||
deleteList: async (ids: number[]) => {
|
||||
return await request.delete({ url: `/{module}/delete-list?ids=${ids.join(',')}` })
|
||||
},
|
||||
export: async (params) => {
|
||||
return await request.download({ url: `/{module}/export-excel`, params })
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Important Notes
|
||||
|
||||
- **Package Prefix**: All prison module classes use `cn.iocoder.yudao.module.prison`
|
||||
- **API Base Path**: `/admin-api/prison/{module}`
|
||||
- **Permission Codes**: Follow pattern `prison:{module}:{action}` (e.g., `prison:area:create`)
|
||||
- **Frontend Paths**: Use `views/prison/` and `api/prison/` directories
|
||||
- **Database Tables**: Use `prison_` prefix and soft delete (`deleted` field)
|
||||
- **Error Codes**: Defined in `ErrorCodeConstants.java` (shared across modules)
|
||||
- **Enum Types**: Defined in `enums/` directory with `Enum` suffix
|
||||
- **VO Naming**: `SaveReqVO`, `PageReqVO`, `RespVO` suffixes
|
||||
- **DO Naming**: `{Module}DO` with table mapping via `@TableName`
|
||||
- **Mapper Naming**: `{Module}Mapper` extending `BaseMapper<{Module}DO>`
|
||||
- **Service Impl**: Located in `service/{module}/impl/` directory
|
||||
|
||||
## Code Generation
|
||||
|
||||
**Source**: `codegen/` directory contains template files for generating new modules
|
||||
**Usage**: Copy and adapt these templates when adding new prison modules
|
||||
|
||||
## Build & Deployment
|
||||
|
||||
**Backend JAR**: `backend/yudao-server/target/yudao-server-{version}.jar`
|
||||
**Frontend Dist**: `frontend/dist/` (static files for nginx)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
**Common Issues**:
|
||||
1. **Maven dependency issues**: Run `mvn clean install -U` to force update
|
||||
2. **Frontend type errors**: Run `pnpm ts:check` to identify issues
|
||||
3. **Database connection**: Verify MySQL is running and credentials in `application-local.yaml`
|
||||
4. **Mock mode**: Check `yudao.mock.enable` setting in configuration
|
||||
5. **Port conflicts**: Default backend port is 48080
|
||||
|
||||
**Debug Mode**:
|
||||
- Backend: Add `--debug` to mvn command for remote debugging on port 5005
|
||||
- Frontend: Browser dev tools + Vue DevTools browser extension
|
||||
1099
XL监狱综合管理平台-监区犯人管理改造设计方案.md
Normal file
1099
XL监狱综合管理平台-监区犯人管理改造设计方案.md
Normal file
File diff suppressed because it is too large
Load Diff
2
backend
2
backend
@ -1 +1 @@
|
||||
Subproject commit 8077990e5d64cfa144519a26d69ba56d9aae7130
|
||||
Subproject commit 5f9bcfc9b2a1765d775dafa990e23f0f8c964747
|
||||
BIN
detail.png
Normal file
BIN
detail.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 210 KiB |
2
frontend
2
frontend
@ -1 +1 @@
|
||||
Subproject commit d4cb996085114345aca929c551801d2b74328dde
|
||||
Subproject commit 1ebf700cf2f689ee629596439b3477cf37120514
|
||||
BIN
prisoner_list.png
Normal file
BIN
prisoner_list.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 382 KiB |
885
requirements/实施文档-01-监管看板.md
Normal file
885
requirements/实施文档-01-监管看板.md
Normal file
@ -0,0 +1,885 @@
|
||||
# 实施文档 - 监管看板
|
||||
|
||||
> 模块名称:监管看板
|
||||
> 关联需求:需求-01-监管看板.md
|
||||
> 创建日期:2026-01-14
|
||||
|
||||
---
|
||||
|
||||
## 一、实施概览
|
||||
|
||||
### 1.1 功能清单
|
||||
|
||||
| 序号 | 功能模块 | 后端 | 前端 | 优先级 |
|
||||
|------|---------|------|------|--------|
|
||||
| 1 | 核心指标卡片 | ✅ | ✅ | P0 |
|
||||
| 2 | 年龄分布饼图 | ✅ | ✅ | P0 |
|
||||
| 3 | 刑期分布饼图 | ✅ | ✅ | P0 |
|
||||
| 4 | 文化程度饼图 | ✅ | ✅ | P0 |
|
||||
| 5 | 省份分布地图 | ✅ | ✅ | P0 |
|
||||
| 6 | 数据脱敏组件 | ✅ | ✅ | P0 |
|
||||
|
||||
### 1.2 预估工时
|
||||
|
||||
| 阶段 | 后端 | 前端 | 合计 |
|
||||
|------|------|------|------|
|
||||
| 数据库 | 0.5h | - | 0.5h |
|
||||
| 接口开发 | 4h | - | 4h |
|
||||
| 前端页面 | - | 6h | 6h |
|
||||
| 联调测试 | 2h | 2h | 4h |
|
||||
| **总计** | **6.5h** | **8h** | **14.5h** |
|
||||
|
||||
---
|
||||
|
||||
## 二、数据库实施
|
||||
|
||||
> **说明**:使用现有表进行统计,无需新增表
|
||||
> - "本月已移交" 使用现有的 `prison_prisoner_area_log` 表(调监记录)
|
||||
> - "本月已释放" 使用现有的 `prison_prisoner_release` 表
|
||||
|
||||
### 2.1 新增索引
|
||||
|
||||
```sql
|
||||
-- 罪犯表:年龄计算需要用到 birthday 字段
|
||||
ALTER TABLE prison_prisoner ADD INDEX idx_birthday (birthday);
|
||||
|
||||
-- 释放记录表:按月统计需要
|
||||
ALTER TABLE prison_prisoner_release ADD INDEX idx_actual_release_date (actual_release_date);
|
||||
|
||||
-- 监区变动记录表:按月统计需要
|
||||
ALTER TABLE prison_prisoner_area_log ADD INDEX idx_operate_time_change_type (operate_time, change_type);
|
||||
```
|
||||
|
||||
### 2.3 菜单权限 SQL
|
||||
|
||||
```sql
|
||||
-- 监管看板菜单
|
||||
INSERT INTO system_menu (name, permission, type, sort, path, icon, component, parent_id)
|
||||
VALUES ('监管看板', '', 2, 1, 'dashboard', 'ep:data-board', 'prison/dashboard/index',
|
||||
(SELECT id FROM system_menu WHERE name = '监狱管理' LIMIT 1));
|
||||
|
||||
-- 获取刚插入的菜单ID
|
||||
SET @dashboard_menu_id = LAST_INSERT_ID();
|
||||
|
||||
-- 监管看板查询权限
|
||||
INSERT INTO system_menu (name, permission, type, sort, parent_id)
|
||||
VALUES ('监管看板查询', 'prison:dashboard:query', 3, 1, @dashboard_menu_id);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 三、后端实施
|
||||
|
||||
### 3.1 文件结构
|
||||
|
||||
```
|
||||
backend/yudao-module-prison/src/main/java/cn/iocoder/yudao/module/prison/
|
||||
├── controller/admin/dashboard/
|
||||
│ ├── PrisonDashboardController.java # 控制器
|
||||
│ └── vo/
|
||||
│ ├── DashboardStatisticsVO.java # 看板统计响应
|
||||
│ ├── DashboardCardVO.java # 卡片数据响应
|
||||
│ ├── ChartDataVO.java # 图表数据项
|
||||
│ └── ProvinceChartVO.java # 省份数据项
|
||||
├── service/dashboard/
|
||||
│ ├── PrisonDashboardService.java # 服务接口
|
||||
│ └── impl/
|
||||
│ └── PrisonDashboardServiceImpl.java # 服务实现
|
||||
├── dal/mysql/dashboard/
|
||||
│ └── PrisonDashboardMapper.java # Mapper接口
|
||||
├── dal/mysql/transfer/
|
||||
│ └── PrisonTransferMapper.java # 移交记录Mapper(新增)
|
||||
└── util/
|
||||
└── DataMaskUtils.java # 数据脱敏工具类(新增)
|
||||
```
|
||||
|
||||
### 3.2 VO 定义
|
||||
|
||||
#### 3.2.1 DashboardStatisticsVO.java
|
||||
|
||||
```java
|
||||
package cn.iocoder.yudao.module.prison.controller.admin.dashboard.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Schema(description = "管理后台 - 监管看板统计 Response VO")
|
||||
public class DashboardStatisticsVO {
|
||||
|
||||
// 核心指标卡片
|
||||
@Schema(description = "在册罪犯总数")
|
||||
private Integer totalPrisoners;
|
||||
|
||||
@Schema(description = "本月已释放人数")
|
||||
private Integer monthlyReleased;
|
||||
|
||||
@Schema(description = "本月已移交人数")
|
||||
private Integer monthlyTransferred;
|
||||
|
||||
@Schema(description = "当前就医人数")
|
||||
private Integer hospitalCount;
|
||||
|
||||
@Schema(description = "当前禁闭人数")
|
||||
private Integer solitaryCount;
|
||||
|
||||
// 图表数据
|
||||
@Schema(description = "年龄分布")
|
||||
private List<ChartDataVO> ageDistribution;
|
||||
|
||||
@Schema(description = "刑期分布")
|
||||
private List<ChartDataVO> sentenceDistribution;
|
||||
|
||||
@Schema(description = "文化程度分布")
|
||||
private List<ChartDataVO> educationDistribution;
|
||||
|
||||
@Schema(description = "省份分布")
|
||||
private List<ProvinceChartVO> provinceDistribution;
|
||||
|
||||
@Schema(description = "统计时间")
|
||||
private LocalDateTime statisticsTime;
|
||||
}
|
||||
```
|
||||
|
||||
#### 3.2.2 ChartDataVO.java
|
||||
|
||||
```java
|
||||
package cn.iocoder.yudao.module.prison.controller.admin.dashboard.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Schema(description = "图表数据项")
|
||||
public class ChartDataVO {
|
||||
|
||||
@Schema(description = "分组名称", example = "18-30岁")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "数量", example = "100")
|
||||
private Integer value;
|
||||
|
||||
@Schema(description = "占比", example = "28.5")
|
||||
private Double percentage;
|
||||
}
|
||||
```
|
||||
|
||||
#### 3.2.3 ProvinceChartVO.java
|
||||
|
||||
```java
|
||||
package cn.iocoder.yudao.module.prison.controller.admin.dashboard.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Schema(description = "省份图表数据")
|
||||
public class ProvinceChartVO {
|
||||
|
||||
@Schema(description = "省份名称", example = "河南省")
|
||||
private String province;
|
||||
|
||||
@Schema(description = "省份编码", example = "41")
|
||||
private Integer provinceCode;
|
||||
|
||||
@Schema(description = "人数", example = "156")
|
||||
private Integer count;
|
||||
}
|
||||
```
|
||||
|
||||
### 3.3 Mapper 接口
|
||||
|
||||
#### 3.3.1 PrisonDashboardMapper.java
|
||||
|
||||
```java
|
||||
package cn.iocoder.yudao.module.prison.dal.mysql.dashboard;
|
||||
|
||||
import cn.iocoder.yudao.module.prison.controller.admin.dashboard.vo.ChartDataVO;
|
||||
import cn.iocoder.yudao.module.prison.controller.admin.dashboard.vo.DashboardCardVO;
|
||||
import cn.iocoder.yudao.module.prison.controller.admin.dashboard.vo.ProvinceChartVO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface PrisonDashboardMapper {
|
||||
|
||||
/**
|
||||
* 查询核心指标卡片数据
|
||||
*/
|
||||
@Select("""
|
||||
SELECT
|
||||
COALESCE(SUM(CASE WHEN p.status = 1 THEN 1 ELSE 0 END), 0) AS total_prisoners,
|
||||
COALESCE(SUM(CASE WHEN pa.type = 5 THEN 1 ELSE 0 END), 0) AS hospital_count,
|
||||
COALESCE(SUM(CASE WHEN pa.type = 6 THEN 1 ELSE 0 END), 0) AS solitary_count
|
||||
FROM prison_prisoner p
|
||||
LEFT JOIN prison_area pa ON p.prison_area_id = pa.id
|
||||
WHERE p.deleted = 0
|
||||
""")
|
||||
DashboardCardVO selectDashboardCards();
|
||||
|
||||
/**
|
||||
* 查询本月释放人数
|
||||
*/
|
||||
@Select("""
|
||||
SELECT COUNT(*) FROM prison_prisoner_release
|
||||
WHERE deleted = 0
|
||||
AND DATE_FORMAT(actual_release_date, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m')
|
||||
AND status = 1
|
||||
""")
|
||||
Integer selectMonthlyReleased();
|
||||
|
||||
/**
|
||||
* 查询本月调监次数(移交)
|
||||
* change_type: 1-调入 2-调出
|
||||
* 使用现有的 prison_prisoner_area_log 表
|
||||
*/
|
||||
@Select("""
|
||||
SELECT COUNT(*) FROM prison_prisoner_area_log
|
||||
WHERE deleted = 0
|
||||
AND change_type IN (1, 2)
|
||||
AND DATE_FORMAT(operate_time, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m')
|
||||
""")
|
||||
Integer selectMonthlyTransferred();
|
||||
|
||||
/**
|
||||
* 查询年龄分布
|
||||
*/
|
||||
@Select("""
|
||||
SELECT
|
||||
CASE
|
||||
WHEN TIMESTAMPDIFF(YEAR, p.birthday, CURDATE()) < 18 THEN '未成年(≤17)'
|
||||
WHEN TIMESTAMPDIFF(YEAR, p.birthday, CURDATE()) BETWEEN 18 AND 30 THEN '青年(18-30)'
|
||||
WHEN TIMESTAMPDIFF(YEAR, p.birthday, CURDATE()) BETWEEN 31 AND 50 THEN '中年(31-50)'
|
||||
WHEN TIMESTAMPDIFF(YEAR, p.birthday, CURDATE()) BETWEEN 51 AND 60 THEN '中老年(51-60)'
|
||||
ELSE '老龄(60+)'
|
||||
END AS name,
|
||||
COUNT(*) AS value
|
||||
FROM prison_prisoner p
|
||||
WHERE p.status = 1 AND p.deleted = 0
|
||||
GROUP BY name
|
||||
""")
|
||||
List<ChartDataVO> selectAgeDistribution();
|
||||
|
||||
/**
|
||||
* 查询刑期分布
|
||||
*/
|
||||
@Select("""
|
||||
SELECT
|
||||
CASE
|
||||
WHEN p.death_sentence_reprieve = 1 THEN '死缓'
|
||||
WHEN p.life_imprisonment = 1 THEN '无期'
|
||||
WHEN (COALESCE(p.sentence_years, 0) * 12 + COALESCE(p.sentence_months, 0)) <= 36 THEN '短刑(≤3年)'
|
||||
WHEN (COALESCE(p.sentence_years, 0) * 12 + COALESCE(p.sentence_months, 0)) BETWEEN 37 AND 120 THEN '中刑(3-10年)'
|
||||
ELSE '长刑(10年以上)'
|
||||
END AS name,
|
||||
COUNT(*) AS value
|
||||
FROM prison_prisoner p
|
||||
WHERE p.status = 1 AND p.deleted = 0
|
||||
GROUP BY name
|
||||
""")
|
||||
List<ChartDataVO> selectSentenceDistribution();
|
||||
|
||||
/**
|
||||
* 查询文化程度分布
|
||||
*/
|
||||
@Select("""
|
||||
SELECT
|
||||
CASE p.education
|
||||
WHEN 1 THEN '文盲'
|
||||
WHEN 2 THEN '小学'
|
||||
WHEN 3 THEN '初中'
|
||||
WHEN 4 THEN '高中'
|
||||
WHEN 5 THEN '中专'
|
||||
WHEN 6 THEN '大专'
|
||||
WHEN 7 THEN '本科'
|
||||
WHEN 8 THEN '研究生及以上'
|
||||
ELSE '未知'
|
||||
END AS name,
|
||||
COUNT(*) AS value
|
||||
FROM prison_prisoner p
|
||||
WHERE p.status = 1 AND p.deleted = 0
|
||||
GROUP BY p.education
|
||||
""")
|
||||
List<ChartDataVO> selectEducationDistribution();
|
||||
|
||||
/**
|
||||
* 查询省份分布
|
||||
*/
|
||||
@Select("""
|
||||
SELECT
|
||||
LEFT(p.native_place, 2) AS province_code,
|
||||
COUNT(*) AS count
|
||||
FROM prison_prisoner p
|
||||
WHERE p.status = 1 AND p.deleted = 0 AND p.native_place IS NOT NULL
|
||||
GROUP BY LEFT(p.native_place, 2)
|
||||
""")
|
||||
List<ProvinceChartVO> selectProvinceDistributionRaw();
|
||||
}
|
||||
```
|
||||
|
||||
### 3.4 Service 实现
|
||||
|
||||
```java
|
||||
package cn.iocoder.yudao.module.prison.service.dashboard.impl;
|
||||
|
||||
import cn.iocoder.yudao.module.prison.controller.admin.dashboard.vo.*;
|
||||
import cn.iocoder.yudao.module.prison.dal.mysql.dashboard.PrisonDashboardMapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class PrisonDashboardServiceImpl implements PrisonDashboardService {
|
||||
|
||||
private final PrisonDashboardMapper dashboardMapper;
|
||||
|
||||
private static final String DASHBOARD_CACHE_KEY = "prison:dashboard:stats:";
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "dashboard", key = "#root.target.getCacheKey()", unless = "#result == null")
|
||||
public DashboardStatisticsVO getDashboardStatistics() {
|
||||
DashboardStatisticsVO vo = new DashboardStatisticsVO();
|
||||
vo.setStatisticsTime(LocalDateTime.now());
|
||||
|
||||
// 核心指标卡片
|
||||
DashboardCardVO cards = dashboardMapper.selectDashboardCards();
|
||||
vo.setTotalPrisoners(cards.getTotalPrisoners());
|
||||
vo.setHospitalCount(cards.getHospitalCount());
|
||||
vo.setSolitaryCount(cards.getSolitaryCount());
|
||||
vo.setMonthlyReleased(dashboardMapper.selectMonthlyReleased());
|
||||
vo.setMonthlyTransferred(dashboardMapper.selectMonthlyTransferred());
|
||||
|
||||
// 图表数据
|
||||
vo.setAgeDistribution(dashboardMapper.selectAgeDistribution());
|
||||
vo.setSentenceDistribution(dashboardMapper.selectSentenceDistribution());
|
||||
vo.setEducationDistribution(dashboardMapper.selectEducationDistribution());
|
||||
vo.setProvinceDistribution(convertProvinceData(dashboardMapper.selectProvinceDistributionRaw()));
|
||||
|
||||
return vo;
|
||||
}
|
||||
|
||||
private List<ProvinceChartVO> convertProvinceData(List<ProvinceChartVO> rawData) {
|
||||
// 省份编码转省份名称的映射逻辑
|
||||
return rawData.stream()
|
||||
.map(item -> ProvinceChartVO.builder()
|
||||
.province(ProvinceCodeMapper.getName(item.getProvinceCode()))
|
||||
.provinceCode(item.getProvinceCode())
|
||||
.count(item.getCount())
|
||||
.build())
|
||||
.toList();
|
||||
}
|
||||
|
||||
public String getCacheKey() {
|
||||
return DASHBOARD_CACHE_KEY + "all";
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3.5 Controller
|
||||
|
||||
```java
|
||||
package cn.iocoder.yudao.module.prison.controller.admin.dashboard;
|
||||
|
||||
import cn.iocoder.yudao.module.prison.controller.admin.dashboard.vo.DashboardStatisticsVO;
|
||||
import cn.iocoder.yudao.module.prison.service.dashboard.PrisonDashboardService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/prison/dashboard")
|
||||
@Tag(name = "管理后台 - 监管看板")
|
||||
@RequiredArgsConstructor
|
||||
public class PrisonDashboardController {
|
||||
|
||||
private final PrisonDashboardService dashboardService;
|
||||
|
||||
@GetMapping("/statistics")
|
||||
@Operation(summary = "获取看板统计数据")
|
||||
@PreAuthorize("@ss.hasPermission('prison:dashboard:query')")
|
||||
public DashboardStatisticsVO getStatistics() {
|
||||
return dashboardService.getDashboardStatistics();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3.6 数据脱敏工具
|
||||
|
||||
```java
|
||||
package cn.iocoder.yudao.module.prison.util;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
|
||||
public class DataMaskUtils {
|
||||
|
||||
/**
|
||||
* 身份证号脱敏:110101199001011234 -> 110***********1234
|
||||
*/
|
||||
public static String maskIdCard(String idCard) {
|
||||
if (StrUtil.isBlank(idCard) || idCard.length() < 7) {
|
||||
return idCard;
|
||||
}
|
||||
return idCard.substring(0, 3) + "*".repeat(idCard.length() - 7) + idCard.substring(idCard.length() - 4);
|
||||
}
|
||||
|
||||
/**
|
||||
* 手机号脱敏:13812345678 -> 138****5678
|
||||
*/
|
||||
public static String maskPhone(String phone) {
|
||||
if (StrUtil.isBlank(phone) || phone.length() < 7) {
|
||||
return phone;
|
||||
}
|
||||
return phone.substring(0, 3) + "****" + phone.substring(phone.length() - 4);
|
||||
}
|
||||
|
||||
/**
|
||||
* 姓名脱敏:张三丰 -> 张**
|
||||
*/
|
||||
public static String maskName(String name) {
|
||||
if (StrUtil.isBlank(name) || name.length() == 1) {
|
||||
return name;
|
||||
}
|
||||
return name.charAt(0) + "*".repeat(name.length() - 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 地址脱敏:北京市海淀区*** -> 北京市海淀区***
|
||||
*/
|
||||
public static String maskAddress(String address) {
|
||||
if (StrUtil.isBlank(address)) {
|
||||
return address;
|
||||
}
|
||||
int lastSeparator = Math.max(address.lastIndexOf('区'), address.lastIndexOf('县'));
|
||||
if (lastSeparator > 0 && lastSeparator < address.length() - 1) {
|
||||
return address.substring(0, lastSeparator + 1) + "***";
|
||||
}
|
||||
return address;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、前端实施
|
||||
|
||||
### 4.1 文件结构
|
||||
|
||||
```
|
||||
frontend/src/
|
||||
├── views/prison/dashboard/
|
||||
│ ├── index.vue # 主页面组件
|
||||
│ └── components/
|
||||
│ ├── StatCard.vue # 指标卡片组件
|
||||
│ ├── AgePieChart.vue # 年龄分布饼图
|
||||
│ ├── SentencePieChart.vue # 刑期分布饼图
|
||||
│ ├── EducationPieChart.vue # 文化程度饼图
|
||||
│ └── ChinaMap.vue # 中国地图热力图
|
||||
├── api/prison/dashboard/
|
||||
│ └── index.ts # API 接口定义
|
||||
├── components/DataMaskingCell/
|
||||
│ ├── index.vue # 脱敏单元格组件
|
||||
│ └── index.ts # 组件类型定义
|
||||
└── plugins/echarts.ts # ECharts 地图注册
|
||||
```
|
||||
|
||||
### 4.2 API 定义
|
||||
|
||||
```typescript
|
||||
// frontend/src/api/prison/dashboard/index.ts
|
||||
|
||||
/** 看板统计响应 */
|
||||
export interface DashboardStatisticsVO {
|
||||
totalPrisoners: number;
|
||||
monthlyReleased: number;
|
||||
monthlyTransferred: number;
|
||||
hospitalCount: number;
|
||||
solitaryCount: number;
|
||||
ageDistribution: ChartDataVO[];
|
||||
sentenceDistribution: ChartDataVO[];
|
||||
educationDistribution: ChartDataVO[];
|
||||
provinceDistribution: ProvinceChartVO[];
|
||||
statisticsTime: string;
|
||||
}
|
||||
|
||||
/** 图表数据项 */
|
||||
export interface ChartDataVO {
|
||||
name: string;
|
||||
value: number;
|
||||
percentage?: number;
|
||||
}
|
||||
|
||||
/** 省份数据 */
|
||||
export interface ProvinceChartVO {
|
||||
province: string;
|
||||
provinceCode: number;
|
||||
count: number;
|
||||
}
|
||||
|
||||
export const DashboardApi = {
|
||||
getStatistics: async (): Promise<DashboardStatisticsVO> => {
|
||||
return await request.get({ url: '/prison/dashboard/statistics' })
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4.3 指标卡片组件
|
||||
|
||||
```vue
|
||||
<!-- frontend/src/views/prison/dashboard/components/StatCard.vue -->
|
||||
<template>
|
||||
<el-card shadow="hover" class="stat-card">
|
||||
<div class="stat-content">
|
||||
<div class="stat-info">
|
||||
<div class="stat-value" v-loading="loading">
|
||||
<el-skeleton v-if="loading" animated :rows="0" />
|
||||
<template v-else>{{ formatNumber(value) }}</template>
|
||||
</div>
|
||||
<div class="stat-title">{{ title }}</div>
|
||||
</div>
|
||||
<div class="stat-icon" :class="iconClass">
|
||||
<Icon :icon="icon" :size="36" />
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
interface Props {
|
||||
title: string
|
||||
value: number
|
||||
icon: string
|
||||
iconClass?: string
|
||||
loading?: boolean
|
||||
}
|
||||
|
||||
const props = defineProps<Props>()
|
||||
|
||||
const formatNumber = (num: number) => {
|
||||
return new Intl.NumberFormat('zh-CN').format(num)
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.stat-card {
|
||||
height: 100%;
|
||||
|
||||
.stat-content {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.stat-value {
|
||||
font-size: 28px;
|
||||
font-weight: bold;
|
||||
color: #303133;
|
||||
}
|
||||
|
||||
.stat-title {
|
||||
font-size: 14px;
|
||||
color: #909399;
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.stat-icon {
|
||||
width: 56px;
|
||||
height: 56px;
|
||||
border-radius: 8px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
&.primary { background: #ecf5ff; color: #409eff; }
|
||||
&.success { background: #f0f9eb; color: #67c23a; }
|
||||
&.warning { background: #fdf6ec; color: #e6a23c; }
|
||||
&.danger { background: #fef0f0; color: #f56c6c; }
|
||||
}
|
||||
}
|
||||
</style>
|
||||
```
|
||||
|
||||
### 4.4 主页面
|
||||
|
||||
```vue
|
||||
<!-- frontend/src/views/prison/dashboard/index.vue -->
|
||||
<template>
|
||||
<div class="dashboard-container">
|
||||
<el-row :gutter="16" class="mb-16px">
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="24/5" v-for="item in statCards" :key="item.title">
|
||||
<StatCard v-bind="item" :loading="loading" :value="item.value" />
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="16" class="mb-16px">
|
||||
<el-col :xs="24" :sm="24" :md="8">
|
||||
<el-card>
|
||||
<template #header>年龄分布</template>
|
||||
<BasePieChart :options="ageChartOptions" :loading="loading" />
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="8">
|
||||
<el-card>
|
||||
<template #header>刑期分布</template>
|
||||
<BasePieChart :options="sentenceChartOptions" :loading="loading" />
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="24" :md="8">
|
||||
<el-card>
|
||||
<template #header>文化程度</template>
|
||||
<BasePieChart :options="educationChartOptions" :loading="loading" />
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="16">
|
||||
<el-col :span="24">
|
||||
<el-card>
|
||||
<template #header>籍贯分布</template>
|
||||
<ChinaMap :data="provinceData" :loading="loading" />
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, computed, onMounted } from 'vue'
|
||||
import { StatCard } from './components'
|
||||
import { DashboardApi, type DashboardStatisticsVO } from '@/api/prison/dashboard'
|
||||
import BasePieChart from '@/components/Echart/src/BasePieChart.vue'
|
||||
import ChinaMap from './components/ChinaMap.vue'
|
||||
|
||||
const loading = ref(true)
|
||||
const data = ref<DashboardStatisticsVO | null>(null)
|
||||
|
||||
const statCards = computed(() => [
|
||||
{ title: '在册罪犯', value: data.value?.totalPrisoners || 0, icon: 'ep:user', iconClass: 'primary' },
|
||||
{ title: '本月释放', value: data.value?.monthlyReleased || 0, icon: 'ep:select', iconClass: 'success' },
|
||||
{ title: '本月移交', value: data.value?.monthlyTransferred || 0, icon: 'ep:rank-list', iconClass: 'warning' },
|
||||
{ title: '当前就医', value: data.value?.hospitalCount || 0, icon: 'ep:first-aid-kit', iconClass: 'danger' },
|
||||
{ title: '当前禁闭', value: data.value?.solitaryCount || 0, icon: 'ep:lock', iconClass: 'danger' }
|
||||
])
|
||||
|
||||
const ageChartOptions = computed(() => ({
|
||||
tooltip: { trigger: 'item', formatter: '{b}: {c} ({d}%)' },
|
||||
legend: { orient: 'vertical', right: 10, top: 'center' },
|
||||
series: [{
|
||||
type: 'pie',
|
||||
radius: ['40%', '70%'],
|
||||
data: data.value?.ageDistribution || []
|
||||
}]
|
||||
}))
|
||||
|
||||
const sentenceChartOptions = computed(() => ({
|
||||
tooltip: { trigger: 'item', formatter: '{b}: {c} ({d}%)' },
|
||||
legend: { orient: 'vertical', right: 10, top: 'center' },
|
||||
series: [{
|
||||
type: 'pie',
|
||||
radius: ['40%', '70%'],
|
||||
data: data.value?.sentenceDistribution || []
|
||||
}]
|
||||
}))
|
||||
|
||||
const educationChartOptions = computed(() => ({
|
||||
tooltip: { trigger: 'item', formatter: '{b}: {c} ({d}%)' },
|
||||
legend: { orient: 'vertical', right: 10, top: 'center' },
|
||||
series: [{
|
||||
type: 'pie',
|
||||
radius: ['40%', '70%'],
|
||||
data: data.value?.educationDistribution || []
|
||||
}]
|
||||
}))
|
||||
|
||||
const provinceData = computed(() => data.value?.provinceDistribution || [])
|
||||
|
||||
const fetchData = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
data.value = await DashboardApi.getStatistics()
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(fetchData)
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.dashboard-container {
|
||||
padding: 16px;
|
||||
}
|
||||
.mb-16px { margin-bottom: 16px; }
|
||||
</style>
|
||||
```
|
||||
|
||||
### 4.5 地图资源配置
|
||||
|
||||
```typescript
|
||||
// frontend/src/plugins/echarts.ts
|
||||
import * as echarts from 'echarts'
|
||||
import chinaJson from 'echarts/map/json/china.json'
|
||||
|
||||
// 注册中国地图
|
||||
echarts.registerMap('china', chinaJson)
|
||||
|
||||
export { echarts }
|
||||
```
|
||||
|
||||
> **注意**:需要下载中国地图 JSON 文件到 `frontend/public/china.json`
|
||||
> 下载地址:https://echarts.apache.org/examples/zh/data/asset/geo/china.json
|
||||
|
||||
### 4.6 路由配置
|
||||
|
||||
```typescript
|
||||
// frontend/src/router/routes/modules/prison.ts
|
||||
|
||||
{
|
||||
path: 'dashboard',
|
||||
name: 'PrisonDashboard',
|
||||
component: () => import('@/views/prison/dashboard/index.vue'),
|
||||
meta: {
|
||||
title: '监管看板',
|
||||
icon: 'ep:data-board',
|
||||
permission: 'prison:dashboard:query'
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 五、任务分解
|
||||
|
||||
### 5.1 后端任务
|
||||
|
||||
> **说明**:使用现有表,无需新建移交记录表
|
||||
|
||||
| 序号 | 任务 | 负责人 | 预计工时 | 状态 |
|
||||
|------|------|--------|---------|------|
|
||||
| 1 | 新增数据库索引 SQL(3个索引) | | 0.5h | 待开发 |
|
||||
| 2 | 菜单权限 SQL | | 0.5h | 待开发 |
|
||||
| 3 | VO 类开发(4个文件) | | 1h | 待开发 |
|
||||
| 4 | PrisonDashboardMapper 接口 | | 1h | 待开发 |
|
||||
| 5 | PrisonDashboardService 接口和实现 | | 1h | 待开发 |
|
||||
| 6 | PrisonDashboardController | | 0.5h | 待开发 |
|
||||
| 7 | DataMaskUtils 工具类 | | 0.5h | 待开发 |
|
||||
| 8 | 接口测试 | | 1h | 待开发 |
|
||||
|
||||
### 5.2 前端任务
|
||||
|
||||
| 序号 | 任务 | 负责人 | 预计工时 | 状态 |
|
||||
|------|------|--------|---------|------|
|
||||
| 1 | 下载并配置中国地图 JSON | | 0.5h | 待开发 |
|
||||
| 2 | API 接口定义 | | 0.5h | 待开发 |
|
||||
| 3 | StatCard 组件 | | 1h | 待开发 |
|
||||
| 4 | ChinaMap 组件 | | 2h | 待开发 |
|
||||
| 5 | 主页面开发 | | 2h | 待开发 |
|
||||
| 6 | 路由配置 | | 0.5h | 待开发 |
|
||||
| 7 | 联调测试 | | 2h | 待开发 |
|
||||
|
||||
---
|
||||
|
||||
## 六、验收标准
|
||||
|
||||
### 6.1 功能验收
|
||||
|
||||
- [ ] 核心指标卡片数据与数据库一致
|
||||
- [ ] 年龄分布饼图按要求分段显示
|
||||
- [ ] 刑期分布饼图按要求分段显示
|
||||
- [ ] 文化程度饼图按要求分类显示
|
||||
- [ ] 中国地图正确显示各省热力分布
|
||||
- [ ] 点击地图省份显示详细信息
|
||||
- [ ] 响应式布局在各种屏幕尺寸下正常显示
|
||||
- [ ] 数据加载时显示骨架屏
|
||||
|
||||
### 6.2 性能验收
|
||||
|
||||
- [ ] 页面加载时间 < 3秒
|
||||
- [ ] 图表渲染时间 < 1秒
|
||||
- [ ] 支持多用户并发访问
|
||||
|
||||
### 6.3 安全验收
|
||||
|
||||
- [ ] 敏感信息已配置脱敏规则
|
||||
- [ ] 数据权限控制生效(按监区)
|
||||
|
||||
---
|
||||
|
||||
## 七、联调步骤
|
||||
|
||||
### 7.1 后端启动
|
||||
```bash
|
||||
cd backend/yudao-module-prison
|
||||
mvn clean package -DskipTests
|
||||
cd ../yudao-server
|
||||
mvn spring-boot:run
|
||||
```
|
||||
|
||||
### 7.2 前端启动
|
||||
```bash
|
||||
cd frontend
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
### 7.3 测试数据
|
||||
```sql
|
||||
-- 确保有以下测试数据
|
||||
-- 1. 罪犯表有在押状态数据
|
||||
-- 2. 释放记录表有本月数据
|
||||
-- 3. 监区表有医院(5)和禁闭室(6)类型数据
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 八、风险与应对
|
||||
|
||||
| 风险 | 等级 | 应对措施 |
|
||||
|------|------|----------|
|
||||
| 移交记录表缺失 | 高 | 优先完成数据库设计 |
|
||||
| 地图 JSON 资源 | 中 | 提前下载或使用 CDN |
|
||||
| 数据权限复杂性 | 中 | 先实现基础版本,再迭代 |
|
||||
| 性能问题 | 低 | 添加 Redis 缓存 |
|
||||
|
||||
---
|
||||
|
||||
## 九、依赖项
|
||||
|
||||
### 9.1 前置依赖
|
||||
- [ ] 罪犯信息管理模块(数据来源)
|
||||
- [ ] 释放记录模块(数据来源)
|
||||
- [ ] 监区管理模块(数据来源)
|
||||
|
||||
### 9.2 外部依赖
|
||||
- [ ] ECharts 地图 JSON 文件
|
||||
|
||||
---
|
||||
|
||||
**文档版本**:v1.0
|
||||
**创建日期**:2026-01-14
|
||||
**评审人**:前端架构师、后端架构师
|
||||
126
requirements/需求-01-监管看板.md
Normal file
126
requirements/需求-01-监管看板.md
Normal file
@ -0,0 +1,126 @@
|
||||
# 需求-01-监管看板
|
||||
|
||||
> 模块名称:监管看板
|
||||
> 优先级:P0
|
||||
> 预估工时:18h
|
||||
|
||||
---
|
||||
|
||||
## 一、业务背景
|
||||
|
||||
监管看板是系统的首页,为监狱管理者提供全局视角的数据概览,帮助快速掌握监狱运行状态。
|
||||
|
||||
## 二、用户故事
|
||||
|
||||
| 角色 | 故事描述 | 优先级 |
|
||||
|-----|---------|-------|
|
||||
| 监狱长 | 作为监狱管理者,我希望在首页看到在册罪犯总数,这样我能快速了解监狱规模 | P0 |
|
||||
| 教导员 | 作为教导员,我希望看到不同年龄段罪犯的分布情况,这样我好制定针对性教育方案 | P0 |
|
||||
| 狱政科长 | 作为狱政科长,我希望看到不同刑期罪犯的占比,这样我能合理安排警力配置 | P0 |
|
||||
| 分管领导 | 作为分管领导,我希望看到各省籍贯分布热力图,这样我能了解罪犯构成特点 | P0 |
|
||||
| 管理员 | 作为系统管理员,我希望敏感信息自动脱敏显示,这样保护罪犯隐私 | P0 |
|
||||
|
||||
## 三、功能需求
|
||||
|
||||
### 3.1 首页框架
|
||||
|
||||
**功能描述**:搭建监管看板的整体布局结构
|
||||
|
||||
**功能列表**:
|
||||
- 顶部导航菜单配置
|
||||
- 左侧侧边栏菜单
|
||||
- 主体内容区域布局
|
||||
- 响应式适配
|
||||
|
||||
### 3.2 核心指标卡片
|
||||
|
||||
**功能描述**:展示监狱关键数据的汇总卡片
|
||||
|
||||
**指标项**:
|
||||
|
||||
| 指标名称 | 数据来源 | 计算逻辑 | 展示形式 |
|
||||
|---------|---------|---------|---------|
|
||||
| 在册罪犯总数 | 罪犯表 | status=在押 count | 数字卡片 |
|
||||
| 本月已释放 | 释放记录 | 本月释放 count | 数字卡片 |
|
||||
| 本月已移交 | 移交记录 | 本月移交 count | 数字卡片 |
|
||||
| 当前就医人数 | 罪犯位置 | 在医院监区 count | 数字卡片 |
|
||||
| 当前禁闭人数 | 罪犯位置 | 在禁闭室 count | 数字卡片 |
|
||||
|
||||
### 3.3 年龄分布图表
|
||||
|
||||
**功能描述**:展示罪犯年龄结构分布
|
||||
|
||||
**展示要求**:
|
||||
- 使用 ECharts 饼图
|
||||
- 年龄分段:未成年(≤17)、青年(18-30)、中年(31-50)、老年(51-60)、老龄(60+)
|
||||
- 鼠标悬停显示具体人数和占比
|
||||
- 支持图例点击筛选
|
||||
|
||||
### 3.4 刑期分布图表
|
||||
|
||||
**功能描述**:展示罪犯刑期结构分布
|
||||
|
||||
**展示要求**:
|
||||
- 使用 ECharts 饼图
|
||||
- 刑期分段:短刑(≤3年)、中刑(3-10年)、长刑(10年以上)、无期、死缓
|
||||
- 颜色区分不同刑期类型
|
||||
|
||||
### 3.5 文化程度图表
|
||||
|
||||
**功能描述**:展示罪犯文化程度分布
|
||||
|
||||
**展示要求**:
|
||||
- 使用 ECharts 饼图
|
||||
- 学历分类:文盲、小学、初中、高中、中专、大专、本科、研究生及以上
|
||||
|
||||
### 3.6 省份分布地图
|
||||
|
||||
**功能描述**:使用热力图展示罪犯籍贯分布
|
||||
|
||||
**展示要求**:
|
||||
- 使用 ECharts 中国地图
|
||||
- 按省份着色,深度代表人数多少
|
||||
- 点击省份显示该省罪犯数量和占比
|
||||
|
||||
### 3.7 数据脱敏组件
|
||||
|
||||
**功能描述**:对敏感信息进行脱敏展示
|
||||
|
||||
**脱敏规则**:
|
||||
|
||||
| 字段 | 脱敏规则 | 示例 |
|
||||
|-----|---------|-----|
|
||||
| 身份证号 | 保留前3后4位,中间用*替代 | 110***********1234 |
|
||||
| 手机号 | 保留前3后4位,中间用*替代 | 138****5678 |
|
||||
| 家庭住址 | 详细地址只显示到区县 | 北京市朝阳区*** |
|
||||
| 姓名 | 只显示第一个字 | 张** |
|
||||
|
||||
## 四、非功能需求
|
||||
|
||||
### 4.1 性能需求
|
||||
- 页面加载时间 < 3秒
|
||||
- 图表渲染时间 < 1秒
|
||||
|
||||
### 4.2 安全需求
|
||||
- 敏感数据脱敏展示
|
||||
- 数据权限控制(按监区/分监区)
|
||||
|
||||
## 五、验收标准
|
||||
|
||||
- [ ] 核心指标卡片数据准确
|
||||
- [ ] 年龄分布饼图展示正常,交互正常
|
||||
- [ ] 刑期分布饼图展示正常
|
||||
- [ ] 文化程度饼图展示正常
|
||||
- [ ] 中国地图热力图正常显示
|
||||
- [ ] 敏感信息自动脱敏
|
||||
- [ ] 页面响应式适配正常
|
||||
|
||||
## 六、相关模块
|
||||
|
||||
- 依赖:狱政信息管理模块(罪犯数据)
|
||||
- 依赖:系统管理模块(用户权限)
|
||||
|
||||
---
|
||||
|
||||
**创建日期**:2026-01-14
|
||||
**版本**:v1.0
|
||||
247
requirements/需求-02-狱政信息管理.md
Normal file
247
requirements/需求-02-狱政信息管理.md
Normal file
@ -0,0 +1,247 @@
|
||||
# 需求-02-狱政信息管理
|
||||
|
||||
> 模块名称:狱政信息管理
|
||||
> 优先级:P0
|
||||
> 预估工时:24h
|
||||
|
||||
---
|
||||
|
||||
## 一、业务背景
|
||||
|
||||
狱政信息管理是监狱管理的核心模块,实现罪犯从入监到出监的全生命周期管理。
|
||||
|
||||
## 二、用户故事
|
||||
|
||||
| 角色 | 故事描述 | 优先级 |
|
||||
|-----|---------|-------|
|
||||
| 狱政干事 | 作为狱政干事,我希望能够登记新入监罪犯的信息,这样罪犯才能正式纳入管理 | P0 |
|
||||
| 狱政科长 | 作为狱政科长,我希望能够查询所有罪犯信息,这样我好掌握整体情况 | P0 |
|
||||
| 分监区长 | 作为分监区长,我希望能够查询本分监区的罪犯,这样我能快速找到目标罪犯 | P0 |
|
||||
| 狱政干事 | 作为狱政干事,我希望能够修改罪犯信息,这样保证信息准确 | P1 |
|
||||
| 狱政干事 | 作为狱政干事,我希望能够登记罪犯释放信息,这样业务流程完整 | P0 |
|
||||
| 狱政干事 | 作为狱政干事,我希望能够登记罪犯调监信息,这样追踪罪犯位置变更 | P0 |
|
||||
| 管理员 | 作为管理员,我希望能够批量导入导出罪犯数据,这样提高工作效率 | P1 |
|
||||
|
||||
## 三、功能需求
|
||||
|
||||
### 3.1 罪犯信息管理
|
||||
|
||||
#### 3.1.1 入监登记
|
||||
|
||||
**功能描述**:登记新入监罪犯的基础信息
|
||||
|
||||
**表单字段**:
|
||||
|
||||
| 字段分组 | 字段名称 | 必填 | 说明 |
|
||||
|---------|---------|-----|------|
|
||||
| **基础信息** | 罪犯编号 | 是 | 系统自动生成或手动录入 |
|
||||
| | 姓名 | 是 | 罪犯真实姓名 |
|
||||
| | 性别 | 是 | 男/女 |
|
||||
| | 身份证号 | 是 | 18位身份证号码 |
|
||||
| | 出生日期 | 是 | 由身份证号解析或手动填写 |
|
||||
| | 民族 | 否 | 民族选择 |
|
||||
| | 籍贯 | 否 | 省市区三级联 |
|
||||
| | 文化程度 | 否 | 文盲/小学/初中/高中/大专/本科及以上 |
|
||||
| | 职业 | 否 | 捕前职业 |
|
||||
| | 家庭住址 | 否 | 详细地址 |
|
||||
| **刑罚信息** | 罪名 | 是 | 罪名选择或输入 |
|
||||
| | 刑期-年 | 是 | 数字输入 |
|
||||
| | 刑期-月 | 是 | 0-11数字输入 |
|
||||
| | 是否无期 | 是 | 是/否 |
|
||||
| | 是否死缓 | 是 | 是/否 |
|
||||
| | 判决法院 | 否 | 判决法院名称 |
|
||||
| | 判决日期 | 是 | 日期选择 |
|
||||
| | 判决书编号 | 否 | 判决书文号 |
|
||||
| | 原判刑期 | 否 | 原判刑期描述 |
|
||||
| | 入狱日期 | 是 | 日期选择 |
|
||||
| | 释放日期 | 是 | 根据刑期自动计算或手动调整 |
|
||||
| **监管信息** | 监管等级 | 是 | 宽管/普管/严管/考察 |
|
||||
| | 风险等级 | 是 | 高风险/中风险/低风险 |
|
||||
| | 监区 | 是 | 选择监区 |
|
||||
| | 分监区 | 是 | 根据监区联动显示 |
|
||||
| | 监室 | 是 | 根据分监区联动显示 |
|
||||
| | 状态 | 是 | 默认可选:在押 |
|
||||
|
||||
**业务规则**:
|
||||
- 释放日期 = 入狱日期 + 刑期(需考虑减刑情况)
|
||||
- 身份证号需校验格式
|
||||
- 编号需唯一
|
||||
|
||||
#### 3.1.2 罪犯列表
|
||||
|
||||
**功能描述**:查询和展示罪犯列表
|
||||
|
||||
**列表字段**:
|
||||
- 罪犯编号、姓名、性别、身份证号(脱敏)
|
||||
- 罪名、刑期、入狱日期
|
||||
- 监管等级、风险等级
|
||||
- 当前监区、当前监室
|
||||
- 状态、创建时间
|
||||
|
||||
**筛选条件**:
|
||||
- 罪犯编号(模糊搜索)
|
||||
- 姓名(模糊搜索)
|
||||
- 性别(下拉选择)
|
||||
- 罪名(下拉选择)
|
||||
- 监管等级(下拉选择)
|
||||
- 风险等级(下拉选择)
|
||||
- 监区(下拉选择)
|
||||
- 状态(下拉选择)
|
||||
- 入狱日期范围(日期区间)
|
||||
|
||||
**操作功能**:
|
||||
- 查看详情
|
||||
- 修改信息
|
||||
- 删除(逻辑删除)
|
||||
- 批量删除
|
||||
- 导出Excel
|
||||
|
||||
#### 3.1.3 罪犯详情
|
||||
|
||||
**功能描述**:查看罪犯详细信息
|
||||
|
||||
**展示内容**:
|
||||
- 基础信息卡片
|
||||
- 刑罚信息卡片
|
||||
- 监管信息卡片
|
||||
- 位置变更历史
|
||||
- 考核记录汇总
|
||||
- 测评记录汇总
|
||||
- 消费记录汇总
|
||||
|
||||
#### 3.1.4 罪犯信息修改
|
||||
|
||||
**功能描述**:修改罪犯信息
|
||||
|
||||
**规则**:
|
||||
- 部分字段修改需要审批(如刑期变更)
|
||||
- 修改记录需要留痕
|
||||
|
||||
### 3.2 出监管理
|
||||
|
||||
#### 3.2.1 释放登记
|
||||
|
||||
**功能描述**:登记罪犯释放信息
|
||||
|
||||
**释放类型**:
|
||||
- 刑满释放
|
||||
- 假释
|
||||
- 暂予监外执行
|
||||
- 减刑
|
||||
- 法院裁定释放
|
||||
- 死亡
|
||||
- 其他
|
||||
|
||||
**表单字段**:
|
||||
- 罪犯选择(从列表选择或搜索)
|
||||
- 释放类型
|
||||
- 释放原因
|
||||
- 实际释放日期
|
||||
- 释放凭证(文书编号等)
|
||||
- 交接人信息
|
||||
- 备注
|
||||
|
||||
**业务流程**:
|
||||
1. 选择或搜索罪犯
|
||||
2. 填写释放信息
|
||||
3. 提交审核
|
||||
4. 审核通过后更新罪犯状态为"已释放"
|
||||
5. 记录释放日志
|
||||
|
||||
#### 3.2.2 移交登记
|
||||
|
||||
**功能描述**:登记罪犯转监/移交信息
|
||||
|
||||
**表单字段**:
|
||||
- 罪犯选择
|
||||
- 移交类型(转入/转出)
|
||||
- 目标监狱
|
||||
- 移交原因
|
||||
- 移交日期
|
||||
- 交接人信息
|
||||
|
||||
### 3.3 调监管理
|
||||
|
||||
#### 3.3.1 调监操作
|
||||
|
||||
**功能描述**:罪犯在监区/监室间的调换
|
||||
|
||||
**表单字段**:
|
||||
- 罪犯选择
|
||||
- 目标监区
|
||||
- 目标分监区
|
||||
- 目标监室
|
||||
- 调监原因
|
||||
|
||||
**业务规则**:
|
||||
- 目标监室床位未满
|
||||
- 严管级罪犯不能调入普通监区
|
||||
- 调监后自动同步人数
|
||||
|
||||
#### 3.3.2 位置历史
|
||||
|
||||
**功能描述**:查看罪犯位置变更历史
|
||||
|
||||
**展示内容**:
|
||||
- 时间线展示位置变更记录
|
||||
- 包含:变更时间、原位置、新位置、变更原因、操作人
|
||||
|
||||
### 3.4 批量操作
|
||||
|
||||
#### 3.4.1 批量导入
|
||||
|
||||
**功能描述**:通过Excel批量导入罪犯信息
|
||||
|
||||
**要求**:
|
||||
- 提供导入模板下载
|
||||
- 支持数据校验
|
||||
- 显示导入结果(成功/失败数量)
|
||||
- 失败记录提供下载
|
||||
|
||||
#### 3.4.2 批量导出
|
||||
|
||||
**功能描述**:导出罪犯列表
|
||||
|
||||
**要求**:
|
||||
- 支持按条件筛选后导出
|
||||
- 支持导出全部
|
||||
- 敏感字段自动脱敏
|
||||
|
||||
## 四、业务规则汇总
|
||||
|
||||
| 规则编号 | 规则描述 |
|
||||
|---------|---------|
|
||||
| BR-001 | 罪犯编号全局唯一 |
|
||||
| BR-002 | 身份证号需符合18位校验规则 |
|
||||
| BR-003 | 释放日期根据入狱日期和刑期自动计算 |
|
||||
| BR-004 | 调监时目标监室人数不能超过床位数 |
|
||||
| BR-005 | 严管级罪犯只能分配在严管监区 |
|
||||
| BR-006 | 敏感信息在列表页脱敏展示 |
|
||||
| BR-007 | 罪犯状态变更需要记录变更日志 |
|
||||
|
||||
## 五、验收标准
|
||||
|
||||
- [ ] 支持入监登记,信息完整
|
||||
- [ ] 支持罪犯列表查询和筛选
|
||||
- [ ] 支持查看罪犯详情
|
||||
- [ ] 支持修改罪犯信息
|
||||
- [ ] 支持释放登记
|
||||
- [ ] 支持移交登记
|
||||
- [ ] 支持调监操作
|
||||
- [ ] 支持查看位置历史
|
||||
- [ ] 支持批量导入导出
|
||||
- [ ] 敏感信息自动脱敏
|
||||
- [ ] 数据权限控制(按监区)
|
||||
|
||||
## 六、相关模块
|
||||
|
||||
- 依赖:监区管理模块(获取监区/监室列表)
|
||||
- 依赖:字典管理模块(获取选项数据)
|
||||
- 被依赖:计分考核模块(获取罪犯信息)
|
||||
- 被依赖:测评管理模块(获取罪犯信息)
|
||||
- 被依赖:消费管理模块(获取罪犯信息)
|
||||
|
||||
---
|
||||
|
||||
**创建日期**:2026-01-14
|
||||
**版本**:v1.0
|
||||
231
requirements/需求-03-计分考核.md
Normal file
231
requirements/需求-03-计分考核.md
Normal file
@ -0,0 +1,231 @@
|
||||
# 需求-03-计分考核
|
||||
|
||||
> 模块名称:计分考核
|
||||
> 优先级:P0
|
||||
> 预估工时:24h
|
||||
|
||||
---
|
||||
|
||||
## 一、业务背景
|
||||
|
||||
计分考核是监狱对罪犯进行日常管理和改造评价的核心手段,直接关系到罪犯的减刑、假释等处遇变更。
|
||||
|
||||
## 二、用户故事
|
||||
|
||||
| 角色 | 故事描述 | 优先级 |
|
||||
|-----|---------|-------|
|
||||
| 分监区长 | 作为分监区长,我希望配置考核规则,这样考核标准统一明确 | P0 |
|
||||
| 考核干事 | 作为考核干事,我希望每天记录罪犯的考核得分,这样客观评价罪犯表现 | P0 |
|
||||
| 考核干事 | 作为考核干事,我希望自动计算月度总分,这样减少人工计算工作量 | P0 |
|
||||
| 监狱长 | 作为监狱长,我希望查看考核等级评定结果,这样为减刑假释提供依据 | P0 |
|
||||
| 罪犯 | 作为罪犯,我希望看到自己的考核得分和等级,这样我知道自己的改造表现 | P1 |
|
||||
| 考核干事 | 作为考核干事,我希望考核结果公示,这样增加透明度 | P1 |
|
||||
|
||||
## 三、功能需求
|
||||
|
||||
### 3.1 考核规则配置
|
||||
|
||||
#### 3.1.1 规则分类
|
||||
|
||||
**考核类别**:
|
||||
- 劳动改造
|
||||
- 教育改造
|
||||
- 日常行为
|
||||
- 卫生纪律
|
||||
- 加分项
|
||||
- 扣分项
|
||||
|
||||
#### 3.1.2 规则管理
|
||||
|
||||
**规则字段**:
|
||||
- 规则编码(唯一)
|
||||
- 规则名称
|
||||
- 所属类别
|
||||
- 分值(正数为加分,负数为扣分)
|
||||
- 日最高分限制
|
||||
- 月最高分限制
|
||||
- 规则说明
|
||||
- 状态(启用/禁用)
|
||||
- 排序
|
||||
|
||||
**示例规则**:
|
||||
|
||||
| 类别 | 规则名称 | 分值 | 日限 | 月限 |
|
||||
|-----|---------|-----|-----|-----|
|
||||
| 劳动改造 | 超额完成生产任务 | +2 | 5 | 30 |
|
||||
| 劳动改造 | 完成生产任务 | +1 | 3 | 20 |
|
||||
| 教育改造 | 参加义务劳动 | +1 | 2 | 10 |
|
||||
| 教育改造 | 考试合格 | +1 | 3 | 15 |
|
||||
| 日常行为 | 获得表扬 | +2 | 5 | 20 |
|
||||
| 日常行为 | 主动报告隐患 | +1 | 2 | 10 |
|
||||
| 卫生纪律 | 内务不整洁 | -0.5 | -3 | -10 |
|
||||
| 卫生纪律 | 违规吸烟 | -2 | -5 | -20 |
|
||||
| 扣分项 | 打架斗殴 | -5 | -10 | -30 |
|
||||
| 扣分项 | 私藏违禁品 | -10 | -20 | -50 |
|
||||
|
||||
### 3.2 日常考核记录
|
||||
|
||||
#### 3.2.1 考核录入
|
||||
|
||||
**功能描述**:为罪犯录入日常考核得分
|
||||
|
||||
**表单字段**:
|
||||
- 考核日期(默认当天,可修改)
|
||||
- 罪犯选择(支持批量选择)
|
||||
- 考核规则(从规则库选择)
|
||||
- 得分(根据规则自动带出,可调整)
|
||||
- 备注说明
|
||||
|
||||
**业务流程**:
|
||||
1. 选择考核日期
|
||||
2. 选择罪犯(支持搜索、分监区筛选)
|
||||
3. 选择考核规则
|
||||
4. 系统自动带出规则分值
|
||||
5. 填写备注
|
||||
6. 提交保存
|
||||
|
||||
#### 3.2.2 考核查询
|
||||
|
||||
**功能描述**:查询日常考核记录
|
||||
|
||||
**列表字段**:
|
||||
- 考核日期
|
||||
- 罪犯编号、姓名
|
||||
- 监区/分监区
|
||||
- 考核类别
|
||||
- 规则名称
|
||||
- 得分
|
||||
- 记录人
|
||||
- 操作时间
|
||||
|
||||
**筛选条件**:
|
||||
- 考核日期范围
|
||||
- 罪犯姓名/编号
|
||||
- 监区/分监区
|
||||
- 考核类别
|
||||
- 规则名称
|
||||
|
||||
### 3.3 月度考核汇总
|
||||
|
||||
#### 3.3.1 自动计算
|
||||
|
||||
**功能描述**:每月自动汇总罪犯考核得分
|
||||
|
||||
**计算逻辑**:
|
||||
```
|
||||
月度总分 = 基础分 + 当月加分累计 - 当月扣分累计
|
||||
```
|
||||
|
||||
**基础分**:
|
||||
- 默认100分(可配置)
|
||||
|
||||
**计算规则**:
|
||||
- 每日考核得分累加
|
||||
- 超过日限的按日限计算
|
||||
- 超过月限的按月限计算
|
||||
|
||||
#### 3.3.2 等级评定
|
||||
|
||||
**功能描述**:根据月度总分评定考核等级
|
||||
|
||||
**评定标准**(示例,可配置):
|
||||
|
||||
| 等级 | 分值范围 | 说明 |
|
||||
|-----|---------|-----|
|
||||
| 优秀 | ≥120分 | 表现突出 |
|
||||
| 良好 | 100-119分 | 表现良好 |
|
||||
| 合格 | 80-99分 | 表现一般 |
|
||||
| 不合格 | <80分 | 表现较差 |
|
||||
|
||||
#### 3.3.3 月度汇总展示
|
||||
|
||||
**展示内容**:
|
||||
- 罪犯基础信息
|
||||
- 基础分
|
||||
- 加分合计
|
||||
- 扣分合计
|
||||
- 月度总分
|
||||
- 考核等级
|
||||
- 考核人
|
||||
- 审核状态
|
||||
|
||||
**操作功能**:
|
||||
- 查看明细
|
||||
- 导出报表
|
||||
- 提交审核
|
||||
|
||||
### 3.4 考核公示
|
||||
|
||||
#### 3.4.1 公示发布
|
||||
|
||||
**功能描述**:发布考核结果供罪犯查看
|
||||
|
||||
**公示内容**:
|
||||
- 公示期间
|
||||
- 公示范围(全狱/指定监区)
|
||||
- 考核结果列表
|
||||
|
||||
#### 3.4.2 罪犯查询
|
||||
|
||||
**功能描述**:罪犯查询自己的考核结果
|
||||
|
||||
**展示内容**:
|
||||
- 本月得分明细
|
||||
- 本月总分
|
||||
- 考核等级
|
||||
- 与上月对比
|
||||
|
||||
### 3.5 减刑假释关联
|
||||
|
||||
#### 3.5.1 考核数据提取
|
||||
|
||||
**功能描述**:提取用于减刑假释的考核数据
|
||||
|
||||
**提取内容**:
|
||||
- 近6个月/月度考核得分
|
||||
- 年度累计考核分
|
||||
- 表扬次数
|
||||
- 警告次数
|
||||
- 等级评定记录
|
||||
|
||||
#### 3.5.2 建议生成
|
||||
|
||||
**功能描述**:根据考核数据生成减刑假释建议
|
||||
|
||||
**建议内容**:
|
||||
- 可申报减刑月份
|
||||
- 建议减刑幅度
|
||||
- 建议假释意见
|
||||
|
||||
## 四、业务规则汇总
|
||||
|
||||
| 规则编号 | 规则描述 |
|
||||
|---------|---------|
|
||||
| BR-001 | 每日考核分值不能超过日最高分限制 |
|
||||
| BR-002 | 每月考核分值不能超过月最高分限制 |
|
||||
| BR-003 | 考核等级根据配置的标准自动评定 |
|
||||
| BR-004 | 月度汇总每月1日自动计算 |
|
||||
| BR-005 | 考核结果公示后才能生效 |
|
||||
| BR-006 | 不合格等级达到一定次数触发严管 |
|
||||
|
||||
## 五、验收标准
|
||||
|
||||
- [ ] 支持考核规则的增删改查
|
||||
- [ ] 支持日常考核录入(单条/批量)
|
||||
- [ ] 支持日常考核查询
|
||||
- [ ] 支持月度考核自动汇总计算
|
||||
- [ ] 支持考核等级评定
|
||||
- [ ] 支持考核结果公示
|
||||
- [ ] 支持减刑假释数据提取
|
||||
- [ ] 考核数据与罪犯信息联动
|
||||
|
||||
## 六、相关模块
|
||||
|
||||
- 依赖:狱政信息管理模块(罪犯基础数据)
|
||||
- 依赖:监区管理模块(获取监区结构)
|
||||
- 被依赖:评估报告模块(考核数据引用)
|
||||
|
||||
---
|
||||
|
||||
**创建日期**:2026-01-14
|
||||
**版本**:v1.0
|
||||
228
requirements/需求-04-测评问卷管理.md
Normal file
228
requirements/需求-04-测评问卷管理.md
Normal file
@ -0,0 +1,228 @@
|
||||
# 需求-04-测评问卷管理
|
||||
|
||||
> 模块名称:测评问卷管理
|
||||
> 优先级:P0
|
||||
> 预估工时:40h
|
||||
|
||||
---
|
||||
|
||||
## 一、业务背景
|
||||
|
||||
测评问卷用于对罪犯进行心理测评、风险评估等,是了解罪犯心理状态和制定管理方案的重要工具。
|
||||
|
||||
## 二、用户故事
|
||||
|
||||
| 角色 | 故事描述 | 优先级 |
|
||||
|-----|---------|-------|
|
||||
| 教育科长 | 作为教育科长,我希望创建不同类型的测评问卷,这样满足不同测评需求 | P0 |
|
||||
| 心理辅导员 | 作为心理辅导员,我希望编辑问卷题目,这样问卷内容符合测评目标 | P0 |
|
||||
| 心理辅导员 | 作为心理辅导员,我希望设置题目分值,这样自动计算测评得分 | P0 |
|
||||
| 教育科长 | 作为教育科长,我希望发布和下架问卷,这样控制问卷可用状态 | P0 |
|
||||
| 心理辅导员 | 作为心理辅导员,我希望预览问卷效果,这样发布前检查问卷内容 | P0 |
|
||||
| 管理员 | 作为管理员,我希望复制已有问卷,这样快速创建相似问卷 | P1 |
|
||||
|
||||
## 三、功能需求
|
||||
|
||||
### 3.1 问卷分类管理
|
||||
|
||||
#### 3.1.1 分类列表
|
||||
|
||||
**分类类型**:
|
||||
- 心理测评
|
||||
- 风险评估
|
||||
- 日常调查
|
||||
- 入监测评
|
||||
- 出监测评
|
||||
|
||||
#### 3.1.2 分类管理
|
||||
|
||||
**功能**:
|
||||
- 新增分类
|
||||
- 修改分类
|
||||
- 删除分类(无问卷时可删)
|
||||
- 查看分类下的问卷数量
|
||||
|
||||
### 3.2 问卷管理
|
||||
|
||||
#### 3.2.1 问卷列表
|
||||
|
||||
**列表字段**:
|
||||
- 问卷标题
|
||||
- 所属分类
|
||||
- 题目数量
|
||||
- 总分值
|
||||
- 时限(分钟)
|
||||
- 状态(草稿/已发布/已下架)
|
||||
- 创建人
|
||||
- 创建时间
|
||||
- 发布时间
|
||||
|
||||
**筛选条件**:
|
||||
- 分类筛选
|
||||
- 状态筛选
|
||||
- 标题搜索
|
||||
- 创建时间范围
|
||||
|
||||
#### 3.2.2 创建问卷
|
||||
|
||||
**问卷属性**:
|
||||
- 问卷标题(必填)
|
||||
- 所属分类(必选)
|
||||
- 问卷描述(可选)
|
||||
- 时限(分钟,0表示不限时)
|
||||
- 及格分数(可选)
|
||||
- 是否允许重考(是/否)
|
||||
- 状态(默认草稿)
|
||||
|
||||
#### 3.2.3 编辑问卷
|
||||
|
||||
**功能描述**:修改问卷内容
|
||||
|
||||
**可编辑项**:
|
||||
- 问卷属性
|
||||
- 题目内容
|
||||
- 题目顺序
|
||||
- 题目分值
|
||||
|
||||
**限制**:
|
||||
- 已发布的问卷不能直接修改
|
||||
- 如需修改应先下架
|
||||
|
||||
#### 3.2.4 问卷预览
|
||||
|
||||
**功能描述**:预览问卷效果
|
||||
|
||||
**预览内容**:
|
||||
- 问卷标题和描述
|
||||
- 题目列表(按顺序)
|
||||
- 题目类型和选项
|
||||
- 分值显示
|
||||
- 预计完成时间
|
||||
|
||||
#### 3.2.5 发布/下架
|
||||
|
||||
**发布操作**:
|
||||
- 状态从"草稿"变为"已发布"
|
||||
- 记录发布时间
|
||||
- 问卷可用于测评
|
||||
|
||||
**下架操作**:
|
||||
- 状态从"已发布"变为"已下架"
|
||||
- 下架后不可用于新测评
|
||||
- 历史测评记录保留
|
||||
|
||||
#### 3.2.6 问卷复制
|
||||
|
||||
**功能描述**:创建问卷副本
|
||||
|
||||
**复制内容**:
|
||||
- 问卷属性
|
||||
- 所有题目(含选项)
|
||||
|
||||
**复制后**:
|
||||
- 新问卷状态为"草稿"
|
||||
- 标题自动添加"副本"标识
|
||||
|
||||
### 3.3 题目管理
|
||||
|
||||
#### 3.3.1 题目类型
|
||||
|
||||
| 类型 | 说明 | 评分方式 |
|
||||
|-----|------|---------|
|
||||
| 单选题 | 从多个选项中选择一个 | 固定分值 |
|
||||
| 多选题 | 从多个选项中选择多个 | 按选项得分累加 |
|
||||
| 判断题 | 判断对错 | 固定分值 |
|
||||
| 填空题 | 输入文字答案 | 需人工评分 |
|
||||
| 简述题 | 输入大段文字 | 需人工评分 |
|
||||
| 评分题 | 选择分数等级 | 固定分值 |
|
||||
|
||||
#### 3.3.2 题目编辑
|
||||
|
||||
**题目属性**:
|
||||
- 题目内容(必填)
|
||||
- 题目类型(必选)
|
||||
- 题目分值(必填)
|
||||
- 是否必答(是/否)
|
||||
- 排序序号
|
||||
|
||||
**选项管理(单选/多选/判断)**:
|
||||
- 选项内容
|
||||
- 选项分值
|
||||
- 是否正确答案(用于自动评分)
|
||||
|
||||
**示例 - 单选题**:
|
||||
```
|
||||
题目:您最近一周的情绪状态如何?
|
||||
分值:5分
|
||||
|
||||
选项:
|
||||
A. 心情愉快 (+5分)
|
||||
B. 心情一般 (+2分)
|
||||
C. 心情低落 (0分)
|
||||
D. 情绪低落 (-2分)
|
||||
```
|
||||
|
||||
#### 3.3.3 题目排序
|
||||
|
||||
**功能**:拖拽调整题目顺序
|
||||
|
||||
**说明**:
|
||||
- 序号根据排序自动生成
|
||||
- 保存后生效
|
||||
|
||||
#### 3.3.4 题目分值设置
|
||||
|
||||
**功能**:配置每题分值
|
||||
|
||||
**规则**:
|
||||
- 客观题(单选/多选/判断/评分)可直接设置选项得分
|
||||
- 主观题(填空/简述)需人工评分
|
||||
|
||||
### 3.4 问卷发布流程
|
||||
|
||||
```
|
||||
草稿 → 内容审核 → 发布 → 测评执行 → 下架 → 归档
|
||||
```
|
||||
|
||||
**审核节点(可选)**:
|
||||
- 发布前增加审核环节
|
||||
- 审核人可退回或通过
|
||||
|
||||
## 四、业务规则汇总
|
||||
|
||||
| 规则编号 | 规则描述 |
|
||||
|---------|---------|
|
||||
| BR-001 | 问卷标题在同一分类下必须唯一 |
|
||||
| BR-002 | 已发布的问卷不能直接修改内容 |
|
||||
| BR-003 | 问卷下架后不能再发起新测评 |
|
||||
| BR-004 | 客观题支持自动评分,主观题需人工评分 |
|
||||
| BR-005 | 超过时限自动提交(限时的问卷) |
|
||||
| BR-006 | 不允许重考的问卷,一个罪犯只能答一次 |
|
||||
| BR-007 | 题目顺序影响试卷展示顺序 |
|
||||
|
||||
## 五、验收标准
|
||||
|
||||
- [ ] 支持问卷分类管理
|
||||
- [ ] 支持问卷的增删改查
|
||||
- [ ] 支持问卷预览
|
||||
- [ ] 支持问卷发布和下架
|
||||
- [ ] 支持问卷复制
|
||||
- [ ] 支持单选题编辑
|
||||
- [ ] 支持多选题编辑
|
||||
- [ ] 支持判断题编辑
|
||||
- [ ] 支持填空题编辑
|
||||
- [ ] 支持简述题编辑
|
||||
- [ ] 支持评分题编辑
|
||||
- [ ] 支持题目排序
|
||||
- [ ] 支持题目分值设置
|
||||
|
||||
## 六、相关模块
|
||||
|
||||
- 依赖:测评执行模块(使用问卷)
|
||||
- 依赖:测评结果模块(存储答卷)
|
||||
- 被依赖:危险评估模块(可引用问卷)
|
||||
|
||||
---
|
||||
|
||||
**创建日期**:2026-01-14
|
||||
**版本**:v1.0
|
||||
248
requirements/需求-05-测评执行与评分.md
Normal file
248
requirements/需求-05-测评执行与评分.md
Normal file
@ -0,0 +1,248 @@
|
||||
# 需求-05-测评执行与评分
|
||||
|
||||
> 模块名称:测评执行与评分
|
||||
> 优先级:P0
|
||||
> 预估工时:24h
|
||||
|
||||
---
|
||||
|
||||
## 一、业务背景
|
||||
|
||||
测评执行是罪犯在线完成测评问卷的过程,系统需要提供良好的答题体验并确保测评数据的完整性和准确性。
|
||||
|
||||
## 二、用户故事
|
||||
|
||||
| 角色 | 故事描述 | 优先级 |
|
||||
|-----|---------|-------|
|
||||
| 心理辅导员 | 作为心理辅导员,我希望罪犯在线完成测评问卷,这样方便快捷 | P0 |
|
||||
| 心理辅导员 | 作为心理辅导员,我希望自动计算客观题得分,这样提高工作效率 | P0 |
|
||||
| 心理辅导员 | 作为心理辅导员,我希望查看测评结果,这样分析罪犯心理状态 | P0 |
|
||||
| 教育科长 | 作为教育科长,我希望统计分析测评数据,这样了解整体情况 | P1 |
|
||||
| 罪犯 | 作为罪犯,我希望能够完成测评,这样接受心理评估 | P0 |
|
||||
|
||||
## 三、功能需求
|
||||
|
||||
### 3.1 在线测评
|
||||
|
||||
#### 3.1.1 发起测评
|
||||
|
||||
**功能描述**:为罪犯发起测评任务
|
||||
|
||||
**发起方式**:
|
||||
- 单个发起:选择罪犯 + 选择问卷
|
||||
- 批量发起:选择多个罪犯 + 选择问卷
|
||||
- 按监区发起:选择监区 + 选择问卷
|
||||
|
||||
**表单字段**:
|
||||
- 罪犯选择(支持搜索、筛选)
|
||||
- 问卷选择(根据测评类型筛选)
|
||||
- 测评说明(可选)
|
||||
- 截止日期(可选)
|
||||
|
||||
**校验规则**:
|
||||
- 罪犯状态必须为"在押"
|
||||
- 问卷状态必须为"已发布"
|
||||
- 不可重复测评的问卷需要检查是否已测评
|
||||
|
||||
#### 3.1.2 答题界面
|
||||
|
||||
**页面布局**:
|
||||
- 顶部:问卷标题、剩余时间(限时问卷)
|
||||
- 左侧:题目导航(序号标识)
|
||||
- 主体:当前题目内容
|
||||
- 底部:上一题、下一题、提交按钮
|
||||
|
||||
**题目展示**:
|
||||
- 显示题目序号和内容
|
||||
- 显示题目分值
|
||||
- 显示是否必答
|
||||
- 显示选项或输入框
|
||||
- 显示已选/已答状态
|
||||
|
||||
**交互功能**:
|
||||
- 选项点击选择/取消
|
||||
- 填空输入
|
||||
- 简述输入
|
||||
- 上一题/下一题切换
|
||||
- 题目导航快速跳转
|
||||
- 剩余时间倒计时
|
||||
|
||||
**时限处理**:
|
||||
- 限时问卷显示倒计时
|
||||
- 时间到自动提交
|
||||
- 超时未提交的题目按0分计
|
||||
|
||||
#### 3.1.3 提交答卷
|
||||
|
||||
**提交方式**:
|
||||
- 手动提交:点击提交按钮
|
||||
- 自动提交:时间到自动提交
|
||||
|
||||
**提交确认**:
|
||||
- 提交前提示未答题数量
|
||||
- 支持返回修改或确认提交
|
||||
|
||||
**提交后**:
|
||||
- 客观题自动计算得分
|
||||
- 生成测评记录
|
||||
- 跳转到完成页面
|
||||
|
||||
### 3.2 答题记录
|
||||
|
||||
#### 3.2.1 记录查询
|
||||
|
||||
**查询条件**:
|
||||
- 罪犯姓名/编号
|
||||
- 问卷名称
|
||||
- 测评时间范围
|
||||
- 状态(待评估/已完成)
|
||||
|
||||
**列表字段**:
|
||||
- 测评记录ID
|
||||
- 罪犯编号、姓名
|
||||
- 问卷标题
|
||||
- 测评时间
|
||||
- 得分
|
||||
- 评估结果
|
||||
- 状态
|
||||
- 操作
|
||||
|
||||
#### 3.2.2 记录详情
|
||||
|
||||
**展示内容**:
|
||||
- 罪犯信息
|
||||
- 问卷信息
|
||||
- 测评时间
|
||||
- 得分详情(每题得分)
|
||||
- 总分
|
||||
- 评估结果
|
||||
|
||||
**答卷内容**:
|
||||
- 显示所有题目和答案
|
||||
- 客观题显示标准答案
|
||||
- 主观题显示作答内容
|
||||
|
||||
### 3.3 自动评分
|
||||
|
||||
#### 3.3.1 评分规则
|
||||
|
||||
**客观题评分**:
|
||||
- 单选题:选择正确答案得满分,否则得0分
|
||||
- 多选题:每个正确选项得相应分值,错误选项扣分
|
||||
- 判断题:正确得满分,错误得0分
|
||||
- 评分题:按选择分值计算
|
||||
|
||||
**主观题评分**:
|
||||
- 填空题:需人工评分
|
||||
- 简述题:需人工评分
|
||||
|
||||
#### 3.3.2 结果生成
|
||||
|
||||
**总分计算**:
|
||||
```
|
||||
总分 = 客观题得分 + 主观题得分
|
||||
```
|
||||
|
||||
**评估结果**:
|
||||
- 及格/不及格(根据及格分数线判断)
|
||||
- 风险等级(根据测评类型和分数判断)
|
||||
- 测评建议(根据测评类型生成)
|
||||
|
||||
### 3.4 人工评分
|
||||
|
||||
#### 3.4.1 待评分列表
|
||||
|
||||
**功能描述**:显示需要人工评分的答卷
|
||||
|
||||
**筛选条件**:
|
||||
- 测评时间范围
|
||||
- 问卷类型
|
||||
- 监区
|
||||
|
||||
**列表字段**:
|
||||
- 记录ID
|
||||
- 罪犯信息
|
||||
- 问卷名称
|
||||
- 客观题得分
|
||||
- 主观题数量
|
||||
- 待评分数
|
||||
|
||||
#### 3.4.2 主观题评分
|
||||
|
||||
**评分界面**:
|
||||
- 显示题目和作答内容
|
||||
- 输入分数
|
||||
- 填写评语(可选)
|
||||
|
||||
**提交后**:
|
||||
- 更新总分
|
||||
- 生成评估结果
|
||||
|
||||
### 3.5 测评统计分析
|
||||
|
||||
#### 3.5.1 完成率统计
|
||||
|
||||
**统计维度**:
|
||||
- 按问卷统计:各问卷的完成率
|
||||
- 按监区统计:各监区的完成率
|
||||
- 按时间统计:日/周/月完成数量
|
||||
|
||||
#### 3.5.2 分数分布统计
|
||||
|
||||
**统计维度**:
|
||||
- 按分数段统计人数(0-20, 21-40, 41-60, 61-80, 81-100)
|
||||
- 及格率统计
|
||||
- 平均分统计
|
||||
|
||||
#### 3.5.3 风险分布统计
|
||||
|
||||
**统计维度**:
|
||||
- 高风险人数和占比
|
||||
- 中风险人数和占比
|
||||
- 低风险人数和占比
|
||||
|
||||
#### 3.5.4 统计图表
|
||||
|
||||
**图表类型**:
|
||||
- 柱状图:完成数量趋势
|
||||
- 饼图:分数分布
|
||||
- 饼图:风险等级分布
|
||||
- 折线图:平均分趋势
|
||||
|
||||
## 四、业务规则汇总
|
||||
|
||||
| 规则编号 | 规则描述 |
|
||||
|---------|---------|
|
||||
| BR-001 | 限时问卷时间到自动提交 |
|
||||
| BR-002 | 不允许重考的问卷只能测评一次 |
|
||||
| BR-003 | 客观题自动评分,主观题需人工评分 |
|
||||
| BR-004 | 测评记录一旦生成不能删除 |
|
||||
| BR-005 | 测评过程中刷新页面保留已答题状态 |
|
||||
| BR-006 | 未登录状态下不能发起测评 |
|
||||
|
||||
## 五、验收标准
|
||||
|
||||
- [ ] 支持单个发起测评
|
||||
- [ ] 支持批量发起测评
|
||||
- [ ] 支持按监区发起测评
|
||||
- [ ] 答题界面展示正确
|
||||
- [ ] 答题交互正常(上一题/下一题/导航)
|
||||
- [ ] 限时功能正常,时间到自动提交
|
||||
- [ ] 提交功能正常
|
||||
- [ ] 客观题自动评分正确
|
||||
- [ ] 支持人工评分主观题
|
||||
- [ ] 测评记录查询正常
|
||||
- [ ] 测评详情展示正确
|
||||
- [ ] 支持测评统计分析
|
||||
|
||||
## 六、相关模块
|
||||
|
||||
- 依赖:测评问卷管理模块(获取问卷)
|
||||
- 依赖:狱政信息管理模块(获取罪犯列表)
|
||||
- 被依赖:危险评估模块(测评结果引用)
|
||||
- 被依赖:评估报告模块(测评数据引用)
|
||||
|
||||
---
|
||||
|
||||
**创建日期**:2026-01-14
|
||||
**版本**:v1.0
|
||||
199
requirements/需求-06-狱情平台.md
Normal file
199
requirements/需求-06-狱情平台.md
Normal file
@ -0,0 +1,199 @@
|
||||
# 需求-06-狱情平台
|
||||
|
||||
> 模块名称:狱情平台
|
||||
> 优先级:P1
|
||||
> 预估工时:22h
|
||||
|
||||
---
|
||||
|
||||
## 一、业务背景
|
||||
|
||||
狱情平台用于记录和管理狱内发生的各类事件,支持狱情动态跟踪、预警信息管理和事件处理流程。
|
||||
|
||||
## 二、用户故事
|
||||
|
||||
| 角色 | 故事描述 | 优先级 |
|
||||
|-----|---------|-------|
|
||||
| 狱政科长 | 作为狱政科长,我希望记录狱内发生的重要事件,这样留存管理痕迹 | P1 |
|
||||
| 分监区长 | 作为分监区长,我希望登记突发事件,这样及时上报 | P1 |
|
||||
| 监狱长 | 作为监狱长,我希望查看预警信息,这样及时掌握风险 | P1 |
|
||||
| 狱政干事 | 作为狱政干事,我希望跟踪事件处理进度,这样确保事件闭环 | P1 |
|
||||
| 管理员 | 作为管理员,我希望管理应急预案,这样突发事件有据可依 | P2 |
|
||||
|
||||
## 三、功能需求
|
||||
|
||||
### 3.1 狱情动态记录
|
||||
|
||||
#### 3.1.1 事件登记
|
||||
|
||||
**事件类型**:
|
||||
- 监管事件(脱逃、行凶、违规等)
|
||||
- 安全事件(事故、隐患等)
|
||||
- 医疗事件(疾病、伤亡等)
|
||||
- 教育事件(冲突、思想动态等)
|
||||
- 其他事件
|
||||
|
||||
**表单字段**:
|
||||
- 事件标题
|
||||
- 事件类型(必选)
|
||||
- 发生时间(必填)
|
||||
- 发生地点(监区/分监区)
|
||||
- 涉及罪犯(可多选)
|
||||
- 事件描述(详细经过)
|
||||
- 事件等级(一般/较大/重大/特大)
|
||||
- 现场处置情况
|
||||
- 附件上传(照片、文件等)
|
||||
|
||||
#### 3.1.2 事件列表
|
||||
|
||||
**列表字段**:
|
||||
- 事件编号
|
||||
- 事件标题
|
||||
- 事件类型
|
||||
- 发生时间
|
||||
- 发生地点
|
||||
- 事件等级
|
||||
- 处理状态
|
||||
- 登记人
|
||||
- 登记时间
|
||||
|
||||
**筛选条件**:
|
||||
- 事件类型
|
||||
- 发生时间范围
|
||||
- 事件等级
|
||||
- 处理状态
|
||||
- 发生地点
|
||||
|
||||
#### 3.1.3 事件详情
|
||||
|
||||
**展示内容**:
|
||||
- 事件基本信息
|
||||
- 涉及罪犯列表
|
||||
- 事件经过
|
||||
- 处置情况
|
||||
- 附件列表
|
||||
- 处理记录时间线
|
||||
|
||||
### 3.2 预警信息管理
|
||||
|
||||
#### 3.2.1 预警规则配置
|
||||
|
||||
**预警类型**:
|
||||
- 罪犯行为异常预警
|
||||
- 考核连续下滑预警
|
||||
- 消费异常预警
|
||||
- 风险评估预警
|
||||
- 余刑到期预警
|
||||
|
||||
**规则配置**:
|
||||
- 预警名称
|
||||
- 预警类型
|
||||
- 触发条件
|
||||
- 预警级别(一般/紧急/严重)
|
||||
- 通知对象
|
||||
- 通知方式
|
||||
|
||||
**示例规则**:
|
||||
```
|
||||
规则名称:消费异常预警
|
||||
触发条件:单日消费超过500元
|
||||
预警级别:一般
|
||||
通知对象:分监区长、狱政科长
|
||||
```
|
||||
|
||||
#### 3.2.2 预警触发
|
||||
|
||||
**触发机制**:
|
||||
- 定时检查(每日凌晨)
|
||||
- 实时触发(数据变更时)
|
||||
|
||||
**预警生成**:
|
||||
- 生成预警记录
|
||||
- 发送通知
|
||||
|
||||
#### 3.2.3 预警处理
|
||||
|
||||
**处理流程**:
|
||||
1. 接收预警通知
|
||||
2. 查看预警详情
|
||||
3. 填写处置措施
|
||||
4. 标记处理状态
|
||||
|
||||
**预警处理表单**:
|
||||
- 预警详情
|
||||
- 处置措施
|
||||
- 处置人
|
||||
- 处置时间
|
||||
|
||||
### 3.3 事件处理跟踪
|
||||
|
||||
#### 3.3.1 处理流程
|
||||
|
||||
**流程节点**:
|
||||
- 登记 → 审核 → 处置 → 结案
|
||||
|
||||
**状态流转**:
|
||||
```
|
||||
登记(待审核) → 审核(处理中) → 处置(已完成) → 结案
|
||||
↓
|
||||
退回修改
|
||||
```
|
||||
|
||||
#### 3.3.2 跟踪记录
|
||||
|
||||
**时间线展示**:
|
||||
- 登记时间
|
||||
- 审核时间
|
||||
- 处置时间
|
||||
- 结案时间
|
||||
- 各节点操作人
|
||||
|
||||
### 3.4 应急预案管理(P2)
|
||||
|
||||
#### 3.4.1 预案库
|
||||
|
||||
**预案分类**:
|
||||
- 突发事件预案
|
||||
- 安全事故预案
|
||||
- 医疗急救预案
|
||||
- 舆情应对预案
|
||||
|
||||
#### 3.4.2 预案管理
|
||||
|
||||
**功能**:
|
||||
- 预案新增/编辑/删除
|
||||
- 预案分类管理
|
||||
- 预案启用/停用
|
||||
- 预案演练记录
|
||||
|
||||
## 四、业务规则汇总
|
||||
|
||||
| 规则编号 | 规则描述 |
|
||||
|---------|---------|
|
||||
| BR-001 | 重大事件需要多人审核 |
|
||||
| BR-002 | 预警处理有时限要求 |
|
||||
| BR-003 | 事件处理记录不可删除 |
|
||||
| BR-004 | 涉及罪犯需要权限验证 |
|
||||
| BR-005 | 附件上传有大小限制 |
|
||||
|
||||
## 五、验收标准
|
||||
|
||||
- [ ] 支持事件登记
|
||||
- [ ] 支持事件列表查询
|
||||
- [ ] 支持事件详情查看
|
||||
- [ ] 支持预警规则配置
|
||||
- [ ] 支持预警触发
|
||||
- [ ] 支持预警处理
|
||||
- [ ] 支持事件处理流程跟踪
|
||||
- [ ] 支持事件状态流转
|
||||
|
||||
## 六、相关模块
|
||||
|
||||
- 依赖:狱政信息管理模块(罪犯数据)
|
||||
- 依赖:消费管理模块(消费预警)
|
||||
- 依赖:计分考核模块(考核预警)
|
||||
|
||||
---
|
||||
|
||||
**创建日期**:2026-01-14
|
||||
**版本**:v1.0
|
||||
207
requirements/需求-07-危险评估.md
Normal file
207
requirements/需求-07-危险评估.md
Normal file
@ -0,0 +1,207 @@
|
||||
# 需求-07-危险评估
|
||||
|
||||
> 模块名称:危险评估
|
||||
> 优先级:P1
|
||||
> 预估工时:22h
|
||||
|
||||
---
|
||||
|
||||
## 一、业务背景
|
||||
|
||||
危险评估是对罪犯进行风险评估的系统,通过专业评估确定罪犯的风险等级,为管理决策提供依据。
|
||||
|
||||
## 二、用户故事
|
||||
|
||||
| 角色 | 故事描述 | 优先级 |
|
||||
|-----|---------|-------|
|
||||
| 心理辅导员 | 作为心理辅导员,我希望配置评估问卷,这样评估维度全面 | P1 |
|
||||
| 心理辅导员 | 作为心理辅导员,我希望为罪犯做危险评估,这样确定风险等级 | P1 |
|
||||
| 心理辅导员 | 作为心理辅导员,我希望系统自动计算风险值,这样提高效率 | P1 |
|
||||
| 狱政科长 | 作为狱政科长,我希望看到风险等级划分结果,这样合理配置警力 | P1 |
|
||||
| 心理辅导员 | 作为心理辅导员,我希望有定期复评提醒,这样及时更新评估 | P1 |
|
||||
|
||||
## 三、功能需求
|
||||
|
||||
### 3.1 评估问卷配置
|
||||
|
||||
#### 3.1.1 评估维度
|
||||
|
||||
**标准评估维度**:
|
||||
- 犯罪史评估
|
||||
- 家庭背景评估
|
||||
- 社会支持评估
|
||||
- 心理状态评估
|
||||
- 行为表现评估
|
||||
- 改造态度评估
|
||||
|
||||
#### 3.1.2 评估问卷
|
||||
|
||||
**评估类型**:
|
||||
- 入监评估(新入监罪犯)
|
||||
- 定期评估(在押罪犯定期评估)
|
||||
- 出监评估(释放前评估)
|
||||
- 专项评估(针对特定情况)
|
||||
|
||||
**问卷结构**:
|
||||
- 评估基本信息
|
||||
- 各维度题目
|
||||
- 风险因素清单
|
||||
- 管控措施建议
|
||||
|
||||
### 3.2 危险评估录入
|
||||
|
||||
#### 3.2.1 创建评估
|
||||
|
||||
**评估类型选择**:
|
||||
- 入监评估
|
||||
- 定期评估(月度/季度/年度)
|
||||
- 出监评估
|
||||
- 专项评估
|
||||
|
||||
**罪犯选择**:
|
||||
- 支持搜索罪犯
|
||||
- 显示基本信息
|
||||
|
||||
#### 3.2.2 填写评估
|
||||
|
||||
**评估内容**:
|
||||
- 各维度题目作答
|
||||
- 风险因素勾选
|
||||
- 管控措施填写
|
||||
- 评估人意见
|
||||
|
||||
**风险因素选项**(示例):
|
||||
- 有脱逃倾向
|
||||
- 有暴力倾向
|
||||
- 有自杀倾向
|
||||
- 近期情绪异常
|
||||
- 家庭变故
|
||||
- 与他犯有矛盾
|
||||
- 其他
|
||||
|
||||
**管控措施选项**(示例):
|
||||
- 列为重点关注
|
||||
- 调整监管等级
|
||||
- 增加巡查频次
|
||||
- 安排心理疏导
|
||||
- 调整监区
|
||||
- 其他
|
||||
|
||||
### 3.3 风险计算引擎
|
||||
|
||||
#### 3.3.1 计算规则
|
||||
|
||||
**风险分值计算**:
|
||||
- 各维度题目得分累加
|
||||
- 风险因素加权
|
||||
- 最终得出风险总分
|
||||
|
||||
**风险分值范围**:0-100分
|
||||
|
||||
#### 3.3.2 风险等级划分
|
||||
|
||||
**等级划分标准**(可配置):
|
||||
|
||||
| 风险等级 | 分值范围 | 说明 |
|
||||
|---------|---------|-----|
|
||||
| 高风险 | ≥70分 | 需要重点关注和管控 |
|
||||
| 中风险 | 40-69分 | 需要一般关注 |
|
||||
| 低风险 | <40分 | 正常管理 |
|
||||
|
||||
**等级颜色标识**:
|
||||
- 高风险:红色
|
||||
- 中风险:橙色
|
||||
- 低风险:绿色
|
||||
|
||||
### 3.4 评估结果管理
|
||||
|
||||
#### 3.4.1 评估记录
|
||||
|
||||
**列表字段**:
|
||||
- 评估编号
|
||||
- 罪犯姓名/编号
|
||||
- 评估类型
|
||||
- 评估日期
|
||||
- 风险等级
|
||||
- 风险分值
|
||||
- 评估人
|
||||
- 状态(有效/过期)
|
||||
|
||||
#### 3.4.2 评估详情
|
||||
|
||||
**展示内容**:
|
||||
- 评估基本信息
|
||||
- 各维度得分详情
|
||||
- 风险因素
|
||||
- 管控措施
|
||||
- 历史评估对比
|
||||
|
||||
### 3.5 定期复评提醒
|
||||
|
||||
#### 3.5.1 复评周期配置
|
||||
|
||||
**默认周期**:
|
||||
- 高风险:每月复评
|
||||
- 中风险:每季度复评
|
||||
- 低风险:每半年复评
|
||||
|
||||
**可按罪犯调整**:
|
||||
|
||||
#### 3.5.2 提醒机制
|
||||
|
||||
**触发时机**:
|
||||
- 临近复评日期提前提醒(可配置天数)
|
||||
- 超过复评日期未复评提醒
|
||||
|
||||
**通知方式**:
|
||||
- 系统消息提醒
|
||||
- 站内通知
|
||||
|
||||
### 3.6 历史评估对比
|
||||
|
||||
#### 3.6.1 对比展示
|
||||
|
||||
**对比维度**:
|
||||
- 风险分值趋势
|
||||
- 风险等级变化
|
||||
- 各维度得分对比
|
||||
|
||||
#### 3.6.2 趋势分析
|
||||
|
||||
**图表展示**:
|
||||
- 折线图:风险分值趋势
|
||||
- 柱状图:各维度得分对比
|
||||
|
||||
## 四、业务规则汇总
|
||||
|
||||
| 规则编号 | 规则描述 |
|
||||
|---------|---------|
|
||||
| BR-001 | 入监评估必须在入监后7天内完成 |
|
||||
| BR-002 | 高风险罪犯必须每月复评 |
|
||||
| BR-003 | 风险等级变更需要审批 |
|
||||
| BR-004 | 评估记录不可删除 |
|
||||
| BR-005 | 评估有效期根据风险等级自动计算 |
|
||||
|
||||
## 五、验收标准
|
||||
|
||||
- [ ] 支持评估问卷配置
|
||||
- [ ] 支持评估维度管理
|
||||
- [ ] 支持创建评估任务
|
||||
- [ ] 支持评估内容填写
|
||||
- [ ] 支持风险分值自动计算
|
||||
- [ ] 支持风险等级自动划分
|
||||
- [ ] 支持评估记录查询
|
||||
- [ ] 支持评估详情查看
|
||||
- [ ] 支持定期复评提醒
|
||||
- [ ] 支持历史评估对比
|
||||
|
||||
## 六、相关模块
|
||||
|
||||
- 依赖:测评问卷管理模块(问卷基础)
|
||||
- 依赖:狱政信息管理模块(罪犯数据)
|
||||
- 被依赖:狱政信息管理模块(风险等级引用)
|
||||
|
||||
---
|
||||
|
||||
**创建日期**:2026-01-14
|
||||
**版本**:v1.0
|
||||
205
requirements/需求-08-消费系统.md
Normal file
205
requirements/需求-08-消费系统.md
Normal file
@ -0,0 +1,205 @@
|
||||
# 需求-08-消费系统
|
||||
|
||||
> 模块名称:消费系统
|
||||
> 优先级:P1
|
||||
> 预估工时:18h
|
||||
|
||||
---
|
||||
|
||||
## 一、业务背景
|
||||
|
||||
消费系统管理罪犯的账户余额、消费记录和存款,是保障罪犯日常生活和规范消费行为的重要模块。
|
||||
|
||||
## 二、用户故事
|
||||
|
||||
| 角色 | 故事描述 | 优先级 |
|
||||
|-----|---------|-------|
|
||||
| 生活卫生科长 | 作为生活卫生科长,我希望管理罪犯账户余额,这样掌握消费情况 | P1 |
|
||||
| 家属 | 作为罪犯家属,我希望给罪犯存款,这样罪犯有钱花 | P1 |
|
||||
| 罪犯 | 作为罪犯,我希望查询自己的消费记录,这样我知道钱花哪了 | P1 |
|
||||
| 狱政科长 | 作为狱政科长,我希望设置消费限额,这样控制过度消费 | P1 |
|
||||
| 管理员 | 作为管理员,我希望分析消费数据,这样发现异常消费 | P1 |
|
||||
|
||||
## 三、功能需求
|
||||
|
||||
### 3.1 账户管理
|
||||
|
||||
#### 3.1.1 账户查询
|
||||
|
||||
**查询条件**:
|
||||
- 罪犯姓名/编号
|
||||
- 监区/分监区
|
||||
- 账户状态(正常/冻结)
|
||||
|
||||
**列表字段**:
|
||||
- 罪犯编号、姓名
|
||||
- 监区/分监区
|
||||
- 账户余额
|
||||
- 累计存款
|
||||
- 累计消费
|
||||
- 账户状态
|
||||
- 开户时间
|
||||
|
||||
#### 3.1.2 账户详情
|
||||
|
||||
**展示内容**:
|
||||
- 罪犯基本信息
|
||||
- 账户信息(余额、状态)
|
||||
- 存款记录(最近10笔)
|
||||
- 消费记录(最近10笔)
|
||||
- 月度消费统计
|
||||
|
||||
### 3.2 家属存款
|
||||
|
||||
#### 3.2.1 存款登记
|
||||
|
||||
**表单字段**:
|
||||
- 罪犯选择(支持搜索)
|
||||
- 存款金额(必填)
|
||||
- 存款人姓名
|
||||
- 存款人关系
|
||||
- 联系方式
|
||||
- 备注
|
||||
|
||||
**存款方式**:
|
||||
- 现场存款(家属到窗口)
|
||||
- 银行转账(系统对接银行)
|
||||
- 线上支付(微信/支付宝)
|
||||
|
||||
**到账确认**:
|
||||
- 线下存款需工作人员确认
|
||||
- 系统存款自动到账
|
||||
|
||||
#### 3.2.2 存款记录
|
||||
|
||||
**列表字段**:
|
||||
- 记录编号
|
||||
- 罪犯姓名/编号
|
||||
- 存款金额
|
||||
- 存款人
|
||||
- 存款方式
|
||||
- 存款时间
|
||||
- 状态(待确认/已到账/已取消)
|
||||
|
||||
### 3.3 消费记录
|
||||
|
||||
#### 3.3.1 消费类型
|
||||
|
||||
**消费类型**:
|
||||
- 购物消费(超市购物)
|
||||
- 餐饮消费(食堂)
|
||||
- 医疗消费(看病)
|
||||
- 通讯消费(电话费)
|
||||
- 其他消费
|
||||
|
||||
#### 3.3.2 消费查询
|
||||
|
||||
**查询条件**:
|
||||
- 罪犯姓名/编号
|
||||
- 消费类型
|
||||
- 消费时间范围
|
||||
- 监区
|
||||
|
||||
**列表字段**:
|
||||
- 订单编号
|
||||
- 罪犯姓名/编号
|
||||
- 消费类型
|
||||
- 消费金额
|
||||
- 商品名称
|
||||
- 消费时间
|
||||
- 账户余额(消费后)
|
||||
|
||||
#### 3.3.3 消费详情
|
||||
|
||||
**展示内容**:
|
||||
- 订单信息
|
||||
- 商品列表
|
||||
- 金额明细
|
||||
- 消费时间
|
||||
- 操作人
|
||||
|
||||
### 3.4 消费限额
|
||||
|
||||
#### 3.4.1 全局限额配置
|
||||
|
||||
**配置项**:
|
||||
- 日消费限额
|
||||
- 月消费限额
|
||||
- 单笔消费限额
|
||||
- 特殊商品限制
|
||||
|
||||
**默认限额**:
|
||||
- 日限额:50元
|
||||
- 月限额:500元
|
||||
- 单笔限额:100元
|
||||
|
||||
#### 3.4.2 个体限额配置
|
||||
|
||||
**按罪犯设置**:
|
||||
- 单独设置限额
|
||||
- 按监管等级设置
|
||||
- 按风险等级设置
|
||||
|
||||
**限额类型**:
|
||||
- 宽管级:标准限额的120%
|
||||
- 普管级:标准限额
|
||||
- 严管级:标准限额的60%
|
||||
- 考察级:最低保障
|
||||
|
||||
### 3.5 消费统计分析
|
||||
|
||||
#### 3.5.1 统计维度
|
||||
|
||||
**统计报表**:
|
||||
- 日消费统计
|
||||
- 月消费统计
|
||||
- 人均消费统计
|
||||
- 监区消费排名
|
||||
- 商品销售排行
|
||||
|
||||
#### 3.5.2 异常检测
|
||||
|
||||
**异常规则**:
|
||||
- 单日消费超过日限额
|
||||
- 单月消费超过月限额
|
||||
- 消费频率异常(短时间内多次消费)
|
||||
|
||||
**异常处理**:
|
||||
- 超出限额时拦截
|
||||
- 生成异常预警
|
||||
- 通知管理人员
|
||||
|
||||
## 四、业务规则汇总
|
||||
|
||||
| 规则编号 | 规则描述 |
|
||||
|---------|---------|
|
||||
| BR-001 | 罪犯账户余额不能为负数 |
|
||||
| BR-002 | 消费金额不能超过账户余额 |
|
||||
| BR-003 | 消费金额不能超过单笔限额 |
|
||||
| BR-004 | 累计消费不能超过日/月限额 |
|
||||
| BR-005 | 存款需校验金额格式 |
|
||||
| BR-006 | 严管级罪犯消费限额更低 |
|
||||
| BR-007 | 消费记录不可删除 |
|
||||
|
||||
## 五、验收标准
|
||||
|
||||
- [ ] 支持账户查询
|
||||
- [ ] 支持账户详情查看
|
||||
- [ ] 支持存款登记
|
||||
- [ ] 支持存款记录查询
|
||||
- [ ] 支持消费记录查询
|
||||
- [ ] 支持消费限额配置
|
||||
- [ ] 支持个体限额设置
|
||||
- [ ] 支持消费统计分析
|
||||
- [ ] 支持异常消费预警
|
||||
|
||||
## 六、相关模块
|
||||
|
||||
- 依赖:狱政信息管理模块(罪犯数据)
|
||||
- 依赖:监区管理模块(监区数据)
|
||||
- 被依赖:数据分析模块(消费数据引用)
|
||||
|
||||
---
|
||||
|
||||
**创建日期**:2026-01-14
|
||||
**版本**:v1.0
|
||||
228
requirements/需求-09-数据汇总.md
Normal file
228
requirements/需求-09-数据汇总.md
Normal file
@ -0,0 +1,228 @@
|
||||
# 需求-09-数据汇总
|
||||
|
||||
> 模块名称:数据汇总
|
||||
> 优先级:P1
|
||||
> 预估工时:20h
|
||||
|
||||
---
|
||||
|
||||
## 一、业务背景
|
||||
|
||||
数据汇总模块提供各类统计报表和分析图表,帮助管理层全面了解监狱运行状况。
|
||||
|
||||
## 二、用户故事
|
||||
|
||||
| 角色 | 故事描述 | 优先级 |
|
||||
|-----|---------|-------|
|
||||
| 监狱长 | 作为监狱长,我希望看到在册罪犯统计,这样了解整体规模 | P1 |
|
||||
| 教导员 | 作为教导员,我希望看到押犯构成分析,这样了解罪犯特点 | P1 |
|
||||
| 考核干事 | 作为考核干事,我希望看到考核统计报表,这样了解整体改造情况 | P1 |
|
||||
| 生活科长 | 作为生活科长,我希望看到消费统计,这样了解消费水平 | P1 |
|
||||
| 教育科长 | 作为教育科长,我希望看到评估统计,这样了解测评情况 | P1 |
|
||||
|
||||
## 三、功能需求
|
||||
|
||||
### 3.1 人口统计分析
|
||||
|
||||
#### 3.1.1 在册统计
|
||||
|
||||
**统计指标**:
|
||||
- 当前在册总数
|
||||
- 本月新收数量
|
||||
- 本月释放数量
|
||||
- 本月移交数量
|
||||
- 本月死亡数量
|
||||
|
||||
**时间维度**:
|
||||
- 日统计
|
||||
- 月统计
|
||||
- 年统计
|
||||
|
||||
#### 3.1.2 动态统计
|
||||
|
||||
**统计图表**:
|
||||
- 折线图:在册人数趋势
|
||||
- 柱状图:月度收押/释放对比
|
||||
|
||||
### 3.2 押犯构成分析
|
||||
|
||||
#### 3.2.1 年龄分布
|
||||
|
||||
**年龄段**:
|
||||
- 未成年(≤17)
|
||||
- 青年(18-30)
|
||||
- 中年(31-50)
|
||||
- 老年(51-60)
|
||||
- 老龄(60+)
|
||||
|
||||
**展示形式**:
|
||||
- 饼图:年龄占比
|
||||
- 柱状图:各年龄段人数
|
||||
|
||||
#### 3.2.2 刑期分布
|
||||
|
||||
**刑期段**:
|
||||
- 短刑(≤3年)
|
||||
- 中刑(3-10年)
|
||||
- 长刑(10年以上)
|
||||
- 无期
|
||||
- 死缓
|
||||
|
||||
**展示形式**:饼图
|
||||
|
||||
#### 3.2.3 罪名分布
|
||||
|
||||
**分类**:
|
||||
- 暴力型(故意杀人、故意伤害、抢劫等)
|
||||
- 财产型(盗窃、诈骗、抢夺等)
|
||||
- 淫欲型(强奸、猥亵等)
|
||||
- 涉毒型(贩毒、吸毒等)
|
||||
- 涉黑涉恶型
|
||||
- 其他
|
||||
|
||||
**展示形式**:柱状图
|
||||
|
||||
#### 3.2.4 其他维度
|
||||
|
||||
**文化程度分布**:饼图
|
||||
**民族分布**:饼图
|
||||
**籍贯分布**:地图热力图
|
||||
|
||||
### 3.3 考核统计报表
|
||||
|
||||
#### 3.3.1 分数分布
|
||||
|
||||
**统计维度**:
|
||||
- 各分数段人数
|
||||
- 平均分
|
||||
- 最高分/最低分
|
||||
|
||||
**展示形式**:
|
||||
- 柱状图:分数分布
|
||||
- 表格:统计数据
|
||||
|
||||
#### 3.3.2 等级分布
|
||||
|
||||
**考核等级**:
|
||||
- 优秀人数/占比
|
||||
- 良好人数/占比
|
||||
- 合格人数/占比
|
||||
- 不合格人数/占比
|
||||
|
||||
**展示形式**:饼图
|
||||
|
||||
#### 3.3.3 月度趋势
|
||||
|
||||
**趋势分析**:
|
||||
- 月度平均分趋势
|
||||
- 各等级占比趋势
|
||||
|
||||
**展示形式**:折线图
|
||||
|
||||
### 3.4 消费统计报表
|
||||
|
||||
#### 3.4.1 消费金额统计
|
||||
|
||||
**统计指标**:
|
||||
- 总消费金额
|
||||
- 人均消费金额
|
||||
- 日均消费金额
|
||||
- 消费总额趋势
|
||||
|
||||
#### 3.4.2 消费类型分布
|
||||
|
||||
**类型占比**:
|
||||
- 超市购物
|
||||
- 餐饮消费
|
||||
- 医疗消费
|
||||
- 通讯消费
|
||||
- 其他
|
||||
|
||||
**展示形式**:饼图
|
||||
|
||||
#### 3.4.3 监区消费排名
|
||||
|
||||
**排名维度**:
|
||||
- 人均消费排名
|
||||
- 消费总额排名
|
||||
- 月环比增长排名
|
||||
|
||||
**展示形式**:排行榜表格
|
||||
|
||||
### 3.5 评估统计报表
|
||||
|
||||
#### 3.5.1 测评完成率
|
||||
|
||||
**统计指标**:
|
||||
- 应测评人数
|
||||
- 已完成人数
|
||||
- 完成率
|
||||
- 待测评人数
|
||||
|
||||
#### 3.5.2 风险分布
|
||||
|
||||
**风险等级**:
|
||||
- 高风险人数/占比
|
||||
- 中风险人数/占比
|
||||
- 低风险人数/占比
|
||||
|
||||
**展示形式**:饼图
|
||||
|
||||
#### 3.5.3 评估趋势
|
||||
|
||||
**趋势分析**:
|
||||
- 高风险占比趋势
|
||||
- 测评覆盖率趋势
|
||||
|
||||
### 3.6 综合报表
|
||||
|
||||
#### 3.6.1 监狱运行月报
|
||||
|
||||
**报告内容**:
|
||||
- 在押犯情况
|
||||
- 收押释放情况
|
||||
- 考核情况
|
||||
- 消费情况
|
||||
- 测评情况
|
||||
- 重点关注事项
|
||||
|
||||
#### 3.6.2 自定义报表
|
||||
|
||||
**功能**:
|
||||
- 选择统计指标
|
||||
- 选择时间范围
|
||||
- 选择统计维度
|
||||
- 生成报表
|
||||
|
||||
## 四、业务规则汇总
|
||||
|
||||
| 规则编号 | 规则描述 |
|
||||
|---------|---------|
|
||||
| BR-001 | 统计数据实时更新 |
|
||||
| BR-002 | 支持按时间范围筛选 |
|
||||
| BR-003 | 支持按监区筛选 |
|
||||
| BR-004 | 报表支持导出(Excel/PDF) |
|
||||
| BR-005 | 敏感数据脱敏展示 |
|
||||
|
||||
## 五、验收标准
|
||||
|
||||
- [ ] 支持人口统计分析
|
||||
- [ ] 支持押犯构成分析(年龄/刑期/罪名)
|
||||
- [ ] 支持考核统计报表
|
||||
- [ ] 支持消费统计报表
|
||||
- [ ] 支持评估统计报表
|
||||
- [ ] 支持综合报表生成
|
||||
- [ ] 支持数据导出
|
||||
- [ ] 支持图表交互(筛选、导出)
|
||||
|
||||
## 六、相关模块
|
||||
|
||||
- 依赖:狱政信息管理模块(人口数据)
|
||||
- 依赖:计分考核模块(考核数据)
|
||||
- 依赖:消费管理模块(消费数据)
|
||||
- 依赖:测评管理模块(评估数据)
|
||||
|
||||
---
|
||||
|
||||
**创建日期**:2026-01-14
|
||||
**版本**:v1.0
|
||||
226
requirements/需求-10-评估报告.md
Normal file
226
requirements/需求-10-评估报告.md
Normal file
@ -0,0 +1,226 @@
|
||||
# 需求-10-评估报告
|
||||
|
||||
> 模块名称:评估报告
|
||||
> 优先级:P1
|
||||
> 预估工时:20h
|
||||
|
||||
---
|
||||
|
||||
## 一、业务背景
|
||||
|
||||
评估报告模块用于生成罪犯的综合评估报告,为减刑假释、处遇调整等决策提供依据。
|
||||
|
||||
## 二、用户故事
|
||||
|
||||
| 角色 | 故事描述 | 优先级 |
|
||||
|-----|---------|-------|
|
||||
| 心理辅导员 | 作为心理辅导员,我希望有报告模板,这样统一报告格式 | P1 |
|
||||
| 心理辅导员 | 作为心理辅导员,我希望根据评估数据生成报告,这样提高效率 | P1 |
|
||||
| 监狱长 | 作为监狱长,我希望预览报告内容,这样审核报告 | P1 |
|
||||
| 刑罚执行科 | 作为刑罚执行科,我希望下载报告用于呈报,这样准备减刑材料 | P1 |
|
||||
| 教育科长 | 作为教育科长,我希望审核报告,这样确保报告准确 | P1 |
|
||||
|
||||
## 三、功能需求
|
||||
|
||||
### 3.1 报告模板管理
|
||||
|
||||
#### 3.1.1 模板分类
|
||||
|
||||
**模板类型**:
|
||||
- 入监综合评估报告
|
||||
- 定期考核报告
|
||||
- 出监评估报告
|
||||
- 减刑假释建议报告
|
||||
- 专项评估报告
|
||||
|
||||
#### 3.1.2 模板配置
|
||||
|
||||
**模板内容**:
|
||||
- 模板名称
|
||||
- 模板类型
|
||||
- 报告标题格式
|
||||
- 章节结构
|
||||
- 数据字段映射
|
||||
- 样式配置
|
||||
|
||||
**章节结构示例**:
|
||||
```
|
||||
一、基本信息
|
||||
- 罪犯姓名、编号、入狱日期等
|
||||
|
||||
二、犯罪及刑罚情况
|
||||
- 罪名、刑期、判决情况等
|
||||
|
||||
三、改造表现
|
||||
- 考核得分、等级
|
||||
- 表扬/处分记录
|
||||
|
||||
四、心理评估
|
||||
- 测评结果
|
||||
- 风险等级
|
||||
|
||||
五、管教意见
|
||||
- 改造评价
|
||||
- 建议意见
|
||||
|
||||
六、附件
|
||||
- 相关证明材料
|
||||
```
|
||||
|
||||
#### 3.1.3 模板操作
|
||||
|
||||
**功能**:
|
||||
- 新增模板
|
||||
- 编辑模板
|
||||
- 复制模板
|
||||
- 启用/停用模板
|
||||
- 设为默认
|
||||
|
||||
### 3.2 报告生成
|
||||
|
||||
#### 3.2.1 创建报告
|
||||
|
||||
**创建方式**:
|
||||
- 手动创建:选择罪犯 + 选择模板
|
||||
- 自动创建:批量生成多个罪犯的报告
|
||||
|
||||
**生成流程**:
|
||||
1. 选择罪犯
|
||||
2. 选择报告模板
|
||||
3. 设置报告日期范围
|
||||
4. 系统自动填充数据
|
||||
5. 生成报告预览
|
||||
|
||||
#### 3.2.2 数据填充
|
||||
|
||||
**自动填充内容**:
|
||||
- 罪犯基本信息(从狱政模块获取)
|
||||
- 考核数据(从计分考核模块获取)
|
||||
- 测评数据(从测评模块获取)
|
||||
- 风险评估数据(从危险评估模块获取)
|
||||
- 消费数据(从消费模块获取)
|
||||
|
||||
**手动补充内容**:
|
||||
- 管教意见
|
||||
- 建议结论
|
||||
- 附件上传
|
||||
|
||||
### 3.3 报告预览
|
||||
|
||||
#### 3.3.1 在线预览
|
||||
|
||||
**展示内容**:
|
||||
- 报告标题
|
||||
- 报告生成时间
|
||||
- 完整报告内容(分章节展示)
|
||||
- 附件列表
|
||||
|
||||
**交互功能**:
|
||||
- 章节导航
|
||||
- 缩放控制
|
||||
- 打印预览
|
||||
|
||||
#### 3.3.2 报告编辑
|
||||
|
||||
**可编辑内容**:
|
||||
- 管教意见
|
||||
- 建议结论
|
||||
- 附件管理
|
||||
|
||||
**不可编辑内容**:
|
||||
- 系统自动填充的数据
|
||||
|
||||
### 3.4 报告审核
|
||||
|
||||
#### 3.4.1 审核流程
|
||||
|
||||
**流程节点**:
|
||||
- 起草 → 审核 → 发布
|
||||
|
||||
**审核权限**:
|
||||
- 起草人:创建、编辑
|
||||
- 审核人:审核通过/退回
|
||||
- 发布人:发布归档
|
||||
|
||||
#### 3.4.2 审核操作
|
||||
|
||||
**通过**:
|
||||
- 状态变为"已审核"
|
||||
- 记录审核人和时间
|
||||
|
||||
**退回**:
|
||||
- 状态变为"已退回"
|
||||
- 填写退回原因
|
||||
- 返回起草人修改
|
||||
|
||||
### 3.5 报告下载
|
||||
|
||||
#### 3.5.1 导出格式
|
||||
|
||||
**支持格式**:
|
||||
- PDF(推荐)
|
||||
- Word
|
||||
- Excel(数据表格)
|
||||
|
||||
#### 3.5.2 下载操作
|
||||
|
||||
**功能**:
|
||||
- 单个下载
|
||||
- 批量下载
|
||||
- 批量打包下载
|
||||
|
||||
### 3.6 报告归档
|
||||
|
||||
#### 3.6.1 归档管理
|
||||
|
||||
**归档条件**:
|
||||
- 已审核的报告
|
||||
- 超过一定时间的报告
|
||||
|
||||
**归档操作**:
|
||||
- 标记已归档
|
||||
- 移至归档列表
|
||||
- 归档后不可修改
|
||||
|
||||
#### 3.6.2 归档查询
|
||||
|
||||
**查询条件**:
|
||||
- 归档时间范围
|
||||
- 报告类型
|
||||
- 罪犯信息
|
||||
|
||||
## 四、业务规则汇总
|
||||
|
||||
| 规则编号 | 规则描述 |
|
||||
|---------|---------|
|
||||
| BR-001 | 报告编号全局唯一 |
|
||||
| BR-002 | 已发布的报告不能修改 |
|
||||
| BR-003 | 报告数据取自源系统,保证一致性 |
|
||||
| BR-004 | 报告需要审核后才能下载 |
|
||||
| BR-005 | 归档报告不可删除 |
|
||||
| BR-006 | 敏感信息在报告中脱敏 |
|
||||
|
||||
## 五、验收标准
|
||||
|
||||
- [ ] 支持报告模板管理
|
||||
- [ ] 支持创建报告
|
||||
- [ ] 支持数据自动填充
|
||||
- [ ] 支持报告预览
|
||||
- [ ] 支持报告编辑
|
||||
- [ ] 支持报告审核流程
|
||||
- [ ] 支持报告下载(PDF/Word)
|
||||
- [ ] 支持报告归档
|
||||
- [ ] 支持批量生成报告
|
||||
|
||||
## 六、相关模块
|
||||
|
||||
- 依赖:狱政信息管理模块(罪犯数据)
|
||||
- 依赖:计分考核模块(考核数据)
|
||||
- 依赖:测评管理模块(测评数据)
|
||||
- 依赖:危险评估模块(风险数据)
|
||||
- 依赖:消费管理模块(消费数据)
|
||||
|
||||
---
|
||||
|
||||
**创建日期**:2026-01-14
|
||||
**版本**:v1.0
|
||||
157
requirements/需求-11-智能预警.md
Normal file
157
requirements/需求-11-智能预警.md
Normal file
@ -0,0 +1,157 @@
|
||||
# 需求-11-智能预警
|
||||
|
||||
> 模块名称:智能预警
|
||||
> 优先级:P2
|
||||
> 预估工时:32h
|
||||
|
||||
---
|
||||
|
||||
## 一、业务背景
|
||||
|
||||
智能预警系统通过分析罪犯的行为数据,自动发现异常模式和潜在风险,提前预警。
|
||||
|
||||
## 二、用户故事
|
||||
|
||||
| 角色 | 故事描述 | 优先级 |
|
||||
|-----|---------|-------|
|
||||
| 心理辅导员 | 作为心理辅导员,我希望系统发现异常行为模式,这样及时干预 | P2 |
|
||||
| 狱政科长 | 作为狱政科长,我希望消费异常有预警,这样防止过度消费 | P2 |
|
||||
| 分监区长 | 作为分监区长,我希望考核下滑有预警,这样关注重点人员 | P2 |
|
||||
| 管理员 | 作为管理员,我希望有风险预测模型,这样提前识别高风险罪犯 | P2 |
|
||||
|
||||
## 三、功能需求
|
||||
|
||||
### 3.1 行为异常检测
|
||||
|
||||
#### 3.1.1 行为模式分析
|
||||
|
||||
**分析维度**:
|
||||
- 考核得分趋势
|
||||
- 消费行为模式
|
||||
- 人际交往情况
|
||||
- 情绪表达特征
|
||||
|
||||
**检测规则**:
|
||||
- 考核连续下滑(连续3个月下降)
|
||||
- 消费突然增加(较历史均值增加50%)
|
||||
- 社交圈变化(突然接触新群体)
|
||||
- 情绪表达异常(测评分数突变)
|
||||
|
||||
#### 3.1.2 异常标记
|
||||
|
||||
**标记内容**:
|
||||
- 异常类型
|
||||
- 异常程度
|
||||
- 触发规则
|
||||
- 建议关注点
|
||||
|
||||
### 3.2 消费异常预警
|
||||
|
||||
#### 3.2.1 阈值预警
|
||||
|
||||
**预警规则**:
|
||||
- 单日消费超过设定阈值
|
||||
- 单月消费超过设定阈值
|
||||
- 消费频率异常(单日多次消费)
|
||||
|
||||
**预警触发**:
|
||||
- 超出阈值时生成预警
|
||||
- 通知相关管理人员
|
||||
|
||||
#### 3.2.2 模式预警
|
||||
|
||||
**分析规则**:
|
||||
- 与历史消费模式偏离
|
||||
- 与同监区平均消费偏离
|
||||
- 消费时间异常(非正常时段)
|
||||
|
||||
### 3.3 考核下滑预警
|
||||
|
||||
#### 3.3.1 趋势分析
|
||||
|
||||
**分析维度**:
|
||||
- 连续下降月数
|
||||
- 下降幅度
|
||||
- 下降原因推断
|
||||
|
||||
**预警规则**:
|
||||
- 连续2月下降超过10%
|
||||
- 连续3月下降
|
||||
- 考核等级降级
|
||||
|
||||
### 3.4 风险预测模型
|
||||
|
||||
#### 3.4.1 特征提取
|
||||
|
||||
**输入特征**:
|
||||
- 历史考核得分
|
||||
- 历史测评结果
|
||||
- 风险评估等级
|
||||
- 消费行为特征
|
||||
- 违规记录
|
||||
|
||||
#### 3.4.2 风险评分
|
||||
|
||||
**输出**:
|
||||
- 风险评分(0-100)
|
||||
- 风险等级(高/中/低)
|
||||
- 风险因素(哪些因素导致高分)
|
||||
|
||||
**模型说明**:
|
||||
- 基于历史数据训练的预测模型
|
||||
- 定期更新模型参数
|
||||
|
||||
### 3.5 预警通知
|
||||
|
||||
#### 3.5.1 通知方式
|
||||
|
||||
**通知渠道**:
|
||||
- 系统站内消息
|
||||
- 短信通知(预留接口)
|
||||
- 邮件通知(预留接口)
|
||||
|
||||
#### 3.5.2 通知配置
|
||||
|
||||
**配置项**:
|
||||
- 通知接收人
|
||||
- 通知方式
|
||||
- 通知时机(即时/汇总)
|
||||
- 通知频率
|
||||
|
||||
#### 3.5.3 预警汇总
|
||||
|
||||
**汇总报告**:
|
||||
- 每日预警汇总
|
||||
- 每周预警趋势
|
||||
- 高风险预警列表
|
||||
|
||||
## 四、业务规则汇总
|
||||
|
||||
| 规则编号 | 规则描述 |
|
||||
|---------|---------|
|
||||
| BR-001 | 预警产生后需要人工确认 |
|
||||
| BR-002 | 高风险预警必须24小时内处理 |
|
||||
| BR-003 | 预警记录不可删除 |
|
||||
| BR-004 | 预测模型定期更新 |
|
||||
| BR-005 | 误报率需要控制在合理范围 |
|
||||
|
||||
## 五、验收标准
|
||||
|
||||
- [ ] 支持行为异常检测
|
||||
- [ ] 支持消费异常预警
|
||||
- [ ] 支持考核下滑预警
|
||||
- [ ] 支持风险预测评分
|
||||
- [ ] 支持预警通知配置
|
||||
- [ ] 支持预警汇总报告
|
||||
- [ ] 预警准确率达到要求
|
||||
|
||||
## 六、相关模块
|
||||
|
||||
- 依赖:消费管理模块(消费数据)
|
||||
- 依赖:计分考核模块(考核数据)
|
||||
- 依赖:危险评估模块(风险数据)
|
||||
|
||||
---
|
||||
|
||||
**创建日期**:2026-01-14
|
||||
**版本**:v1.0
|
||||
182
requirements/需求-12-智能分析.md
Normal file
182
requirements/需求-12-智能分析.md
Normal file
@ -0,0 +1,182 @@
|
||||
# 需求-12-智能分析
|
||||
|
||||
> 模块名称:智能分析
|
||||
> 优先级:P2
|
||||
> 预估工时:22h
|
||||
|
||||
---
|
||||
|
||||
## 一、业务背景
|
||||
|
||||
智能分析模块提供深度数据分析和预测功能,帮助管理层发现规律、制定决策。
|
||||
|
||||
## 二、用户故事
|
||||
|
||||
| 角色 | 故事描述 | 优先级 |
|
||||
|-----|---------|-------|
|
||||
| 监狱长 | 作为监狱长,我希望系统自动生成分析报告,这样减少人工汇总 | P2 |
|
||||
| 教育科长 | 作为教育科长,我希望有趋势预测,这样制定教育计划 | P2 |
|
||||
| 心理辅导员 | 作为心理辅导员,我希望发现数据关联,这样针对性干预 | P2 |
|
||||
| 管理员 | 作为管理员,我希望有智能分析结果,这样辅助决策 | P2 |
|
||||
|
||||
## 三、功能需求
|
||||
|
||||
### 3.1 自动报表生成
|
||||
|
||||
#### 3.1.1 报告类型
|
||||
|
||||
**周期报告**:
|
||||
- 日报:每日运行情况
|
||||
- 周报:每周运行情况
|
||||
- 月报:每月运行情况
|
||||
- 年报:每年运行情况
|
||||
|
||||
**专题报告**:
|
||||
- 人口构成分析
|
||||
- 考核情况分析
|
||||
- 消费行为分析
|
||||
- 风险评估分析
|
||||
|
||||
#### 3.1.2 报告内容
|
||||
|
||||
**报告结构**:
|
||||
- 关键指标概览
|
||||
- 数据图表展示
|
||||
- 异常情况说明
|
||||
- 趋势分析
|
||||
- 建议措施
|
||||
|
||||
#### 3.1.3 自动生成
|
||||
|
||||
**生成机制**:
|
||||
- 定时生成(日/周/月/年)
|
||||
- 手动触发生成
|
||||
- 按模板生成
|
||||
|
||||
### 3.2 趋势预测
|
||||
|
||||
#### 3.2.1 人口预测
|
||||
|
||||
**预测维度**:
|
||||
- 在册人数趋势
|
||||
- 收押趋势
|
||||
- 释放趋势
|
||||
- 刑满释放预测
|
||||
|
||||
**预测周期**:
|
||||
- 短期预测(未来1个月)
|
||||
- 中期预测(未来3个月)
|
||||
- 长期预测(未来1年)
|
||||
|
||||
#### 3.2.2 考核趋势
|
||||
|
||||
**预测内容**:
|
||||
- 整体考核得分趋势
|
||||
- 优秀率趋势
|
||||
- 不合格率趋势
|
||||
|
||||
#### 3.2.3 风险趋势
|
||||
|
||||
**预测内容**:
|
||||
- 高风险占比趋势
|
||||
- 风险变化预测
|
||||
|
||||
### 3.3 关联分析
|
||||
|
||||
#### 3.3.1 因素关联
|
||||
|
||||
**分析维度**:
|
||||
- 刑期与考核表现关联
|
||||
- 年龄与风险等级关联
|
||||
- 消费与考核关联
|
||||
- 测评与违规关联
|
||||
|
||||
**分析方法**:
|
||||
- 相关性分析
|
||||
- 回归分析
|
||||
- 聚类分析
|
||||
|
||||
#### 3.3.2 异常发现
|
||||
|
||||
**发现规则**:
|
||||
- 偏离正常模式的数据点
|
||||
- 突然变化的数据趋势
|
||||
- 异常的数据分布
|
||||
|
||||
**展示方式**:
|
||||
- 异常标记
|
||||
- 异常说明
|
||||
- 可能原因分析
|
||||
|
||||
### 3.4 分析可视化
|
||||
|
||||
#### 3.4.1 图表类型
|
||||
|
||||
**基础图表**:
|
||||
- 折线图(趋势)
|
||||
- 柱状图(对比)
|
||||
- 饼图(占比)
|
||||
- 散点图(分布)
|
||||
- 雷达图(多维度)
|
||||
|
||||
**高级图表**:
|
||||
- 桑基图(流转分析)
|
||||
- 热力图(密度分布)
|
||||
- 关系图(关联分析)
|
||||
|
||||
#### 3.4.2 交互功能
|
||||
|
||||
**交互操作**:
|
||||
- 数据筛选
|
||||
- 时间范围选择
|
||||
- 维度切换
|
||||
- 图表联动
|
||||
- 数据钻取
|
||||
|
||||
### 3.5 分析报告导出
|
||||
|
||||
#### 3.5.1 导出格式
|
||||
|
||||
**支持格式**:
|
||||
- PDF(完整报告)
|
||||
- Word(文档报告)
|
||||
- Excel(数据表格)
|
||||
- PPT(演示文稿)
|
||||
|
||||
#### 3.5.2 导出内容
|
||||
|
||||
**可导出内容**:
|
||||
- 分析报告全文
|
||||
- 图表图片
|
||||
- 原始数据
|
||||
- 分析结论
|
||||
|
||||
## 四、业务规则汇总
|
||||
|
||||
| 规则编号 | 规则描述 |
|
||||
|---------|---------|
|
||||
| BR-001 | 预测数据仅供参考 |
|
||||
| BR-002 | 分析结果需人工确认 |
|
||||
| BR-003 | 历史数据完整才能做趋势分析 |
|
||||
| BR-004 | 敏感分析结果需要权限控制 |
|
||||
| BR-005 | 预测模型定期校验 |
|
||||
|
||||
## 五、验收标准
|
||||
|
||||
- [ ] 支持自动报表生成
|
||||
- [ ] 支持多种报告类型
|
||||
- [ ] 支持趋势预测
|
||||
- [ ] 支持关联分析
|
||||
- [ ] 支持可视化展示
|
||||
- [ ] 支持报告导出
|
||||
- [ ] 预测准确率达到要求
|
||||
|
||||
## 六、相关模块
|
||||
|
||||
- 依赖:所有业务模块(数据来源)
|
||||
- 被依赖:监管看板模块(可视化展示)
|
||||
|
||||
---
|
||||
|
||||
**创建日期**:2026-01-14
|
||||
**版本**:v1.0
|
||||
228
requirements/需求索引.md
Normal file
228
requirements/需求索引.md
Normal file
@ -0,0 +1,228 @@
|
||||
# XL监狱综合管理平台 - 需求索引
|
||||
|
||||
> 文档版本:v1.0
|
||||
> 创建日期:2026-01-14
|
||||
|
||||
---
|
||||
|
||||
## 一、需求总览
|
||||
|
||||
本项目共拆分为 **12个独立需求文档**,每个文档对应一个功能模块,可独立迭代。
|
||||
|
||||
```
|
||||
XL监狱综合管理平台
|
||||
│
|
||||
├── P0 - 核心功能
|
||||
│ ├── 需求-01-监管看板 (18h) ← 首页仪表盘
|
||||
│ ├── 需求-02-狱政信息管理 (24h) ← 罪犯全生命周期管理
|
||||
│ ├── 需求-03-计分考核 (24h) ← 考核规则与评分
|
||||
│ ├── 需求-04-测评问卷管理 (40h) ← 问卷模板CRUD
|
||||
│ └── 需求-05-测评执行与评分 (24h) ← 在线测评与评分
|
||||
│
|
||||
├── P1 - 重要功能
|
||||
│ ├── 需求-06-狱情平台 (22h) ← 事件记录与预警
|
||||
│ ├── 需求-07-危险评估 (22h) ← 风险评估
|
||||
│ ├── 需求-08-消费系统 (18h) ← 存款与消费
|
||||
│ ├── 需求-09-数据汇总 (20h) ← 统计分析报表
|
||||
│ └── 需求-10-评估报告 (20h) ← 报告生成与导出
|
||||
│
|
||||
└── P2 - 增值功能
|
||||
├── 需求-11-智能预警 (32h) ← 异常检测与预警
|
||||
└── 需求-12-智能分析 (22h) ← 趋势预测与关联分析
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 二、优先级矩阵
|
||||
|
||||
### P0 - 核心功能(必须完成)
|
||||
|
||||
| 序号 | 需求 | 名称 | 预估工时 | 依赖关系 |
|
||||
|-----|------|-----|---------|---------|
|
||||
| 1 | 需求-02 | 狱政信息管理 | 24h | 无(基础) |
|
||||
| 2 | 需求-03 | 计分考核 | 24h | 依赖需求-02 |
|
||||
| 3 | 需求-01 | 监管看板 | 18h | 依赖需求-02 |
|
||||
| 4 | 需求-04 | 测评问卷管理 | 40h | 无 |
|
||||
| 5 | 需求-05 | 测评执行与评分 | 24h | 依赖需求-04 |
|
||||
|
||||
**P0小计**:130h
|
||||
|
||||
### P1 - 重要功能(计划完成)
|
||||
|
||||
| 序号 | 需求 | 名称 | 预估工时 | 依赖关系 |
|
||||
|-----|------|-----|---------|---------|
|
||||
| 1 | 需求-06 | 狱情平台 | 22h | 依赖需求-02 |
|
||||
| 2 | 需求-07 | 危险评估 | 22h | 依赖需求-04, 需求-05 |
|
||||
| 3 | 需求-08 | 消费系统 | 18h | 依赖需求-02 |
|
||||
| 4 | 需求-09 | 数据汇总 | 20h | 依赖需求-02,03,05,07,08 |
|
||||
| 5 | 需求-10 | 评估报告 | 20h | 依赖需求-02,03,05,07,08 |
|
||||
|
||||
**P1小计**:102h
|
||||
|
||||
### P2 - 增值功能(选做)
|
||||
|
||||
| 序号 | 需求 | 名称 | 预估工时 | 依赖关系 |
|
||||
|-----|------|-----|---------|---------|
|
||||
| 1 | 需求-11 | 智能预警 | 32h | 依赖需求-02,03,07,08 |
|
||||
| 2 | 需求-12 | 智能分析 | 22h | 依赖所有模块 |
|
||||
|
||||
**P2小计**:54h
|
||||
|
||||
### 总工时
|
||||
|
||||
| 阶段 | 工时 |
|
||||
|-----|------|
|
||||
| P0 核心功能 | 130h |
|
||||
| P1 重要功能 | 102h |
|
||||
| P2 增值功能 | 54h |
|
||||
| **合计** | **286h** |
|
||||
|
||||
---
|
||||
|
||||
## 三、模块依赖关系
|
||||
|
||||
### 3.1 依赖图
|
||||
|
||||
```
|
||||
┌─────────────────┐
|
||||
│ 需求-02 狱政信息│
|
||||
│ (基础数据) │
|
||||
└────────┬────────┘
|
||||
│
|
||||
┌─────────────────┼─────────────────┐
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
||||
│需求-01看板 │ │需求-03考核 │ │需求-08消费 │
|
||||
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
|
||||
│ │ │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────┐ │
|
||||
│ │需求-04问卷 │ │
|
||||
│ └──────┬──────┘ │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ ┌─────────────┐ │
|
||||
│ │需求-05执行 │ │
|
||||
│ └──────┬──────┘ │
|
||||
│ │ │
|
||||
│ ┌──────────┼──────────┐ │
|
||||
│ │ │ │ │
|
||||
▼ ▼ ▼ ▼ ▼
|
||||
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
|
||||
│需求-06 │ │需求-07 │ │需求-09 │ │需求-10 │
|
||||
│狱情平台 │ │危险评估 │ │数据汇总 │ │评估报告 │
|
||||
└─────────┘ └────┬────┘ └─────────┘ └─────────┘
|
||||
│
|
||||
▼
|
||||
┌────────────────┐
|
||||
│ 需求-11 智能预警│
|
||||
└───────┬────────┘
|
||||
│
|
||||
▼
|
||||
┌────────────────┐
|
||||
│ 需求-12 智能分析│
|
||||
└────────────────┘
|
||||
```
|
||||
|
||||
### 3.2 依赖说明
|
||||
|
||||
| 模块 | 被依赖 | 依赖 |
|
||||
|-----|-------|------|
|
||||
| 需求-02 狱政信息管理 | 所有模块 | 无 |
|
||||
| 需求-01 监管看板 | 无 | 需求-02 |
|
||||
| 需求-03 计分考核 | 需求-09,10,11 | 需求-02 |
|
||||
| 需求-04 测评问卷管理 | 需求-05,07 | 无 |
|
||||
| 需求-05 测评执行 | 需求-07,09,10 | 需求-04 |
|
||||
| 需求-06 狱情平台 | 无 | 需求-02 |
|
||||
| 需求-07 危险评估 | 需求-09,10,11 | 需求-04,05 |
|
||||
| 需求-08 消费系统 | 需求-09,10,11 | 需求-02 |
|
||||
| 需求-09 数据汇总 | 无 | 需求-02,03,05,07,08 |
|
||||
| 需求-10 评估报告 | 无 | 需求-02,03,05,07,08 |
|
||||
| 需求-11 智能预警 | 无 | 需求-02,03,07,08 |
|
||||
| 需求-12 智能分析 | 无 | 所有模块 |
|
||||
|
||||
---
|
||||
|
||||
## 四、迭代建议
|
||||
|
||||
### 迭代顺序
|
||||
|
||||
```
|
||||
第1迭代:基础平台
|
||||
├── 需求-02 狱政信息管理(P0)
|
||||
└── 需求-03 计分考核(P0)
|
||||
|
||||
第2迭代:监管看板
|
||||
└── 需求-01 监管看板(P0)
|
||||
|
||||
第3迭代:测评模块
|
||||
├── 需求-04 测评问卷管理(P0)
|
||||
└── 需求-05 测评执行与评分(P0)
|
||||
|
||||
第4迭代:辅助功能
|
||||
├── 需求-06 狱情平台(P1)
|
||||
├── 需求-07 危险评估(P1)
|
||||
├── 需求-08 消费系统(P1)
|
||||
└── 需求-09 数据汇总(P1)
|
||||
|
||||
第5迭代:报告模块
|
||||
└── 需求-10 评估报告(P1)
|
||||
|
||||
第6迭代:智能功能
|
||||
├── 需求-11 智能预警(P2)
|
||||
└── 需求-12 智能分析(P2)
|
||||
```
|
||||
|
||||
### 每个迭代的工作量
|
||||
|
||||
| 迭代 | 内容 | 预估工时 |
|
||||
|-----|------|---------|
|
||||
| 第1迭代 | 狱政管理 + 计分考核 | 48h |
|
||||
| 第2迭代 | 监管看板 | 18h |
|
||||
| 第3迭代 | 测评问卷 + 测评执行 | 64h |
|
||||
| 第4迭代 | 狱情 + 危评 + 消费 + 汇总 | 82h |
|
||||
| 第5迭代 | 评估报告 | 20h |
|
||||
| 第6迭代 | 智能预警 + 智能分析 | 54h |
|
||||
|
||||
---
|
||||
|
||||
## 五、通用验收标准
|
||||
|
||||
所有模块需满足以下通用验收标准:
|
||||
|
||||
### 功能验收
|
||||
|
||||
- [ ] 列表查询功能正常
|
||||
- [ ] 新增功能正常
|
||||
- [ ] 修改功能正常
|
||||
- [ ] 删除功能正常(逻辑删除)
|
||||
- [ ] 导出功能正常
|
||||
- [ ] 数据权限控制生效
|
||||
|
||||
### 性能验收
|
||||
|
||||
- [ ] 页面加载时间 < 3秒
|
||||
- [ ] 接口响应时间 < 500ms
|
||||
- [ ] 支持100并发用户
|
||||
|
||||
### 安全验收
|
||||
|
||||
- [ ] 敏感数据脱敏显示
|
||||
- [ ] 操作日志完整记录
|
||||
- [ ] 权限控制生效
|
||||
- [ ] 无SQL注入/XSS漏洞
|
||||
|
||||
---
|
||||
|
||||
## 六、相关文档
|
||||
|
||||
- 需求拆解文档:`XL监狱综合管理平台-需求拆解文档.md`
|
||||
- 改造设计文档:`XL监狱综合管理平台-监区犯人管理改造设计方案.md`
|
||||
- 技术架构文档:待创建
|
||||
|
||||
---
|
||||
|
||||
**创建日期**:2026-01-14
|
||||
**版本**:v1.0
|
||||
Loading…
x
Reference in New Issue
Block a user