修改订单创建逻辑

This commit is contained in:
wystan 2024-11-28 21:19:50 +08:00
parent f6085f3e32
commit e74856423f
3 changed files with 47 additions and 19 deletions

View File

@ -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 "

View File

@ -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

View File

@ -329,20 +329,20 @@
style="width: 18%;"> (USDT)
</div>
<div class="form-group">
<label for="nickname">Name:</label>
<input type="text" id="nickname" placeholder="Please enter your Nickname.">
<label for="nickname">Nickname (Use your game name)<span style="color: red;">*</span>:</label>
<input type="text" id="nickname" placeholder="Please make sure your entered name matches the one used in the game." required>
</div>
<div class="form-group">
<label for="phone">Phone:</label>
<input type="text" id="phone" placeholder="Please enter your phone number.">
<label for="phone">Phone<span style="color: red;">*</span>:</label>
<input type="text" id="phone" placeholder="Please enter your phone number." required>
</div>
<div class="form-group">
<label for="email">Email:</label>
<input type="email" id="email" placeholder="Please enter your email.">
<label for="email">Email<span style="color: red;">*</span>:</label>
<input type="email" id="email" placeholder="Please enter your email." required>
</div>
<div class="form-group">
<label for="wallet">Wallet address:</label>
<input type="text" id="wallet" placeholder="Enter your wallet address.">
<label for="wallet">Wallet address<span style="color: red;">*</span>:</label>
<input type="text" id="wallet" placeholder="Enter your wallet address." required>
</div>
<button type="button" onclick="handleSubmit()" id="createOrder" style="background-color: orange;">Gain Points Now!!!</button>
<button type="button" onclick="handleQuery()" style="margin-top: 1vh;">Query My Order</button>