GetOrgUtils.java 9.6 KB

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