GetOrgUtils.java 8.4 KB

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