档案管理系统按上门次数收费标准的实操配置及落地指南
本文提供从零搭建可实现“档案管理系统按上门次数收费”的实操指南,全程零门槛,所有代码可直接复制运行,无需额外部署数据库服务。
1. 环境搭建(零依赖部署)
所需工具仅为Python 3.8及以上版本,按以下步骤操作:
1.1 安装Python
从官网(https://www.python.org/downloads/)下载对应操作系统的安装包,安装时必须勾选Add Python to PATH,否则pip命令无法使用。完成后在终端输入python --version,出现版本号即安装成功。
1.2 创建虚拟环境(推荐)
虚拟环境可隔离项目依赖,避免与全局环境冲突,执行以下命令:
python -m venv venv
激活虚拟环境:
- Windows:
venv\Scripts\activate - Mac/Linux:
source venv/bin/activate
1.3 安装项目依赖
执行以下命令安装轻量Web框架Flask及数据库插件:
pip install flask flask-sqlalchemy
2. 数据库模型设计(对应上门收费场景)
采用SQLite数据库,无需额外安装服务,直接通过文件存储数据。项目根目录创建app.py,写入以下完整代码的数据库部分:

from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
db = SQLAlchemy()
上门收费记录模型
class VisitRecord(db.Model):
id = db.Column(db.Integer, primary_key=True)
customer_name = db.Column(db.String(50), nullable=False) 客户名称
visit_date = db.Column(db.DateTime, nullable=False) 上门日期
visit_fee = db.Column(db.Float, nullable=False) 单次上门费用
total_fee = db.Column(db.Float, nullable=False, default=0.0) 累计收费
create_time = db.Column(db.DateTime, default=datetime.now) 记录创建时间
3. 核心功能实现(按上门次数自动计费)
继续在app.py中写入Web服务及核心路由,实现上门记录录入与自动计费逻辑,所有代码可直接复制:
from flask import Flask, request, render_template_string
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///archive_fee.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)
上门记录录入路由
@app.route('/visit', methods=['GET', 'POST'])
def add_visit():
if request.method == 'POST':
获取表单数据
customer = request.form['customer_name']
visit_date = datetime.strptime(request.form['visit_date'], '%Y-%m-%d')
fee = float(request.form['visit_fee'])
计算该客户累计收费
last_record = VisitRecord.query.filter_by(customer_name=customer).order_by(VisitRecord.id.desc()).first()
current_total = (last_record.total_fee if last_record else 0.0) + fee
保存记录
new_visit = VisitRecord(
customer_name=customer,
visit_date=visit_date,
visit_fee=fee,
total_fee=current_total
)
db.session.add(new_visit)
db.session.commit()
return f"记录提交成功!{customer}累计收费:{current_total:.2f}元"
简易录入表单
return render_template_string('''
''')
if __name__ == '__main__':
初始化数据库表
with app.app_context():
db.create_all()
启动服务
app.run(debug=True)
核心逻辑说明:每次录入上门记录时,自动查询该客户最近一次的累计收费,加上本次单次费用生成新的累计值,完全匹配按上门次数收费的需求。
4. 实操验证与日常使用
4.1 启动系统
确保虚拟环境已激活,在终端执行:
python app.py
终端出现Running on http://127.0.0.1:5000/即启动成功。
4.2 录入测试数据
打开浏览器访问http://127.0.0.1:5000/visit,填写表单:
- 客户名称:张三
- 上门日期:2024-05-20
- 单次上门费用:150
提交后页面会显示“记录提交成功!张三累计收费:150.00元”,重复提交同客户同费用150,累计收费变为300.00元,务必核对total_fee的自动计算是否正确,确保收费数据无差错。
5. 收费数据导出与月度统计
如需导出月度收费数据,可在app.py中添加以下路由,实现月度统计:
from flask import Response
import csv
from datetime import datetime
@app.route('/stat/monthly', methods=['GET'])
def monthly_stat():
获取当前年月
current_year = datetime.now().year
current_month = datetime.now().month
按月分组统计
stats = db.session.query(
VisitRecord.customer_name,
db.func.count(VisitRecord.id).label('visit_count'),
db.func.sum(VisitRecord.visit_fee).label('total_income')
).filter(
db.extract('year', VisitRecord.visit_date) == current_year,
db.extract('month', VisitRecord.visit_date) == current_month
).group_by(VisitRecord.customer_name).all()
生成CSV文件
def generate():
data = [['客户名称', '上门次数', '当月总收费']]
for s in stats:
data.append([s.customer_name, s.visit_count, f"{s.total_income:.2f}"])
for row in data:
yield ','.join(row) + '\n'
return Response(generate(), mimetype='text/csv', headers={'Content-Disposition': 'attachment; filename="月度档案收费统计.csv"'})
重启服务后,访问http://127.0.0.1:5000/stat/monthly即可下载当月按上门次数统计的收费CSV文件,可直接用于财务对账。