使用ChatGPT优化千万次计算的分销系统奖励发放and注册关系计算速度-持续更新完整流程和代码

文章讲述了使用Python、Flask和MySQL开发的项目中,如何设计用户表,包括字段定义、奖励机制逻辑和数据生成速度测试。作者详细描述了用户表的建表过程,并提供了SQL和Python模型类代码。测试结果显示,随着用户数量增加,数据生成时间逐渐增长。
摘要由CSDN通过智能技术生成

前几天遇到一个计算量稍大的一个项目
测试环境机器配置:
i5-12600KF
海盗船 16G*2 3200 但是不知道咋回事 当前是2133 测完再看吧
金士顿 SNV2S1000G (固态硬盘)
啥玩意儿 RTX3060 12G

业务逻辑

它的用户奖励机制大概如下:
用户使用A积分 兑换 B冻结积分

1000积分 兑换成 2000冻结积分

冻结积分每日按照百分之5 转化为 百分之80的红积分百分之20的绿积分

解冻之前,判断本人的 手续费是否足够,按照百分之10的比例计算
扣除手续费=当日解冻积分*0.1
如果手续费足够就解冻积分并扣除手续费并写解冻日志
否则不解冻,且写解冻日志

当日解冻=总冻结 * 解冻比例 
当日扣除手续费 = 当日解冻 * 扣手续费比例
发放状态 = 0
if 手续费余额 > 当日扣除手续费 :
	当日红积分 = 当日解冻 * 红积分百分比
	当日绿积分 = 当日解冻 * 绿积分百分比
	增加红积分
	增加绿积分
	减少冻结积分
	减少手续费
	写入日志
	发放状态 = 1
else:
	写入失败日志

if 发放状态 == 1:
	循环找上级,然后解冻奖励

然后,在本人解冻的时候
推荐人 根据 它自身的推荐等级 享受 下级解冻的百分比额外解冻
然后推荐人的推荐人比例 向上循环计算额外解冻发放

ok 脑子差不对是浆糊了,整理字段 开整

下面流程是从0开始新建 便于初学新人,如果您想直接看硬货 ,辛苦动动小手按目录跳转吧

准备工作

本次测试是使用python、flask、mysql进行开发
orm是使用的flask_sqlalchemy
首先是给chatgpt调教的基础指令

前两天简单些过一点点 有兴趣的可以查看 :
一步一步教你调教 ChatGPT生成你的代码之python篇

但是本次项目要具体的多,所以在哪基础上增加更多的条件使chatgpt更加的符合我们的要求

初始调教语句:

我需要你的帮助,需要用你专业的软件开发经验协助我完成一些代码的编写,
本次项目是是用python、flask、mysql、进行开发,额外需要使用的还有:flask_sqlalchemy、cors
我需要将代码文件分为app.py、models.py、api.py
在新建表的时候我会给你表字段,需要你给我对应的 建表sql 和models的class和to_dict方法,还需要显式的指定表名
表字段名请使用英文,需要避开系统保留词,记得把字段的中文意思保存到字段注释

我一直使用的3.5的模型感觉还够用吧
在这里插入图片描述

开始敲码子

项目代码结构初始化,以及用户表

我们先来创建用户表,字段如下:
id、推荐人id、手机号、密码、openid、状态、分销等级、推荐关系等级、余额、积分、冻结积分、手续费、绿积分、红积分
记得我上面说的记得写入注释

因为它有点粗心,所以首次生成的时候没有保留到中文注释,后来又加一句就好了
回复如下:

好的,我会为用户表创建相应的建表 SQL 和模型类,并在注释中包含字段的中文意思以及小数位数的要求。首先,让我们定义这个用户表的建表 SQL:

CREATE TABLE IF NOT EXISTS user (
    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID',
    referrer_id INT COMMENT '推荐人ID',
    phone_number VARCHAR(255) NOT NULL COMMENT '手机号',
    password VARCHAR(255) NOT NULL COMMENT '密码',
    openid VARCHAR(255) COMMENT 'OpenID',
    status INT COMMENT '状态',
    distribution_level INT COMMENT '分销等级',
    relationship_level INT COMMENT '推荐关系等级',
    balance DECIMAL(10, 4) COMMENT '余额',
    points DECIMAL(10, 4) COMMENT '积分',
    frozen_points DECIMAL(10, 4) COMMENT '冻结积分',
    fee DECIMAL(10, 4) COMMENT '手续费',
    green_points DECIMAL(10, 4) COMMENT '绿积分',
    red_points DECIMAL(10, 4) COMMENT '红积分'
);

接下来,我将为用户表创建一个 Python 模型类,并在注释中包含字段的中文意思:

# models.py

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
    __tablename__ = 'user'

    id = db.Column(db.Integer, primary_key=True, comment='用户ID')
    referrer_id = db.Column(db.Integer, comment='推荐人ID')
    phone_number = db.Column(db.String(255), nullable=False, comment='手机号')
    password = db.Column(db.String(255), nullable=False, comment='密码')
    openid = db.Column(db.String(255), comment='OpenID')
    status = db.Column(db.Integer, comment='状态')
    distribution_level = db.Column(db.Integer, comment='分销等级')
    relationship_level = db.Column(db.Integer, comment='推荐关系等级')
    balance = db.Column(db.Numeric(10, 4), comment='余额')
    points = db.Column(db.Numeric(10, 4), comment='积分')
    frozen_points = db.Column(db.Numeric(10, 4), comment='冻结积分')
    fee = db.Column(db.Numeric(10, 4), comment='手续费')
    green_points = db.Column(db.Numeric(10, 4), comment='绿积分')
    red_points = db.Column(db.Numeric(10, 4), comment='红积分')

    def to_dict(self):
        return {
            'id': self.id,
            'referrer_id': self.referrer_id,
            'phone_number': self.phone_number,
            'openid': self.openid,
            'status': self.status,
            'distribution_level': self.distribution_level,
            'relationship_level': self.relationship_level,
            'balance': float(self.balance),
            'points': float(self.points),
            'frozen_points': float(self.frozen_points),
            'fee': float(self.fee),
            'green_points': float(self.green_points),
            'red_points': float(self.red_points)
        }

这是用户表的建表 SQL 和模型类,包含了字段的中文注释和小数位数的要求。你可以将上述代码添加到相应的文件中,并继续开发你的 Flask 应用程序。如果需要创建其他表或有其他问题,随时告诉我。

然后继续向他要代码:

继续给我app.py和api.py部分的代码
在api.py里 写一个 新建用户的api
我会post新创建用户的数量,
你根据我的要求 创建对应数量的用户
如果数据表里没有用户则创建一个初始用户,账号:18140208525 密码:123456 状态1 推荐人id:0 等级都为1 其他都为99999
其他用户 手机号使用随机但是不能和当前数据重复、密码默认123456、推荐人id使用数据库内用户id中的随机一个
用户状态默认为1、用户等级为0-5之间随机数、推荐关系等级默认0
余额、积分、冻结积分、手续费、绿积分、红积分 随机0-99999

给出的app.py如下:

# app.py

from flask import Flask
from flask_cors import CORS
from models import db
from api import app as api_app  # 导入 api.py 中的 Flask 应用实例

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://your_username:your_password@localhost/your_database'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db.init_app(app)

CORS(app)

# 注册 API 蓝图
app.register_blueprint(api_app)

if __name__ == '__main__':
    app.run()

然后是:

# api.py
import time
import random
from flask import  request, jsonify, Blueprint
from models import db, User

app = Blueprint('api', __name__)


@app.route('/create_users', methods=['POST'])
def create_users():
    try:
        start_time = time.time()

        data = request.get_json()
        num_users = data['num_users']

        if num_users <= 0:
            return jsonify({'message': 'Number of users must be greater than 0'}), 400

        # Create an initial user if the table is empty
        if User.query.count() == 0:
            initial_user = User(
                phone_number='18140208525',
                password='123456',
                status=1,
                referrer_id=0,
                distribution_level=1,
                relationship_level=0,
                balance=random.uniform(0, 99999),
                points=random.uniform(0, 99999),
                frozen_points=random.uniform(0, 99999),
                fee=random.uniform(0, 99999),
                green_points=random.uniform(0, 99999),
                red_points=random.uniform(0, 99999)
            )
            db.session.add(initial_user)
        # Get all existing user IDs
        user_ids = [user.id for user in User.query.all()]
        # Generate and add random users
        for _ in range(num_users):
            new_user = User(
                phone_number=str(random.randint(10000000000, 99999999999)),
                password='123456',
                status=1,
                referrer_id=random.choice(user_ids),  # Random referrer from existing users
                distribution_level=random.randint(0, 5),
                relationship_level=0,  # Default to 0
                balance=random.uniform(0, 99999),
                points=random.uniform(0, 99999),
                frozen_points=random.uniform(0, 99999),
                fee=random.uniform(0, 99999),
                green_points=random.uniform(0, 99999),
                red_points=random.uniform(0, 99999)
            )
            db.session.add(new_user)
            db.session.commit()
        # 记录结束时间
        end_time = time.time()

        # 计算执行时间
        execution_time = end_time - start_time

        return jsonify({'message': f'{num_users} 个用户创建完毕', 'TIME:': f"代码执行时间为:{execution_time} 秒"}), 201

    except Exception as e:
        return jsonify({'error': str(e)}), 500





上面的代码经过简单修改(增加计时功能)后运行如下:
在这里插入图片描述
在这里插入图片描述

用户生成数据速度测试

然后经过一些简单测试后得出如下数据

{
“TIME:”: “代码执行时间为:0.02700066566467285 秒”,
“message”: “10 个用户创建完毕”
}

{
“TIME:”: “代码执行时间为:0.1758420467376709 秒”,
“message”: “100 个用户创建完毕”
}

{
“TIME:”: “代码执行时间为:1.6590464115142822 秒”,
“message”: “1000 个用户创建完毕”
}

{
“TIME:”: “代码执行时间为:16.40705704689026 秒”,
“message”: “10000 个用户创建完毕”
}

{
“TIME:”: “代码执行时间为:164.3725016117096 秒”,
“message”: “100000 个用户创建完毕”
}

然后发现一些小问题,
就是它注册的时候 推荐人的id是本次任务提交时 之前的用户id列表内随机
而不是创建用户时现查的,所以把它改到内部 再次测试
在这里插入图片描述
果然一下就蚌住了,因为当前库里以及有10w+用户

{
“TIME:”: “代码执行时间为:27.823791980743408 秒”,
“message”: “10 个用户创建完毕”
}

算了 还是改回去吧,反正只是数据填充使用
改回去后:

{
“TIME:”: “代码执行时间为:2.807732343673706 秒”,
“message”: “10 个用户创建完毕”
}

此时的数据条数:

正在显示第 0 - 24 行 (共 111153 行, 查询花费 0.0002 秒。)

未完待续。。。。 这本来是2023-09-17 日的稿子

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈钇谷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值