Files
hzdyjs/docs/需求文档/财务项目预算审批需求/项目预算审批产品需求分析书.md
T
2025-07-30 23:24:43 +08:00

53 KiB
Raw Blame History

财务项目预算审批系统产品需求分析书

文档版本: 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 初始版本创建 产品需求分析师

文档状态: ✅ 已完成
审核状态: 🔄 待审核
下一步: 开始架构设计和技术选型