Ver código fonte

新增订单支付记录表

zhangdongming 1 ano atrás
pai
commit
5d4c16d853

+ 2 - 2
AdminController/UnicomManageController.py

@@ -652,7 +652,7 @@ class UnicomManageControllerView(View):
                 if unicom_combo is False:
                     return response.json(178)
                 rank_id, ai_rank_id = UnicomComboView.get_cloud_or_ai_combo()  # 生成订单必须添加该字段
-                uid = CommonService.query_uid_with_serial(serialNo)  # 获取序列号或UID
+                uid = CommonService.get_uid_by_serial_number(serialNo)  # 获取序列号或UID
                 # 获取套餐信息
                 order_dict = {
                     'orderID': order_id,
@@ -1233,7 +1233,7 @@ class UnicomManageControllerView(View):
             desc = '{} 转移后,前orderId:{}'.format(order_data['store_meal_name'], old_order_id)
             order_data['desc'] = desc
             now_order = CommonService.createOrderID()
-            uid = CommonService.query_uid_with_serial(target_serial_number)
+            uid = CommonService.get_uid_by_serial_number(target_serial_number)
             order_data['orderID'] = now_order
             order_data['UID'] = uid
             order_data['currency'] = 'CNY'

+ 70 - 3
Controller/UnicomCombo/UnicomComboController.py

@@ -21,7 +21,7 @@ from django.views.generic.base import View
 from Ansjer.config import LOGGER
 from Model.models import UnicomDeviceInfo, UnicomCombo, Pay_Type, Order_Model, Store_Meal, AiStoreMeal, \
     UnicomComboOrderInfo, UnicomComboExperienceHistory, UnicomDeviceStatusChangePush, SysMsgModel, LogModel, \
-    DeviceLiveRestrict
+    DeviceLiveRestrict, OrderPayLog
 from Object.EIoTClubObject import EIoTClubObject
 from Object.Enums.WXOperatorEnum import WXOperatorEnum
 from Object.RedisObject import RedisObject
@@ -202,7 +202,7 @@ class UnicomComboView(View):
                     return False
                 c_time = combo_order_qs[0].created_time
                 # 根据序列号获取UID
-                uid = CommonService.query_uid_with_serial(serial_no)
+                uid = CommonService.get_uid_by_serial_number(serial_no)
                 order_id = CommonService.createOrderID()
                 rank_id, ai_rank_id = cls.get_cloud_or_ai_combo()  # 生成订单必须添加该字段
                 order_dict = {'orderID': order_id, 'UID': uid, 'rank_id': rank_id, 'ai_rank_id': ai_rank_id,
@@ -613,7 +613,7 @@ class UnicomComboView(View):
                 if not price:
                     return response.json(173)
                 unicom_device_qs = unicom_device_qs.first()
-                device_uid = CommonService.query_uid_with_serial(unicom_device_qs['serial_no'])
+                device_uid = CommonService.get_uid_by_serial_number(unicom_device_qs['serial_no'])
                 order_id = CommonService.createOrderID()
                 rank_id, ai_rank_id = cls.get_cloud_or_ai_combo()
 
@@ -627,6 +627,8 @@ class UnicomComboView(View):
 
                 params = 'lang=cn' + '&activateType=' + activate_type
                 logger.info('激活类型:{}'.format(activate_type))
+                serial_number = unicom_device_qs['serial_no']
+
                 result = {'result_code': 0, 'reason': 'success', 'error_code': 0}
                 if pay_type == 2:  # 支付宝
                     pay_price = PayService.get_two_float(price, 2)
@@ -637,6 +639,7 @@ class UnicomComboView(View):
                                                                              notify_url,
                                                                              unicom_combo_qs['remark'], response)
                     res_data = {'redirectUrl': order_dict['pay_url'], 'orderID': order_id}
+                    cls.create_order_pay_log(order_id, f'{serial_number}购买联通4G套餐', notify_url, 'aliPay', 'SUCCESS')
                 elif pay_type == 3:  # 微信支付
                     notify_url = 'unicom/wap/pay/wechat-notify'
                     ip = CommonService.get_ip_address(request)
@@ -647,6 +650,7 @@ class UnicomComboView(View):
                                                                    unicom_combo_qs['remark'],
                                                                    response)
                     result['result'] = sign_params
+                    cls.create_order_pay_log(order_id, f'{serial_number}购买联通4G套餐', notify_url, 'wechatPay', 'SUCCESS')
                 else:
                     return response.json(444, {'param': 'pay_type'})
 
@@ -1140,3 +1144,66 @@ class UnicomComboView(View):
                 '{}update_flow_package_order_by_iccid,errLine:{}, errMsg:{}'.format(iccid, e.__traceback__.tb_lineno,
                                                                                     repr(e)))
             return False
+
+    @staticmethod
+    def create_order_pay_log(order_id, business_name, api_url, sender, access_result):
+        """
+        订单支付日志
+        @param order_id: 订单ID
+        @param business_name: 业务名称
+        @param api_url: 回调api地址
+        @param sender: 发送方/调用方
+        @param access_result: 获取支付请求结果
+        @return: True | False
+        """
+        try:
+            LOGGER.info(f'***创建订单支付日志order_id={order_id}')
+            now_time = int(time.time())
+            params = {
+                'order_id': order_id,
+                'business_name': business_name,
+                'api_url': api_url, 'sender': sender, 'access_result': access_result, 'created_time': now_time,
+                'updated_time': now_time,
+            }
+            OrderPayLog.objects.create(**params)
+            return True
+        except Exception as e:
+            LOGGER.info('{}create_order_pay_log,errLine:{}, errMsg:{}'.
+                        format(order_id, e.__traceback__.tb_lineno, repr(e)))
+            return False
+
+    @staticmethod
+    def save_order_pay_log(order_id, trade_no, api_url, sender, access_result, response_content):
+        """
+        保存订单支付日志
+        @param order_id: 订单ID
+        @param trade_no: 交易流水号
+        @param api_url: 异步回调API
+        @param sender: 发送方/调用方
+        @param access_result: 调用结果
+        @param response_content: 响应内容
+        @return: True | False
+        """
+        try:
+            LOGGER.info(f'***保存支付回调记录order_id={order_id},流水号={trade_no}')
+            now_time = int(time.time())
+            params = {
+                'access_result': access_result,
+                'updated_time': now_time,
+                'trans_serial_no': trade_no,
+                'response_content': response_content
+            }
+            pay_log_qs = OrderPayLog.objects.filter(order_id=order_id)
+            if pay_log_qs.exists():
+                pay_log_qs.update(**params)
+                return True
+            params['order_id'] = order_id
+            params['api_url'] = api_url
+            params['sender'] = sender
+            params['created_time'] = now_time
+            OrderPayLog.objects.create(**params)
+            return True
+        except Exception as e:
+            LOGGER.info('{}save_order_pay_log,errLine:{}, errMsg:{}'.
+                        format(order_id, e.__traceback__.tb_lineno, repr(e)))
+            return False

+ 10 - 2
Controller/UnicomCombo/UnicomComboPayNotifyController.py

@@ -60,7 +60,7 @@ class UnicomComboPayNotifyView(View):
             passback_params = re_data['passback_params']
             params = dict([(k, v[0]) for k, v in parse_qs(unquote(passback_params)).items()])
             activate_type = int(params['activateType'])
-            logger.info('支付宝异步回调参数:{},携带参数{}', re_data, params)
+            logger.info('支付宝异步回调参数:{},携带参数{}'.format(re_data, params))
             signature = re_data['sign']
             re_data.pop('sign')
             order_id = re_data['out_trade_no']
@@ -74,6 +74,8 @@ class UnicomComboPayNotifyView(View):
 
             order_qs = Order_Model.objects.filter(orderID=order_id)
             if not order_qs.exists():
+                UnicomComboView().save_order_pay_log(order_id, re_data["trade_no"],
+                                                     'unicom/wap/pay/wechat-notify', 'aliPay', 'FAILED', re_data)
                 logger.info('系统订单不存在:{}'.format(order_id))
                 return HttpResponse('fail')
             order_qs = order_qs.filter(status=0)
@@ -86,6 +88,9 @@ class UnicomComboPayNotifyView(View):
             success = alipay.verify(re_data, signature)
             if not success or re_data["trade_status"] not in ("TRADE_SUCCESS", "TRADE_FINISHED"):
                 return HttpResponse('fail')
+
+            UnicomComboView().save_order_pay_log(order_id, re_data["trade_no"],
+                                                 'unicom/wap/pay/wechat-notify', 'aliPay', 'SUCCESS', re_data)
             return cls.order_pay_notify(order_id, re_data["trade_no"], activate_type, notify_key.format(order_id),
                                         order_qs, redisObj)
         except Exception as e:
@@ -117,6 +122,8 @@ class UnicomComboPayNotifyView(View):
             order_id = re_data['out_trade_no']  # 商户订单号
             order_qs = Order_Model.objects.filter(orderID=order_id)
             if not order_qs.exists():
+                UnicomComboView().save_order_pay_log(order_id, re_data["transaction_id"],
+                                                     'unicom/wap/pay/ali-notify', 'wechatPay', 'FAILED', re_data)
                 return HttpResponse(pay.xml_to_dict({'return_code': 'FAIL'}))
             order_qs = order_qs.filter(status=0)
             if not order_qs.exists():
@@ -138,7 +145,8 @@ class UnicomComboPayNotifyView(View):
             redisObj.CONN.expire(notify_key.format(order_id), 60)
             if not isLock:
                 return HttpResponse(pay.xml_to_dict({'return_code': 'FAIL'}))
-
+            UnicomComboView().save_order_pay_log(order_id, re_data["transaction_id"],
+                                                 'unicom/wap/pay/ali-notify', 'wechatPay', 'SUCCESS', re_data)
             return cls.order_pay_notify(order_id, re_data["transaction_id"], activate_type, notify_key.format(order_id),
                                         order_qs,
                                         redisObj, True)

+ 2 - 2
Controller/UnicomCombo/WXTechController.py

@@ -84,7 +84,7 @@ class WXTechControllerView(View):
             device_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_number).values('iccid')
             if not device_qs.exists():
                 return response(173)
-            uid = CommonService.query_uid_with_serial(serial_number)
+            uid = CommonService.get_uid_by_serial_number(serial_number)
             order_info_qs = Order_Model.objects.filter(UID=uid, order_type=3).values('trade_no') \
                 .order_by('-payTime')
             if not order_info_qs.exists():
@@ -232,7 +232,7 @@ class WXTechControllerView(View):
         combo_info_vo = combo_info_qs[0]
         n_time = int(time.time())
         # 根据序列号获取UID
-        uid = CommonService.query_uid_with_serial(serial_no)
+        uid = CommonService.get_uid_by_serial_number(serial_no)
         order_id = CommonService.createOrderID()
         # 生成订单必须添加该字段
         rank_id, ai_rank_id = UnicomComboView().get_cloud_or_ai_combo()

+ 21 - 0
Model/models.py

@@ -4313,3 +4313,24 @@ class AbnormalOrder(models.Model):
     class Meta:
         db_table = 'abnormal_order'
         verbose_name = '异常订单表'
+
+
+class OrderPayLog(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='主键'),
+    order_id = models.CharField(max_length=30, db_index=True, verbose_name='订单ID', blank=True, default='')
+    order_no = models.CharField(max_length=30, verbose_name='订单号', blank=True, default='')
+    trans_serial_no = models.CharField(max_length=30, verbose_name='流水号', blank=True, default='')
+    business_name = models.CharField(max_length=30, verbose_name='业务名称', blank=True, default='')
+    sender = models.CharField(max_length=30, verbose_name='发送方/调用方', blank=True, default='')
+    api_url = models.CharField(max_length=64, verbose_name='接口地址', blank=True, default='')
+    request_content = models.JSONField(null=True, verbose_name='请求内容')
+    response_content = models.JSONField(null=True, verbose_name='响应内容')
+    # SUCCESS, FAILED, EXCEPTION, ERROR
+    response_times = models.BigIntegerField(verbose_name='接收调用耗时,响应时长,单位ms', default=0)
+    access_result = models.CharField(max_length=30, verbose_name='接口调用状态', blank=True, default='')
+    created_time = models.IntegerField(default=0, verbose_name='创建时间')
+    updated_time = models.IntegerField(default=0, verbose_name='修改时间')
+
+    class Meta:
+        db_table = 'order_pay_log'
+        verbose_name = '订单支付日志'