From 640ccb9229224642515527daf87f308a7aa9bdf4 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Wed, 10 Jun 2026 11:47:26 +0800
Subject: [PATCH] 1

---
 trading-order-admin/src/main/java/com/yami/trading/admin/task/contract/ContractApplyOrderHandleJob.java |   23 +++++++++++++++++++++++
 1 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/task/contract/ContractApplyOrderHandleJob.java b/trading-order-admin/src/main/java/com/yami/trading/admin/task/contract/ContractApplyOrderHandleJob.java
index c1e8a5f..ac1bb6c 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/task/contract/ContractApplyOrderHandleJob.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/task/contract/ContractApplyOrderHandleJob.java
@@ -48,6 +48,11 @@
 				List<ContractApplyOrder> list = this.contractApplyOrderService.findSubmitted();
 				for (int i = 0; i < list.size(); i++) {
 					ContractApplyOrder order = list.get(i);
+					ContractApplyOrder latest = this.contractApplyOrderService.findByOrderNo(order.getOrderNo());
+					if (latest == null || !ContractApplyOrder.STATE_SUBMITTED.equals(latest.getState())) {
+						continue;
+					}
+					order = latest;
 					List<Realtime> realtime_list = this.dataService.realtime(order.getSymbol());
 					Realtime realtime = null;
 					if (realtime_list.size() > 0) {
@@ -107,6 +112,10 @@
 	public void handle(ContractApplyOrder applyOrder, Realtime realtime) {
 		boolean lock = false;
 		try {
+			applyOrder = this.contractApplyOrderService.findByOrderNo(applyOrder.getOrderNo());
+			if (applyOrder == null || !ContractApplyOrder.STATE_SUBMITTED.equals(applyOrder.getState())) {
+				return;
+			}
 			if (!ContractLock.add(applyOrder.getOrderNo())) {
 				return;
 			}
@@ -152,6 +161,11 @@
 
 			}
 
+		} catch (YamiShopBindException e) {
+			log.error("委托单处理失败 orderNo={}, msg={}", applyOrder.getOrderNo(), e.getMessage());
+			if (isInsufficientFunds(e)) {
+				this.contractApplyOrderService.saveCancel(applyOrder.getPartyId(), applyOrder.getOrderNo());
+			}
 		} catch (Exception e) {
 			log.error("error:", e);
 		} finally {
@@ -163,6 +177,15 @@
 		}
 
 	}
+
+	private boolean isInsufficientFunds(YamiShopBindException e) {
+		if (e.getMessage() == null) {
+			return false;
+		}
+		String msg = e.getMessage().toLowerCase();
+		return msg.contains("not sufficient funds") || msg.contains("余额不足");
+	}
+
 	public void start(){
 		new Thread(this, "ContractApplyOrderHandleJob").start();
 		if (log.isInfoEnabled())

--
Gitblit v1.9.3