修改订单创建逻辑
This commit is contained in:
parent
f6085f3e32
commit
e74856423f
|
@ -1,3 +1,5 @@
|
||||||
|
import uuid
|
||||||
|
|
||||||
from custom_decorators import singleton
|
from custom_decorators import singleton
|
||||||
from database import Database
|
from database import Database
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
@ -10,6 +12,11 @@ class OrderRepository:
|
||||||
self.db = Database(config['MYSQL'])
|
self.db = Database(config['MYSQL'])
|
||||||
|
|
||||||
def create(self, order):
|
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()
|
timestamp = current_timestamp()
|
||||||
order.create_timestamp = timestamp
|
order.create_timestamp = timestamp
|
||||||
order.update_timestamp = timestamp
|
order.update_timestamp = timestamp
|
||||||
|
@ -20,11 +27,24 @@ class OrderRepository:
|
||||||
cursor = self.db.execute_query(sql, params)
|
cursor = self.db.execute_query(sql, params)
|
||||||
cursor.close()
|
cursor.close()
|
||||||
self.db.commit()
|
self.db.commit()
|
||||||
return timestamp
|
return order.order_id, timestamp
|
||||||
except Exception:
|
except Exception:
|
||||||
self.db.rollback()
|
self.db.rollback()
|
||||||
raise
|
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):
|
def update_status(self, order_id, status):
|
||||||
try:
|
try:
|
||||||
self.db.execute_query("UPDATE orders "
|
self.db.execute_query("UPDATE orders "
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
import uuid
|
|
||||||
|
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
from custom_decorators import singleton
|
from custom_decorators import singleton
|
||||||
|
@ -48,25 +46,29 @@ class OrderService:
|
||||||
return cleaned_orders, order_count
|
return cleaned_orders, order_count
|
||||||
|
|
||||||
def create_order(self, name, phone, email, quant, payment_method, wallet_address):
|
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:
|
try:
|
||||||
to_address = self.config['PaymentAddresses'][payment_method]
|
to_address = self.config['PaymentAddresses'][payment_method]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise ValueError("Payment method not supported")
|
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,
|
quant=quant, payment_method=payment_method,
|
||||||
from_address=wallet_address, to_address=to_address)
|
from_address=wallet_address, to_address=to_address,
|
||||||
create_timestamp = self.order_repo.create(order)
|
status=2)
|
||||||
return order_id, create_timestamp
|
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):
|
def finish_order(self, order_id):
|
||||||
# 判断支付时间是否超过订单存活时间
|
# 判断支付时间是否超过订单存活时间
|
||||||
status = 2
|
status = 2
|
||||||
now = current_timestamp()
|
now = current_timestamp()
|
||||||
quant, from_address, to_address, create_timestamp = self.order_repo.get_order_info(order_id)
|
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')
|
logger.debug('Timed Out')
|
||||||
status = 0
|
status = 0
|
||||||
else:
|
else:
|
||||||
|
@ -88,3 +90,9 @@ class OrderService:
|
||||||
if status != 2:
|
if status != 2:
|
||||||
self.order_repo.update_status(order_id, status)
|
self.order_repo.update_status(order_id, status)
|
||||||
return 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)
|
style="width: 18%;"> (USDT)
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="nickname">Name:</label>
|
<label for="nickname">Nickname (Use your game name)<span style="color: red;">*</span>:</label>
|
||||||
<input type="text" id="nickname" placeholder="Please enter your Nickname.">
|
<input type="text" id="nickname" placeholder="Please make sure your entered name matches the one used in the game." required>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="phone">Phone:</label>
|
<label for="phone">Phone<span style="color: red;">*</span>:</label>
|
||||||
<input type="text" id="phone" placeholder="Please enter your phone number.">
|
<input type="text" id="phone" placeholder="Please enter your phone number." required>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="email">Email:</label>
|
<label for="email">Email<span style="color: red;">*</span>:</label>
|
||||||
<input type="email" id="email" placeholder="Please enter your email.">
|
<input type="email" id="email" placeholder="Please enter your email." required>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="wallet">Wallet address:</label>
|
<label for="wallet">Wallet address<span style="color: red;">*</span>:</label>
|
||||||
<input type="text" id="wallet" placeholder="Enter your wallet address.">
|
<input type="text" id="wallet" placeholder="Enter your wallet address." required>
|
||||||
</div>
|
</div>
|
||||||
<button type="button" onclick="handleSubmit()" id="createOrder" style="background-color: orange;">Gain Points Now!!!</button>
|
<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>
|
<button type="button" onclick="handleQuery()" style="margin-top: 1vh;">Query My Order</button>
|
||||||
|
|
Loading…
Reference in New Issue