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/limsService/impl/LimsMessageLedgerService.java |   68 ++++++++++++++++++++++++++++++++++
 1 files changed, 68 insertions(+), 0 deletions(-)

diff --git a/jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsService/impl/LimsMessageLedgerService.java b/jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsService/impl/LimsMessageLedgerService.java
new file mode 100644
index 0000000..f21e560
--- /dev/null
+++ b/jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsService/impl/LimsMessageLedgerService.java
@@ -0,0 +1,68 @@
+package jnpf.limsService.impl;
+
+import jnpf.limsEntity.LimsMessageDeliveryEntity;
+import jnpf.limsEntity.LimsMessageDeliveryStatus;
+import jnpf.limsEntity.LimsMessageEventEntity;
+import jnpf.limsEntity.LimsMessageEventStatus;
+import jnpf.limsEntity.LimsMessageLedger;
+import jnpf.limsEntity.LimsMessageRequest;
+import jnpf.limsMapper.LimsMessageDeliveryMapper;
+import jnpf.limsMapper.LimsMessageEventMapper;
+import jnpf.util.JsonUtil;
+import jnpf.util.RandomUtil;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Service
+@RequiredArgsConstructor
+public class LimsMessageLedgerService {
+    private final LimsMessageEventMapper eventMapper;
+    private final LimsMessageDeliveryMapper deliveryMapper;
+
+    @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
+    public LimsMessageLedger initialize(LimsMessageRequest request, List<String> recipients) {
+        Date now = new Date();
+        LimsMessageEventEntity event = new LimsMessageEventEntity();
+        event.setId(RandomUtil.uuId());
+        event.setTenantId(request.getTenantId());
+        event.setEventCode(request.getEvent().getCode());
+        event.setBizId(request.getBizId());
+        event.setRemindStage(request.getRemindStage());
+        event.setOccurrenceKey(request.getOccurrenceKey());
+        event.setRecipientSnapshot(JsonUtil.getObjectToString(request.getRecipients()));
+        event.setParameterSnapshot(JsonUtil.getObjectToString(request.getParameters()));
+        event.setStatus(LimsMessageEventStatus.PENDING);
+        event.setRecipientCount(recipients.size());
+        event.setSentCount(0);
+        event.setFailedCount(0);
+        event.setRetryCount(0);
+        event.setCreatedTime(now);
+        event.setLastModifyTime(now);
+        if (eventMapper.insertIfAbsent(event) == 0) {
+            return LimsMessageLedger.duplicate();
+        }
+
+        List<LimsMessageDeliveryEntity> deliveries = new ArrayList<>(recipients.size());
+        for (String recipient : recipients) {
+            LimsMessageDeliveryEntity delivery = new LimsMessageDeliveryEntity();
+            delivery.setId(RandomUtil.uuId());
+            delivery.setEventId(event.getId());
+            delivery.setTenantId(event.getTenantId());
+            delivery.setRecipientUserId(recipient);
+            delivery.setDeliveryKey(event.getTenantId() + ":" + event.getId() + ":" + recipient);
+            delivery.setStatus(LimsMessageDeliveryStatus.PENDING);
+            delivery.setRetryCount(0);
+            delivery.setCreatedTime(now);
+            delivery.setLastModifyTime(now);
+            deliveryMapper.insert(delivery);
+            deliveries.add(delivery);
+        }
+        return new LimsMessageLedger(true, event, deliveries);
+    }
+}

--
Gitblit v1.8.0