首页 > 其他 > 详细

查看新的类方法代码时

时间:2019-04-18 17:33:37      阅读:113      评论:0      收藏:0      [点我收藏+]

 

1 写出它的方法

2 可以查找方法在那里调用了,注释掉调用就好,不用注释全部代码

3 先运行,再查找问题.

 

 

分类思维导图方法:

技术分享图片

 

 

import datetime

from openpyxl import load_workbook

from app import app, db
from app.config.mail import MailConfig
from app.utils.row_2_dictionary import rows_2_list, row_2_dictionary
from app.utils.x_logger import logger
from app.utils.xdo import XDO


# 门店销售日报
class OrgSalesDaily:
    sales_date = ""

    # 获取sql语句,By sql文件
    @staticmethod
    def _get_sql(name, params=None):
        return XDO.get_sql_by_file(org_sales_daily/ + name, params)

    # 获取list, By sql文件
    def _read_list_by_sql(self, name, params4sql=None, params4exec=None):
        sql = self._get_sql(name, params4sql)
        rows = db.session.execute(sql, params=params4exec)
        return rows_2_list(rows)

    # 保存列表数据
    def _save_daily_field_base_list(self, obj_list, field_name):
        for obj_dict in obj_list:
            sql = XDO().get_update_sql(szq.org_sales_daily, {
                field_name: obj_dict[field_name],
            }, org_id = " + str(obj_dict[org_id]) + " AND sales_date = " + self.sales_date + ")
            db.session.execute(sql)

    # 获取:生成门店销售日报
    def make_org_sales_daily(self, sales_date):
        self.sales_date = sales_date

        # 删除:清除此日的数据
        sql = DELETE FROM szq.org_sales_daily WHERE sales_date = " + sales_date + "
        db.session.execute(sql)

        # 获取:获取门店此日销售数据并写入
        obj_list = self._read_list_by_sql(1, {"sales_date": sales_date})
        if obj_list:
            sql = XDO().get_inserts_sql(szq.org_sales_daily, obj_list)
            db.session.execute(sql)

        # 获取:充值金额销售数据
        obj_list = self._read_list_by_sql(2, {"sales_date": sales_date})

        for obj_dict in obj_list:
            # 获取:对应组织此日销售数据
            sql = SELECT * FROM szq.org_sales_daily WHERE org_id = " + str(
                obj_dict[org_id]) + " AND sales_date = " + sales_date + "
            row = db.session.execute(sql).fetchone()
            info_dict = row_2_dictionary(row)

            # 计算实际销售额
            sales_amount = int(info_dict[sales_amount]) - int(obj_dict[charge_pay]) + int(
                obj_dict[charge_pay_discount])
            # 计算实际毛利额
            sales_gross_amount = sales_amount - int(info_dict[cost_amount])

            sql = XDO().get_update_sql(szq.org_sales_daily, {
                "charge_pay": obj_dict[charge_pay],
                "charge_pay_discount": obj_dict[charge_pay_discount],
                "sales_amount": sales_amount,
                "sales_gross_amount": sales_gross_amount,
                "sales_gross_rate": round((sales_gross_amount / sales_amount), 4),
            }, id = " + str(info_dict[id]) + ")
            db.session.execute(sql)

        # 获取:当日通货销售额
        obj_list = self._read_list_by_sql(12, {"sales_date": sales_date})
        self._save_daily_field_base_list(obj_list, sales_currency_amount)

        # 获取:当日充值额
        obj_list = self._read_list_by_sql(3, {"sales_date": sales_date})
        self._save_daily_field_base_list(obj_list, charge_amount)

        # 获取:新超级会员
        obj_list = self._read_list_by_sql(4, {"sales_date": sales_date})
        self._save_daily_field_base_list(obj_list, svip_count)

        # 获取:新奶粉超级会员
        obj_list = self._read_list_by_sql(5, {"sales_date": sales_date}, {nf: 奶粉%})
        self._save_daily_field_base_list(obj_list, svip_nf_count)

        # 获取:新纸品超级会员
        obj_list = self._read_list_by_sql(6, {"sales_date": sales_date}, {nb: 纸品%})
        self._save_daily_field_base_list(obj_list, svip_nb_count)

        # 获取:购买小票数
        obj_list = self._read_list_by_sql(11, {"sales_date": sales_date})
        self._save_daily_field_base_list(obj_list, ticket_count)

        # 获取:购买客户数
        obj_list = self._read_list_by_sql(7, {"sales_date": sales_date})
        self._save_daily_field_base_list(obj_list, member_count)

        # 获取:新会员数
        obj_list = self._read_list_by_sql(13, {"sales_date": sales_date})
        self._save_daily_field_base_list(obj_list, new_member_count)

        # 补全:客单价
        sql = ‘‘‘UPDATE szq.org_sales_daily SET member_average = ROUND(sales_amount / member_count)
              WHERE sales_date = "%(sales_date)s" AND member_count > 0‘‘‘ % {"sales_date": sales_date}
        db.session.execute(sql)

        db.session.commit()

    # 获取:生成门店销售月报
    def make_org_sales_monthly(self, sales_date):
        # 计算月份:本月,格式:0000-00
        this_month = sales_date[0:7]
        # 计算日期:本月首日,格式:0000-00-00
        this_month_begin = this_month + "-01"
        # 计算时间:本月首日,格式:datetime
        this_month_begin_datetime = datetime.datetime.strptime(this_month_begin, "%Y-%m-%d")
        this_month_today_datetime = datetime.datetime.strptime(sales_date, "%Y-%m-%d")
        # 计算时间:上月末日,格式:datetime
        last_month_end_datetime = this_month_begin_datetime - datetime.timedelta(days=1)
        # 计算月份:上月,格式:0000-00
        last_month = last_month_end_datetime.strftime("%Y-%m")
        # 计算日期:上月首日,格式:0000-00-00
        last_month_begin = last_month + "-01"

        # 生成月度数据,如果存在则替换
        sql = self._get_sql(9, {
            "begin_date": this_month_begin,
            "sales_date": sales_date
        })
        db.session.execute(sql)

        # 计算日期:上月今天
        if int(last_month_end_datetime.strftime("%d")) < int(sales_date[8:10]):
            last_month_today = last_month_end_datetime.strftime("%Y-%m-%d")
        else:
            last_month_today = last_month + "-" + sales_date[8:10]

        # 完善月度数据
        sql = self._get_sql(15, {
            "last_month": last_month,
            "last_month_begin": last_month_begin,
            "last_month_end": last_month_today,
            "sales_month": this_month
        })
        db.session.execute(sql)

        sql = self._get_sql(17, {
            "last_month": last_month,
            "last_month_begin": last_month_begin,
            "last_month_end": last_month_today,
            "sales_month": this_month
        })
        db.session.execute(sql)

        sql = self._get_sql(18, {
            "last_month": last_month,
            "last_month_begin": last_month_begin,
            "last_month_end": last_month_today,
            "sales_month": this_month
        })
        db.session.execute(sql)

        sql = self._get_sql(19, {
            "last_month": last_month,
            "last_month_begin": last_month_begin,
            "last_month_end": last_month_today,
            "sales_month": this_month
        })
        db.session.execute(sql)

        # 计算时间:去年开始,格式:datetime
        last_year = str(int(sales_date[0:4]) - 1)
        last_year_begin = last_year + this_month_begin[4:]
        last_year_begin_datetime = datetime.datetime.strptime(last_year_begin, "%Y-%m-%d")
        last_year_end_datetime = last_year_begin_datetime + datetime.timedelta(days=int(sales_date[8:10]) - 1)
        last_year_end = last_year_end_datetime.strftime("%Y-%m-%d")

        # 增加同比
        sql = self._get_sql(20, {
            "begin": last_year_begin,
            "end": last_year_end,
            "sales_month": this_month
        })
        db.session.execute(sql)

        next_date = this_month_begin_datetime
        step_date = datetime.timedelta(days=1)

        while next_date <= this_month_today_datetime:
            this_date = next_date.strftime("%Y-%m-%d")
            next_date += step_date

            sql = self._get_sql(16, {
                "sales_date": this_date,
                "sales_month": this_month,
                "day": str(int(this_date[8:10]))
            })
            db.session.execute(sql)

        # 更新上月数据
        sql = ‘‘‘UPDATE szq.org_sales_daily SET member_average = ROUND(sales_amount / member_count)
              WHERE sales_date = "%(sales_date)s" AND member_count > 0‘‘‘ % {"sales_date": sales_date}
        db.session.execute(sql)

    # 生成单门店excel
    def make_excel(self, sales_date):
        # 获取数据
        sql = self._get_sql(8, {
            "sales_date": sales_date
        })

        rows = db.session.execute(sql)
        obj_list = rows_2_list(rows)

        # 指定Excel模板
        file_path = app.root_path + /xlsx/shop_sales_daily_20181016.xlsx

        # 打开模板
        wb = load_workbook(file_path)

        # 获取第一个sheet
        ws = wb[wb.sheetnames[0]]

        ws[D1] = sales_date

        # 定义起始行、列
        x = 1
        y = 4

        # 循环数据写入sheet
        for obj_dict in obj_list:
            for key in obj_dict:
                value = obj_dict[key]

                if value and hasattr(value, isdigit) and value.replace(".", ‘‘).isdigit():
                    value = eval(value)

                ws.cell(row=y, column=x, value=value)
                x += 1

            x = 1
            y += 1

        # 获取当月累计数据
        sql = self._get_sql(14, {
            "start_date": sales_date[0:8] + "01",
            "sales_date": sales_date
        })

        rows = db.session.execute(sql)
        obj_list = rows_2_list(rows)

        # 获取第二个sheet
        ws = wb[wb.sheetnames[1]]

        ws[D1] = sales_date

        # 定义起始行、列
        x = 1
        y = 4

        # 循环数据写入sheet
        for obj_dict in obj_list:
            for key in obj_dict:
                value = obj_dict[key]

                if value and hasattr(value, isdigit) and value.replace(".", ‘‘).isdigit():
                    value = eval(value)

                ws.cell(row=y, column=x, value=value)
                x += 1

            x = 1
            y += 1

        # 保存excel文件
        wb.save(app.root_path + /../tmp/org_sales_daily_ + sales_date + .xlsx)
        # wb.save(app.root_path + ‘/../tmp/门店看板_日报_‘ + sales_date + ‘_V2.3.xlsx‘)

    def send_mail(self, sales_date):
        from app.utils.mail import MailUtils

        mail_utils = MailUtils()
        mail_utils.server_host = MailConfig.server_host
        mail_utils.server_port = MailConfig.server_port
        mail_utils.login_user = MailConfig.login_user
        mail_utils.login_pass = MailConfig.login_pass
        mail_utils.mail_from = MailConfig.mail_from

    
        to = [

            何柏喜<hebaixi@mabao51.net>,

        ]

        cc = [
            # ‘孙振强163<13488155595@163.com>‘,
        ]

        subject = "门店看板_日报_" + sales_date + "_V2.3"

        content = """您好!<br>
        <br>
        附件是%(sales_date)s门店看板_日报,请查收。<br>
        <br>
        说明:<br>
        1、由于华创系统问题导致财务核算出错,2018年12月27日起将超级会员账本进行合并,合并后的新办超级会员统计数据存在不准确的情况。<br>
        2、门店销售额已对充值赠送消费金额进行折扣计算;<br>
        3、门店销售额中包含服务类(游泳等)销售额,目前尚未剔除;<br>
        4、如有问题,请联系孙振强(13488155595)。<br>
        <br>
        祝工作顺利!<br>
        """ % {"sales_date": sales_date}

        attachments = [
            {
                "file_path": app.root_path + /../tmp/org_sales_daily_ + sales_date + .xlsx,
                "file_name": 门店看板_日报_ + sales_date + .xlsx,
            }
        ]

        mail_utils.send_mail_by_cfg(to, subject, content, cc, attachments)

    def todo(self, sales_date):
        logger.debug(Start: make_org_sales_daily  + sales_date)

        self.make_org_sales_daily(sales_date)
        self.make_org_sales_monthly(sales_date)
        self.make_excel(sales_date)
        self.send_mail(sales_date)

        logger.debug(Finish: make_org_sales_daily  + sales_date)

    def todo_batch(self, begin_date, end_date):
        begin = datetime.datetime.strptime(begin_date, "%Y-%m-%d")
        end = datetime.datetime.strptime(end_date, "%Y-%m-%d")

        next_date = begin
        step_date = datetime.timedelta(days=1)

        while next_date <= end:
            sales_date = next_date.strftime("%Y-%m-%d")
            next_date += step_date

            # 打印日期
            logger.debug(Start: make_org_sales_daily  + sales_date)

            self.make_org_sales_daily(sales_date)
            self.make_org_sales_monthly(sales_date)
            self.make_excel(sales_date)


if __name__ == __main__:
    # OrgSalesDaily().todo("2019-03-31")
    # A= 7
    OrgSalesDaily().todo_batch("2019-03-04", "2019-03-05")

 

查看新的类方法代码时

原文:https://www.cnblogs.com/sakura3/p/10730943.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!