项目总览
企业资源协同管理平台(ERCMP)是什么
ERCMP 是一套面向集团型组织的“人力资源 + 资产管理”一体化协同平台。平台以标准化数据模型、流程化业务引擎与可配置权限体系为内核,贯通“人—事—物”全链路,实现组织用工、资产全生命周期管理与经营数据分析的一体化、可视化与可审计。
核心能力一览
- 人力资源管理(HRMS)
- 组织与岗位:支持多级组织、岗位体系与编制管理,直观组织视图与结构变更留痕。
- 人员全生命周期:入职/转岗/试用/离职闭环,电子档案与证照到期提醒。
- 流程与权限:可编排审批流,基于角色/属性的访问控制(RBAC/ABAC)。
- 履历与评估:关键岗位任务与绩效留痕,支撑任职资格与晋升调配。
- 资产管理
- 基础台账:一物一档、分类编码、状态标签与定位信息。
- 采购与入库:需求申请、合同履约、联合验收、财务对接。
- 变动与跟踪:调拨、租赁、盘点差异闭环与GIS可视化。
- 价值管理:折旧计提、减值与评估、价值台账与报表。
- 维护与处置:保养计划、维修流转、处置合规与全流程归档。
- 联动管控与分析
- 资产-人员绑定、任务协同、异动联动更新。
- 指标看板、预警报表与多维统计(部门/区域/类别)。
- 平台与配置
- 参数字典、流程模板、通知策略与多租/多组织隔离能力。
- 审计日志、接口管理与集成适配层。
如何开始
通过以上能力与架构,ERCMP 以可配置、可扩展、可审计为原则,帮助集团在复杂资产与用工场景下实现高效协同、降本增效与稳健合规。
项目背景
集团性公司作为多业务协同发展的综合性主体,其管理场景呈现 “资产规模庞大、类型特殊,人员结构复杂、流动性强” 的双重特征。在资产维度,公司核心资产涵盖楼宇物业(写字楼、商业综合体、员工宿舍等)、林地(生态林、经济林等)、田地产权(耕地、养殖基地等)等大型资产,此类资产具有分布广泛、权属关系复杂、价值波动大、维护周期长等特点;当前资产信息散落于各子公司或业务部门的独立档案中,编码标准不统一,导致 “同一资产多套数据”“账实不符” 等问题频发,且资产采购、调拨、维护、处置等流程依赖人工传递单据,大型资产的位置跟踪与价值核算缺乏精准数据支撑。
在人事维度,集团员工涵盖资产管理人员、林地管护员、田间技术员、行政人员等多种岗位类型,人员跨区域、跨部门流动频繁;员工信息存储于分散表格或纸质档案,查询更新效率低下,入职、离职、调岗等流程人工操作占比高,易出现遗漏差错;核心岗位(如资产管护员、产权专员)的工作履历(如资产巡查记录、产权办理进度、林地养护效果等)缺乏统一归集机制,难以支撑人员考核与岗位调配决策。为破解上述管理痛点,顺应集团数字化转型趋势,亟需建设资产与人事一体化管理系统,实现 “人、资产” 全生命周期的规范化、精细化管控。
建设目标
核心目标
构建覆盖 “资产全生命周期管理 + 人员全生命周期管理” 的一体化数字化体系,实现资产基础信息、动态流转、价值变动与员工基础档案、岗位变动、工作履历等核心数据的统一归集与联动管控,为集团高效运营、合规监管及决策优化提供全流程支撑。
具体目标
-
建立标准化资产 - 人员关联数据库,整合楼宇物业、林地、田地产权等资产信息与各岗位员工数据,实现资产档案与人员档案的数字化存储、多维度查询及联动追溯。
-
搭建自动化流程管理平台,规范资产采购、调拨、维修、处置及人员入职、离职、调岗等关键环节流程,减少人工干预,将流程处理效率提升 30% 以上。
-
打造特色管理模块,实现大型资产位置跟踪、价值自动核算及核心岗位员工工作履历精准记录,支撑资产运营与人员管理的深度协同。
-
构建数据可视化分析体系,生成资产运营报表(使用率、维护成本等)与人员管理报表(结构分布、离职分析等),为集团资源配置与管理决策提供数据依据。
建设必要性
-
破解集团复合型管理痛点的迫切需求:集团资产类型特殊且分散、人员跨域流动频繁,传统人工管理模式易导致资产信息滞后、人员流程混乱。系统通过一体化管控实现资产与人员数据实时同步、流程标准化流转,适配集团复杂管理特性。
-
提升管理效率与降低成本的必然选择:数字化档案替代纸质资料,大幅减少资产图纸、产权证明、员工档案的存储成本与检索时间;流程自动化替代人工传递,降低跨部门沟通成本与差错率,释放管理团队精力至核心决策工作。
-
支撑精细化管理与协同决策的重要基础:通过系统归集资产与人员联动数据,管理层可精准掌握 “资产 - 责任人 - 维护记录”“岗位 - 人员 - 业绩表现” 等关联关系,为资产优化配置、人员调配考核等决策提供数据支撑。
-
保障合规管理与风险防控的关键手段:系统规范资产权属登记、处置审批及员工劳动合同签订、资质管理等流程,留存完整操作记录;同时实现大型资产产权到期、员工资质失效等风险自动预警,降低合规与运营风险。
核心功能设计
结合集团资产类型(楼宇物业、林地、田地产权等)与人员管理需求,设计 “资产全生命周期管理、人员全生命周期管理、联动管控与分析、系统配置管理” 四大核心板块,共十二大功能模块:
资产全生命周期管理板块
-
资产基础信息管理模块
-
资产档案创建:支持录入楼宇物业(建筑面积、产权年限、建筑结构、租赁状态等)、林地(面积、树种、林种、权属证明编号等)、田地产权(地块位置、土壤类型、承包期限、种植品种等)等大型资产详细信息,上传产权证书、规划图纸、验收报告等电子档案,实现 “一资产一档案” 精细化管理。
-
资产分类与编码:按集团业务特性自定义分类标准,如 “楼宇物业(写字楼 / 商业综合体 / 宿舍)、林地资源(生态林 / 经济林 / 苗圃)、田地产权(耕地 / 养殖基地 / 经济作物田)” 等,系统自动生成唯一资产编码,确保数据标准化。
-
资产标签管理:支持二维码 / RFID 标签生成打印,关联资产档案,通过移动终端扫描即可查询资产信息、责任人、维护记录,实现物理资产与系统数据精准绑定。
-
资产状态维护:实时更新资产 “新增、在用、闲置、维修、报废、租赁中” 等基础状态,针对林地、田地产权增设 “正常养护、待施肥、病虫害防治中” 等专项状态,记录状态变更原因与操作人。
-
-
资产采购与入库管理模块
-
采购需求申请与审批:各部门在线提交资产采购需求(如新增办公楼宇配套设施、林地灌溉设备等),注明需求依据与预估金额,按 “部门负责人初审 - 资产管理部复核 - 分管领导审批 - 财务预算审核” 流程流转。
-
采购合同管理:关联审批需求生成合同档案,记录供应商信息、合同金额、付款节点、质保条款,支持合同文件上传与履约提醒(如付款、质保到期)。
-
验收与入库登记:资产到货后,由使用部门、资产管理部、技术人员联合验收,核对与合同一致性后签署验收报告,系统自动生成入库单,更新资产状态为 “在用” 或 “库存”。
-
财务系统对接:同步采购金额、资产原值等数据至财务系统,为入账核算提供依据,实现资产与财务数据互通。
-
-
资产变动与跟踪管理模块
-
资产调拨:支持跨子公司、跨部门调拨(如林地管护设备从 A 区域调拨至 B 区域),提交申请经多级审批后,自动更新资产使用部门、责任人与位置信息。
-
资产租赁管理:针对写字楼、商业铺面等可租赁资产,管理租赁方信息、租赁期限、租金收益,设置到期提醒,自动核算租赁收益。
-
资产盘点:支持定期全面盘点与专项盘点(如汛期后林地资产盘点),结合无人机航拍(林地 / 田地)、扫码核对(楼宇设备)等方式,生成盘点差异表并跟踪整改。
-
资产位置跟踪:对接 GIS 地图系统,标注楼宇物业、林地、田地产权的具体位置,支持按区域、资产类型筛选查询,实现位置可视化管控。
-
-
资产价值与折旧管理模块
-
折旧规则配置:支持年限平均法、工作量法等多种折旧方法,按资产类型自定义规则(如楼宇物业采用年限平均法,林地灌溉设备采用工作量法)。
-
自动计提折旧:按月 / 季度自动计提折旧,生成折旧清单,更新资产净值,同步至财务系统。
-
资产减值与评估:记录资产因市场波动、自然灾害等产生的减值 / 增值数据,关联第三方评估报告,触发财务处理流程。
-
价值台账与报表:生成资产原值、累计折旧、净值台账,支持按子公司、资产类别统计分析。
-
-
资产维护与维修管理模块
-
维护计划制定:按资产类型设置保养周期(如楼宇电梯每 3 个月检修、林地每半年病虫害排查),自动生成维护任务单推送至责任人。
-
维修申请与审批:资产故障时(如楼宇水电故障、林地灌溉设备损坏),在线提交维修申请,指定维修厂商,跟踪维修进度(受理 - 派单 - 验收)。
-
维修记录存档:记录维修原因、费用、更换部件等信息,关联资产档案,为寿命评估提供依据。
-
维护成本统计:汇总单台 / 同类资产维护费用,生成成本趋势图,分析性价比并提出优化建议。
-
-
资产处置管理模块
-
处置申请与审批:支持报废、出售、捐赠等处置类型,提交申请时附检测报告、评估报告等依据,按 “部门申请 - 资产管理部审核 - 技术鉴定 - 集团审批 - 国资备案” 流程流转。
-
处置评估与定价:报废资产记录残值与回收单位;出售资产关联拍卖 / 评估记录,确保价值最大化;捐赠资产留存受赠方资质文件。
-
处置后处理:更新资产状态为 “已处置”,同步财务系统完成核销,归档处置全流程文档。
-
人员全生命周期管理板块
-
组织架构与岗位管理模块
-
部门管理:支持创建 “集团总部 - 子公司 - 业务部门(资产管理部 / 林地管护部 / 田间事业部)- 班组” 层级架构,记录各部门职责、负责人及编制人数,可合并拆分调整。
-
岗位体系管理:定义集团专属岗位(如资产管理员、林地管护员、田间技术员、产权专员等),明确职级、岗位职责(如资产管理员需记录产权年检情况)、任职要求,支持编制与实际人数对比分析。
-
组织视图展示:通过树形图直观展示架构,支持按 “部门类型、区域、业务线” 筛选查看,清晰呈现人员归属。
-
-
员工信息管理模块(核心模块)
-
基础档案管理:
-
通用信息:记录员工姓名、身份证号、联系方式等基础信息,上传身份证、学历证明等电子档案。
-
岗位专属信息:针对核心岗位增设 “资产管理员:产权管理资质、资产巡查证书;林地管护员:林业技能等级、病虫害防治培训记录;田间技术员:农业技术资格证、种植经验” 等特色字段。
-
合同与资质管理:记录劳动合同期限、续签情况,关联员工资质证书,设置到期自动提醒。
-
-
员工状态跟踪:实时更新员工 “在职、试用期、待调岗、离职” 等状态,记录状态变更原因(如调岗、晋升、考核不通过)与审批记录。
-
查询与统计功能:支持按部门、岗位、入职时间等多维度查询,生成员工花名册、人员结构分析表(如管护员年龄分布、各岗位学历占比)。
-
-
入职与离职管理模块
-
入职管理:针对不同岗位定制流程,如资产管理员需增加 “产权知识培训→资产档案熟悉考核”,林地管护员需完成 “林地分布培训→安全操作考核”;分配入职导师,跟踪流程进度,自动提醒未完成项。
-
试用期管理:设置不同岗位试用期(如技术员 3 个月、行政岗 1 个月),自定义考核标准(如管护员试用期内林地存活率≥95%),届满前自动提醒评估,支持线上转正 / 辞退审批。
-
离职管理:员工线上提交离职申请,注明原因,按 “部门审批→HR 审核→工作交接(如资产管理员移交产权档案)→物品归还→薪资结算” 流程流转;自动生成离职分析报告,标注核心岗位离职趋势。
-
-
核心岗位工作履历管理模块(行业特色模块)
-
履历信息归集:
-
任务记录:关联资产系统,自动同步资产管理员的产权办理进度、资产巡查记录;林地管护员的养护任务、病虫害防治结果;田间技术员的种植指导记录、产量统计等。
-
业绩与奖惩:记录资产管理员的产权年检完成率、林地管护员的林木存活率、技术员的作物增产效果及对应的奖惩情况。
-
培训与资质更新:记录员工参加的产权管理培训、林业技术升级培训等内容与考核结果,同步资质续期信息。
-
-
履历查询与应用:支持按员工姓名、岗位、时间查询履历,生成个人档案;管理层通过履历评估岗位适配性(如根据管护员经验分配复杂林地任务),为晋升调岗提供依据。
-
联动管控与分析板块
-
资产 - 人员联动管理模块
-
责任人关联:为每项资产绑定直接责任人(如某林地绑定专属管护员、某楼宇绑定资产管理员),资产状态变更时同步提醒责任人。
-
任务协同分配:资产维护、盘点等任务自动分配至关联责任人,进度实时同步至资产与人员模块,实现 “资产任务 - 人员执行 - 结果归档” 闭环。
-
异动联动更新:员工调岗 / 离职时,系统自动提醒移交负责的资产档案与任务,更新资产责任人信息,避免管理断层。
-
-
报表与分析管理模块
-
自定义报表生成:支持生成资产台账、折旧明细、人员花名册、离职分析等基础报表,及 “资产 - 责任人关联报表”“核心岗位业绩与资产运营关联报表” 等专项报表。
-
数据分析看板:通过图表展示资产使用率、闲置率、维护成本趋势、人员结构分布、核心岗位业绩排名等指标,直观呈现运营状况。
-
预警报表:自动生成资产产权到期、维护超期、员工资质失效、试用期到期等预警报表,推送至相关责任人。
-
数据导出与共享:支持 Excel/PDF 格式导出,对接集团 BI 系统与管理层驾驶舱。
-
系统配置与权限管理板块
- 基础参数设置
支持自定义资产分类标准、折旧政策、流程节点、表单模板,适配集团管理需求动态变化。
- 角色与权限分配
采用 “角色 - 权限” 绑定模式,预设 “资产管理员、人事专员、部门负责人、集团领导” 等角色,按 “最小权限原则” 分配操作权限(如管护员仅能查看负责林地的资产与个人履历)。
-
日志与接口管理
-
操作日志:记录所有用户操作轨迹,确保数据变更可追溯,满足审计需求。
-
接口管理:对接财务系统、OA 系统、GIS 平台、物联网设备(如林地监控、楼宇传感器),实现数据互通。
-
资产管理
面向集团型、多类别资产的一体化管理平台,覆盖“从引入到退出”的全生命周期,确保资产数据唯一可信、流程可追溯、价值可量化、风险可控。
- 基础台账:一物一档、分类编码、状态/位置标签与附件档案。
- 采购入库:需求-审批-合同-验收闭环,原值入账对接财务。
- 变动跟踪:调拨、租赁、盘点差异处理与 GIS 可视化定位。
- 价值管理:折旧计提、减值评估与价值台账/报表。
- 维护处置:保养计划、维修流转、处置合规与全流程归档。
资产管理系统功能概述
固定资产(大资产)管理系统通常涵盖资产全生命周期的管理,结合实物、价值、流程等多维度需求,功能板块可分为以下几类,每类均承担特定管理作用:
-
资产基础信息管理板块
- 核心功能:
- 资产档案创建(名称、规格、型号、原值、累计折旧、供应商、采购日期等);
- 资产分类与编码(按行业标准或企业自定义规则,如房屋建筑物、机器设备、电子设备等);
- 资产标签管理(支持二维码 / 条形码 / RFID 标签生成、打印与关联,实现物理资产与系统数据绑定);
- 资产状态维护(新增、在用、闲置、报废、维修等状态实时更新)。
- 作用:建立统一的资产信息库,确保资产数据标准化、唯一化,为全流程管理提供基础数据支撑。
- 核心功能:
-
资产采购与入库管理板块
- 核心功能:
- 采购需求申请与审批(部门提交采购计划,按权限层级审批);
- 采购合同管理(合同编号、金额、付款方式、履约记录关联);
- 验收与入库登记(核对采购资产与合同一致性,生成入库单,更新资产状态为 “在用” 或 “库存”);
- 与财务系统对接(自动同步采购金额、进项税等数据,为记账提供依据)。
- 作用:规范采购流程,控制采购成本,确保资产合法合规入账,避免账实不符。
- 核心功能:
-
资产变动与跟踪管理板块
- 核心功能:
- 资产调拨(跨公司、跨部门的转移申请与审批,更新资产使用公司、责任人信息);
- 资产借用与归还(借用登记、归还确认,记录借用期限与用途);
- 资产租用和租期管理(资产出租、收益、出租周期管理、到期提醒)
- 资产盘点(支持定期 / 不定期盘点,通过无人机、人工核对等方式快速核对账实,生成盘点差异表并处理);
- 资产位置跟踪(结合地图,记录资产具体位置,支持定位查询)。
- 作用:实时掌握资产动态流向,减少资产流失、错放,确保资产使用效率最大化。
- 核心功能:
-
资产价值与折旧管理板块
- 核心功能:
- 折旧规则配置(支持年限平均法、工作量法、双倍余额递减法等多种折旧方法);
- 自动计提折旧(按月 / 季度生成折旧清单,同步更新资产净值);
- 资产减值与评估(记录减值准备、资产评估增值 / 减值数据,关联财务处理);
- 价值台账与报表(生成资产原值、累计折旧、净值台账,支持按部门、类别统计)。
- 作用:满足财务核算需求,准确反映资产价值变动,为资产处置、预算规划提供数据支持。
- 核心功能:
-
资产维护与维修管理板块
- 核心功能:
- 维护计划制定(按资产类型设置定期保养周期,自动生成保养提醒);
- 维修申请与审批(在线提交维修需求,指定维修厂商,跟踪维修进度);
- 维修记录存档(记录维修原因、费用、更换部件、维修结果等,关联资产寿命评估);
- 维护成本统计(汇总单台资产或类别资产的累计维护费用,分析性价比)。
- 作用:延长资产使用寿命,降低突发故障风险,合理控制维护成本。
- 核心功能:
-
资产处置管理板块
- 核心功能:
- 处置申请与审批(报废、出售、捐赠、盘亏等处置类型的流程审批,附处置依据);
- 处置评估与定价(报废资产需记录残值,出售资产关联评估报告或拍卖记录);
- 处置后处理(更新资产状态为 “已处置”,同步财务核销,生成处置清单);
- 处置合规性审计(留存处置流程文档,确保符合企业制度及税务、国资监管要求)。
- 作用:规范资产退出流程,避免违规处置导致的风险,实现资产残值最大化。
- 核心功能:
-
报表与分析管理板块
- 核心功能:
- 自定义报表生成(资产台账、折旧明细、盘点差异、处置汇总等);
- 数据分析看板(通过图表展示资产使用率、闲置率、维护成本趋势、部门资产分布等);
- 预警报表(逾期未盘点、折旧到期、维修超期、合同到期等风险预警);
- 数据导出与共享(支持 Excel、PDF 格式导出,对接 BI 系统或管理层驾驶舱)。
- 作用:为管理层提供决策支持,及时发现资产运营问题,优化资源配置。
- 核心功能:
-
系统配置与权限管理板块
- 核心功能:
- 基础参数设置(资产分类标准、折旧政策、流程节点、表单模板自定义);
- 角色与权限分配(按部门、岗位设置操作权限,如只读、修改、审批等);
- 日志管理(记录用户操作轨迹,确保数据变更可追溯,满足审计需求);
- 接口管理(与财务系统、OA 系统、采购系统、物联网设备等对接,实现数据互通)。
- 作用:保障系统灵活适配企业管理需求,确保数据安全与操作合规。
- 核心功能:
设计概要
系统概述
本资产管理系统(AZZET)是一个基于Symfony框架构建的企业级资产全生命周期管理平台,支持有形资产和无形资产的一体化管理。系统采用现代化的Web技术栈,提供直观的管理界面和强大的功能模块。
核心设计理念
1. 全生命周期管理
- 资产引入:从采购申请到验收入库的完整流程
- 资产使用:日常使用、调拨、租赁、借用等状态跟踪
- 资产维护:预防性维护、故障维修、保养计划
- 资产处置:报废申请、价值评估、合规处置
2. 双资产类型支持
- 有形资产:固定资产、设备、房产等实物资产
- 无形资产:软件、知识产权、品牌价值等虚拟资产
- 统一管理:通过分类体系(tid字段)区分资产类型
3. 多媒体档案管理
- 图片管理:资产照片、证书扫描件
- 视频管理:操作演示、维护记录视频
- 文档管理:技术文档、合同文件、报告
- 动态预览:支持在线预览和下载
系统架构
技术栈
- 后端框架:Symfony 7.x
- 数据库:MySQL/PostgreSQL + Doctrine ORM
- 前端框架:EasyAdminBundle + Bootstrap + JavaScript
- 文件存储:VichUploaderBundle
- 地图服务:腾讯地图API
- 权限管理:基于角色的访问控制(RBAC)
核心模块
1. 资产管理模块
// 核心实体:Asset
- 基础信息:名称、规格、型号、价值、折旧
- 状态管理:新增、闲置、在用、报废、维修
- 位置信息:坐标、地址、组织归属
- 媒体档案:图片、视频、附件
- 分类标签:类别、标签、证书
2. 分类管理模块
// 实体:Category
- 双类型支持:有形资产(tid=1)、无形资产(tid=2)
- 编码体系:唯一编码、层级分类
- 动态过滤:基于类型的分类筛选
3. 组织管理模块
// 实体:Organization
- 多级组织架构
- 资产归属管理
- 权限控制基础
4. 流程管理模块
- 采购流程:计划 → 合同 → 验收
- 维护流程:申请 → 计划 → 执行 → 记录
- 处置流程:申请 → 评估 → 审批 → 处置
- 调拨流程:申请 → 审批 → 执行 → 确认
5. 库存管理模块
- 盘点管理:定期盘点、差异处理
- 状态跟踪:实时状态更新
- 位置管理:GIS地图定位
数据模型设计
核心实体关系
Asset (资产)
├── Category (分类) - ManyToOne
├── Organization (组织) - ManyToOne
├── Tag (标签) - ManyToMany
├── Image (图片) - OneToMany
├── Video (视频) - OneToMany
├── Attachment (附件) - OneToMany
├── Lease (租赁) - OneToMany
├── Borrow (借用) - OneToMany
├── Transfer (调拨) - OneToMany
└── Maintenance (维护) - OneToMany
状态管理
// 资产状态枚举
const STATUSES = [
'新增' => 0,
'闲置' => 10,
'在用' => 20,
'报废' => 30,
'维修' => 40
];
// 租赁状态枚举
const LEASE_STATUSES = [
'待审批' => 0,
'已批准' => 10,
'租赁中' => 20,
'已到期' => 30,
'已归还' => 40,
'已取消' => 50
];
功能特性
1. 智能资产管理
- 自动编码:基于分类的资产编码生成
- 状态跟踪:实时状态更新和历史记录
- 位置定位:GPS坐标和地图可视化
- 价值管理:折旧计算和减值评估
2. 多媒体档案
- 图片管理:支持多种格式,自动压缩优化
- 视频管理:在线预览,动态加载
- 文档管理:分类存储,版本控制
- 批量上传:支持多文件同时上传
3. 流程自动化
- 审批流程:可配置的审批链
- 状态流转:自动状态更新
- 通知提醒:关键节点自动通知
- 审计跟踪:完整的操作日志
4. 数据分析
- 仪表板:关键指标可视化
- 报表生成:多维度统计分析
- 趋势分析:资产价值变化趋势
- 预警机制:异常情况自动预警
用户界面设计
1. 管理界面
- Dashboard:数据概览和快速操作
- CRUD界面:标准化的增删改查操作
- 详情页面:丰富的资产信息展示
- 搜索过滤:强大的查询和筛选功能
2. 移动端适配
- 响应式设计:适配各种屏幕尺寸
- 触摸优化:移动设备友好的交互
- 离线支持:关键功能离线可用
3. 用户体验
- 直观导航:清晰的菜单结构
- 快速操作:常用功能一键访问
- 个性化:用户偏好设置
- 帮助系统:内置使用指南
安全与权限
1. 访问控制
- 角色管理:基于角色的权限控制
- 功能权限:细粒度的功能访问控制
- 数据权限:基于组织的数据隔离
- 操作审计:完整的操作日志记录
2. 数据安全
- 数据加密:敏感数据加密存储
- 传输安全:HTTPS加密传输
- 备份恢复:定期数据备份
- 灾难恢复:完整的灾难恢复方案
性能优化
1. 数据库优化
- 索引优化:关键字段建立索引
- 查询优化:避免N+1查询问题
- 分页处理:大数据量分页加载
- 缓存机制:Redis缓存热点数据
2. 前端优化
- 懒加载:图片和视频懒加载
- 资源压缩:CSS/JS文件压缩
- CDN加速:静态资源CDN分发
- 浏览器缓存:合理的缓存策略
扩展性设计
1. 模块化架构
- 插件系统:支持功能模块扩展
- API接口:RESTful API设计
- 事件系统:基于事件的松耦合设计
- 配置管理:灵活的配置管理
2. 集成能力
- 财务系统:与财务系统数据同步
- HR系统:与人力资源系统集成
- 第三方服务:地图、支付等第三方服务
- 数据导入导出:Excel、CSV等格式支持
部署与运维
1. 部署架构
- 容器化部署:Docker容器化部署
- 负载均衡:多实例负载均衡
- 数据库集群:主从数据库集群
- 监控告警:系统性能监控
2. 运维管理
- 日志管理:集中化日志收集
- 性能监控:实时性能监控
- 备份策略:自动化备份策略
- 升级维护:平滑升级和热更新
未来规划
1. 功能扩展
- AI智能:人工智能辅助决策
- 物联网:IoT设备集成
- 区块链:资产溯源和防伪
- 移动应用:原生移动应用
2. 技术升级
- 微服务架构:向微服务架构演进
- 云原生:云原生技术栈
- 大数据:大数据分析能力
- 机器学习:机器学习算法应用
总结
本资产管理系统(AZZET)基于Symfony框架构建,实现了企业级资产全生命周期管理。系统支持有形资产和无形资产的一体化管理,采用现代化Web技术栈,提供直观的管理界面和强大的功能模块。
核心设计:全生命周期管理覆盖资产引入、使用、维护、处置全流程。双资产类型支持通过分类体系(tid字段)实现灵活管理。多媒体档案管理支持图片、视频、文档的统一管理和动态预览。
技术架构:采用Symfony 7.x + EasyAdminBundle + Doctrine ORM + Redis的技术栈,构建了资产管理、分类管理、组织管理、流程管理、库存管理等核心模块。
功能特性:智能资产管理、多媒体档案、流程自动化、数据分析等核心能力,支持自动编码、状态跟踪、位置定位、价值管理等业务需求。
用户体验:响应式设计适配多端设备,提供直观导航、快速操作、个性化设置,确保良好的用户体验。
安全性能:基于RBAC的权限控制,多层次安全防护,通过数据库优化、缓存机制、懒加载等技术手段确保系统高性能运行。
扩展能力:模块化架构支持功能扩展,RESTful API设计支持第三方集成,为未来技术演进和业务扩展奠定基础。
项目架构
系统架构概览
本资产管理系统采用现代化的分层架构设计,基于Symfony框架构建,遵循MVC设计模式和领域驱动设计(DDD)原则。系统采用模块化设计,支持高并发、高可用和可扩展的企业级应用需求。
技术架构
1. 技术栈组成
本图展示了系统的四层架构设计,从用户界面到数据存储的完整技术栈。每一层都有明确的职责分工,通过依赖关系实现松耦合的架构设计。
graph TB subgraph "前端层 (Frontend)" A1[EasyAdminBundle] A2[Bootstrap 5] A3[JavaScript] A4[Chart.js] A5[Twig Templates] A6[Stimulus] A7[Turbo] A8[Asset Mapper] end subgraph "应用层 (Application)" B1[Symfony 7.x] B2[EasyAdmin] B3[Controllers] B4[Services] B5[Event Listeners] B6[Commands] B7[Middleware] B8[Validators] end subgraph "领域层 (Domain)" C1[Entities] C2[Repositories] C3[Value Objects] C4[Events] C5[Business Logic] C6[Domain Rules] C7[Aggregates] C8[Services] end subgraph "基础设施层 (Infrastructure)" D1[Doctrine ORM] D2[Database] D3[File Storage] D4[Cache] D5[VichUploader] D6[Redis] D7[Logging] D8[Security] end A1 --> B1 A2 --> B2 A3 --> B3 A4 --> B4 A5 --> B5 A6 --> B6 A7 --> B7 A8 --> B8 B1 --> C1 B2 --> C2 B3 --> C3 B4 --> C4 B5 --> C5 B6 --> C6 B7 --> C7 B8 --> C8 C1 --> D1 C2 --> D2 C3 --> D3 C4 --> D4 C5 --> D5 C6 --> D6 C7 --> D7 C8 --> D8
架构说明:
- 前端层:负责用户交互,提供响应式界面和丰富的用户体验
- 应用层:处理业务逻辑,协调各组件之间的交互
- 领域层:包含核心业务规则和实体,确保业务逻辑的完整性
- 基础设施层:提供数据持久化、缓存、安全等基础服务
2. 核心框架与组件
后端框架
- Symfony 7.x: 核心PHP框架,提供依赖注入、事件系统、安全组件
- Doctrine ORM: 对象关系映射,数据库抽象层
- EasyAdminBundle: 管理界面生成器,快速构建CRUD操作
- VichUploaderBundle: 文件上传管理,支持多种存储后端
前端技术
- Twig: 模板引擎,支持模板继承和组件化
- Bootstrap 5: 响应式UI框架
- Stimulus: 轻量级JavaScript框架
- Chart.js: 数据可视化图表库
- Turbo: 单页应用体验,无需重载页面
数据存储
- PostgreSQL: 主数据库,支持复杂查询和事务
- Redis: 缓存和会话存储
- 文件系统: 多媒体文件存储
系统分层架构
1. 表现层 (Presentation Layer)
管理界面 (Admin Interface)
// 控制器结构
src/Controller/Admin/
├── DashboardController.php // 仪表板控制器
├── AssetCrudController.php // 固定资产CRUD
├── IntangibleCrudController.php // 无形资产CRUD
├── CategoryCrudController.php // 分类管理
├── InventoryCrudController.php // 库存管理
├── MaintenanceApplicationCrudController.php // 维护申请
├── UserCrudController.php // 用户管理
└── ...
自定义字段组件
// 自定义字段
src/Admin/Field/
├── CoordsField.php // 坐标字段
├── MapField.php // 地图字段
└── VichImageField.php // 图片上传字段
模板系统
templates/
├── admin/
│ ├── field/
│ │ ├── images_display.html.twig // 图片展示
│ │ ├── videos_display.html.twig // 视频展示
│ │ └── files_display.html.twig // 文件展示
│ └── asset_detail.html.twig // 资产详情页
├── base.html.twig // 基础模板
└── dashboard.html.twig // 仪表板
2. 应用层 (Application Layer)
服务层 (Service Layer)
src/Service/
├── DashboardData.php // 仪表板数据服务
├── SysinfoService.php // 系统信息服务
└── VideoThumbnailService.php // 视频缩略图服务
事件监听器
src/EventListener/
├── AssetListener.php // 资产事件监听
└── ...
命令处理
src/Command/
└── ...
3. 领域层 (Domain Layer)
核心实体 (Core Entities)
src/Entity/
├── Asset.php // 资产实体
├── Category.php // 分类实体
├── Organization.php // 组织实体
├── User.php // 用户实体
├── Tag.php // 标签实体
├── Image.php // 图片实体
├── Video.php // 视频实体
├── Attachment.php // 附件实体
├── Lease.php // 租赁实体
├── Borrow.php // 借用实体
├── Transfer.php // 调拨实体
├── Maintenance/
│ ├── Application.php // 维护申请
│ ├── Plan.php // 维护计划
│ └── Record.php // 维护记录
├── Purchase/
│ ├── Plan.php // 采购计划
│ ├── Contract.php // 采购合同
│ └── Acceptance.php // 采购验收
├── Disposal/
│ ├── Application.php // 处置申请
│ └── Appraisal.php // 处置评估
└── Inventory/
├── Stocktake.php // 盘点
└── Count.php // 计数
仓储模式 (Repository Pattern)
src/Repository/
├── AssetRepository.php
├── CategoryRepository.php
├── OrganizationRepository.php
└── ...
4. 基础设施层 (Infrastructure Layer)
数据库配置
# config/packages/doctrine.yaml
doctrine:
dbal:
url: '%env(resolve:DATABASE_URL)%'
server_version: '16'
orm:
auto_generate_proxy_classes: true
enable_lazy_ghost_objects: true
mappings:
App:
type: attribute
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
安全配置
# config/packages/security.yaml
security:
providers:
app_user_provider:
entity:
class: App\Entity\User
property: username
firewalls:
main:
form_login:
login_path: app_login
check_path: app_login
access_control:
- { path: ^/admin, roles: ROLE_USER }
role_hierarchy:
ROLE_SUPER_ADMIN: [ROLE_ADMIN]
ROLE_ROOT: [ROLE_SUPER_ADMIN, ROLE_ALLOWED_TO_SWITCH]
文件上传配置
# config/packages/vich_uploader.yaml
vich_uploader:
mappings:
asset_image:
uri_prefix: /images
upload_destination: '%kernel.project_dir%/public/images'
asset_video:
uri_prefix: /videos
upload_destination: '%kernel.project_dir%/public/videos'
asset_attachment:
uri_prefix: /attachments
upload_destination: '%kernel.project_dir%/public/attachments'
数据架构
1. 数据库设计
核心表结构
-- 资产表
CREATE TABLE asset (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
spec VARCHAR(255),
model VARCHAR(255),
value INTEGER,
depreciation INTEGER,
vendor VARCHAR(255),
purchased_at TIMESTAMP,
created_at TIMESTAMP NOT NULL,
status SMALLINT DEFAULT 0,
code VARCHAR(48),
coords VARCHAR(255),
address VARCHAR(255),
cert VARCHAR(255),
url VARCHAR(255),
note TEXT,
organization_id INTEGER NOT NULL,
category_id INTEGER NOT NULL,
FOREIGN KEY (organization_id) REFERENCES organization(id),
FOREIGN KEY (category_id) REFERENCES category(id)
);
-- 分类表
CREATE TABLE category (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
label VARCHAR(255) NOT NULL,
code VARCHAR(6) UNIQUE NOT NULL,
tid SMALLINT DEFAULT 1,
created_at TIMESTAMP NOT NULL
);
-- 组织表
CREATE TABLE organization (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
parent_id INTEGER,
created_at TIMESTAMP NOT NULL,
FOREIGN KEY (parent_id) REFERENCES organization(id)
);
关系映射
本图展示了核心实体之间的关系结构,以Asset为中心,连接分类、组织、多媒体文件等关键业务对象。这种设计确保了数据的完整性和查询的高效性。
erDiagram Asset ||--o{ Image : "has many" Asset ||--o{ Video : "has many" Asset ||--o{ Attachment : "has many" Asset }o--|| Category : "belongs to" Asset }o--|| Organization : "belongs to" Asset }o--o{ Tag : "has many" Asset { int id PK string name string spec string model int value int depreciation string vendor datetime purchased_at datetime created_at int status string code string coords string address string cert string url text note } Category { int id PK string name string label string code int tid datetime created_at } Organization { int id PK string name int parent_id FK datetime created_at } Image { int id PK string image string title string description int asset_id FK } Video { int id PK string video string title string description string video_format int file_size int duration int width int height int asset_id FK } Attachment { int id PK string attachment string title string description string file_type int file_size int asset_id FK } Tag { int id PK string name string label }
关系说明:
- Asset 作为核心实体,与所有业务对象建立关联
- 一对多关系:一个资产可以有多张图片、多个视频、多个附件
- 多对一关系:多个资产属于同一个分类或组织
- 多对多关系:资产和标签之间可以灵活关联
2. 状态管理
资产状态枚举
const STATUSES = [
'新增' => 0,
'闲置' => 10,
'在用' => 20,
'报废' => 30,
'维修' => 40
];
租赁状态枚举
const LEASE_STATUSES = [
'待审批' => 0,
'已批准' => 10,
'租赁中' => 20,
'已到期' => 30,
'已归还' => 40,
'已取消' => 50
];
模块架构
1. 资产管理模块
功能组件
本图展示了资产管理模块的层次结构,区分有形资产和无形资产的管理方式,通过不同的控制器和分类体系实现差异化管理。
graph TD A[Asset Management] --> B[Fixed Assets] A --> C[Intangible Assets] A --> D[Categories] B --> B1[AssetCrudController] B --> B2[Asset Entity] B --> B3[Asset Repository] C --> C1[IntangibleCrudController] C --> C2[Category tid=2] C --> C3[Specialized Fields] D --> D1[Fixed Categories tid=1] D --> D2[Intangible Categories tid=2] D --> D3[CategoryCrudController]
模块说明:
- 有形资产:通过AssetCrudController管理,支持完整的生命周期管理
- 无形资产:通过IntangibleCrudController管理,使用tid=2的分类体系
- 分类管理:统一的CategoryCrudController,通过tid字段区分资产类型
多媒体管理
本图展示了多媒体文件管理的架构设计,支持图片、视频、附件三种类型的文件管理,每种类型都有专门的处理机制和优化策略。
graph TD A[Media Management] --> B[Images] A --> C[Videos] A --> D[Attachments] B --> B1[Image Entity] B --> B2[VichUploader Integration] B --> B3[Thumbnail Generation] C --> C1[Video Entity] C --> C2[Thumbnail Service] C --> C3[Dynamic Loading] D --> D1[Attachment Entity] D --> D2[File Type Detection] D --> D3[Preview Support]
多媒体说明:
- 图片管理:支持缩略图生成、懒加载、响应式显示
- 视频管理:动态加载、缩略图服务、格式支持
- 附件管理:文件类型检测、预览支持、下载管理
2. 流程管理模块
采购流程
本图展示了资产采购的完整流程,从计划制定到合同签订再到验收确认,确保采购过程的规范性和可追溯性。
graph LR A[Purchase Plan<br/>采购计划] --> B[Purchase Contract<br/>采购合同] B --> C[Purchase Acceptance<br/>采购验收]
维护流程
本图展示了资产维护的流程管理,从维护申请到计划制定再到记录跟踪,实现维护工作的系统化管理。
graph LR A[Maintenance Application<br/>维护申请] --> B[Maintenance Plan<br/>维护计划] B --> C[Maintenance Record<br/>维护记录]
处置流程
本图展示了资产处置的流程设计,从处置申请到评估确认,确保资产处置的合规性和价值最大化。
graph LR A[Disposal Application<br/>处置申请] --> B[Disposal Appraisal<br/>处置评估]
3. 库存管理模块
盘点功能
本图展示了库存管理模块的核心功能,通过盘点和计数功能实现资产库存的精确管理,确保账实相符。
graph TD A[Inventory Management] --> B[Stocktake<br/>盘点] A --> C[Count<br/>计数] A --> D[InventoryCrudController]
库存管理说明:
- 盘点功能:定期或不定期的资产清查,确保资产状态准确
- 计数功能:实时统计资产数量,支持多维度统计
- 控制器管理:统一的CRUD操作,支持批量处理
4. 系统管理模块
权限管理
本图展示了系统管理模块的权限管理架构,通过用户、角色、权限的层次化管理,实现细粒度的访问控制。
graph TD A[System Management] --> B[User Management] A --> C[Role Management] A --> D[Permission Management] A --> E[Organization Management] A --> F[System Configuration]
权限管理说明:
- 用户管理:用户账户的创建、修改、删除和状态管理
- 角色管理:定义不同层级的角色,如管理员、操作员等
- 权限管理:细粒度的功能权限控制,确保数据安全
- 组织管理:支持多级组织架构,实现数据隔离
- 系统配置:全局系统参数的设置和管理
安全架构
1. 认证与授权
用户认证
- 表单登录: 用户名/密码认证
- 会话管理: 基于Cookie的会话
- 密码加密: 自动密码哈希
权限控制
本图展示了系统的权限层次结构,从最高权限的ROLE_ROOT到基础用户权限,通过多层次的权限控制确保系统安全。
graph TD A[ROLE_ROOT] --> B[ROLE_SUPER_ADMIN] B --> C[ROLE_ADMIN] C --> D[ROLE_USER] A --> A1[Full System Access] B --> B1[Admin Functions] C --> C1[Management Functions] D --> D1[Basic User Functions] E[Access Control] --> F[Path-based Control] E --> G[Feature-based Control] E --> H[Data-based Control]
权限层次说明:
- ROLE_ROOT:系统最高权限,拥有所有功能访问权限
- ROLE_SUPER_ADMIN:超级管理员,拥有管理功能权限
- ROLE_ADMIN:管理员,拥有管理功能权限
- ROLE_USER:普通用户,拥有基础功能权限
- 访问控制:支持基于路径、功能、数据的多维度权限控制
2. 数据安全
输入验证
本图展示了系统输入验证的安全机制,通过多层验证确保数据的安全性和完整性,防止常见的安全攻击。
graph TD A[Input Validation] --> B[Form Validation<br/>Symfony Validator] A --> C[SQL Injection Protection<br/>Doctrine ORM] A --> D[XSS Protection<br/>Twig Auto-escape] B --> B1[Field Validation] B --> B2[Custom Validators] C --> C1[Parameterized Queries] C --> C2[Query Builder] D --> D1[Automatic Escaping] D --> D2[Safe HTML Filtering]
验证机制说明:
- 表单验证:使用Symfony Validator进行字段验证和自定义验证器
- SQL注入防护:通过Doctrine ORM的参数化查询和查询构建器防止SQL注入
- XSS防护:通过Twig模板的自动转义和安全HTML过滤防止跨站脚本攻击
文件安全
本图展示了文件上传和存储的安全机制,通过上传限制、存储隔离和访问控制确保文件系统的安全性。
graph TD A[File Security] --> B[Upload Restrictions] A --> C[Storage Isolation] A --> D[Access Control] B --> B1[File Type Validation] B --> B2[File Size Limits] C --> C1[Separate Directories] C --> C2[Permission Isolation] D --> D1[Role-based Access] D --> D2[Path Validation]
文件安全说明:
- 上传限制:文件类型验证和大小限制,防止恶意文件上传
- 存储隔离:分离目录存储和权限隔离,确保文件安全
- 访问控制:基于角色的访问控制和路径验证,防止未授权访问
性能架构
1. 缓存策略
应用缓存
本图展示了系统的多层缓存策略,通过应用缓存、数据库缓存和会话缓存提升系统性能和响应速度。
graph TD A[Cache Strategy] --> B[Application Cache] A --> C[Database Cache] A --> D[Session Cache] B --> B1[doctrine.result_cache_pool] B --> B2[doctrine.system_cache_pool] B --> B3[cache.app] B --> B4[cache.system] C --> C1[Query Result Cache] C --> C2[Metadata Cache] D --> D1[User Session] D --> D2[Application State]
缓存策略说明:
- 应用缓存:Doctrine结果缓存、系统缓存、应用缓存和系统缓存池
- 数据库缓存:查询结果缓存和元数据缓存,减少数据库查询
- 会话缓存:用户会话和应用程序状态缓存,提升用户体验
数据库优化
本图展示了数据库性能优化的策略,通过查询优化、索引策略和连接池管理提升数据库性能。
graph TD A[Database Optimization] --> B[Query Optimization] A --> C[Index Strategy] A --> D[Connection Pool] B --> B1[Avoid N+1 Queries] B --> B2[Eager Loading] B --> B3[Query Caching] C --> C1[Primary Key Indexes] C --> C2[Foreign Key Indexes] C --> C3[Search Field Indexes] D --> D1[Connection Pooling] D --> D2[Connection Limits] D --> D3[Connection Timeout]
数据库优化说明:
- 查询优化:避免N+1查询、预加载、查询缓存等优化策略
- 索引策略:主键索引、外键索引、搜索字段索引的合理设计
- 连接池:连接池管理、连接限制和超时设置,确保数据库连接的高效利用
2. 前端优化
资源管理
本图展示了前端资源管理的优化策略,通过资源映射、压缩和浏览器缓存提升前端性能。
graph TD A[Resource Management] --> B[Asset Mapper] A --> C[Resource Compression] A --> D[Browser Caching] B --> B1[Modular JS Loading] B --> B2[Dynamic Imports] C --> C1[CSS Minification] C --> C2[JS Minification] C --> C3[Image Optimization] D --> D1[Cache Headers] D --> D2[ETag Support] D --> D3[Version Control]
资源管理说明:
- 资源映射:模块化JS加载和动态导入,提升加载效率
- 资源压缩:CSS、JS压缩和图片优化,减少传输大小
- 浏览器缓存:缓存头、ETag支持和版本控制,提升缓存效率
懒加载
本图展示了懒加载技术的实现策略,通过图片懒加载、视频懒加载和分页加载提升页面性能。
graph TD A[Lazy Loading] --> B[Image Lazy Loading] A --> C[Video Lazy Loading] A --> D[Pagination Loading] B --> B1[IntersectionObserver API] B --> B2[Placeholder Images] C --> C1[Dynamic Video Creation] C --> C2[Thumbnail Generation] D --> D1[Data Pagination] D --> D2[Infinite Scroll] D --> D3[Virtual Scrolling]
懒加载说明:
- 图片懒加载:使用IntersectionObserver API和占位图片,按需加载图片
- 视频懒加载:动态创建视频元素和缩略图生成,优化视频加载
- 分页加载:数据分页、无限滚动和虚拟滚动,提升大数据量处理性能
部署架构
1. 容器化部署
Docker配置
# 应用容器
FROM php:8.2-fpm
# 安装扩展和依赖
# 配置应用环境
服务编排
本图展示了Docker容器化部署的服务架构,通过多个容器服务实现应用的高可用和可扩展性。
graph TB subgraph "Docker Services" A[App Container<br/>PHP 8.2-FPM] B[Nginx Container<br/>Reverse Proxy] C[PostgreSQL Container<br/>Database] D[Redis Container<br/>Cache & Session] end A --> B A --> C A --> D B --> A E[External Access] --> B B --> F[Load Balancer] F --> G[Multiple App Instances]
服务编排说明:
- 应用容器:PHP 8.2-FPM应用容器,处理业务逻辑
- 反向代理:Nginx容器作为反向代理,处理HTTP请求
- 数据库容器:PostgreSQL数据库容器,存储业务数据
- 缓存容器:Redis容器,提供缓存和会话存储
- 负载均衡:支持多应用实例的负载均衡,提升系统可用性
2. 生产环境
负载均衡
本图展示了生产环境的负载均衡架构,通过Nginx负载均衡器分发请求到多个应用实例,确保系统的高可用性。
graph TB A[External Users] --> B[Nginx Load Balancer] B --> C[App Instance 1] B --> D[App Instance 2] B --> E[App Instance N] C --> F[PostgreSQL Master] D --> F E --> F C --> G[Redis Cluster] D --> G E --> G H[Session Storage] --> G I[Cache Storage] --> G
负载均衡说明:
- 负载均衡器:Nginx作为负载均衡器,分发用户请求到多个应用实例
- 应用实例:多个应用实例并行处理请求,提升系统处理能力
- 数据库集群:PostgreSQL主库和Redis集群,提供数据存储和缓存服务
- 会话存储:通过Redis集群实现会话共享,支持多实例部署
监控告警
本图展示了系统的监控告警架构,通过应用监控、日志管理和告警系统确保系统的稳定运行。
graph TD A[Monitoring System] --> B[Application Monitoring] A --> C[Log Management] A --> D[Alert System] B --> B1[Performance Metrics] B --> B2[Response Times] B --> B3[Error Rates] C --> C1[Centralized Logging] C --> C2[Log Aggregation] C --> C3[Log Analysis] D --> D1[Threshold Alerts] D --> D2[Anomaly Detection] D --> D3[Notification Channels]
监控告警说明:
- 应用监控:性能指标、响应时间、错误率等关键指标的实时监控
- 日志管理:集中化日志、日志聚合和日志分析,便于问题排查
- 告警系统:阈值告警、异常检测和通知渠道,及时发现问题并通知相关人员
扩展性设计
1. 模块化架构
插件系统
本图展示了系统的插件化架构设计,通过事件驱动、服务扩展和配置管理实现系统的模块化扩展。
graph TD A[Plugin System] --> B[Event-driven Architecture] A --> C[Service Extension] A --> D[Configuration Management] B --> B1[Symfony Event System] B --> B2[Custom Event Listeners] B --> B3[Event Subscribers] C --> C1[Dependency Injection] C --> C2[Service Container] C --> C3[Service Tags] D --> D1[YAML Configuration] D --> D2[Environment Variables] D --> D3[Runtime Configuration]
插件系统说明:
- 事件驱动架构:基于Symfony事件系统,支持自定义事件监听器和订阅者
- 服务扩展:通过依赖注入、服务容器和服务标签实现功能扩展
- 配置管理:YAML配置、环境变量和运行时配置,支持灵活的配置管理
API接口
本图展示了系统的API接口设计,通过RESTful API、版本控制和文档管理实现系统的开放性和可集成性。
graph TD A[API System] --> B[RESTful API] A --> C[Version Control] A --> D[Documentation] B --> B1[HTTP Methods] B --> B2[Resource Endpoints] B --> B3[Status Codes] C --> C1[API Versioning] C --> C2[Backward Compatibility] C --> C3[Migration Strategy] D --> D1[OpenAPI Specification] D --> D2[Auto-generated Docs] D --> D3[Interactive Testing]
API接口说明:
- RESTful API:标准HTTP方法、资源端点和状态码,提供统一的API接口
- 版本控制:API版本管理、向后兼容和迁移策略,确保API的稳定性
- 文档管理:OpenAPI规范、自动生成文档和交互式测试,提升API的可用性
2. 集成能力
第三方集成
本图展示了系统的第三方集成能力,通过地图服务、文件存储和通知服务实现系统的功能扩展。
graph TD A[Third-party Integration] --> B[Map Services] A --> C[File Storage] A --> D[Notification Services] B --> B1[Tencent Maps API] B --> B2[Geocoding Service] B --> B3[Reverse Geocoding] C --> C1[Cloud Storage] C --> C2[CDN Integration] C --> C3[File Processing] D --> D1[Email Service] D --> D2[SMS Service] D --> D3[Push Notifications]
第三方集成说明:
- 地图服务:腾讯地图API、地理编码和反向地理编码,提供地理位置服务
- 文件存储:云存储、CDN集成和文件处理,提供高效的文件管理
- 通知服务:邮件服务、短信服务和推送通知,提供多渠道通知能力
数据同步
本图展示了系统的数据同步架构,通过财务系统、HR系统和外部系统的数据同步实现系统间的数据一致性。
graph TD A[Data Synchronization] --> B[Financial System] A --> C[HR System] A --> D[External Systems] B --> B1[Asset Value Sync] B --> B2[Depreciation Data] B --> B3[Cost Center Mapping] C --> C1[Employee Data] C --> C2[Organization Structure] C --> C3[Role Mapping] D --> D1[Standard APIs] D --> D2[Data Transformation] D --> D3[Error Handling]
数据同步说明:
- 财务系统:资产价值同步、折旧数据和成本中心映射,确保财务数据一致性
- HR系统:员工数据、组织结构和角色映射,实现人员信息同步
- 外部系统:标准API、数据转换和错误处理,支持与各种外部系统的集成
运维架构
1. 日志管理
日志配置
# config/packages/monolog.yaml
monolog:
handlers:
main:
type: stream
path: '%kernel.logs_dir%/%kernel.environment%.log'
level: debug
审计日志
本图展示了系统的审计日志架构,通过操作记录、数据变更和安全事件的日志管理实现系统的可追溯性。
graph TD A[Audit Logging] --> B[Operation Records] A --> C[Data Changes] A --> D[Security Events] B --> B1[User Actions] B --> B2[System Events] B --> B3[API Calls] C --> C1[Entity Changes] C --> C2[Field Updates] C --> C3[Bulk Operations] D --> D1[Login Attempts] D --> D2[Permission Denials] D --> D3[Security Violations]
审计日志说明:
- 操作记录:用户操作、系统事件和API调用,记录所有业务操作
- 数据变更:实体变更、字段更新和批量操作,跟踪数据变化历史
- 安全事件:登录尝试、权限拒绝和安全违规,监控系统安全状态
2. 备份恢复
数据备份
本图展示了系统的数据备份策略,通过数据库备份、文件备份和配置备份确保数据的安全性和可恢复性。
graph TD A[Data Backup] --> B[Database Backup] A --> C[File Backup] A --> D[Configuration Backup] B --> B1[Full Backup] B --> B2[Incremental Backup] B --> B3[Point-in-time Recovery] C --> C1[Upload Files] C --> C2[Generated Files] C --> C3[Log Files] D --> D1[System Config] D --> D2[Application Config] D --> D3[Environment Variables]
数据备份说明:
- 数据库备份:全量备份、增量备份和时点恢复,确保数据完整性
- 文件备份:上传文件、生成文件和日志文件,保护所有文件资源
- 配置备份:系统配置、应用配置和环境变量,确保系统配置的可恢复性
灾难恢复
本图展示了系统的灾难恢复架构,通过备份策略、恢复流程和测试验证确保系统在灾难情况下的快速恢复能力。
graph TD A[Disaster Recovery] --> B[Backup Strategy] A --> C[Recovery Process] A --> D[Testing & Validation] B --> B1[Multi-level Backups] B --> B2[Geographic Distribution] B --> B3[Retention Policies] C --> C1[Standardized Procedures] C --> C2[Recovery Time Objectives] C --> C3[Recovery Point Objectives] D --> D1[Regular Testing] D --> D2[Recovery Drills] D --> D3[Performance Validation]
灾难恢复说明:
- 备份策略:多级备份、地理分布和保留策略,确保备份的可靠性
- 恢复流程:标准化程序、恢复时间目标和恢复点目标,确保快速恢复
- 测试验证:定期测试、恢复演练和性能验证,确保恢复流程的有效性
总结
本资产管理系统采用基于Symfony 7.x的现代化分层架构,通过EasyAdminBundle、Doctrine ORM、Redis缓存等技术栈构建了完整的企业级资产管理平台。
核心特点:系统支持有形资产和无形资产的双重管理,具备多媒体档案管理、动态加载、懒加载等性能优化能力。采用模块化设计,包含资产管理、流程管理、库存管理、系统管理等核心模块。
安全与性能:构建了多层次安全架构,基于RBAC的权限控制,通过缓存机制、数据库优化、前端资源优化确保高并发场景下的稳定运行。
部署运维:采用Docker容器化部署,支持负载均衡和水平扩展,具备完善的监控告警、日志管理、备份恢复机制。
扩展能力:基于事件系统的插件化架构,支持功能模块动态扩展,提供RESTful API接口,支持与财务系统、HR系统等外部系统集成。
该架构为开发、运维、业务团队提供了清晰的技术指导,为企业资产管理数字化转型提供强有力的技术支撑。
系统要求
硬件要求
最低配置
- CPU: 2核心 2.0GHz
- 内存: 4GB RAM
- 存储: 50GB 可用磁盘空间
- 网络: 100Mbps 网络连接
推荐配置
- CPU: 4核心 2.5GHz 或更高
- 内存: 8GB RAM 或更高
- 存储: 100GB SSD 可用磁盘空间
- 网络: 1Gbps 网络连接
生产环境配置
- CPU: 8核心 3.0GHz 或更高
- 内存: 16GB RAM 或更高
- 存储: 500GB SSD 可用磁盘空间
- 网络: 10Gbps 网络连接
- 备份存储: 1TB 或更高
软件要求
操作系统
- Linux: Ubuntu 20.04 LTS 或更高版本
- Linux: CentOS 8 或更高版本
- Linux: RHEL 8 或更高版本
- Windows: Windows Server 2019 或更高版本
Web服务器
- Nginx: 1.18 或更高版本
- Apache: 2.4 或更高版本
- IIS: 10.0 或更高版本(Windows)
数据库
- PostgreSQL: 13 或更高版本(推荐)
- MySQL: 8.0 或更高版本
- MariaDB: 10.6 或更高版本
PHP环境
- PHP版本: 8.2 或更高版本
- PHP扩展:
pdo_pgsql
或pdo_mysql
mbstring
xml
curl
gd
zip
intl
json
openssl
fileinfo
exif
缓存服务
- Redis: 6.0 或更高版本
- 内存要求: 2GB 或更高
文件存储
- 本地存储: 支持大文件上传
- 云存储: AWS S3、阿里云OSS、腾讯云COS(可选)
开发环境要求
开发工具
- PHP: 8.2 或更高版本
- Composer: 2.0 或更高版本
- Node.js: 18.0 或更高版本
- npm: 8.0 或更高版本
开发框架
- Symfony: 7.0 或更高版本
- EasyAdminBundle: 4.0 或更高版本
- Doctrine ORM: 2.15 或更高版本
- VichUploaderBundle: 1.20 或更高版本
开发工具
- Git: 2.30 或更高版本
- Docker: 20.10 或更高版本
- Docker Compose: 2.0 或更高版本
浏览器支持
桌面浏览器
- Chrome: 90 或更高版本
- Firefox: 88 或更高版本
- Safari: 14 或更高版本
- Edge: 90 或更高版本
移动浏览器
- Chrome Mobile: 90 或更高版本
- Safari Mobile: 14 或更高版本
- Firefox Mobile: 88 或更高版本
功能支持
- JavaScript: ES6+ 支持
- CSS: CSS3 支持
- HTML5: 完整支持
- WebGL: 地图功能支持
网络要求
带宽要求
- 最低: 10Mbps 上行/下行
- 推荐: 100Mbps 上行/下行
- 生产环境: 1Gbps 上行/下行
延迟要求
- 内网: < 10ms
- 外网: < 100ms
- 国际网络: < 300ms
端口要求
- HTTP: 80
- HTTPS: 443
- 数据库: 5432 (PostgreSQL) 或 3306 (MySQL)
- Redis: 6379
- SSH: 22
安全要求
SSL/TLS
- 证书: 有效的SSL证书
- 版本: TLS 1.2 或更高版本
- 加密: AES-256 或更高
防火墙
- 入站规则: 仅开放必要端口
- 出站规则: 限制不必要的出站连接
- DDoS防护: 建议启用
访问控制
- VPN: 建议使用VPN访问
- IP白名单: 限制访问IP范围
- 双因素认证: 建议启用
性能要求
响应时间
- 页面加载: < 3秒
- API响应: < 1秒
- 文件上传: < 30秒(100MB文件)
- 数据库查询: < 500ms
并发用户
- 最低: 50 并发用户
- 推荐: 200 并发用户
- 生产环境: 1000 并发用户
数据处理
- 文件上传: 支持最大500MB文件
- 图片处理: 支持最大50MB图片
- 视频处理: 支持最大2GB视频
- 数据库: 支持百万级数据记录
存储要求
数据库存储
- 初始大小: 1GB
- 年增长: 10GB
- 备份存储: 3倍数据大小
文件存储
- 图片文件: 平均2MB/张
- 视频文件: 平均100MB/个
- 文档文件: 平均5MB/个
- 总存储: 根据业务量预估
日志存储
- 应用日志: 100MB/天
- 访问日志: 500MB/天
- 错误日志: 50MB/天
- 审计日志: 200MB/天
备份要求
数据备份
- 频率: 每日增量备份
- 保留期: 30天
- 存储位置: 异地存储
- 恢复时间: < 4小时
文件备份
- 频率: 每周全量备份
- 保留期: 90天
- 存储位置: 云存储
- 恢复时间: < 2小时
系统备份
- 频率: 每月系统备份
- 保留期: 12个月
- 存储位置: 安全存储
- 恢复时间: < 8小时
监控要求
系统监控
- CPU使用率: < 80%
- 内存使用率: < 85%
- 磁盘使用率: < 90%
- 网络使用率: < 70%
应用监控
- 响应时间: < 3秒
- 错误率: < 1%
- 可用性: > 99.5%
- 并发数: 实时监控
数据库监控
- 连接数: < 80%
- 查询时间: < 1秒
- 锁等待: < 100ms
- 缓存命中率: > 90%
扩展性要求
水平扩展
- 应用服务器: 支持多实例部署
- 数据库: 支持读写分离
- 缓存: 支持集群部署
- 负载均衡: 支持自动扩展
垂直扩展
- CPU: 支持动态扩容
- 内存: 支持动态扩容
- 存储: 支持动态扩容
- 网络: 支持带宽升级
兼容性要求
操作系统兼容性
- Linux: 主流发行版支持
- Windows: Server版本支持
- 容器: Docker/Kubernetes支持
数据库兼容性
- PostgreSQL: 主要支持
- MySQL: 兼容支持
- MariaDB: 兼容支持
云平台兼容性
- AWS: 完全支持
- 阿里云: 完全支持
- 腾讯云: 完全支持
- Azure: 完全支持
维护要求
系统更新
- 安全更新: 及时安装
- 功能更新: 定期发布
- 数据库更新: 兼容性测试
- 依赖更新: 版本管理
性能优化
- 数据库优化: 定期分析
- 缓存优化: 策略调整
- 代码优化: 性能监控
- 资源优化: 容量规划
故障处理
- 故障检测: 自动监控
- 故障恢复: 快速响应
- 故障分析: 根因分析
- 故障预防: 经验总结
总结
本资产管理系统要求文档全面阐述了系统部署、运维和扩展所需的硬件、软件、网络、安全、性能等各方面的技术要求。
硬件配置:最低配置支持小规模部署,推荐配置满足中等规模应用,生产环境配置确保高并发和大数据量处理能力。支持从2核心4GB到8核心16GB的灵活配置。
软件环境:基于PHP 8.2+和Symfony 7.x的现代化技术栈,支持PostgreSQL、MySQL、MariaDB等主流数据库,集成Redis缓存和Nginx/Apache Web服务器。
性能指标:页面加载<3秒,API响应<1秒,支持50-1000并发用户,文件上传支持最大500MB,数据库查询<500ms,确保系统高性能运行。
安全防护:SSL/TLS加密传输,防火墙规则配置,访问控制机制,支持VPN和双因素认证,构建多层次安全防护体系。
监控运维:完善的系统监控、应用监控、数据库监控指标,支持自动扩展和故障恢复,确保系统稳定可靠运行。
扩展能力:支持水平和垂直扩展,兼容主流云平台,提供灵活的部署方案,为未来业务增长和技术演进提供保障。
该要求文档为系统规划、部署实施、运维管理提供了详细的技术规范和参考标准。
数据库设计
数据库概述
本资产管理系统采用关系型数据库设计,基于PostgreSQL 13+构建,支持MySQL 8.0+和MariaDB 10.6+兼容。数据库设计遵循第三范式,确保数据一致性和完整性,支持高并发访问和复杂查询。
数据库关系图
1. 核心实体关系图
erDiagram Asset ||--o{ Image : "has many" Asset ||--o{ Video : "has many" Asset ||--o{ Attachment : "has many" Asset }o--|| Category : "belongs to" Asset }o--|| Organization : "belongs to" Asset }o--o{ Tag : "has many" Asset { int id PK string name string spec string model int value int depreciation string vendor datetime purchased_at int status string code string coords string address int organization_id FK int category_id FK } Category { int id PK string name string label string code int tid } Organization { int id PK string name int parent_id FK } Image { int id PK int asset_id FK string image string title int file_size int width int height } Video { int id PK int asset_id FK string video string title string video_format int duration int width int height } Attachment { int id PK int asset_id FK string attachment string title string file_type int file_size } Tag { int id PK string name string label string color }
2. 业务流程关系图
erDiagram Asset ||--o{ Lease : "has many" Asset ||--o{ Borrow : "has many" Asset ||--o{ Transfer : "has many" Asset ||--o{ MaintenanceApplication : "has many" Asset ||--o{ MaintenancePlan : "has many" Asset ||--o{ MaintenanceRecord : "has many" Asset ||--o{ DisposalApplication : "has many" Organization ||--o{ Transfer : "from/to" Asset { int id PK string name int status int organization_id FK } Lease { int id PK int asset_id FK string lessee_name string lessee_company datetime lease_start_date datetime lease_end_date int status } Borrow { int id PK int asset_id FK string borrower_name string borrower_department datetime borrow_start_date datetime borrow_end_date int status } Transfer { int id PK int asset_id FK int from_organization_id FK int to_organization_id FK text transfer_reason int status } MaintenanceApplication { int id PK int asset_id FK string applicant_name string maintenance_type int priority text description int status } MaintenancePlan { int id PK int asset_id FK string plan_name string plan_type string frequency datetime next_maintenance_date int status } MaintenanceRecord { int id PK int asset_id FK int maintenance_application_id FK int maintenance_plan_id FK datetime maintenance_date string maintenance_type text maintenance_result } DisposalApplication { int id PK int asset_id FK string application_number string applicant_name text disposal_reason string disposal_method int status }
3. 维护管理关系图
erDiagram MaintenanceApplication ||--o{ MaintenanceRecord : "generates" MaintenancePlan ||--o{ MaintenanceRecord : "generates" Asset ||--o{ MaintenanceApplication : "has many" Asset ||--o{ MaintenancePlan : "has many" Asset ||--o{ MaintenanceRecord : "has many" MaintenanceApplication { int id PK int asset_id FK string applicant_name string applicant_department string maintenance_type int priority text description datetime expected_date int maintenance_cost int status } MaintenancePlan { int id PK int asset_id FK string plan_name string plan_type string frequency datetime next_maintenance_date datetime last_maintenance_date text maintenance_items string responsible_person int status } MaintenanceRecord { int id PK int asset_id FK int maintenance_application_id FK int maintenance_plan_id FK datetime maintenance_date string maintenance_type string maintenance_person text maintenance_items text maintenance_result int maintenance_cost }
4. 采购管理关系图
erDiagram PurchaseContract ||--o{ PurchaseAcceptance : "has many" User ||--o{ PurchasePlan : "creates" User ||--o{ PurchaseContract : "creates" PurchasePlan { int id PK string plan_name int plan_year int plan_quarter int total_budget int used_budget int status int created_by FK } PurchaseContract { int id PK string contract_number string contract_name string supplier_name string supplier_contact int contract_amount datetime contract_date datetime delivery_date text payment_terms int status int created_by FK } PurchaseAcceptance { int id PK int contract_id FK string acceptance_number datetime acceptance_date string acceptance_person text acceptance_result int status } User { int id PK string username string email string first_name string last_name }
5. 处置管理关系图
erDiagram DisposalApplication ||--o{ DisposalAppraisal : "has many" Asset ||--o{ DisposalApplication : "has many" DisposalApplication { int id PK int asset_id FK string application_number string applicant_name string applicant_department text disposal_reason string disposal_method datetime disposal_date int disposal_value int status } DisposalAppraisal { int id PK int application_id FK string appraiser_name datetime appraisal_date int appraisal_value string appraisal_method text appraisal_result int status }
6. 用户权限关系图
erDiagram User ||--o{ UserRole : "has many" User ||--o{ AuditLog : "creates" Role ||--o{ UserRole : "assigned to" Role ||--o{ RolePermission : "has many" Permission ||--o{ RolePermission : "granted to" Organization ||--o{ User : "contains" User { int id PK string username string email string first_name string last_name string phone int organization_id FK boolean is_active } Role { int id PK string name string label text description boolean is_system } Permission { int id PK string name string label text description string resource string action } UserRole { int user_id FK int role_id FK } RolePermission { int role_id FK int permission_id FK } AuditLog { int id PK int user_id FK string entity_type int entity_id string action json old_values json new_values }
7. 组织架构关系图
erDiagram Organization ||--o{ Organization : "parent-child" Organization ||--o{ Asset : "owns" Organization ||--o{ User : "contains" Organization ||--o{ Transfer : "from/to" Organization { int id PK string name int parent_id FK datetime created_at } Asset { int id PK string name string code int status int organization_id FK } User { int id PK string username string email string first_name string last_name int organization_id FK } Transfer { int id PK int asset_id FK int from_organization_id FK int to_organization_id FK text transfer_reason int status }
核心表结构
1. 资产表 (asset)
CREATE TABLE asset (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL COMMENT '资产名称',
spec VARCHAR(255) COMMENT '规格型号',
model VARCHAR(255) COMMENT '型号',
value INTEGER COMMENT '资产价值(分)',
depreciation INTEGER COMMENT '累计折旧(分)',
vendor VARCHAR(255) COMMENT '供应商',
purchased_at TIMESTAMP COMMENT '采购日期',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
status SMALLINT DEFAULT 0 COMMENT '状态:0新增,10闲置,20在用,30报废,40维修',
code VARCHAR(48) COMMENT '资产编码',
coords VARCHAR(255) COMMENT '坐标信息',
address VARCHAR(255) COMMENT '地址',
cert VARCHAR(255) COMMENT '证书编号',
url VARCHAR(255) COMMENT '相关链接',
note TEXT COMMENT '备注',
organization_id INTEGER NOT NULL COMMENT '所属组织ID',
category_id INTEGER NOT NULL COMMENT '分类ID',
INDEX idx_asset_organization (organization_id),
INDEX idx_asset_category (category_id),
INDEX idx_asset_status (status),
INDEX idx_asset_code (code),
INDEX idx_asset_created_at (created_at),
FOREIGN KEY (organization_id) REFERENCES organization(id),
FOREIGN KEY (category_id) REFERENCES category(id)
);
2. 分类表 (category)
CREATE TABLE category (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL COMMENT '分类名称',
label VARCHAR(255) NOT NULL COMMENT '分类标签',
code VARCHAR(6) UNIQUE NOT NULL COMMENT '分类编码',
tid SMALLINT DEFAULT 1 COMMENT '类型ID:1有形资产,2无形资产',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_category_tid (tid),
INDEX idx_category_code (code),
CONSTRAINT chk_category_code CHECK (code ~ '^[A-Z]+$')
);
3. 组织表 (organization)
CREATE TABLE organization (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL COMMENT '组织名称',
parent_id INTEGER COMMENT '父组织ID',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_organization_parent (parent_id),
FOREIGN KEY (parent_id) REFERENCES organization(id)
);
4. 用户表 (user)
CREATE TABLE user (
id SERIAL PRIMARY KEY,
username VARCHAR(180) UNIQUE NOT NULL COMMENT '用户名',
email VARCHAR(255) UNIQUE NOT NULL COMMENT '邮箱',
password VARCHAR(255) NOT NULL COMMENT '密码哈希',
first_name VARCHAR(255) COMMENT '名字',
last_name VARCHAR(255) COMMENT '姓氏',
phone VARCHAR(20) COMMENT '电话',
organization_id INTEGER COMMENT '所属组织ID',
is_active BOOLEAN DEFAULT TRUE COMMENT '是否激活',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
last_login_at TIMESTAMP COMMENT '最后登录时间',
INDEX idx_user_organization (organization_id),
INDEX idx_user_email (email),
INDEX idx_user_active (is_active),
FOREIGN KEY (organization_id) REFERENCES organization(id)
);
5. 标签表 (tag)
CREATE TABLE tag (
id SERIAL PRIMARY KEY,
name VARCHAR(255) UNIQUE NOT NULL COMMENT '标签名称',
label VARCHAR(255) NOT NULL COMMENT '标签显示名称',
color VARCHAR(7) DEFAULT '#007bff' COMMENT '标签颜色',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_tag_name (name)
);
多媒体表结构
6. 图片表 (image)
CREATE TABLE image (
id SERIAL PRIMARY KEY,
asset_id INTEGER NOT NULL COMMENT '资产ID',
image VARCHAR(255) NOT NULL COMMENT '图片文件名',
title VARCHAR(255) COMMENT '图片标题',
description TEXT COMMENT '图片描述',
file_size INTEGER COMMENT '文件大小(字节)',
width INTEGER COMMENT '图片宽度',
height INTEGER COMMENT '图片高度',
mime_type VARCHAR(100) COMMENT 'MIME类型',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_image_asset (asset_id),
INDEX idx_image_created_at (created_at),
FOREIGN KEY (asset_id) REFERENCES asset(id) ON DELETE CASCADE
);
7. 视频表 (video)
CREATE TABLE video (
id SERIAL PRIMARY KEY,
asset_id INTEGER NOT NULL COMMENT '资产ID',
video VARCHAR(255) NOT NULL COMMENT '视频文件名',
title VARCHAR(255) COMMENT '视频标题',
description TEXT COMMENT '视频描述',
video_format VARCHAR(50) COMMENT '视频格式',
file_size INTEGER COMMENT '文件大小(字节)',
duration INTEGER COMMENT '视频时长(秒)',
width INTEGER COMMENT '视频宽度',
height INTEGER COMMENT '视频高度',
thumbnail VARCHAR(255) COMMENT '缩略图文件名',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_video_asset (asset_id),
INDEX idx_video_format (video_format),
INDEX idx_video_created_at (created_at),
FOREIGN KEY (asset_id) REFERENCES asset(id) ON DELETE CASCADE
);
8. 附件表 (attachment)
CREATE TABLE attachment (
id SERIAL PRIMARY KEY,
asset_id INTEGER NOT NULL COMMENT '资产ID',
attachment VARCHAR(255) NOT NULL COMMENT '附件文件名',
title VARCHAR(255) COMMENT '附件标题',
description TEXT COMMENT '附件描述',
file_type VARCHAR(100) COMMENT '文件类型',
file_size INTEGER COMMENT '文件大小(字节)',
mime_type VARCHAR(100) COMMENT 'MIME类型',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_attachment_asset (asset_id),
INDEX idx_attachment_file_type (file_type),
INDEX idx_attachment_created_at (created_at),
FOREIGN KEY (asset_id) REFERENCES asset(id) ON DELETE CASCADE
);
业务流程表结构
9. 租赁表 (lease)
CREATE TABLE lease (
id SERIAL PRIMARY KEY,
asset_id INTEGER NOT NULL COMMENT '资产ID',
lessee_name VARCHAR(255) NOT NULL COMMENT '承租人姓名',
lessee_company VARCHAR(255) COMMENT '承租人公司',
lessee_contact VARCHAR(255) COMMENT '联系人',
lessee_phone VARCHAR(255) COMMENT '联系电话',
lessee_email VARCHAR(255) COMMENT '联系邮箱',
lessee_address VARCHAR(255) COMMENT '联系地址',
lease_start_date TIMESTAMP NOT NULL COMMENT '租赁开始日期',
lease_end_date TIMESTAMP NOT NULL COMMENT '租赁结束日期',
actual_return_date TIMESTAMP COMMENT '实际归还日期',
monthly_rent INTEGER COMMENT '月租金(分)',
security_deposit INTEGER COMMENT '押金(分)',
lease_terms TEXT COMMENT '租赁条款',
purpose TEXT COMMENT '租赁用途',
notes TEXT COMMENT '备注',
location VARCHAR(255) COMMENT '租赁位置',
status SMALLINT DEFAULT 0 COMMENT '状态:0待审批,10已批准,20租赁中,30已到期,40已归还,50已取消',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_lease_asset (asset_id),
INDEX idx_lease_status (status),
INDEX idx_lease_dates (lease_start_date, lease_end_date),
FOREIGN KEY (asset_id) REFERENCES asset(id)
);
10. 借用表 (borrow)
CREATE TABLE borrow (
id SERIAL PRIMARY KEY,
asset_id INTEGER NOT NULL COMMENT '资产ID',
borrower_name VARCHAR(255) NOT NULL COMMENT '借用人姓名',
borrower_department VARCHAR(255) COMMENT '借用人部门',
borrower_contact VARCHAR(255) COMMENT '联系方式',
borrow_start_date TIMESTAMP NOT NULL COMMENT '借用开始日期',
borrow_end_date TIMESTAMP NOT NULL COMMENT '借用结束日期',
actual_return_date TIMESTAMP COMMENT '实际归还日期',
purpose TEXT COMMENT '借用用途',
notes TEXT COMMENT '备注',
status SMALLINT DEFAULT 0 COMMENT '状态:0待审批,10已批准,20借用中,30已归还,40已取消',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_borrow_asset (asset_id),
INDEX idx_borrow_status (status),
INDEX idx_borrow_dates (borrow_start_date, borrow_end_date),
FOREIGN KEY (asset_id) REFERENCES asset(id)
);
11. 调拨表 (transfer)
CREATE TABLE transfer (
id SERIAL PRIMARY KEY,
asset_id INTEGER NOT NULL COMMENT '资产ID',
from_organization_id INTEGER COMMENT '调出组织ID',
to_organization_id INTEGER NOT NULL COMMENT '调入组织ID',
transfer_reason TEXT COMMENT '调拨原因',
transfer_date TIMESTAMP NOT NULL COMMENT '调拨日期',
actual_transfer_date TIMESTAMP COMMENT '实际调拨日期',
notes TEXT COMMENT '备注',
status SMALLINT DEFAULT 0 COMMENT '状态:0待审批,10已批准,20调拨中,30已完成,40已取消',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_transfer_asset (asset_id),
INDEX idx_transfer_from_org (from_organization_id),
INDEX idx_transfer_to_org (to_organization_id),
INDEX idx_transfer_status (status),
FOREIGN KEY (asset_id) REFERENCES asset(id),
FOREIGN KEY (from_organization_id) REFERENCES organization(id),
FOREIGN KEY (to_organization_id) REFERENCES organization(id)
);
维护管理表结构
12. 维护申请表 (maintenance_application)
CREATE TABLE maintenance_application (
id SERIAL PRIMARY KEY,
asset_id INTEGER NOT NULL COMMENT '资产ID',
applicant_name VARCHAR(255) NOT NULL COMMENT '申请人姓名',
applicant_department VARCHAR(255) COMMENT '申请人部门',
applicant_contact VARCHAR(255) COMMENT '联系方式',
maintenance_type VARCHAR(100) COMMENT '维护类型',
priority SMALLINT DEFAULT 1 COMMENT '优先级:1低,2中,3高,4紧急',
description TEXT NOT NULL COMMENT '问题描述',
expected_date TIMESTAMP COMMENT '期望维护日期',
actual_date TIMESTAMP COMMENT '实际维护日期',
maintenance_cost INTEGER COMMENT '维护费用(分)',
status SMALLINT DEFAULT 0 COMMENT '状态:0待审批,10已批准,20进行中,30已完成,40已取消',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_maintenance_asset (asset_id),
INDEX idx_maintenance_status (status),
INDEX idx_maintenance_priority (priority),
FOREIGN KEY (asset_id) REFERENCES asset(id)
);
13. 维护计划表 (maintenance_plan)
CREATE TABLE maintenance_plan (
id SERIAL PRIMARY KEY,
asset_id INTEGER NOT NULL COMMENT '资产ID',
plan_name VARCHAR(255) NOT NULL COMMENT '计划名称',
plan_type VARCHAR(100) COMMENT '计划类型',
frequency VARCHAR(50) COMMENT '维护频率',
next_maintenance_date TIMESTAMP COMMENT '下次维护日期',
last_maintenance_date TIMESTAMP COMMENT '上次维护日期',
maintenance_items TEXT COMMENT '维护项目',
responsible_person VARCHAR(255) COMMENT '负责人',
status SMALLINT DEFAULT 1 COMMENT '状态:0停用,1启用',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_plan_asset (asset_id),
INDEX idx_plan_status (status),
INDEX idx_plan_next_date (next_maintenance_date),
FOREIGN KEY (asset_id) REFERENCES asset(id)
);
14. 维护记录表 (maintenance_record)
CREATE TABLE maintenance_record (
id SERIAL PRIMARY KEY,
asset_id INTEGER NOT NULL COMMENT '资产ID',
maintenance_application_id INTEGER COMMENT '维护申请ID',
maintenance_plan_id INTEGER COMMENT '维护计划ID',
maintenance_date TIMESTAMP NOT NULL COMMENT '维护日期',
maintenance_type VARCHAR(100) COMMENT '维护类型',
maintenance_person VARCHAR(255) COMMENT '维护人员',
maintenance_items TEXT COMMENT '维护项目',
maintenance_result TEXT COMMENT '维护结果',
maintenance_cost INTEGER COMMENT '维护费用(分)',
notes TEXT COMMENT '备注',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_record_asset (asset_id),
INDEX idx_record_application (maintenance_application_id),
INDEX idx_record_plan (maintenance_plan_id),
INDEX idx_record_date (maintenance_date),
FOREIGN KEY (asset_id) REFERENCES asset(id),
FOREIGN KEY (maintenance_application_id) REFERENCES maintenance_application(id),
FOREIGN KEY (maintenance_plan_id) REFERENCES maintenance_plan(id)
);
采购管理表结构
15. 采购计划表 (purchase_plan)
CREATE TABLE purchase_plan (
id SERIAL PRIMARY KEY,
plan_name VARCHAR(255) NOT NULL COMMENT '计划名称',
plan_year INTEGER NOT NULL COMMENT '计划年度',
plan_quarter INTEGER COMMENT '计划季度',
total_budget INTEGER COMMENT '总预算(分)',
used_budget INTEGER DEFAULT 0 COMMENT '已用预算(分)',
status SMALLINT DEFAULT 0 COMMENT '状态:0草稿,1待审批,2已批准,3执行中,4已完成',
created_by INTEGER COMMENT '创建人ID',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_plan_year (plan_year),
INDEX idx_plan_status (status),
INDEX idx_plan_created_by (created_by),
FOREIGN KEY (created_by) REFERENCES user(id)
);
16. 采购合同表 (purchase_contract)
CREATE TABLE purchase_contract (
id SERIAL PRIMARY KEY,
contract_number VARCHAR(255) UNIQUE NOT NULL COMMENT '合同编号',
contract_name VARCHAR(255) NOT NULL COMMENT '合同名称',
supplier_name VARCHAR(255) NOT NULL COMMENT '供应商名称',
supplier_contact VARCHAR(255) COMMENT '供应商联系方式',
contract_amount INTEGER NOT NULL COMMENT '合同金额(分)',
contract_date TIMESTAMP NOT NULL COMMENT '合同日期',
delivery_date TIMESTAMP COMMENT '交付日期',
payment_terms TEXT COMMENT '付款条款',
contract_terms TEXT COMMENT '合同条款',
status SMALLINT DEFAULT 0 COMMENT '状态:0草稿,1待审批,2已批准,3执行中,4已完成,5已取消',
created_by INTEGER COMMENT '创建人ID',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_contract_number (contract_number),
INDEX idx_contract_status (status),
INDEX idx_contract_supplier (supplier_name),
INDEX idx_contract_date (contract_date),
FOREIGN KEY (created_by) REFERENCES user(id)
);
17. 采购验收表 (purchase_acceptance)
CREATE TABLE purchase_acceptance (
id SERIAL PRIMARY KEY,
contract_id INTEGER NOT NULL COMMENT '合同ID',
acceptance_number VARCHAR(255) UNIQUE NOT NULL COMMENT '验收编号',
acceptance_date TIMESTAMP NOT NULL COMMENT '验收日期',
acceptance_person VARCHAR(255) COMMENT '验收人员',
acceptance_result TEXT COMMENT '验收结果',
acceptance_notes TEXT COMMENT '验收备注',
status SMALLINT DEFAULT 0 COMMENT '状态:0待验收,1验收通过,2验收不通过',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_acceptance_contract (contract_id),
INDEX idx_acceptance_status (status),
INDEX idx_acceptance_date (acceptance_date),
FOREIGN KEY (contract_id) REFERENCES purchase_contract(id)
);
处置管理表结构
18. 处置申请表 (disposal_application)
CREATE TABLE disposal_application (
id SERIAL PRIMARY KEY,
asset_id INTEGER NOT NULL COMMENT '资产ID',
application_number VARCHAR(255) UNIQUE NOT NULL COMMENT '申请编号',
applicant_name VARCHAR(255) NOT NULL COMMENT '申请人姓名',
applicant_department VARCHAR(255) COMMENT '申请人部门',
applicant_contact VARCHAR(255) COMMENT '联系方式',
disposal_reason TEXT NOT NULL COMMENT '处置原因',
disposal_method VARCHAR(100) COMMENT '处置方式',
disposal_date TIMESTAMP COMMENT '处置日期',
disposal_value INTEGER COMMENT '处置价值(分)',
status SMALLINT DEFAULT 0 COMMENT '状态:0待审批,10已批准,20处置中,30已完成,40已取消',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_disposal_asset (asset_id),
INDEX idx_disposal_status (status),
INDEX idx_disposal_date (disposal_date),
FOREIGN KEY (asset_id) REFERENCES asset(id)
);
19. 处置评估表 (disposal_appraisal)
CREATE TABLE disposal_appraisal (
id SERIAL PRIMARY KEY,
application_id INTEGER NOT NULL COMMENT '申请ID',
appraiser_name VARCHAR(255) NOT NULL COMMENT '评估人姓名',
appraisal_date TIMESTAMP NOT NULL COMMENT '评估日期',
appraisal_value INTEGER COMMENT '评估价值(分)',
appraisal_method VARCHAR(100) COMMENT '评估方法',
appraisal_result TEXT COMMENT '评估结果',
appraisal_notes TEXT COMMENT '评估备注',
status SMALLINT DEFAULT 0 COMMENT '状态:0待评估,1评估完成,2评估不通过',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_appraisal_application (application_id),
INDEX idx_appraisal_status (status),
INDEX idx_appraisal_date (appraisal_date),
FOREIGN KEY (application_id) REFERENCES disposal_application(id)
);
关联表结构
20. 资产标签关联表 (asset_tag)
CREATE TABLE asset_tag (
asset_id INTEGER NOT NULL COMMENT '资产ID',
tag_id INTEGER NOT NULL COMMENT '标签ID',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (asset_id, tag_id),
INDEX idx_asset_tag_asset (asset_id),
INDEX idx_asset_tag_tag (tag_id),
FOREIGN KEY (asset_id) REFERENCES asset(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tag(id) ON DELETE CASCADE
);
系统管理表结构
21. 角色表 (role)
CREATE TABLE role (
id SERIAL PRIMARY KEY,
name VARCHAR(255) UNIQUE NOT NULL COMMENT '角色名称',
label VARCHAR(255) NOT NULL COMMENT '角色显示名称',
description TEXT COMMENT '角色描述',
is_system BOOLEAN DEFAULT FALSE COMMENT '是否系统角色',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_role_name (name),
INDEX idx_role_system (is_system)
);
22. 权限表 (permission)
CREATE TABLE permission (
id SERIAL PRIMARY KEY,
name VARCHAR(255) UNIQUE NOT NULL COMMENT '权限名称',
label VARCHAR(255) NOT NULL COMMENT '权限显示名称',
description TEXT COMMENT '权限描述',
resource VARCHAR(255) COMMENT '资源名称',
action VARCHAR(255) COMMENT '操作名称',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_permission_name (name),
INDEX idx_permission_resource (resource)
);
23. 用户角色关联表 (user_role)
CREATE TABLE user_role (
user_id INTEGER NOT NULL COMMENT '用户ID',
role_id INTEGER NOT NULL COMMENT '角色ID',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (user_id, role_id),
INDEX idx_user_role_user (user_id),
INDEX idx_user_role_role (role_id),
FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE,
FOREIGN KEY (role_id) REFERENCES role(id) ON DELETE CASCADE
);
24. 角色权限关联表 (role_permission)
CREATE TABLE role_permission (
role_id INTEGER NOT NULL COMMENT '角色ID',
permission_id INTEGER NOT NULL COMMENT '权限ID',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (role_id, permission_id),
INDEX idx_role_permission_role (role_id),
INDEX idx_role_permission_permission (permission_id),
FOREIGN KEY (role_id) REFERENCES role(id) ON DELETE CASCADE,
FOREIGN KEY (permission_id) REFERENCES permission(id) ON DELETE CASCADE
);
审计日志表结构
25. 审计日志表 (audit_log)
CREATE TABLE audit_log (
id SERIAL PRIMARY KEY,
user_id INTEGER COMMENT '用户ID',
entity_type VARCHAR(255) NOT NULL COMMENT '实体类型',
entity_id INTEGER NOT NULL COMMENT '实体ID',
action VARCHAR(50) NOT NULL COMMENT '操作类型',
old_values JSON COMMENT '旧值',
new_values JSON COMMENT '新值',
ip_address VARCHAR(45) COMMENT 'IP地址',
user_agent TEXT COMMENT '用户代理',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_audit_user (user_id),
INDEX idx_audit_entity (entity_type, entity_id),
INDEX idx_audit_action (action),
INDEX idx_audit_created_at (created_at),
FOREIGN KEY (user_id) REFERENCES user(id)
);
数据库索引策略
主要索引
- 主键索引: 所有表的主键自动创建
- 外键索引: 所有外键字段创建索引
- 状态索引: 业务状态字段创建索引
- 时间索引: 创建时间、更新时间字段创建索引
- 业务索引: 编码、名称等业务字段创建索引
复合索引
- 查询优化: 根据常用查询组合创建复合索引
- 排序优化: 支持排序的字段组合创建索引
- 过滤优化: 多条件查询的字段组合创建索引
数据完整性约束
外键约束
- 级联删除: 子表记录随父表删除
- 级联更新: 父表主键更新时子表同步更新
- 限制删除: 有子表记录时禁止删除父表记录
检查约束
- 数据范围: 数值字段的范围检查
- 格式验证: 字符串字段的格式检查
- 枚举值: 状态字段的枚举值检查
唯一约束
- 业务唯一: 编码、名称等业务字段唯一性
- 系统唯一: 用户名、邮箱等系统字段唯一性
总结
本数据库设计采用关系型数据库设计原则,通过合理的表结构设计、索引策略、约束机制,确保了数据的一致性、完整性和查询性能。支持资产全生命周期管理、多媒体档案管理、业务流程管理等核心功能,为系统的高效运行提供了坚实的数据基础。
更新日志
2025-09-01 版本 0.29.0
- 现在
固定资产
详情页可以展示图片、视频及附件 - 现在
固定资产
详情页也展示地图位置 资产
新增字段:Asset::videos
-视频
Asset::attachments
-附件
Asset::note
-备注
合同
证书
源代码
网址
服务器信息
- 新增字段
Category::tid
- 新增
无形资产
- 新增
无形资产分类
资产
更名为固定资产
- 重构Fixture(模拟数据生成):
Category
- 重构Fixture(模拟数据生成):
Asset
固定资产
只展示类别tid
为1
的资产无形资产
只展示类别tid
为2
的资产
2025-08-28 版本 0.25.6
- 新增
意见反馈
- 新增
系统信息
资产
和资产盘点
详情页现在显示该资产的所有操作(审计)记录- 现在
系统日志
记录后台所有操作 资产盘点
列表页现在只显示用户所属机构的资产数据统计
页面有了新的样式
人力资源
面向集团多层级组织的人力资源管理平台,聚焦“组织与岗位、人员全生命周期、流程与权限、履历与分析”,以标准化与可审计提升用工合规与协作效率。
- 组织与岗位:多级组织、岗位体系与编制管理,结构变更留痕与可视化。
- 人员生命周期:入职/转岗/试用/离职闭环,电子档案与证照到期提醒。
- 流程与权限:可编排审批流,基于角色/属性的细粒度授权(RBAC/ABAC)。
- 履历与评估:任务/业绩留痕,支撑任职资格、晋升与调配。
- 报表与看板:花名册、结构分析与预警看板,支持导出与共享。
人力资源系统功能概述
人事管理系统(HRM 系统)是用于自动化和优化企业人力资源管理流程的工具,覆盖员工从招聘入职到离职退休的全生命周期,同时支持组织架构、薪酬福利、绩效考勤等核心管理环节。以下是其常见的功能板块及核心作用:
-
组织架构管理板块
- 核心功能:
- 部门管理:创建、修改、合并或拆分部门,明确部门层级(如公司 - 事业部 - 部门 - 小组),记录部门职责、负责人及编制人数。
- 岗位体系:定义岗位名称、职级(如专员 - 主管 - 经理)、岗位职责、任职要求、汇报关系,支持岗位编制与实际人数的对比分析。
- 组织视图:通过树形图、架构图直观展示企业组织架构,支持按部门、区域、业务线等维度筛选查看。
- 作用: 搭建清晰的企业组织框架,规范岗位体系,为人员配置、权限分配等提供基础依据,确保组织运行有序。
- 核心功能:
-
员工信息管理板块(核心板块)
- 核心功能:
- 员工档案管理:记录员工基础信息(姓名、性别、身份证号等)、入职信息(入职日期、岗位、部门)、学历、工作经历、奖惩记录、合同信息等,支持电子档案上传(如简历、学历证明)。
- 员工状态跟踪:实时更新员工状态(在职、试用期、待离职、离职),记录状态变更原因及时间(如转正、调岗、晋升)。
- 档案查询与统计:支持按部门、岗位、入职时间等多维度查询员工信息,生成员工花名册、人员结构分析表(如年龄、学历、司龄分布)。
- 作用: 建立统一的员工信息数据库,实现档案数字化管理,减少纸质档案存储成本,便于快速检索和数据分析。
- 核心功能:
-
招聘管理板块
- 核心功能:
- 招聘需求管理:各部门提交用人需求(岗位、人数、任职要求、到岗时间),经审批后纳入招聘计划,关联岗位编制。
- 简历管理:对接招聘网站(如智联、猎聘)获取简历,支持手动录入或批量导入,通过关键词筛选、评分标注简历,建立人才库。
- 招聘流程跟踪:记录面试环节(初面、复面、终面)、面试官评价、录用决策,发送面试邀请、录用通知,跟踪候选人入职情况。
- 招聘数据分析:统计招聘周期、到岗率、渠道有效性(如各平台简历质量)、招聘成本等,优化招聘策略。
- 作用: 规范招聘流程,缩短招聘周期,提高人才匹配效率,降低招聘成本,同时积累潜在人才资源。
- 核心功能:
-
入职与离职管理板块
- 核心功能:
- 入职管理:为新员工生成入职流程(如签署劳动合同、录入信息、办理工牌、开通系统权限),分配导师,发送入职指引,跟踪流程完成情况。
- 试用期管理:设置试用期时长、考核标准,提醒 HR 或部门负责人进行试用期评估,办理转正或辞退手续。
- 离职管理:员工提交离职申请,经审批后启动离职流程(工作交接、物品归还、薪资结算、社保公积金停缴),记录离职原因并生成分析报告。
- 作用: 简化员工入职、离职手续,提升流程效率,同时通过离职原因分析优化留人策略。
- 考勤与休假管理板块
- 核心功能:
- 考勤管理:对接打卡设备(如指纹、人脸识别)或移动端打卡,自动统计出勤、迟到、早退、旷工情况,支持弹性工作制、倒班制规则设置。
- 休假管理:支持多种假期类型(年假、病假、事假、婚假等),设置假期额度(如按司龄计算年假天数),员工在线提交休假申请,审批后自动扣减额度并更新考勤记录。
- 加班与调休管理:记录加班时长(工作日加班、周末加班、法定假日加班),支持加班转调休或核算加班费,跟踪调休使用情况。
- 考勤报表:生成个人 / 部门考勤汇总表、异常考勤提醒,为薪资计算提供数据支持。
- 作用:自动化考勤统计,减少人工核算误差,规范休假和加班管理,保障员工考勤权益。
- 核心功能:
- 薪酬福利管理板块
- 核心功能:
- 薪资核算:支持自定义薪资结构(基本工资、绩效工资、津贴、扣款等),关联考勤数据(迟到扣款、加班费)、绩效结果(绩效工资)自动计算薪资,生成工资单。
- 社保公积金管理:记录员工社保公积金缴纳基数、比例,自动计算个人和企业缴纳金额,生成申报报表,支持对接社保系统。
- 福利管理:管理企业福利项目(如体检、节日福利、团建活动),记录员工福利领取情况,统计福利成本。
- 个税计算:根据最新个税政策自动计算员工应缴个税,生成个税申报表。
- 作用:提高薪资核算效率和准确性,确保薪酬福利合规发放,降低财务与 HR 的沟通成本。
- 核心功能:
- 绩效管理板块
- 核心功能:
- 绩效方案设置:支持多种绩效考核方式(如 KPI、OKR、360 度评估),自定义考核周期(月度、季度、年度)、考核指标及权重。
- 绩效流程管理:发起考核任务,员工自评、上级评分、跨部门互评,系统汇总得分并生成绩效报告,支持绩效结果申诉与调整。
- 绩效结果应用:将绩效结果与薪资调整、晋升、培训等关联(如绩效优秀者优先晋升),记录历史绩效数据供分析。
- 作用: 建立公平透明的考核体系,激励员工提升业绩,为人才发展和决策提供依据。
- 核心功能:
- 培训与发展管理板块
- 核心功能:
- 培训需求与计划:收集员工培训需求,制定年度 / 季度培训计划(如新人培训、技能培训、管理层培训),关联培训预算。
- 培训执行管理:发布培训通知,记录报名情况,跟踪培训实施(线上课程、线下讲座、实操培训),生成培训签到表和效果评估问卷。
- 员工发展管理:记录员工培训经历、获得的证书 / 技能,结合绩效数据制定职业发展规划(如晋升路径、轮岗计划)。
- 作用: 提升员工技能和素质,促进员工与企业共同成长,增强员工归属感。
- 核心功能:
- 报表与数据分析板块
- 核心功能:
- HR 报表生成:自动生成人员结构分析、离职率分析、招聘效率分析、薪酬成本分析等报表,支持导出(Excel、PDF)。
- 数据可视化:通过仪表盘展示关键指标(如员工总数、月度离职率、招聘到岗率),直观呈现 HR 管理状态。
- 自定义分析:支持按业务需求自定义数据维度,进行深度分析(如某部门员工满意度与绩效的关联性)。
- 作用: 为 HR 决策和企业管理提供数据支持,帮助发现管理问题(如某部门离职率过高)并及时优化。
- 核心功能:
- 系统管理板块
- 核心功能:
- 用户与权限管理:创建 HR 管理员、部门负责人、普通员工等角色,分配操作权限(如 HR 可修改薪资,员工仅能查看个人信息)。
- 流程配置:自定义审批流程(如请假审批、离职审批),支持添加审批节点、设置审批规则(如部门负责人审批后需 HR 审核)。
- 数据安全与备份:加密存储员工敏感信息(如身份证号、薪资),定期自动备份数据,防止信息泄露或丢失。
- 作用: 保障系统安全稳定运行,满足企业个性化管理需求,确保数据合规性。
- 核心功能:
设计概要
系统概述
本系统是一个基于现代Web技术栈构建的综合性人力资源管理系统,采用前后端分离架构,提供完整的HR业务流程管理功能。
技术架构
- 前端: Next.js 15.5.2 + React 19.1.0 + TypeScript
- 后端: FastAPI + SQLAlchemy + PostgreSQL
- UI框架: Tailwind CSS + Radix UI + Lucide React
- 状态管理: React Context API
- 认证: JWT Token + OAuth2
- 数据库: PostgreSQL + Alembic迁移
前端架构设计
1. 技术栈特点
核心框架
- Next.js 15.5.2: 使用最新版本,支持App Router和Turbopack
- React 19.1.0: 采用最新React版本,支持并发特性
- TypeScript: 全面类型安全,与后端API类型同步
UI组件系统
- Radix UI: 无障碍、可访问的组件库
- Tailwind CSS 4: 最新版本,支持现代CSS特性
- Lucide React: 统一的图标系统
- 自定义组件: 基于Radix UI构建的业务组件
状态管理
- React Context: 全局状态管理(认证、主题)
- React Hook Form: 表单状态管理
- Zod: 运行时类型验证
2. 项目结构
app/
├── attendance/ # 考勤管理模块
├── employees/ # 员工管理模块
├── organization/ # 组织架构模块
├── payroll/ # 薪酬管理模块
├── performance/ # 绩效管理模块
├── recruitment/ # 招聘管理模块
├── reports/ # 报表分析模块
├── settings/ # 系统设置模块
├── training/ # 培训发展模块
└── onboarding/ # 入职离职模块
components/
├── ui/ # 基础UI组件
├── navigation.tsx # 导航组件
├── dashboard.tsx # 仪表盘组件
└── layout-wrapper.tsx # 布局包装器
lib/
├── api.ts # API客户端
├── contexts/ # React Context
├── hooks/ # 自定义Hooks
├── services/ # 业务服务层
└── types.ts # TypeScript类型定义
3. 核心功能模块
认证系统
- JWT Token认证: 基于Bearer Token的无状态认证
- 自动登录: 本地存储Token,页面刷新自动恢复登录状态
- 权限控制: 基于角色的访问控制(RBAC)
- 路由保护: ProtectedRoute组件保护需要认证的页面
导航系统
- 多级菜单: 支持主菜单和子菜单的层级结构
- 响应式设计: 移动端友好的侧边栏导航
- 状态管理: 自动展开当前页面对应的菜单项
- 主题切换: 支持明暗主题切换
数据管理
- API客户端: 统一的HTTP请求处理
- 错误处理: 完善的错误捕获和用户友好的错误提示
- 类型安全: 前后端类型定义完全同步
- 分页支持: 统一的分页参数和响应格式
后端架构设计
1. 技术栈特点
核心框架
- FastAPI: 高性能异步Web框架
- SQLAlchemy 2.0: 现代ORM,支持异步操作
- Pydantic: 数据验证和序列化
- Alembic: 数据库迁移管理
数据库设计
- PostgreSQL: 企业级关系型数据库
- 关系映射: 完整的实体关系设计
- 索引优化: 关键字段建立索引
- 约束管理: 外键约束和数据完整性
2. 项目结构
app/
├── core/ # 核心配置
│ ├── config.py # 应用配置
│ ├── database.py # 数据库连接
│ └── auth.py # 认证逻辑
├── models/ # 数据模型
│ ├── user.py # 用户模型
│ ├── employee.py # 员工模型
│ ├── attendance.py # 考勤模型
│ └── ...
├── schemas/ # Pydantic模式
├── crud/ # 数据访问层
├── routers/ # API路由
└── services/ # 业务逻辑层
3. 核心业务模块
用户管理
- 用户认证: OAuth2密码流程
- 权限控制: 基于角色的访问控制
- 用户档案: 完整的用户信息管理
- 状态管理: 用户激活/禁用状态
员工管理
- 员工档案: 完整的员工信息管理
- 状态跟踪: 员工状态变更历史
- 家庭信息: 员工家庭成员管理
- 技能管理: 员工技能标签系统
考勤管理
- 考勤记录: 打卡记录管理
- 请假管理: 多种请假类型支持
- 加班管理: 加班申请和审批
- 统计分析: 考勤数据统计
组织架构
- 部门管理: 层级化部门结构
- 岗位体系: 岗位定义和等级管理
- 组织图表: 可视化组织架构
- 人员配置: 部门人员分配
招聘管理
- 招聘需求: 招聘需求申请和审批
- 简历管理: 候选人简历管理
- 面试流程: 多轮面试管理
- 数据分析: 招聘效果分析
入职离职
- 入职流程: 新员工入职管理
- 试用期管理: 试用期跟踪和评估
- 离职流程: 员工离职手续办理
- 流程自动化: 工作流自动化
数据模型设计
1. 核心实体关系
用户与员工
- 一对一关系: 用户账户与员工档案
- 权限分离: 系统用户与业务员工分离
- 状态同步: 用户状态与员工状态联动
组织架构
- 层级结构: 部门支持多级嵌套
- 岗位体系: 岗位与部门关联
- 人员分配: 员工与部门、岗位关联
考勤系统
- 员工考勤: 员工与考勤记录一对多
- 请假管理: 员工与请假申请关联
- 审批流程: 请假申请与审批人关联
2. 数据完整性
外键约束
- 级联删除: 合理的级联删除策略
- 引用完整性: 确保数据一致性
- 软删除: 重要数据采用软删除
业务规则
- 唯一性约束: 员工编号、身份证号唯一
- 状态管理: 员工状态变更记录
- 审计日志: 关键操作记录
API设计规范
1. RESTful设计
资源命名
- 复数形式: 使用复数形式命名资源
- 层级结构: 支持嵌套资源访问
- 版本控制: API版本化管理
HTTP方法
- GET: 查询操作
- POST: 创建操作
- PUT: 完整更新
- PATCH: 部分更新
- DELETE: 删除操作
2. 响应格式
统一响应
{
"data": {},
"message": "操作成功",
"status_code": 200
}
分页响应
{
"items": [],
"total": 100,
"page": 1,
"size": 20,
"pages": 5
}
错误响应
{
"detail": "错误描述",
"status_code": 400
}
3. 认证授权
JWT Token
- 访问令牌: 短期访问令牌
- 刷新机制: 令牌自动刷新
- 权限验证: 基于角色的权限控制
安全措施
- HTTPS: 强制HTTPS传输
- CORS: 跨域资源共享配置
- 输入验证: 严格的输入数据验证
前端后端集成
1. 类型同步
TypeScript类型
- 自动同步: 前后端类型定义自动同步
- 类型安全: 编译时类型检查
- 智能提示: IDE智能代码提示
API客户端
- 统一接口: 统一的API调用接口
- 错误处理: 完善的错误处理机制
- 请求拦截: 自动添加认证头
2. 状态管理
全局状态
- 认证状态: 用户登录状态管理
- 主题状态: 明暗主题切换
- 加载状态: 全局加载状态管理
本地状态
- 组件状态: 组件内部状态管理
- 表单状态: 表单数据状态管理
- 缓存策略: 数据缓存和更新策略
3. 用户体验
响应式设计
- 移动端适配: 移动端友好的界面设计
- 断点管理: 统一的断点管理系统
- 组件复用: 高度可复用的组件设计
性能优化
- 代码分割: 按需加载代码
- 图片优化: 自动图片优化
- 缓存策略: 智能缓存策略
部署和运维
1. 开发环境
前端开发
- 热重载: 开发时热重载
- 类型检查: 实时类型检查
- 代码格式化: 自动代码格式化
后端开发
- 自动重载: 代码变更自动重载
- 数据库迁移: 自动数据库迁移
- API文档: 自动生成API文档
2. 生产环境
性能优化
- 静态资源: CDN加速静态资源
- 数据库优化: 数据库查询优化
- 缓存策略: Redis缓存策略
监控告警
- 健康检查: 应用健康状态检查
- 日志管理: 结构化日志管理
- 错误追踪: 错误监控和追踪
扩展性设计
1. 模块化架构
前端模块化
- 页面模块: 按业务模块组织页面
- 组件模块: 可复用的组件库
- 服务模块: 业务逻辑服务化
后端模块化
- 路由模块: 按功能模块组织路由
- 服务模块: 业务逻辑服务化
- 数据模块: 数据访问层模块化
2. 插件化设计
功能插件
- 工作流引擎: 可配置的工作流引擎
- 报表引擎: 可扩展的报表系统
- 通知系统: 多渠道通知系统
集成接口
- 第三方集成: 支持第三方系统集成
- API网关: 统一的API网关
- 消息队列: 异步消息处理
安全设计
1. 数据安全
数据加密
- 传输加密: HTTPS传输加密
- 存储加密: 敏感数据存储加密
- 密码安全: 密码哈希存储
访问控制
- 身份认证: 多因素身份认证
- 权限控制: 细粒度权限控制
- 审计日志: 完整的操作审计日志
2. 系统安全
输入验证
- 数据验证: 严格的输入数据验证
- SQL注入防护: 参数化查询防护
- XSS防护: 跨站脚本攻击防护
系统加固
- 安全配置: 系统安全配置
- 漏洞扫描: 定期安全漏洞扫描
- 安全更新: 及时安全补丁更新
总结
本系统采用现代化的技术栈和架构设计,具有以下特点:
- 技术先进性: 采用最新的技术栈,保证系统的先进性和可维护性
- 架构合理性: 前后端分离架构,职责清晰,易于扩展
- 用户体验: 现代化的UI设计,良好的用户体验
- 数据完整性: 完善的数据模型设计,保证数据一致性
- 安全性: 多层次的安全防护,保证系统安全
- 可扩展性: 模块化设计,易于功能扩展
- 可维护性: 清晰的代码结构,易于维护和升级
系统涵盖了人力资源管理的核心业务流程,能够满足企业HR管理的各种需求,是一个功能完整、技术先进、架构合理的现代化HR管理系统。
系统架构
整体架构概览
本系统采用现代化的前后端分离架构,基于微服务设计理念,构建了一个功能完整、可扩展的人力资源管理系统。
技术栈总览
graph TB subgraph "🌐 前端层 (Frontend Layer)" A1["⚛️ Next.js 15.5.2<br/>React 19.1.0<br/>TypeScript"] A2["🎨 Tailwind CSS<br/>Radix UI<br/>Lucide React"] A3["🔧 React Context<br/>Hook Form<br/>Zod Validation"] end subgraph "🚪 API网关层 (API Gateway Layer)" B1["🔐 CORS Middleware<br/>Authentication<br/>Rate Limiting"] B2["🔄 Request/Response<br/>Transformation<br/>Logging"] B3["⚖️ API Gateway<br/>Service Discovery<br/>Load Balancing"] end subgraph "⚙️ 后端层 (Backend Layer)" C1["🚀 FastAPI Framework<br/>SQLAlchemy 2.0<br/>Pydantic Models"] C2["📊 Alembic Migrations<br/>PostgreSQL<br/>Redis Cache"] C3["🔒 JWT Authentication<br/>OAuth2<br/>Security"] end subgraph "💾 数据层 (Database Layer)" D1["🗄️ PostgreSQL Primary<br/>Redis Cache<br/>File Storage"] D2["🔄 Database Migrations<br/>Backup & Recovery<br/>Data Security"] D3["🌐 Data Replication<br/>Disaster Recovery<br/>Monitoring"] end A1 --> B1 A2 --> B2 A3 --> B3 B1 --> C1 B2 --> C2 B3 --> C3 C1 --> D1 C2 --> D2 C3 --> D3 classDef frontend fill:#e3f2fd,stroke:#1976d2,stroke-width:4px,color:#000 classDef gateway fill:#f3e5f5,stroke:#7b1fa2,stroke-width:4px,color:#000 classDef backend fill:#e8f5e8,stroke:#388e3c,stroke-width:4px,color:#000 classDef database fill:#fff3e0,stroke:#f57c00,stroke-width:4px,color:#000 class A1,A2,A3 frontend class B1,B2,B3 gateway class C1,C2,C3 backend class D1,D2,D3 database
前端架构设计
1. 技术架构层次
graph TB subgraph "🎨 表现层 (Presentation Layer)" A1["📱 Pages & App Router<br/>Components<br/>UI Library"] A2["⚛️ Next.js 15.5.2<br/>React 19.1.0<br/>TypeScript"] A3["🖥️ User Interface<br/>Responsive Design<br/>Accessibility"] end subgraph "🧠 业务逻辑层 (Business Logic Layer)" B1["⚙️ Services<br/>Hooks<br/>Context"] B2["🔄 State Management<br/>React Context API<br/>Custom Hooks"] B3["📋 Business Rules<br/>Validation Logic<br/>Workflow Engine"] end subgraph "🔌 数据访问层 (Data Access Layer)" C1["🌐 API Client<br/>HTTP Client<br/>Type Definitions"] C2["📡 Axios-like Client<br/>TypeScript Types<br/>Error Handling"] C3["🔄 Data Transformation<br/>Caching Strategy<br/>Offline Support"] end A1 --> B1 A2 --> B2 A3 --> B3 B1 --> C1 B2 --> C2 B3 --> C3 classDef presentation fill:#e3f2fd,stroke:#1976d2,stroke-width:4px,color:#000 classDef business fill:#e8f5e8,stroke:#388e3c,stroke-width:4px,color:#000 classDef data fill:#fce4ec,stroke:#c2185b,stroke-width:4px,color:#000 class A1,A2,A3 presentation class B1,B2,B3 business class C1,C2,C3 data
2. 组件架构设计
页面组件结构
app/
├── (auth)/ # 认证相关页面
│ └── login/
├── (dashboard)/ # 仪表盘页面
│ └── page.tsx
├── attendance/ # 考勤管理模块
│ ├── page.tsx # 考勤首页
│ ├── records/ # 考勤记录
│ ├── leave/ # 请假管理
│ ├── overtime/ # 加班管理
│ └── reports/ # 考勤报表
├── employees/ # 员工管理模块
│ ├── page.tsx # 员工列表
│ ├── profiles/ # 员工档案
│ ├── search/ # 员工搜索
│ └── status/ # 员工状态
├── organization/ # 组织架构模块
│ ├── departments/ # 部门管理
│ ├── positions/ # 岗位管理
│ └── chart/ # 组织架构图
└── ... # 其他业务模块
组件层次结构
components/
├── ui/ # 基础UI组件
│ ├── button.tsx # 按钮组件
│ ├── input.tsx # 输入框组件
│ ├── table.tsx # 表格组件
│ └── ... # 其他基础组件
├── layout/ # 布局组件
│ ├── navigation.tsx # 导航组件
│ ├── sidebar.tsx # 侧边栏组件
│ └── header.tsx # 头部组件
├── business/ # 业务组件
│ ├── employee-card.tsx # 员工卡片
│ ├── department-tree.tsx # 部门树
│ └── attendance-form.tsx # 考勤表单
└── common/ # 通用组件
├── loading.tsx # 加载组件
├── error-boundary.tsx # 错误边界
└── modal.tsx # 模态框组件
3. 状态管理架构
全局状态管理
// 认证状态
interface AuthState {
user: User | null;
token: string | null;
isAuthenticated: boolean;
loading: boolean;
}
// 主题状态
interface ThemeState {
theme: 'light' | 'dark';
systemTheme: boolean;
}
// 应用状态
interface AppState {
sidebarOpen: boolean;
notifications: Notification[];
loading: boolean;
}
状态管理流程
graph LR A["👤 User Action<br/>用户操作"] --> B["🧩 Component<br/>组件"] B --> C["🔄 Context/Hook<br/>状态管理"] C --> D["⚙️ Service<br/>业务服务"] D --> E["🌐 API Client<br/>API调用"] E --> F["🚀 Backend<br/>后端服务"] F --> G["📨 Response<br/>响应数据"] G --> H["🔄 State Update<br/>状态更新"] H --> A classDef user fill:#e8f5e8,stroke:#2e7d32,stroke-width:4px,color:#000 classDef component fill:#e3f2fd,stroke:#1976d2,stroke-width:4px,color:#000 classDef state fill:#f3e5f5,stroke:#7b1fa2,stroke-width:4px,color:#000 classDef service fill:#fff3e0,stroke:#f57c00,stroke-width:4px,color:#000 classDef api fill:#fce4ec,stroke:#c2185b,stroke-width:4px,color:#000 classDef backend fill:#e0f2f1,stroke:#00695c,stroke-width:4px,color:#000 classDef response fill:#f1f8e9,stroke:#558b2f,stroke-width:4px,color:#000 classDef update fill:#fff8e1,stroke:#ff8f00,stroke-width:4px,color:#000 class A user class B component class C state class D service class E api class F backend class G response class H update
4. 路由架构设计
App Router结构
app/
├── layout.tsx # 根布局
├── page.tsx # 首页
├── loading.tsx # 全局加载
├── error.tsx # 全局错误
├── not-found.tsx # 404页面
├── globals.css # 全局样式
└── themes.css # 主题样式
路由保护机制
// 路由保护组件
<ProtectedRoute>
<LayoutWrapper>
<Navigation />
<PageContent />
</LayoutWrapper>
</ProtectedRoute>
后端架构设计
1. 分层架构设计
graph TB subgraph "🌐 API路由层 (API Router Layer)" A1["🚀 FastAPI Routers<br/>Middleware<br/>Authentication"] A2["✅ Request Validation<br/>Response Serialization<br/>Error Handling"] A3["📚 API Documentation<br/>OpenAPI Schema<br/>Versioning"] end subgraph "🧠 业务逻辑层 (Business Service Layer)" B1["⚙️ Business Logic<br/>Data Processing<br/>Validation"] B2["🏗️ Service Classes<br/>Business Rules<br/>Workflow Engine"] B3["🔧 Domain Services<br/>Transaction Management<br/>Event Handling"] end subgraph "🔌 数据访问层 (Data Access Layer)" C1["📊 CRUD Operations<br/>Database Queries<br/>Data Mapping"] C2["🗃️ SQLAlchemy ORM<br/>Repository Pattern<br/>Query Optimization"] C3["✅ Data Validation<br/>Type Conversion<br/>Error Handling"] end subgraph "💾 数据存储层 (Database Storage Layer)" D1["🐘 PostgreSQL<br/>Redis Cache<br/>File Storage"] D2["🔄 Database Migrations<br/>Backup & Recovery<br/>Data Security"] D3["⚡ Connection Pooling<br/>Query Caching<br/>Performance Monitoring"] end A1 --> B1 A2 --> B2 A3 --> B3 B1 --> C1 B2 --> C2 B3 --> C3 C1 --> D1 C2 --> D2 C3 --> D3 classDef router fill:#e8f5e8,stroke:#2e7d32,stroke-width:4px,color:#000 classDef business fill:#e3f2fd,stroke:#1976d2,stroke-width:4px,color:#000 classDef data fill:#fff3e0,stroke:#f57c00,stroke-width:4px,color:#000 classDef storage fill:#fce4ec,stroke:#c2185b,stroke-width:4px,color:#000 class A1,A2,A3 router class B1,B2,B3 business class C1,C2,C3 data class D1,D2,D3 storage
2. 模块化架构设计
核心模块结构
app/
├── core/ # 核心模块
│ ├── config.py # 配置管理
│ ├── database.py # 数据库连接
│ ├── auth.py # 认证授权
│ └── security.py # 安全相关
├── models/ # 数据模型
│ ├── user.py # 用户模型
│ ├── employee.py # 员工模型
│ ├── department.py # 部门模型
│ ├── attendance.py # 考勤模型
│ └── ... # 其他模型
├── schemas/ # 数据模式
│ ├── user.py # 用户模式
│ ├── employee.py # 员工模式
│ └── ... # 其他模式
├── crud/ # 数据访问
│ ├── user.py # 用户CRUD
│ ├── employee.py # 员工CRUD
│ └── ... # 其他CRUD
├── routers/ # API路由
│ ├── auth.py # 认证路由
│ ├── users.py # 用户路由
│ ├── employees.py # 员工路由
│ └── ... # 其他路由
└── services/ # 业务服务
├── auth_service.py # 认证服务
├── employee_service.py # 员工服务
└── ... # 其他服务
业务模块划分
业务模块架构:
├── 用户管理模块 (User Management)
│ ├── 用户认证 (Authentication)
│ ├── 权限控制 (Authorization)
│ └── 用户档案 (User Profile)
├── 员工管理模块 (Employee Management)
│ ├── 员工档案 (Employee Profile)
│ ├── 状态管理 (Status Management)
│ └── 家庭信息 (Family Information)
├── 组织架构模块 (Organization)
│ ├── 部门管理 (Department)
│ ├── 岗位管理 (Position)
│ └── 组织图表 (Org Chart)
├── 考勤管理模块 (Attendance)
│ ├── 考勤记录 (Attendance Records)
│ ├── 请假管理 (Leave Management)
│ └── 加班管理 (Overtime Management)
├── 招聘管理模块 (Recruitment)
│ ├── 招聘需求 (Requirements)
│ ├── 简历管理 (Resume Management)
│ └── 面试流程 (Interview Process)
└── 其他业务模块...
3. 数据模型架构
核心实体关系图
erDiagram User { int id PK "主键" string username "用户名" string email "邮箱" string role "角色" boolean is_active "激活状态" timestamp created_at "创建时间" } Employee { int id PK "主键" string employee_id "员工编号" int user_id FK "用户ID" string name "姓名" int department_id FK "部门ID" int position_id FK "岗位ID" date hire_date "入职日期" string employment_status "在职状态" boolean is_active "激活状态" } Department { int id PK "主键" string name "部门名称" string code "部门编码" int parent_id FK "上级部门" int manager_id FK "部门经理" int level "部门层级" boolean is_active "激活状态" } Position { int id PK "主键" string title "岗位名称" string code "岗位编码" int department_id FK "所属部门" string level "岗位级别" string category "岗位类别" boolean is_active "激活状态" } Attendance { int id PK "主键" int employee_id FK "员工ID" date date "考勤日期" time check_in "上班时间" time check_out "下班时间" string status "考勤状态" int work_hours "工作时长" } LeaveRequest { int id PK "主键" int employee_id FK "员工ID" string leave_type "请假类型" date start_date "开始日期" date end_date "结束日期" string status "审批状态" int approved_by FK "审批人" } User ||--o| Employee : "has profile" Employee }o--|| Department : "belongs to" Employee }o--|| Position : "has position" Employee ||--o{ Attendance : "has records" Employee ||--o{ LeaveRequest : "requests leave" Department ||--o{ Department : "parent-child" Department ||--o{ Position : "contains" Employee ||--o{ Employee : "manages"
数据访问模式
# Repository Pattern
class EmployeeRepository:
def __init__(self, db: Session):
self.db = db
def get_by_id(self, id: int) -> Employee:
return self.db.query(Employee).filter(Employee.id == id).first()
def get_by_department(self, dept_id: int) -> List[Employee]:
return self.db.query(Employee).filter(Employee.department_id == dept_id).all()
def create(self, employee_data: EmployeeCreate) -> Employee:
employee = Employee(**employee_data.dict())
self.db.add(employee)
self.db.commit()
return employee
4. API架构设计
RESTful API设计
API端点设计:
├── 认证相关 (Authentication)
│ POST /api/v1/auth/login # 用户登录
│ POST /api/v1/auth/refresh # 刷新令牌
│ GET /api/v1/auth/me # 获取当前用户
├── 用户管理 (User Management)
│ GET /api/v1/users/ # 获取用户列表
│ POST /api/v1/users/ # 创建用户
│ GET /api/v1/users/{id} # 获取用户详情
│ PUT /api/v1/users/{id} # 更新用户
│ DELETE /api/v1/users/{id} # 删除用户
├── 员工管理 (Employee Management)
│ GET /api/v1/employees/ # 获取员工列表
│ POST /api/v1/employees/ # 创建员工
│ GET /api/v1/employees/{id} # 获取员工详情
│ PUT /api/v1/employees/{id} # 更新员工
│ DELETE /api/v1/employees/{id} # 删除员工
└── 其他业务模块...
API响应格式
// 成功响应
{
"data": {
"id": 1,
"name": "张三",
"email": "zhangsan@example.com"
},
"message": "操作成功",
"status_code": 200
}
// 分页响应
{
"items": [...],
"total": 100,
"page": 1,
"size": 20,
"pages": 5
}
// 错误响应
{
"detail": "错误描述",
"status_code": 400
}
数据架构设计
1. 数据库设计
数据库选择
- 主数据库: PostgreSQL (关系型数据库)
- 缓存数据库: Redis (内存数据库)
- 文件存储: 本地文件系统 / 云存储
数据库架构
graph TB subgraph "🚀 应用层 (Application Layer)" A1["⚡ FastAPI Framework<br/>SQLAlchemy ORM<br/>Pydantic Models"] A2["✅ Data Validation<br/>Serialization<br/>Business Logic"] A3["🌐 API Endpoints<br/>Request Handling<br/>Response Formatting"] end subgraph "🔌 连接层 (Connection Layer)" B1["🏊 Connection Pool<br/>Transaction Management<br/>Query Cache"] B2["📊 Connection Monitoring<br/>Performance Tuning<br/>Resource Management"] B3["🔒 Connection Security<br/>SSL/TLS<br/>Authentication"] end subgraph "💾 存储层 (Storage Layer)" C1["🐘 PostgreSQL Primary<br/>Redis Cache<br/>File Storage"] C2["🔄 Data Replication<br/>Backup & Recovery<br/>Security & Encryption"] C3["📦 Data Archiving<br/>Compression<br/>Indexing Strategy"] end A1 --> B1 A2 --> B2 A3 --> B3 B1 --> C1 B2 --> C2 B3 --> C3 classDef application fill:#e8f5e8,stroke:#2e7d32,stroke-width:4px,color:#000 classDef connection fill:#e3f2fd,stroke:#1976d2,stroke-width:4px,color:#000 classDef storage fill:#fff3e0,stroke:#f57c00,stroke-width:4px,color:#000 class A1,A2,A3 application class B1,B2,B3 connection class C1,C2,C3 storage
数据表设计
-- 用户表
CREATE TABLE "user" (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
full_name VARCHAR(100) NOT NULL,
role VARCHAR(20) DEFAULT 'employee',
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 员工表
CREATE TABLE "employee" (
id SERIAL PRIMARY KEY,
employee_id VARCHAR(20) UNIQUE NOT NULL,
user_id INTEGER REFERENCES "user"(id),
name VARCHAR(100) NOT NULL,
department_id INTEGER NOT NULL,
position_id INTEGER NOT NULL,
hire_date DATE NOT NULL,
employment_status VARCHAR(20) DEFAULT 'active',
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 部门表
CREATE TABLE "department" (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
code VARCHAR(20) UNIQUE NOT NULL,
parent_id INTEGER REFERENCES "department"(id),
manager_id INTEGER REFERENCES "employee"(id),
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
2. 缓存架构设计
缓存策略
graph TB subgraph "📱 应用层缓存 (Application Cache Layer)" A1["⚛️ React Query<br/>SWR<br/>Local Storage"] A2["💾 Session Storage<br/>Memory Cache<br/>Component State"] A3["🌐 Browser Cache<br/>HTTP Cache<br/>CDN Cache"] end subgraph "🔄 服务层缓存 (Service Cache Layer)" B1["🔴 Redis Cache<br/>Memory Cache<br/>Query Cache"] B2["⏰ Cache Invalidation<br/>TTL Management<br/>Cache Warming"] B3["🌐 Distributed Cache<br/>Cache Clustering<br/>Failover"] end subgraph "🗄️ 数据库层缓存 (Database Cache Layer)" C1["🐘 PostgreSQL Query Cache<br/>Connection Pool<br/>Index Cache"] C2["💾 Buffer Pool<br/>Query Plan Cache<br/>Statistics Cache"] C3["📊 Read Replicas<br/>Master-Slave<br/>Sharding"] end A1 --> B1 A2 --> B2 A3 --> B3 B1 --> C1 B2 --> C2 B3 --> C3 classDef appCache fill:#e8f5e8,stroke:#2e7d32,stroke-width:4px,color:#000 classDef serviceCache fill:#e3f2fd,stroke:#1976d2,stroke-width:4px,color:#000 classDef dbCache fill:#fff3e0,stroke:#f57c00,stroke-width:4px,color:#000 class A1,A2,A3 appCache class B1,B2,B3 serviceCache class C1,C2,C3 dbCache
缓存层次
// 前端缓存策略
interface CacheStrategy {
// 用户数据缓存
user: {
ttl: 300, // 5分钟
storage: 'memory'
};
// 员工数据缓存
employees: {
ttl: 600, // 10分钟
storage: 'localStorage'
};
// 部门数据缓存
departments: {
ttl: 1800, // 30分钟
storage: 'sessionStorage'
};
}
安全架构设计
1. 认证授权架构
认证流程
graph LR A["👤 用户登录<br/>User Login"] --> B["🔐 用户名/密码验证<br/>Credential Validation"] B --> C["🎫 JWT Token生成<br/>Token Generation"] C --> D["💾 前端存储Token<br/>Token Storage"] D --> E["🌐 API请求<br/>API Request"] E --> F["✅ Token验证<br/>Token Validation"] F --> G["🔍 权限检查<br/>Permission Check"] G --> H["⚙️ 业务逻辑执行<br/>Business Logic"] H --> I["⏰ Token过期<br/>Token Expiry"] I --> J["🔄 自动刷新<br/>Auto Refresh"] J --> K["🆕 新Token生成<br/>New Token"] K --> E classDef login fill:#e8f5e8,stroke:#2e7d32,stroke-width:4px,color:#000 classDef validation fill:#e3f2fd,stroke:#1976d2,stroke-width:4px,color:#000 classDef token fill:#f3e5f5,stroke:#7b1fa2,stroke-width:4px,color:#000 classDef storage fill:#fff3e0,stroke:#f57c00,stroke-width:4px,color:#000 classDef request fill:#fce4ec,stroke:#c2185b,stroke-width:4px,color:#000 classDef check fill:#e0f2f1,stroke:#00695c,stroke-width:4px,color:#000 classDef logic fill:#f1f8e9,stroke:#558b2f,stroke-width:4px,color:#000 classDef refresh fill:#fff8e1,stroke:#ff8f00,stroke-width:4px,color:#000 class A login class B validation class C,K token class D storage class E request class F,G check class H logic class I,J refresh
权限控制模型
graph TB subgraph "👥 RBAC权限模型 (Role-Based Access Control)" A["👤 User<br/>用户账户"] --> B["🎭 Role<br/>角色"] B --> C["🔑 Permission<br/>权限"] C --> D["📁 Resource<br/>资源"] end subgraph "🎭 角色类型 (Role Types)" E["👑 admin<br/>超级管理员"] F["👨💼 hr<br/>HR管理员"] G["👨💻 manager<br/>部门经理"] H["👤 employee<br/>普通员工"] end subgraph "🔑 权限类型 (Permission Types)" I["👁️ read<br/>读取权限"] J["✏️ write<br/>写入权限"] K["🗑️ delete<br/>删除权限"] L["✅ approve<br/>审批权限"] end subgraph "📁 资源类型 (Resource Types)" M["👥 employee<br/>员工管理"] N["🏢 department<br/>部门管理"] O["⏰ attendance<br/>考勤管理"] P["💰 payroll<br/>薪酬管理"] end B --> E B --> F B --> G B --> H C --> I C --> J C --> K C --> L D --> M D --> N D --> O D --> P classDef user fill:#e8f5e8,stroke:#2e7d32,stroke-width:4px,color:#000 classDef role fill:#e3f2fd,stroke:#1976d2,stroke-width:4px,color:#000 classDef permission fill:#f3e5f5,stroke:#7b1fa2,stroke-width:4px,color:#000 classDef resource fill:#fff3e0,stroke:#f57c00,stroke-width:4px,color:#000 classDef roleType fill:#fce4ec,stroke:#c2185b,stroke-width:4px,color:#000 classDef permType fill:#e0f2f1,stroke:#00695c,stroke-width:4px,color:#000 classDef resType fill:#f1f8e9,stroke:#558b2f,stroke-width:4px,color:#000 class A user class B role class C permission class D resource class E,F,G,H roleType class I,J,K,L permType class M,N,O,P resType
权限矩阵
graph TB subgraph "权限矩阵 (Permission Matrix)" A["超级管理员<br/>Super Admin"] --> A1["员工管理: CRUD<br/>Employee Management"] A --> A2["部门管理: CRUD<br/>Department Management"] A --> A3["考勤管理: CRUD<br/>Attendance Management"] A --> A4["薪酬管理: CRUD<br/>Payroll Management"] A --> A5["系统设置: CRUD<br/>System Settings"] B["HR管理员<br/>HR Admin"] --> B1["员工管理: CRUD<br/>Employee Management"] B --> B2["部门管理: CRUD<br/>Department Management"] B --> B3["考勤管理: CRUD<br/>Attendance Management"] B --> B4["薪酬管理: Read<br/>Payroll Read Only"] B --> B5["系统设置: Read<br/>System Read Only"] C["部门经理<br/>Department Manager"] --> C1["员工管理: CRUD<br/>Employee Management"] C --> C2["部门管理: Read<br/>Department Read Only"] C --> C3["考勤管理: CRUD<br/>Attendance Management"] C --> C4["薪酬管理: Read<br/>Payroll Read Only"] C --> C5["系统设置: Read<br/>System Read Only"] D["普通员工<br/>Employee"] --> D1["员工管理: Read<br/>Employee Read Only"] D --> D2["部门管理: Read<br/>Department Read Only"] D --> D3["考勤管理: CRUD<br/>Attendance Management"] D --> D4["薪酬管理: Read<br/>Payroll Read Only"] D --> D5["系统设置: Read<br/>System Read Only"] end classDef superAdmin fill:#ffebee,stroke:#c62828,stroke-width:3px,color:#000 classDef hrAdmin fill:#e8f5e8,stroke:#2e7d32,stroke-width:3px,color:#000 classDef manager fill:#e3f2fd,stroke:#1976d2,stroke-width:3px,color:#000 classDef employee fill:#fff3e0,stroke:#f57c00,stroke-width:3px,color:#000 class A,A1,A2,A3,A4,A5 superAdmin class B,B1,B2,B3,B4,B5 hrAdmin class C,C1,C2,C3,C4,C5 manager class D,D1,D2,D3,D4,D5 employee
2. 数据安全架构
数据加密策略
graph TB subgraph "传输层安全 (Transport Security Layer)" A1["HTTPS/TLS 1.3<br/>Certificate Pinning<br/>HSTS"] A2["SSL/TLS Encryption<br/>Certificate Management<br/>Secure Protocols"] end subgraph "应用层安全 (Application Security Layer)" B1["JWT Token<br/>OAuth2<br/>CORS"] B2["CSRF Protection<br/>XSS Prevention<br/>Input Validation"] end subgraph "数据层安全 (Data Security Layer)" C1["Password Hashing<br/>Data Encryption<br/>Audit Logging"] C2["Database Encryption<br/>Field-level Encryption<br/>Key Management"] end A1 --> B1 A2 --> B1 B1 --> C1 B2 --> C1 C1 --> C2 classDef transport fill:#e8f5e8,stroke:#2e7d32,stroke-width:3px,color:#000 classDef application fill:#e3f2fd,stroke:#1976d2,stroke-width:3px,color:#000 classDef data fill:#fff3e0,stroke:#f57c00,stroke-width:3px,color:#000 class A1,A2 transport class B1,B2 application class C1,C2 data
安全措施
# 密码安全
from passlib.context import CryptContext
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
# 数据加密
from cryptography.fernet import Fernet
encryption_key = Fernet.generate_key()
cipher_suite = Fernet(encryption_key)
# 审计日志
class AuditLog:
def log_action(self, user_id: int, action: str, resource: str):
log_entry = {
"user_id": user_id,
"action": action,
"resource": resource,
"timestamp": datetime.utcnow(),
"ip_address": request.client.host
}
# 记录到审计日志表
部署架构设计
1. 容器化部署
Docker架构
graph TB subgraph "🌐 前端容器 (Frontend Container)" A1["⚛️ Next.js App<br/>🔧 Nginx<br/>📁 Static Assets"] A2["🔌 Port: 3000 Dev<br/>🔌 Port: 80 Prod<br/>🔒 SSL Termination"] end subgraph "🚀 后端容器 (Backend Container)" B1["⚡ FastAPI App<br/>🦄 Uvicorn<br/>🐍 Python 3.13"] B2["🔌 Port: 8000<br/>❤️ Health Checks<br/>📈 Auto-scaling"] end subgraph "💾 数据库容器 (Database Container)" C1["🐘 PostgreSQL 15<br/>🔴 Redis 7<br/>💾 Data Volumes"] C2["🔌 Port: 5432 PostgreSQL<br/>🔌 Port: 6379 Redis<br/>🔄 Backup & Recovery"] end A1 --> B1 A2 --> B2 B1 --> C1 B2 --> C2 classDef frontend fill:#e8f5e8,stroke:#2e7d32,stroke-width:4px,color:#000 classDef backend fill:#e3f2fd,stroke:#1976d2,stroke-width:4px,color:#000 classDef database fill:#fff3e0,stroke:#f57c00,stroke-width:4px,color:#000 class A1,A2 frontend class B1,B2 backend class C1,C2 database
Docker Compose配置
version: '3.8'
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
environment:
- NEXT_PUBLIC_API_URL=http://backend:8000
depends_on:
- backend
backend:
build: ./backend
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgresql://user:password@db:5432/hr_db
- REDIS_URL=redis://redis:6379
depends_on:
- db
- redis
db:
image: postgres:15
environment:
- POSTGRES_DB=hr_db
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
postgres_data:
2. 生产环境架构
负载均衡架构
graph TB subgraph "负载均衡器 (Load Balancer)" A1["Nginx<br/>SSL Termination<br/>Health Checks"] A2["Load Balancing<br/>SSL Offloading<br/>Rate Limiting"] end subgraph "应用服务器集群 (Application Cluster)" B1["Frontend Servers 2+<br/>Static Assets<br/>CDN"] B2["Backend Servers 2+<br/>API Services<br/>Microservices"] B3["Auto-scaling<br/>Health Monitoring<br/>Failover"] end subgraph "数据库集群 (Database Cluster)" C1["PostgreSQL Master/Slave<br/>Read Replicas<br/>Connection Pooling"] C2["Redis Cluster<br/>Cache Layer<br/>Session Storage"] C3["Backup & Recovery<br/>Data Replication<br/>Disaster Recovery"] end A1 --> B1 A2 --> B1 A1 --> B2 A2 --> B2 B1 --> C1 B2 --> C1 B3 --> C1 C1 --> C2 C2 --> C3 classDef loadbalancer fill:#e8f5e8,stroke:#2e7d32,stroke-width:3px,color:#000 classDef application fill:#e3f2fd,stroke:#1976d2,stroke-width:3px,color:#000 classDef database fill:#fff3e0,stroke:#f57c00,stroke-width:3px,color:#000 class A1,A2 loadbalancer class B1,B2,B3 application class C1,C2,C3 database
监控架构
graph TB subgraph "应用监控 (Application Monitoring)" A1["Prometheus<br/>Metrics Collection<br/>Time Series DB"] A2["Grafana<br/>Dashboards<br/>Visualization"] A3["AlertManager<br/>Alerting<br/>Notifications"] A4["Logging<br/>ELK Stack<br/>Log Analysis"] end subgraph "基础设施监控 (Infrastructure Monitoring)" B1["System Metrics<br/>CPU/Memory/Disk<br/>Network I/O"] B2["Database Metrics<br/>Query Performance<br/>Connection Pool"] B3["Application Metrics<br/>Response Time<br/>Error Rates"] end A1 --> B1 A2 --> B1 A3 --> B1 A4 --> B1 A1 --> B2 A2 --> B2 A3 --> B2 A4 --> B2 A1 --> B3 A2 --> B3 A3 --> B3 A4 --> B3 classDef monitoring fill:#e8f5e8,stroke:#2e7d32,stroke-width:3px,color:#000 classDef infrastructure fill:#e3f2fd,stroke:#1976d2,stroke-width:3px,color:#000 class A1,A2,A3,A4 monitoring class B1,B2,B3 infrastructure
扩展性架构设计
1. 微服务架构演进
当前单体架构
graph TB subgraph "单体应用 (Monolithic Application)" A[Frontend + Backend + Database in Single Deployment] end
微服务架构演进
graph TB subgraph "🔧 微服务架构 (Microservices Architecture)" A1["👤 User Service<br/>🔐 Authentication<br/>🔑 Authorization"] A2["👥 Employee Service<br/>👤 Employee Management<br/>📋 Profile Management"] A3["⏰ Attendance Service<br/>⏱️ Time Tracking<br/>📅 Leave Management"] A4["🏢 Organization Service<br/>🏢 Department Management<br/>💼 Position Management"] A5["🎯 Recruitment Service<br/>📝 Hiring Process<br/>💬 Interview Management"] end subgraph "🌐 服务网格 (Service Mesh)" B1["🚪 API Gateway<br/>🔍 Service Discovery<br/>⚖️ Load Balancing"] B2["📋 Service Registry<br/>❤️ Health Checks<br/>🔌 Circuit Breaker"] B3["📨 Message Queue<br/>📡 Event Streaming<br/>🔄 Async Communication"] end A1 --> B1 A2 --> B1 A3 --> B1 A4 --> B1 A5 --> B1 B1 --> B2 B2 --> B3 classDef microservice fill:#e8f5e8,stroke:#2e7d32,stroke-width:4px,color:#000 classDef mesh fill:#e3f2fd,stroke:#1976d2,stroke-width:4px,color:#000 class A1,A2,A3,A4,A5 microservice class B1,B2,B3 mesh
2. 插件化架构
插件系统设计
graph TB subgraph "🏗️ 核心系统 (Core System)" A1["👤 User Management<br/>🔐 Authentication<br/>⚙️ Basic HR Functions"] A2["👥 Employee Management<br/>🏢 Department Management<br/>💼 Position Management"] end subgraph "🔌 插件系统 (Plugin System)" B1["⚙️ Workflow Engine<br/>🤖 Process Automation<br/>✅ Approval Workflows"] B2["📊 Report Engine<br/>📋 Custom Reports<br/>📈 Data Visualization"] B3["📨 Notification System<br/>📧 Email/SMS<br/>📱 Push Notifications"] B4["🔗 Third-party Integrations<br/>🔌 API Connectors<br/>🔄 Data Synchronization"] B5["🔧 Custom Modules<br/>⚙️ Business Logic<br/>🎯 Domain-specific Features"] end A1 --> B1 A2 --> B1 A1 --> B2 A2 --> B2 A1 --> B3 A2 --> B3 A1 --> B4 A2 --> B4 A1 --> B5 A2 --> B5 classDef core fill:#e8f5e8,stroke:#2e7d32,stroke-width:4px,color:#000 classDef plugin fill:#e3f2fd,stroke:#1976d2,stroke-width:4px,color:#000 class A1,A2 core class B1,B2,B3,B4,B5 plugin
插件接口设计
// 插件接口定义
interface Plugin {
name: string;
version: string;
description: string;
initialize(): Promise<void>;
destroy(): Promise<void>;
}
// 工作流插件
interface WorkflowPlugin extends Plugin {
executeWorkflow(workflowId: string, data: any): Promise<any>;
getWorkflowDefinition(id: string): Promise<WorkflowDefinition>;
}
// 报表插件
interface ReportPlugin extends Plugin {
generateReport(reportId: string, params: any): Promise<ReportData>;
getReportTemplate(id: string): Promise<ReportTemplate>;
}
性能优化架构
1. 前端性能优化
代码分割策略
graph TB subgraph "代码分割 (Code Splitting Strategy)" A1["Route-based Splitting<br/>Page-level Code Splitting<br/>Route Lazy Loading"] A2["Component-based Splitting<br/>Component Lazy Loading<br/>Feature-based Splitting"] A3["Dynamic Imports<br/>Dynamic Component Loading<br/>Conditional Imports"] A4["Lazy Loading<br/>On-demand Loading<br/>Progressive Loading"] end classDef splitting fill:#e8f5e8,stroke:#2e7d32,stroke-width:3px,color:#000 class A1,A2,A3,A4 splitting
缓存策略
graph TB subgraph "缓存层次 (Cache Layers)" A1["Browser Cache<br/>HTTP Cache<br/>Local Storage"] A2["CDN Cache<br/>Static Assets<br/>Global Distribution"] A3["Application Cache<br/>Memory Cache<br/>Component State"] A4["Database Query Cache<br/>Query Result Cache<br/>Connection Pool"] A5["Redis Cache<br/>Distributed Cache<br/>Session Storage"] end A1 --> A2 A2 --> A3 A3 --> A4 A4 --> A5 classDef cache fill:#e8f5e8,stroke:#2e7d32,stroke-width:3px,color:#000 class A1,A2,A3,A4,A5 cache
2. 后端性能优化
数据库优化
-- 索引优化
CREATE INDEX idx_employee_department ON employee(department_id);
CREATE INDEX idx_employee_status ON employee(employment_status);
CREATE INDEX idx_attendance_date ON attendance(date);
-- 查询优化
EXPLAIN ANALYZE SELECT * FROM employee
WHERE department_id = 1 AND employment_status = 'active';
缓存优化
# Redis缓存策略
@cache(ttl=300) # 5分钟缓存
def get_employee_by_id(employee_id: int):
return employee_crud.get(db, id=employee_id)
@cache(ttl=1800) # 30分钟缓存
def get_department_tree():
return department_crud.get_tree_structure(db)
总结
本系统架构设计具有以下特点:
- 现代化技术栈: 采用最新的前后端技术,保证系统的先进性和可维护性
- 分层架构设计: 清晰的分层架构,职责分离,易于维护和扩展
- 微服务就绪: 当前单体架构,但设计上支持向微服务架构演进
- 安全可靠: 多层次的安全防护,保证系统安全
- 高性能: 完善的缓存策略和性能优化
- 可扩展: 插件化设计,支持功能扩展和第三方集成
- 可监控: 完善的监控和日志系统,便于运维管理
该架构设计为人力资源管理系统提供了坚实的技术基础,能够满足企业级应用的各种需求。
系统要求
功能需求
1. 用户管理模块
1.1 用户认证与授权
- 用户登录: 支持用户名/密码登录,JWT Token认证
- 权限管理: 基于角色的访问控制(RBAC)
- 用户角色: 超级管理员、HR管理员、部门经理、普通员工
- 会话管理: 自动登录、会话超时、安全退出
- 密码策略: 密码强度要求、定期更换、忘记密码重置
1.2 用户档案管理
- 基本信息: 用户名、邮箱、全名、角色、部门、岗位
- 联系方式: 电话、地址、紧急联系人
- 状态管理: 激活/禁用状态、最后登录时间
- 头像管理: 用户头像上传、显示、更新
2. 员工管理模块
2.1 员工档案管理
- 基本信息: 员工编号、姓名、性别、出生日期、身份证号
- 联系信息: 邮箱、电话、地址、紧急联系人
- 工作信息: 部门、岗位、直属上级、入职日期、合同类型
- 薪资信息: 基本工资、货币类型、薪资等级
- 教育背景: 学历、专业、毕业院校
- 工作经历: 工作经验、技能标签、获奖记录
- 状态跟踪: 在职状态、试用期状态、离职状态
2.2 员工状态管理
- 状态变更: 入职、转正、调岗、离职等状态变更
- 变更历史: 状态变更记录、变更原因、操作人员
- 审批流程: 状态变更审批、多级审批支持
- 通知机制: 状态变更通知相关人员
2.3 家庭信息管理
- 家庭成员: 家庭成员信息、关系类型、联系方式
- 政治面貌: 政治身份、入党时间
- 工作单位: 家庭成员工作单位、职务信息
3. 组织架构模块
3.1 部门管理
- 部门信息: 部门名称、编码、描述、层级关系
- 组织架构: 支持多级部门结构、部门树形展示
- 部门负责人: 部门经理设置、权限分配
- 预算管理: 部门预算设置、预算使用情况
- 人员配置: 部门人员数量、人员上限设置
3.2 岗位管理
- 岗位定义: 岗位名称、编码、级别、类别
- 岗位描述: 岗位职责、任职要求、薪资范围
- 岗位关系: 汇报关系、协作关系
- 人员配置: 岗位人员数量、招聘需求
3.3 组织架构图
- 可视化展示: 组织架构图展示、交互式操作
- 层级管理: 支持多级组织架构、动态调整
- 权限控制: 不同角色查看不同层级的组织架构
4. 考勤管理模块
4.1 考勤记录
- 打卡记录: 上班打卡、下班打卡、打卡时间记录
- 考勤状态: 正常、迟到、早退、缺勤、请假
- 工作时间: 标准工作时间、实际工作时间、加班时间
- 考勤统计: 日考勤、月考勤、年考勤统计
4.2 请假管理
- 请假类型: 年假、病假、事假、婚假、产假、丧假等
- 请假申请: 在线请假申请、请假原因、请假时间
- 审批流程: 多级审批、审批状态跟踪
- 假期余额: 各类假期余额查询、假期使用记录
4.3 加班管理
- 加班申请: 加班时间申请、加班原因、加班类型
- 加班审批: 加班申请审批、加班时间确认
- 加班统计: 加班时间统计、加班费计算
- 调休管理: 加班调休申请、调休时间管理
4.4 考勤报表
- 个人报表: 个人考勤记录、请假记录、加班记录
- 部门报表: 部门考勤统计、出勤率分析
- 考勤分析: 考勤趋势分析、异常考勤提醒
5. 招聘管理模块
5.1 招聘需求管理
- 需求申请: 招聘需求申请、岗位要求、人数需求
- 需求审批: 招聘需求审批、预算确认
- 需求跟踪: 招聘进度跟踪、需求状态管理
- 需求分析: 招聘需求统计、招聘效果分析
5.2 简历管理
- 简历收集: 简历上传、简历信息录入
- 简历筛选: 简历初筛、筛选标准设置
- 简历分类: 按岗位、按状态、按来源分类
- 简历搜索: 关键词搜索、条件筛选
5.3 面试管理
- 面试安排: 面试时间安排、面试官分配
- 面试记录: 面试评分、面试反馈、面试结果
- 面试流程: 多轮面试、面试结果汇总
- 面试统计: 面试通过率、面试效果分析
6. 入职离职模块
6.1 入职管理
- 入职流程: 入职手续办理、入职材料收集
- 入职培训: 新员工培训安排、培训记录
- 试用期管理: 试用期跟踪、试用期评估
- 入职文档: 入职文档模板、文档生成
6.2 试用期管理
- 试用期跟踪: 试用期进度、试用期表现
- 试用期评估: 试用期考核、试用期结果
- 试用期提醒: 试用期到期提醒、评估提醒
- 试用期统计: 试用期通过率、试用期分析
6.3 离职管理
- 离职申请: 离职申请提交、离职原因
- 离职审批: 离职申请审批、离职手续办理
- 离职交接: 工作交接、物品交接、知识交接
- 离职统计: 离职率统计、离职原因分析
7. 薪酬管理模块
7.1 薪资核算
- 基本工资: 基本工资计算、薪资等级管理
- 绩效工资: 绩效奖金计算、绩效系数
- 加班费: 加班费计算、加班费标准
- 扣款项目: 社保扣款、个税扣款、其他扣款
7.2 社保公积金
- 社保管理: 社保基数、社保比例、社保计算
- 公积金管理: 公积金基数、公积金比例、公积金计算
- 社保申报: 社保申报、社保缴费、社保查询
- 社保统计: 社保费用统计、社保分析
7.3 福利管理
- 福利项目: 福利类型、福利标准、福利计算
- 福利发放: 福利发放记录、福利发放统计
- 福利查询: 个人福利查询、福利历史记录
- 福利分析: 福利成本分析、福利效果分析
8. 绩效管理模块
8.1 绩效方案
- 绩效指标: 绩效指标设置、指标权重、指标标准
- 绩效周期: 绩效周期设置、绩效时间安排
- 绩效等级: 绩效等级定义、绩效等级标准
- 绩效模板: 绩效评估模板、绩效表单设计
8.2 绩效评估
- 自评: 员工自评、自评提交、自评修改
- 上级评价: 上级评价、评价提交、评价确认
- 360度评价: 多维度评价、评价汇总
- 绩效面谈: 绩效面谈安排、面谈记录
8.3 绩效结果
- 绩效评分: 绩效分数计算、绩效等级评定
- 绩效排名: 绩效排名、绩效分布
- 绩效改进: 绩效改进计划、改进跟踪
- 绩效统计: 绩效统计报表、绩效分析
9. 培训发展模块
9.1 培训需求
- 需求调研: 培训需求调研、需求分析
- 需求收集: 培训需求收集、需求汇总
- 需求评估: 培训需求评估、需求优先级
- 需求统计: 培训需求统计、需求分析
9.2 培训计划
- 培训方案: 培训方案制定、培训内容设计
- 培训安排: 培训时间安排、培训地点安排
- 培训资源: 培训讲师、培训材料、培训设备
- 培训预算: 培训预算制定、培训成本控制
9.3 培训执行
- 培训实施: 培训活动组织、培训过程管理
- 培训记录: 培训参与记录、培训效果记录
- 培训评估: 培训效果评估、培训满意度调查
- 培训证书: 培训证书发放、证书管理
10. 报表分析模块
10.1 HR报表
- 人员报表: 人员统计报表、人员结构分析
- 考勤报表: 考勤统计报表、考勤分析
- 薪资报表: 薪资统计报表、薪资分析
- 绩效报表: 绩效统计报表、绩效分析
10.2 数据可视化
- 图表展示: 数据图表、趋势分析
- 仪表盘: 关键指标展示、实时数据
- 报表导出: 报表导出、报表打印
- 报表定制: 自定义报表、报表模板
10.3 数据分析
- 趋势分析: 数据趋势分析、趋势预测
- 对比分析: 数据对比分析、差异分析
- 关联分析: 数据关联分析、相关性分析
- 异常分析: 异常数据识别、异常预警
非功能需求
1. 性能需求
1.1 响应时间
- 页面加载: 首页加载时间 ≤ 3秒
- 数据查询: 单次查询响应时间 ≤ 2秒
- 数据更新: 数据更新响应时间 ≤ 1秒
- 报表生成: 报表生成时间 ≤ 10秒
1.2 并发性能
- 并发用户: 支持1000个并发用户
- 并发请求: 支持5000个并发请求
- 数据库连接: 支持200个数据库连接
- 内存使用: 内存使用率 ≤ 80%
1.3 数据处理
- 数据量: 支持100万条员工记录
- 文件上传: 支持100MB文件上传
- 批量操作: 支持1000条记录批量操作
- 数据备份: 数据备份时间 ≤ 2小时
2. 可用性需求
2.1 系统可用性
- 系统运行时间: 99.9%系统可用性
- 故障恢复: 故障恢复时间 ≤ 30分钟
- 数据备份: 每日自动数据备份
- 灾难恢复: 灾难恢复时间 ≤ 4小时
2.2 用户体验
- 界面友好: 直观易用的用户界面
- 操作简单: 简单易学的操作流程
- 帮助文档: 完整的帮助文档和用户手册
- 多语言支持: 支持中文界面
3. 安全需求
3.1 数据安全
- 数据加密: 敏感数据加密存储
- 传输安全: HTTPS加密传输
- 访问控制: 基于角色的访问控制
- 审计日志: 完整的操作审计日志
3.2 系统安全
- 身份认证: 强身份认证机制
- 权限管理: 细粒度权限控制
- 安全防护: 防SQL注入、防XSS攻击
- 安全更新: 及时的安全补丁更新
4. 可扩展性需求
4.1 功能扩展
- 模块化设计: 支持功能模块扩展
- 插件机制: 支持第三方插件集成
- API接口: 提供完整的API接口
- 数据导入导出: 支持数据导入导出
4.2 性能扩展
- 水平扩展: 支持水平扩展
- 负载均衡: 支持负载均衡
- 缓存机制: 支持多级缓存
- 数据库优化: 支持数据库优化
5. 兼容性需求
5.1 浏览器兼容
- 现代浏览器: 支持Chrome、Firefox、Safari、Edge
- 移动端: 支持移动端浏览器
- 响应式设计: 支持不同屏幕尺寸
- 跨平台: 支持Windows、macOS、Linux
5.2 数据兼容
- 数据格式: 支持Excel、CSV、JSON格式
- 数据迁移: 支持数据迁移工具
- 数据同步: 支持数据同步机制
- 数据备份: 支持多种数据备份方式
技术需求
1. 前端技术需求
1.1 技术栈
- 框架: Next.js 15.5.2 + React 19.1.0
- 语言: TypeScript 5.0+
- 样式: Tailwind CSS 4.0+
- 组件库: Radix UI + Lucide React
- 状态管理: React Context + React Hook Form
- 验证: Zod 4.1.5+
1.2 开发工具
- 构建工具: Next.js + Turbopack
- 代码质量: ESLint + Prettier
- 类型检查: TypeScript Compiler
- 测试框架: Jest + React Testing Library
2. 后端技术需求
2.1 技术栈
- 框架: FastAPI 0.116.1+
- 语言: Python 3.13+
- 数据库: PostgreSQL 15+
- ORM: SQLAlchemy 2.0+
- 迁移: Alembic 1.13.0+
- 缓存: Redis 7.0+
2.2 开发工具
- API文档: FastAPI自动生成文档
- 代码质量: Black + isort + flake8
- 测试框架: pytest 8.4.2+
- 部署工具: Docker + Docker Compose
3. 数据库需求
3.1 数据库设计
- 主数据库: PostgreSQL 15+
- 缓存数据库: Redis 7.0+
- 连接池: 支持连接池管理
- 事务管理: 支持ACID事务
- 索引优化: 关键字段建立索引
3.2 数据安全
- 数据加密: 敏感数据加密存储
- 访问控制: 数据库访问控制
- 备份恢复: 自动备份和恢复
- 审计日志: 数据库操作审计
4. 部署需求
4.1 容器化部署
- 容器技术: Docker + Docker Compose
- 镜像管理: 多阶段构建优化
- 环境隔离: 开发、测试、生产环境隔离
- 配置管理: 环境变量配置管理
4.2 生产环境
- 负载均衡: Nginx负载均衡
- SSL证书: HTTPS安全传输
- 监控告警: 系统监控和告警
- 日志管理: 集中化日志管理
业务需求
1. 业务流程需求
1.1 员工生命周期管理
- 入职流程: 完整的员工入职流程
- 在职管理: 员工在职期间的管理
- 离职流程: 完整的员工离职流程
- 状态跟踪: 员工状态全程跟踪
1.2 考勤管理流程
- 考勤记录: 完整的考勤记录管理
- 请假流程: 标准化的请假流程
- 加班管理: 规范的加班管理流程
- 考勤统计: 准确的考勤统计分析
1.3 招聘管理流程
- 需求管理: 招聘需求管理流程
- 简历管理: 简历收集和筛选流程
- 面试流程: 标准化的面试流程
- 入职流程: 新员工入职流程
2. 数据需求
2.1 数据完整性
- 数据一致性: 保证数据一致性
- 数据准确性: 确保数据准确性
- 数据完整性: 维护数据完整性
- 数据时效性: 保证数据时效性
2.2 数据安全
- 数据备份: 定期数据备份
- 数据恢复: 快速数据恢复
- 数据加密: 敏感数据加密
- 数据访问: 控制数据访问权限
3. 集成需求
3.1 第三方集成
- 邮件系统: 邮件通知集成
- 短信系统: 短信通知集成
- OA系统: 办公自动化系统集成
- 财务系统: 财务系统集成
3.2 API集成
- RESTful API: 提供完整的RESTful API
- API文档: 完整的API文档
- API认证: API访问认证
- API限流: API访问限流
质量需求
1. 代码质量
1.1 代码规范
- 编码规范: 统一的编码规范
- 代码审查: 代码审查机制
- 代码测试: 完整的代码测试
- 代码文档: 完整的代码文档
1.2 代码维护
- 代码重构: 定期代码重构
- 技术债务: 技术债务管理
- 性能优化: 持续性能优化
- 安全更新: 及时安全更新
2. 测试质量
2.1 测试覆盖
- 单元测试: 单元测试覆盖率 ≥ 80%
- 集成测试: 集成测试覆盖关键流程
- 端到端测试: 端到端测试覆盖主要功能
- 性能测试: 性能测试覆盖关键场景
2.2 测试管理
- 测试计划: 完整的测试计划
- 测试用例: 详细的测试用例
- 测试执行: 规范的测试执行
- 缺陷管理: 缺陷跟踪和管理
3. 文档质量
3.1 技术文档
- 架构文档: 完整的系统架构文档
- API文档: 详细的API文档
- 部署文档: 完整的部署文档
- 运维文档: 详细的运维文档
3.2 用户文档
- 用户手册: 完整的用户手册
- 操作指南: 详细的操作指南
- 常见问题: 常见问题解答
- 培训材料: 用户培训材料
约束条件
1. 技术约束
1.1 技术选型
- 前端技术: 必须使用React生态
- 后端技术: 必须使用Python生态
- 数据库: 必须使用PostgreSQL
- 部署方式: 必须支持容器化部署
1.2 性能约束
- 响应时间: 页面响应时间 ≤ 3秒
- 并发用户: 支持1000个并发用户
- 数据量: 支持100万条记录
- 存储空间: 支持1TB数据存储
2. 业务约束
2.1 合规要求
- 数据保护: 符合数据保护法规
- 隐私保护: 保护用户隐私
- 安全标准: 符合安全标准
- 审计要求: 满足审计要求
2.2 成本约束
- 开发成本: 控制开发成本
- 运维成本: 控制运维成本
- 硬件成本: 控制硬件成本
- 软件成本: 控制软件成本
3. 时间约束
3.1 开发周期
- 项目周期: 6个月开发周期
- 里程碑: 明确的里程碑节点
- 交付时间: 按时交付
- 测试时间: 充分的测试时间
3.2 维护周期
- 维护周期: 长期维护支持
- 更新频率: 定期功能更新
- 安全更新: 及时安全更新
- 技术支持: 持续技术支持
验收标准
1. 功能验收
1.1 核心功能
- 用户管理: 用户管理功能完整可用
- 员工管理: 员工管理功能完整可用
- 考勤管理: 考勤管理功能完整可用
- 报表分析: 报表分析功能完整可用
1.2 业务流程
- 入职流程: 入职流程完整可用
- 考勤流程: 考勤流程完整可用
- 请假流程: 请假流程完整可用
- 审批流程: 审批流程完整可用
2. 性能验收
2.1 响应时间
- 页面加载: 页面加载时间 ≤ 3秒
- 数据查询: 数据查询时间 ≤ 2秒
- 数据更新: 数据更新时间 ≤ 1秒
- 报表生成: 报表生成时间 ≤ 10秒
2.2 并发性能
- 并发用户: 支持1000个并发用户
- 并发请求: 支持5000个并发请求
- 系统稳定性: 系统稳定运行24小时
- 内存使用: 内存使用率 ≤ 80%
3. 安全验收
3.1 数据安全
- 数据加密: 敏感数据加密存储
- 传输安全: HTTPS加密传输
- 访问控制: 基于角色的访问控制
- 审计日志: 完整的操作审计日志
3.2 系统安全
- 身份认证: 强身份认证机制
- 权限管理: 细粒度权限控制
- 安全防护: 防SQL注入、防XSS攻击
- 安全测试: 通过安全测试
4. 可用性验收
4.1 系统可用性
- 系统运行: 系统稳定运行
- 故障恢复: 故障快速恢复
- 数据备份: 数据完整备份
- 灾难恢复: 灾难快速恢复
4.2 用户体验
- 界面友好: 界面直观易用
- 操作简单: 操作简单易学
- 帮助文档: 帮助文档完整
- 用户培训: 用户培训完成
硬件要求
1. 服务器硬件要求
1.1 生产环境服务器
- CPU: 8核心以上,主频2.4GHz以上
- 内存: 32GB以上RAM
- 存储: 500GB以上SSD存储
- 网络: 千兆网卡,支持负载均衡
- 电源: 冗余电源,UPS支持
1.2 开发环境服务器
- CPU: 4核心以上,主频2.0GHz以上
- 内存: 16GB以上RAM
- 存储: 200GB以上SSD存储
- 网络: 百兆网卡
- 电源: 标准电源
1.3 数据库服务器
- CPU: 16核心以上,主频2.8GHz以上
- 内存: 64GB以上RAM
- 存储: 1TB以上SSD存储,支持RAID
- 网络: 万兆网卡
- 备份: 磁带机或云备份
2. 客户端硬件要求
2.1 桌面客户端
- CPU: 双核心以上,主频2.0GHz以上
- 内存: 8GB以上RAM
- 存储: 100GB以上可用空间
- 显示器: 1920x1080以上分辨率
- 网络: 百兆网卡或WiFi
2.2 移动客户端
- CPU: 四核心以上
- 内存: 4GB以上RAM
- 存储: 32GB以上可用空间
- 网络: 4G/5G或WiFi
- 操作系统: iOS 12+或Android 8+
软件要求
1. 服务器软件要求
1.1 操作系统
- Linux: Ubuntu 20.04 LTS或CentOS 8+
- Windows: Windows Server 2019或更高版本
- 容器: Docker 20.10+和Docker Compose 2.0+
- 虚拟化: 支持VMware、Hyper-V或KVM
1.2 数据库软件
- PostgreSQL: 15.0或更高版本
- Redis: 7.0或更高版本
- 备份工具: pg_dump、Redis-cli
- 监控工具: pgAdmin、Redis Commander
1.3 应用软件
- Python: 3.13或更高版本
- Node.js: 18.0或更高版本
- Nginx: 1.20或更高版本
- SSL证书: Let's Encrypt或商业证书
2. 客户端软件要求
2.1 浏览器要求
- Chrome: 90.0或更高版本
- Firefox: 88.0或更高版本
- Safari: 14.0或更高版本
- Edge: 90.0或更高版本
2.2 移动端要求
- iOS: 12.0或更高版本
- Android: 8.0或更高版本
- PWA支持: 支持渐进式Web应用
浏览器支持
1. 桌面浏览器支持
1.1 完全支持
- Chrome: 90.0+ (推荐)
- Firefox: 88.0+
- Safari: 14.0+
- Edge: 90.0+
1.2 部分支持
- IE: 11.0 (基础功能)
- Opera: 76.0+ (基础功能)
1.3 不支持
- IE: 10.0及以下版本
- Safari: 13.0及以下版本
2. 移动浏览器支持
2.1 完全支持
- Chrome Mobile: 90.0+
- Safari Mobile: 14.0+
- Firefox Mobile: 88.0+
- Edge Mobile: 90.0+
2.2 响应式设计
- 手机: 320px-768px
- 平板: 768px-1024px
- 桌面: 1024px以上
网络要求
1. 网络带宽要求
1.1 服务器端
- 上行带宽: 100Mbps以上
- 下行带宽: 1000Mbps以上
- 延迟: 小于50ms
- 丢包率: 小于0.1%
1.2 客户端
- 带宽: 10Mbps以上
- 延迟: 小于100ms
- 稳定性: 99%以上可用性
2. 网络协议要求
2.1 支持协议
- HTTP/HTTPS: 1.1和2.0
- WebSocket: 实时通信
- TCP/IP: 标准网络协议
- DNS: 域名解析
2.2 安全协议
- TLS: 1.2和1.3
- SSL: 3.0以上
- HTTPS: 强制加密传输
- 证书: 有效SSL证书
性能要求
1. 响应时间要求
1.1 页面加载
- 首页: 3秒以内
- 列表页: 2秒以内
- 详情页: 1秒以内
- 报表页: 10秒以内
1.2 数据操作
- 查询: 2秒以内
- 新增: 1秒以内
- 修改: 1秒以内
- 删除: 1秒以内
2. 并发性能要求
2.1 并发用户
- 在线用户: 1000人
- 并发用户: 500人
- 峰值用户: 2000人
- 响应时间: 3秒以内
2.2 数据处理
- 数据量: 100万条记录
- 文件大小: 100MB以内
- 批量操作: 1000条记录
- 报表生成: 10秒以内
3. 系统资源要求
3.1 CPU使用率
- 正常负载: 50%以内
- 峰值负载: 80%以内
- 持续负载: 70%以内
- 空闲状态: 20%以内
3.2 内存使用率
- 正常负载: 60%以内
- 峰值负载: 80%以内
- 持续负载: 70%以内
- 空闲状态: 30%以内
存储要求
1. 数据存储要求
1.1 数据库存储
- 初始容量: 100GB
- 增长容量: 50GB/年
- 总容量: 1TB以上
- 备份容量: 2TB以上
1.2 文件存储
- 文档存储: 500GB
- 图片存储: 200GB
- 视频存储: 1TB
- 备份存储: 3TB
2. 存储性能要求
2.1 读写性能
- 读取速度: 500MB/s以上
- 写入速度: 300MB/s以上
- 随机读写: 10000 IOPS以上
- 顺序读写: 1000MB/s以上
2.2 存储可靠性
- 可用性: 99.9%以上
- 数据完整性: 99.99%以上
- 故障恢复: 30分钟以内
- 数据备份: 每日自动备份
3. 存储扩展要求
3.1 水平扩展
- 存储节点: 支持多节点
- 负载均衡: 支持负载均衡
- 数据分片: 支持数据分片
- 自动扩展: 支持自动扩展
3.2 垂直扩展
- 存储容量: 支持容量扩展
- 性能提升: 支持性能提升
- 硬件升级: 支持硬件升级
- 无缝迁移: 支持无缝迁移
备份要求
1. 数据备份要求
1.1 备份策略
- 全量备份: 每周一次
- 增量备份: 每日一次
- 差异备份: 每日一次
- 实时备份: 关键数据实时备份
1.2 备份存储
- 本地备份: 本地存储备份
- 远程备份: 异地存储备份
- 云备份: 云存储备份
- 磁带备份: 长期存储备份
2. 备份恢复要求
2.1 恢复时间
- 数据恢复: 4小时以内
- 系统恢复: 2小时以内
- 服务恢复: 1小时以内
- 完全恢复: 8小时以内
2.2 恢复测试
- 定期测试: 每月一次
- 恢复验证: 验证数据完整性
- 性能测试: 测试恢复性能
- 文档记录: 记录恢复过程
3. 灾难恢复要求
3.1 灾难恢复
- RTO: 4小时以内
- RPO: 1小时以内
- 灾难恢复: 支持灾难恢复
- 业务连续性: 保证业务连续性
3.2 容灾要求
- 异地容灾: 支持异地容灾
- 数据同步: 支持数据同步
- 故障切换: 支持故障切换
- 监控告警: 支持监控告警
兼容性要求
1. 系统兼容性
1.1 操作系统兼容性
- Windows: 10/11, Server 2019/2022
- macOS: 10.15+, 11.0+, 12.0+
- Linux: Ubuntu 20.04+, CentOS 8+
- 移动端: iOS 12+, Android 8+
1.2 数据库兼容性
- PostgreSQL: 13.0+, 14.0+, 15.0+
- MySQL: 8.0+ (可选)
- Oracle: 12c+ (可选)
- SQL Server: 2019+ (可选)
2. 应用兼容性
2.1 浏览器兼容性
- Chrome: 90.0+
- Firefox: 88.0+
- Safari: 14.0+
- Edge: 90.0+
2.2 移动端兼容性
- iOS: 12.0+
- Android: 8.0+
- PWA: 支持PWA
- 响应式: 支持响应式设计
3. 数据兼容性
3.1 数据格式兼容性
- Excel: 支持Excel导入导出
- CSV: 支持CSV导入导出
- JSON: 支持JSON数据交换
- XML: 支持XML数据交换
3.2 系统集成兼容性
- LDAP: 支持LDAP认证
- AD: 支持Active Directory
- SSO: 支持单点登录
- API: 支持RESTful API
维护要求
1. 日常维护要求
1.1 系统监控
- 性能监控: 实时性能监控
- 资源监控: CPU、内存、磁盘监控
- 网络监控: 网络流量监控
- 应用监控: 应用状态监控
1.2 日志管理
- 系统日志: 系统运行日志
- 应用日志: 应用运行日志
- 错误日志: 错误信息日志
- 审计日志: 操作审计日志
2. 定期维护要求
2.1 系统更新
- 安全更新: 及时安全更新
- 功能更新: 定期功能更新
- 性能优化: 持续性能优化
- bug修复: 及时bug修复
2.2 数据维护
- 数据清理: 定期数据清理
- 数据归档: 历史数据归档
- 数据优化: 数据库优化
- 索引维护: 索引优化维护
3. 应急维护要求
3.1 故障处理
- 故障响应: 30分钟内响应
- 故障诊断: 快速故障诊断
- 故障修复: 及时故障修复
- 故障报告: 详细故障报告
3.2 安全维护
- 安全扫描: 定期安全扫描
- 漏洞修复: 及时漏洞修复
- 安全更新: 及时安全更新
- 安全培训: 定期安全培训
4. 技术支持要求
4.1 技术支持
- 7x24小时: 7x24小时技术支持
- 远程支持: 远程技术支持
- 现场支持: 现场技术支持
- 电话支持: 电话技术支持
4.2 培训支持
- 用户培训: 用户操作培训
- 管理员培训: 系统管理培训
- 技术培训: 技术维护培训
- 文档支持: 完整技术文档
总结
本系统需求文档涵盖了人力资源管理系统的完整功能需求、非功能需求、技术需求、业务需求、质量需求、约束条件和验收标准。系统采用现代化的技术栈,具有完整的功能模块、良好的性能表现、可靠的安全保障和优秀的用户体验,能够满足企业级HR管理的各种需求。
系统设计遵循模块化、可扩展、可维护的原则,支持功能扩展和第三方集成,具有良好的扩展性和可维护性。通过完善的测试和文档,确保系统的质量和可靠性,为企业提供高效、安全、可靠的人力资源管理解决方案。
新增的硬件要求、软件要求、浏览器支持、网络要求、性能要求、存储要求、备份要求、兼容性要求和维护要求,为系统的部署、运行和维护提供了详细的技术规范和标准,确保系统能够在各种环境下稳定运行,满足企业级应用的各种需求。
数据库设计
设计概述
本系统采用PostgreSQL作为主数据库,Redis作为缓存数据库,设计遵循第三范式,确保数据一致性、完整性和可扩展性。数据库设计支持完整的HR业务流程,包括用户管理、员工管理、组织架构、考勤管理、招聘管理、薪酬管理等核心功能模块。
设计原则
1. 数据完整性
- 实体完整性: 主键约束确保实体唯一性
- 参照完整性: 外键约束确保数据关联正确性
- 域完整性: 数据类型和约束确保数据有效性
- 业务完整性: 业务规则约束确保数据逻辑正确性
2. 数据一致性
- ACID特性: 支持原子性、一致性、隔离性、持久性
- 事务管理: 支持事务回滚和提交
- 并发控制: 支持多用户并发访问
- 数据同步: 确保主从数据库数据同步
3. 性能优化
- 索引设计: 关键字段建立合适索引
- 查询优化: 优化复杂查询性能
- 分区策略: 大表分区提高查询效率
- 缓存机制: 多级缓存提高访问速度
4. 安全设计
- 数据加密: 敏感数据加密存储
- 访问控制: 基于角色的数据访问控制
- 审计日志: 完整的数据操作审计
- 备份恢复: 定期备份和快速恢复
核心实体设计
1. 用户管理模块
1.1 用户表 (user)
CREATE TABLE "user" (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
full_name VARCHAR(100) NOT NULL,
password_hash VARCHAR(255) NOT NULL,
role VARCHAR(20) DEFAULT 'employee' CHECK (role IN ('admin', 'hr', 'manager', 'employee')),
department_id INTEGER REFERENCES "department"(id),
position_id INTEGER REFERENCES "position"(id),
phone VARCHAR(20),
avatar_url VARCHAR(500),
is_active BOOLEAN DEFAULT TRUE,
last_login TIMESTAMP WITH TIME ZONE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE,
notes TEXT
);
-- 索引
CREATE INDEX idx_user_username ON "user"(username);
CREATE INDEX idx_user_email ON "user"(email);
CREATE INDEX idx_user_role ON "user"(role);
CREATE INDEX idx_user_department ON "user"(department_id);
CREATE INDEX idx_user_active ON "user"(is_active);
1.2 用户会话表 (user_session)
CREATE TABLE "user_session" (
id SERIAL PRIMARY KEY,
user_id INTEGER NOT NULL REFERENCES "user"(id) ON DELETE CASCADE,
session_token VARCHAR(255) UNIQUE NOT NULL,
expires_at TIMESTAMP WITH TIME ZONE NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
last_accessed TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
ip_address INET,
user_agent TEXT
);
-- 索引
CREATE INDEX idx_session_token ON "user_session"(session_token);
CREATE INDEX idx_session_user ON "user_session"(user_id);
CREATE INDEX idx_session_expires ON "user_session"(expires_at);
2. 员工管理模块
2.1 员工表 (employee)
CREATE TABLE "employee" (
id SERIAL PRIMARY KEY,
employee_id VARCHAR(20) UNIQUE NOT NULL,
user_id INTEGER REFERENCES "user"(id),
-- 基本信息
name VARCHAR(100) NOT NULL,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
middle_name VARCHAR(50),
gender VARCHAR(10) CHECK (gender IN ('male', 'female', 'other')),
birth_date DATE,
id_number VARCHAR(20) UNIQUE,
passport_number VARCHAR(20),
-- 联系信息
email VARCHAR(100),
phone VARCHAR(20),
address TEXT,
emergency_contact VARCHAR(100),
emergency_phone VARCHAR(20),
-- 工作信息
department_id INTEGER NOT NULL REFERENCES "department"(id),
position_id INTEGER NOT NULL REFERENCES "position"(id),
manager_id INTEGER REFERENCES "employee"(id),
hire_date DATE NOT NULL,
probation_end_date DATE,
contract_type VARCHAR(20) NOT NULL CHECK (contract_type IN ('full_time', 'part_time', 'contract', 'intern')),
employment_status VARCHAR(20) DEFAULT 'active' CHECK (employment_status IN ('active', 'probation', 'terminated', 'resigned')),
level VARCHAR(20),
-- 薪资信息
base_salary DECIMAL(10,2),
currency VARCHAR(3) DEFAULT 'CNY',
-- 教育背景
education VARCHAR(100),
major VARCHAR(100),
work_experience TEXT,
resume TEXT,
skills JSONB,
awards JSONB,
avatar VARCHAR(500),
notes TEXT,
-- 系统字段
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 索引
CREATE INDEX idx_employee_employee_id ON "employee"(employee_id);
CREATE INDEX idx_employee_user_id ON "employee"(user_id);
CREATE INDEX idx_employee_department ON "employee"(department_id);
CREATE INDEX idx_employee_position ON "employee"(position_id);
CREATE INDEX idx_employee_manager ON "employee"(manager_id);
CREATE INDEX idx_employee_status ON "employee"(employment_status);
CREATE INDEX idx_employee_active ON "employee"(is_active);
CREATE INDEX idx_employee_hire_date ON "employee"(hire_date);
2.2 员工状态历史表 (employee_status_history)
CREATE TABLE "employee_status_history" (
id SERIAL PRIMARY KEY,
employee_id INTEGER NOT NULL REFERENCES "employee"(id) ON DELETE CASCADE,
from_status VARCHAR(20) NOT NULL,
to_status VARCHAR(20) NOT NULL,
reason VARCHAR(200) NOT NULL,
change_date DATE NOT NULL,
changed_by VARCHAR(100) NOT NULL,
notes TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- 索引
CREATE INDEX idx_status_history_employee ON "employee_status_history"(employee_id);
CREATE INDEX idx_status_history_date ON "employee_status_history"(change_date);
2.3 员工家庭成员表 (employee_family_member)
CREATE TABLE "employee_family_member" (
id SERIAL PRIMARY KEY,
employee_id INTEGER NOT NULL REFERENCES "employee"(id) ON DELETE CASCADE,
relationship_type VARCHAR(50) NOT NULL,
name VARCHAR(100) NOT NULL,
age INTEGER,
political_status VARCHAR(50),
work_unit VARCHAR(200),
position VARCHAR(100),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 索引
CREATE INDEX idx_family_employee ON "employee_family_member"(employee_id);
3. 组织架构模块
3.1 部门表 (department)
CREATE TABLE "department" (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
code VARCHAR(20) UNIQUE NOT NULL,
description TEXT,
parent_id INTEGER REFERENCES "department"(id),
manager_id INTEGER REFERENCES "employee"(id),
level INTEGER NOT NULL DEFAULT 1,
budget DECIMAL(15,2),
headcount_limit INTEGER,
location VARCHAR(200),
phone VARCHAR(20),
email VARCHAR(100),
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 索引
CREATE INDEX idx_department_code ON "department"(code);
CREATE INDEX idx_department_parent ON "department"(parent_id);
CREATE INDEX idx_department_manager ON "department"(manager_id);
CREATE INDEX idx_department_level ON "department"(level);
CREATE INDEX idx_department_active ON "department"(is_active);
3.2 岗位表 (position)
CREATE TABLE "position" (
id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
code VARCHAR(20) UNIQUE NOT NULL,
department_id INTEGER NOT NULL REFERENCES "department"(id),
level VARCHAR(20) NOT NULL,
category VARCHAR(50) NOT NULL,
description TEXT,
requirements TEXT,
responsibilities TEXT,
min_salary DECIMAL(10,2),
max_salary DECIMAL(10,2),
headcount_limit INTEGER NOT NULL DEFAULT 1,
reporting_to INTEGER REFERENCES "position"(id),
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 索引
CREATE INDEX idx_position_code ON "position"(code);
CREATE INDEX idx_position_department ON "position"(department_id);
CREATE INDEX idx_position_level ON "position"(level);
CREATE INDEX idx_position_category ON "position"(category);
CREATE INDEX idx_position_active ON "position"(is_active);
4. 考勤管理模块
4.1 考勤记录表 (attendance)
CREATE TABLE "attendance" (
id SERIAL PRIMARY KEY,
employee_id INTEGER NOT NULL REFERENCES "employee"(id),
date DATE NOT NULL,
check_in_time TIME,
check_out_time TIME,
work_hours INTEGER, -- 以分钟为单位
overtime_hours INTEGER, -- 以分钟为单位
status VARCHAR(20) DEFAULT 'present' CHECK (status IN ('present', 'absent', 'late', 'early_leave')),
notes TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE,
UNIQUE(employee_id, date)
);
-- 索引
CREATE INDEX idx_attendance_employee ON "attendance"(employee_id);
CREATE INDEX idx_attendance_date ON "attendance"(date);
CREATE INDEX idx_attendance_status ON "attendance"(status);
CREATE INDEX idx_attendance_employee_date ON "attendance"(employee_id, date);
4.2 请假申请表 (leave_request)
CREATE TABLE "leave_request" (
id SERIAL PRIMARY KEY,
employee_id INTEGER NOT NULL REFERENCES "employee"(id),
leave_type VARCHAR(20) NOT NULL CHECK (leave_type IN ('annual', 'sick', 'personal', 'maternity', 'paternity', 'bereavement', 'other')),
start_date DATE NOT NULL,
end_date DATE NOT NULL,
days_requested INTEGER NOT NULL,
reason TEXT,
status VARCHAR(20) DEFAULT 'pending' CHECK (status IN ('pending', 'approved', 'rejected', 'cancelled')),
approved_by INTEGER REFERENCES "employee"(id),
approved_at TIMESTAMP WITH TIME ZONE,
rejection_reason TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 索引
CREATE INDEX idx_leave_employee ON "leave_request"(employee_id);
CREATE INDEX idx_leave_type ON "leave_request"(leave_type);
CREATE INDEX idx_leave_status ON "leave_request"(status);
CREATE INDEX idx_leave_dates ON "leave_request"(start_date, end_date);
CREATE INDEX idx_leave_approver ON "leave_request"(approved_by);
4.3 加班申请表 (overtime)
CREATE TABLE "overtime" (
id SERIAL PRIMARY KEY,
employee_id INTEGER NOT NULL REFERENCES "employee"(id),
date DATE NOT NULL,
start_time TIME NOT NULL,
end_time TIME NOT NULL,
hours INTEGER NOT NULL, -- 以分钟为单位
reason TEXT,
status VARCHAR(20) DEFAULT 'pending' CHECK (status IN ('pending', 'approved', 'rejected')),
approved_by INTEGER REFERENCES "employee"(id),
approved_at TIMESTAMP WITH TIME ZONE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 索引
CREATE INDEX idx_overtime_employee ON "overtime"(employee_id);
CREATE INDEX idx_overtime_date ON "overtime"(date);
CREATE INDEX idx_overtime_status ON "overtime"(status);
CREATE INDEX idx_overtime_approver ON "overtime"(approved_by);
5. 招聘管理模块
5.1 招聘需求表 (recruitment_requirement)
CREATE TABLE "recruitment_requirement" (
id SERIAL PRIMARY KEY,
requirement_number VARCHAR(50) UNIQUE NOT NULL,
title VARCHAR(200) NOT NULL,
department_id INTEGER NOT NULL REFERENCES "department"(id),
position_id INTEGER NOT NULL REFERENCES "position"(id),
requested_by INTEGER NOT NULL REFERENCES "employee"(id),
headcount INTEGER NOT NULL DEFAULT 1,
current_headcount INTEGER DEFAULT 0,
max_headcount INTEGER NOT NULL,
level VARCHAR(20),
priority VARCHAR(20) DEFAULT 'medium' CHECK (priority IN ('low', 'medium', 'high', 'urgent')),
urgency VARCHAR(20) DEFAULT 'normal' CHECK (urgency IN ('normal', 'urgent', 'critical')),
status VARCHAR(20) DEFAULT 'pending' CHECK (status IN ('pending', 'approved', 'recruiting', 'completed', 'rejected')),
job_description TEXT,
requirements TEXT[],
skills TEXT[],
experience VARCHAR(100),
education VARCHAR(100),
salary_range VARCHAR(100),
location VARCHAR(200),
target_start_date DATE,
budget DECIMAL(12,2),
submitted_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
approved_by INTEGER REFERENCES "employee"(id),
approved_at TIMESTAMP WITH TIME ZONE,
rejection_reason TEXT,
recruitment_plan_id VARCHAR(100),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 索引
CREATE INDEX idx_recruitment_number ON "recruitment_requirement"(requirement_number);
CREATE INDEX idx_recruitment_department ON "recruitment_requirement"(department_id);
CREATE INDEX idx_recruitment_position ON "recruitment_requirement"(position_id);
CREATE INDEX idx_recruitment_status ON "recruitment_requirement"(status);
CREATE INDEX idx_recruitment_priority ON "recruitment_requirement"(priority);
CREATE INDEX idx_recruitment_requester ON "recruitment_requirement"(requested_by);
5.2 简历表 (resume)
CREATE TABLE "resume" (
id SERIAL PRIMARY KEY,
recruitment_requirement_id INTEGER NOT NULL REFERENCES "recruitment_requirement"(id),
candidate_name VARCHAR(100) NOT NULL,
candidate_email VARCHAR(100) NOT NULL,
candidate_phone VARCHAR(20),
resume_file_path VARCHAR(500),
status VARCHAR(20) DEFAULT 'pending' CHECK (status IN ('pending', 'screened', 'interviewing', 'hired', 'rejected')),
source VARCHAR(100),
experience_years INTEGER,
education_level VARCHAR(50),
current_salary DECIMAL(10,2),
expected_salary DECIMAL(10,2),
skills TEXT[],
notes TEXT,
submitted_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 索引
CREATE INDEX idx_resume_requirement ON "resume"(recruitment_requirement_id);
CREATE INDEX idx_resume_candidate ON "resume"(candidate_name);
CREATE INDEX idx_resume_status ON "resume"(status);
CREATE INDEX idx_resume_email ON "resume"(candidate_email);
5.3 面试表 (interview)
CREATE TABLE "interview" (
id SERIAL PRIMARY KEY,
resume_id INTEGER NOT NULL REFERENCES "resume"(id),
candidate_name VARCHAR(100),
interview_type VARCHAR(20) NOT NULL CHECK (interview_type IN ('first', 'second', 'final', 'hr')),
interviewer_id INTEGER NOT NULL REFERENCES "employee"(id),
interview_date DATE NOT NULL,
interview_time TIME NOT NULL,
location VARCHAR(200),
status VARCHAR(20) DEFAULT 'pending' CHECK (status IN ('pending', 'completed', 'cancelled')),
score INTEGER CHECK (score >= 0 AND score <= 100),
feedback TEXT,
recommendation VARCHAR(20) CHECK (recommendation IN ('pass', 'fail', 'pending')),
next_interview_date DATE,
notes TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 索引
CREATE INDEX idx_interview_resume ON "interview"(resume_id);
CREATE INDEX idx_interview_interviewer ON "interview"(interviewer_id);
CREATE INDEX idx_interview_date ON "interview"(interview_date);
CREATE INDEX idx_interview_status ON "interview"(status);
CREATE INDEX idx_interview_type ON "interview"(interview_type);
6. 入职离职模块
6.1 入职流程表 (onboarding_process)
CREATE TABLE "onboarding_process" (
id SERIAL PRIMARY KEY,
employee_id INTEGER NOT NULL REFERENCES "employee"(id),
start_date DATE NOT NULL,
expected_completion_date DATE,
actual_completion_date DATE,
status VARCHAR(20) DEFAULT 'pending' CHECK (status IN ('pending', 'in_progress', 'completed', 'delayed')),
progress INTEGER DEFAULT 0 CHECK (progress >= 0 AND progress <= 100),
assigned_mentor INTEGER REFERENCES "employee"(id),
mentor_email VARCHAR(100),
notes TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 索引
CREATE INDEX idx_onboarding_employee ON "onboarding_process"(employee_id);
CREATE INDEX idx_onboarding_status ON "onboarding_process"(status);
CREATE INDEX idx_onboarding_mentor ON "onboarding_process"(assigned_mentor);
6.2 入职任务表 (onboarding_task)
CREATE TABLE "onboarding_task" (
id SERIAL PRIMARY KEY,
process_id INTEGER NOT NULL REFERENCES "onboarding_process"(id) ON DELETE CASCADE,
name VARCHAR(200) NOT NULL,
description TEXT,
status VARCHAR(20) DEFAULT 'pending' CHECK (status IN ('pending', 'in_progress', 'completed', 'cancelled')),
category VARCHAR(50) NOT NULL,
assigned_to VARCHAR(100) NOT NULL,
due_date DATE,
completed_at TIMESTAMP WITH TIME ZONE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 索引
CREATE INDEX idx_task_process ON "onboarding_task"(process_id);
CREATE INDEX idx_task_status ON "onboarding_task"(status);
CREATE INDEX idx_task_category ON "onboarding_task"(category);
CREATE INDEX idx_task_assigned ON "onboarding_task"(assigned_to);
6.3 试用期记录表 (probation_record)
CREATE TABLE "probation_record" (
id SERIAL PRIMARY KEY,
employee_id INTEGER NOT NULL REFERENCES "employee"(id),
start_date DATE NOT NULL,
end_date DATE NOT NULL,
duration_months INTEGER NOT NULL,
status VARCHAR(20) DEFAULT 'active' CHECK (status IN ('active', 'extended', 'passed', 'failed', 'terminated')),
progress INTEGER DEFAULT 0 CHECK (progress >= 0 AND progress <= 100),
performance_score INTEGER CHECK (performance_score >= 0 AND performance_score <= 100),
manager_id INTEGER NOT NULL REFERENCES "employee"(id),
manager_email VARCHAR(100),
mentor_id INTEGER REFERENCES "employee"(id),
mentor_email VARCHAR(100),
evaluation_date DATE,
evaluation_notes TEXT,
decision VARCHAR(20) CHECK (decision IN ('pass', 'fail', 'extend')),
decision_date DATE,
notes TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 索引
CREATE INDEX idx_probation_employee ON "probation_record"(employee_id);
CREATE INDEX idx_probation_status ON "probation_record"(status);
CREATE INDEX idx_probation_manager ON "probation_record"(manager_id);
CREATE INDEX idx_probation_mentor ON "probation_record"(mentor_id);
7. 薪酬管理模块
7.1 薪资表 (payroll)
CREATE TABLE "payroll" (
id SERIAL PRIMARY KEY,
employee_id INTEGER NOT NULL REFERENCES "employee"(id),
pay_period_start DATE NOT NULL,
pay_period_end DATE NOT NULL,
base_salary DECIMAL(10,2) NOT NULL,
overtime_pay DECIMAL(10,2) DEFAULT 0,
bonus DECIMAL(10,2) DEFAULT 0,
allowance DECIMAL(10,2) DEFAULT 0,
social_insurance DECIMAL(10,2) DEFAULT 0,
housing_fund DECIMAL(10,2) DEFAULT 0,
income_tax DECIMAL(10,2) DEFAULT 0,
other_deductions DECIMAL(10,2) DEFAULT 0,
gross_salary DECIMAL(10,2) NOT NULL,
net_salary DECIMAL(10,2) NOT NULL,
currency VARCHAR(3) DEFAULT 'CNY',
status VARCHAR(20) DEFAULT 'pending' CHECK (status IN ('pending', 'approved', 'paid')),
paid_at TIMESTAMP WITH TIME ZONE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 索引
CREATE INDEX idx_payroll_employee ON "payroll"(employee_id);
CREATE INDEX idx_payroll_period ON "payroll"(pay_period_start, pay_period_end);
CREATE INDEX idx_payroll_status ON "payroll"(status);
7.2 福利表 (benefit)
CREATE TABLE "benefit" (
id SERIAL PRIMARY KEY,
employee_id INTEGER NOT NULL REFERENCES "employee"(id),
benefit_type VARCHAR(50) NOT NULL,
benefit_name VARCHAR(100) NOT NULL,
amount DECIMAL(10,2) NOT NULL,
currency VARCHAR(3) DEFAULT 'CNY',
start_date DATE NOT NULL,
end_date DATE,
status VARCHAR(20) DEFAULT 'active' CHECK (status IN ('active', 'inactive', 'expired')),
description TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 索引
CREATE INDEX idx_benefit_employee ON "benefit"(employee_id);
CREATE INDEX idx_benefit_type ON "benefit"(benefit_type);
CREATE INDEX idx_benefit_status ON "benefit"(status);
8. 绩效管理模块
8.1 绩效计划表 (performance_plan)
CREATE TABLE "performance_plan" (
id SERIAL PRIMARY KEY,
title VARCHAR(200) NOT NULL,
description TEXT,
period_start DATE NOT NULL,
period_end DATE NOT NULL,
status VARCHAR(20) DEFAULT 'draft' CHECK (status IN ('draft', 'active', 'completed', 'cancelled')),
created_by INTEGER NOT NULL REFERENCES "employee"(id),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 索引
CREATE INDEX idx_performance_plan_period ON "performance_plan"(period_start, period_end);
CREATE INDEX idx_performance_plan_status ON "performance_plan"(status);
CREATE INDEX idx_performance_plan_creator ON "performance_plan"(created_by);
8.2 绩效评估表 (performance_assessment)
CREATE TABLE "performance_assessment" (
id SERIAL PRIMARY KEY,
employee_id INTEGER NOT NULL REFERENCES "employee"(id),
plan_id INTEGER NOT NULL REFERENCES "performance_plan"(id),
assessor_id INTEGER NOT NULL REFERENCES "employee"(id),
assessment_type VARCHAR(20) NOT NULL CHECK (assessment_type IN ('self', 'manager', 'peer', '360')),
score INTEGER NOT NULL CHECK (score >= 0 AND score <= 100),
feedback TEXT,
strengths TEXT[],
improvements TEXT[],
recommendation VARCHAR(20) CHECK (recommendation IN ('excellent', 'good', 'satisfactory', 'needs_improvement')),
assessed_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 索引
CREATE INDEX idx_assessment_employee ON "performance_assessment"(employee_id);
CREATE INDEX idx_assessment_plan ON "performance_assessment"(plan_id);
CREATE INDEX idx_assessment_assessor ON "performance_assessment"(assessor_id);
CREATE INDEX idx_assessment_type ON "performance_assessment"(assessment_type);
9. 培训管理模块
9.1 培训计划表 (training_plan)
CREATE TABLE "training_plan" (
id SERIAL PRIMARY KEY,
title VARCHAR(200) NOT NULL,
description TEXT,
training_type VARCHAR(50) NOT NULL,
target_audience VARCHAR(100),
start_date DATE NOT NULL,
end_date DATE NOT NULL,
duration_hours INTEGER,
location VARCHAR(200),
instructor VARCHAR(100),
max_participants INTEGER,
status VARCHAR(20) DEFAULT 'planned' CHECK (status IN ('planned', 'ongoing', 'completed', 'cancelled')),
created_by INTEGER NOT NULL REFERENCES "employee"(id),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 索引
CREATE INDEX idx_training_plan_dates ON "training_plan"(start_date, end_date);
CREATE INDEX idx_training_plan_status ON "training_plan"(status);
CREATE INDEX idx_training_plan_type ON "training_plan"(training_type);
9.2 培训记录表 (training_record)
CREATE TABLE "training_record" (
id SERIAL PRIMARY KEY,
employee_id INTEGER NOT NULL REFERENCES "employee"(id),
plan_id INTEGER NOT NULL REFERENCES "training_plan"(id),
enrollment_date DATE NOT NULL,
completion_date DATE,
score INTEGER CHECK (score >= 0 AND score <= 100),
status VARCHAR(20) DEFAULT 'enrolled' CHECK (status IN ('enrolled', 'in_progress', 'completed', 'dropped')),
feedback TEXT,
certificate_url VARCHAR(500),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 索引
CREATE INDEX idx_training_record_employee ON "training_record"(employee_id);
CREATE INDEX idx_training_record_plan ON "training_record"(plan_id);
CREATE INDEX idx_training_record_status ON "training_record"(status);
10. 系统管理模块
10.1 系统配置表 (system_config)
CREATE TABLE "system_config" (
id SERIAL PRIMARY KEY,
config_key VARCHAR(100) UNIQUE NOT NULL,
config_value TEXT NOT NULL,
config_type VARCHAR(20) DEFAULT 'string' CHECK (config_type IN ('string', 'number', 'boolean', 'json')),
description TEXT,
is_system BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE
);
-- 索引
CREATE INDEX idx_config_key ON "system_config"(config_key);
CREATE INDEX idx_config_system ON "system_config"(is_system);
10.2 操作日志表 (audit_log)
CREATE TABLE "audit_log" (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES "user"(id),
action VARCHAR(100) NOT NULL,
resource_type VARCHAR(50) NOT NULL,
resource_id INTEGER,
old_values JSONB,
new_values JSONB,
ip_address INET,
user_agent TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- 索引
CREATE INDEX idx_audit_user ON "audit_log"(user_id);
CREATE INDEX idx_audit_action ON "audit_log"(action);
CREATE INDEX idx_audit_resource ON "audit_log"(resource_type, resource_id);
CREATE INDEX idx_audit_created ON "audit_log"(created_at);
数据库关系图
1. 核心实体关系图 (Core Entities)
erDiagram User { int id PK string username string email string full_name string role int department_id FK int position_id FK boolean is_active } Employee { int id PK string employee_id int user_id FK string name int department_id FK int position_id FK int manager_id FK date hire_date string employment_status boolean is_active } Department { int id PK string name string code int parent_id FK int manager_id FK int level boolean is_active } Position { int id PK string title string code int department_id FK string level string category boolean is_active } User ||--o| Employee : "has profile" User }o--|| Department : "belongs to" User }o--|| Position : "has position" Employee }o--|| Department : "belongs to" Employee }o--|| Position : "has position" Employee ||--o{ Employee : "manages" Department ||--o{ Department : "parent-child" Department ||--o{ Position : "contains"
2. 考勤管理关系图 (Attendance Management)
erDiagram Employee { int id PK string employee_id string name int department_id FK int position_id FK string employment_status } Attendance { int id PK int employee_id FK date date time check_in_time time check_out_time string status } LeaveRequest { int id PK int employee_id FK string leave_type date start_date date end_date string status int approved_by FK } OvertimeRequest { int id PK int employee_id FK date date time start_time time end_time string reason string status int approved_by FK } Employee ||--o{ Attendance : "has records" Employee ||--o{ LeaveRequest : "requests" Employee ||--o{ LeaveRequest : "approves" Employee ||--o{ OvertimeRequest : "requests" Employee ||--o{ OvertimeRequest : "approves"
3. 招聘管理关系图 (Recruitment Management)
erDiagram Department { int id PK string name string code } Position { int id PK string title string code int department_id FK } Employee { int id PK string name int department_id FK } RecruitmentRequirement { int id PK string requirement_number string title int department_id FK int position_id FK int requested_by FK string status } Resume { int id PK int recruitment_requirement_id FK string candidate_name string candidate_email string status } Interview { int id PK int resume_id FK string interview_type int interviewer_id FK date interview_date string status } Department ||--o{ RecruitmentRequirement : "for" Position ||--o{ RecruitmentRequirement : "for" Employee ||--o{ RecruitmentRequirement : "requests" RecruitmentRequirement ||--o{ Resume : "receives" Resume ||--o{ Interview : "scheduled" Employee ||--o{ Interview : "conducts"
4. 入职离职关系图 (Onboarding & Exit Management)
erDiagram Employee { int id PK string employee_id string name int department_id FK int position_id FK } OnboardingProcess { int id PK int employee_id FK date start_date string status int assigned_mentor FK } ProbationPeriod { int id PK int employee_id FK date start_date date end_date string status int evaluator_id FK } ExitProcess { int id PK int employee_id FK date exit_date string reason string status int approved_by FK } Employee ||--o| OnboardingProcess : "has" Employee ||--o| ProbationPeriod : "has" Employee ||--o| ExitProcess : "has" Employee ||--o{ OnboardingProcess : "mentors" Employee ||--o{ ProbationPeriod : "evaluates" Employee ||--o{ ExitProcess : "approves"
5. 薪酬绩效关系图 (Payroll & Performance Management)
erDiagram Employee { int id PK string employee_id string name int department_id FK int position_id FK } Payroll { int id PK int employee_id FK date pay_period_start date pay_period_end decimal base_salary decimal net_salary string status } PerformancePlan { int id PK string title date period_start date period_end string status int created_by FK } PerformanceAssessment { int id PK int employee_id FK int plan_id FK string assessment_type decimal score string status int assessor_id FK } TrainingPlan { int id PK string title string training_type date start_date date end_date string status int created_by FK } Employee ||--o{ Payroll : "receives" Employee ||--o{ PerformancePlan : "created by" Employee ||--o{ PerformanceAssessment : "assessed" Employee ||--o{ TrainingPlan : "created by" PerformancePlan ||--o{ PerformanceAssessment : "includes"
6. 完整系统关系图
erDiagram User { int id PK string username string email string full_name string role int department_id FK int position_id FK boolean is_active } Employee { int id PK string employee_id int user_id FK string name int department_id FK int position_id FK int manager_id FK date hire_date string employment_status boolean is_active } Department { int id PK string name string code int parent_id FK int manager_id FK int level boolean is_active } Position { int id PK string title string code int department_id FK string level string category boolean is_active } Attendance { int id PK int employee_id FK date date time check_in_time time check_out_time string status } LeaveRequest { int id PK int employee_id FK string leave_type date start_date date end_date string status int approved_by FK } OvertimeRequest { int id PK int employee_id FK date date time start_time time end_time string reason string status int approved_by FK } RecruitmentRequirement { int id PK string requirement_number string title int department_id FK int position_id FK int requested_by FK string status } Resume { int id PK int recruitment_requirement_id FK string candidate_name string candidate_email string status } Interview { int id PK int resume_id FK string interview_type int interviewer_id FK date interview_date string status } OnboardingProcess { int id PK int employee_id FK date start_date string status int assigned_mentor FK } ProbationPeriod { int id PK int employee_id FK date start_date date end_date string status int evaluator_id FK } ExitProcess { int id PK int employee_id FK date exit_date string reason string status int approved_by FK } Payroll { int id PK int employee_id FK date pay_period_start date pay_period_end decimal base_salary decimal net_salary string status } PerformancePlan { int id PK string title date period_start date period_end string status int created_by FK } PerformanceAssessment { int id PK int employee_id FK int plan_id FK string assessment_type decimal score string status int assessor_id FK } TrainingPlan { int id PK string title string training_type date start_date date end_date string status int created_by FK } User ||--o| Employee : "has profile" User }o--|| Department : "belongs to" User }o--|| Position : "has position" Employee }o--|| Department : "belongs to" Employee }o--|| Position : "has position" Employee ||--o{ Employee : "manages" Department ||--o{ Department : "parent-child" Department ||--o{ Position : "contains" Employee ||--o{ Attendance : "has records" Employee ||--o{ LeaveRequest : "requests" Employee ||--o{ LeaveRequest : "approves" Employee ||--o{ OvertimeRequest : "requests" Employee ||--o{ OvertimeRequest : "approves" Employee ||--o{ RecruitmentRequirement : "requests" Department ||--o{ RecruitmentRequirement : "for" Position ||--o{ RecruitmentRequirement : "for" RecruitmentRequirement ||--o{ Resume : "receives" Resume ||--o{ Interview : "scheduled" Employee ||--o{ Interview : "conducts" Employee ||--o| OnboardingProcess : "has" Employee ||--o| ProbationPeriod : "has" Employee ||--o| ExitProcess : "has" Employee ||--o{ OnboardingProcess : "mentors" Employee ||--o{ ProbationPeriod : "evaluates" Employee ||--o{ ExitProcess : "approves" Employee ||--o{ Payroll : "receives" Employee ||--o{ PerformancePlan : "created by" Employee ||--o{ PerformanceAssessment : "assessed" Employee ||--o{ TrainingPlan : "created by" PerformancePlan ||--o{ PerformanceAssessment : "includes"
索引策略
1. 主键索引
- 所有表的主键自动创建唯一索引
- 支持快速主键查询和关联查询
2. 外键索引
- 所有外键字段创建索引
- 支持快速关联查询和级联操作
3. 业务索引
- 用户表: username, email, role, department_id, is_active
- 员工表: employee_id, user_id, department_id, position_id, manager_id, employment_status, hire_date
- 部门表: code, parent_id, manager_id, level, is_active
- 考勤表: employee_id, date, status
- 请假表: employee_id, leave_type, status, start_date, end_date
- 招聘表: requirement_number, department_id, position_id, status, priority
4. 复合索引
- 考勤表: (employee_id, date) - 唯一约束
- 薪资表: (employee_id, pay_period_start, pay_period_end)
- 绩效表: (employee_id, plan_id, assessment_type)
数据完整性约束
1. 实体完整性
- 所有表都有主键约束
- 主键值唯一且非空
2. 参照完整性
- 外键约束确保数据关联正确性
- 级联删除和更新策略
- 防止孤立记录
3. 域完整性
- 数据类型约束
- 长度限制约束
- 取值范围约束
- 非空约束
4. 业务完整性
- 检查约束确保业务规则
- 唯一约束防止重复数据
- 默认值设置
性能优化策略
1. 查询优化
- 合理使用索引
- 避免全表扫描
- 优化复杂查询
- 使用查询计划分析
2. 分区策略
- 大表按时间分区
- 考勤表按月分区
- 日志表按年分区
3. 缓存策略
- 热点数据缓存
- 查询结果缓存
- 统计数据缓存
4. 连接池
- 数据库连接池
- 连接复用
- 连接超时设置
安全设计
1. 数据加密
- 敏感字段加密存储
- 密码哈希存储
- 传输加密
2. 访问控制
- 基于角色的数据访问
- 行级安全策略
- 列级权限控制
3. 审计日志
- 完整的数据操作日志
- 用户行为跟踪
- 安全事件记录
4. 备份恢复
- 定期数据备份
- 增量备份策略
- 快速恢复机制
数据迁移策略
1. 版本控制
- 使用Alembic进行版本控制
- 增量迁移脚本
- 回滚机制
2. 数据迁移
- 数据格式转换
- 数据清洗和验证
- 数据完整性检查
3. 测试验证
- 迁移前数据备份
- 迁移后数据验证
- 性能测试
监控和维护
1. 性能监控
- 查询性能监控
- 索引使用情况
- 连接数监控
2. 空间监控
- 数据库大小监控
- 表空间使用情况
- 日志文件大小
3. 维护任务
- 定期统计信息更新
- 索引重建
- 数据清理
总结
本数据库设计遵循第三范式,确保数据完整性、一致性和可扩展性。设计支持完整的HR业务流程,包括用户管理、员工管理、组织架构、考勤管理、招聘管理、薪酬管理等核心功能模块。
数据库设计具有以下特点:
- 完整性: 完整的数据模型设计,支持所有业务功能
- 性能: 合理的索引策略和查询优化
- 安全: 多层次的安全保障机制
- 扩展性: 支持功能扩展和性能扩展
- 可维护性: 清晰的表结构和关系设计
- 标准化: 遵循数据库设计标准和最佳实践
该数据库设计为HR管理系统提供了坚实的数据基础,能够满足企业级应用的各种需求。
更新日志
2025-10-18
前端
- 新增
考勤管理
页面并对接API考勤记录
休假管理
加班管理
- 新增
培训发展
页面并对接API培训需求
培训计划
后端
- 新增考勤相关接口
- 新增培训相关接口
2025-09-28
前端
招聘管理
前端页面API对接
后端
- 新增
招聘管理
相关模块:招聘需求管理
简历管理
面试管理
招聘分析
2025-09-20
前端
入职管理
页面及相关功能对接API
- 创建对话框
创建入职流程
并对接API
- 创建对话框
发送入职指引
,接口WIP
- 创建页面
流程跟踪
试用期管理
页面及相关功能对接API
- 创建对话框
创建试用期评估
并对接API
- 创建对话框
办理转正
并对接API
离职管理
页面及相关功能对接API
- 创建对话框
办理离职
并对接API
- 创建对话框
离职审批
并对接API
离职管理
页面新增工作交接
列表及简单统计- 创建对话框
工作交接
并对接API
- 重构页面
仪表盘
档案查询
页面对接API
员工状态
页面对接API
后端
- 实现接口
入职管理
列表 - 实现接口
入职流程
- 实现接口
流程跟踪
- 实现接口
试用期管理
列表 - 实现接口
试用期评估
- 实现接口
试用期转正
- 实现接口
试用期辞退
- 实现接口
离职管理
列表 - 实现接口
办理离职
- 实现接口
离职审批
- 实现接口
工作交接
- 实现接口
员工状态
- 重构接口
仪表盘
- 重构
档案管理
相关接口 - 优化
部门
相关接口 - 优化
岗位
相关接口 - 优化
员工档案
相关接口
2025-09-12
前端
- 实现
shadcn
主题系统和主题选择器 - 支持深色/浅色模式切换
- 为岗位列表页面添加网格/列表视图切换
- 为部门列表页面添加网格/列表视图切换
- 为员工档案详情页添加详细/简洁/简历视图切换
- 新增员工档案简洁视图详情页
- 新增员工档案简历视图详情页
- 实现员工列表分页功能,支持页面大小调整
- 添加全局搜索功能,支持跨页面搜索员工信息
- 实现员工编辑功能,包括对话框编辑和独立编辑页面
- 添加员工创建和编辑表单验证
- 实现完整的JWT认证流程
- 创建登录页面,支持用户名/密码认证
- 部门/岗位/员工档案
crud
对接后端接口
后端
- 接口实现:
- 部门
- 岗位
- 员工档案
- 认证/授权
- 实现完整的
JWT
用户认证和授权 - 添加用户登录、token验证、权限检查功能
- 添加员工/岗位/部门CRUD操作和权限管理:
- 员工/岗位/部门模型扩展字段,更新外键、约束
- 创建样本数据生成脚本,生成部门、岗位、员工档案