python Flask与微信小程序 统计管理

这篇具有很好参考价值的文章主要介绍了python Flask与微信小程序 统计管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

common/models/stat/StatDailyMember.py


DROP TABLE IF EXISTS `stat_daily_member`;

CREATE TABLE `stat_daily_member` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `date` date NOT NULL COMMENT '日期',
  `member_id` int(11) NOT NULL DEFAULT '0' COMMENT '会员id',
  `total_shared_count` int(11) NOT NULL DEFAULT '0' COMMENT '当日分享总次数',
  `total_pay_money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '当日付款总金额',
  `updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新时间',
  `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
  PRIMARY KEY (`id`),
  KEY `idx_date_member_id` (`date`,`member_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会员日统计';
flask-sqlacodegen 'mysql://root:root@127.0.0.1/food_db' --tables stat_daily_member --outfile "common/models/stat/StatDailyMember.py"  --flask

common/models/stat/StatDailySite.py

DROP TABLE IF EXISTS `stat_daily_site`;

CREATE TABLE `stat_daily_site` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `date` date NOT NULL COMMENT '日期',
  `total_pay_money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '当日应收总金额',
  `total_member_count` int(11) NOT NULL COMMENT '会员总数',
  `total_new_member_count` int(11) NOT NULL COMMENT '当日新增会员数',
  `total_order_count` int(11) NOT NULL COMMENT '当日订单数',
  `total_shared_count` int(11) NOT NULL,
  `updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新时间',
  `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
  PRIMARY KEY (`id`),
  KEY `idx_date` (`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='全站日统计';
flask-sqlacodegen 'mysql://root:root@127.0.0.1/food_db' --tables stat_daily_site --outfile "common/models/stat/StatDailySite.py"  --flask

common/models/stat/StatDailyFood.py

DROP TABLE IF EXISTS `stat_daily_food`;

CREATE TABLE `stat_daily_food` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `date` date NOT NULL,
  `food_id` int(11) NOT NULL DEFAULT '0' COMMENT '菜品id',
  `total_count` int(11) NOT NULL DEFAULT '0' COMMENT '售卖总数量',
  `total_pay_money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '总售卖金额',
  `updated_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新时间',
  `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '插入时间',
  PRIMARY KEY (`id`),
  KEY `date_food_id` (`date`,`food_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='书籍售卖日统计';
flask-sqlacodegen 'mysql://root:root@127.0.0.1/food_db' --tables stat_daily_food --outfile "common/models/stat/StatDailyFood.py"  --flask

jobs/tasks/stat/daily.py

# -*- coding: utf-8 -*-

from application import app,db
from common.libs.Helper import getFormatDate,getCurrentDate
from common.models.member.Member import Member
from common.models.pay.PayOrder import PayOrder
from common.models.stat.StatDailyFood import StatDailyFood
from common.models.stat.StatDailySite import StatDailySite
from common.models.stat.StatDailyMember import StatDailyMember
from common.models.food.WxShareHistory import WxShareHistory
from common.models.food.FoodSaleChangeLog import FoodSaleChangeLog
from sqlalchemy import func
import random
'''
python manager.py runjob -m stat/daily -a member|food|site -p 2018-07-01
'''
class JobTask():
    def __init__(self):
        pass

    def run(self, params):
        act = params['act'] if 'act' in params else ''
        date = params['param'][0] if params['param'] and len(params['param']) else getFormatDate(format="%Y-%m-%d")
        if not act:
            return

        date_from = date + " 00:00:00"
        date_to = date + " 23:59:59"
        func_params = {
            'act': act,
            'date':date,
            'date_from':date_from,
            'date_to':date_to
        }
        if act == "member":
            self.statMember( func_params )
        elif act == "food":
            self.statFood( func_params )
        elif act == "site":
            self.statSite( func_params)
        elif act == "test":
            self.test()

        app.logger.info("it's over~~")
        return

    '''
    会员统计
    '''
    def statMember(self,params):
        act = params['act']
        date = params['date']
        date_from = params['date_from']
        date_to = params['date_to']
        app.logger.info( "act:{0},from:{1},to:{2}".format( act,date_from,date_to ) )

        member_list = Member.query.all()
        if not member_list:
            app.logger.info( "no member list" )
            return

        for member_info in member_list:
            tmp_stat_member = StatDailyMember.query.filter_by( date = date,member_id = member_info.id ).first()
            if tmp_stat_member:
                tmp_model_stat_member = tmp_stat_member
            else:
                tmp_model_stat_member = StatDailyMember()
                tmp_model_stat_member.date = date
                tmp_model_stat_member.member_id = member_info.id
                tmp_model_stat_member.created_time = getCurrentDate()

            tmp_stat_pay =  db.session.query( func.sum(PayOrder.total_price).label("total_pay_money")) \
                    .filter( PayOrder.member_id  == member_info.id ,PayOrder.status == 1 )\
                    .filter( PayOrder.created_time >= date_from,PayOrder.created_time <= date_to ).first()
            tmp_stat_share_count = WxShareHistory.query.filter( PayOrder.member_id  == member_info.id  )\
                    .filter( PayOrder.created_time >= date_from,PayOrder.created_time <= date_to ).count()

            tmp_model_stat_member.total_shared_count = tmp_stat_share_count
            tmp_model_stat_member.total_pay_money = tmp_stat_pay[ 0 ] if tmp_stat_pay[ 0 ] else 0.00
            '''
            为了测试效果模拟数据
            '''
            tmp_model_stat_member.total_shared_count = random.randint(50,100)
            tmp_model_stat_member.total_pay_money = random.randint(1000,1010)
            tmp_model_stat_member.updated_time = getCurrentDate()
            db.session.add( tmp_model_stat_member )
            db.session.commit()

        return

    '''
    Food统计
    '''
    def statFood(self,params):
        act = params['act']
        date = params['date']
        date_from = params['date_from']
        date_to = params['date_to']
        app.logger.info( "act:{0},from:{1},to:{2}".format( act,date_from,date_to ) )

        stat_food_list = db.session.query(FoodSaleChangeLog.food_id, func.sum(FoodSaleChangeLog.quantity).label("total_count"),
                         func.sum(FoodSaleChangeLog.price).label("total_pay_money")) \
            .filter(FoodSaleChangeLog.created_time >= date_from, FoodSaleChangeLog.created_time <= date_to)\
            .group_by( FoodSaleChangeLog.food_id ).all()

        if not stat_food_list:
            app.logger.info("no data")
            return

        for item in stat_food_list:
            tmp_food_id = item[ 0 ]
            tmp_stat_food = StatDailyFood.query.filter_by(date=date, food_id = tmp_food_id ).first()
            if tmp_stat_food:
                tmp_model_stat_food = tmp_stat_food
            else:
                tmp_model_stat_food = StatDailyFood()
                tmp_model_stat_food.date = date
                tmp_model_stat_food.food_id = tmp_food_id
                tmp_model_stat_food.created_time = getCurrentDate()

            tmp_model_stat_food.total_count = item[1]
            tmp_model_stat_food.total_pay_money = item[2]
            tmp_model_stat_food.updated_time = getCurrentDate()

            '''
            为了测试效果模拟数据
            '''
            tmp_model_stat_food.total_count = random.randint(50, 100)
            tmp_model_stat_food.total_pay_money = random.randint(1000, 1010)

            db.session.add( tmp_model_stat_food )
            db.session.commit()

        return
    '''
    site统计
    '''
    def statSite(self,params):
        act = params['act']
        date = params['date']
        date_from = params['date_from']
        date_to = params['date_to']
        app.logger.info( "act:{0},from:{1},to:{2}".format( act,date_from,date_to ) )

        stat_pay = db.session.query(func.sum(PayOrder.total_price).label("total_pay_money")) \
            .filter(PayOrder.status == 1) \
            .filter(PayOrder.created_time >= date_from, PayOrder.created_time <= date_to).first()

        stat_member_count = Member.query.count()
        stat_new_member_count = Member.query.filter(Member.created_time >= date_from,
                            Member.created_time <= date_to).count()

        stat_order_count = PayOrder.query.filter_by( status = 1 )\
            .filter(PayOrder.created_time >= date_from, PayOrder.created_time <= date_to)\
            .count()

        stat_share_count = WxShareHistory.query.filter(WxShareHistory.created_time >= date_from
            , WxShareHistory.created_time <= date_to).count()

        tmp_stat_site = StatDailySite.query.filter_by(date=date).first()
        if tmp_stat_site:
            tmp_model_stat_site = tmp_stat_site
        else:
            tmp_model_stat_site = StatDailySite()
            tmp_model_stat_site.date = date
            tmp_model_stat_site.created_time = getCurrentDate()

        tmp_model_stat_site.total_pay_money = stat_pay[ 0 ] if stat_pay[ 0 ] else 0.00
        tmp_model_stat_site.total_new_member_count = stat_new_member_count
        tmp_model_stat_site.total_member_count = stat_member_count
        tmp_model_stat_site.total_order_count = stat_order_count
        tmp_model_stat_site.total_shared_count = stat_share_count
        tmp_model_stat_site.updated_time = getCurrentDate()
        '''
        为了测试效果模拟数据
        '''
        tmp_model_stat_site.total_pay_money = random.randint(1000, 1010)
        tmp_model_stat_site.total_new_member_count = random.randint(50, 100)
        tmp_model_stat_site.total_member_count += tmp_model_stat_site.total_new_member_count
        tmp_model_stat_site.total_order_count = random.randint(900, 1000)
        tmp_model_stat_site.total_shared_count = random.randint(1000, 2000)
        db.session.add(tmp_model_stat_site)
        db.session.commit()

    def test(self):
        import datetime
        from common.libs.Helper import getFormatDate
        now = datetime.datetime.now()
        for i in reversed( range( 1,30 ) ):
            date_before = now + datetime.timedelta( days = -i )
            date = getFormatDate( date = date_before,format = "%Y-%m-%d" )
            tmp_params = {
                'act': 'test',
                'date': date,
                'date_from': date + " 00:00:00",
                'date_to':  date + " 23:59:59"
            }
            self.testFood( date )
            self.statFood( tmp_params )
            self.statMember( tmp_params )
            self.statSite( tmp_params )

    def testFood(self,date):
        from common.models.food.Food import Food
        list = Food.query.all()
        if list:
            for item in list:
                model =  FoodSaleChangeLog()
                model.food_id =  item.id
                model.quantity =  random.randint( 1,10 )
                model.price = model.quantity * item.price
                model.member_id = 1
                model.created_time = date + " " + getFormatDate( format = "%H:%M:%S")
                db.session.add( model )
                db.session.commit()

statMember(self, params)

这段代码是一个函数statMember的实现,它接受一个参数params,其中包含了actdatedate_fromdate_to等信息。函数的主要功能是统计会员信息。

首先,函数会根据传入的参数打印出actdate_fromdate_to的值。然后,它会查询数据库中的所有会员信息,并进行遍历。

在遍历过程中,函数会根据日期和会员ID查询对应的每日会员统计信息StatDailyMember。如果找到了对应的记录,则将其赋值给tmp_model_stat_member;否则,创建一个新的StatDailyMember对象,并设置其日期、会员ID和创建时间。

接下来,函数会使用数据库查询语句计算该会员的总支付金额,并将结果保存在total_pay_money字段中。

最后,函数会返回统计结果。

statSite(self,params)

这段代码是一个函数statSite的定义,它接受一个参数params。函数内部首先从params中获取actdatedate_fromdate_to的值,并将它们打印出来。

接下来,函数使用SQLAlchemy进行数据库查询,统计了以下几个指标:

  1. stat_pay:计算了满足条件的支付订单的总金额。
  2. stat_member_count:统计了会员的总数量。
  3. stat_new_member_count:统计了在指定日期范围内新注册的会员数量。
  4. stat_order_count:统计了在指定日期范围内已支付的订单数量。
  5. stat_share_count:统计了在指定日期范围内的分享历史数量。

请注意,这段代码中使用了一些数据库模型(如PayOrderMemberWxShareHistory),以及一些SQLAlchemy的查询方法(如filter()count()first())来实现数据统计功能。

.count()

count()是一个用于统计字符串、列表、元组等可迭代对象中某个元素出现的次数的方法。它可以用于字符串、列表、元组等数据类型。

在字符串中,.count()方法可以统计指定字符或子字符串在字符串中出现的次数。例如:

python

string = "Hello, World!"
count = string.count("o")
print(count)  # 输出结果为2

在列表和元组中,.count()方法可以统计指定元素在列表或元组中出现的次数。例如:

python

my_list = [1, 2, 3, 4, 2, 2]
count = my_list.count(2)
print(count)  # 输出结果为3

.count()方法返回的是指定元素在可迭代对象中出现的次数。

test(self)

(imooc) [root@localhost order]# python manager.py runjob -m stat/daily -a test

加载30天的数据到数据库

这段代码是一个名为test的函数,它包含了一些操作。让我逐步解释一下:

  1. 首先,代码导入了datetime模块和getFormatDate函数。
  2. 然后,创建了一个当前时间的变量now,使用datetime.datetime.now()获取当前时间。
  3. 接下来,使用一个反向的循环,从1到29,创建一个变量date_before,表示当前时间减去i天的日期。
  4. 使用getFormatDate函数将date_before格式化为"%Y-%m-%d"的日期格式,并赋值给变量date
  5. 创建一个临时参数字典tmp_params,包含了一些键值对。
  6. 调用了self.testFood(date)函数,传入了date作为参数。
  7. 调用了self.statFood(tmp_params)函数,传入了tmp_params作为参数。
  8. 调用了self.statMember(tmp_params)函数,传入了tmp_params作为参数。
  9. 调用了self.statSite(tmp_params)函数,传入了tmp_params作为参数。

这段代码的作用是进行一系列的测试、统计操作,根据不同的日期进行相应的处理。文章来源地址https://www.toymoban.com/news/detail-826456.html

到了这里,关于python Flask与微信小程序 统计管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【附源码】基于flask框架的音乐专辑微信小程序 (python+mysql+论文)

    本系统(程序+源码)带文档lw万字以上   文末可获取本课题的源码和程序 选题背景: 在当今数字化时代,音乐作为一种重要的文化娱乐形式,已经深入人们的日常生活。随着互联网技术的快速发展,人们获取和分享音乐的方式也发生了巨大的变化。从传统的实体唱片到在线

    2024年04月25日
    浏览(46)
  • 英语在线学习考试系统 微信小程序python(flask+django)/thinkphp/nodejs/

    小程序Android端运行软件  微信开发者工具/hbuiderx uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。 前端:HTML5,CSS3 VUE 后端:java(springboot+ssm)/python(flask+django)/thinkphp/nodejs/ 开发运行:微信开发者/hbuilderx 后端:idea/eclipse/vscode/pyc

    2024年04月15日
    浏览(65)
  • 【附源码】基于flask框架基于微信小程序的食疗坊软件开发 (python+mysql+论文)

    本系统(程序 + 源码)带文档 lw 万字以上   文末可获取本课题的源码和程序 选题背景: 随着科技的快速发展和智能手机的普及,微信小程序作为一种轻量级应用,已经渗透到人们日常生活的方方面面。它无需下载安装,即用即走的特点深受用户喜爱。在健康饮食领域,人们

    2024年04月08日
    浏览(74)
  • PHP微信小程序的傣族节日及民间故事推广小程序python-flask-django-nodejs

    互联网的兴起从本质上改变了整个社会对信息的管理方式,国内各大市场从上个世纪90年代互联网兴起之时,就产生了通过网络进行系统管理的想法。但是由于在互联网上的信誉难以认证、网络的法规政策不健全等一系列的原因,限制了网上信息管理发展的步伐。进入21世纪以

    2024年04月08日
    浏览(56)
  • 【附源码】基于flask框架基于微信小程序的二手电商平台设计与实现 (python+mysql+论文)

    本系统(程序 + 源码)带文档 lw 万字以上   文末可获取本课题的源码和程序 选题背景: 随着互联网的高速发展,电子商务已经成为人们生活中不可或缺的一部分。特别是近年来,微信小程序以其便捷性和高效性,迅速在电商领域崭露头角。然而,尽管电商平台如雨后春笋般

    2024年04月13日
    浏览(64)
  • 【附源码】基于flask框架基于微信小程序的河南省美食分享平台 后台(python+mysql+论文)

    本系统(程序+源码)带文档lw万字以上   文末可获取本课题的源码和程序 选题背景: 随着移动互联网的飞速发展,微信小程序以其无需下载安装、使用方便的特点,逐渐成为人们日常生活中获取信息和进行交流的重要工具。特别是在美食分享领域,人们对各地特色美食的了

    2024年04月27日
    浏览(46)
  • 用户登录案例练习(flask+微信小程序)

    目录 flask 微信小程序 1.项目后端步骤 具体步骤可参考flask官网:flask 中文网 (1)创建虚拟环境 (2)激活虚拟环境 (3)在虚拟环境里边安装Flask (4) 粘贴官网的最小flask代码 (5)启动flask服务 2.代码书写 3.运行flask测试  在index.wxml中添加用户登录的标签 在index.js书写函数

    2024年02月16日
    浏览(42)
  • 搭建flask后端和微信小程序前端

    目录 一、准备工作 (1)我的前端代码 (2)我的后端代码 (3)后端运行成功的截图 (4)前端运行成功的截图  (5)整体运行成功的截图 二、部署后端  (1)在腾讯云的学生入口处购买服务器(建议选择ubuntu系统),设置管理秘钥,方便在本地远程连接。 (2)在本地的

    2024年02月04日
    浏览(56)
  • 微信小程序 |基于Flask框架实现智能菜谱小程序

    每次去饭店吃好吃的,你有没有遇到过一两个让你觉得很想学会做的菜品,这个时候又不好直接去问厨师,又奈何自己的手艺不行! 所以,就算我们不知道,但我们总会有办法知道,于是我选择让 AI 这位大厨告诉我! 直接通过拍照识别你想要知道的菜品,就能知道其制作的

    2023年04月08日
    浏览(59)
  • 微信小程序的人工智能模型部署(flask)

    目录 写在前面: 具体做法: 后端: 前端: 其他: 我使用的微信小程序开发工具是:“微信开发者工具”,当然你用其他的开发工具应该也差别不大; 人工智能模型用的是pytorch; 具体不介绍人工智能模型的保存,主要介绍一下flask的写法; 首先你要把人工智能模型先保存

    2024年02月15日
    浏览(100)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包