GetOrgUtils.java 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  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. //权限过滤
  55. String permStr = addPermissionFilterSql(ctx);
  56. String filterStr = " and topp.FAdminOrgUnitID = '"+orgId+"' "+permStr;
  57. try {
  58. if(!StringUtils.equals("1", checkType)) {
  59. List<String> orgIds = getAllSubOrg(ctx, orgId);
  60. filterStr = " and topp.FAdminOrgUnitID in ( "+ToolUtils.aryToStr(orgIds,true)+" ) "+permStr;
  61. }
  62. String pinSql = pinPersonSql( "count",filterStr);
  63. IRowSet rs = DbUtil.executeQuery(ctx, pinSql);
  64. while(rs.next()) {
  65. return rs.getInt("pcount");
  66. }
  67. } catch (SQLException e) {
  68. e.printStackTrace();
  69. }
  70. return 0;
  71. }
  72. public static List<String> getAllSubOrg( Context ctx ,String orgId ) throws EASBizException, BOSException {
  73. if(StringUtils.equals("1", orgId)){
  74. orgId = getRootOrg(ctx);
  75. }
  76. List<String> orgIds = new ArrayList();
  77. SelectorItemCollection sic =new SelectorItemCollection();
  78. sic.add("id");
  79. sic.add("longNumber");
  80. sic.add("name");
  81. IAdminOrgUnit iAdminOrgUnit = AdminOrgUnitFactory.getLocalInstance(ctx);
  82. AdminOrgUnitInfo orgInfo = iAdminOrgUnit.getAdminOrgUnitInfo(new ObjectUuidPK(orgId),sic);
  83. if(null!=orgInfo &&!StringUtils.isEmpty(orgInfo.getLongNumber())) {
  84. String longNum = orgInfo.getLongNumber();
  85. //获取所有下级组织
  86. // String[] longNumStrs = longNum.split("!");
  87. // Set<String> numsSet = new HashSet<String>();
  88. // numsSet.addAll(Arrays.asList(longNumStrs));
  89. EntityViewInfo view = new EntityViewInfo();
  90. FilterInfo filter = new FilterInfo();
  91. filter.getFilterItems().add(new FilterItemInfo("longnumber",longNum+"%",CompareType.LIKE));
  92. filter.getFilterItems().add(new FilterItemInfo("isSealUp", false ,CompareType.EQUALS));
  93. view.setFilter(filter);
  94. view.setSelector(sic);
  95. AdminOrgUnitCollection col = iAdminOrgUnit.getAdminOrgUnitCollection(view);
  96. if(null!=col && col.size()>0) {
  97. for (int k = 0; k < col.size(); k++) {
  98. AdminOrgUnitInfo adminOrg = col.get(k);
  99. String adminId = StringUtils.cnulls( adminOrg.getString("id"));
  100. orgIds.add(adminId) ;
  101. }
  102. }
  103. }
  104. return orgIds;
  105. }
  106. /**
  107. * 根据人名或编码获取人员数据
  108. * @param ctx
  109. * @param perName
  110. * @return
  111. * @throws BOSException
  112. * @throws EASBizException
  113. */
  114. public static List getPersonFromName(Context ctx ,String orgId,String perName) throws BOSException, EASBizException {
  115. if(StringUtils.equals("1", orgId)){
  116. orgId = getRootOrg(ctx);
  117. }
  118. //权限过滤
  119. String permStr = addPermissionFilterSql(ctx);
  120. String filterStr = " and ( pers.fname_l2 like '%"+perName+"%' or pers.fnumber like '%"+perName+"%' ) " + permStr;
  121. if(!StringUtils.isEmpty(orgId)) {
  122. filterStr = filterStr
  123. + " and topp.FAdminOrgUnitID = '"+orgId+"' ";
  124. }
  125. return assemPersonData(ctx, filterStr);
  126. }
  127. /**
  128. * 根据组织获取人员数据
  129. * checkType = 0;所有的下级; 1,则只有直接下级
  130. * @param ctx
  131. * @return
  132. * @throws BOSException
  133. * @throws EASBizException
  134. */
  135. public static List getPersonFromOrg(Context ctx ,String orgId,String checkType) throws BOSException, EASBizException {
  136. if(StringUtils.equals("1", orgId)){
  137. orgId = getRootOrg(ctx);
  138. }
  139. //权限过滤
  140. String permStr = addPermissionFilterSql(ctx);
  141. String filterStr = " and topp.FAdminOrgUnitID = '"+orgId+"' "+permStr;
  142. if(!StringUtils.equals(checkType, "1")) {
  143. List<String> orgIds = getAllSubOrg(ctx, orgId);
  144. String aryToStr = ToolUtils.aryToStr(orgIds,true);
  145. filterStr = " and topp.FAdminOrgUnitID in ("+aryToStr+") ";
  146. }
  147. return assemPersonData(ctx, filterStr);
  148. }
  149. public static List assemPersonData(Context ctx, String filterStr) throws BOSException{
  150. List<Map> personList = new ArrayList();
  151. try {
  152. String pinSql = pinPersonSql( "info",filterStr);
  153. IRowSet rs = DbUtil.executeQuery(ctx, pinSql);
  154. while(rs.next()) {
  155. String fid = StringUtils.cnulls(rs.getString("fid"));
  156. String name = StringUtils.cnulls(rs.getString("name"));
  157. String number = StringUtils.cnulls(rs.getString("number"));
  158. HashMap<String,String> map = new HashMap();
  159. map.put("fid", fid);
  160. map.put("name", name);
  161. map.put("number", number);
  162. map.put("posname", StringUtils.cnulls(rs.getString("posname")));
  163. map.put("depname", StringUtils.cnulls(rs.getString("depname")));
  164. personList.add(map);
  165. }
  166. } catch (SQLException e) {
  167. e.printStackTrace();
  168. }
  169. return personList;
  170. }
  171. /**
  172. * 添加权限过滤
  173. */
  174. public static String addPermissionFilterSql(Context ctx) throws BOSException, EASBizException {
  175. //权限过滤
  176. IPermission permission = PermissionFactory.getLocalInstance(ctx);
  177. IObjectPK caller = ctx.getCaller();
  178. Set authorizedOrgIds = permission.getAuthorizedOrgIds(caller, OrgType.Admin, null, "");
  179. String filterStr = " and topp.FAdminOrgUnitID in ("+ToolUtils.aryToStr(authorizedOrgIds,true)+ ") ";
  180. return filterStr;
  181. }
  182. /**
  183. *
  184. * @param type
  185. * info 人员信息;
  186. * count 人员总数量
  187. * adminPerson 每个组织下的人数;
  188. * @param filterStr
  189. * @return
  190. */
  191. public static String pinPersonSql( String type, String filterStr ) {
  192. StringBuffer sbf = new StringBuffer();
  193. sbf.append(" /*dialect*/ SELECT ");
  194. if(StringUtils.equals("count", type)) {
  195. sbf.append(" count( pers.fid ) pcount ");
  196. }else if(StringUtils.equals("info", type)) {
  197. sbf.append(" pers.fid fid, ");
  198. sbf.append(" pers.fnumber number , ");
  199. sbf.append(" pers.FName_L2 name , ");
  200. sbf.append(" topp.FName_L2 posname , ");
  201. sbf.append(" admOrg.FName_L2 depname ");
  202. }else if(StringUtils.equals("adminPerson", type)) {
  203. sbf.append(" count (pers.fid) pcount, ");
  204. sbf.append(" admOrg.fid depId ");
  205. }
  206. sbf.append(" FROM t_bd_person pers ");
  207. sbf.append(" LEFT JOIN ");
  208. sbf.append(" T_HR_EmpOrgRelation rela ");
  209. sbf.append(" ON pers.fid = rela.fpersonid ");
  210. sbf.append(" AND rela.FAssignType = 1 ");
  211. sbf.append(" AND rela. fleffdt = '2199-12-31 00:00:00' ");
  212. sbf.append(" INNER JOIN T_ORG_Position topp ");
  213. sbf.append(" ON rela.FPOSITIONID = topp.fid ");
  214. sbf.append(" inner join T_HR_EmpLaborRelation labor ");
  215. sbf.append(" ON rela.FlaborRelationID = labor.fid ");
  216. sbf.append(" INNER JOIN T_ORG_Admin admOrg ");
  217. sbf.append(" ON topp.FAdminOrgUnitID = admOrg.fid ");
  218. sbf.append(" where ");
  219. sbf.append(" labor.FLaborRelationStateID in ( ");
  220. sbf.append(" select fid from T_HR_BDEmployeeType where ");
  221. sbf.append(" fname_l2 <> '辞退' and fname_l2 <> '辞职' ");
  222. sbf.append(" and fname_l2 <> '退休' and fname_l2 <> '开除' ");
  223. sbf.append(" and fname_l2 <> '解聘' and fname_l2 <> '离职' ");
  224. sbf.append(" and fname_l2 <> '死亡' ");
  225. sbf.append(" ) ");
  226. if(!StringUtils.isEmpty(filterStr)) {
  227. sbf.append(filterStr);
  228. }
  229. if(StringUtils.equals("info", type)) {
  230. sbf.append(" order by topp.FIsRespPosition desc , pers.fnumber ");
  231. }else if(StringUtils.equals("adminPerson", type)) {
  232. sbf.append(" group by admOrg.fid ");
  233. }
  234. return sbf.toString();
  235. }
  236. }