从零搭建按实际档案存储量阶梯收费的档案管理系统实操指南

前期准备

你只需要提前安装好Python3.8及以上版本,官方安装地址:https://www.python.org/downloads/,无需额外安装独立数据库,本方案使用Python自带的SQLite,零配置即可运行。

依赖包安装

打开电脑终端,直接执行以下命令完成所有依赖安装,不需要手动下载压缩包:

``` pip install flask flask-sqlalchemy ```

如果出现网络超时错误,替换为国内镜像加速命令即可:

``` pip install flask flask-sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple ```

核心代码开发(可直接复制完整内容)

1. 初始化项目与数据库模型

在空文件夹新建一个名为app.py的文件,把以下完整代码复制进去,模型已经包含用户、档案、计费单三个核心表,完全适配按档案量计费的需求:

``` from flask import Flask, request from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///archive_system.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) 用户表 class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) 档案表 class Archive(db.Model): id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) is_deleted = db.Column(db.Boolean, default=False, nullable=False) 软删除标记,避免错统计 计费记录表 class Bill(db.Model): id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) archive_count = db.Column(db.Integer, nullable=False) amount = db.Column(db.Float, nullable=False) billing_month = db.Column(db.String(7), nullable=False) 格式:2024-09 ```

这里必须保留is_deleted软删除字段,用户删除档案后会自动从统计量中扣除,不会出现多计费的错误。

2. 配置计费规则

在上述代码下方添加计费规则,你可以直接修改数值调整收费标准,两种常用规则可选,选一种即可:

第一种是阶梯包年/包月计费,适合固定档位收费的场景,直接复制:

``` 阶梯计费规则,格式:(最低档案量, 最高档案量, 月度收费金额),None代表无上限 BILLING_RULES = [ (0, 100, 10.0), (101, 500, 20.0), (501, 1000, 35.0), (1001, None, 60.0) ] ```

从零搭建按实际档案存储量阶梯收费的档案管理系统实操指南

第二种是增量计费,适合按超出份数额外收费的场景,需要的话复制这个替换上面的规则:

``` 增量计费规则:基础费10元包100份,超出部分每份每月0.1元 BASE_COUNT = 100 BASE_FEE = 10.0 EXTRA_FEE_PER_ARCHIVE = 0.1 ```

3. 核心计费逻辑实现

继续在app.py中添加以下代码,已经处理了所有边界情况,直接使用即可:

``` 初始化数据库表 with app.app_context(): db.create_all() 统计用户当前有效档案量 def count_user_archives(user_id): return Archive.query.filter_by(user_id=user_id, is_deleted=False).count() 阶梯规则计费计算 def calculate_fee(archive_count): for (min_count, max_count, fee) in BILLING_RULES: if max_count is None: return fee if min_count <= archive_count <= max_count: return fee return 0 如果用增量计费,把上面的calculate_fee注释掉,用这个替换 def calculate_fee(archive_count): if archive_count <= BASE_COUNT: return BASE_FEE extra = archive_count - BASE_COUNT return round(BASE_FEE + extra EXTRA_FEE_PER_ARCHIVE, 2) 生成月度账单接口 @app.route('/gen_bill', methods=['POST']) def gen_bill(): user_id = request.json.get('user_id') billing_month = request.json.get('billing_month') archive_count = count_user_archives(user_id) amount = calculate_fee(archive_count) bill = Bill(user_id=user_id, archive_count=archive_count, amount=amount, billing_month=billing_month) db.session.add(bill) db.session.commit() return {"code":0, "archive_count":archive_count, "amount":amount, "bill_id":bill.id} 启动服务 if __name__ == '__main__': app.run() ```

本地启动与验证测试

1. 启动系统

回到终端,在项目文件夹下执行以下命令启动系统:

``` python app.py ```

启动成功后会输出 Running on http://127.0.0.1:5000,此时系统已经可以正常使用。

2. 验证计费逻辑

按照以下步骤操作验证,零门槛不会卡壳:

  • 打开Apifox或Postman,新建POST请求,地址填写http://127.0.0.1:5000/gen_bill
  • 请求体选择JSON格式,填入测试内容: ``` { "user_id": 1, "billing_month": "2024-09" } ```
  • 添加测试数据:用VSCode安装SQLite插件,打开项目文件夹下生成的archive_system.db,新建查询执行以下SQL,插入150条测试档案:INSERT INTO archive (user_id, is_deleted) VALUES (1, 0);,执行150次即可
  • 重新发送生成账单请求,会得到返回结果:{"code":0, "archive_count":150, "amount":20.0},符合预设的101-500份收20元的规则,验证通过

常见问题解决:如果启动提示端口被占用,在app.py最后一行修改为app.run(port=5001)即可;如果统计数量不对,检查测试档案的is_deleted字段是否为0(False对应0),已经删除的档案不会计入统计。

上线调整说明

如果需要正式上线使用,只需要做两个简单调整:第一,替换数据库为MySQL,只需要修改app.config['SQLALCHEMY_DATABASE_URI']为你的MySQL连接地址,所有模型和逻辑不需要修改;第二,新增用户登录接口和档案上传下载接口,计费核心逻辑已经开发完成,直接对接即可。整个系统从搭建到验证不超过30分钟,所有核心逻辑都可以直接复用,不需要额外二次开发。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统