MessageStoreRepositoryImpl.java
package com.tradecloud.repository.impl;
import com.tradecloud.domain.model.messagestore.ServiceCall;
import com.tradecloud.dto.integrationmessage.IntegrationMessageSearch;
import com.tradecloud.repository.MessageStoreRepository;
import com.tradecloud.repository.base.impl.CriteriaOperation;
import com.tradecloud.repository.base.impl.CriteriaValue;
import com.tradecloud.repository.base.impl.RepositoryBaseImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.List;
/**
* Tracking incoming+outcoming Message Store.
*/
@Repository
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class MessageStoreRepositoryImpl extends RepositoryBaseImpl<ServiceCall, IntegrationMessageSearch> implements MessageStoreRepository {
private final String countOrderDailyMessage = """
SELECT COUNT(s.id)
FROM servicecall s
WHERE s.reference = :reference
AND s.operation IN (:operations)
AND s.created >= CURRENT_DATE
AND s.created < CURRENT_DATE + INTERVAL '1 day'
""";
@Override
public ServiceCall findByUniqueConversationId(String uniqueConversationId) {
List<ServiceCall> matchingServiceCalls = (List<ServiceCall>)
findByNamedQueryAndNamedParam("findServiceCallByUniqueConversationId", "uniqueConversationId", uniqueConversationId);
if (matchingServiceCalls.size() == 0) {
return null;
} else {
return matchingServiceCalls.get(0);
}
}
@Override
public List<ServiceCall> findByUserNameAndOperation(String userName, String operationName) {
String[] parameters = {userName, operationName};
List<ServiceCall> matchingServiceCalls = (List<ServiceCall>)
findByNamedQueryAndNamedParam("findServiceCallsByUserNameAndOperation", new String[]{"userName,operation"}, (Object[]) parameters);
return matchingServiceCalls;
}
@Override
protected Collection<CriteriaValue> mapFieldsToValues(IntegrationMessageSearch search) {
Collection<CriteriaValue> fields = new LinkedHashSet<CriteriaValue>();
if (search != null) {
if (search.getFromHours() != null && search.getFromHours() > 0) {
search.getFrom().setHours(search.getFromHours());
}
if (search.getFromMinutes() != null && search.getFromMinutes() > 0) {
search.getFrom().setMinutes(search.getFromMinutes());
}
if (search.getFromSeconds() != null && search.getFromSeconds() > 0) {
search.getFrom().setSeconds(search.getFromSeconds());
}
if (search.getToHours() != null && search.getToHours() > 0) {
search.getTo().setHours(search.getToHours());
}
if (search.getToMinutes() != null && search.getToMinutes() > 0) {
search.getTo().setMinutes(search.getToMinutes());
}
if (search.getToSeconds() != null && search.getToSeconds() > 0) {
search.getTo().setSeconds(search.getToSeconds());
}
}
// fields.add(new CriteriaValue(CriteriaOperation.LIKE, "replayUser", StringUtils.lowerCase(search.getUserName())));
fields.add(new CriteriaValue(CriteriaOperation.LIKE, "userName", StringUtils.lowerCase(search.getUserName())));
fields.add(new CriteriaValue(CriteriaOperation.LIKE, "replayUser", StringUtils.lowerCase(search.getReplayUser())));
fields.add(new CriteriaValue(CriteriaOperation.EQUALS, "operation", search.getOperation()));
fields.add(new CriteriaValue(CriteriaOperation.EQUALS, "type", search.getType()));
fields.add(new CriteriaValue(CriteriaOperation.GREATER_THAN, "created", search.getFrom()));
fields.add(new CriteriaValue(CriteriaOperation.LESS_THAN, "created", search.getTo()));
fields.add(new CriteriaValue(CriteriaOperation.EQUALS_IGNORE_CASE, "messageState", search.getMessageState()));
fields.add(new CriteriaValue(CriteriaOperation.LIKE, "reference", StringUtils.lowerCase(search.getReference())));
if (search.getPayloadValueEnum() != null) {
fields.add(new CriteriaValue(CriteriaOperation.EQUALS, "payloadValueEnum", search.getPayloadValueEnum()));
}
if (search.getPayloadValue() != null) {
fields.add(new CriteriaValue(CriteriaOperation.LIKE, "payloadValue", StringUtils.lowerCase(search.getPayloadValue())));
}
if(search.getErrorMessage()!=null){
fields.add(new CriteriaValue(CriteriaOperation.LIKE, "errorMessage", StringUtils.lowerCase(search.getErrorMessage())));
}
if(search.getAdditionalInfo()!=null && !search.getAdditionalInfo().isEmpty()){
fields.add(new CriteriaValue(CriteriaOperation.EQUALS, "additionalInfo", search.getAdditionalInfo()));
}
return fields;
}
@Override
public long countOrderDailyMessage(String orderReference, List<String> operations) {
return ((Number) getSessionCustom()
.createNativeQuery(countOrderDailyMessage)
.setParameter("reference", orderReference)
.setParameterList("operations", operations)
.getSingleResult()).longValue();
}
}