修改订单创建逻辑
This commit is contained in:
parent
f6085f3e32
commit
e74856423f
|
@ -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 "
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue