CenterOrgUtil.java 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package com.kingdee.eas.custom.perfweb.utils;
  2. import com.kingdee.bos.BOSException;
  3. import com.kingdee.bos.Context;
  4. import com.kingdee.eas.basedata.org.AdminOrgUnitFactory;
  5. import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
  6. import com.kingdee.eas.basedata.org.IAdminOrgUnit;
  7. import org.apache.commons.lang3.StringUtils;
  8. /**
  9. * 行政组织工具:中心维度解析及下级组织范围判断。
  10. */
  11. public final class CenterOrgUtil {
  12. private CenterOrgUtil() {
  13. }
  14. /**
  15. * 判断员工所属组织是否落在「中心组织及其全部下级」范围内(含中心自身)。
  16. * <p>
  17. * 优先用行政组织长编码前缀匹配;长编码缺失时回退为向上归集到同一中心。
  18. *
  19. * @param ctx 上下文
  20. * @param empOrg 员工所属行政组织
  21. * @param centerOrg 中心组织(考核结果说明单据上的 adminOrg)
  22. */
  23. public static boolean isUnderCenterOrg(Context ctx, AdminOrgUnitInfo empOrg, AdminOrgUnitInfo centerOrg)
  24. throws BOSException {
  25. if (empOrg == null || centerOrg == null || centerOrg.getId() == null) {
  26. return false;
  27. }
  28. if (empOrg.getId() != null && centerOrg.getId().toString().equals(empOrg.getId().toString())) {
  29. return true;
  30. }
  31. AdminOrgUnitInfo center = loadOrg(ctx, centerOrg.getId().toString());
  32. AdminOrgUnitInfo emp = empOrg.getId() != null ? loadOrg(ctx, empOrg.getId().toString()) : empOrg;
  33. if (center == null || emp == null) {
  34. return false;
  35. }
  36. String centerLongNumber = center.getLongNumber();
  37. String empLongNumber = emp.getLongNumber();
  38. if (StringUtils.isNotBlank(centerLongNumber) && StringUtils.isNotBlank(empLongNumber)) {
  39. return empLongNumber.equals(centerLongNumber) || empLongNumber.startsWith(centerLongNumber + "!");
  40. }
  41. AdminOrgUnitInfo resolvedCenter = resolveCenterOrg(ctx, emp);
  42. return resolvedCenter != null && resolvedCenter.getId() != null
  43. && centerOrg.getId().toString().equals(resolvedCenter.getId().toString());
  44. }
  45. /**
  46. * 从任意部门组织向上查找一级业务中心(公司直属下级组织)
  47. */
  48. public static AdminOrgUnitInfo resolveCenterOrg(Context ctx, AdminOrgUnitInfo org) throws BOSException {
  49. if (org == null || org.getId() == null) {
  50. return null;
  51. }
  52. AdminOrgUnitInfo current = loadOrg(ctx, org.getId().toString());
  53. if (current == null) {
  54. return org;
  55. }
  56. while (current != null) {
  57. AdminOrgUnitInfo parent = current.getParent() != null && current.getParent().getId() != null ? loadOrg(ctx, current.getParent().getId().toString()) : null;
  58. if (parent == null) {
  59. return current;
  60. }
  61. AdminOrgUnitInfo grandParent = parent.getParent() != null && parent.getParent().getId() != null ? loadOrg(ctx, parent.getParent().getId().toString()) : null;
  62. if (grandParent == null) {
  63. return current;
  64. }
  65. current = parent;
  66. }
  67. return org;
  68. }
  69. public static AdminOrgUnitInfo loadOrg(Context ctx, String orgId) throws BOSException {
  70. if (StringUtils.isBlank(orgId)) {
  71. return null;
  72. }
  73. IAdminOrgUnit iAdminOrgUnit = AdminOrgUnitFactory.getLocalInstance(ctx);
  74. return iAdminOrgUnit.getAdminOrgUnitCollection("where id = '" + orgId + "'").get(0);
  75. }
  76. }