记得上下班打卡 | git大法好,push需谨慎
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liquidnet-bus-v1
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
董敬伟
liquidnet-bus-v1
Commits
271d0ef2
Commit
271d0ef2
authored
Oct 24, 2025
by
姜秀龙
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
订单处理
parent
8b1bec4f
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
172 additions
and
3 deletions
+172
-3
JxlDataKylinOrderController.java
...orm/controller/A_fskfsfs/JxlDataKylinOrderController.java
+172
-3
No files found.
liquidnet-bus-service/liquidnet-service-platform/liquidnet-service-platform-impl/src/main/java/com/liquidnet/service/platform/controller/A_fskfsfs/JxlDataKylinOrderController.java
View file @
271d0ef2
...
@@ -190,9 +190,9 @@ public class JxlDataKylinOrderController {
...
@@ -190,9 +190,9 @@ public class JxlDataKylinOrderController {
"JOIN kylin_order_ticket_status as kts ON kts.order_id = kot.order_tickets_id "
+
"JOIN kylin_order_ticket_status as kts ON kts.order_id = kot.order_tickets_id "
+
"WHERE 1 = 1 "
+
"WHERE 1 = 1 "
+
// "AND kts.status = 0 " +
// "AND kts.status = 0 " +
//
"AND kts.status = 2 " +
"AND kts.status = 2 "
+
"AND kts.status = 1 "
+
//
"AND kts.status = 1 " +
"AND kot.order_code = '5727
38923375898624308034090
' "
+
"AND kot.order_code = '5727
44630768259072602399699
' "
+
"AND kot.performance_title = '2025珠海草莓音乐节' "
+
"AND kot.performance_title = '2025珠海草莓音乐节' "
+
"AND do.status = 1"
;
"AND do.status = 1"
;
...
@@ -480,4 +480,173 @@ public class JxlDataKylinOrderController {
...
@@ -480,4 +480,173 @@ public class JxlDataKylinOrderController {
}
}
}
}
@GetMapping
(
"KO005"
)
@ApiOperation
(
"修复订单支付状态 - admin显示已付款 用户显示取消中"
)
public
ResponseDto
KO005
()
{
try
{
log
.
info
(
"开始批量修复订单支付状态"
);
// 第一步:查询所有需要修复的订单(支付成功但订单状态未更新的)
log
.
info
(
"第一步:查询所有需要修复的订单"
);
String
findOrdersSql
=
"SELECT kot.order_tickets_id, kot.pay_code, kot.order_code, kts.status, kot.user_id "
+
"FROM kylin_order_tickets as kot "
+
"JOIN dragon_orders as do ON do.code = kot.pay_code "
+
"JOIN kylin_order_ticket_status as kts ON kts.order_id = kot.order_tickets_id "
+
"WHERE 1 = 1 "
+
"AND kts.status = 1 "
+
// "AND kot.order_code like '%0331891531%' " +
"AND kot.performance_title = '2025珠海草莓音乐节' "
+
"AND do.status = 1"
;
Connection
connection
=
DriverManager
.
getConnection
(
SQL_URL
,
SQL_USER
,
SQL_PWD
);
PreparedStatement
stmt
=
connection
.
prepareStatement
(
findOrdersSql
);
ResultSetImpl
rs
=
(
ResultSetImpl
)
stmt
.
executeQuery
();
int
totalCount
=
0
;
int
successCount
=
0
;
int
skipCount
=
0
;
// 跳过的订单数(有退款申请的)
int
failCount
=
0
;
// 错误记录列表
java
.
util
.
List
<
String
>
errorList
=
new
java
.
util
.
ArrayList
<>();
// 第二步:逐个修复订单
log
.
info
(
"第二步:开始逐个修复订单"
);
while
(
rs
.
next
())
{
totalCount
++;
String
orderTicketsId
=
rs
.
getString
(
"order_tickets_id"
);
String
orderCode
=
rs
.
getString
(
"order_code"
);
String
userId
=
rs
.
getString
(
"user_id"
);
try
{
log
.
info
(
"正在修复订单 {} - orderCode: {}, orderTicketsId: {}"
,
totalCount
,
orderCode
,
orderTicketsId
);
// 第二步补充:检查是否有退款申请记录,有退款申请的不处理
String
checkRefundSql
=
"SELECT COUNT(1) as refund_count FROM kylin_order_refunds WHERE order_tickets_id = ?"
;
PreparedStatement
refundStmt
=
connection
.
prepareStatement
(
checkRefundSql
);
refundStmt
.
setString
(
1
,
orderTicketsId
);
ResultSetImpl
refundRs
=
(
ResultSetImpl
)
refundStmt
.
executeQuery
();
int
refundCount
=
0
;
if
(
refundRs
.
next
())
{
refundCount
=
refundRs
.
getInt
(
"refund_count"
);
}
if
(
refundCount
>
0
)
{
skipCount
++;
String
errorMsg
=
String
.
format
(
"订单存在退款申请记录,跳过修复 - orderCode: %s, 退款记录数: %d"
,
orderCode
,
refundCount
);
log
.
warn
(
errorMsg
);
errorList
.
add
(
"SKIP_REFUND: "
+
errorMsg
);
continue
;
}
// 第三步:查询MongoDB中的订单状态是否为 1 如果为 1 更新 继续redis 如果不为 1 记录错误跳过
log
.
info
(
"第三步:检查MongoDB中的订单状态"
);
// 先查询MongoDB中的订单状态
Query
mongoQuery
=
Query
.
query
(
Criteria
.
where
(
"orderTicketsId"
).
is
(
orderTicketsId
));
KylinOrderTicketVo
mongoOrder
=
mongoTemplate
.
findOne
(
mongoQuery
,
KylinOrderTicketVo
.
class
,
KylinOrderTicketVo
.
class
.
getSimpleName
());
if
(
mongoOrder
==
null
)
{
failCount
++;
String
errorMsg
=
String
.
format
(
"MongoDB中未找到订单,跳过修复 - orderCode: %s, orderTicketsId: %s"
,
orderCode
,
orderTicketsId
);
log
.
error
(
errorMsg
);
errorList
.
add
(
"MONGO_NOT_FOUND: "
+
errorMsg
);
continue
;
}
// 检查MongoDB中的订单状态是否为1(已支付)
if
(
mongoOrder
.
getStatus
()
==
null
||
mongoOrder
.
getStatus
()
!=
1
)
{
// 获取支付信息
String
verifySql
=
"SELECT do.payment_id, do.payment_type, do.payment_at "
+
"FROM kylin_order_tickets as kot "
+
"JOIN dragon_orders as do ON do.code = kot.pay_code "
+
"WHERE kot.order_code = ? AND do.status = 1"
;
PreparedStatement
payStmt
=
connection
.
prepareStatement
(
verifySql
);
payStmt
.
setString
(
1
,
orderCode
);
ResultSetImpl
payRs
=
(
ResultSetImpl
)
payStmt
.
executeQuery
();
String
paymentId
=
null
;
String
paymentType
=
null
;
String
paymentAt
=
null
;
if
(
payRs
.
next
())
{
paymentId
=
payRs
.
getString
(
"payment_id"
);
paymentType
=
payRs
.
getString
(
"payment_type"
);
paymentAt
=
payRs
.
getString
(
"payment_at"
);
}
// MongoDB状态正确,更新订单状态(确保状态一致)
Document
orderUpdateDoc
=
new
Document
(
"$set"
,
new
Document
()
.
append
(
"paymentType"
,
paymentType
)
.
append
(
"paymentId"
,
paymentId
)
.
append
(
"timePay"
,
paymentAt
)
.
append
(
"status"
,
1
)
.
append
(
"payStatus"
,
1
)
);
mongoTemplate
.
getCollection
(
KylinOrderTicketVo
.
class
.
getSimpleName
()).
updateOne
(
Query
.
query
(
Criteria
.
where
(
"orderTicketsId"
).
is
(
orderTicketsId
)).
getQueryObject
(),
orderUpdateDoc
);
log
.
info
(
"MongoDB订单状态更新完成 - orderCode: {}"
,
orderCode
);
// failCount++;
// String errorMsg = String.format("MongoDB中订单状态不为1,跳过修复 - orderCode: %s, MongoDB状态: %s", orderCode, mongoOrder.getStatus());
// log.error(errorMsg);
// errorList.add("MONGO_STATUS_ERROR: " + errorMsg);
// continue;
}
// 第四步:清理Redis缓存
redisDataSourceUtil
.
getRedisKylinUtil
().
del
(
KylinRedisConst
.
ORDER
+
orderTicketsId
);
redisDataSourceUtil
.
getRedisKylinUtil
().
del
(
KylinRedisConst
.
ORDER_LIST
+
userId
);
successCount
++;
log
.
info
(
"订单修复成功 - orderCode: {}"
,
orderCode
);
}
catch
(
Exception
e
)
{
failCount
++;
String
errorMsg
=
String
.
format
(
"订单修复异常失败 - orderCode: %s, error: %s"
,
orderCode
,
e
.
getMessage
());
log
.
error
(
errorMsg
,
e
);
errorList
.
add
(
"EXCEPTION: "
+
errorMsg
);
}
}
connection
.
close
();
// 打印详细的错误信息
if
(!
errorList
.
isEmpty
())
{
log
.
error
(
"=== 详细错误信息 ==="
);
for
(
int
i
=
0
;
i
<
errorList
.
size
();
i
++)
{
log
.
error
(
"错误 {}: {}"
,
i
+
1
,
errorList
.
get
(
i
));
}
log
.
error
(
"=== 错误信息结束 ==="
);
}
// 验证计数是否正确
int
calculatedTotal
=
successCount
+
skipCount
+
failCount
;
if
(
calculatedTotal
!=
totalCount
)
{
log
.
warn
(
"计数验证失败!总数: {}, 计算总数: {} (成功: {} + 跳过: {} + 失败: {})"
,
totalCount
,
calculatedTotal
,
successCount
,
skipCount
,
failCount
);
}
log
.
info
(
"批量修复完成 - 总数: {}, 成功: {}, 跳过: {}, 失败: {}"
,
totalCount
,
successCount
,
skipCount
,
failCount
);
String
resultMsg
=
String
.
format
(
"批量修复完成!总数: %d, 成功: %d, 跳过: %d, 失败: %d"
,
totalCount
,
successCount
,
skipCount
,
failCount
);
if
(!
errorList
.
isEmpty
())
{
resultMsg
+=
"\n详细错误信息:\n"
+
String
.
join
(
"\n"
,
errorList
);
}
return
ResponseDto
.
success
(
resultMsg
);
}
catch
(
Exception
e
)
{
log
.
error
(
"批量修复订单支付状态失败, error: "
,
e
);
return
ResponseDto
.
failure
(
"批量修复失败: "
+
e
.
getMessage
());
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment