查看新的類方法代碼時
阿新 • • 發佈:2019-04-18
折扣 循環 刪除 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 importlogger 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")
查看新的類方法代碼時