1. 程式人生 > >查看新的類方法代碼時

查看新的類方法代碼時

折扣 循環 刪除 ESS 它的 rate send lis content

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 = [ 何柏喜<[email protected]>, ] cc = [ # ‘孫振強163<[email protected]>‘, ] 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")

查看新的類方法代碼時