ck 4 rokov pred
rodič
commit
c4357f16b5

+ 21 - 2
app/api_data/get_order.py

@@ -124,6 +124,23 @@ def zhangdu(start=None,end=None,new=None):
 
 
 
+def zhangzhongyun(start=None,end=None,new=None):
+    if start is None:
+        start = end = du.getNow()
+
+    executor = ThreadPoolExecutor(max_workers=5)
+    accounts = get_account("掌中云") if new is None else get_new_account('掌中云')
+    if len(accounts) == 0:
+        return
+    else:
+        print(f'掌中云有账号{len(accounts)}个')
+    for account in accounts:
+        executor.submit(get_zzy_order_task,start, end, account)
+    executor.shutdown()
+
+
+
+
 
 def hourly():
     yangguang()
@@ -131,6 +148,7 @@ def hourly():
     qiyue()
     wending()
     zhangdu()
+    zhangzhongyun()
 
 
 def daily():
@@ -142,6 +160,7 @@ def daily():
     qiyue(st2, et)    # 有毛病
     wending(st, et)
     zhangdu(st, et)
+    zhangzhongyun(st, et)
 
 
 
@@ -149,9 +168,9 @@ def daily():
 if __name__ == '__main__':
     # yangguang()
     # huasheng('2020-12-01','2021-02-22')
-    qiyue()
+    # qiyue()
     # wending()
 
     # zhangdu('2020-12-20','2021-02-22')
-
+    zhangzhongyun('2021-02-10', '2021-02-23')
     """要是只跑一个账号 把 get_yg_acccount() 里面的sql where 条件加上 id=xxx"""

+ 90 - 0
app/api_data/order_util.py

@@ -8,6 +8,7 @@ from model.ComUtils import *
 import math
 from model.DateUtils import DateUtils
 import logging
+from urllib import parse
 logging.getLogger().setLevel(logging.WARNING)
 db=MysqlUtils()
 du=DateUtils()
@@ -481,5 +482,94 @@ def get_zd_order_task(start,end,account):
         save_order(order_list)
 
 
+def get_zzy_order_task(start, end, account):
+    url = 'https://inovel.818tu.com/partners/channel/channels/list?'
+    key = account[0]
+    secert = account[1]
+    stage = account[2]
+    sign = md5(secert + 'key=' + key)
+    params = 'key=' + key + '&sign=' + sign
+    response_result_json = requests.get(url + params).json()  # 获取子渠道列表
+
+    if 'data' not in response_result_json.keys():
+        print('掌中云账号【{key}】本次请求数据异常,响应报文【{result}】'.format(key=key, result=response_result_json))
+        return
+    items = response_result_json['data']['items']
+    print(f'VIP{account[0]} 有公众号{len(items)} ')
+
+    total_order_list = []
+    for channel in items:
+        # 获取channel_id 后逐个拉取历史orders
+        order_list = get_zzy_channel_order(start, end, account, channel)
+        total_order_list.extend(order_list)
+    print(f"{stage} [{start}]~[{end}] 有订单{total_order_list.__len__()}")
+    if total_order_list > 0:
+        save_order(total_order_list)
+
+
+def get_zzy_channel_order(start, end, account, channel):
+
+    get_time=DateUtils.str_to_date_str(start, f2="%Y-%m-%dT%H:%M:%S+08:00")
+    limit_time=DateUtils.str_to_date_str(end, f2="%Y-%m-%dT%H:%M:%S+08:00")
+    order_list = []
+    key = account[0]
+    secert = account[1]
+    stage = account[2]
+    order_url = 'https://openapi.818tu.com/partners/channel/orders/list?'
+    channel_id = channel['id']
+    channel_name = channel['nickname']
+    status = str(1)
+    page = str(1)
+    per_page = str(1000)
+    gte = parse.urlencode({'created_at[gte]': get_time})  # gte就是ge 大于等于开始时间
+    lt = parse.urlencode({'created_at[lt]': limit_time})  # 小于 结束时间
+
+    while True:
+        sign = md5(secert + 'channel_id=' + str(
+            channel_id) + '&created_at[gte]=' + get_time + '&created_at[lt]=' + limit_time + '&key=' + key + '&page=' + str(
+            page) + '&per_page=' + per_page + '&status=' + status)
+        params = 'channel_id=' + str(channel_id) + '&' + gte + '&' + lt + '&page=' + str(
+            page) + '&per_page=' + per_page + '&status=' + status + '&key=' + key + '&sign=' + sign
+        while True:
+            r = requests.get(order_url + params)
+            if r.status_code == 200:
+                response_result_json = r.json()
+                break
+            else:
+                time.sleep(61)
+                print("掌中云接口调用sleep 61s...")
+
+        if 'data' not in response_result_json.keys():
+            print(f'掌中云账号【{key}】,查询时间【{start} - {end}】,渠道【{channel_name}】本次请求数据异常,响应报文【{r.text}】')
+            break
+
+        total_count = response_result_json['data']['count']  # 总数量
+        order_item_list = response_result_json['data']['items']  # 订单列表
+
+        for order_item in order_item_list:
+
+            order_time = DateUtils.str_to_date_str(order_item['created_at'], "%Y-%m-%dT%H:%M:%S+08:00", "%Y-%m-%d %H:%M:%S")
+            order = (
+                DateUtils.str_to_stamp(order_time[:10]),
+                stage,
+                '掌中云',
+                channel_name,
+                channel_id,
+                str(order_item['member']['openid']),
+                order_item['created_at'],
+                order_item['member']['created_at'],
+                round(order_item['price'] / 100, 2),
+                order_item['from_novel']['title'] if str(order_item['from_novel_id']) != 'None' else '',
+                str(order_item['id'])
+            )
+            order_list.append(order)
+
+        if int(page) >= math.ceil(total_count / int(per_page)):
+            break
+        page = int(page) + 1
+    # print(f"{channel_name}获取订单:{order_list.__len__()}")
+    return order_list
+
+
 if __name__ == '__main__':
     get_qiyue_order_task('2021-02-01','2021-02-19',['趣程15期','eyJpdiI6ImluVWxoRUl3VTR6QU5hamlYOFBvXC9BPT0iLCJ2YWx1ZSI6Ik5IZ0N4dm5GcmJ0Zklsd0tNZ1JVSVE9PSIsIm1hYyI6IjJjODUzMjdlZTc2ODI2ZjFmY2QyYmU5MGViYTkzOGU4MDEwZTIyODIxOTE4NzgzYTNhOGQ1YWM4OGJkMDAzMmIifQ=='])

+ 4 - 4
app/etl/data_stat_run.py

@@ -12,7 +12,7 @@ from app.etl.dw.dw_book_trend import book_trend
 du = DateUtils()
 logger = logging.getLogger("")
 # logger.setLevel(logging.ERROR)
-
+logging.getLogger().setLevel(logging.WARNING)
 
 def do_order(st,et):
     for i in du.getDateLists(st,et):
@@ -55,7 +55,7 @@ def daily():
 
 
 if __name__ == '__main__':
-    hourly()
-    # do_cost('2020-01-01','2021-01-01')
+    # hourly()
+    # do_cost('2021-02-04','2021-02-11')
 
-    # do_order('2020-10-29','2021-02-03')
+    do_order('2021-02-10','2021-02-23')

+ 5 - 1
model/DateUtils.py

@@ -335,8 +335,12 @@ class DateUtils:
     def stamp_to_date_stamp(stamp):
         return DateUtils.str_to_stamp(DateUtils.stamp_to_str(stamp,'%Y-%m-%d'),'%Y-%m-%d')
 
+    @staticmethod
+    def str_to_date_str(str, f1='%Y-%m-%d',f2='%Y%m%d'):
+        return datetime.strptime(str, f1).strftime(f2)
+
 
 if __name__ == "__main__":
 
     ut = DateUtils()
-
+    print(DateUtils.str_to_date_str('2012-02-01',f2="%Y-%m-%dT%H:%M:%S+08:00"))