53 KiB
53 KiB
财务项目预算审批系统产品需求分析书
文档版本: 1.0
创建时间: 2025-01-26
创建人员: 产品需求分析师
项目模块: 财务管理 - 项目预算审批
所属系统: 校园管理系统 (hzdyjs_xg)
📋 目录
1. 需求概述
1.1 项目背景
为了规范校园项目预算管理,提高财务审批效率,降低管理成本,需要开发一套完整的项目预算审批系统。该系统将实现从预算申报、审批流程配置、审批执行到统计汇总的全流程数字化管理。
1.2 目标用户
- 项目负责人: 发起项目预算申报
- 财务管理员: 配置审批流程,管理预算数据
- 审批人员: 执行预算审批操作
- 系统管理员: 系统配置和维护
- 领导层: 查看统计汇总报表
1.3 系统目标
1.3.1 业务目标
- ✅ 提升效率: 数字化审批流程,减少纸质流转时间
- ✅ 规范管理: 标准化预算申报和审批流程
- ✅ 透明可控: 审批进度实时可查,过程可追溯
- ✅ 数据驱动: 自动统计分析,支持决策制定
1.3.2 技术目标
- ✅ 高可用: 7x24小时稳定运行
- ✅ 易扩展: 支持审批流程灵活配置
- ✅ 数据安全: 完整的权限控制和数据备份
- ✅ 用户友好: 操作简单,界面美观
1.4 核心功能概览
| 功能模块 | 主要功能 | 优先级 |
|---|---|---|
| 🔧 审批配置 | 自定义审批流程、节点配置、审批人设置 | P0 |
| 📝 预算发起 | 项目预算申报、表单填写、提交审批 | P0 |
| ⚖️ 审批管理 | 审批执行、流程跟踪、状态管理 | P0 |
| 📊 统计汇总 | 数据统计、报表生成、导出功能 | P1 |
2. 功能模块设计
2.1 核心功能模块
📋 预算申报管理
- ✅ 项目预算申报表单(基于详细申请表填报内容)
- ✅ 申报信息维护和修改
- ✅ 申报状态跟踪
👥 审批人配置管理
- ✅ 审批节点配置(部门审批 → 财务审批 → 领导审批)
- ✅ 审批人灵活指定和变更
- ✅ 审批人权限管理
- ✅ 代理审批人设置
🔄 审批流程管理
- ✅ 项目预算审批流程(固定3节点流程)
- ✅ 审批操作(通过/拒绝/退回)
- ✅ 审批意见记录
- ✅ 流程进度跟踪
📊 统计分析管理
- ✅ 申报数据统计
- ✅ 审批效率分析
- ✅ 预算金额统计
- ✅ 导出功能
2.2 审批人配置管理详细设计
🎯 固定3节点审批流程
项目预算审批采用固定的3节点流程,简单清晰:
申请人提交 → 部门审批 → 财务审批 → 领导审批 → 流程结束
👥 审批人配置功能
A. 审批人指定方式
- ✅ 固定审批人: 为每个节点指定固定的审批人员
- ✅ 按部门配置: 不同部门配置不同的审批人
- ✅ 按金额配置: 根据预算金额阈值自动选择审批级别
B. 灵活变更功能
- ✅ 实时变更: 支持流程进行中变更审批人
- ✅ 批量调整: 支持批量修改审批人配置
- ✅ 临时代理: 支持设置临时代理审批人
- ✅ 变更记录: 完整记录审批人变更历史
C. 配置界面设计
<!-- 审批人配置页面 -->
<template>
<div class="approver-config">
<el-card>
<template #header>
<span>项目预算审批人配置</span>
</template>
<!-- 全局配置 -->
<el-form label-width="120px">
<el-form-item label="部门审批人">
<el-select v-model="config.deptApprover" placeholder="选择部门审批人">
<el-option v-for="user in deptUsers" :key="user.id" :label="user.name" :value="user.id" />
</el-select>
<el-button @click="setDeptDelegate">设置代理</el-button>
</el-form-item>
<el-form-item label="财务审批人">
<el-select v-model="config.financeApprover" placeholder="选择财务审批人">
<el-option v-for="user in financeUsers" :key="user.id" :label="user.name" :value="user.id" />
</el-select>
<el-button @click="setFinanceDelegate">设置代理</el-button>
</el-form-item>
<el-form-item label="领导审批人">
<el-select v-model="config.leaderApprover" placeholder="选择领导审批人">
<el-option v-for="user in leaderUsers" :key="user.id" :label="user.name" :value="user.id" />
</el-select>
<el-button @click="setLeaderDelegate">设置代理</el-button>
</el-form-item>
</el-form>
<!-- 按部门配置 -->
<el-divider content-position="left">按部门配置</el-divider>
<el-table :data="deptConfigs">
<el-table-column prop="deptName" label="部门名称" />
<el-table-column prop="deptApprover" label="部门审批人" />
<el-table-column prop="financeApprover" label="财务审批人" />
<el-table-column prop="leaderApprover" label="领导审批人" />
<el-table-column label="操作">
<template #default="scope">
<el-button @click="editDeptConfig(scope.row)">编辑</el-button>
</template>
</el-table-column>
</el-table>
<!-- 按金额配置 -->
<el-divider content-position="left">按金额配置</el-divider>
<el-table :data="amountConfigs">
<el-table-column prop="minAmount" label="最小金额(万元)" />
<el-table-column prop="maxAmount" label="最大金额(万元)" />
<el-table-column prop="approvalLevel" label="审批级别" />
<el-table-column prop="approvers" label="审批人" />
<el-table-column label="操作">
<template #default="scope">
<el-button @click="editAmountConfig(scope.row)">编辑</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
</div>
</template>
2.3 简单审批流程管理
🔄 3节点固定流程
// 固定审批流程定义
const APPROVAL_WORKFLOW = {
nodes: [
{
id: 1,
name: "部门审批",
code: "DEPT_APPROVE",
description: "部门负责人审批",
required: true
},
{
id: 2,
name: "财务审批",
code: "FINANCE_APPROVE",
description: "财务部门审批",
required: true
},
{
id: 3,
name: "领导审批",
code: "LEADER_APPROVE",
description: "校领导审批",
required: true
}
],
flow: "sequential" // 串行审批
};
⚖️ 审批操作
// 审批操作类型
const APPROVAL_ACTIONS = {
APPROVE: "approve", // 通过
REJECT: "reject", // 拒绝
RETURN: "return" // 退回
};
// 审批结果状态
const APPROVAL_STATUS = {
DRAFT: "draft", // 草稿
SUBMITTED: "submitted", // 已提交
APPROVING: "approving", // 审批中
APPROVED: "approved", // 已通过
REJECTED: "rejected", // 已拒绝
RETURNED: "returned" // 已退回
};
2.4 预算申报表单设计
📝 6步申报流程
基于用户提供的详细申请表填报内容,设计简化的6步申报流程:
步骤1:基本信息
- 项目名称、项目负责人、联系电话
- 项目实施时间(开始、结束日期)
- 项目特性(面向中小企业、小微企业、采购进口设备)
步骤2:项目内容
- 项目申请原因(设立依据、可行性、必要性)
- 项目建设内容
- 绩效总目标、当年绩效目标
步骤3:资金情况
- 4维度资金来源明细(总投资、年度执行、下年申请、以后安排)
- 支出明细及测算
步骤4:绩效指标
- 8维度绩效指标体系配置
步骤5:支撑材料
- 文档上传
步骤6:确认提交
- 信息确认和提交
3. 业务流程设计
3.1 审批流程配置流程
graph TD
A[开始] --> B[选择审批模板类型]
B --> C[设置基本信息]
C --> D[配置审批节点]
D --> E[设置审批人员]
E --> F{审批人类型}
F -->|固定审批人| G[选择具体人员]
F -->|自选审批人| H[设置可选范围]
F -->|角色审批| I[配置角色权限]
G --> J[设置节点规则]
H --> J
I --> J
J --> K[流程预览验证]
K --> L{验证通过?}
L -->|否| D
L -->|是| M[保存模板]
M --> N[结束]
3.2 项目预算申报流程
graph TD
A[项目负责人登录] --> B[创建预算申报]
B --> C[填写项目基本信息]
C --> D[录入预算明细]
D --> E[上传支撑材料]
E --> F[选择审批流程]
F --> G{审批人类型}
G -->|自选审批人| H[选择审批人员]
G -->|固定/角色审批| I[系统自动分配]
H --> J[确认申报信息]
I --> J
J --> K[提交审批]
K --> L[发送审批通知]
L --> M[等待审批]
M --> N[结束]
3.3 审批执行流程
graph TD
A[收到审批通知] --> B[查看申报详情]
B --> C[审核项目信息]
C --> D[审核预算合理性]
D --> E[查看支撑材料]
E --> F{审批决策}
F -->|通过| G[填写审批意见]
F -->|拒绝| H[填写拒绝原因]
F -->|退回修改| I[填写修改要求]
G --> J{是否最后节点?}
J -->|是| K[审批完成]
J -->|否| L[流转下一节点]
H --> M[审批终止]
I --> N[退回申请人]
K --> O[发送结果通知]
L --> O
M --> O
N --> O
O --> P[结束]
4. 数据库设计
4.1 核心数据表设计
4.1.1 审批流程配置表
-- 审批流程模板表
CREATE TABLE `budget_approval_template` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`template_name` varchar(100) NOT NULL COMMENT '模板名称',
`template_code` varchar(50) NOT NULL COMMENT '模板编码',
`template_type` char(1) NOT NULL COMMENT '模板类型(1-部门级 2-校级 3-重大项目 4-紧急项目)',
`description` varchar(500) COMMENT '模板描述',
`min_amount` decimal(15,2) COMMENT '最小金额',
`max_amount` decimal(15,2) COMMENT '最大金额',
`status` char(1) DEFAULT '1' COMMENT '状态(0-禁用 1-启用)',
`sort_order` int(11) DEFAULT 0 COMMENT '排序',
`remark` varchar(500) COMMENT '备注',
`create_by` bigint(20) COMMENT '创建者',
`create_time` datetime COMMENT '创建时间',
`update_by` bigint(20) COMMENT '更新者',
`update_time` datetime COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户ID',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_template_code` (`template_code`, `tenant_id`, `deleted`)
) ENGINE=InnoDB COMMENT='预算审批流程模板表';
-- 审批节点配置表
CREATE TABLE `budget_approval_node` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`template_id` bigint(20) NOT NULL COMMENT '模板ID',
`node_name` varchar(100) NOT NULL COMMENT '节点名称',
`node_code` varchar(50) NOT NULL COMMENT '节点编码',
`node_order` int(11) NOT NULL COMMENT '节点顺序',
`node_type` char(1) NOT NULL COMMENT '节点类型(1-串行 2-并行)',
`approver_type` char(1) NOT NULL COMMENT '审批人类型(1-固定人员 2-自选人员 3-角色审批 4-上级审批)',
`approver_config` text COMMENT '审批人配置(JSON格式)',
`timeout_hours` int(11) DEFAULT 72 COMMENT '超时时间(小时)',
`auto_approve` tinyint(1) DEFAULT 0 COMMENT '超时自动通过',
`required` tinyint(1) DEFAULT 1 COMMENT '是否必需节点',
`create_by` bigint(20) COMMENT '创建者',
`create_time` datetime COMMENT '创建时间',
`update_by` bigint(20) COMMENT '更新者',
`update_time` datetime COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户ID',
PRIMARY KEY (`id`),
KEY `idx_template_id` (`template_id`)
) ENGINE=InnoDB COMMENT='预算审批节点配置表';
4.1.2 项目预算申报表(基于详细申请表填报内容设计)
-- 项目预算申报表(基于详细申请表填报内容设计)
CREATE TABLE `budget_project_application` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`application_no` varchar(50) NOT NULL COMMENT '申报编号',
-- 项目基本信息
`project_name` varchar(200) NOT NULL COMMENT '项目名称',
`principal` varchar(50) NOT NULL COMMENT '项目负责人',
`contact_phone` varchar(20) COMMENT '联系电话',
`start_date` date COMMENT '项目实施开始时间',
`end_date` date COMMENT '项目实施结束时间',
-- 项目特性
`target_sme` tinyint(1) DEFAULT 0 COMMENT '是否面向中小企业(0-否 1-是)',
`target_micro_sme` tinyint(1) DEFAULT 0 COMMENT '是否面向小微企业(0-否 1-是)',
`import_equipment` tinyint(1) DEFAULT 0 COMMENT '是否采购进口设备(0-否 1-是)',
-- 项目详细内容
`application_reason` text COMMENT '项目申请原因(包括设立依据、可行性及必要性)',
`construction_content` text COMMENT '项目建设内容',
`total_performance_goal` text COMMENT '绩效总目标',
`current_year_goal` text COMMENT '当年绩效目标',
-- 资金来源汇总(万元)
`total_investment` decimal(15,2) COMMENT '项目总投资-合计',
`total_municipal_fiscal` decimal(15,2) COMMENT '项目总投资-市财政资金',
`total_self_funding` decimal(15,2) COMMENT '项目总投资-单位自筹',
`total_other_funding` decimal(15,2) COMMENT '项目总投资-其他',
`current_year_total` decimal(15,2) COMMENT '年度预计执行数-合计',
`current_year_municipal` decimal(15,2) COMMENT '年度预计执行数-市财政资金',
`current_year_self` decimal(15,2) COMMENT '年度预计执行数-单位自筹',
`current_year_other` decimal(15,2) COMMENT '年度预计执行数-其他',
`next_year_total` decimal(15,2) COMMENT '下年度申请资金-合计',
`next_year_municipal` decimal(15,2) COMMENT '下年度申请资金-市财政资金',
`next_year_self` decimal(15,2) COMMENT '下年度申请资金-单位自筹',
`next_year_other` decimal(15,2) COMMENT '下年度申请资金-其他',
`future_year_total` decimal(15,2) COMMENT '以后年度安排-合计',
`future_year_municipal` decimal(15,2) COMMENT '以后年度安排-市财政资金',
`future_year_self` decimal(15,2) COMMENT '以后年度安排-单位自筹',
`future_year_other` decimal(15,2) COMMENT '以后年度安排-其他',
-- 申请人信息
`applicant_id` bigint(20) NOT NULL COMMENT '申请人ID',
`applicant_name` varchar(50) NOT NULL COMMENT '申请人姓名',
`department_id` bigint(20) NOT NULL COMMENT '所属部门ID',
`department_name` varchar(100) NOT NULL COMMENT '所属部门名称',
-- 审批相关
`template_id` bigint(20) COMMENT '审批模板ID',
`approval_status` char(1) DEFAULT '1' COMMENT '审批状态(1-草稿 2-已提交 3-审批中 4-已通过 5-已拒绝 6-已退回 7-已取消)',
`submit_time` datetime COMMENT '提交时间',
`approve_time` datetime COMMENT '审批完成时间',
`year` int(11) NOT NULL COMMENT '预算年度',
-- 系统字段
`remark` varchar(500) COMMENT '备注',
`create_by` bigint(20) COMMENT '创建者',
`create_time` datetime COMMENT '创建时间',
`update_by` bigint(20) COMMENT '更新者',
`update_time` datetime COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户ID',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_application_no` (`application_no`, `tenant_id`, `deleted`),
KEY `idx_applicant_id` (`applicant_id`),
KEY `idx_department_id` (`department_id`),
KEY `idx_status_year` (`approval_status`, `year`)
) ENGINE=InnoDB COMMENT='项目预算申报表';
-- 项目支出明细表(预算资金测算)
CREATE TABLE `budget_expenditure_detail` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`application_id` bigint(20) NOT NULL COMMENT '申报ID',
`category` varchar(100) NOT NULL COMMENT '支出科目',
`amount` decimal(15,2) NOT NULL COMMENT '金额(万元)',
`calculation` text COMMENT '测算依据',
`description` varchar(500) COMMENT '详细说明',
`sort_order` int(11) DEFAULT 0 COMMENT '排序',
`create_by` bigint(20) COMMENT '创建者',
`create_time` datetime COMMENT '创建时间',
`update_by` bigint(20) COMMENT '更新者',
`update_time` datetime COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户ID',
PRIMARY KEY (`id`),
KEY `idx_application_id` (`application_id`)
) ENGINE=InnoDB COMMENT='项目支出明细表';
-- 绩效指标表
CREATE TABLE `budget_performance_indicator` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`application_id` bigint(20) NOT NULL COMMENT '申报ID',
`indicator_type` varchar(20) NOT NULL COMMENT '指标类型(quantity-数量 quality-质量 timeliness-时效 cost-成本 economic-经济效益 social-社会效益 environmental-环境效益 satisfaction-满意度)',
`goal_name` varchar(200) NOT NULL COMMENT '绩效目标名称',
`target_value` varchar(100) NOT NULL COMMENT '目标值',
`weight_percentage` decimal(5,2) NOT NULL COMMENT '分值占比(%)',
`description` varchar(500) COMMENT '详细说明',
`sort_order` int(11) DEFAULT 0 COMMENT '排序',
`create_by` bigint(20) COMMENT '创建者',
`create_time` datetime COMMENT '创建时间',
`update_by` bigint(20) COMMENT '更新者',
`update_time` datetime COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户ID',
PRIMARY KEY (`id`),
KEY `idx_application_id` (`application_id`),
KEY `idx_indicator_type` (`indicator_type`)
) ENGINE=InnoDB COMMENT='绩效指标表';
4.1.3 简化审批配置表
-- 审批人配置表(简化版)
CREATE TABLE `budget_approver_config` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`config_type` varchar(20) NOT NULL COMMENT '配置类型(global-全局 dept-部门 amount-金额)',
`dept_id` bigint(20) COMMENT '部门ID(按部门配置时使用)',
`min_amount` decimal(15,2) COMMENT '最小金额(按金额配置时使用)',
`max_amount` decimal(15,2) COMMENT '最大金额(按金额配置时使用)',
-- 3个固定审批节点的审批人
`dept_approver_id` bigint(20) COMMENT '部门审批人ID',
`dept_approver_name` varchar(50) COMMENT '部门审批人姓名',
`finance_approver_id` bigint(20) COMMENT '财务审批人ID',
`finance_approver_name` varchar(50) COMMENT '财务审批人姓名',
`leader_approver_id` bigint(20) COMMENT '领导审批人ID',
`leader_approver_name` varchar(50) COMMENT '领导审批人姓名',
-- 代理人设置
`dept_delegate_id` bigint(20) COMMENT '部门代理审批人ID',
`dept_delegate_name` varchar(50) COMMENT '部门代理审批人姓名',
`finance_delegate_id` bigint(20) COMMENT '财务代理审批人ID',
`finance_delegate_name` varchar(50) COMMENT '财务代理审批人姓名',
`leader_delegate_id` bigint(20) COMMENT '领导代理审批人ID',
`leader_delegate_name` varchar(50) COMMENT '领导代理审批人姓名',
`status` char(1) DEFAULT '1' COMMENT '状态(0-禁用 1-启用)',
`remark` varchar(500) COMMENT '备注',
`create_by` bigint(20) COMMENT '创建者',
`create_time` datetime COMMENT '创建时间',
`update_by` bigint(20) COMMENT '更新者',
`update_time` datetime COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户ID',
PRIMARY KEY (`id`),
KEY `idx_config_type` (`config_type`),
KEY `idx_dept_id` (`dept_id`),
KEY `idx_amount_range` (`min_amount`, `max_amount`)
) ENGINE=InnoDB COMMENT='审批人配置表';
-- 简化审批记录表
CREATE TABLE `budget_approval_record` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`application_id` bigint(20) NOT NULL COMMENT '申报ID',
`node_code` varchar(20) NOT NULL COMMENT '节点编码(dept_approve-部门审批 finance_approve-财务审批 leader_approve-领导审批)',
`node_name` varchar(50) NOT NULL COMMENT '节点名称',
`node_order` int(11) NOT NULL COMMENT '节点顺序(1-部门审批 2-财务审批 3-领导审批)',
`approver_id` bigint(20) NOT NULL COMMENT '审批人ID',
`approver_name` varchar(50) NOT NULL COMMENT '审批人姓名',
`node_status` varchar(20) NOT NULL COMMENT '节点状态(waiting-等待 approving-审批中 approved-已通过 rejected-已拒绝)',
`approve_action` varchar(20) COMMENT '审批动作(approve-通过 reject-拒绝 return-退回)',
`approve_opinion` text COMMENT '审批意见',
`start_time` datetime NOT NULL COMMENT '节点开始时间',
`end_time` datetime COMMENT '节点结束时间',
`create_by` bigint(20) COMMENT '创建者',
`create_time` datetime COMMENT '创建时间',
`update_by` bigint(20) COMMENT '更新者',
`update_time` datetime COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT 0 COMMENT '删除标志',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户ID',
PRIMARY KEY (`id`),
KEY `idx_application_id` (`application_id`),
KEY `idx_approver_id` (`approver_id`),
KEY `idx_node_status` (`node_status`)
) ENGINE=InnoDB COMMENT='简化审批记录表';
4.2 数据字典设计
-- 插入项目预算相关字典数据(基于详细申请表填报内容)
INSERT INTO `sys_dict_type` VALUES
(3000001, '项目特性选项', 'budget_project_feature', '0', '项目预算-项目特性选项', '2025-01-26 25:00:00', NULL, NULL, '项目特性相关选项'),
(3000002, '绩效指标类型', 'budget_performance_type', '0', '项目预算-绩效指标类型', '2025-01-26 25:00:00', NULL, NULL, '8大绩效指标类型'),
(3000003, '审批状态', 'budget_approval_status', '0', '项目预算-审批状态', '2025-01-26 25:00:00', NULL, NULL, '审批状态分类'),
(3000004, '审批人类型', 'budget_approver_type', '0', '项目预算-审批人类型', '2025-01-26 25:00:00', NULL, NULL, '审批人类型分类'),
(3000005, '节点类型', 'budget_node_type', '0', '项目预算-节点类型', '2025-01-26 25:00:00', NULL, NULL, '审批节点类型'),
(3000006, '资金来源类型', 'budget_funding_source', '0', '项目预算-资金来源类型', '2025-01-26 25:00:00', NULL, NULL, '资金来源分类'),
(3000007, '支出科目', 'budget_expenditure_category', '0', '项目预算-支出科目', '2025-01-26 25:00:00', NULL, NULL, '项目支出科目分类');
INSERT INTO `sys_dict_data` VALUES
-- 项目特性选项
(3000011, 0, '是', '1', 'budget_project_feature', '', '', 'N', '0', '0', '是', '2025-01-26 25:00:00', NULL, NULL, NULL),
(3000012, 1, '否', '0', 'budget_project_feature', '', '', 'N', '0', '0', '否', '2025-01-26 25:00:00', NULL, NULL, NULL),
-- 绩效指标类型
(3000021, 0, '数量指标', 'quantity', 'budget_performance_type', '', '', 'N', '0', '0', '数量指标', '2025-01-26 25:00:00', NULL, NULL, NULL),
(3000022, 1, '质量指标', 'quality', 'budget_performance_type', '', '', 'N', '0', '0', '质量指标', '2025-01-26 25:00:00', NULL, NULL, NULL),
(3000023, 2, '时效指标', 'timeliness', 'budget_performance_type', '', '', 'N', '0', '0', '时效指标', '2025-01-26 25:00:00', NULL, NULL, NULL),
(3000024, 3, '成本指标', 'cost', 'budget_performance_type', '', '', 'N', '0', '0', '成本指标', '2025-01-26 25:00:00', NULL, NULL, NULL),
(3000025, 4, '经济效益指标', 'economic', 'budget_performance_type', '', '', 'N', '0', '0', '经济效益指标', '2025-01-26 25:00:00', NULL, NULL, NULL),
(3000026, 5, '社会效益指标', 'social', 'budget_performance_type', '', '', 'N', '0', '0', '社会效益指标', '2025-01-26 25:00:00', NULL, NULL, NULL),
(3000027, 6, '环境效益指标', 'environmental', 'budget_performance_type', '', '', 'N', '0', '0', '环境效益指标', '2025-01-26 25:00:00', NULL, NULL, NULL),
(3000028, 7, '满意度指标', 'satisfaction', 'budget_performance_type', '', '', 'N', '0', '0', '满意度指标', '2025-01-26 25:00:00', NULL, NULL, NULL),
-- 资金来源类型
(3000031, 0, '市财政资金', 'municipal_fiscal', 'budget_funding_source', '', '', 'N', '0', '0', '市财政资金', '2025-01-26 25:00:00', NULL, NULL, NULL),
(3000032, 1, '单位自筹', 'self_funding', 'budget_funding_source', '', '', 'N', '0', '0', '单位自筹资金', '2025-01-26 25:00:00', NULL, NULL, NULL),
(3000033, 2, '其他资金', 'other_funding', 'budget_funding_source', '', '', 'N', '0', '0', '其他来源资金', '2025-01-26 25:00:00', NULL, NULL, NULL),
-- 支出科目
(3000041, 0, '人员经费', 'personnel_expense', 'budget_expenditure_category', '', '', 'N', '0', '0', '人员相关费用', '2025-01-26 25:00:00', NULL, NULL, NULL),
(3000042, 1, '设备费', 'equipment_expense', 'budget_expenditure_category', '', '', 'N', '0', '0', '设备采购费用', '2025-01-26 25:00:00', NULL, NULL, NULL),
(3000043, 2, '材料费', 'material_expense', 'budget_expenditure_category', '', '', 'N', '0', '0', '材料采购费用', '2025-01-26 25:00:00', NULL, NULL, NULL),
(3000044, 3, '差旅费', 'travel_expense', 'budget_expenditure_category', '', '', 'N', '0', '0', '差旅相关费用', '2025-01-26 25:00:00', NULL, NULL, NULL),
(3000045, 4, '培训费', 'training_expense', 'budget_expenditure_category', '', '', 'N', '0', '0', '培训相关费用', '2025-01-26 25:00:00', NULL, NULL, NULL),
(3000046, 5, '咨询费', 'consulting_expense', 'budget_expenditure_category', '', '', 'N', '0', '0', '咨询服务费用', '2025-01-26 25:00:00', NULL, NULL, NULL),
(3000047, 6, '运行维护费', 'maintenance_expense', 'budget_expenditure_category', '', '', 'N', '0', '0', '运行维护费用', '2025-01-26 25:00:00', NULL, NULL, NULL),
(3000048, 7, '其他费用', 'other_expense', 'budget_expenditure_category', '', '', 'N', '0', '0', '其他类型费用', '2025-01-26 25:00:00', NULL, NULL, NULL);
5. 用户界面设计
5.1 界面设计原则
5.1.1 设计理念
- 🎯 用户中心: 以用户需求为核心,简化操作流程
- 📱 响应式设计: 支持PC端和移动端自适应
- 🎨 统一风格: 保持与校园管理系统整体风格一致
- ♿ 无障碍访问: 支持键盘导航和屏幕阅读器
5.1.2 色彩规范
- 主色调: #1890FF (品牌蓝)
- 成功色: #52C41A (绿色)
- 警告色: #FAAD14 (黄色)
- 错误色: #F5222D (红色)
- 文字色: #262626 (深灰)
- 背景色: #F5F5F5 (浅灰)
5.2 核心页面设计
5.2.1 审批配置页面
<!-- 审批流程配置页面布局 -->
<template>
<div class="approval-config-page">
<!-- 页面头部 -->
<PageHeader title="审批流程配置" />
<!-- 工具栏 -->
<div class="toolbar">
<el-button type="primary" @click="createTemplate">
<i class="el-icon-plus"></i> 新建模板
</el-button>
<el-button @click="importTemplate">
<i class="el-icon-upload"></i> 导入模板
</el-button>
</div>
<!-- 模板列表 -->
<div class="template-list">
<el-card v-for="template in templates" :key="template.id" class="template-card">
<div class="template-header">
<h3>{{ template.templateName }}</h3>
<div class="template-actions">
<el-button size="small" @click="editTemplate(template)">编辑</el-button>
<el-button size="small" @click="copyTemplate(template)">复制</el-button>
<el-button size="small" type="danger" @click="deleteTemplate(template)">删除</el-button>
</div>
</div>
<div class="template-content">
<p class="template-desc">{{ template.description }}</p>
<div class="template-info">
<span>适用金额: {{ template.minAmount }}-{{ template.maxAmount }}</span>
<span>节点数: {{ template.nodeCount }}</span>
<span>状态: {{ template.status === '1' ? '启用' : '禁用' }}</span>
</div>
</div>
</el-card>
</div>
<!-- 流程设计器弹窗 -->
<ProcessDesigner v-model="designerVisible" :template="currentTemplate" />
</div>
</template>
5.2.2 预算申报页面(基于详细申请表填报内容设计)
<!-- 项目预算申报页面布局(基于详细申请表填报内容) -->
<template>
<div class="budget-application-page">
<!-- 步骤条 -->
<el-steps :active="currentStep" align-center>
<el-step title="基本信息" icon="el-icon-info"></el-step>
<el-step title="项目内容" icon="el-icon-document"></el-step>
<el-step title="资金情况" icon="el-icon-money"></el-step>
<el-step title="绩效指标" icon="el-icon-data-line"></el-step>
<el-step title="支撑材料" icon="el-icon-paperclip"></el-step>
<el-step title="确认提交" icon="el-icon-check"></el-step>
</el-steps>
<!-- 表单内容 -->
<div class="form-content">
<!-- 基本信息步骤 -->
<div v-show="currentStep === 0" class="step-content">
<el-form :model="formData.basicInfo" label-width="150px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="项目名称" required>
<el-input v-model="formData.basicInfo.projectName" placeholder="请输入项目名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目负责人" required>
<el-input v-model="formData.basicInfo.principal" placeholder="请输入项目负责人" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="联系电话">
<el-input v-model="formData.basicInfo.contactPhone" placeholder="请输入联系电话" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目实施时间" required>
<el-date-picker
v-model="projectDateRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
</el-col>
</el-row>
<el-divider content-position="left">项目特性</el-divider>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="是否面向中小企业">
<el-radio-group v-model="formData.basicInfo.targetSme">
<el-radio :label="true">是</el-radio>
<el-radio :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="是否面向小微企业">
<el-radio-group v-model="formData.basicInfo.targetMicroSme">
<el-radio :label="true">是</el-radio>
<el-radio :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="是否采购进口设备">
<el-radio-group v-model="formData.basicInfo.importEquipment">
<el-radio :label="true">是</el-radio>
<el-radio :label="false">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<!-- 项目内容步骤 -->
<div v-show="currentStep === 1" class="step-content">
<el-form :model="formData.projectContent" label-width="150px">
<el-form-item label="项目申请原因" required>
<el-input
v-model="formData.projectContent.applicationReason"
type="textarea"
:rows="4"
placeholder="请输入项目设立依据、可行性及必要性"
/>
</el-form-item>
<el-form-item label="项目建设内容" required>
<el-input
v-model="formData.projectContent.constructionContent"
type="textarea"
:rows="4"
placeholder="请详细说明项目具体建设内容"
/>
</el-form-item>
<el-form-item label="绩效总目标" required>
<el-input
v-model="formData.projectContent.totalPerformanceGoal"
type="textarea"
:rows="3"
placeholder="请输入项目整体绩效目标"
/>
</el-form-item>
<el-form-item label="当年绩效目标" required>
<el-input
v-model="formData.projectContent.currentYearGoal"
type="textarea"
:rows="3"
placeholder="请输入本年度具体绩效目标"
/>
</el-form-item>
</el-form>
</div>
<!-- 资金情况步骤 -->
<div v-show="currentStep === 2" class="step-content">
<el-tabs v-model="activeTab">
<!-- 资金来源明细 -->
<el-tab-pane label="资金来源明细" name="funding">
<FundingSourceTable v-model="formData.fundingInfo.fundingSources" />
</el-tab-pane>
<!-- 支出明细 -->
<el-tab-pane label="支出明细及测算" name="expenditure">
<ExpenditureDetailTable v-model="formData.fundingInfo.expenditureDetails" />
</el-tab-pane>
</el-tabs>
</div>
<!-- 绩效指标步骤 -->
<div v-show="currentStep === 3" class="step-content">
<PerformanceIndicatorManager v-model="formData.performanceIndicators" />
</div>
<!-- 支撑材料步骤 -->
<div v-show="currentStep === 4" class="step-content">
<AttachmentUpload v-model="formData.attachments" />
</div>
<!-- 确认提交步骤 -->
<div v-show="currentStep === 5" class="step-content">
<ApplicationSummary :form-data="formData" />
</div>
</div>
<!-- 操作按钮 -->
<div class="form-actions">
<el-button v-if="currentStep > 0" @click="prevStep">上一步</el-button>
<el-button @click="saveDraft">保存草稿</el-button>
<el-button v-if="currentStep < 5" type="primary" @click="nextStep">下一步</el-button>
<el-button v-if="currentStep === 5" type="primary" @click="submitApplication">提交申报</el-button>
</div>
</div>
</template>
<script setup lang="ts">
// 引入相关组件
import FundingSourceTable from './components/FundingSourceTable.vue'
import ExpenditureDetailTable from './components/ExpenditureDetailTable.vue'
import PerformanceIndicatorManager from './components/PerformanceIndicatorManager.vue'
import AttachmentUpload from './components/AttachmentUpload.vue'
import ApplicationSummary from './components/ApplicationSummary.vue'
// 表单数据结构
const formData = reactive({
basicInfo: {
projectName: '',
principal: '',
contactPhone: '',
startDate: '',
endDate: '',
targetSme: false,
targetMicroSme: false,
importEquipment: false
},
projectContent: {
applicationReason: '',
constructionContent: '',
totalPerformanceGoal: '',
currentYearGoal: ''
},
fundingInfo: {
fundingSources: {
totalInvestment: { total: 0, municipalFiscal: 0, selfFunding: 0, other: 0 },
currentYearExecution: { total: 0, municipalFiscal: 0, selfFunding: 0, other: 0 },
nextYearApplication: { total: 0, municipalFiscal: 0, selfFunding: 0, other: 0 },
futureYearArrangement: { total: 0, municipalFiscal: 0, selfFunding: 0, other: 0 }
},
expenditureDetails: []
},
performanceIndicators: {
quantityIndicators: [],
qualityIndicators: [],
timelinessIndicators: [],
costIndicators: [],
economicBenefitIndicators: [],
socialBenefitIndicators: [],
environmentalBenefitIndicators: [],
satisfactionIndicators: []
},
attachments: []
})
</script>
5.2.3 审批执行页面
<!-- 审批任务处理页面布局 -->
<template>
<div class="approval-task-page">
<!-- 页面头部 -->
<PageHeader title="审批任务" />
<!-- 筛选工具栏 -->
<div class="filter-toolbar">
<el-form inline>
<el-form-item label="审批状态">
<el-select v-model="filterForm.status" placeholder="请选择">
<el-option label="待审批" value="waiting"></el-option>
<el-option label="已审批" value="approved"></el-option>
<el-option label="已超时" value="overtime"></el-option>
</el-select>
</el-form-item>
<el-form-item label="项目类型">
<el-select v-model="filterForm.projectType" placeholder="请选择">
<el-option v-for="type in projectTypes" :key="type.value"
:label="type.label" :value="type.value"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="searchTasks">查询</el-button>
<el-button @click="resetFilter">重置</el-button>
</el-form-item>
</el-form>
</div>
<!-- 任务列表 -->
<div class="task-list">
<el-card v-for="task in tasks" :key="task.id" class="task-card" :class="getTaskClass(task)">
<div class="task-header">
<div class="task-title">
<h3>{{ task.projectName }}</h3>
<el-tag :type="getStatusType(task.status)">{{ getStatusText(task.status) }}</el-tag>
</div>
<div class="task-info">
<span>申报人: {{ task.applicant }}</span>
<span>金额: {{ formatCurrency(task.totalAmount) }}</span>
<span>提交时间: {{ formatDate(task.submitTime) }}</span>
</div>
</div>
<div class="task-content">
<p>{{ task.projectBackground }}</p>
</div>
<div class="task-actions">
<el-button size="small" @click="viewDetail(task)">查看详情</el-button>
<el-button v-if="task.status === 'waiting'" size="small" type="primary"
@click="approveTask(task)">立即审批</el-button>
</div>
</el-card>
</div>
<!-- 审批详情弹窗 -->
<ApprovalDialog v-model="approvalVisible" :task="currentTask" @approved="onApproved" />
</div>
</template>
5.3 移动端适配
5.3.1 响应式布局
// 移动端样式适配
.approval-config-page {
@media (max-width: 768px) {
.toolbar {
.el-button {
width: 100%;
margin-bottom: 10px;
}
}
.template-list {
.template-card {
margin-bottom: 15px;
.template-header {
flex-direction: column;
align-items: flex-start;
.template-actions {
margin-top: 10px;
.el-button {
margin-right: 5px;
margin-bottom: 5px;
}
}
}
}
}
}
}
.budget-application-page {
@media (max-width: 768px) {
.el-steps {
.el-step__title {
font-size: 12px;
}
}
.form-actions {
position: fixed;
bottom: 0;
left: 0;
right: 0;
background: white;
padding: 15px;
box-shadow: 0 -2px 8px rgba(0,0,0,0.1);
.el-button {
flex: 1;
margin: 0 5px;
}
}
}
}
6. 技术架构设计
6.1 系统架构
6.1.1 整体架构图
graph TB
subgraph "前端层"
A1[PC端管理界面]
A2[移动端界面]
A3[数据可视化]
end
subgraph "网关层"
B1[API网关]
B2[负载均衡]
B3[安全认证]
end
subgraph "业务服务层"
C1[审批人配置服务]
C2[预算申报服务]
C3[简单审批服务]
C4[统计汇总服务]
C5[通知服务]
end
subgraph "数据层"
D1[业务数据库]
D2[Redis缓存]
D3[文件存储]
D4[日志存储]
end
A1 --> B1
A2 --> B1
A3 --> B1
B1 --> B2
B2 --> B3
B3 --> C1
B3 --> C2
B3 --> C3
B3 --> C4
B3 --> C5
C1 --> D1
C2 --> D1
C3 --> D1
C4 --> D1
C1 --> D2
C2 --> D2
C3 --> D2
C2 --> D3
C3 --> D3
C1 --> D4
C2 --> D4
C3 --> D4
C4 --> D4
6.1.2 技术栈选择
| 技术分层 | 技术选型 | 版本要求 | 说明 |
|---|---|---|---|
| 前端框架 | Vue 3 + TypeScript | 3.5.13+ | 响应式UI框架 |
| UI组件库 | Element Plus | 2.8.5+ | 企业级UI组件 |
| 图表库 | ECharts | 5.5.0+ | 数据可视化 |
| 状态管理 | Pinia | 2.2.2+ | 现代状态管理 |
| 后端框架 | Spring Boot | 3.4.6 | Java企业级框架 |
| ORM框架 | MyBatis-Plus | 3.5.8+ | 数据持久层 |
| 数据库 | MySQL | 8.0+ | 关系型数据库 |
| 缓存 | Redis | 7.0+ | 内存数据库 |
| 文件存储 | MinIO/OSS | - | 对象存储 |
| 消息队列 | RabbitMQ | 3.13+ | 异步消息处理 |
6.2 核心技术设计
6.2.1 简化审批管理
/**
* 简化审批管理服务
*/
@Service
public class SimpleApprovalService {
/**
* 启动3节点固定审批流程
*/
public void startApproval(Long applicationId) {
// 1. 获取审批人配置
BudgetApproverConfig config = getApproverConfig(applicationId);
// 2. 创建3个固定审批节点
createApprovalRecord(applicationId, "dept_approve", "部门审批", 1,
config.getDeptApproverId(), config.getDeptApproverName());
createApprovalRecord(applicationId, "finance_approve", "财务审批", 2,
config.getFinanceApproverId(), config.getFinanceApproverName());
createApprovalRecord(applicationId, "leader_approve", "领导审批", 3,
config.getLeaderApproverId(), config.getLeaderApproverName());
// 3. 启动第一个节点(部门审批)
activateFirstNode(applicationId);
// 4. 更新申请状态为审批中
updateApplicationStatus(applicationId, "approving");
}
/**
* 执行审批操作
*/
public void executeApproval(Long recordId, String action, String opinion) {
BudgetApprovalRecord record = approvalRecordMapper.selectById(recordId);
// 1. 更新当前节点
record.setApproveAction(action);
record.setApproveOpinion(opinion);
record.setEndTime(new Date());
if ("approve".equals(action)) {
record.setNodeStatus("approved");
// 启动下一个节点
activateNextNode(record);
} else if ("reject".equals(action)) {
record.setNodeStatus("rejected");
// 终止流程
updateApplicationStatus(record.getApplicationId(), "rejected");
} else if ("return".equals(action)) {
record.setNodeStatus("returned");
// 退回申请人
updateApplicationStatus(record.getApplicationId(), "returned");
}
approvalRecordMapper.updateById(record);
}
/**
* 激活下一个审批节点
*/
private void activateNextNode(BudgetApprovalRecord currentRecord) {
// 查找下一个节点
BudgetApprovalRecord nextRecord = findNextRecord(
currentRecord.getApplicationId(),
currentRecord.getNodeOrder() + 1
);
if (nextRecord != null) {
// 激活下一节点
nextRecord.setNodeStatus("waiting");
nextRecord.setStartTime(new Date());
approvalRecordMapper.updateById(nextRecord);
} else {
// 所有节点完成,审批通过
updateApplicationStatus(currentRecord.getApplicationId(), "approved");
}
}
}
6.2.2 智能审批辅助
/**
* 智能审批分析服务
*/
@Service
public class ApprovalAnalysisService {
/**
* 预算合理性分析
*/
public AnalysisResult analyzeBudgetReasonability(BudgetApplication application) {
AnalysisResult result = new AnalysisResult();
// 1. 历史数据对比
List<BudgetApplication> historicalData = getHistoricalData(
application.getProjectType(), application.getDepartmentId());
// 2. 金额合理性分析
result.addItem(analyzeAmountReasonability(application, historicalData));
// 3. 预算结构分析
result.addItem(analyzeBudgetStructure(application));
// 4. 风险点识别
result.addItem(identifyRiskPoints(application));
return result;
}
/**
* 生成审批建议
*/
public ApprovalSuggestion generateSuggestion(BudgetApplication application) {
ApprovalSuggestion suggestion = new ApprovalSuggestion();
// 基于规则引擎生成建议
RuleEngine ruleEngine = new RuleEngine();
ruleEngine.addRule(new AmountThresholdRule());
ruleEngine.addRule(new DepartmentBudgetRule());
ruleEngine.addRule(new ProjectTypeRule());
suggestion = ruleEngine.evaluate(application);
return suggestion;
}
}
6.2.3 数据统计引擎
/**
* 统计数据生成服务
*/
@Service
public class StatisticsService {
/**
* 生成年度预算统计报告
*/
public AnnualBudgetReport generateAnnualReport(int year) {
AnnualBudgetReport report = new AnnualBudgetReport();
report.setYear(year);
// 1. 基础统计数据
report.setTotalApplications(applicationMapper.countByYear(year));
report.setTotalAmount(applicationMapper.sumAmountByYear(year));
report.setApprovedAmount(applicationMapper.sumApprovedAmountByYear(year));
// 2. 部门统计
List<DepartmentBudgetStat> deptStats = generateDepartmentStats(year);
report.setDepartmentStats(deptStats);
// 3. 项目类型统计
List<ProjectTypeStat> typeStats = generateProjectTypeStats(year);
report.setProjectTypeStats(typeStats);
// 4. 月度趋势分析
List<MonthlyTrend> trends = generateMonthlyTrends(year);
report.setMonthlyTrends(trends);
return report;
}
/**
* 生成实时统计仪表盘数据
*/
public DashboardData generateDashboard() {
DashboardData dashboard = new DashboardData();
// 当月统计
dashboard.setCurrentMonthApplications(getCurrentMonthApplications());
dashboard.setCurrentMonthAmount(getCurrentMonthAmount());
// 待处理任务统计
dashboard.setPendingTasks(getPendingTasksCount());
dashboard.setOverdueTasks(getOverdueTasksCount());
// 部门排行
dashboard.setTopDepartments(getTopDepartmentsByAmount());
return dashboard;
}
}
7. 开发计划
7.1 项目里程碑
7.1.1 开发阶段规划
| 阶段 | 目标 | 时间周期 | 交付物 | 负责人 |
|---|---|---|---|---|
| 需求调研 | 完善需求分析和技术方案 | 1周 | 需求文档、技术方案 | 产品经理 |
| 架构设计 | 完成系统架构和数据库设计 | 1周 | 架构文档、数据库脚本 | 架构师 |
| 基础开发 | 完成基础框架和核心模块 | 3周 | 基础代码、核心API | 开发团队 |
| 功能开发 | 完成所有业务功能开发 | 4周 | 完整功能模块 | 开发团队 |
| 测试验收 | 完成系统测试和用户验收 | 2周 | 测试报告、验收文档 | 测试团队 |
| 上线部署 | 完成生产环境部署和培训 | 1周 | 生产系统、用户手册 | 运维团队 |
7.1.2 详细开发计划
gantt
title 财务项目预算审批系统开发计划
dateFormat YYYY-MM-DD
section 需求分析
需求调研 :done, req1, 2025-01-26,2025-02-02
需求评审 :done, req2, 2025-02-02,2025-02-03
section 设计阶段
架构设计 :active, design1, 2025-02-03,2025-02-07
数据库设计 : design2, 2025-02-05,2025-02-08
UI设计 : design3, 2025-02-07,2025-02-10
section 开发阶段
基础框架搭建 : dev1, 2025-02-10,2025-02-14
审批配置模块 : dev2, 2025-02-14,2025-02-21
预算申报模块 : dev3, 2025-02-17,2025-02-24
审批执行模块 : dev4, 2025-02-21,2025-02-28
统计汇总模块 : dev5, 2025-02-24,2025-03-03
前端页面开发 : dev6, 2025-02-17,2025-03-03
section 测试阶段
单元测试 : test1, 2025-03-03,2025-03-07
集成测试 : test2, 2025-03-07,2025-03-10
系统测试 : test3, 2025-03-10,2025-03-14
用户验收测试 : test4, 2025-03-14,2025-03-17
section 部署上线
生产环境部署 : deploy1, 2025-03-17,2025-03-19
用户培训 : deploy2, 2025-03-19,2025-03-21
正式上线 : deploy3, 2025-03-21,2025-03-21
7.2 资源配置
7.2.1 团队配置
| 角色 | 人数 | 主要职责 | 技能要求 |
|---|---|---|---|
| 项目经理 | 1人 | 项目管理、进度控制、风险管控 | 项目管理经验、沟通协调能力 |
| 产品经理 | 1人 | 需求分析、产品设计、用户体验 | 业务理解、产品设计经验 |
| 后端开发 | 2人 | 后端业务开发、API设计、数据库设计 | Java、Spring Boot、MyBatis |
| 前端开发 | 1人 | 前端页面开发、交互设计、组件开发 | Vue 3、TypeScript、Element Plus |
| 测试工程师 | 1人 | 测试用例设计、功能测试、性能测试 | 测试理论、自动化测试工具 |
总计:6人团队(简化后减少3人)
7.2.2 技术资源
| 资源类型 | 配置要求 | 用途说明 |
|---|---|---|
| 开发环境 | 8核16G内存 | 开发人员本地开发 |
| 测试环境 | 4核8G内存 | 功能测试和集成测试 |
| 预生产环境 | 8核16G内存 | 用户验收测试 |
| 生产环境 | 16核32G内存 | 正式生产运行 |
| 数据库服务器 | 8核16G内存500G存储 | MySQL主从部署 |
| Redis服务器 | 4核8G内存 | 缓存和会话存储 |
| 文件存储 | 1TB存储空间 | 附件和文档存储 |
7.3 风险管控
7.3.1 主要风险识别
| 风险类型 | 风险描述 | 影响等级 | 应对措施 |
|---|---|---|---|
| 技术风险 | 审批人配置的灵活性要求 | 中 | 采用简单的配置表设计,预留扩展性 |
| 需求风险 | 审批流程需求变更频繁 | 中 | 采用灵活的配置化设计,预留扩展性 |
| 资源风险 | 开发人员技能不足 | 中 | 提前进行技术培训,引入技术专家 |
| 进度风险 | 开发周期可能延期 | 中 | 合理安排任务优先级,预留缓冲时间 |
| 质量风险 | 系统稳定性和性能问题 | 高 | 加强代码审查和测试,性能调优 |
7.3.2 质量保证措施
代码质量
- ✅ 代码规范: 统一编码规范和代码格式化
- ✅ 代码审查: 强制性代码审查流程
- ✅ 单元测试: 核心业务逻辑单元测试覆盖率≥80%
- ✅ 静态分析: 使用SonarQube进行代码质量分析
测试保证
- ✅ 功能测试: 完整的功能测试用例和执行
- ✅ 接口测试: API接口自动化测试
- ✅ 性能测试: 系统负载和压力测试
- ✅ 安全测试: 安全漏洞扫描和渗透测试
部署保证
- ✅ CI/CD: 自动化构建和部署流水线
- ✅ 环境一致性: 开发、测试、生产环境一致
- ✅ 回滚机制: 快速回滚机制和数据备份
- ✅ 监控告警: 完善的系统监控和告警机制
📄 附录
A. 参考文档
- 《项目预算申报表(信息化系统表单参考样例).doc》
- 《校园管理系统技术架构规范》
- 《财务管理业务流程规范》
B. 术语表
- 审批流程: 预算申报的审核批准流程
- 审批节点: 流程中的审核环节
- 审批模板: 预定义的审批流程配置
- 预算科目: 预算资金的分类项目
C. 更新记录
| 版本 | 更新时间 | 更新内容 | 更新人 |
|---|---|---|---|
| 1.0 | 2025-01-26 | 初始版本创建 | 产品需求分析师 |
文档状态: ✅ 已完成
审核状态: 🔄 待审核
下一步: 开始架构设计和技术选型