e27e8e34f72c974f0d055996cc86cd2ccfff08b1.svn-base 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. package com.kingdee.shr.customer.gtiit.osf;
  2. import java.sql.SQLException;
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import org.apache.commons.lang3.StringUtils;
  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;
  10. import com.kingdee.bos.BOSException;
  11. import com.kingdee.bos.Context;
  12. import com.kingdee.bos.bsf.service.app.IHRMsfService;
  13. import com.kingdee.eas.common.EASBizException;
  14. import com.kingdee.eas.util.app.DbUtil;
  15. import com.kingdee.jdbc.rowset.IRowSet;
  16. import com.kingdee.shr.customer.gtiit.osf.util.DateUtils;
  17. /**
  18. * 获取部门的接口
  19. *
  20. * @author cb
  21. */
  22. public class GtiitOrgAdminService implements IHRMsfService {
  23. private static final Logger logger = LoggerFactory.getLogger(GtiitOrgPositionService.class);
  24. @Override
  25. public Object process(Context ctx, Map param) throws EASBizException, BOSException {
  26. List<Map<String, String>> dataList=null;
  27. try {
  28. // 开始日期
  29. String startDate = (String) param.get("startDate");
  30. // 截止日期
  31. String endDate = (String) param.get("endDate");
  32. logger.info(">>> GtiitOrgAdminService...入参...startDate = " + startDate + "; endDate = " + endDate);
  33. String sql="SELECT\r\n" +
  34. " oa.FID ID,\r\n" +
  35. " oa.fnumber ORGANIZATION_CODE,\r\n" +
  36. " oa.FNAME_L1 ORGANIZATION_NAME_EN,\r\n" +
  37. " oa.FNAME_L2 ORGANIZATION_NAME_CN,\r\n" +
  38. " oa.FSIMPLENAME ORGANIZATION_SHORT_NAME,\r\n" +
  39. " p.FNUMBER DEPARTMENT_HEAD_PERSON_NUMBER,\r\n" +
  40. " p.FNAME_L2 DEPARTMENT_HEAD_NAME,\r\n" +
  41. " oa.FCREATETIME ERP_CREATION_DATE,\r\n" +
  42. " oa.FLASTUPDATETIME ERP_LAST_UPDATE_DATE \r\n" +
  43. " FROM\r\n" +
  44. " T_ORG_Admin oa\r\n" +
  45. " LEFT JOIN t_bd_person p ON p.fid = oa.FPRINCIPALID";
  46. if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)) {
  47. startDate = DateUtils.formatDate(startDate, true);
  48. endDate = DateUtils.formatDate(endDate, false);
  49. logger.info(">>> GtiitOrgAdminService...修改后的入参...startDate = " + startDate + "; endDate = " + endDate);
  50. sql += " where oa.FLASTUPDATETIME >= '" + startDate + "' and oa.FLASTUPDATETIME <= '" + endDate + "'";
  51. }
  52. logger.info(">>> GtiitOrgAdminService 的执行 sql = " + sql);
  53. List<String> fieldList = initMappingField();
  54. IRowSet rs = DbUtil.executeQuery(ctx, sql.toString());
  55. dataList = this.getRsListData(fieldList, rs);
  56. //处理部门负责人及pvc校长
  57. if(dataList!=null && dataList.size()>0) {
  58. processHead(ctx,dataList);
  59. }
  60. }catch(Exception e) {
  61. throw new BOSException(e);
  62. }
  63. return dataList;
  64. }
  65. /**
  66. * 赋值部门负责人
  67. * @param ctx
  68. * @param dataList
  69. * @throws BOSException
  70. * @throws SQLException
  71. */
  72. private void processHead(Context ctx,List<Map<String, String>> dataList) throws BOSException, SQLException {
  73. List<String> ids=new ArrayList<>();
  74. for (int i = 0; i < dataList.size(); i++) {
  75. ids.add(dataList.get(i).get("ID"));
  76. }
  77. //部门id集合
  78. String processStr = processStr(ids);
  79. //部门负责人
  80. Map<String, String> heads = getHead(ctx,processStr);
  81. //pvc
  82. Map<String, String> pvcMap = getPvc(ctx,processStr);
  83. for (int i = 0; i < dataList.size(); i++) {
  84. Map<String, String> data = dataList.get(i);
  85. data.put("DEPARTMENT_HEAD_PERSON_NUMBER", heads.get(data.get("ORGANIZATION_CODE")+"-number"));
  86. data.put("DEPARTMENT_HEAD_NAME", heads.get(data.get("ORGANIZATION_CODE")+"-name"));
  87. data.put("PVC_PERSON_NUMBER", pvcMap.get(data.get("ORGANIZATION_CODE")+"-number"));
  88. data.put("PVC_NAME", pvcMap.get(data.get("ORGANIZATION_CODE")+"-name"));
  89. }
  90. }
  91. private Map<String,String> getPvc(Context ctx,String processStr) throws BOSException, SQLException{
  92. Map<String,String> resultMap=new HashMap<>();
  93. String sql="SELECT\r\n" +
  94. " org.fnumber orgNumber,\r\n" +
  95. " org.Fname_l1 orgName,\r\n" +
  96. " bp.fnumber pNumber,\r\n" +
  97. " bp.Fname_l1 pName\r\n" +
  98. "FROM\r\n" +
  99. " T_WFR_WFROLE wf\r\n" +
  100. " LEFT JOIN T_WFR_PERSONROLE wp ON wp.froleid= wf.fid\r\n" +
  101. " LEFT JOIN T_BD_Person bp ON bp.fid= wp.fpsersonid\r\n" +
  102. " LEFT JOIN T_ORG_Admin org ON org.fid= wp.forgid \r\n" +
  103. "WHERE\r\n" +
  104. " wf.fnumber= '02' and org.fid in("+processStr+")";
  105. logger.info("GtiitOrgAdminService->getPvc->sql{} ",sql);
  106. IRowSet rs = DbUtil.executeQuery(ctx, sql.toString());
  107. while(rs.next()) {
  108. String orgNumber = rs.getString("orgNumber");
  109. if(StringUtils.isBlank(orgNumber)) {
  110. continue;
  111. }
  112. if(StringUtils.isNotBlank(resultMap.get(orgNumber+"-number"))) {
  113. resultMap.put(orgNumber+"-number", resultMap.get(orgNumber+"-number")+","+rs.getString("pNumber"));
  114. }else {
  115. resultMap.put(orgNumber+"-number", rs.getString("pNumber"));
  116. }
  117. if(StringUtils.isNotBlank(resultMap.get(orgNumber+"-name"))) {
  118. resultMap.put(orgNumber+"-name", resultMap.get(orgNumber+"-name")+","+rs.getString("pName"));
  119. }else {
  120. resultMap.put(orgNumber+"-name", rs.getString("pName"));
  121. }
  122. }
  123. return resultMap;
  124. }
  125. /**
  126. * 获取部门负责人
  127. * @param numbers
  128. * @return
  129. * @throws BOSException
  130. * @throws SQLException
  131. */
  132. private Map<String,String> getHead(Context ctx,String processStr) throws BOSException, SQLException{
  133. Map<String,String> resultMap=new HashMap<>();
  134. String sql="SELECT\r\n" +
  135. " a.fid AS oId,\r\n" +
  136. " a.fnumber AS oNumber,\r\n" +
  137. " d.fnumber AS pNumber,\r\n" +
  138. " d.fname_L1 AS pNameL1,\r\n" +
  139. " d.fname_L2 AS pNameL2 \r\n" +
  140. "FROM\r\n" +
  141. " T_ORG_Admin a\r\n" +
  142. " LEFT JOIN T_ORG_POSITION b ON a.FResponPositionID= b.fid\r\n" +
  143. " LEFT JOIN (\r\n" +
  144. " SELECT\r\n" +
  145. " ca.fpositionid,\r\n" +
  146. " ca.fpersonid, \r\n" +
  147. " ca.fislatestinaday, \r\n" +
  148. " ca.fadminorgid, \r\n" +
  149. " ca.flastupdatetime \r\n" +
  150. " FROM\r\n" +
  151. " T_HR_EmpOrgRelation ca\r\n" +
  152. " INNER JOIN ( SELECT fpositionid, MAX ( fleffdt ) maxDate FROM T_HR_EmpOrgRelation GROUP BY fpositionid ) cb ON ca.fpositionid= cb.fpositionid \r\n" +
  153. " AND ca.fleffdt= cb.maxDate \r\n" +
  154. " ) c ON c.fpositionid= b.fid\r\n" +
  155. " LEFT JOIN T_BD_Person d ON d.fid= c.fpersonid\r\n" +
  156. " LEFT JOIN T_HR_BDEmployeeType e ON e.fid= d.femployeetypeid \r\n" +
  157. "WHERE\r\n" +
  158. " a.fid IN ("+processStr+") \r\n" +
  159. " AND b.FIsRespPosition= 1 \r\n" +
  160. " AND e.finservice= 1 \r\n" +
  161. " AND b.fdeletedstatus= 1 \r\n"+
  162. " AND c.fislatestinaday=1 \r\n";
  163. logger.info("GtiitOrgAdminService->getHead->sql{} ",sql);
  164. IRowSet rs = DbUtil.executeQuery(ctx, sql.toString());
  165. while(rs.next()) {
  166. String oNumber = rs.getString("oNumber");
  167. if(StringUtils.isBlank(oNumber)) {
  168. continue;
  169. }
  170. if(StringUtils.isNotBlank(resultMap.get(oNumber+"-number"))) {
  171. resultMap.put(oNumber+"-number", resultMap.get(oNumber+"-number")+","+rs.getString("pNumber"));
  172. }else {
  173. resultMap.put(oNumber+"-number", rs.getString("pNumber"));
  174. }
  175. if(StringUtils.isNotBlank(resultMap.get(oNumber+"-name"))) {
  176. resultMap.put(oNumber+"-name", resultMap.get(oNumber+"-name")+","+rs.getString("pNameL1"));
  177. }else {
  178. resultMap.put(oNumber+"-name", rs.getString("pNameL1"));
  179. }
  180. }
  181. return resultMap;
  182. }
  183. /**
  184. * 处理字符串
  185. * @param numbers
  186. * @return
  187. */
  188. private String processStr(List<String> numbers) {
  189. String result="";
  190. StringBuilder sb = new StringBuilder();
  191. for (String s : numbers) {
  192. sb.append("'").append(s).append("'").append(",");
  193. }
  194. if(sb.length()>0){
  195. sb.deleteCharAt(sb.lastIndexOf(","));
  196. result=sb.toString();
  197. }
  198. return result;
  199. }
  200. private List<String> initMappingField() {
  201. List<String> list = new ArrayList<>();
  202. list.add("ID");
  203. list.add("ORGANIZATION_CODE");
  204. list.add("ORGANIZATION_NAME_EN");
  205. list.add("ORGANIZATION_NAME_CN");
  206. list.add("ORGANIZATION_SHORT_NAME");
  207. list.add("DEPARTMENT_HEAD_PERSON_NUMBER");
  208. list.add("DEPARTMENT_HEAD_NAME");
  209. /* list.add("PVC_PERSON_NUMBER");
  210. list.add("PVC_NAME");*/
  211. list.add("ERP_CREATION_DATE");
  212. list.add("ERP_LAST_UPDATE_DATE");
  213. return list;
  214. }
  215. private List<Map<String, String>> getRsListData(List<String> fieldList, IRowSet rs) throws BOSException {
  216. List<Map<String, String>> dataList = new ArrayList<>();
  217. try {
  218. while (rs.next()) {
  219. HashMap<String, String> dataMap = new HashMap<>();
  220. int i = 0;
  221. for (int size = fieldList.size(); i < size; ++i) {
  222. String field = fieldList.get(i);
  223. dataMap.put(field, rs.getString(field));
  224. }
  225. dataList.add(dataMap);
  226. }
  227. return dataList;
  228. } catch (SQLException ex) {
  229. throw new BOSException(ex);
  230. }
  231. }
  232. }