Browse Source

优化后台对账

peng 1 year ago
parent
commit
e6b105c099

+ 57 - 7
AdminController/ServeManagementController.py

@@ -1046,6 +1046,7 @@ class serveManagement(View):
         uid = request_dict.get('uid', None)
         channel = request_dict.get('channel', None)
         orderID = request_dict.get('orderID', None)
+        order_list = request_dict.get('order_list', None)
         userID__username = request_dict.get('userID__username', None)
         currency = request_dict.get('currency', None)
         payType = request_dict.get('payType', None)
@@ -1084,6 +1085,9 @@ class serveManagement(View):
                 omqs = omqs.filter(trade_no=trade_no)
             if userID__phone:
                 omqs = omqs.filter(userID__phone=userID__phone)
+            if order_list:
+                order_list = order_list.split(',')
+                omqs = omqs.filter(Q(orderID__in=order_list) | Q(trade_no__in=order_list))
             if serialNumber:
                 device_uid = CommonService.query_uid_with_serial(serialNumber)
                 omqs = omqs.filter(UID=device_uid)
@@ -1262,16 +1266,62 @@ class serveManagement(View):
         page = int(page_no)
         line = int(page_size)
         try:
-            order_qs = DailyReconciliation.objects.all()
+            daily_reconciliation = DailyReconciliation.objects.all()
             # 筛选指定订单
             if start_time and end_time:
-                order_qs = order_qs.filter(time__gte=start_time, time__lt=end_time)
-            if not order_qs.exists():
+                daily_reconciliation = daily_reconciliation.filter(time__gte=start_time, time__lt=end_time)
+            if not daily_reconciliation.exists():
                 return response.json(0, [])
-            count = order_qs.count()
-            order_qs = order_qs.values("id", "trade_nos", "ansjer_total", "ansjer_num", "paypal_num", "paypal_total",
-                                       "time").order_by('-time')[(page - 1) * line:page * line]
-            return response.json(0, {'list': list(order_qs), 'total': count})
+            count = daily_reconciliation.count()
+            daily_reconciliation_qs = daily_reconciliation.values("id", "order_ids", "ansjer_total", "ansjer_num",
+                                                                  "paypal_num", "paypal_total", "time").order_by(
+                '-time')[(page - 1) * line:page * line]
+            for item in daily_reconciliation_qs:
+                item['order_info'] = []
+                if not item['order_ids']:
+                    continue
+                order_list = item['order_ids'].split(',')
+                order_qs = Order_Model.objects.filter(Q(orderID__in=order_list) | Q(trade_no__in=order_list)).values(
+                    "orderID", "UID", "userID__username", "userID__NickName", "channel", "desc", "price",
+                    "refunded_amount", "currency", "addTime", "updTime", "paypal", "payType", "rank__day",
+                    "rank__price", "status", "order_type", "paymentID", "trade_no", "payTime", "userID__region_country",
+                    "userID__phone").order_by('-addTime')
+                while True:
+                    params = {'pageNo': 1, 'pageSize': 100, 'order_list': item['order_ids']}
+                    eur_response = requests.get('https://www.zositeche.com/serveManagement/getDeviceOrderList', params)
+                    if eur_response.status_code == 200:
+                        result = eur_response.json()
+                        if result['result_code'] == 0:
+                            item['order_info'] = result['result']['list']
+                            break
+                for order in order_qs:
+                    # 查询国家信息
+                    country = 'N/A'
+                    country_qs = CountryModel.objects.filter(id=order['userID__region_country']).values('country_name')
+                    if country_qs.exists():
+                        country = country_qs[0]['country_name']
+                    serial_number = CommonService.query_serial_with_uid(order['UID'])
+                    data = {'orderID': order['orderID'], 'UID': order['UID'],
+                            'userID__username': order['userID__username'],
+                            'userID__NickName': order['userID__NickName'], 'channel': order['channel'],
+                            'desc': order['desc'], 'price': order['price'], 'refunded_amount': order['refunded_amount'],
+                            'currency': order['currency'], 'addTime': order['addTime'], 'updTime': order['updTime'],
+                            'paypal': order['paypal'], 'payType': order['payType'], 'rank__day': order['rank__day'],
+                            'rank__price': order['rank__price'], 'status': order['status'],
+                            'order_type': order['order_type'],
+                            'payTime': order['payTime'] if order['payTime'] else 'N/A',
+                            'serialNumber': 'N/A' if serial_number == order['UID'] else serial_number,
+                            'country': country, 'userID__phone': order['userID__phone'], 'trade_no': 'N/A'}
+                    #  添加PayPal交易号字段
+                    if data['payType'] == 1:
+                        data['trade_no'] = order['trade_no'] if order['trade_no'] else 'N/A'
+                    data['express_id'] = ''
+                    if data['payType'] == 11:
+                        cdk_context_qs = CDKcontextModel.objects.filter(order=data['orderID']).values('express_id')
+                        if cdk_context_qs.exists():
+                            data['express_id'] = cdk_context_qs[0]['express_id']
+                    item['order_info'].append(data)
+            return response.json(0, {'list': list(daily_reconciliation_qs), 'total': count})
         except Exception as e:
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 

+ 22 - 10
Controller/Cron/CronTaskController.py

@@ -1424,8 +1424,8 @@ class CronComparedDataView(View):
         end_date = start_date + datetime.timedelta(days=1)
         try:
             data = (
-                ('start_date', '{}-{}-{}T08:00:00-0800'.format(start_date.year, start_date.month, start_date.day)),
-                ('end_date', '{}-{}-{}T08:00:00-0800'.format(end_date.year, end_date.month, end_date.day)),
+                ('start_date', '{}-{}-{}T08:00:00-0800'.format(start_date.year, start_date.month, 11)),
+                ('end_date', '{}-{}-{}T08:00:00-0800'.format(end_date.year, end_date.month, 12)),
                 ('fields', 'all'),
                 ('page_size', '500'),
                 ('page', '1'),
@@ -1447,11 +1447,13 @@ class CronComparedDataView(View):
         timestamp = int(start_time.timestamp())
         count = len(order_list)
         total = 0
+        more_order_list = []
         for item in order_list:
             total += float(item['transaction_info']['transaction_amount']['value'])
             trade_no = item['transaction_info']['transaction_id']
             if item['transaction_info']['transaction_event_code'] == 'T1107':
                 trade_no = item['transaction_info']['paypal_reference_id']
+                more_order_list.append(trade_no)
             order_qs = Order_Model.objects.filter(trade_no=trade_no, payType=1)
             if not order_qs.exists():
                 transaction_subject = item['transaction_info'].get('transaction_subject', '')
@@ -1486,10 +1488,14 @@ class CronComparedDataView(View):
         total = round(total, 2)
         daily_reconciliation = DailyReconciliation.objects.filter(time=timestamp)
         if daily_reconciliation.exists():
-            daily_reconciliation.update(paypal_num=count, paypal_total=total, upd_time=now_time)
+            if daily_reconciliation.first().order_ids:
+                more_order_list = daily_reconciliation.first().order_ids.split(',') + more_order_list
+            order_ids = ','.join(more_order_list)
+            daily_reconciliation.update(paypal_num=count, paypal_total=total, upd_time=now_time, order_ids=order_ids)
         else:
+            order_ids = ','.join(more_order_list)
             DailyReconciliation.objects.create(paypal_num=count, paypal_total=total, time=timestamp,
-                                               creat_time=now_time, upd_time=now_time)
+                                               order_ids=order_ids, creat_time=now_time, upd_time=now_time)
 
     @staticmethod
     def compared_wechat_order(response):
@@ -1597,7 +1603,7 @@ class CronComparedDataView(View):
         end_date_stamp = int(end_date.timestamp())
         try:
             order_qs = Order_Model.objects.filter(status=1, payType=1, payTime__gte=start_date_stamp,
-                                                  payTime__lt=end_date_stamp).values('trade_no', 'price')
+                                                  payTime__lt=end_date_stamp).values('orderID', 'trade_no', 'price')
             if CONFIG_INFO == CONFIG_EUR:
                 return response.json(0, list(order_qs))
             thread = threading.Thread(target=CronComparedDataView.thread_compared_ansjer_order,
@@ -1628,20 +1634,26 @@ class CronComparedDataView(View):
         count = len(all_order_list)
         paypal_api = paypalrestsdk.Api(PAYPAL_CRD)
         for index, order in enumerate(all_order_list):
+            if not order['trade_no']:
+                more_order_list.append(order['orderID'])
+                continue
             total += float(order['price'])
             if all_order_list.index(order) != index:
-                more_order_list.append(order['trade_no'])
+                more_order_list.append(order['orderID'])
                 continue
             paypal_url = 'v1/reporting/transactions?start_date={}-{}-01T00:00:00-0700&end_date={}-{}-01T00:00:00-0700&transaction_id={}&fields=all&page_size=100&page=1'.format(
                 begin_date.year, begin_date.month, end_date.year, end_date.month, order['trade_no'])
             paypal_order_list = paypal_api.get(paypal_url)
             if not paypal_order_list['transaction_details']:
-                more_order_list.append(order['trade_no'])
-        trade_nos = ','.join(more_order_list)
+                more_order_list.append(order['orderID'])
         total = round(total, 2)
         daily_reconciliation = DailyReconciliation.objects.filter(time=start_timestamp)
         if daily_reconciliation.exists():
-            daily_reconciliation.update(ansjer_total=total, ansjer_num=count, trade_nos=trade_nos, upd_time=now_time)
+            if daily_reconciliation.first().order_ids:
+                more_order_list = daily_reconciliation.first().order_ids.split(',') + more_order_list
+            order_ids = ','.join(more_order_list)
+            daily_reconciliation.update(ansjer_total=total, ansjer_num=count, order_ids=order_ids, upd_time=now_time)
         else:
-            DailyReconciliation.objects.create(trade_nos=trade_nos, ansjer_total=total, ansjer_num=count,
+            order_ids = ','.join(more_order_list)
+            DailyReconciliation.objects.create(order_ids=order_ids, ansjer_total=total, ansjer_num=count,
                                                time=start_timestamp, creat_time=now_time, upd_time=now_time)

+ 1 - 1
Controller/PaymentCycle.py

@@ -568,7 +568,7 @@ class PaypalCycleNotify(View):
                                            currency=order_qs[0]['currency'], addTime=nowTime,
                                            updTime=nowTime, order_type=order_type,
                                            pay_url='', isSelectDiscounts=0,
-                                           commodity_code=commodity_code,
+                                           commodity_code=commodity_code, create_vod=1,
                                            commodity_type=commodity_type, rank_id=rank, paymentID='',
                                            coupon_id='', uid_bucket_id=uid_bucket_id, status=1,
                                            agreement_id=agreement_id, store_meal_name=store_meal_name,