fix: 设备最后上数时间,新增字段,接口调用,小程序显示。

This commit is contained in:
tianyongbao
2026-06-04 13:53:30 +08:00
parent e5c7ce5a9a
commit 57abbcff85
13 changed files with 259 additions and 0 deletions

View File

@@ -92,6 +92,14 @@ public interface PayOrderBusinessService {
*/
int compensateUnpaidOrders();
/**
* 主动确认单笔订单支付状态。
*
* @param outTradeNumber 商户订单号
* @return 是否已确认并处理支付成功
*/
boolean confirmPaidOrder(String outTradeNumber);
/**
* 修复已支付订单中设备有效期未落库的异常数据。
*

View File

@@ -570,6 +570,49 @@ public class PayOrderBusinessServiceImpl implements PayOrderBusinessService {
return Boolean.TRUE.equals(success);
}
@Override
public boolean confirmPaidOrder(String outTradeNumber) {
if (outTradeNumber == null || outTradeNumber.isEmpty()) {
return false;
}
PayOrder order = queryByOutTradeNumber(outTradeNumber);
if (order == null) {
log.warn("[支付确认] 本地订单不存在: outTradeNumber={}", outTradeNumber);
return false;
}
if (PayOrderStatus.SUCCESS.equals(order.getOrderStatus())) {
log.info("[支付确认] 订单已成功: orderId={}, outTradeNumber={}", order.getId(), outTradeNumber);
return true;
}
String queryResult = wxPayService.queryOrderByOutTradeNo(outTradeNumber);
if (queryResult == null) {
log.warn("[支付确认] 查询微信订单失败: orderId={}, outTradeNumber={}", order.getId(), outTradeNumber);
return false;
}
JSONObject resultJson = JSONUtil.parseObj(queryResult);
String tradeState = resultJson.getStr("trade_state");
if ("SUCCESS".equalsIgnoreCase(tradeState)) {
return compensateSingleOrder(order, resultJson);
}
if ("CLOSED".equalsIgnoreCase(tradeState)) {
payOrderMapper.update(null,
new LambdaUpdateWrapper<PayOrder>()
.eq(PayOrder::getId, order.getId())
.ne(PayOrder::getOrderStatus, PayOrderStatus.SUCCESS)
.set(PayOrder::getOrderStatus, PayOrderStatus.CLOSED)
.set(PayOrder::getTradeState, "CLOSED")
.set(PayOrder::getTradeStateDescription, "微信侧已关闭")
);
}
log.info("[支付确认] 订单未支付成功: orderId={}, outTradeNumber={}, tradeState={}",
order.getId(), outTradeNumber, tradeState);
return false;
}
@Override
@Transactional(rollbackFor = Exception.class)
public int repairPaidOrderDeviceDeadTime() {