|
@@ -40,12 +40,18 @@ public class OrderUpdateEventHandler implements AwoaraEventHandler<OrderInfoObje
|
|
|
log.info("收到订单更新事件");
|
|
log.info("收到订单更新事件");
|
|
|
|
|
|
|
|
var topic = message.getTopic().split("/");
|
|
var topic = message.getTopic().split("/");
|
|
|
|
|
+ if (topic.length < 3) {
|
|
|
|
|
+ log.warn("订单更新事件 topic 格式异常,跳过处理:{}", message.getTopic());
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
var productKey = topic[1];
|
|
var productKey = topic[1];
|
|
|
var deviceName = topic[2];
|
|
var deviceName = topic[2];
|
|
|
|
|
|
|
|
var orderInfo = message.getPayload().getData().getOrder_info();
|
|
var orderInfo = message.getPayload().getData().getOrder_info();
|
|
|
log.info("订单:{},更新信息:{}", orderInfo.getOrder_id(), orderInfo);
|
|
log.info("订单:{},更新信息:{}", orderInfo.getOrder_id(), orderInfo);
|
|
|
|
|
|
|
|
|
|
+ // 防乱序覆盖:设备上报金额低于当前已记录金额时不更新(消费金额随时间只增不减),
|
|
|
|
|
+ // 与 javadoc 承诺的"消费金额大于等于当前记录才保存"保持一致
|
|
|
washOrderService.lambdaUpdate()
|
|
washOrderService.lambdaUpdate()
|
|
|
.set(WashOrder::getOpenType, orderInfo.getOpen_type())
|
|
.set(WashOrder::getOpenType, orderInfo.getOpen_type())
|
|
|
.set(WashOrder::getCloseType, orderInfo.getClose_type())
|
|
.set(WashOrder::getCloseType, orderInfo.getClose_type())
|
|
@@ -61,6 +67,8 @@ public class OrderUpdateEventHandler implements AwoaraEventHandler<OrderInfoObje
|
|
|
.eq(WashOrder::getOrderId, orderInfo.getOrder_id())
|
|
.eq(WashOrder::getOrderId, orderInfo.getOrder_id())
|
|
|
.eq(WashOrder::getProductKey, productKey)
|
|
.eq(WashOrder::getProductKey, productKey)
|
|
|
.eq(WashOrder::getDeviceName, deviceName)
|
|
.eq(WashOrder::getDeviceName, deviceName)
|
|
|
|
|
+ .and(w -> w.le(WashOrder::getAmount, orderInfo.getAmount())
|
|
|
|
|
+ .or().isNull(WashOrder::getAmount))
|
|
|
.update();
|
|
.update();
|
|
|
|
|
|
|
|
}
|
|
}
|