GetAdminInfoService.java 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package com.kingdee.shr.custom.service;
  2. import com.kingdee.bos.BOSException;
  3. import com.kingdee.bos.Context;
  4. import com.kingdee.bos.bsf.service.app.IHRMsfService;
  5. import com.kingdee.bos.metadata.entity.*;
  6. import com.kingdee.bos.metadata.query.util.CompareType;
  7. import com.kingdee.eas.basedata.org.AdminOrgUnitCollection;
  8. import com.kingdee.eas.basedata.org.AdminOrgUnitFactory;
  9. import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
  10. import com.kingdee.eas.basedata.org.IAdminOrgUnit;
  11. import com.kingdee.eas.common.EASBizException;
  12. import com.kingdee.eas.util.app.DbUtil;
  13. import com.kingdee.jdbc.rowset.IRowSet;
  14. import com.kingdee.util.StringUtils;
  15. import org.slf4j.Logger;
  16. import org.slf4j.LoggerFactory;
  17. import java.sql.SQLException;
  18. import java.util.ArrayList;
  19. import java.util.HashMap;
  20. import java.util.List;
  21. import java.util.Map;
  22. public class GetAdminInfoService implements IHRMsfService {
  23. private static final Logger logger = LoggerFactory.getLogger(GetAdminInfoService.class);
  24. /**
  25. * 组织下属组织
  26. * @param ctx
  27. * @param param
  28. * @return
  29. * @throws BOSException
  30. * @throws SQLException
  31. */
  32. public Object process(Context ctx, Map<String, Object> param) throws EASBizException, BOSException {
  33. String orgId = StringUtils.cnulls(param.get("orgId"));
  34. String checkType = StringUtils.cnulls(param.get("checkType"));
  35. String isOfficer = StringUtils.cnulls(param.get("isOfficer"));
  36. if(StringUtils.equals("1", orgId)){
  37. orgId = GetOrgUtils.getRootOrg(ctx);
  38. }
  39. if(StringUtils.isEmpty(orgId) ){
  40. logger.error("查询到orgId为空");
  41. return new ArrayList();
  42. }
  43. Map <String,String> map = new HashMap();
  44. map.put("orgId", orgId);
  45. map.put("isOfficer", isOfficer);
  46. return getSubOrgAndPerson(ctx,checkType,map);
  47. }
  48. /**
  49. * 获取直接下级组织,并且获取组织下的成员的数量
  50. * checkType 为1,则只查询直接下级的成员数量,
  51. * 否则,所有下级的成员数量
  52. * @param ctx
  53. * @param orgId
  54. * @return
  55. * @throws BOSException
  56. * @throws EASBizException
  57. */
  58. private List getSubOrgAndPerson(Context ctx, String checkType,Map <String,String> paramMap ) throws BOSException, EASBizException {
  59. String orgId = paramMap.get("orgId");
  60. String isOfficer = paramMap.get("isOfficer");
  61. List<Map> maplist = new ArrayList();
  62. IAdminOrgUnit iAdminOrgUnit = AdminOrgUnitFactory.getLocalInstance(ctx);
  63. EntityViewInfo view = new EntityViewInfo();
  64. SelectorItemCollection sic =new SelectorItemCollection();
  65. sic.add("id");
  66. sic.add("longNumber");
  67. sic.add("name");
  68. FilterInfo filter = new FilterInfo();
  69. filter.getFilterItems().add(new FilterItemInfo("parent.id", orgId ,CompareType.EQUALS));
  70. //是否封存,
  71. filter.getFilterItems().add(new FilterItemInfo("isSealUp", false ,CompareType.EQUALS));
  72. SorterItemCollection sc = new SorterItemCollection();
  73. sc.add(new SorterItemInfo("number"));
  74. view.setFilter(filter);
  75. view.setSelector(sic);
  76. view.setSorter(sc);
  77. AdminOrgUnitCollection col = iAdminOrgUnit.getAdminOrgUnitCollection(view);
  78. HashMap<String, Integer> admPersonMap = getDirectSubCol(ctx,isOfficer);
  79. for(int i =0; i < col.size(); i++) {
  80. AdminOrgUnitInfo adminInfo = col.get(i);
  81. Map map = new HashMap();
  82. map.put("id", adminInfo.getId().toString());
  83. map.put("name", adminInfo.getName().toString());
  84. String adminId = adminInfo.getId().toString();
  85. if(admPersonMap.containsKey(adminId)) {
  86. map.put("count",admPersonMap.get(adminId));
  87. }else {
  88. map.put("count",0);
  89. }
  90. //传参
  91. paramMap.put("orgId", adminId);
  92. int totalCount = GetOrgUtils.getPersonCount (ctx, "0" ,paramMap);
  93. if(totalCount > 0 ){
  94. map.put("totalCount",totalCount);
  95. maplist.add(map);
  96. }
  97. }
  98. return maplist;
  99. }
  100. //获取所有的组织与组织的直接人数
  101. public HashMap<String, Integer> getDirectSubCol(Context ctx,String isOfficer) throws BOSException {
  102. HashMap<String, Integer> admPersonMap = new HashMap ();
  103. try {
  104. //权限
  105. String perStr = GetOrgUtils.addPermissionFilterSql(ctx);
  106. String filterStr = " and admOrg.fisSealUp <> 1 " +perStr;
  107. if(StringUtils.equals(isOfficer, "1")) {
  108. filterStr += " and pers.CFIsCadre = 1 ";
  109. }
  110. String pinSql = GetOrgUtils.pinPersonSql( "adminPerson",filterStr);
  111. IRowSet rs = DbUtil.executeQuery(ctx, pinSql);
  112. while(rs.next()) {
  113. int pcount = rs.getInt("pcount");
  114. String depId = StringUtils.cnulls(rs.getString("depId"));
  115. admPersonMap.put(depId, pcount);
  116. }
  117. } catch (SQLException e) {
  118. e.printStackTrace();
  119. } catch (EASBizException e) {
  120. throw new RuntimeException(e);
  121. }
  122. return admPersonMap;
  123. }
  124. }