自动化脚本获取数据 one and two

     最近写了一个自动化脚本,用来从网站上和mysql数据库中获取数据,进行处理之后将其插入到excel表格之中,但是速度很慢,之后换了一种思路,速度提高了75%,现在记载一下,以顾后期回顾:

    思路一:1、爬虫下载邮政和寄件的数据(表格形式)将其储存在文件夹中。

                  2、然后分别从文件夹中将三个总对总数表格和邮政以及寄件的excel表格插入到excel中并利用excel的公式处理表格中的数据。

                  3、用Python从mysql中提取数据并将其插入到excel中去。

   代码如下:

# coding=gbk
import time
import warnings
import json
import requests
from bs4 import BeautifulSoup
from pythonds.basic.queue import Queue
warnings.filterwarnings("ignore")
from datetime import datetime, date, timedelta
from openpyxl import load_workbook #openpyxl 版本必须是2.4.2,否则出错
from sqlalchemy import create_engine
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
import pandas as pd
pd.set_option('display.max_columns',None)
pd.set_option('display.width',1500)
pd.set_option('display.max_columns', 100)
pd.set_option('display.colheader_justify','left')

'''爬虫下载邮政和寄件的数据(表格形式)将其储存在文件夹中
   然后分别从文件夹中将三个总对总数表格和邮政以及寄件的excel表格插入到excel中并利用excel的公式处理表格中的数据
   用Python从mysql中提取数据并将其插入到excel中去'''



#投件收入(总对总)
class cost():
	def __init__(self,d):
		self.d = d # 提前1天
		self.yesterday = (date.today() + timedelta(days=-self.d)).strftime("%Y-%m-%d")  # 昨日的日期
		self.today = (date.today() + timedelta(days=-(self.d-1))).strftime("%Y-%m-%d")  # 今日的日期
		self.con = create_engine('mysql+pymysql://dingdingdangdang:aiwujiwu145.245.1.10:3306/001ribao')
		self.headers_youzheng = 'dream'
		self.headers_jijian =  "what is up"
		self.cookies_youzheng = {'梦幻花'}
		self.cookies_jijian = {'井中月'}
		
		self.today_model1 = r'E:\新报日报_自动化报表\营业日报.xlsx'
		self.youzheng = r'E:\邮政\{}_{}.xlsx'.format(self.yesterday,self.yesterday)
		self.jingdong = r'E:\zongduizong\jingdong\{}.csv'.format(self.yesterday)
		self.jijian = r'E:\寄件总对总的数据\{}.xlsx'.format(self.yesterday)
		self.debang = r'E:\zongduizong\debang\{}.csv'.format(self.yesterday)
		self.dhl = r'E:\zongduizong\DHL\{}.csv'.format(self.yesterday)
		self.youzheng_export()
		self.jijian_export()

	def youzheng_export(self):
		print('数据爬取下载......')
		print('1、邮政数据开始下载......')
		
		'''下载邮政数据详情'''
		# 第一步 先将邮政数据信息下载下来
		data = {'id': 124, 'time_type': 1, 'from_date': self.yesterday, 'to_date': self.yesterday}
		r = requests.post('https://bass.sudiyi.cn/api/v2/data/warehouses/124/export', data, cookies=self.cookies_youzheng,
						  verify=False)
		# 再找到参数
		html = '数据准备中'  # 刚开始数据尚未准备好
		while html != '已完成':
			time.sleep(6)
			try:
				r1 = requests.get(url='https://bass.sudiyi.cn/api/v2/data/export/tasks?per=20&date_type=1',
								  headers=self.headers_youzheng, cookies=self.cookies_youzheng, verify=False)
			except Exception as e:
				print('youzheng_data 刷新网页时出错:%s' % e)
			else:
				html = r1.text  # <class 'bytes'> 存放字节码 text存放 .content编码后的字符串
				html1 = json.loads(html)['data']['list'][0]
				html = html1['status']
				print(html + '...')
		canshu = html1['file'].split('_')[-1][:-5]
		try:
			target_url = 'https://bass.sudiyi.cn/api/v2/data/export/download?file=%E5%8D%95%E6%97%A5_%E9%82%AE%E6%94%BFEMS%E6%95%B0%E6%8D%AE_{0}_{1}_{2}.xlsx'.format(
				self.yesterday, self.yesterday, int(canshu))
			req = requests.get(url=target_url, headers=self.headers_youzheng, cookies=self.cookies_youzheng, verify=False)
		except Exception as e:
			print('youzheng_data 导出下载链接出现问题:', e)
		else:
			html = req.text  # <class 'bytes'> 存放字节码 text存放 .content编码后的字符串
			html = json.loads(html)
			target_url2 = html['data']['name']
			try:
				req = requests.get(url=target_url2, headers=self.headers_youzheng, cookies=self.cookies_youzheng, verify=False)
			except Exception as e:
				print('邮政下载数据出现问题', e)
			else:
				html = req.content  # <class 'bytes'> 存放字节码 text存放 .content编码后的字符串
				daily_machine_data_lujin = r'C:\Users\lenovo\Desktop\邮政数据\%s_%s.xlsx' % (self.yesterday, self.yesterday)
				with open(daily_machine_data_lujin, 'wb') as e:
					e.write(html)
				# 将邮政数据和自营城市进行匹配
				df = pd.read_excel(daily_machine_data_lujin)
				df1 = pd.read_excel(r'C:\Users\lenovo\Desktop\2018年中邮速递易年度数据分析报告\派件事业部-城市匹配表.xlsx')[['运营城市']].rename(
					columns={'运营城市': '运营城市名'})
				df2 = pd.merge(df, df1, on='运营城市名').set_index('设备ID')
				df2.to_excel(r'E:\邮政\%s_%s.xlsx' % (self.yesterday, self.yesterday))
				print('邮政数据下载成功')
				
	def jijian_export(self):
		print('2、寄件数据开始下载......')
		s = Queue()
		target_url1 = 'https://tderp.biyoshop.com/a/sudiyi/app/mailing/list?startTime=&endTime=&beginTime={}+00%3A00%3A00&endingTime={}+00%3A00%3A00&orderNo=&userPhone=&beginSignTime=&endSignTime=&parcelType=-1&status=&receiverMobile=&userProvince=&sendProvinceCode=&userCity=&userDistrict=&bagCode=&cancelReason=%E5%85%A8%E9%83%A8&device=&receiverProvince=&receiverProvinceCode=&receiverCity=&receiverDistrict=&deviceCode=&boxNo=&expressNo=&merchantCode=&outOrderNo=&page.orderBy='.format(
			self.yesterday, self.today)
		try:
			req = requests.get(url=target_url1, headers=self.headers_jijian, cookies=self.cookies_jijian, verify=False)
		except Exception as e:
			print('寄件数据爬取出现问题', e)
		else:
			html = req.text
			soup = BeautifulSoup(html)
			a = soup.find_all('td')
			for i in a:
				a = s.dequeue()
				w = i.string.strip() if isinstance(i.string, str) else i.string
				a.append(w)
				s.enqueue(a)
		q = ['操作', '寄件订单号', '商家名称', '快递单号', '下单时间', '投递时间', '订单类型', '订单状态', '寄件人姓名', '寄件区域', '收件人姓名', '收件区域', '应支付金额',
			 '实付金额', '快递员', '快递网点', '物流公司', '平台订单号']
		data_ = {i: s.dequeue() for i in q}
		pd.DataFrame(data=data_).to_excel(r'E:\寄件总对总的数据\{}.xlsx'.format(self.yesterday))
		print('寄件数据下载完成')
		print('数据下载完成')
	def sql(self):
		print('数据插入开始')
		wb = load_workbook(filename=self.today_model1)
		ws = wb['Sheet2']
		
		#2019年数据
		
		yuju = "(SELECT `设备类型`,(sum(`收入总额(元)`)/10000)金额 from `经分-设备大表` where `时间` = DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市')  and `设备类型` in ( '一代柜', '二代柜', '易邮柜','信报箱') GROUP BY `设备类型`)	UNION ALL	(SELECT `设备类型`,(sum(`收入总额(元)`)/10000) from `经分-设备大表` where `时间` BETWEEN  date_sub(date_sub(CURDATE( ),interval extract(day from now()) - 1 day),interval 0 month) and DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN  ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜','信报箱') GROUP BY `设备类型`) 	UNION ALL	(SELECT '派件收入',(sum(`派件收入`)/10000)投件收入 from `经分-设备大表` where `时间` = DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN  ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜'))	UNION ALL	(SELECT '预约收入',(sum(`预约收入`)/10000)预约收入 from `经分-设备大表` where `时间` = DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN  ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜'))	UNION ALL (SELECT '超期收入',(sum(`取件收入`)/10000)超期收入 from `经分-设备大表` where `时间` = DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市')  and `设备类型` in ( '一代柜', '二代柜', '易邮柜'))	UNION ALL	(SELECT '投件收入月',(sum(`派件收入`)/10000)投件收入 from `经分-设备大表` where `时间` BETWEEN date_sub(date_sub(CURDATE( ),interval extract(day from now()) - 1 day),interval 0 month) and DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市')  and `设备类型` in ( '一代柜', '二代柜', '易邮柜'))	UNION ALL	(SELECT '预约收入月',(sum(`预约收入`)/10000)预约收入 from `经分-设备大表` where `时间` BETWEEN date_sub(date_sub(CURDATE( ),interval extract(day from now()) - 1 day),interval 0 month) and DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN  ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜'))	UNION ALL	(SELECT '超期收入月',(sum(`取件收入`)/10000)超期收入 from `经分-设备大表` where `时间` BETWEEN date_sub(date_sub(CURDATE( ),interval extract(day from now()) - 1 day),interval 0 month) and DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市')  and `设备类型` in ( '一代柜', '二代柜', '易邮柜')) UNION ALL (SELECT '派件收入_无总对总',(sum(`收入总额(元)`)/10000) from `经分-设备大表` where `时间` = DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜'))".format(self.d,self.d,self.d,self.d,self.d,self.d,self.d,self.d,self.d)
		data_sql1 = pd.read_sql_query(yuju, self.con)
		data_sql1['类型'] =['一代柜1','二代柜1','信报箱1','易邮柜1','一代柜2','二代柜2','信报箱2','易邮柜2','派件收入','预约收入','超期收入','投件收入月','预约收入月','超期收入月','派件收入_无总对总']
		data_sql1 = data_sql1.set_index('类型').reindex(['一代柜1','二代柜1','易邮柜1','信报箱1','一代柜2','二代柜2','易邮柜2','信报箱2','派件收入','预约收入','超期收入','投件收入月','预约收入月','超期收入月','派件收入_无总对总'])
		data_sql1 = data_sql1.pivot_table(columns = '类型',fill_value = '金额' )[['一代柜1','二代柜1','易邮柜1','信报箱1','一代柜2','二代柜2','易邮柜2','信报箱2','派件收入','预约收入','超期收入','投件收入月','预约收入月','超期收入月','派件收入_无总对总']]
		
		
		#2018年同比数据
		yuju1 = "( SELECT `设备类型`,(sum( `收入总额(元)` )/10000) 金额 FROM `经分-设备大表` WHERE	`时间` =  DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' )	AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市')	AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜', '信报箱' ) GROUP BY	`设备类型`) UNION ALL 	(SELECT	`设备类型`,	(sum( `收入总额(元)` )/10000) FROM	`经分-设备大表` WHERE	`时间` BETWEEN  date_sub(date_sub( date_format( now( ), '%%y-%%m-%%d' ), INTERVAL extract( DAY FROM now( ) ) - 1 DAY ),INTERVAL 1 YEAR)	AND DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' )	AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市')	AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜', '信报箱' )GROUP BY	`设备类型`	) UNION ALL	(SELECT	'派件收入',	(sum( `派件收入` )/10000) 投件收入 FROM	`经分-设备大表` WHERE	`时间` = DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' )AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市')	AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' )	) UNION ALL	(SELECT	'预约收入',	(sum( `预约收入` )/10000) 预约收入 FROM	`经分-设备大表` WHERE	`时间` = DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' )	AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市')	AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' )	) UNION ALL	(SELECT	'超期收入',	(sum( `取件收入` )/10000) 超期收入 FROM	`经分-设备大表` WHERE	`时间` = DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' )	AND `运营城市_系统` IN  ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' )	) UNION ALL 	(SELECT	'投件收入月',	(sum( `派件收入` )/10000) 投件收入 FROM	`经分-设备大表` WHERE	`时间` BETWEEN  date_sub(	date_sub( date_format( now( ), '%%y-%%m-%%d' ), INTERVAL extract( DAY FROM now( ) ) - 1 DAY ),	INTERVAL 1 YEAR	)	AND DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' )	AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市')  AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' )	) UNION ALL	(SELECT	'预约收入月',	(sum( `预约收入` )/10000) 预约收入 FROM	`经分-设备大表` WHERE	`时间` BETWEEN  date_sub(	date_sub( date_format( now( ), '%%y-%%m-%%d' ), INTERVAL extract( DAY FROM now( ) ) - 1 DAY ),	INTERVAL 1 YEAR	)	AND DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' )	AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市')	AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' )	) UNION ALL 	(SELECT	'超期收入月',	(sum( `取件收入` )/10000) 超期收入 FROM	`经分-设备大表` WHERE	`时间` BETWEEN  date_sub(	date_sub( date_format( now(), '%%y-%%m-%%d' ), INTERVAL extract( DAY FROM now( ) ) - 1 DAY ),	INTERVAL 1 YEAR	)	AND DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' ) ) UNION ALL (SELECT '派件收入_无总对总',(sum( `收入总额(元)` )/10000) FROM `经分-设备大表` WHERE `时间` = DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' ))".format(self.d,self.d,self.d,self.d,self.d,self.d,self.d,self.d,self.d)
		data_sql2 = pd.read_sql_query(yuju1, self.con)
		data_sql2['类型'] =['一代柜1','二代柜1','易邮柜1','一代柜2','二代柜2','易邮柜3','派件收入','预约收入','超期收入','投件收入月','预约收入月','超期收入月','派件收入_无总对总']
		data_sql2 = data_sql2.set_index('类型').reindex(['一代柜1','二代柜1','易邮柜1','信报箱1','一代柜2','二代柜2','易邮柜2','信报箱2','派件收入','预约收入','超期收入','投件收入月','预约收入月','超期收入月','派件收入_无总对总'],fill_value= 0)
		data_sql2 = data_sql2.pivot_table(columns = '类型',fill_value = '金额' )[['一代柜1','二代柜1','易邮柜1','信报箱1','一代柜2','二代柜2','易邮柜2','信报箱2','派件收入','预约收入','超期收入','投件收入月','预约收入月','超期收入月','派件收入_无总对总']]
		for i in range(17,32):
			ws.cell(row=2, column=i, value="{}".format(data_sql1.iloc[0, i-17]))
			ws.cell(row=3, column=i, value="{}".format(data_sql2.iloc[0, i-17]))

		wb.save(filename=self.today_model1)
		print('sql数据导入成功')

	


	def youzheng_(self):
		df = pd.read_excel(self.youzheng).set_index('设备ID')
		df.columns = df.columns.map(lambda x:''.join(x.split('-')))
		df['网点名'] = '网点名'
		book = load_workbook(self.today_model1)
		writer = pd.ExcelWriter(self.today_model1, engine='openpyxl')
		writer.book = book
		book.remove(book['邮政总对总'])  # 删除已经存在的sheet
		df.to_excel(excel_writer=writer, sheet_name="邮政总对总")
		writer.save()
		writer.close()
		print('邮政总对总数据保存成功')

	def jingdong_(self):
		df = pd.read_csv(self.jingdong).set_index('运营城市')
		book = load_workbook(self.today_model1)
		writer = pd.ExcelWriter(self.today_model1, engine='openpyxl')
		writer.book = book
		book.remove(book['京东总对总'])  # 删除已经存在的sheet
		df.to_excel(excel_writer=writer, sheet_name="京东总对总")
		writer.save()
		writer.close()
		print('京东总对总数据保存成功')

	def jijian_(self):
		df = pd.read_excel(self.jijian).set_index('寄件订单号')
		book = load_workbook(self.today_model1)
		writer = pd.ExcelWriter(self.today_model1, engine='openpyxl')
		writer.book = book
		book.remove(book['寄件'])  # 删除已经存在的sheet
		df.to_excel(excel_writer=writer, sheet_name="寄件")
		writer.save()
		writer.close()
		print('寄件数据保存成功')

	def debang_(self):
		df = pd.read_csv(self.debang).set_index('运营城市')
		book = load_workbook(self.today_model1)
		writer = pd.ExcelWriter(self.today_model1, engine='openpyxl')
		writer.book = book
		book.remove(book['德邦'])  # 删除已经存在的sheet
		df.to_excel(excel_writer=writer, sheet_name="德邦")
		writer.save()
		writer.close()
		print('德邦数据保存成功')

	def DHL_(self):
		df = pd.read_csv(self.dhl).set_index('运营城市')
		book = load_workbook(self.today_model1)
		writer = pd.ExcelWriter(self.today_model1, engine='openpyxl')
		writer.book = book
		book.remove(book['DHL总对总'])  # 删除已经存在的sheet
		df.to_excel(excel_writer=writer, sheet_name="DHL总对总")
		writer.save()
		writer.close()
		print('DHL数据保存成功')
		print('数据插入完成')

	def do(self):
		self.sql()
		self.youzheng_()
		self.jingdong_()
		self.jijian_()
		self.debang_()
		self.DHL_()
		




a = time.time()
ag = cost(1) #往前推一天
ag.do()
b = time.time()
print(f"此程序共耗时{b-a}s")
   这个程序耗时5分钟.....主要耗时的地方在于将excel数据插入到excel中耗时比较长。
 

思路二:1、爬虫下载邮政和寄件的数据(表格形式)将其储存在文件夹中。

               2、然后用Python处理表格对数据进行处理和提取sql中的数据。

               3、将处理好的数据和提取出来的sql数据插入到excel表格之中。

相比第一种思路,取消了将爬取的excel表格插入到excel中步骤,取而代之的是用pandas读取爬取的表格进行处理之后直接插入到excel中去,并且相同的步骤尽量放在一起,比如提取数据步骤(从mysql数据库中提取数据和从excel提取并处理数据),将处理好的数据和sql中数据插入到excel时也放到一个方法中去执行~这样显的整齐且美观~

代码如下:

# 投件收入(总对总)
class cost():
	def __init__(self, d):
		self.d = d  # 提前1天
		self.yesterday = (date.today() + timedelta(days=-self.d)).strftime("%Y-%m-%d")  # 昨日的日期
		self.today = (date.today() + timedelta(days=-(self.d - 1))).strftime("%Y-%m-%d")  # 今日的日期
		self.con = create_engine('mysql+pymysql://dingdingdangdang:aiwujiwu145.245.1.10:3306/001ribao')
		self.headers_youzheng = 'dream'
		self.headers_jijian =  "what is up"
		self.cookies_youzheng = {'梦幻花'}
		self.cookies_jijian = {'井中月'}
		
		self.today_model1 = r'E:\新报日报_自动化报表\营业日报.xlsx'
		self.youzheng = r'E:\邮政\{}_{}.xlsx'.format(self.yesterday, self.yesterday)
		self.jingdong = r'E:\zongduizong\jingdong\{}.csv'.format(self.yesterday)
		self.jijian = r'E:\寄件总对总的数据\{}.xlsx'.format(self.yesterday)
		self.debang = r'E:\zongduizong\debang\{}.csv'.format(self.yesterday)
		self.dhl = r'E:\zongduizong\DHL\{}.csv'.format(self.yesterday)
		self.DHL_data = 0
		
	
	def youzheng_export(self):
		print('数据爬取下载......')
		print('1、邮政数据开始下载')
		
		'''下载邮政数据详情'''
		# 第一步 先将邮政数据信息下载下来
		data = {'id': 124, 'time_type': 1, 'from_date': self.yesterday, 'to_date': self.yesterday}
		r = requests.post('https://bass.sudiyi.cn/api/v2/data/warehouses/124/export', data,
						  cookies=self.cookies_youzheng,
						  verify=False)
		# 再找到参数
		html = '数据准备中'  # 刚开始数据尚未准备好
		while html != '已完成':
			time.sleep(6)
			try:
				r1 = requests.get(url='https://bass.sudiyi.cn/api/v2/data/export/tasks?per=20&date_type=1',
								  headers=self.headers_youzheng, cookies=self.cookies_youzheng, verify=False)
			except Exception as e:
				print('youzheng_data 刷新网页时出错:%s' % e)
			else:
				html = r1.text  # <class 'bytes'> 存放字节码 text存放 .content编码后的字符串
				html1 = json.loads(html)['data']['list'][0]
				html = html1['status']
				print(html + '...')
		canshu = html1['file'].split('_')[-1][:-5]
		try:
			target_url = 'https://bass.sudiyi.cn/api/v2/data/export/download?file=%E5%8D%95%E6%97%A5_%E9%82%AE%E6%94%BFEMS%E6%95%B0%E6%8D%AE_{0}_{1}_{2}.xlsx'.format(
				self.yesterday, self.yesterday, int(canshu))
			req = requests.get(url=target_url, headers=self.headers_youzheng, cookies=self.cookies_youzheng,
							   verify=False)
		except Exception as e:
			print('youzheng_data 导出下载链接出现问题:', e)
		else:
			html = req.text  # <class 'bytes'> 存放字节码 text存放 .content编码后的字符串
			html = json.loads(html)
			target_url2 = html['data']['name']
			try:
				req = requests.get(url=target_url2, headers=self.headers_youzheng, cookies=self.cookies_youzheng,
								   verify=False)
			except Exception as e:
				print('邮政下载数据出现问题', e)
			else:
				html = req.content  # <class 'bytes'> 存放字节码 text存放 .content编码后的字符串
				daily_machine_data_lujin = r'C:\Users\lenovo\Desktop\邮政数据\%s_%s.xlsx' % (self.yesterday, self.yesterday)
				with open(daily_machine_data_lujin, 'wb') as e:
					e.write(html)
				# 将邮政数据和自营城市进行匹配
				df = pd.read_excel(daily_machine_data_lujin)
				df1 = pd.read_excel(r'C:\Users\lenovo\Desktop\2018年中邮速递易年度数据分析报告\派件事业部-城市匹配表.xlsx')[['运营城市']].rename(
					columns={'运营城市': '运营城市名'})
				df2 = pd.merge(df, df1, on='运营城市名').set_index('设备ID')
				df2.to_excel(self.youzheng)
				print('邮政数据下载成功......')
	
	def jijian_export(self):
		print('2、寄件数据开始下载')
		s = Queue()
		for i in range(18):
			s.enqueue([])
		target_url1 = 'https://tderp.biyoshop.com/a/sudiyi/app/mailing/list?page.pageNo=1&page.pageSize=10000&startTime=&endTime=&beginTime={}+00%3A00%3A00&endingTime={}+00%3A00%3A00&orderNo=&userPhone=&beginSignTime=&endSignTime=&parcelType=-1&status=&receiverMobile=&userProvince=&sendProvinceCode=&userCity=&userDistrict=&bagCode=&cancelReason=%E5%85%A8%E9%83%A8&device=&receiverProvince=&receiverProvinceCode=&receiverCity=&receiverDistrict=&deviceCode=&boxNo=&expressNo=&merchantCode=&outOrderNo=&page.orderBy='.format(
			self.yesterday, self.today)
		try:
			req = requests.get(url=target_url1, headers=self.headers_jijian, cookies=self.cookies_jijian, verify=False)
		except Exception as e:
			print('寄件数据爬取出现问题', e)
		else:
			html = req.text
			soup = BeautifulSoup(html)
			a = soup.find_all('td')
			for i in a:
				a = s.dequeue()
				w = i.string.strip() if isinstance(i.string, str) else i.string
				a.append(w)
				s.enqueue(a)
		q = ['操作', '寄件订单号', '商家名称', '快递单号', '下单时间', '投递时间', '订单类型', '订单状态', '寄件人姓名', '寄件区域', '收件人姓名', '收件区域', '应支付金额',
			 '实付金额', '快递员', '快递网点', '物流公司', '平台订单号']
		data_ = {i: s.dequeue() for i in q}
		pd.DataFrame(data=data_).to_excel(self.jijian)
		print('寄件数据下载完成')
		print('数据爬取下载完成......')
	
	def sql(self):
		# 2019年数据
		
		yuju = "(SELECT `设备类型`,(sum(`收入总额(元)`)/10000)金额 from `经分-设备大表` where `时间` = DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市')  and `设备类型` in ( '一代柜', '二代柜', '易邮柜','信报箱') GROUP BY `设备类型`)	UNION ALL	(SELECT `设备类型`,(sum(`收入总额(元)`)/10000) from `经分-设备大表` where `时间` BETWEEN  date_sub(date_sub(CURDATE( ),interval extract(day from now()) - 1 day),interval 0 month) and DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN  ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜','信报箱') GROUP BY `设备类型`) 	UNION ALL	(SELECT '派件收入',(sum(`派件收入`)/10000)投件收入 from `经分-设备大表` where `时间` = DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN  ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜'))	UNION ALL	(SELECT '预约收入',(sum(`预约收入`)/10000)预约收入 from `经分-设备大表` where `时间` = DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN  ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜'))	UNION ALL (SELECT '超期收入',(sum(`取件收入`)/10000)超期收入 from `经分-设备大表` where `时间` = DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市')  and `设备类型` in ( '一代柜', '二代柜', '易邮柜'))	UNION ALL	(SELECT '投件收入月',(sum(`派件收入`)/10000)投件收入 from `经分-设备大表` where `时间` BETWEEN date_sub(date_sub(CURDATE( ),interval extract(day from now()) - 1 day),interval 0 month) and DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市')  and `设备类型` in ( '一代柜', '二代柜', '易邮柜'))	UNION ALL	(SELECT '预约收入月',(sum(`预约收入`)/10000)预约收入 from `经分-设备大表` where `时间` BETWEEN date_sub(date_sub(CURDATE( ),interval extract(day from now()) - 1 day),interval 0 month) and DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN  ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜'))	UNION ALL	(SELECT '超期收入月',(sum(`取件收入`)/10000)超期收入 from `经分-设备大表` where `时间` BETWEEN date_sub(date_sub(CURDATE( ),interval extract(day from now()) - 1 day),interval 0 month) and DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市')  and `设备类型` in ( '一代柜', '二代柜', '易邮柜')) UNION ALL (SELECT '派件收入_无总对总',(sum(`收入总额(元)`)/10000) from `经分-设备大表` where `时间` = DATE_SUB( CURDATE( ), INTERVAL {} DAY ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') and `设备类型` in ( '一代柜', '二代柜', '易邮柜'))".format(
			self.d, self.d, self.d, self.d, self.d, self.d, self.d, self.d, self.d)
		data_sql1 = pd.read_sql_query(yuju, self.con)
		data_sql1['类型'] = ['一代柜1', '二代柜1', '信报箱1', '易邮柜1', '一代柜2', '二代柜2', '信报箱2', '易邮柜2', '派件收入', '预约收入', '超期收入',
						   '投件收入月', '预约收入月', '超期收入月', '派件收入_无总对总']
		data_sql1 = data_sql1.set_index('类型').reindex(
			['一代柜1', '二代柜1', '易邮柜1', '信报箱1', '一代柜2', '二代柜2', '易邮柜2', '信报箱2', '派件收入', '预约收入', '超期收入', '投件收入月', '预约收入月',
			 '超期收入月', '派件收入_无总对总'])
		data_sql1 = data_sql1.pivot_table(columns='类型', fill_value='金额')[
			['一代柜1', '二代柜1', '易邮柜1', '信报箱1', '一代柜2', '二代柜2', '易邮柜2', '信报箱2', '派件收入', '预约收入', '超期收入', '投件收入月', '预约收入月',
			 '超期收入月', '派件收入_无总对总']]
		
		# 2018年同比数据
		yuju1 = "( SELECT `设备类型`,(sum( `收入总额(元)` )/10000) 金额 FROM `经分-设备大表` WHERE	`时间` =  DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' )	AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市')	AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜', '信报箱' ) GROUP BY	`设备类型`) UNION ALL 	(SELECT	`设备类型`,	(sum( `收入总额(元)` )/10000) FROM	`经分-设备大表` WHERE	`时间` BETWEEN  date_sub(date_sub( date_format( now( ), '%%y-%%m-%%d' ), INTERVAL extract( DAY FROM now( ) ) - 1 DAY ),INTERVAL 1 YEAR)	AND DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' )	AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市')	AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜', '信报箱' )GROUP BY	`设备类型`	) UNION ALL	(SELECT	'派件收入',	(sum( `派件收入` )/10000) 投件收入 FROM	`经分-设备大表` WHERE	`时间` = DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' )AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市')	AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' )	) UNION ALL	(SELECT	'预约收入',	(sum( `预约收入` )/10000) 预约收入 FROM	`经分-设备大表` WHERE	`时间` = DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' )	AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市')	AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' )	) UNION ALL	(SELECT	'超期收入',	(sum( `取件收入` )/10000) 超期收入 FROM	`经分-设备大表` WHERE	`时间` = DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' )	AND `运营城市_系统` IN  ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' )	) UNION ALL 	(SELECT	'投件收入月',	(sum( `派件收入` )/10000) 投件收入 FROM	`经分-设备大表` WHERE	`时间` BETWEEN  date_sub(	date_sub( date_format( now( ), '%%y-%%m-%%d' ), INTERVAL extract( DAY FROM now( ) ) - 1 DAY ),	INTERVAL 1 YEAR	)	AND DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' )	AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市')  AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' )	) UNION ALL	(SELECT	'预约收入月',	(sum( `预约收入` )/10000) 预约收入 FROM	`经分-设备大表` WHERE	`时间` BETWEEN  date_sub(	date_sub( date_format( now( ), '%%y-%%m-%%d' ), INTERVAL extract( DAY FROM now( ) ) - 1 DAY ),	INTERVAL 1 YEAR	)	AND DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' )	AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市')	AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' )	) UNION ALL 	(SELECT	'超期收入月',	(sum( `取件收入` )/10000) 超期收入 FROM	`经分-设备大表` WHERE	`时间` BETWEEN  date_sub(	date_sub( date_format( now(), '%%y-%%m-%%d' ), INTERVAL extract( DAY FROM now( ) ) - 1 DAY ),	INTERVAL 1 YEAR	)	AND DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' ) ) UNION ALL (SELECT '派件收入_无总对总',(sum( `收入总额(元)` )/10000) FROM `经分-设备大表` WHERE `时间` = DATE_FORMAT( date_sub( date_sub( now( ), INTERVAL 1 YEAR ), INTERVAL {} DAY ), '%%Y-%%m-%%d' ) AND `运营城市_系统` IN ('北京市','广州市','上海市','深圳市','成都市','大连市','杭州市','南京市','宁波市','青岛市','厦门市','沈阳市','苏州市','天津市','无锡市','武汉市','西安市','长沙市','重庆市','常州市','东莞市','佛山市','福州市','贵阳市','哈尔滨市','海口市','合肥市','惠州市','济南市','嘉兴市','金华市','昆明市','南昌市','南宁市','南通市','泉州市','汕头市','石家庄市','潍坊市','温州市','徐州市','烟台市','扬州市','郑州市','蚌埠市','宝鸡市','德阳市','赣州市','桂林市','衡阳市','湖州市','兰州市','连云港市','临沂市','柳州市','绵阳市','南充市','绍兴市','台州市','威海市','芜湖市','盐城市','宜昌市','岳阳市','漳州市','株洲市','淄博市','达州市','江门市','九江市','十堰市','湘潭市','襄阳市','遂宁市','安阳市','廊坊市','乌鲁木齐市','渭南市','琼海市','眉山市','自贡市','攀枝花市','广安市','巴中市','宜宾市','资阳市','雅安市','铜川市','玉溪市','呼和浩特市','保定市','衡水市','秦皇岛市') AND `设备类型` IN ( '一代柜', '二代柜', '易邮柜' ))".format(
			self.d, self.d, self.d, self.d, self.d, self.d, self.d, self.d, self.d)
		data_sql2 = pd.read_sql_query(yuju1, self.con)
		data_sql2['类型'] = ['一代柜1', '二代柜1', '易邮柜1', '一代柜2', '二代柜2', '易邮柜3', '派件收入', '预约收入', '超期收入', '投件收入月', '预约收入月',
						   '超期收入月', '派件收入_无总对总']
		self.data_sql2 = data_sql2.set_index('类型').reindex(
			['一代柜1', '二代柜1', '易邮柜1', '信报箱1', '一代柜2', '二代柜2', '易邮柜2', '信报箱2', '派件收入', '预约收入', '超期收入', '投件收入月', '预约收入月',
			 '超期收入月', '派件收入_无总对总'], fill_value=0)
		self.data_sql2 = data_sql2.pivot_table(columns='类型', fill_value='金额')[
			['一代柜1', '二代柜1', '易邮柜1', '信报箱1', '一代柜2', '二代柜2', '易邮柜2', '信报箱2', '派件收入', '预约收入', '超期收入', '投件收入月', '预约收入月',
			 '超期收入月', '派件收入_无总对总']]
	
	
	def youzheng_(self):
		df = pd.read_excel(self.youzheng).set_index('设备ID')
		self.youzheng_data = ((df['预留使用量-EMS'].sum() + df['预留使用量-邮政'].sum())*0.4 + (df['预约使用量-EMS'].sum() + df['预约使用量-邮政'].sum())*0.35 + (df['其他使用量-EMS'].sum() + df['其他使用量-邮政'].sum())*0.25)/10000
	
	def jingdong_(self):
		df = pd.read_csv(self.jingdong).set_index('运营城市')
		self.jingdong_data = (df['投件时间'].count())*0.4/10000
	
	def jijian_(self):
		df = pd.read_excel(self.jijian).set_index('寄件订单号')
		self.jijian_data = df['投递时间'].count()*0.2/10000
		
	
	def debang_(self):
		df = pd.read_csv(self.debang).set_index('运营城市')
		df.dropna(subset=['投件时间'],inplace= True)
		self.debang_data = (df.loc[df['箱格类型'] == 0,'箱格类型'].count()*0.3 + df.loc[df['箱格类型'] == 1,'箱格类型'].count()*0.4 + df.loc[df['箱格类型'] == 2,'箱格类型'].count()*0.5)/10000
		
	
	def DHL_(self):
		df = pd.read_csv(self.dhl).set_index('运营城市')
		df.dropna(subset=['投件时间'],inplace= True)
		self.DHL_data = (df.loc[df['箱格类型'] == 0,'箱格类型'].count()*0.3 + df.loc[df['箱格类型'] == 1,'箱格类型'].count()*0.4 + df.loc[df['箱格类型'] == 2,'箱格类型'].count()*0.5)/10000


	def zongduizong(self):
		wb = load_workbook(filename=self.today_model1)
		ws = wb['Sheet2']
		print('总对总数据插入开始---')
		
		for i in range(17, 32):
			ws.cell(row=2, column=i, value="{}".format(self.data_sql1.iloc[0, i - 17]))
			ws.cell(row=3, column=i, value="{}".format(self.data_sql2.iloc[0, i - 17]))
			
		for i,j in enumerate([self.jingdong_data,self.DHL_data,self.debang_data,self.youzheng_data,self.jijian_data]):
			ws.cell(row=2, column=i+32, value="{}".format(j))
		wb.save(filename=self.today_model1)
		print('总对总数据插入成功---')

	
	def do(self):
		# 邮政和寄件数据下载并保存
		self.youzheng_export()
		self.jijian_export()


		#sql和5个总对总的数据进行提取
		self.sql()
		self.youzheng_()
		self.jingdong_()
		self.jijian_()
		self.debang_()
		self.DHL_()

		#将sql和5个总对总的数据插入到excel表格中
		self.zongduizong()
		
	 
		

# time_()
a = time.time()
ag = cost(1)  # 往前推一天
ag.do()
b = time.time()
print(f"此程序共耗时{b-a}s")
用到的知识点不多,只是一次编程思想的想法,如果在编程中引用相同的常量的话,尽量用变量代替,这样的话变动相应值就会很方便。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值