From e74856423ff2f284b74efe823e39dd2689d14a86 Mon Sep 17 00:00:00 2001 From: wystan Date: Thu, 28 Nov 2024 21:19:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AE=A2=E5=8D=95=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- payment_backend/repositories/order.py | 22 ++++++++++++++++++++- payment_backend/services/order.py | 28 +++++++++++++++++---------- payment_headend/index.html | 16 +++++++-------- 3 files changed, 47 insertions(+), 19 deletions(-) diff --git a/payment_backend/repositories/order.py b/payment_backend/repositories/order.py index 3f35e39..74fddb6 100644 --- a/payment_backend/repositories/order.py +++ b/payment_backend/repositories/order.py @@ -1,3 +1,5 @@ +import uuid + from custom_decorators import singleton from database import Database from loguru import logger @@ -10,6 +12,11 @@ class OrderRepository: self.db = Database(config['MYSQL']) def create(self, order): + if order.order_id is None: + date_str = current().strftime('%Y%m%d%H%M%S') + unique_id = str(uuid.uuid4()).split('-')[0] + order.order_id = f"{date_str}-{unique_id}" + timestamp = current_timestamp() order.create_timestamp = timestamp order.update_timestamp = timestamp @@ -20,11 +27,24 @@ class OrderRepository: cursor = self.db.execute_query(sql, params) cursor.close() self.db.commit() - return timestamp + return order.order_id, timestamp except Exception: self.db.rollback() raise + def get_last(self, order): + sql, params = order.select_sql(query_columns=['order_id', 'update_timestamp']) + cursor = self.db.execute_query(f'{sql} ORDER BY update_timestamp DESC LIMIT 1', params) + result = cursor.fetchone() + cursor.close() + return result + + def get_or_create(self, order): + result = self.get_last(order) + if not result: + return self.create(order) + return result + def update_status(self, order_id, status): try: self.db.execute_query("UPDATE orders " diff --git a/payment_backend/services/order.py b/payment_backend/services/order.py index efa8c5a..d66cbcb 100644 --- a/payment_backend/services/order.py +++ b/payment_backend/services/order.py @@ -1,5 +1,3 @@ -import uuid - from loguru import logger from custom_decorators import singleton @@ -48,25 +46,29 @@ class OrderService: return cleaned_orders, order_count def create_order(self, name, phone, email, quant, payment_method, wallet_address): - date_str = current().strftime('%Y%m%d%H%M%S') - unique_id = str(uuid.uuid4()).split('-')[0] - order_id = f"{date_str}-{unique_id}" try: to_address = self.config['PaymentAddresses'][payment_method] except KeyError: raise ValueError("Payment method not supported") - order = Order(order_id=order_id, name=name, phone=phone, email=email, + order = Order(name=name, phone=phone, email=email, quant=quant, payment_method=payment_method, - from_address=wallet_address, to_address=to_address) - create_timestamp = self.order_repo.create(order) - return order_id, create_timestamp + from_address=wallet_address, to_address=to_address, + status=2) + result = self.order_repo.get_last(order) + if not result: + result = self.order_repo.create(order) + elif not self.check_order_efficiency(result[1]): + self.order_repo.update_status(result[0], status=0) + result = self.order_repo.create(order) + return result + def finish_order(self, order_id): # 判断支付时间是否超过订单存活时间 status = 2 now = current_timestamp() quant, from_address, to_address, create_timestamp = self.order_repo.get_order_info(order_id) - if is_time_difference_greater_than(create_timestamp, now, milliseconds=self.config.order.lifetime): + if not self.check_order_efficiency(create_timestamp, now=now): logger.debug('Timed Out') status = 0 else: @@ -88,3 +90,9 @@ class OrderService: if status != 2: self.order_repo.update_status(order_id, status) return status + + def check_order_efficiency(self, timestamp, now=None): + if now is None: + now = current_timestamp() + efficiency = not is_time_difference_greater_than(timestamp, now, milliseconds=self.config.order.lifetime) + return efficiency diff --git a/payment_headend/index.html b/payment_headend/index.html index 1097a23..97ba5e9 100644 --- a/payment_headend/index.html +++ b/payment_headend/index.html @@ -329,20 +329,20 @@ style="width: 18%;"> (USDT)
- - + +
- - + +
- - + +
- - + +