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

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

View File

@@ -262,6 +262,7 @@ public class WeixinController extends BaseController {
// 9. 构建返回结果
WxPayOrderVo result = new WxPayOrderVo();
result.setPrepayId(prepayId);
result.setOutTradeNumber(order.getOutTradeNumber());
result.setTotalAmount(order.getTotalAmount());
result.setTimestamp(payParams.get("timeStamp"));
result.setNonceStr(payParams.get("nonceStr"));
@@ -278,6 +279,27 @@ public class WeixinController extends BaseController {
}
}
@Operation(summary = "主动确认微信支付订单")
@PostMapping("/pay/confirm_order")
public R<Boolean> confirmOrder(@RequestBody Map<String, String> request) {
try {
if (payOrderBusinessService == null) {
return R.fail("支付服务未启用");
}
String outTradeNumber = request != null ? request.get("outTradeNumber") : null;
if (outTradeNumber == null || outTradeNumber.isEmpty()) {
return R.fail("商户订单号不能为空");
}
boolean success = payOrderBusinessService.confirmPaidOrder(outTradeNumber);
return success ? R.ok(true) : R.fail("订单未支付成功或确认失败");
} catch (Exception e) {
log.error("确认支付订单失败", e);
return R.fail("确认支付订单失败: " + e.getMessage());
}
}
@Operation(summary = "微信支付回调通知")
@PostMapping("/pay_notify")
public Map<String, String> payNotify(

View File

@@ -24,6 +24,12 @@ public class WxPayOrderVo implements Serializable {
@Schema(description = "预支付ID")
private String prepayId;
/**
* 商户系统内部订单号
*/
@Schema(description = "商户订单号")
private String outTradeNumber;
/**
* 签名类型
*/

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() {