package com.vverp.dao; import com.vverp.dto.PaymentApplyQuery; import com.vverp.entity.PaymentApply; import com.vverp.moli.util.Page; import com.vverp.moli.util.Pageable; import com.vverp.util.CriteriaUtils; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Repository; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import java.math.BigDecimal; import java.util.List; /** * @author * @date 2020/6/14 5:07 下午 */ @Repository public class PaymentApplyDao extends BaseDao { public Page findPage(Pageable pageable, PaymentApplyQuery query) { CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(PaymentApply.class); Root root = criteriaQuery.from(PaymentApply.class); criteriaQuery.select(root); Predicate predicate = toPredicate(criteriaBuilder, root, query); criteriaQuery.where(predicate); return findPage(criteriaQuery, pageable); } public List findList(PaymentApplyQuery query) { CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(PaymentApply.class); Root root = criteriaQuery.from(PaymentApply.class); criteriaQuery.select(root); Predicate predicate = toPredicate(criteriaBuilder, root, query); criteriaQuery.where(predicate); return findList(criteriaQuery, null, null, null, null); } public BigDecimal calcAmount(PaymentApplyQuery query) { CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(BigDecimal.class); Root root = criteriaQuery.from(PaymentApply.class); criteriaQuery.select(criteriaBuilder.sum(root.get("amount"))); Predicate predicate = toPredicate(criteriaBuilder, root, query); criteriaQuery.where(predicate); return entityManager.createQuery(criteriaQuery).getSingleResult(); } public Predicate toPredicate(CriteriaBuilder criteriaBuilder, Root root, PaymentApplyQuery query) { Predicate predicate = criteriaBuilder.conjunction(); if (query.getStatus() != null) { predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("status"), query.getStatus())); } if (query.getType() != null) { predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("type"), query.getType())); } if (query.getOwnerId() != null) { predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("ownerId"), query.getOwnerId())); } if (query.getCompanyId() != null) { predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("companyId"), query.getCompanyId())); } if (query.getContentId() != null) { predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("contentId"), query.getContentId())); } if (query.getContractRequired() != null) { predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("contractRequired"), query.getContractRequired())); } if (query.getApprovalFailed() != null) { predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("approvalFailed"), query.getApprovalFailed())); } if (query.getReceivePayment() != null) { predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("receivePayment"), query.getReceivePayment())); } if (query.getTypeList() != null && query.getTypeList().size() > 0) { predicate = criteriaBuilder.and(predicate, root.get("type").in(query.getTypeList())); } if (StringUtils.isNotBlank(query.getOwnerName())) { predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("ownerName"), query.getOwnerName())); } if (query.getReservoir() != null) { predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("reservoir"), query.getReservoir())); } if (query.getCashierConfirmFlag() != null) { predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("cashierConfirmFlag"), query.getCashierConfirmFlag())); } predicate = CriteriaUtils.dateFilter(criteriaBuilder, predicate, root, "payDate", query.getPayDateStart(), query.getPayDateEnd()); predicate = CriteriaUtils.dateFilter(criteriaBuilder, predicate, root, query.getCreateDateStart(), query.getCreateDateEnd()); return predicate; } }