Pre-review checkpoint

This commit is contained in:
tangweijie 2026-01-14 22:18:15 +08:00
parent a437dde89f
commit cac3f8a9ac
25 changed files with 5163 additions and 557 deletions

View File

@ -1,256 +0,0 @@
# 🚀 Agents 快速参考卡
## 一句话调用
```bash
# 后端代码审查
@backend-reviewer 审查这个类的代码质量和性能
# 前端代码审查
@frontend-reviewer 检查这个组件的性能和用户体验
# 数据库优化
@database-expert 优化这个SQL查询并设计合适的索引
# 生成API文档
@api-documenter 为这个Controller生成完整文档
# 生成测试代码
@test-generator 为这个Service生成单元测试
# 代码重构
@refactor-expert 分析代码问题并提供重构方案
```
---
## 📋 常见任务速查
### 开发新功能流程
```bash
1@database-expert 设计数据表
"帮我设计用户评分表包含用户ID、分数、评分时间等字段"
2⃣ 开发后端代码
3@backend-reviewer 审查代码
"审查 ScoreService 的代码质量"
4@test-generator 生成测试
"为 ScoreService 生成完整的单元测试"
5@api-documenter 生成文档
"为 ScoreController 生成API文档"
6⃣ 开发前端页面
7@frontend-reviewer 审查前端
"审查 ScoreList.vue 组件"
```
### 性能优化流程
```bash
1@database-expert 分析慢查询
"这个查询很慢,帮我分析并优化"
2@backend-reviewer 检查后端性能
"检查这个Service是否有性能问题"
3@frontend-reviewer 检查前端性能
"这个页面加载慢,帮我找出原因"
```
### 代码质量提升流程
```bash
1@refactor-expert 识别问题
"分析这段代码有什么问题"
2@refactor-expert 提供方案
"提供详细的重构方案"
3⃣ 实施重构
4@backend-reviewer 验证重构
"审查重构后的代码"
5@test-generator 补充测试
"为重构后的代码生成测试"
```
---
## 💡 使用技巧
### ✅ 好的提问方式
```
❌ "看看这个代码"
✅ "@backend-reviewer 审查 UserService.java 的性能问题,特别关注数据库查询"
❌ "写个测试"
✅ "@test-generator 为 ScoreService.createScore() 方法生成单元测试,包含正常和异常场景"
❌ "优化数据库"
✅ "@database-expert 这个查询执行很慢贴上EXPLAIN结果帮我优化并设计合适的索引"
```
### 📍 提供清晰的上下文
1. **指定文件路径**
```
@backend-reviewer 审查 backend/yudao-module-prison/src/main/java/cn/iocoder/yudao/module/prison/service/ScoreService.java
```
2. **说明具体问题**
```
@database-expert 这个查询在数据量大时很慢经常超过5秒帮我优化
```
3. **提供相关代码**
```
@refactor-expert 这个方法有100多行很难维护请帮我重构
[贴上代码]
```
---
## 🎯 专项任务模板
### 新建数据表
```
@database-expert
需求:设计一个问卷调查表
字段要求:
- 问卷ID主键
- 问卷标题
- 问卷描述
- 状态(草稿/已发布/已关闭)
- 创建人、创建时间、更新时间
- 需要关联到监区表
请设计完整的建表SQL包括索引和注释
```
### 代码审查检查清单
```
@backend-reviewer
请审查以下方面:
1. 代码规范和可读性
2. 安全性SQL注入、权限控制
3. 性能问题N+1查询、缓存使用
4. 异常处理
5. 日志记录
[贴上代码]
```
### 生成完整测试
```
@test-generator
请为 QuestionnaireService 生成完整测试:
1. 测试创建问卷(正常、重复、参数校验)
2. 测试查询问卷(分页、条件查询)
3. 测试更新问卷(状态流转、并发)
4. 测试删除问卷(软删除、权限)
使用 JUnit 5 和 Mockito
```
### API文档生成
```
@api-documenter
为 QuestionnaireController 生成API文档包括
1. 所有接口的请求参数和响应格式
2. 实际的cURL调用示例
3. 常见错误码说明
4. 接口调用流程图
使用Markdown格式
```
---
## 🔄 组合使用案例
### Case 1: 接手遗留代码
```bash
# 第一步:理解代码结构
@refactor-expert "分析这个Service的职责和代码问题"
# 第二步:识别改进点
@backend-reviewer "列出这个类的主要问题"
# 第三步:补充测试
@test-generator "先生成测试保护现有功能"
# 第四步:逐步重构
@refactor-expert "提供分步骤的重构方案"
```
### Case 2: 性能调优
```bash
# 第一步:数据库层面
@database-expert "分析这些慢查询日志并优化"
# 第二步:后端层面
@backend-reviewer "检查缓存使用和查询方式"
# 第三步:前端层面
@frontend-reviewer "检查是否有不必要的渲染和请求"
```
### Case 3: 新功能开发
```bash
# 设计阶段
@database-expert "设计数据模型"
# 开发阶段
# (自己开发)
# 审查阶段
@backend-reviewer "审查后端实现"
@frontend-reviewer "审查前端实现"
# 质量保证
@test-generator "生成测试代码"
@api-documenter "生成接口文档"
```
---
## ⚡ 快捷命令
```bash
# 列出所有agents
/agents
# 查看某个agent的详细配置
@backend-reviewer /help
# 切换到不同的agent
@frontend-reviewer
```
---
## 🎓 学习建议
1. **从简单任务开始**: 先用agents做代码审查熟悉它们的风格
2. **逐步尝试复杂任务**: 尝试让agents生成代码和测试
3. **调整优化**: 根据反馈改进你的提问方式
4. **形成习惯**: 将agents集成到日常开发流程中
---
## 📞 获取帮助
- 查看完整文档:`README.md`
- 查看agent配置`.claude/agents/*.md`
- 实验和探索agents很智能大胆尝试
---
**记住**: Agents 是你的AI编程助手充分利用它们提升开发效率 🚀

View File

@ -1,237 +0,0 @@
# Claude Code Agents 使用指南
本项目包含 6 个专业的 Claude Code Subagents用于提升开发效率和代码质量。
## 📋 可用的 Agents
### 1. 🔍 Backend Reviewer后端代码审查专家
**文件**: `backend-reviewer.md`
**用途**: 审查 Java/Spring Boot 后端代码
**适用场景**:
- 代码提交前的质量检查
- 识别安全漏洞和性能问题
- 验证 Spring Boot 最佳实践
- 审查数据库查询效率
**使用方法**:
```
@backend-reviewer 请审查这个 Service 类的代码质量
```
---
### 2. 🎨 Frontend Reviewer前端代码审查专家
**文件**: `frontend-reviewer.md`
**用途**: 审查 Vue.js 前端代码
**适用场景**:
- 审查组件设计和代码质量
- 检查 TypeScript 类型使用
- 识别性能优化机会
- 验证用户体验设计
**使用方法**:
```
@frontend-reviewer 请审查这个 Vue 组件的性能
```
---
### 3. 🗄️ Database Expert数据库专家
**文件**: `database-expert.md`
**用途**: 数据库设计和 SQL 优化
**适用场景**:
- 设计数据库表结构
- 优化复杂 SQL 查询
- 设计索引策略
- 编写数据迁移脚本
**使用方法**:
```
@database-expert 帮我优化这个 SQL 查询的性能
```
**注意**: 已配置项目数据库连接信息192.168.10.126:3306/bank_go
---
### 4. 📖 API DocumenterAPI 文档专家)
**文件**: `api-documenter.md`
**用途**: 生成和维护 API 文档
**适用场景**:
- 根据 Controller 生成 API 文档
- 编写接口使用示例
- 维护 API 变更记录
- 生成 Postman 集合
**使用方法**:
```
@api-documenter 为这个 Controller 生成完整的 API 文档
```
---
### 5. 🧪 Test Generator测试代码生成专家
**文件**: `test-generator.md`
**用途**: 生成单元测试和集成测试
**适用场景**:
- 为 Service 生成单元测试
- 为 Controller 生成集成测试
- 为 Vue 组件生成测试
- 提高代码覆盖率
**使用方法**:
```
@test-generator 为这个 Service 类生成完整的单元测试
```
---
### 6. ♻️ Refactor Expert代码重构专家
**文件**: `refactor-expert.md`
**用途**: 识别代码问题并提供重构方案
**适用场景**:
- 识别代码异味
- 简化复杂逻辑
- 应用设计模式
- 改善代码可维护性
**使用方法**:
```
@refactor-expert 请分析这段代码并提供重构建议
```
---
## 🚀 快速开始
### 在 Claude Code 中使用
1. **列出所有 agents**:
```
/agents
```
2. **调用特定 agent**:
```
@agent-name 你的任务描述
```
3. **查看 agent 详情**:
`/agents` 命令中选择对应的 agent 查看完整配置
### 组合使用示例
#### 场景 1: 开发新功能
```
1. @database-expert 设计用户评分表结构
2. @backend-reviewer 审查生成的 Service 代码
3. @test-generator 生成单元测试
4. @api-documenter 生成 API 文档
```
#### 场景 2: 代码优化
```
1. @refactor-expert 分析代码问题
2. @backend-reviewer 审查重构后的代码
3. @test-generator 补充测试覆盖
```
#### 场景 3: 性能优化
```
1. @database-expert 分析慢查询
2. @backend-reviewer 检查代码性能问题
3. @frontend-reviewer 检查前端性能瓶颈
```
---
## ⚙️ 自定义配置
每个 agent 的配置文件都可以根据项目需求进行调整:
### 修改工具权限
```yaml
tools: Read, Grep, Glob, Write, Bash
```
可用工具:
- `Read` - 读取文件
- `Grep` - 搜索文本
- `Glob` - 文件模式匹配
- `Write` - 写入文件
- `Bash` - 执行命令
### 修改模型
```yaml
model: sonnet # 或 opus更强但更慢
```
### 自定义系统提示
修改 YAML 元数据后的内容,添加项目特定的规则和约定。
---
## 📌 最佳实践
1. **明确任务**: 给 agent 提供清晰具体的任务描述
2. **提供上下文**: 说明相关的文件路径和代码位置
3. **迭代改进**: 根据 agent 的反馈逐步优化
4. **版本控制**: 将 `.claude/agents/` 纳入 Git 版本管理
5. **团队协作**: 团队成员共享和改进 agent 配置
---
## 🔧 故障排除
### Agent 无法找到
- 确保文件在 `.claude/agents/` 目录下
- 检查文件名和 `name` 字段是否一致
- 重启 Claude Code
### Agent 权限不足
- 检查 `tools` 配置是否包含所需工具
- 确认文件路径可访问
### Agent 响应不符合预期
- 调整系统提示,提供更具体的指令
- 添加示例和约束条件
- 考虑使用更强大的模型opus
---
## 📚 相关资源
- [Claude Code 官方文档](https://docs.anthropic.com/)
- [Spring Boot 最佳实践](https://spring.io/guides)
- [Vue.js 风格指南](https://vuejs.org/style-guide/)
- [MySQL 性能优化](https://dev.mysql.com/doc/)
---
## 🤝 贡献
欢迎根据项目需求改进这些 agents
1. Fork 配置文件
2. 添加新的 agent 或改进现有的
3. 提交 Pull Request
4. 分享最佳实践
---
## 📝 更新日志
### v1.0.0 (2026-01-13)
- ✨ 初始版本
- ✅ 创建 6 个专业 agents
- 📖 完整的使用文档
---
**提示**: 这些 agents 会随着项目发展不断改进建议定期review和更新配置。

9
.claude/settings.json Normal file
View 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
View File

@ -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
View 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"
]
}
}
}

407
CLAUDE.md
View File

@ -8,22 +8,29 @@ XL Prison Management System (XL监狱综合管理平台) - A prison management p
## Tech Stack
**Backend**: Java 17, Spring Boot 3.5.9, MyBatis-Plus, Maven multi-module
**Frontend**: Vue 3.5.12, Vite 5.1.4, TypeScript 5.3.3, Element Plus, Pinia, Vue Router
**Database**: MySQL
**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
# Build all modules (from backend directory)
cd backend && mvn clean install -DskipTests
# Build specific module
# Build specific prison module
cd backend/yudao-module-prison && mvn clean package
# Run development server
# 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)
@ -33,21 +40,25 @@ cd frontend
# Install dependencies
pnpm install
# Dev server (local mode)
# Dev server (local mode - uses .env.local)
pnpm dev
# TypeScript check
# 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
pnpm build:dev # Development
pnpm build:test # Testing
pnpm build:prod # Production
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
pnpm lint:eslint # ESLint fix
# Linting and formatting
pnpm lint:eslint # ESLint check and fix
pnpm lint:format # Prettier format
pnpm lint:style # Stylelint check and fix
```
## Architecture
@ -55,89 +66,361 @@ pnpm lint:format # Prettier format
### Backend Structure
```
backend/
├── yudao-server/ # Main application entry
├── yudao-framework/ # Core framework (security, web, mybatis, redis, etc.)
├── 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 module (code gen, config)
└── yudao-module-prison/ # Prison management module (active development)
├── 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
│ └── vo/ # Request/Response VO objects
│ ├── {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
│ └── impl/{Module}ServiceImpl.java
├── dal/{module}/ # Data access layer (MyBatis-Plus)
├── convert/{module}/ # DO to VO converters
├── enums/ # Enum definitions & error codes
│ ├── {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/{module}/ # Page components
├── api/{module}/ # API definitions
├── 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
├── store/ # Pinia stores (state management)
├── router/ # Vue Router config
├── hooks/ # Composable hooks
├── types/ # TypeScript definitions
└── utils/ # Utility functions
├── types/ # TypeScript type definitions
├── utils/ # Utility functions
└── config/ # Configuration files
```
**Prison Views Pattern**:
```
views/prison/{module}/
├── index.vue # List page with search/form
└── {Module}Form.vue # Create/Edit form dialog
**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) => { ... }
}
```
**Prison API Pattern**:
**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
```
api/prison/{module}/index.ts # Axios API calls
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 being integrated into prison module**:
| Module | Chinese | Status |
|--------|---------|--------|
| Area | 监区管理 | In progress |
| Cell | 监室管理 | In progress |
| Consumption | 消费记录 | In progress |
| Question | 问卷问题 | In progress |
| Questionnaire | 问卷模板 | In progress |
| QuestionnaireRecord | 问卷答题记录 | In progress |
| RiskAssessment | 危险评估 | In progress |
| Score | 计分考核 | In progress |
**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 |
See `implement/plan.md` for detailed integration tasks.
**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
## Database Configuration
**Development Database**:
```
jdbc:mysql://192.168.10.130:3306/xlcp_dev?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true
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 located at:
- `backend/yudao-module-prison/src/main/resources/sql/prison_module.sql` - Module tables and menu permissions
**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
## Configuration Files
**Mock Settings** (application-*.yml):
- `mock-secret`: Mock authentication secret
- `mock-enable`: Enable/disable mock mode (true/false)
### 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
- Frontend files use `views/prison/` and `api/prison/` paths
- Backend uses package prefix `cn.iocoder.yudao.module.prison`
- Error codes defined in `ErrorCodeConstants.java`
- Enum types defined in `enums/` directory
- Codegen source files in `codegen/` directory
- **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

File diff suppressed because it is too large Load Diff

BIN
detail.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 KiB

@ -1 +1 @@
Subproject commit d4cb996085114345aca929c551801d2b74328dde
Subproject commit 4be92f62bd27980cc21058cf67bde2545e0be916

BIN
image.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 463 KiB

BIN
prisoner_list.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 KiB

View 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 | 新增数据库索引 SQL3个索引 | | 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
**评审人**:前端架构师、后端架构师

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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