//package com.elitescloud.cloudt.system.controller.mng.message.repository;
//
///**
// * @author : chen.niu
// * @description :
// * @date : 2023/5/23 12:31
// */
//
//import com.elitescloud.cloudt.system.controller.mng.message.vo.SysMsgTemplateQueryVO;
//import com.elitescloud.cloudt.system.model.entity.SysMsgTemplateDO;
//import org.springframework.data.domain.Page;
//import org.springframework.data.domain.PageImpl;
//import org.springframework.data.domain.Pageable;
//
//import javax.persistence.EntityManager;
//import javax.persistence.PersistenceContext;
//import javax.persistence.TypedQuery;
//import javax.persistence.criteria.CriteriaBuilder;
//import javax.persistence.criteria.CriteriaQuery;
//import javax.persistence.criteria.Predicate;
//import javax.persistence.criteria.Root;
//import java.util.ArrayList;
//import java.util.List;
//
//public class SysMsgTemplateRepositoryImpl implements SysMsgTemplateRepositoryCustom {
//
//    @PersistenceContext
//    private EntityManager entityManager;
//
//    @Override
//    public Page<SysMsgTemplateDO> findByCriteria(SysMsgTemplateQueryVO queryVO, Pageable pageable) {
//        CriteriaBuilder cb = entityManager.getCriteriaBuilder();
//        CriteriaQuery<SysMsgTemplateDO> cq = cb.createQuery(SysMsgTemplateDO.class);
//        Root<SysMsgTemplateDO> root = cq.from(SysMsgTemplateDO.class);
//
//        List<Predicate> predicates = new ArrayList<>();
//
//        // Add your criteria/predicates here based on the queryVO
//
//        cq.where(predicates.toArray(new Predicate[0]));
//
//        TypedQuery<SysMsgTemplateDO> query = entityManager.createQuery(cq);
//        query.setFirstResult((int) pageable.getOffset());
//        query.setMaxResults(pageable.getPageSize());
//
//        List<SysMsgTemplateDO> result = query.getResultList();
//        long total = getTotalCount(queryVO);
//
//        return new PageImpl<>(result, pageable, total);
//    }
//
//    private long getTotalCount(SysMsgTemplateQueryVO queryVO) {
//        CriteriaBuilder cb = entityManager.getCriteriaBuilder();
//        CriteriaQuery<Long> countQuery = cb.createQuery(Long.class);
//        Root<SysMsgTemplateDO> countRoot = countQuery.from(SysMsgTemplateDO.class);
//
//        List<Predicate> countPredicates = new ArrayList<>();
//
//        // Add your count criteria/predicates here based on the queryVO
//
//        countQuery.select(cb.count(countRoot));
//        countQuery.where(countPredicates.toArray(new Predicate[0]));
//
//        TypedQuery<Long> countTypedQuery = entityManager.createQuery(countQuery);
//        return countTypedQuery.getSingleResult();
//    }
//}
//
