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);
|
}
|
}
|