From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master

---
 jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsMapper/LimsMessageDeliveryMapper.java |   31 +++++++++++++++++++++++++++++++
 1 files changed, 31 insertions(+), 0 deletions(-)

diff --git a/jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsMapper/LimsMessageDeliveryMapper.java b/jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsMapper/LimsMessageDeliveryMapper.java
new file mode 100644
index 0000000..055b07c
--- /dev/null
+++ b/jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsMapper/LimsMessageDeliveryMapper.java
@@ -0,0 +1,31 @@
+package jnpf.limsMapper;
+
+import jnpf.base.mapper.SuperMapper;
+import jnpf.limsEntity.LimsMessageDeliveryEntity;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
+import java.util.Date;
+import java.util.List;
+
+@Mapper
+public interface LimsMessageDeliveryMapper extends SuperMapper<LimsMessageDeliveryEntity> {
+    @Update("UPDATE lims_message_delivery SET status = 'SENDING', last_modify_time = CURRENT_TIMESTAMP " +
+            "WHERE id = #{id} AND status IN ('PENDING', 'FAILED')")
+    int claim(@Param("id") String id);
+
+    @Select("SELECT * FROM lims_message_delivery " +
+            "WHERE ((status = 'FAILED' AND (next_retry_time IS NULL OR next_retry_time <= CURRENT_TIMESTAMP)) " +
+            "OR (status IN ('PENDING', 'SENDING') AND last_modify_time < #{staleBefore})) " +
+            "AND retry_count < #{maxAttempts} ORDER BY last_modify_time, id LIMIT #{limit}")
+    List<LimsMessageDeliveryEntity> selectRetryable(@Param("staleBefore") Date staleBefore,
+                                                     @Param("limit") int limit,
+                                                     @Param("maxAttempts") int maxAttempts);
+
+    @Update("UPDATE lims_message_delivery SET status = 'SENDING', last_modify_time = CURRENT_TIMESTAMP " +
+            "WHERE id = #{id} AND ((status = 'FAILED' AND (next_retry_time IS NULL OR next_retry_time <= CURRENT_TIMESTAMP)) " +
+            "OR (status IN ('PENDING', 'SENDING') AND last_modify_time < #{staleBefore}))")
+    int claimRetry(@Param("id") String id, @Param("staleBefore") Date staleBefore);
+}

--
Gitblit v1.8.0