Files
Community-Center/系统规划书.md

851 lines
32 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 社区服务中心综合管理平台 — 系统规划书
---
## 一、项目概述
### 1.1 项目背景
社区服务中心是基层社会治理的核心枢纽,承担着代理代办、代发代收、代销代购、代开证明、公益服务、民意反映与政策咨询等七大类数十项便民服务。当前业务多依赖纸质台账与人工流转,存在以下痛点:
- **流程不透明**:居民无法实时查询办理进度,需多次跑腿
- **数据孤岛**:各业务线台账独立,无法形成居民画像与数据联动
- **统计困难**:缺乏数字化手段,月度/年度统计依赖人工汇总
- **服务可及性差**:居民需到现场办理,缺少线上渠道
### 1.2 项目目标
建设一套基于 Django 的社区服务中心综合管理平台,实现:
1. **全业务线上化**:七大类服务全部纳入系统管理
2. **流程可追溯**:每笔业务从申请到办结全程留痕
3. **数据一体化**:居民信息统一管理,业务数据互通
4. **统计可视化**:提供多维度数据看板,辅助决策
5. **服务便捷化**:居民可通过微信小程序/网页提交申请、查询进度
### 1.3 项目范围
| 维度 | 范围 |
|------|------|
| 用户群体 | 普通居民(前端申请)、社区网格员(移动端核验)、社区管理员(后台管理)、街道审核员(跨社区审批)、系统管理员(系统运维) |
| 业务域 | 代理代办、代发代收、代销代购、代开证明、公益服务、民意反映、社区治理 |
| 技术栈 | Django 5.x + Django REST Framework + PostgreSQL + Redis + Vue 3 / 微信小程序 |
| 部署方式 | 初期单机部署,后期可容器化上云 |
---
## 二、系统架构设计
### 2.1 总体架构
```
┌─────────────────────────────────────────────────────────┐
│ 前端展示层 │
│ ┌──────────┐ ┌──────────────┐ ┌───────────────────┐ │
│ │ 管理后台 │ │ 居民小程序 │ │ 数据看板大屏 │ │
│ │ (Vue 3) │ │ (WeChat Mini)│ │ (ECharts) │ │
│ └────┬─────┘ └──────┬───────┘ └────────┬──────────┘ │
└───────┼───────────────┼───────────────────┼─────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────┐
│ API 网关层 │
│ Django REST Framework + JWT Auth │
│ CORS / Rate Limit / API Versioning │
└─────────────────────────┬───────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ 业务逻辑层 (Django) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────┐ │
│ │代理代办 │ │代发代收 │ │代销代购 │ │代开证明 │ │
│ │模块 │ │模块 │ │模块 │ │模块 │ │
│ └──────────┘ └──────────┘ └──────────┘ └───────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │公益服务 │ │民意反映 │ │社区治理 │ │
│ │模块 │ │模块 │ │模块 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │用户权限 │ │通知消息 │ │数据统计 │ │
│ │模块 │ │模块 │ │模块 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────┬───────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ 数据持久层 │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ PostgreSQL │ │ Redis │ │ MinIO/OSS │ │
│ │ (主数据库) │ │ (缓存/会话) │ │ (文件存储) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────┘
```
### 2.2 技术选型与决策记录
| 决策项 | 选型 | 备选方案 | 选择理由 |
|--------|------|----------|----------|
| 后端框架 | Django 5.x + DRF | Flask, FastAPI | 自带 Admin、ORM 成熟、生态丰富、社区业务 CRUD 密集型适合 |
| 数据库 | PostgreSQL 15+ | MySQL, SQLite | JSON 字段支持好、扩展性强、社区版免费 |
| 缓存 | Redis 7+ | Memcached | 支持数据结构丰富,可用于会话、队列、缓存 |
| 前端管理后台 | Vue 3 + Element Plus | React, Ant Design | 国内生态好、组件丰富、上手快 |
| 居民端 | 微信小程序 | H5, 支付宝小程序 | 社区居民微信覆盖率高、无需安装 |
| 文件存储 | MinIO / 阿里云 OSS | 本地磁盘 | 初期 MinIO 自建,后期可迁移云存储 |
| 任务队列 | Celery + Redis | Django-Q, Huey | 生态成熟、支持定时任务、社区文档丰富 |
| 部署 | Docker Compose | K8s, 裸机 | 初期规模小Docker Compose 足够,后期可平滑迁移 K8s |
### 2.3 Django 项目结构
```
community_center/
├── manage.py
├── config/
│ ├── settings/
│ │ ├── base.py
│ │ ├── development.py
│ │ └── production.py
│ ├── urls.py
│ ├── wsgi.py
│ └── celery.py
├── apps/
│ ├── accounts/ # 用户与权限
│ ├── residents/ # 居民信息管理
│ ├── agency/ # 代理代办服务
│ ├── distribution/ # 代发代收服务
│ ├── legal_psych/ # 代销代购(法律与心理援助)
│ ├── certification/ # 代开证明
│ ├── public_service/ # 公益服务
│ ├── feedback/ # 民意反映与政策咨询
│ ├── governance/ # 社区治理
│ ├── notification/ # 通知消息
│ └── statistics/ # 数据统计
├── templates/
├── static/
├── media/
├── requirements/
│ ├── base.txt
│ ├── development.txt
│ └── production.txt
├── docker-compose.yml
├── Dockerfile
└── .env.example
```
---
## 三、功能模块详细设计
### 3.1 用户与权限模块 (accounts)
#### 3.1.1 用户角色
| 角色 | 主要职责 | 典型权限范围 |
|------|----------|--------------|
| 普通居民 | 浏览服务事项、提交申请、查询进度、评价反馈、提意见建议 | 本人信息、本人申请单、公共服务查询 |
| 社区网格员 | 初步审核申请、上门核验、代填代报、通知领取物资/证明 | 辖区居民信息、待办任务、物资发放登记 |
| 社区管理员 | 事项配置、审批流转、统计报表、志愿者管理、活动发布 | 全部居民数据、审批权限、系统配置 |
| 街道审核员 | 对需上级审批的事项(如低保申请、医疗救助)进行终审 | 跨社区申请单、特殊事项审核 |
| 系统管理员 | 用户管理、角色权限、日志审计、数据备份 | 全部系统功能 |
#### 3.1.2 核心功能
- 用户注册/登录(居民支持微信授权登录)
- 基于 Django Guardian 的对象级权限控制
- 角色分配与权限管理
- 操作日志审计
#### 3.1.3 数据模型
```python
ROLE_CHOICES = [
('resident', '普通居民'),
('grid_worker', '社区网格员'),
('community_admin', '社区管理员'),
('street_auditor', '街道审核员'),
('system_admin', '系统管理员'),
]
class User(AbstractBaseUser):
phone = models.CharField(max_length=11, unique=True)
name = models.CharField(max_length=50)
id_card = models.CharField(max_length=18, blank=True)
role = models.CharField(choices=ROLE_CHOICES)
community = models.ForeignKey('Community')
is_staff = models.BooleanField(default=False)
class Community(models.Model):
name = models.CharField(max_length=100)
address = models.CharField(max_length=300)
contact_phone = models.CharField(max_length=11)
director = models.ForeignKey(User)
```
### 3.2 居民信息管理模块 (residents)
#### 3.2.1 核心功能
- 居民档案 CRUD姓名、身份证、住址、联系方式、家庭成员关系
- 居民标签体系(低保户、残疾人、退役军人、独居老人等)
- 家庭关系图谱
- 居民信息变更记录
#### 3.2.2 数据模型
```python
class Resident(models.Model):
name = models.CharField(max_length=50)
id_card = models.CharField(max_length=18, unique=True)
gender = models.CharField(choices=GENDER_CHOICES)
birth_date = models.DateField()
phone = models.CharField(max_length=11)
address = models.TextField()
community = models.ForeignKey(Community)
tags = models.ManyToManyField('ResidentTag')
family = models.ForeignKey('Family', null=True)
class ResidentTag(models.Model):
name = models.CharField(max_length=30)
category = models.CharField(choices=TAG_CATEGORY_CHOICES)
class Family(models.Model):
head = models.ForeignKey(Resident)
address = models.TextField()
```
### 3.3 代理代办服务模块 (agency)
#### 3.3.1 业务分类与流程
```
居民提交申请 → 经办人受理 → 审核材料 → 办理/代办 → 结果通知 → 归档
```
#### 3.3.2 业务子类
| 子类编码 | 业务名称 | 所需材料 | 办理时限 |
|----------|----------|----------|----------|
| A01 | 生育服务证代办 | 身份证、结婚证、户口本 | 5个工作日 |
| A02 | 独生子女证代办 | 身份证、户口本、出生证明 | 5个工作日 |
| A03 | 老年优待证代办 | 身份证、照片 | 3个工作日 |
| A04 | 暂住证代办 | 身份证、居住证明 | 5个工作日 |
| A05 | 残疾证代办 | 身份证、医院诊断证明 | 7个工作日 |
| A06 | 最低生活保障金申请 | 身份证、收入证明、困难证明 | 15个工作日 |
| A07 | 困难人员临时救助申请 | 身份证、困难说明 | 10个工作日 |
| A08 | 重残生活困难补助申请 | 身份证、残疾证 | 10个工作日 |
| A09 | 特困人员医疗救助申请 | 身份证、医疗费用清单 | 10个工作日 |
| A10 | 低保/优抚对象租房申请 | 身份证、低保证/优抚证明 | 15个工作日 |
| A11 | 失业/求职登记代理 | 身份证、学历证明 | 3个工作日 |
| A12 | 新生儿登记代理 | 出生证明、父母身份证 | 3个工作日 |
| A13 | 丧偶登记代理 | 身份证、配偶死亡证明 | 3个工作日 |
| A14 | 养犬登记代理 | 身份证、犬只免疫证明 | 5个工作日 |
| A15 | 出租房屋登记代理 | 房产证、租赁合同 | 5个工作日 |
| A16 | 流动人口婚育证明验证 | 身份证、原籍婚育证明 | 3个工作日 |
| A17 | 子女入托/借读证明代办 | 身份证、居住证明 | 3个工作日 |
| A18 | 党团组织关系转接代办 | 身份证、组织关系介绍信 | 5个工作日 |
| A19 | 退休人员医保关系转移代办 | 身份证、退休证明 | 7个工作日 |
| A20 | 退休人员医疗费报销代办 | 身份证、医疗费用清单 | 10个工作日 |
#### 3.3.3 数据模型
```python
class AgencyServiceCategory(models.Model):
code = models.CharField(max_length=10, unique=True)
name = models.CharField(max_length=100)
required_docs = models.JSONField(default=list)
processing_days = models.IntegerField()
description = models.TextField(blank=True)
class AgencyApplication(models.Model):
STATUS_CHOICES = [
('draft', '草稿'),
('submitted', '已提交'),
('accepted', '已受理'),
('processing', '办理中'),
('completed', '已办结'),
('rejected', '已退回'),
]
applicant = models.ForeignKey(Resident)
category = models.ForeignKey(AgencyServiceCategory)
status = models.CharField(choices=STATUS_CHOICES, default='draft')
submitted_at = models.DateTimeField()
accepted_at = models.DateTimeField(null=True)
completed_at = models.DateTimeField(null=True)
handler = models.ForeignKey(User, null=True)
remarks = models.TextField(blank=True)
class AgencyDocument(models.Model):
application = models.ForeignKey(AgencyApplication)
doc_type = models.CharField(max_length=50)
file = models.FileField(upload_to='agency_docs/')
uploaded_at = models.DateTimeField(auto_now_add=True)
class AgencyStatusLog(models.Model):
application = models.ForeignKey(AgencyApplication)
from_status = models.CharField(max_length=20)
to_status = models.CharField(max_length=20)
operator = models.ForeignKey(User)
created_at = models.DateTimeField(auto_now_add=True)
note = models.TextField(blank=True)
```
### 3.4 代发代收服务模块 (distribution)
#### 3.4.1 业务子类
| 子类编码 | 业务名称 | 类型 |
|----------|----------|------|
| D01 | 避孕药具发放 | 代发 |
| D02 | 除"四害"药品代售 | 代售 |
| D03 | 爱心捐赠物品代收 | 代收 |
#### 3.4.2 数据模型
```python
class DistributionCategory(models.Model):
code = models.CharField(max_length=10, unique=True)
name = models.CharField(max_length=100)
dist_type = models.CharField(choices=[('issue', '代发'), ('sell', '代售'), ('collect', '代收')])
class DistributionRecord(models.Model):
category = models.ForeignKey(DistributionCategory)
resident = models.ForeignKey(Resident)
operator = models.ForeignKey(User)
quantity = models.IntegerField()
unit = models.CharField(max_length=10)
record_date = models.DateField()
remarks = models.TextField(blank=True)
class DonationItem(models.Model):
donor_name = models.CharField(max_length=50)
donor_phone = models.CharField(max_length=11)
item_name = models.CharField(max_length=100)
item_count = models.IntegerField()
received_at = models.DateTimeField(auto_now_add=True)
receiver = models.ForeignKey(User)
status = models.CharField(choices=[('received', '已接收'), ('distributed', '已发放')])
```
### 3.5 代销代购(法律与心理援助)模块 (legal_psych)
#### 3.5.1 业务子类
| 子类编码 | 业务名称 |
|----------|----------|
| L01 | 法律援助联系 |
| L02 | 民事调解 |
| L03 | 消费者权益维护 |
| L04 | 心理咨询服务 |
#### 3.5.2 数据模型
```python
class LegalPsychService(models.Model):
SERVICE_TYPE_CHOICES = [
('legal_aid', '法律援助'),
('mediation', '民事调解'),
('consumer_rights', '消费者权益'),
('psychology', '心理咨询'),
]
applicant = models.ForeignKey(Resident)
service_type = models.CharField(choices=SERVICE_TYPE_CHOICES)
description = models.TextField()
status = models.CharField(choices=STATUS_CHOICES)
assigned_counselor = models.ForeignKey('Counselor', null=True)
created_at = models.DateTimeField(auto_now_add=True)
closed_at = models.DateTimeField(null=True)
class Counselor(models.Model):
name = models.CharField(max_length=50)
specialty = models.CharField(max_length=100)
phone = models.CharField(max_length=11)
is_active = models.BooleanField(default=True)
```
### 3.6 代开证明模块 (certification)
#### 3.6.1 业务子类
| 子类编码 | 证明类型 |
|----------|----------|
| C01 | 居住证明 |
| C02 | 残疾证明 |
| C03 | 流动人口证明 |
| C04 | 抚恤金申请证明 |
| C05 | 残疾保障金申请证明 |
| C06 | 子女助学金申请证明 |
| C07 | 减免学费证明 |
#### 3.6.2 数据模型
```python
class CertType(models.Model):
code = models.CharField(max_length=10, unique=True)
name = models.CharField(max_length=100)
template = models.FileField(upload_to='cert_templates/')
required_fields = models.JSONField(default=list)
class CertApplication(models.Model):
applicant = models.ForeignKey(Resident)
cert_type = models.ForeignKey(CertType)
purpose = models.TextField()
status = models.CharField(choices=STATUS_CHOICES)
cert_number = models.CharField(max_length=30, unique=True, null=True)
issued_at = models.DateTimeField(null=True)
issuer = models.ForeignKey(User, null=True)
pdf_file = models.FileField(upload_to='certs/', null=True)
```
### 3.7 公益服务模块 (public_service)
#### 3.7.1 业务子类
| 子类编码 | 业务名称 |
|----------|----------|
| P01 | 志愿者登记 |
| P02 | 志愿服务时间储蓄证明 |
| P03 | 志愿者培训及社区服务安排 |
| P04 | 邻里互助组织 |
| P05 | 书画展/合唱队/秧歌队等兴趣小组 |
| P06 | 棋牌/阅览/健身/聚会设施预约 |
| P07 | 轮椅借用 |
| P08 | 市民学校课程 |
| P09 | 医疗保健服务 |
| P10 | 社区单位资源共享 |
#### 3.7.2 数据模型
```python
class Volunteer(models.Model):
resident = models.ForeignKey(Resident)
registered_at = models.DateField()
skills = models.CharField(max_length=200, blank=True)
total_hours = models.FloatField(default=0)
is_active = models.BooleanField(default=True)
class VolunteerServiceRecord(models.Model):
volunteer = models.ForeignKey(Volunteer)
activity = models.ForeignKey('Activity')
hours = models.FloatField()
date = models.DateField()
verified = models.BooleanField(default=False)
verified_by = models.ForeignKey(User, null=True)
class Activity(models.Model):
title = models.CharField(max_length=200)
activity_type = models.CharField(choices=ACTIVITY_TYPE_CHOICES)
description = models.TextField()
start_time = models.DateTimeField()
end_time = models.DateTimeField()
location = models.CharField(max_length=200)
max_participants = models.IntegerField(null=True)
current_participants = models.IntegerField(default=0)
status = models.CharField(choices=ACTIVITY_STATUS_CHOICES)
organizer = models.ForeignKey(User)
class FacilityBooking(models.Model):
facility = models.ForeignKey('Facility')
resident = models.ForeignKey(Resident)
booking_date = models.DateField()
start_time = models.TimeField()
end_time = models.TimeField()
status = models.CharField(choices=[('pending', '待确认'), ('confirmed', '已确认'), ('cancelled', '已取消')])
class Facility(models.Model):
name = models.CharField(max_length=100)
facility_type = models.CharField(choices=FACILITY_TYPE_CHOICES)
description = models.TextField(blank=True)
is_available = models.BooleanField(default=True)
```
### 3.8 民意反映与政策咨询模块 (feedback)
#### 3.8.1 业务子类
| 子类编码 | 业务名称 |
|----------|----------|
| F01 | 向部门/单位提意见、要求、困难、建议 |
| F02 | 向政府部门咨询政策、办事手续 |
#### 3.8.2 数据模型
```python
class Feedback(models.Model):
FEEDBACK_TYPE_CHOICES = [
('opinion', '意见'),
('demand', '要求'),
('difficulty', '困难'),
('suggestion', '建议'),
('policy_inquiry', '政策咨询'),
('procedure_inquiry', '办事手续咨询'),
]
submitter = models.ForeignKey(Resident)
feedback_type = models.CharField(choices=FEEDBACK_TYPE_CHOICES)
title = models.CharField(max_length=200)
content = models.TextField()
target_department = models.CharField(max_length=100, blank=True)
status = models.CharField(choices=[
('submitted', '已提交'),
('forwarded', '已转交'),
('replied', '已回复'),
('closed', '已关闭'),
])
reply = models.TextField(blank=True)
replier = models.ForeignKey(User, null=True)
created_at = models.DateTimeField(auto_now_add=True)
replied_at = models.DateTimeField(null=True)
```
### 3.9 社区治理模块 (governance)
#### 3.9.1 核心功能
- 社区治理目标管理(文明向上、健康安全、生活便利、环境整洁、民主自治)
- "一窗式"服务窗口管理
- 公共服务/公益服务/便民服务整合调度
- 居民自治事务管理
#### 3.9.2 数据模型
```python
class GovernanceGoal(models.Model):
title = models.CharField(max_length=200)
category = models.CharField(choices=[
('civilized', '文明向上'),
('healthy', '健康安全'),
('convenient', '生活便利'),
('clean', '环境整洁'),
('democratic', '民主自治'),
])
description = models.TextField()
target_date = models.DateField()
responsible_person = models.ForeignKey(User)
progress = models.IntegerField(default=0)
status = models.CharField(choices=[('in_progress', '进行中'), ('completed', '已完成')])
class OneWindowService(models.Model):
window_number = models.CharField(max_length=10)
staff = models.ForeignKey(User)
service_categories = models.ManyToManyField(AgencyServiceCategory)
is_active = models.BooleanField(default=True)
class ServiceIntegration(models.Model):
service_type = models.CharField(choices=[
('public', '公共服务'),
('welfare', '公益服务'),
('convenience', '便民服务'),
])
name = models.CharField(max_length=200)
provider = models.CharField(max_length=100)
contact = models.CharField(max_length=11)
description = models.TextField()
```
### 3.10 通知消息模块 (notification)
#### 3.10.1 核心功能
- 站内消息推送
- 微信模板消息通知
- 短信通知(对接短信网关)
- 公告管理
#### 3.10.2 数据模型
```python
class Notification(models.Model):
recipient = models.ForeignKey(User)
title = models.CharField(max_length=200)
content = models.TextField()
notification_type = models.CharField(choices=[
('system', '系统通知'),
('business', '业务通知'),
('announcement', '公告'),
])
is_read = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
class Announcement(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
is_pinned = models.BooleanField(default=False)
published_at = models.DateTimeField()
publisher = models.ForeignKey(User)
```
### 3.11 数据统计模块 (statistics)
#### 3.11.1 核心功能
- 业务量统计(按类型、时间段、经办人)
- 居民画像分析(年龄分布、标签分布、家庭结构)
- 办理时效分析(平均办理时长、超时率)
- 满意度统计
- 数据导出Excel/PDF
#### 3.11.2 实现方式
- 使用 Django ORM 聚合查询 + Celery 定时任务预计算
- 前端 ECharts 可视化
- 关键指标缓存至 Redis定时刷新
---
## 四、数据库设计
### 4.1 ER 关系概览
```
Community 1──N User
Community 1──N Resident
Resident 1──N AgencyApplication
Resident 1──N DistributionRecord
Resident 1──N LegalPsychService
Resident 1──N CertApplication
Resident 1──N Feedback
Resident 1──1 Volunteer
Resident N──1 Family
AgencyApplication N──1 AgencyServiceCategory
AgencyApplication 1──N AgencyDocument
AgencyApplication 1──N AgencyStatusLog
Volunteer 1──N VolunteerServiceRecord
Activity 1──N VolunteerServiceRecord
Activity 1──N ActivityRegistration
Facility 1──N FacilityBooking
```
### 4.2 公共字段约定
所有业务表均包含以下公共字段:
| 字段 | 类型 | 说明 |
|------|------|------|
| created_at | DateTimeField | 创建时间auto_now_add |
| updated_at | DateTimeField | 更新时间auto_now |
| created_by | ForeignKey(User) | 创建人 |
| is_deleted | BooleanField | 逻辑删除标记default=False |
### 4.3 索引策略
- 所有外键字段自动建索引
- `id_card` 字段建唯一索引
- `status` + `created_at` 联合索引(用于按状态筛选+排序)
- `resident_id` + `created_at` 联合索引(用于查询某居民的业务记录)
---
## 五、接口设计
### 5.1 API 规范
- 遵循 RESTful 风格
- 统一响应格式:
```json
{
"code": 200,
"message": "success",
"data": { }
}
```
- 分页响应格式:
```json
{
"code": 200,
"message": "success",
"data": {
"count": 100,
"next": "/api/v1/agency/applications/?page=2",
"previous": null,
"results": [ ]
}
}
```
### 5.2 核心 API 列表
| 模块 | 方法 | 路径 | 说明 |
|------|------|------|------|
| 认证 | POST | /api/v1/auth/login/ | 登录 |
| 认证 | POST | /api/v1/auth/wechat/ | 微信授权登录 |
| 认证 | POST | /api/v1/auth/refresh/ | 刷新Token |
| 居民 | GET/POST | /api/v1/residents/ | 居民列表/新增 |
| 居民 | GET/PUT | /api/v1/residents/{id}/ | 居民详情/修改 |
| 代理代办 | GET/POST | /api/v1/agency/applications/ | 申请列表/新增 |
| 代理代办 | GET/PATCH | /api/v1/agency/applications/{id}/ | 申请详情/更新状态 |
| 代理代办 | POST | /api/v1/agency/applications/{id}/accept/ | 受理 |
| 代理代办 | POST | /api/v1/agency/applications/{id}/complete/ | 办结 |
| 代发代收 | GET/POST | /api/v1/distribution/records/ | 发放/收取记录 |
| 法律心理 | GET/POST | /api/v1/legal-psych/services/ | 服务申请列表/新增 |
| 代开证明 | GET/POST | /api/v1/cert/applications/ | 证明申请列表/新增 |
| 代开证明 | POST | /api/v1/cert/applications/{id}/issue/ | 开具证明 |
| 公益服务 | GET/POST | /api/v1/public/activities/ | 活动列表/发布 |
| 公益服务 | POST | /api/v1/public/activities/{id}/register/ | 活动报名 |
| 公益服务 | GET/POST | /api/v1/public/facilities/bookings/ | 设施预约 |
| 民意反映 | GET/POST | /api/v1/feedback/ | 意见/咨询列表/提交 |
| 民意反映 | POST | /api/v1/feedback/{id}/reply/ | 回复 |
| 统计 | GET | /api/v1/statistics/overview/ | 总览数据 |
| 统计 | GET | /api/v1/statistics/agency/ | 代理代办统计 |
| 统计 | GET | /api/v1/statistics/resident-profile/ | 居民画像 |
| 通知 | GET | /api/v1/notifications/ | 通知列表 |
| 公告 | GET | /api/v1/announcements/ | 公告列表 |
### 5.3 认证与权限
- 管理后台JWT Token 认证Access Token 2h + Refresh Token 7d
- 小程序端:微信 OpenID 关联 + JWT Token
- 权限控制:基于 Django Guardian 的对象级权限
- API 限流DRF Throttling匿名 100次/h认证 1000次/h
---
## 六、非功能性需求
### 6.1 性能要求
| 指标 | 目标值 |
|------|--------|
| API 平均响应时间 | < 200ms |
| 并发用户数 | ≥ 200 |
| 数据库查询 | 单次 < 50ms |
| 文件上传 | 支持 ≤ 20MB |
### 6.2 安全要求
| 项目 | 措施 |
|------|------|
| 传输安全 | 全站 HTTPS |
| 认证安全 | JWT + 黑名单机制 |
| 数据安全 | 敏感字段加密存储(身份证号等) |
| SQL 注入 | ORM 参数化查询 |
| XSS | 模板自动转义 + CSP 头 |
| CSRF | Django 内置 CSRF 中间件 |
| 日志审计 | 关键操作全量记录 |
| 备份策略 | 每日全量备份 + 实时 WAL 归档 |
### 6.3 可用性要求
| 指标 | 目标值 |
|------|--------|
| 系统可用率 | ≥ 99.5% |
| 故障恢复时间 | < 2h |
| 数据恢复点 | < 1h |
---
## 七、部署架构
### 7.1 初期部署方案(单机 Docker Compose
```yaml
# docker-compose.yml 概要
services:
web:
build: .
command: gunicorn config.wsgi:application --bind 0.0.0.0:8000
volumes:
- ./media:/app/media
depends_on:
- db
- redis
environment:
- DATABASE_URL=postgres://...
- REDIS_URL=redis://...
celery-worker:
build: .
command: celery -A config worker -l info
depends_on:
- db
- redis
celery-beat:
build: .
command: celery -A config beat -l info
depends_on:
- redis
db:
image: postgres:15
volumes:
- pgdata:/var/lib/postgresql/data
redis:
image: redis:7-alpine
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./static:/app/static
- ./media:/app/media
volumes:
pgdata:
```
### 7.2 后期扩展方案
- 应用层Docker Swarm / K8s 水平扩展
- 数据库:读写分离 + 连接池 (PgBouncer)
- 缓存Redis Sentinel 高可用
- 文件存储:迁移至阿里云 OSS
- 监控Prometheus + Grafana
- 日志ELK Stack
---
## 八、开发计划
### 8.1 阶段划分
| 阶段 | 内容 | 交付物 |
|------|------|--------|
| 第一阶段 | 基础框架搭建 + 用户权限 + 居民管理 | 可运行的基础系统 |
| 第二阶段 | 代理代办 + 代开证明(核心业务) | 核心业务可用 |
| 第三阶段 | 代发代收 + 法律心理 + 公益服务 | 业务全覆盖 |
| 第四阶段 | 民意反映 + 社区治理 + 通知消息 | 功能完善 |
| 第五阶段 | 数据统计 + 小程序端 | 全功能交付 |
| 第六阶段 | 测试优化 + 部署上线 | 生产环境运行 |
### 8.2 技术债务管理
- 每个阶段结束进行代码审查
- 核心模块单元测试覆盖率 ≥ 80%
- API 集成测试覆盖核心流程
- 性能测试在第五阶段完成后执行
---
## 九、风险与应对
| 风险 | 影响 | 概率 | 应对措施 |
|------|------|------|----------|
| 居民隐私数据泄露 | 高 | 低 | 加密存储、权限最小化、审计日志 |
| 业务流程变更频繁 | 中 | 高 | 状态机可配置化、模板化证明 |
| 并发量超预期 | 中 | 低 | Redis 缓存、数据库连接池、限流 |
| 微信接口变动 | 低 | 中 | 抽象微信服务层、接口版本化 |
| 第三方短信服务不可用 | 低 | 低 | 多供应商备选、消息队列缓冲 |
---
## 十、术语表
| 术语 | 说明 |
|------|------|
| 一窗式服务 | 居民到一个窗口即可办理所有业务的服务模式 |
| 居民标签 | 对居民分类标记,如低保户、残疾人、独居老人等 |
| 时间储蓄 | 志愿者服务时长记录,可用于兑换社区服务 |
| WAL | Write-Ahead LoggingPostgreSQL 事务日志 |
| DRF | Django REST Framework |
| ADR | Architecture Decision Record架构决策记录 |
---
*文档版本v1.0*
*编写日期2026年5月18日*