GetOrgUtils.java 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. package com.kingdee.shr.custom.service;
  2. import com.kingdee.bos.BOSException;
  3. import com.kingdee.bos.Context;
  4. import com.kingdee.bos.dao.IObjectPK;
  5. import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
  6. import com.kingdee.bos.metadata.entity.EntityViewInfo;
  7. import com.kingdee.bos.metadata.entity.FilterInfo;
  8. import com.kingdee.bos.metadata.entity.FilterItemInfo;
  9. import com.kingdee.bos.metadata.entity.SelectorItemCollection;
  10. import com.kingdee.bos.metadata.query.util.CompareType;
  11. import com.kingdee.eas.base.permission.IPermission;
  12. import com.kingdee.eas.base.permission.PermissionFactory;
  13. import com.kingdee.eas.basedata.org.*;
  14. import com.kingdee.eas.common.EASBizException;
  15. import com.kingdee.eas.util.ToolUtils;
  16. import com.kingdee.eas.util.app.DbUtil;
  17. import com.kingdee.jdbc.rowset.IRowSet;
  18. import com.kingdee.util.StringUtils;
  19. import java.sql.SQLException;
  20. import java.util.*;
  21. public class GetOrgUtils {
  22. /**
  23. * 获取根组织
  24. * @param ctx
  25. * @return
  26. */
  27. public static String getRootOrg(Context ctx) {
  28. String orgId = "";
  29. try {
  30. String sql = "select fid from T_ORG_Admin where FLEVEL = 1 ";
  31. IRowSet executeQuery = DbUtil.executeQuery(ctx, sql);
  32. while(executeQuery.next()) {
  33. orgId = executeQuery.getString("fid");
  34. }
  35. } catch (SQLException e) {
  36. e.printStackTrace();
  37. } catch (BOSException e) {
  38. e.printStackTrace();
  39. }
  40. return orgId;
  41. }
  42. /**
  43. * 获取人数
  44. * checkType不等于1的时候,则查询所有下级组织;
  45. * 否则,只查询直接下级组织;
  46. * @param ctx
  47. * @param orgId
  48. * @param checkType
  49. * @return
  50. * @throws BOSException
  51. * @throws EASBizException
  52. */
  53. public static int getPersonCount(Context ctx ,String orgId,String checkType) throws BOSException, EASBizException {
  54. String filterStr = " and topp.FAdminOrgUnitID = '"+orgId+"' ";
  55. try {
  56. if(!StringUtils.equals("1", checkType)) {
  57. List<String> orgIds = getAllSubOrg(ctx, orgId);
  58. filterStr = " and topp.FAdminOrgUnitID in ( "+ToolUtils.aryToStr(orgIds,true)+" )";
  59. }
  60. String pinSql = pinPersonSql( "count",filterStr);
  61. IRowSet rs = DbUtil.executeQuery(ctx, pinSql);
  62. while(rs.next()) {
  63. return rs.getInt("pcount");
  64. }
  65. } catch (SQLException e) {
  66. e.printStackTrace();
  67. }
  68. return 0;
  69. }
  70. public static List<String> getAllSubOrg( Context ctx ,String orgId ) throws EASBizException, BOSException {
  71. if(StringUtils.equals("1", orgId)){
  72. orgId = getRootOrg(ctx);
  73. }
  74. List<String> orgIds = new ArrayList();
  75. SelectorItemCollection sic =new SelectorItemCollection();
  76. sic.add("id");
  77. sic.add("longNumber");
  78. sic.add("name");
  79. IAdminOrgUnit iAdminOrgUnit = AdminOrgUnitFactory.getLocalInstance(ctx);
  80. AdminOrgUnitInfo orgInfo = iAdminOrgUnit.getAdminOrgUnitInfo(new ObjectUuidPK(orgId),sic);
  81. if(null!=orgInfo &&!StringUtils.isEmpty(orgInfo.getLongNumber())) {
  82. String longNum = orgInfo.getLongNumber();
  83. //获取所有下级组织
  84. // String[] longNumStrs = longNum.split("!");
  85. // Set<String> numsSet = new HashSet<String>();
  86. // numsSet.addAll(Arrays.asList(longNumStrs));
  87. EntityViewInfo view = new EntityViewInfo();
  88. FilterInfo filter = new FilterInfo();
  89. filter.getFilterItems().add(new FilterItemInfo("longnumber",longNum+"%",CompareType.LIKE));
  90. filter.getFilterItems().add(new FilterItemInfo("isSealUp", false ,CompareType.EQUALS));
  91. view.setFilter(filter);
  92. view.setSelector(sic);
  93. AdminOrgUnitCollection col = iAdminOrgUnit.getAdminOrgUnitCollection(view);
  94. if(null!=col && col.size()>0) {
  95. for (int k = 0; k < col.size(); k++) {
  96. AdminOrgUnitInfo adminOrg = col.get(k);
  97. String adminId = StringUtils.cnulls( adminOrg.getString("id"));
  98. orgIds.add(adminId) ;
  99. }
  100. }
  101. }
  102. return orgIds;
  103. }
  104. /**
  105. * 根据人名或编码获取人员数据
  106. * @param ctx
  107. * @param perName
  108. * @return
  109. * @throws BOSException
  110. * @throws EASBizException
  111. */
  112. public static List getPersonFromName(Context ctx ,String orgId,String perName) throws BOSException, EASBizException {
  113. if(StringUtils.equals("1", orgId)){
  114. orgId = getRootOrg(ctx);
  115. }
  116. IPermission permission = PermissionFactory.getLocalInstance(ctx);
  117. IObjectPK caller = ctx.getCaller();
  118. Set authorizedOrgIds = permission.getAuthorizedOrgIds(caller, OrgType.Admin, null, "");
  119. String filterStr = " and ( pers.fname_l2 like '%"+perName+"%' or pers.fnumber like '%"+perName+"%' ) "
  120. + " and topp.FAdminOrgUnitID in ("+ToolUtils.aryToStr(authorizedOrgIds,true)+ ") ";
  121. if(!StringUtils.isEmpty(orgId)) {
  122. filterStr = " and ( pers.fname_l2 like '%"+perName+"%' or pers.fnumber like '%"+perName+"%' ) "
  123. + " and topp.FAdminOrgUnitID = '"+orgId+"' "
  124. + " and topp.FAdminOrgUnitID in ("+ToolUtils.aryToStr(authorizedOrgIds,true)+ ") ";
  125. }
  126. return assemPersonData(ctx, filterStr);
  127. }
  128. /**
  129. * 根据组织获取人员数据
  130. * checkType = 0;所有的下级; 1,则只有直接下级
  131. * @param ctx
  132. * @return
  133. * @throws BOSException
  134. * @throws EASBizException
  135. */
  136. public static List getPersonFromOrg(Context ctx ,String orgId,String checkType) throws BOSException, EASBizException {
  137. if(StringUtils.equals("1", orgId)){
  138. orgId = getRootOrg(ctx);
  139. }
  140. String filterStr = " and topp.FAdminOrgUnitID = '"+orgId+"' ";
  141. if(!StringUtils.equals(checkType, "1")) {
  142. List<String> orgIds = getAllSubOrg(ctx, orgId);
  143. String aryToStr = ToolUtils.aryToStr(orgIds,true);
  144. filterStr = " and topp.FAdminOrgUnitID in ("+aryToStr+") ";
  145. }
  146. return assemPersonData(ctx, filterStr);
  147. }
  148. public static List assemPersonData(Context ctx, String filterStr) throws BOSException{
  149. List<Map> personList = new ArrayList();
  150. try {
  151. String pinSql = pinPersonSql( "info",filterStr);
  152. IRowSet rs = DbUtil.executeQuery(ctx, pinSql);
  153. while(rs.next()) {
  154. String fid = StringUtils.cnulls(rs.getString("fid"));
  155. String name = StringUtils.cnulls(rs.getString("name"));
  156. String number = StringUtils.cnulls(rs.getString("number"));
  157. HashMap<String,String> map = new HashMap();
  158. map.put("fid", fid);
  159. map.put("name", name);
  160. map.put("number", number);
  161. map.put("posname", StringUtils.cnulls(rs.getString("posname")));
  162. map.put("depname", StringUtils.cnulls(rs.getString("depname")));
  163. personList.add(map);
  164. }
  165. } catch (SQLException e) {
  166. e.printStackTrace();
  167. }
  168. return personList;
  169. }
  170. /**
  171. *
  172. * @param type
  173. * info 人员信息;
  174. * count 人员总数量
  175. * adminPerson 每个组织下的人数;
  176. * @param filterStr
  177. * @return
  178. */
  179. public static String pinPersonSql( String type, String filterStr ) {
  180. StringBuffer sbf = new StringBuffer();
  181. sbf.append(" /*dialect*/ SELECT ");
  182. if(StringUtils.equals("count", type)) {
  183. sbf.append(" count( pers.fid ) pcount ");
  184. }else if(StringUtils.equals("info", type)) {
  185. sbf.append(" pers.fid fid, ");
  186. sbf.append(" pers.fnumber number , ");
  187. sbf.append(" pers.FName_L2 name , ");
  188. sbf.append(" topp.FName_L2 posname , ");
  189. sbf.append(" admOrg.FName_L2 depname ");
  190. }else if(StringUtils.equals("adminPerson", type)) {
  191. sbf.append(" count (pers.fid) pcount, ");
  192. sbf.append(" admOrg.fid depId ");
  193. }
  194. sbf.append(" FROM t_bd_person pers ");
  195. sbf.append(" LEFT JOIN ");
  196. sbf.append(" T_HR_EmpOrgRelation rela ");
  197. sbf.append(" ON pers.fid = rela.fpersonid ");
  198. sbf.append(" AND rela.FAssignType = 1 ");
  199. sbf.append(" AND rela. fleffdt = '2199-12-31 00:00:00' ");
  200. sbf.append(" INNER JOIN T_ORG_Position topp ");
  201. sbf.append(" ON rela.FPOSITIONID = topp.fid ");
  202. sbf.append(" inner join T_HR_EmpLaborRelation labor ");
  203. sbf.append(" ON rela.FlaborRelationID = labor.fid ");
  204. sbf.append(" INNER JOIN T_ORG_Admin admOrg ");
  205. sbf.append(" ON topp.FAdminOrgUnitID = admOrg.fid ");
  206. sbf.append(" where ");
  207. sbf.append(" labor.FLaborRelationStateID in ( ");
  208. sbf.append(" select fid from T_HR_BDEmployeeType where ");
  209. sbf.append(" fname_l2 <> '辞退' and fname_l2 <> '辞职' ");
  210. sbf.append(" and fname_l2 <> '退休' and fname_l2 <> '开除' ");
  211. sbf.append(" and fname_l2 <> '解聘' and fname_l2 <> '离职' ");
  212. sbf.append(" and fname_l2 <> '死亡' ");
  213. sbf.append(" ) ");
  214. if(!StringUtils.isEmpty(filterStr)) {
  215. sbf.append(filterStr);
  216. }
  217. if(StringUtils.equals("info", type)) {
  218. sbf.append(" order by topp.FIsRespPosition desc , pers.fnumber ");
  219. }else if(StringUtils.equals("adminPerson", type)) {
  220. sbf.append(" group by admOrg.fid ");
  221. }
  222. return sbf.toString();
  223. }
  224. }