# 社区服务中心综合管理平台 — 系统规划书 --- ## 一、项目概述 ### 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 Logging,PostgreSQL 事务日志 | | DRF | Django REST Framework | | ADR | Architecture Decision Record,架构决策记录 | --- *文档版本:v1.0* *编写日期:2026年5月18日*