GtiitOAGetAdminOrgDataService.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. package com.kingdee.shr.customer.gtiit.osf;
  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.dao.ormapping.ObjectUuidPK;
  6. import com.kingdee.eas.base.permission.PermItemFactory;
  7. import com.kingdee.eas.base.permission.PermItemInfo;
  8. import com.kingdee.eas.base.permission.UserFactory;
  9. import com.kingdee.eas.base.permission.UserInfo;
  10. import com.kingdee.eas.common.EASBizException;
  11. import com.kingdee.eas.hr.emp.EmployeeInterfacePermBizException;
  12. import com.kingdee.eas.util.app.ContextUtil;
  13. import com.kingdee.eas.util.app.DbUtil;
  14. import com.kingdee.jdbc.rowset.IRowSet;
  15. import com.kingdee.shr.base.permission.api.service.SHRFunctionPermissionService;
  16. import com.kingdee.shr.common.util.StringUtils;
  17. import com.kingdee.shr.customer.gtiit.osf.util.DateUtils;
  18. import com.kingdee.shr.integration.oa.util.IntegrateOAUtil;
  19. import com.kingdee.shr.integration.oa.util.MappingFieldInfo;
  20. import java.sql.SQLException;
  21. import java.text.SimpleDateFormat;
  22. import java.util.ArrayList;
  23. import java.util.HashMap;
  24. import java.util.List;
  25. import java.util.Map;
  26. import org.slf4j.Logger;
  27. import org.slf4j.LoggerFactory;
  28. public class GtiitOAGetAdminOrgDataService implements IHRMsfService{
  29. private static final Logger logger = LoggerFactory.getLogger(GtiitOAGetAdminOrgDataService.class);
  30. public Object process(Context ctx, Map param) throws EASBizException, BOSException {
  31. logger.error("GtiitOAGetAdminOrgDataService enter ");
  32. new ArrayList();
  33. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  34. // 开始日期
  35. String startDate = (String) param.get("startDate");
  36. // 截止日期
  37. String endDate = (String) param.get("endDate");
  38. if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)) {
  39. startDate=DateUtils.formatDate(startDate,true);
  40. endDate=DateUtils.formatDate(endDate,false);
  41. }
  42. String adminPermItem = "fffffff0-ffff-efff-e22e-0000000dfa21PERMITEM";
  43. PermItemInfo permItem = PermItemFactory.getLocalInstance(ctx).getPermItemInfo(new ObjectUuidPK(adminPermItem));
  44. try {
  45. SHRFunctionPermissionService.checkCurrnetUserFunctionPermission(ctx, permItem);
  46. } catch (Exception var9) {
  47. logger.error(var9.getMessage(), var9);
  48. String userId = ContextUtil.getCurrentUserInfo(ctx).getId().toString();
  49. UserInfo userInfo = UserFactory.getLocalInstance(ctx).getUserInfo(new ObjectUuidPK(userId));
  50. throw new EmployeeInterfacePermBizException(EmployeeInterfacePermBizException.NO_FUNCTION_PERMISSION,
  51. new Object[]{userInfo.getName(), permItem.getAlias()});
  52. }
  53. List<MappingFieldInfo> fieldList = this.initMappingField();
  54. StringBuffer sql = IntegrateOAUtil.getSelectFieldSql(fieldList);
  55. //职位变更也要触发部门的同步
  56. sql.append(" from t_org_admin org left join t_org_admin parent on parent.fid=org.FParentID "
  57. + "left join T_ORG_POSITION position on org.fid=position.FAdminOrgUnitID left join T_HR_EmpOrgRelation he on he.fAdminOrgId=org.fid ");
  58. sql.append(" where org.FIsStartSHR=1");
  59. if(StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)) {
  60. sql.append(" and (org.flastupdatetime >= '"+startDate+"' and org.flastupdatetime<='"+endDate+"') ");
  61. sql.append(" or (position.flastupdatetime >= '"+startDate+"' and position.flastupdatetime<='"+endDate+"') ");
  62. sql.append(" or (he.flastupdatetime >= '"+startDate+"' and he.flastupdatetime<='"+endDate+"') ");
  63. }
  64. sql.append(" group by org.fid,org.fname_l2,org.fname_l1,org.FParentID,parent.fname_l2,org.fSortCode,org.FIsLeaf,org.FIsSealUp ,org.FNumber ,org.fcreateTime ,org.FLastUpdateTime ,parent.FNumber ,org.FEffectDate ,org.FsimpleName ");
  65. IRowSet rs = DbUtil.executeQuery(ctx, sql.toString());
  66. logger.info("GtiitOAGetAdminOrgDataService....sql: "+sql.toString());
  67. List<HashMap<String, String>> dataList = IntegrateOAUtil.getRsListData(fieldList, rs);
  68. //部门负责人处理
  69. try {
  70. if(dataList!=null && dataList.size()>0) {
  71. processHead(ctx,dataList,startDate,endDate);
  72. }
  73. } catch (SQLException e) {
  74. // TODO 自动生成的 catch 块
  75. logger.info("processHead...."+e);
  76. }
  77. return dataList;
  78. }
  79. private List<MappingFieldInfo> initMappingField() {
  80. List<MappingFieldInfo> list = new ArrayList();
  81. MappingFieldInfo fieldInfo = new MappingFieldInfo();
  82. fieldInfo.setOaField("easdept_id");
  83. fieldInfo.setShrField("org.fid");
  84. list.add(fieldInfo);
  85. fieldInfo = new MappingFieldInfo();
  86. fieldInfo.setOaField("name");
  87. fieldInfo.setShrField("org.fname_l2");
  88. list.add(fieldInfo);
  89. fieldInfo = new MappingFieldInfo();
  90. fieldInfo.setOaField("name_L1");
  91. fieldInfo.setShrField("org.fname_l1");
  92. list.add(fieldInfo);
  93. fieldInfo = new MappingFieldInfo();
  94. fieldInfo.setOaField("superior");
  95. fieldInfo.setShrField("org.FParentID");
  96. list.add(fieldInfo);
  97. fieldInfo = new MappingFieldInfo();
  98. fieldInfo.setOaField("supname");
  99. fieldInfo.setShrField("parent.fname_l2");
  100. list.add(fieldInfo);
  101. fieldInfo = new MappingFieldInfo();
  102. fieldInfo.setOaField("sortCode");
  103. fieldInfo.setShrField("org.fSortCode");
  104. list.add(fieldInfo);
  105. fieldInfo = new MappingFieldInfo();
  106. fieldInfo.setOaField("endflag");
  107. fieldInfo.setShrField("org.FIsLeaf");
  108. list.add(fieldInfo);
  109. fieldInfo = new MappingFieldInfo();
  110. fieldInfo.setOaField("status");
  111. fieldInfo.setShrField("org.FIsSealUp");
  112. list.add(fieldInfo);
  113. fieldInfo = new MappingFieldInfo();
  114. fieldInfo.setOaField("fnumber");
  115. fieldInfo.setShrField("org.FNumber");
  116. list.add(fieldInfo);
  117. fieldInfo = new MappingFieldInfo();
  118. fieldInfo.setOaField("fcreateTime");
  119. fieldInfo.setShrField("org.fcreateTime");
  120. list.add(fieldInfo);
  121. fieldInfo = new MappingFieldInfo();
  122. fieldInfo.setOaField("flastUpdateTime");
  123. fieldInfo.setShrField("org.FLastUpdateTime");
  124. list.add(fieldInfo);
  125. fieldInfo = new MappingFieldInfo();
  126. fieldInfo.setOaField("supFnumber");
  127. fieldInfo.setShrField("parent.FNumber");
  128. list.add(fieldInfo);
  129. fieldInfo = new MappingFieldInfo();
  130. fieldInfo.setOaField("fEffectDate");
  131. fieldInfo.setShrField("org.FEffectDate");
  132. list.add(fieldInfo);
  133. fieldInfo = new MappingFieldInfo();
  134. fieldInfo.setOaField("simpleName");
  135. fieldInfo.setShrField("org.FsimpleName");
  136. list.add(fieldInfo);
  137. fieldInfo = new MappingFieldInfo();
  138. fieldInfo.setOaField("isSealUp");
  139. fieldInfo.setShrField("org.fissealup");
  140. list.add(fieldInfo);
  141. return list;
  142. }
  143. /**
  144. * 赋值部门负责人
  145. * @param ctx
  146. * @param dataList
  147. * @throws BOSException
  148. * @throws SQLException
  149. */
  150. private void processHead(Context ctx,List<HashMap<String, String>> dataList,String startDate,String endDate) throws BOSException, SQLException {
  151. List<String> ids=new ArrayList<>();
  152. for (int i = 0; i < dataList.size(); i++) {
  153. ids.add(dataList.get(i).get("easdept_id"));
  154. }
  155. String processStr = processStr(ids);
  156. //部门负责人
  157. Map<String, String> heads = getHead(ctx,processStr,startDate,endDate);
  158. Map<String, String> pvcs = getPvc(ctx,processStr);
  159. if(heads.size()>0) {
  160. logger.info("heads....count{} ",heads.size());
  161. }
  162. for (int i = 0; i < dataList.size(); i++) {
  163. HashMap<String, String> data = dataList.get(i);
  164. data.put("pnumber", heads.get(data.get("fnumber"))==null?"":heads.get(data.get("fnumber")));
  165. data.put("pvc_number", pvcs.get(data.get("fnumber"))==null?"":pvcs.get(data.get("fnumber")));
  166. }
  167. }
  168. /**
  169. * 获取pvc分部领导
  170. * @param ctx
  171. * @param processStr
  172. * @return
  173. * @throws BOSException
  174. * @throws SQLException
  175. */
  176. private Map<String,String> getPvc(Context ctx,String processStr) throws BOSException, SQLException{
  177. Map<String,String> resultMap=new HashMap<>();
  178. String sql="SELECT\r\n" +
  179. " org.fnumber orgNumber,\r\n" +
  180. " org.Fname_l1 orgName,\r\n" +
  181. " bp.fnumber pNumber,\r\n" +
  182. " bp.Fname_l1 pName\r\n" +
  183. "FROM\r\n" +
  184. " T_WFR_WFROLE wf\r\n" +
  185. " LEFT JOIN T_WFR_PERSONROLE wp ON wp.froleid= wf.fid\r\n" +
  186. " LEFT JOIN T_BD_Person bp ON bp.fid= wp.fpsersonid\r\n" +
  187. " LEFT JOIN T_ORG_Admin org ON org.fid= wp.forgid \r\n" +
  188. "WHERE\r\n" +
  189. " wf.fnumber= '02' and org.fid in("+processStr+")";
  190. logger.info("GtiitOAGetAdminOrgDataService->getPvc->sql{} ",sql);
  191. IRowSet rs = DbUtil.executeQuery(ctx, sql.toString());
  192. while(rs.next()) {
  193. String orgNumber = rs.getString("orgNumber");
  194. if(StringUtils.isBlank(orgNumber)) {
  195. continue;
  196. }
  197. if(StringUtils.isNotBlank(resultMap.get(orgNumber))) {
  198. resultMap.put(orgNumber, resultMap.get(orgNumber)+","+rs.getString("pNumber"));
  199. }else {
  200. resultMap.put(orgNumber, rs.getString("pNumber"));
  201. }
  202. }
  203. return resultMap;
  204. }
  205. /**
  206. * 获取部门负责人
  207. * @param numbers
  208. * @return
  209. * @throws BOSException
  210. * @throws SQLException
  211. */
  212. private Map<String,String> getHead(Context ctx,String processStr,String startDate,String endDate ) throws BOSException, SQLException{
  213. Map<String,String> resultMap=new HashMap<>();
  214. String sql="SELECT\r\n" +
  215. " a.fid AS oId,\r\n" +
  216. " a.fnumber AS oNumber,\r\n" +
  217. " d.fnumber AS pNumber,\r\n" +
  218. " d.fname_L1 AS pNameL1,\r\n" +
  219. " d.fname_L2 AS pNameL2 \r\n" +
  220. "FROM\r\n" +
  221. " T_ORG_Admin a\r\n" +
  222. " LEFT JOIN T_ORG_POSITION b ON a.FResponPositionID= b.fid\r\n" +
  223. " LEFT JOIN (\r\n" +
  224. " SELECT\r\n" +
  225. " ca.fpositionid,\r\n" +
  226. " ca.fpersonid, \r\n" +
  227. " ca.fislatestinaday, \r\n" +
  228. " ca.fadminorgid, \r\n" +
  229. " ca.flastupdatetime \r\n" +
  230. " FROM\r\n" +
  231. " T_HR_EmpOrgRelation ca\r\n" +
  232. " INNER JOIN ( SELECT fpositionid, MAX ( fleffdt ) maxDate FROM T_HR_EmpOrgRelation GROUP BY fpositionid ) cb ON ca.fpositionid= cb.fpositionid \r\n" +
  233. " AND ca.fleffdt= cb.maxDate \r\n" +
  234. " ) c ON c.fpositionid= b.fid\r\n" +
  235. " LEFT JOIN T_BD_Person d ON d.fid= c.fpersonid\r\n" +
  236. " LEFT JOIN T_HR_BDEmployeeType e ON e.fid= d.femployeetypeid \r\n" +
  237. "WHERE\r\n" +
  238. " a.fid IN ("+processStr+") \r\n" +
  239. " AND b.FIsRespPosition= 1 \r\n" +
  240. " AND e.finservice= 1 \r\n" +
  241. " AND b.fdeletedstatus= 1 \r\n"+
  242. " AND c.fislatestinaday=1 \r\n";
  243. if(StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)) {
  244. sql=sql+" AND (b.flastupdatetime>= '"+startDate+"' \r\n" +
  245. " AND b.flastupdatetime<= '"+endDate+"') ";
  246. sql=sql+" or(c.flastupdatetime<= '"+endDate+"' and c.fadminorgid IN ("+processStr+") \r\n" +
  247. " AND c.fislatestinaday=1 and e.finservice=1) ";
  248. }
  249. sql=sql+" group by a.fid,a.fnumber,d.fnumber,d.fname_L1,d.fname_L2 order by a.fnumber";
  250. logger.info("getHead.....sql{} ",sql);
  251. IRowSet rs = DbUtil.executeQuery(ctx, sql.toString());
  252. while(rs.next()) {
  253. String oNumber = rs.getString("oNumber");
  254. if(StringUtils.isBlank(oNumber)) {
  255. continue;
  256. }
  257. if(StringUtils.isNotBlank(resultMap.get(oNumber))) {
  258. resultMap.put(oNumber, resultMap.get(oNumber)+","+rs.getString("pNumber"));
  259. }else {
  260. resultMap.put(oNumber, rs.getString("pNumber"));
  261. }
  262. }
  263. return resultMap;
  264. }
  265. /**
  266. * 处理字符串
  267. * @param numbers
  268. * @return
  269. */
  270. private String processStr(List<String> numbers) {
  271. String result="";
  272. StringBuilder sb = new StringBuilder();
  273. for (String s : numbers) {
  274. sb.append("'").append(s).append("'").append(",");
  275. }
  276. if(sb.length()>0){
  277. sb.deleteCharAt(sb.lastIndexOf(","));
  278. result=sb.toString();
  279. }
  280. return result;
  281. }
  282. }