diff --git a/o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/unitduty/ActionGetWithUnitWithName.java b/o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/unitduty/ActionGetWithUnitWithName.java new file mode 100644 index 0000000000000000000000000000000000000000..65de4d4f643a862f5b0bad778168eca2cec059dc --- /dev/null +++ b/o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/unitduty/ActionGetWithUnitWithName.java @@ -0,0 +1,104 @@ +package com.x.organization.assemble.express.jaxrs.unitduty; + +import com.google.gson.JsonElement; +import com.x.base.core.container.EntityManagerContainer; +import com.x.base.core.container.factory.EntityManagerContainerFactory; +import com.x.base.core.entity.JpaObject; +import com.x.base.core.project.annotation.FieldDescribe; +import com.x.base.core.project.bean.WrapCopier; +import com.x.base.core.project.bean.WrapCopierFactory; +import com.x.base.core.project.cache.Cache.CacheKey; +import com.x.base.core.project.cache.CacheManager; +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.organization.assemble.express.Business; +import com.x.organization.core.entity.Unit; +import com.x.organization.core.entity.UnitDuty; +import com.x.organization.core.entity.UnitDuty_; +import org.apache.commons.lang3.StringUtils; + +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 java.util.List; +import java.util.Optional; + +class ActionGetWithUnitWithName extends BaseAction { + + ActionResult execute(EffectivePerson effectivePerson, JsonElement jsonElement) throws Exception { + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + Wi wi = this.convertToWrapIn(jsonElement, Wi.class); + ActionResult result = new ActionResult<>(); + Business business = new Business(emc); + if(StringUtils.isBlank(wi.getName()) || StringUtils.isBlank(wi.getUnit())){ + return result; + } + CacheKey cacheKey = new CacheKey(this.getClass(), wi.getName(), wi.getUnit()); + Optional optional = CacheManager.get(cacheCategory, cacheKey); + if (optional.isPresent()) { + result.setData((Wo) optional.get()); + } else { + Wo wo = this.getUnitDutity(business, wi.getName(), wi.getUnit()); + CacheManager.put(cacheCategory, cacheKey, wo); + result.setData(wo); + } + return result; + } + } + + public static class Wi extends GsonPropertyObject { + + @FieldDescribe("职务名称") + private String name; + @FieldDescribe("组织") + private String unit; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUnit() { + return unit; + } + + public void setUnit(String unit) { + this.unit = unit; + } + + } + + public static class Wo extends UnitDuty { + + private static final long serialVersionUID = -8346394290549763465L; + + static WrapCopier copier = WrapCopierFactory.wo(UnitDuty.class, Wo.class, null, + JpaObject.FieldsInvisible); + + } + + private Wo getUnitDutity(Business business, String name, String unitFlag) throws Exception { + Wo wo = null; + Unit unit = business.unit().pick(unitFlag); + if (null != unit) { + EntityManager em = business.entityManagerContainer().get(UnitDuty.class); + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(UnitDuty.class); + Root root = cq.from(UnitDuty.class); + Predicate p = cb.equal(root.get(UnitDuty_.unit), unit.getId()); + p = cb.and(p, cb.equal(root.get(UnitDuty_.name), name)); + List os = em.createQuery(cq.select(root).where(p)).getResultList(); + if (!os.isEmpty()) { + wo = Wo.copier.copy(os.get(0)); + } + } + return wo; + } + +} \ No newline at end of file diff --git a/o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/unitduty/BaseAction.java b/o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/unitduty/BaseAction.java index bbdf1c69a75e5d214c23092345f3a751e4c8af6c..8e2abeed1f8695f254675421fd4101feb800f6c1 100644 --- a/o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/unitduty/BaseAction.java +++ b/o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/unitduty/BaseAction.java @@ -15,21 +15,15 @@ import com.x.base.core.project.gson.GsonPropertyObject; import com.x.base.core.project.jaxrs.StandardJaxrsAction; import com.x.base.core.project.tools.ListTools; import com.x.organization.assemble.express.Business; -import com.x.organization.core.entity.Group; import com.x.organization.core.entity.Identity; import com.x.organization.core.entity.Person; -import com.x.organization.core.entity.PersonAttribute; -import com.x.organization.core.entity.Role; import com.x.organization.core.entity.Unit; -import com.x.organization.core.entity.UnitAttribute; import com.x.organization.core.entity.UnitDuty; import com.x.organization.core.entity.UnitDuty_; -import com.x.organization.core.entity.accredit.Empower; class BaseAction extends StandardJaxrsAction { - CacheCategory cacheCategory = new CacheCategory(Identity.class, Unit.class, UnitAttribute.class, UnitDuty.class, - Role.class, Person.class, PersonAttribute.class, Group.class, Empower.class); + CacheCategory cacheCategory = new CacheCategory(Identity.class, Unit.class, UnitDuty.class); protected List listUnitDutyDistinguishedNameSorted(Business business, List unitDutyIds) throws Exception { diff --git a/o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/unitduty/UnitDutyAction.java b/o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/unitduty/UnitDutyAction.java index 19fc6df975dbf713951db7993d527186a60faf16..3c2edbd678471593a872aec57ee6d8f3a0ce3afd 100644 --- a/o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/unitduty/UnitDutyAction.java +++ b/o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/unitduty/UnitDutyAction.java @@ -137,4 +137,22 @@ public class UnitDutyAction extends StandardJaxrsAction { asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result)); } + @JaxrsMethodDescribe(value = "根据组织和职务名称获取职务信息.", action = ActionGetWithUnitWithName.class) + @POST + @Path("find/by/unit/name") + @Produces(HttpMediaType.APPLICATION_JSON_UTF_8) + @Consumes(MediaType.APPLICATION_JSON) + public void getWithUnitWithName(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, + JsonElement jsonElement) { + ActionResult result = new ActionResult<>(); + EffectivePerson effectivePerson = this.effectivePerson(request); + try { + result = new ActionGetWithUnitWithName().execute(effectivePerson, jsonElement); + } catch (Exception e) { + logger.error(e, effectivePerson, request, jsonElement); + result.error(e); + } + asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result)); + } + } \ No newline at end of file