浏览代码

阿里每日对账

peng 1 年之前
父节点
当前提交
698f25450b
共有 2 个文件被更改,包括 71 次插入4 次删除
  1. 65 1
      Controller/Cron/CronTaskController.py
  2. 6 3
      Controller/PaymentCycle.py

+ 65 - 1
Controller/Cron/CronTaskController.py

@@ -8,10 +8,13 @@
 # @File    : CronTaskController.py
 # @File    : CronTaskController.py
 # @Software: PyCharm
 # @Software: PyCharm
 import datetime
 import datetime
+import io
 import threading
 import threading
 import time
 import time
+import zipfile
 
 
 import requests
 import requests
+import csv
 from django.db import connection, connections, transaction
 from django.db import connection, connections, transaction
 from django.db.models import Q, Sum, Count
 from django.db.models import Q, Sum, Count
 from django.views import View
 from django.views import View
@@ -31,6 +34,7 @@ from Service.CommonService import CommonService
 from Service.VodHlsService import SplitVodHlsObject
 from Service.VodHlsService import SplitVodHlsObject
 from Object.UnicomObject import UnicomObjeect
 from Object.UnicomObject import UnicomObjeect
 from Object.WechatPayObject import WechatPayObject
 from Object.WechatPayObject import WechatPayObject
+from Object.AliPayObject import AliPayObject
 
 
 
 
 class CronDelDataView(View):
 class CronDelDataView(View):
@@ -1303,7 +1307,7 @@ class CronComparedDataView(View):
             thread.start()
             thread.start()
             return response.json(0)
             return response.json(0)
         except Exception as e:
         except Exception as e:
-            LOGGER.info('CronComparedDataView.compared_paypal_order, errLine:{}, errMsg:{}'.format(
+            LOGGER.info('CronComparedDataView.compared_wechat_order, errLine:{}, errMsg:{}'.format(
                 e.__traceback__.tb_lineno, repr(e)))
                 e.__traceback__.tb_lineno, repr(e)))
             return response.json(500)
             return response.json(500)
 
 
@@ -1326,3 +1330,63 @@ class CronComparedDataView(View):
                     'meal_name': order['商品名称'].replace('`', ''),
                     'meal_name': order['商品名称'].replace('`', ''),
                 }
                 }
                 AbnormalOrder.objects.create(**order_dict)
                 AbnormalOrder.objects.create(**order_dict)
+
+    @staticmethod
+    def compared_alipay_order(response):
+        today = datetime.datetime.today()
+        start_date = today - datetime.timedelta(days=1)
+        start_date = start_date.strftime("%Y-%m-%d")
+        try:
+            ali_pay_obj = AliPayObject()
+            alipay = ali_pay_obj.conf()
+            result = alipay.server_api(
+                api_name='alipay.data.dataservice.bill.downloadurl.query',
+                biz_content={'bill_type': 'trade',
+                             'bill_date': start_date,
+                             }
+            )
+            res = requests.get(result['bill_download_url'])
+            zip_file = res.content
+            zip_data = io.BytesIO(zip_file)
+            data = []
+            with zipfile.ZipFile(zip_data, 'r') as zip_ref:
+                for file in zip_ref.namelist():
+                    if '汇总' not in file.encode('cp437').decode('gbk'):
+                        with zip_ref.open(file) as f:
+                            reader = csv.reader(io.TextIOWrapper(f))
+                            for row in reader:
+                                data.append(row)
+            key_list = data[4]
+            orders = data[5:-4]
+            order_list = []
+            for item in orders:
+                order_list.append(dict(zip(key_list, item)))
+            thread = threading.Thread(target=CronComparedDataView.thread_compared_alipay_order,
+                                      args=(order_list,))
+            thread.start()
+            return response.json(0)
+        except Exception as e:
+            LOGGER.info('CronComparedDataView.compared_alipay_order, errLine:{}, errMsg:{}'.format(
+                e.__traceback__.tb_lineno, repr(e)))
+            return response.json(500)
+
+    @staticmethod
+    def thread_compared_alipay_order(order_list):
+        now_time = int(time.time())
+        for order in order_list:
+            order_id = order['商户订单号'].replace('\t', '')
+            if len(order_id) != 20:
+                continue
+            order_qs = Order_Model.objects.filter(orderID=order_id)
+            if not order_qs.exists():
+                order_dict = {
+                    'trade_no': order['支付宝交易号'].replace('\t', ''),
+                    'order_id': order_id,
+                    'pay_type': 2,
+                    'price': order['订单金额(元)'].replace('\t', ''),
+                    'pay_time': int(datetime.datetime.strptime(order['完成时间'], "%Y-%m-%d %H:%M:%S").timestamp()),
+                    'upd_time': now_time,
+                    'meal_name': order['商品名称'].replace('\t', ''),
+                    'username': order['对方账户'].replace('\t', ''),
+                }
+                AbnormalOrder.objects.create(**order_dict)

+ 6 - 3
Controller/PaymentCycle.py

@@ -237,16 +237,17 @@ class PaypalCycleNotify(View):
                     if ubq['use_status'] == 1 and ubq['endTime'] > nowTime:  # 套餐使用中并且未过期,加入未使用的关联套餐表
                     if ubq['use_status'] == 1 and ubq['endTime'] > nowTime:  # 套餐使用中并且未过期,加入未使用的关联套餐表
                         Unused_Uid_Meal.objects.create(uid=UID, channel=channel, addTime=nowTime, is_ai=is_ai,
                         Unused_Uid_Meal.objects.create(uid=UID, channel=channel, addTime=nowTime, is_ai=is_ai,
                                                        order_id=orderID, expire=expire, bucket_id=bucketId)
                                                        order_id=orderID, expire=expire, bucket_id=bucketId)
-                        UID_Bucket.objects.filter(id=uid_bucket_id).update(has_unused=1)
+                        update_status = UID_Bucket.objects.filter(id=uid_bucket_id).update(has_unused=1)
                         use_flag = False
                         use_flag = False
                     else:  # 云存服务已过期则重新开通云存服务
                     else:  # 云存服务已过期则重新开通云存服务
-                        UID_Bucket.objects.filter(id=uid_bucket_id).update(uid=UID, channel=channel, bucket_id=bucketId,
+                        update_status = UID_Bucket.objects.filter(id=uid_bucket_id).update(uid=UID, channel=channel, bucket_id=bucketId,
                                                                            endTime=endTime, updateTime=nowTime)
                                                                            endTime=endTime, updateTime=nowTime)
 
 
                 else:
                 else:
                     ub_cqs = UID_Bucket.objects.create \
                     ub_cqs = UID_Bucket.objects.create \
                         (uid=UID, channel=channel, bucket_id=bucketId, endTime=endTime, addTime=nowTime,
                         (uid=UID, channel=channel, bucket_id=bucketId, endTime=endTime, addTime=nowTime,
                          updateTime=nowTime, use_status=1)
                          updateTime=nowTime, use_status=1)
+                    update_status = True
                     uid_bucket_id = ub_cqs.id
                     uid_bucket_id = ub_cqs.id
                 dvq = Device_Info.objects.filter(UID=UID, vodPrimaryUserID='', vodPrimaryMaster='')
                 dvq = Device_Info.objects.filter(UID=UID, vodPrimaryUserID='', vodPrimaryMaster='')
                 if dvq.exists():
                 if dvq.exists():
@@ -275,7 +276,9 @@ class PaypalCycleNotify(View):
                 # 核销coupon
                 # 核销coupon
                 if order_list[0]['coupon_id']:
                 if order_list[0]['coupon_id']:
                     CouponModel.objects.filter(id=order_list[0]['coupon_id']).update(use_status=2, update_time=nowTime)
                     CouponModel.objects.filter(id=order_list[0]['coupon_id']).update(use_status=2, update_time=nowTime)
-
+                logger.info(
+                    'uid:{},uid_bucket_id:{},update_status:{},order_id:{}'.format(UID, uid_bucket_id, update_status,
+                                                                                  orderID))
                 order_qs.update(status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id,
                 order_qs.update(status=1, updTime=nowTime, uid_bucket_id=uid_bucket_id,
                                 promotion_rule_id=promotion_rule_id, agreement_id=agreement_id)
                                 promotion_rule_id=promotion_rule_id, agreement_id=agreement_id)
                 # 如果存在序列号,消息提示用序列号
                 # 如果存在序列号,消息提示用序列号