# 党费管理系统 **Repository Path**: design_project/party-fee-management-system ## Basic Information - **Project Name**: 党费管理系统 - **Description**: 党费管理系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-17 - **Last Updated**: 2025-03-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 党费管理系统 ## 一、需求梳理 ### 1. 系统概述 开发一个基于SpringBoot+React的党费管理系统,用于管理党员信息和自动计算党费。 ### 2. 核心功能需求 #### 2.1 党员信息管理 - **党员信息表**:维护党员基本信息 - 包含字段:所在班级、职务、姓名、身份证号、标识号、入党时间 - 支持增删改查操作 - 支持单条和批量导入功能 #### 2.2 工资信息管理 - **工资表导入**:导入每月教师职工(包括党员和非党员)的工资信息 - 导入月数不固定 - 导入字段包括: - 所在班级 - 职务 - 姓名 - 身份证号 - 标识号 - 基础工资 - 绩效工资 - 单项奖 - 企业年金 - 养老保险 - 失业保险 - 医疗保险 - 公积金 - 个税 - 补扣项一 - 补扣项二 #### 2.3 党费计算 - **党费基数计算**:根据职级不同采用不同计算公式 - 校级干部:{(基础工资和)/导入月份数+(绩效工资和/导入月份数)*80%}-企业年金和/导入月份数-养老保险和/导入月份数-失业保险和/导入月份数-医疗保险和/导入月份数-住房公积金和/导入月份数-个税和/导入月份数-补扣一和/导入月份数-补扣二和/导入月份数 - 院级干部:{(基础工资和)/导入月份数+(绩效工资和/导入月份数)*55%+(单项奖和/导入月份数)*30%}-企业年金和/导入月份数-养老保险和/导入月份数-失业保险和/导入月份数-医疗保险和/导入月份数-住房公积金和/导入月份数-个税和/导入月份数-补扣一和/导入月份数-补扣二和/导入月份数 - 班级干部:同院级干部 - 组长:同院级干部 - **费率计算规则**: - 党费基数≤3000:0.5% - 3000<党费基数≤5000:1% - 5000<党费基数≤10000:1.5% - 党费基数>10000:2% - **应缴党费计算**:党费基数 × 费率 #### 2.4 特殊规则 - 工资计算时,考虑到不是每个月都有数据,以实际导入月份数作为除数 - 非党员职工不计算不显示在表中 - 不需支持多版本数据 ## 二、数据库设计 ### 1. 党员表(party_member) ``` id bigint 主键ID class_name varchar(50) 所在班级 position varchar(50) 职务 name varchar(50) 姓名 id_card varchar(20) 身份证号 identifier varchar(50) 标识号 join_date date 入党时间 position_level varchar(20) 职级(校级干部/院级干部/班级干部/组长) create_time datetime 创建时间 update_time datetime 更新时间 ``` ### 2. 工资表(salary) ``` id bigint 主键ID class_name varchar(50) 所在班级 position varchar(50) 职务 name varchar(50) 姓名 id_card varchar(20) 身份证号 identifier varchar(50) 标识号 basic_salary decimal(10,2) 基础工资 performance_salary decimal(10,2) 绩效工资 individual_bonus decimal(10,2) 单项奖 enterprise_pension decimal(10,2) 企业年金 endowment_insurance decimal(10,2) 养老保险 unemployment_insurance decimal(10,2) 失业保险 medical_insurance decimal(10,2) 医疗保险 housing_fund decimal(10,2) 公积金 personal_tax decimal(10,2) 个税 deduction_one decimal(10,2) 补扣项一 deduction_two decimal(10,2) 补扣项二 create_time datetime 创建时间 batch_no varchar(50) 导入批次号 ``` ### 3. 党费计算表(party_fee) ``` id bigint 主键ID class_name varchar(50) 所在班级 position varchar(50) 职务 name varchar(50) 姓名 id_card varchar(20) 身份证号 identifier varchar(50) 标识号 calculation_date date 计算日期 start_month varchar(7) 开始月份 end_month varchar(7) 结束月份 months_count int 计入月数 basic_amount decimal(10,2) 党费基数 rate decimal(5,4) 费率 payable_amount decimal(10,2) 应缴党费 position_level varchar(20) 职级 create_time datetime 创建时间 batch_no varchar(50) 计算批次号 ``` ### 4. 用户表(user) ``` id bigint 主键ID username varchar(50) 用户名 password varchar(100) 密码(加密存储) real_name varchar(50) 真实姓名 role varchar(20) 角色(ADMIN/OPERATOR) status tinyint 状态(0:禁用 1:启用) last_login_time datetime 最后登录时间 create_time datetime 创建时间 update_time datetime 更新时间 ``` ## 三、API接口设计 ### 1. 用户认证 - `POST /api/auth/login` - 用户登录 - `POST /api/auth/logout` - 用户登出 - `GET /api/auth/info` - 获取当前用户信息 - `PUT /api/auth/password` - 修改密码 - `POST /api/auth/refresh-token` - 刷新token ### 2. 党员管理 - `GET /api/party-members` - 获取党员列表 - 请求参数: - page: 页码(默认1) - size: 每页条数(默认10) - keyword: 搜索关键词(可选) - class_name: 班级筛选(可选) - position: 职务筛选(可选) - 响应参数: - total: 总记录数 - pages: 总页数 - current: 当前页码 - size: 每页条数 - records: 数据列表 - `GET /api/party-members/{id}` - 获取单个党员详情 - `POST /api/party-members` - 创建党员 - `PUT /api/party-members/{id}` - 更新党员信息 - `DELETE /api/party-members/{id}` - 删除党员 - `POST /api/party-members/import` - 批量导入党员 ### 3. 工资管理 - `POST /api/salaries/import` - 导入工资表 - `GET /api/salaries` - 查询工资记录列表 - 请求参数: - page: 页码(默认1) - size: 每页条数(默认10) - keyword: 搜索关键词(可选) - class_name: 班级筛选(可选) - position: 职务筛选(可选) - month: 月份筛选(可选) - 响应参数: - total: 总记录数 - pages: 总页数 - current: 当前页码 - size: 每页条数 - records: 数据列表 - `GET /api/salaries/months` - 获取已有工资数据的月份列表 ### 4. 党费计算 - `POST /api/party-fees/calculate` - 计算党费 - 请求参数: - year: 计算年份(默认当前年份) - month: 计算月份(可选,不传则计算全年) - `GET /api/party-fees` - 获取党费计算结果列表 - 请求参数: - page: 页码(默认1) - size: 每页条数(默认10) - keyword: 搜索关键词(可选) - class_name: 班级筛选(可选) - position: 职务筛选(可选) - year: 年份筛选(可选) - 响应参数: - total: 总记录数 - pages: 总页数 - current: 当前页码 - size: 每页条数 - records: 数据列表 - `GET /api/party-fees/export` - 导出党费计算结果 ## 四、前端页面设计 ### 1. 页面结构 - 首页/登录页 - 党员管理页 - 党员列表 - 党员添加/编辑表单 - 批量导入对话框 - 工资管理页 - 工资数据列表 - 工资导入表单 - 党费计算页 - 计算条件设置 - 计算结果展示 - 导出功能 ### 2. 主要功能界面原型 #### 党员信息管理界面 - 表格展示字段:所在班级、职务、姓名、身份证号、标识号、入党时间、操作 - 操作按钮:新增、编辑、删除、批量导入、导出 #### 工资导入界面 - 文件上传组件 - 月份选择器 - 导入历史记录表格 - 导入数据预览 #### 党费计算界面 - 计算条件设置区域(选择月份范围) - 计算结果表格(包含党员信息、党费基数、费率、应缴党费) - 导出按钮 ## 五、实现步骤 1. 环境搭建:SpringBoot后端项目与React前端项目初始化 2. 数据库设计与初始化 3. 后端API实现 4. 前端页面开发 5. 集成测试 6. 部署上线 ## 六、技术栈明细 ### 后端 - SpringBoot 3.2.x - Spring Data JPA - MySQL 8.0 - FastExcel(Excel处理,比Apache POI更轻量高效) - Spring Security(认证授权) - Lombok(减少样板代码) - Swagger/SpringDoc(API文档) ### 前端 - React 18 - Ant Design 5.x(UI组件库) - Axios(HTTP请求) - Redux Toolkit/Zustand(状态管理) - React Router 6(路由管理) - XLSX.js/SheetJS(Excel操作) - ECharts/Recharts(可视化图表) ## 七、项目结构 ``` party-fee-management-system/ ├── backend/ # 后端项目 │ ├── src/main/java/com/example/partyfee/ │ │ ├── config/ # 配置类 │ │ ├── controller/ # 控制器 │ │ ├── dto/ # 数据传输对象 │ │ ├── entity/ # 实体类 │ │ ├── exception/ # 异常处理 │ │ ├── repository/ # 数据访问层 │ │ ├── service/ # 业务逻辑层 │ │ └── util/ # 工具类 │ └── src/main/resources/ # 资源文件 │ ├── application.yml # 应用配置 │ └── db/ # 数据库脚本 └── frontend/ # 前端项目 ├── public/ # 静态资源 ├── src/ │ ├── api/ # API请求 │ ├── assets/ # 静态资源 │ ├── components/ # 组件 │ ├── hooks/ # 自定义Hooks │ ├── pages/ # 页面 │ ├── router/ # 路由配置 │ ├── store/ # 状态管理 │ └── utils/ # 工具函数 └── package.json # 依赖配置 ``` ## 八、开发与部署 ### 开发环境 - JDK 21 - Node.js 20+ - Maven 3.9+ - MySQL 8.0+ - IDE: IntelliJ IDEA/VS Code ### 部署方式 - 后端:打包为JAR文件,使用Docker容器化部署 - 前端:静态资源构建后部署到Nginx或CDN - 数据库:MySQL独立部署或使用云数据库服务 ### 2. 党费计算规则补充说明 - 党费计算仅计算本年度数据,跨年度数据不参与计算 - 中途入党的党员,按照实际工资数据进行党费计算,不追溯历史数据 - 工资数据通过身份证号和标识号与党员信息进行关联,不使用数据库外键 - 党费计算时,对于中途入党的党员,仅计算入党后的工资数据 - 党费基数计算时,以实际导入的工资数据月份数作为除数 ## 九、本地部署教程 ### 1. 环境准备 #### 1.1 后端环境 - JDK 21 - Maven 3.9+ - MySQL 8.0+ - IntelliJ IDEA #### 1.2 前端环境 - Node.js 20+ - VS Code(推荐) ### 2. 后端部署 #### 2.1 数据库配置 1. 安装并启动 MySQL 8.0 2. 创建数据库: ```sql CREATE DATABASE party_fee DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` #### 2.2 IDEA 配置 1. 打开 IDEA,导入后端项目: - File -> Open -> 选择 `backend` 目录 - 等待 Maven 自动导入依赖 2. 配置 Maven: - File -> Settings -> Build, Execution, Deployment -> Build Tools -> Maven - Maven home path: 选择已安装的 Maven 目录 - User settings file: 选择 Maven 的 settings.xml 文件 - Local repository: 选择 Maven 本地仓库目录 3. 配置 JDK: - File -> Project Structure -> Project - Project SDK: 选择 JDK 21 - Project language level: 选择 21 4. 配置数据库连接: - 打开 `application.yml` 文件 - 修改数据库连接信息: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/party_fee?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root password: your_password ``` #### 2.3 启动后端 1. 找到 `PartyFeeApplication.java` 文件 2. 右键点击 -> Run 'PartyFeeApplication' 3. 等待启动完成,默认端口为 8080 ### 3. 前端部署 #### 3.1 安装依赖 1. 打开终端,进入前端项目目录: ```bash cd frontend ``` 2. 安装依赖: ```bash npm install # 或者使用 yarn yarn install ``` #### 3.2 启动开发服务器 1. 启动开发服务器: ```bash npm run dev # 或者使用 yarn yarn dev ``` 2. 等待启动完成,默认端口为 5173 ### 4. 访问系统 1. 打开浏览器,访问:`http://localhost:5173` 2. 默认管理员账号: - 用户名:admin - 密码:123456 ### 5. 常见问题 #### 5.1 后端问题 1. Maven 依赖下载失败 - 检查 Maven 配置是否正确 - 尝试清理 Maven 缓存:`mvn clean` - 检查网络连接 2. 数据库连接失败 - 检查 MySQL 服务是否启动 - 验证数据库连接信息是否正确 - 检查数据库是否创建 #### 5.2 前端问题 1. 依赖安装失败 - 检查 Node.js 版本是否符合要求 - 尝试清除 npm 缓存:`npm cache clean --force` - 使用 cnpm 或配置淘宝镜像源 2. 开发服务器启动失败 - 检查端口是否被占用 - 检查是否有编译错误 - 查看控制台错误信息 ### 6. 开发建议 1. 使用 IDEA 的 Maven 工具窗口管理依赖 2. 使用 VS Code 的 ESLint 和 Prettier 插件保持代码风格 3. 使用浏览器的开发者工具调试前端问题 4. 使用 IDEA 的调试功能调试后端代码