package com.x.processplatform.assemble.surface.jaxrs.task; import javax.persistence.EntityManager; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import org.apache.commons.lang3.StringUtils; import com.x.base.core.container.EntityManagerContainer; import com.x.base.core.container.factory.EntityManagerContainerFactory; import com.x.base.core.project.annotation.FieldDescribe; import com.x.base.core.project.gson.GsonPropertyObject; import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.logger.Logger; import com.x.base.core.project.logger.LoggerFactory; import com.x.processplatform.assemble.surface.Business; import com.x.processplatform.core.entity.content.Task; import com.x.processplatform.core.entity.content.Task_; import io.swagger.v3.oas.annotations.media.Schema; class ActionCountWithPerson extends BaseAction { private static final Logger LOGGER = LoggerFactory.getLogger(ActionCountWithPerson.class); ActionResult execute(EffectivePerson effectivePerson, String credential) throws Exception { LOGGER.debug("execute:{}, credential:{}.", effectivePerson::getDistinguishedName, () -> credential); ActionResult result = new ActionResult<>(); try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { Wo wo = new Wo(); Business business = new Business(emc); String person = business.organization().person().get(credential); if (StringUtils.isNotEmpty(person)) { Long count = this.countWithPerson(business, person); wo.setCount(count); } result.setData(wo); return result; } } private Long countWithPerson(Business business, String person) throws Exception { EntityManager em = business.entityManagerContainer().get(Task.class); CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(Long.class); Root root = cq.from(Task.class); Predicate p = cb.equal(root.get(Task_.person), person); cq.select(cb.count(root)).where(p); return em.createQuery(cq).getSingleResult(); } @Schema(name = "com.x.processplatform.assemble.surface.jaxrs.task.ActionCountWithPerson$Wo") public static class Wo extends GsonPropertyObject { private static final long serialVersionUID = -8936840122823873535L; @FieldDescribe("εΎ…εŠžζ•°ι‡") private Long count = 0L; public Long getCount() { return count; } public void setCount(Long count) { this.count = count; } } }