ExportConsignmentRepositoryImpl.java

package com.tradecloud.repository.impl;

import com.tradecloud.domain.export.TermsAndConditionsConfig;
import com.tradecloud.domain.export.TermsAndConditionsConsignment;
import com.tradecloud.domain.model.ordermanagement.ConsignmentType;
import com.tradecloud.domain.model.ordermanagement.ExportConsignment;
import com.tradecloud.repository.SearchMetaParams;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Restrictions;
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.ArrayList;
import java.util.List;

/**
 * Created by ds on 2015/11/23.
 */
@Repository(value = "exportConsignmentRepository")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class ExportConsignmentRepositoryImpl extends BaseConsignmentRepositoryImpl<ExportConsignment> {

    @Override
    protected Class getConsignmentClass() {
        return ExportConsignment.class;
    }

    @Override
    protected String getDiscriminator() {
        return ConsignmentType.EXPORT_CONSIGNMENT.name();
    }

    @Override
    public List<TermsAndConditionsConsignment> findAllConsignmentTermsAndConditions(List<Long> termsToFind) {
        if (!termsToFind.isEmpty()) {
            Criteria criteria = getCurrentSession().createCriteria(TermsAndConditionsConsignment.class);

            criteria.add(Restrictions.in("originalConfigId", termsToFind));

            List<TermsAndConditionsConsignment> termsAndConditionsConsignmentList = criteria.list();
            return termsAndConditionsConsignmentList;
        }
        return new ArrayList<>();
    }

    @Override
    public List<TermsAndConditionsConfig> findAllConfigTermsAndConditions(List<Long> termsToFind) {
        if (!termsToFind.isEmpty()) {
            Criteria criteria = getCurrentSession().createCriteria(TermsAndConditionsConfig.class);

            criteria.add(Restrictions.in("id", termsToFind));

            List<TermsAndConditionsConfig> termsAndConditionsConfigList = criteria.list();
            return termsAndConditionsConfigList;
        }
        return new ArrayList<>();
    }

    @Override
    public List<TermsAndConditionsConsignment> findTermsAndConditions(ExportConsignment consignment, SearchMetaParams metaParams) {
        if (consignment.getTermsAndConditionsList() != null && !consignment.getTermsAndConditionsList().isEmpty()) {
            String queryString = "from TermsAndConditionsConsignment as tac " +
                    "WHERE tac in :termsAndConditionsList ORDER BY originalConfigId DESC";
            Query query = getCurrentSession().createQuery(queryString);
            query.setParameterList("termsAndConditionsList", consignment.getTermsAndConditionsList());
            initQueryParams(query, metaParams);
            return query.list();
        }
        return new ArrayList<>();
    }

    @Override
    public long countTermsAndConditions(ExportConsignment consignment) {
        if (consignment.getTermsAndConditionsList() != null && !consignment.getTermsAndConditionsList().isEmpty()) {
            String queryString = "select count(*) from TermsAndConditionsConsignment as tac " +
                    "WHERE tac in :termsAndConditionsList ORDER BY originalConfigId DESC";
            Query query = getCurrentSession().createQuery(queryString);
            query.setParameterList("termsAndConditionsList", consignment.getTermsAndConditionsList());
            return (Long) query.uniqueResult();
        }
        return 0;
    }
}