ContractRptUtil.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. package com.kingdee.shr.customer.gtiit.util;
  2. import java.time.LocalDate;
  3. import java.time.format.DateTimeFormatter;
  4. import java.util.Map;
  5. public class ContractRptUtil {
  6. /**
  7. * 全部合同报表查询sql
  8. *
  9. * @param param
  10. * 用工关系状态
  11. * @return 查询用工关系状态为 params的合同报表信息
  12. */
  13. public static String getContractSql(Map<String, Object> params) {
  14. Map<String, String> date = (Map<String, String>) params.get("queryTime");
  15. if (date == null) {
  16. // 获取当前日期
  17. LocalDate currentDate = LocalDate.now();
  18. // 定义日期格式
  19. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  20. // 将日期转换为指定格式的字符串
  21. String formattedDate = currentDate.format(formatter);
  22. date.put("date", formattedDate);
  23. }
  24. String queryTime = date.get("date").toString();
  25. StringBuffer sql = new StringBuffer();
  26. sql.append("/*dialect*/");
  27. sql.append(
  28. " SELECT p.fnumber PersonNumber, p.cfsurname LastName, p.cfgivenName FirstName , p.fname_l1 EnglishName, ");
  29. sql.append(" emp.FAdminOrgID,bu.FName_L2 department,");
  30. sql.append(" emp.fpositionid,post.cflongname_l1 positions,");
  31. sql.append(" post.FJobID ,job.FName_L2 jobname,");
  32. sql.append(" emp.CFWorkercategoryID, w.FName_L2 WorkerCategory,");
  33. sql.append(
  34. " CASE WHEN ify.fname_l2 IS NOT NULL THEN ify.fname_l2 ELSE ph.PersonType END AS PersonType ,");
  35. sql.append(
  36. " CASE WHEN fu.fname_l2 IS NOT NULL THEN fu.fname_l2 ELSE ph.FullorPartTime END AS FullorPartTime ,");
  37. sql.append(
  38. " ps.FJoinGroupDateCur as HireDate ,empl.FPlanFormalDate ProbationEndDate,pco.CFContractno ContractNo , ");
  39. sql.append(
  40. " CASE WHEN pco.CFTYPE = '1' THEN 'Contract' WHEN pco.CFTYPE = '2' THEN 'Agreement' ELSE '' END AS type, ");
  41. sql.append(" pco.CFCommencingDate CommencingDate, pco.CFExpiredDate ExpiredDate, ");
  42. sql.append(
  43. " CASE WHEN ROUND(EXTRACT(DAYS FROM (pco.CFExpiredDate - empl.fenterdate))) = mp.MaxYearsOfService then ROUND(mp.MaxYearsOfService / 365, 2) else 0.00 end as YearsOfService");
  44. sql.append(" FROM CT_MP_Pcontractinfo pco ");
  45. sql.append(" left join (");
  46. sql.append(
  47. " SELECT pco.fpersonid ,max( ROUND(EXTRACT(DAYS FROM (pco.CFExpiredDate - emph.fenterdate)))) as MaxYearsOfService ");
  48. sql.append(
  49. " FROM CT_MP_Pcontractinfo pco left join T_HR_EmpLaborRelationhis emph on pco.fpersonid=emph.fpersonid where emph.feffdt<='"
  50. + queryTime + "' and emph.fleffdt>='" + queryTime
  51. + "' group by pco.fpersonid ) mp on mp.fpersonid = pco.fpersonid ");
  52. sql.append(
  53. " left join (SELECT * FROM T_HR_EmpOrgRelation emp where emp.fisLatestInAday ='1' and emp.fassignType ='1' and emp.feffdt <= '"
  54. + queryTime + "' and emp.fleffdt >='" + queryTime
  55. + "' ) emp on pco.fpersonid = emp.fpersonid ");
  56. sql.append(" left join T_BD_PERSON p on p.fid = pco.fpersonid");
  57. sql.append(" left join T_ORG_BaseUnit bu on bu.fid=emp.FAdminOrgID");
  58. sql.append(" left join T_ORG_Position post on emp.fpositionid = post.fid");
  59. sql.append(" left join T_ORG_Job job on post.FJobID=job.fid ");
  60. sql.append(" left join T_HR_HRJob job2 on job2.FJobID =job.fid ");
  61. sql.append(" left join CT_MP_WorkerCategory w on w.fid =emp.CFWorkercategoryID");
  62. sql.append(" left join T_HR_EmployeeClassify ify on ify.fid = p.cfpersontypeid");
  63. sql.append(" left join CT_MP_Fullorpart fu on p.cfftorptid= fu.fid");
  64. sql.append(
  65. " LEFT JOIN (SELECT e.FName_L2 PersonType , f.FName_L2 FullorPartTime ,phs.FHistoryRelateID FROM T_BD_PersonHis phs ");
  66. sql.append(" left join T_HR_EmployeeClassify e ON e.fid =phs.cfpersontypeid ");
  67. sql.append(" left join CT_MP_Fullorpart f on f.fid = phs.cfftorptid");
  68. sql.append(" where phs.feffdt <= '" + queryTime + "' and phs.fleffdt >='" + queryTime
  69. + "') ph ON p.fid = ph.FHistoryRelateID");
  70. sql.append(
  71. " left join (SELECT ps.FJoinGroupDateCur ,ps.FPERSONID FROM T_HR_PersonPositionHis ps where ps.feffdt <= '"
  72. + queryTime + "' and ps.fleffdt >='" + queryTime + "') as ps on ps.fpersonid = p.fid");
  73. sql.append(
  74. " left join ( SELECT e.FPlanFormalDate,e.FPERSONID,e.FLABORRELATIONSTATEID ,e.feffdt ,e.fleffdt, e.fenterdate FROM T_HR_EmpLaborRelationhis e where e.feffdt <= '"
  75. + queryTime + "' and e.fleffdt >='" + queryTime + "' ) as empl ");
  76. sql.append("on empl.FPERSONID = p.fid");
  77. sql.append(" LEFT JOIN T_HR_BDEmployeeType dbe ON empl.FLABORRELATIONSTATEID = dbe.fid ");
  78. sql.append(" where 1 =1 and empl.feffdt <= '" + queryTime + "' and empl.fleffdt >='" + queryTime + "'");
  79. // 在职离职过滤
  80. String personStatus = params.get("personStatus").toString();
  81. if (personStatus.equals("1")) {
  82. // 在职
  83. sql.append(" and dbe.fnumber not IN ('010','009','S09') ");
  84. } else if (personStatus.equals("2")) {
  85. // 离职
  86. sql.append(" and dbe.fnumber IN ('010','009','S09') ");
  87. }
  88. // 员工类别过滤
  89. String workerCategory = params.get("workerCategory").toString();
  90. if (!"".equals(workerCategory) && workerCategory != null) {
  91. sql.append(" and w.fid in ( " + workerCategory + ")");
  92. }
  93. // 职务过滤
  94. String job = params.get("job").toString();
  95. if (!"".equals(job) && job != null) {
  96. // 组织职务 前端显示缺少 最低和最高职等
  97. // sql.append(" and job.fid in ( " + job + ")");
  98. // HR职务
  99. sql.append(" and job2.fid in ( " + job + ")");
  100. }
  101. // 合同时间过滤
  102. Map<String, Object> contractDateMap = (Map<String, Object>) params.get("contractDate");
  103. Object startDate = contractDateMap.get("startDate");
  104. Object endDate = contractDateMap.get("endDate");
  105. if (!"".equals(startDate) && startDate != null) {
  106. sql.append(" and pco.CFCommencingDate <= '" + endDate + "'");
  107. }
  108. if (!"".equals(endDate) && endDate != null) {
  109. sql.append(" and pco.CFExpiredDate >= '" + startDate + "'");
  110. }
  111. sql.append(" order by expireddate desc ");
  112. String str = sql.toString();
  113. System.out.print("我的sql是" + sql.toString());
  114. str = str.replaceAll("(?i)fname_l2", "fname_l1");
  115. System.out.print("我的sql是" + str);
  116. return str;
  117. }
  118. /**
  119. * 最新一条合同报表
  120. *
  121. * @param params
  122. * @return
  123. */
  124. public static String getNewContractSql(Map<String, Object> params) {
  125. Map<String, String> date = (Map<String, String>) params.get("queryTime");
  126. if (date.get("date") == null) {
  127. // 获取当前日期
  128. LocalDate currentDate = LocalDate.now();
  129. // 定义日期格式
  130. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  131. // 将日期转换为指定格式的字符串
  132. String formattedDate = currentDate.format(formatter);
  133. date.put("date", formattedDate);
  134. }
  135. String queryTime = date.get("date").toString();
  136. StringBuffer sql = new StringBuffer();
  137. sql.append("/*dialect*/");
  138. // sql.append(
  139. // "SELECT p.fnumber PersonNumber, p.cfsurname LastName, p.cfgivenName FirstName , p.fname_l1 EnglishName , ");
  140. // sql.append(" emp.FAdminOrgID,bu.FName_L2 department,");
  141. // sql.append(" emp.fpositionid,post.cflongname_l1 positions, ");
  142. // sql.append(" post.FJobID ,job.FName_L2 jobname, ");
  143. // sql.append(" emp.CFWorkercategoryID , w.FName_L2 WorkerCategory, ");
  144. // sql.append(
  145. // " CASE WHEN ify.fname_l2 IS NOT NULL THEN ify.fname_l2 ELSE ph.PersonType END AS PersonType , ");
  146. // sql.append(
  147. // " CASE WHEN fu.fname_l2 IS NOT NULL THEN fu.fname_l2 ELSE ph.FullorPartTime END AS FullorPartTime , ");
  148. // sql.append(
  149. // " ps.FJoinGroupDateCur as HireDate ,empl.FPlanFormalDate ProbationEndDate , pco.fpersonid,pco.CFContractno ContractNo , ");
  150. // sql.append(
  151. // " CASE WHEN pco.CFTYPE = '1' THEN 'Contract' WHEN pco.CFTYPE = '2' THEN 'Agreement' ELSE '' END AS type,");
  152. // sql.append(" pco.CFCommencingDate CommencingDate, pco.CFExpiredDate ExpiredDate ,mxc.Yearsofservice ");
  153. // sql.append(" FROM CT_MP_Pcontractinfo pco");
  154. // sql.append(" right join ( ");
  155. // sql.append(
  156. // " SELECT c.fpersonid , c.CFCommencingDate , c.CFExpiredDate , ROUND(EXTRACT(DAYS FROM (c.CFExpiredDate - emph.fenterdate))/ 365.25, 1) as Yearsofservice ");
  157. // sql.append(
  158. // " FROM (SELECT max(cc.CFCommencingDate) CFCommencingDate ,cc.CFExpiredDate ,cc.fpersonid FROM CT_MP_Pcontractinfo cc ");
  159. // sql.append(" right join ( ");
  160. // sql.append(" SELECT fpersonid , max(CFExpiredDate) ExpiredDate FROM CT_MP_Pcontractinfo c ");
  161. // sql.append(" where c.CFCommencingDate <= '" + queryTime + "' and c.CFExpiredDate >='" + queryTime
  162. // + "' ");
  163. // sql.append(" group by c.fpersonid ) c ");
  164. // sql.append(
  165. // " on cc.fpersonid = c.fpersonid and c.ExpiredDate =cc.CFExpiredDate group by cc.CFExpiredDate ,cc.fpersonid ) as c left join T_HR_EmpLaborRelationhis emph on c.fpersonid=emph.fpersonid where emph.feffdt<='"
  166. // + queryTime + "' and emph.fleffdt>='" + queryTime + "' ) mxc ");
  167. // sql.append(
  168. // " on mxc.fpersonid = pco.fpersonid and mxc.CFCommencingDate = pco.CFCommencingDate and mxc.CFExpiredDate= pco.CFExpiredDate ");
  169. // sql.append(" left join t_bd_person p on p.fid = pco.fpersonid ");
  170. // sql.append(" left join ");
  171. // sql.append(
  172. // " (SELECT emp.FAdminOrgID,emp.fpositionid,emp.CFWorkercategoryID,emp.fpersonid FROM T_HR_EmpOrgRelation emp where ");
  173. // sql.append(" emp.fisLatestInAday ='1' and emp.fassignType ='1' and emp.feffdt <= '" + queryTime
  174. // + "' and emp.fleffdt >='" + queryTime + "' ) emp ");
  175. // sql.append(" on p.fid =emp.fpersonid ");
  176. // sql.append(" left join T_ORG_BaseUnit bu on bu.fid=emp.FAdminOrgID ");
  177. // sql.append(" left join T_ORG_Position post on emp.fpositionid = post.fid ");
  178. // sql.append(" left join T_ORG_Job job on post.FJobID=job.fid ");
  179. // sql.append(" left join T_HR_HRJob job2 on job2.FJobID =job.fid ");
  180. // sql.append(" left join CT_MP_WorkerCategory w on w.fid =emp.CFWorkercategoryID ");
  181. // sql.append(" left join T_HR_EmployeeClassify ify on ify.fid = p.cfpersontypeid ");
  182. // sql.append(" left join CT_MP_Fullorpart fu on p.cfftorptid= fu.fid ");
  183. // sql.append(
  184. // " LEFT JOIN (SELECT e.FName_L2 PersonType , f.FName_L2 FullorPartTime ,phs.FHistoryRelateID FROM T_BD_PersonHis phs ");
  185. // sql.append(" left join T_HR_EmployeeClassify e ON e.fid =phs.cfpersontypeid ");
  186. // sql.append(" left join CT_MP_Fullorpart f on f.fid = phs.cfftorptid ");
  187. // sql.append(" where phs.feffdt <= '" + queryTime + "' and phs.fleffdt >='" + queryTime
  188. // + "') ph ON p.fid = ph.FHistoryRelateID ");
  189. // sql.append(" left join (SELECT ps.FJoinGroupDateCur ,ps.FPERSONID FROM T_HR_PersonPositionHis ps where ");
  190. // sql.append(" ps.feffdt <= '" + queryTime + "' and ps.fleffdt >='" + queryTime + "') as ps ");
  191. // sql.append(" on ps.fpersonid = p.fid ");
  192. // sql.append(
  193. // " left join ( SELECT e.FPlanFormalDate,e.FPERSONID,e.FLABORRELATIONSTATEID,e.fenterdate FROM T_HR_EmpLaborRelationhis e ");
  194. // sql.append(" where e.feffdt <= '" + queryTime + "' and e.fleffdt >='" + queryTime + "' ) as empl ");
  195. // sql.append(" on empl.FPERSONID = p.fid ");
  196. // sql.append(" LEFT JOIN T_HR_BDEmployeeType dbe ON empl.FLABORRELATIONSTATEID = dbe.fid ");
  197. // sql.append(" where 1 =1 ");
  198. // sql.append(" and dbe.finservice='1'");
  199. sql.append("/*dialect*/SELECT p.fnumber PersonNumber, p.cfsurname LastName, p.cfgivenName FirstName , p.fname_l1 EnglishName , \r\n" +
  200. "emp.FAdminOrgID,bu.fname_l1 department, emp.fpositionid,post.cflongname_l1 positions, post.FJobID ,job.fname_l1 jobname, \r\n" +
  201. " emp.CFWorkercategoryID , w.fname_l1 WorkerCategory, CASE WHEN ify.fname_l1 IS NOT NULL THEN ify.fname_l1 ELSE ph.PersonType END AS PersonType , \r\n" +
  202. " CASE WHEN fu.fname_l1 IS NOT NULL THEN fu.fname_l1 ELSE ph.FullorPartTime END AS FullorPartTime , ps.FJoinGroupDateCur as \r\n" +
  203. " HireDate ,empl.FPlanFormalDate ProbationEndDate , pco.fpersonid,pco.CFContractno ContractNo , CASE WHEN pco.CFTYPE = '1' THEN 'Contract' \r\n" +
  204. " WHEN pco.CFTYPE = '2' THEN 'Agreement' ELSE '' END AS type, pco.CFCommencingDate CommencingDate, \r\n" +
  205. " pco.cfexpireddate ExpiredDate ,mxc.Yearsofservice FROM CT_MP_Pcontractinfo pco right join ( \r\n" +
  206. " SELECT c.fpersonid , c.CFCommencingDate , c.CFExpiredDate , ROUND(EXTRACT(DAYS FROM (c.CFExpiredDate - emph.fenterdate))/ 365, 2) as Yearsofservice \r\n" +
  207. " FROM (SELECT max(cc.CFCommencingDate) CFCommencingDate ,cc.CFExpiredDate ,cc.fpersonid FROM CT_MP_Pcontractinfo cc \r\n" +
  208. " right join ( SELECT fpersonid , max(CFCommencingDate) ExpiredDate FROM CT_MP_Pcontractinfo c \r\n" +
  209. " where c.CFCommencingDate <= '2024-01-04' and c.CFExpiredDate >='2024-01-04' group by c.fpersonid ) c \r\n" +
  210. " on cc.fpersonid = c.fpersonid and c.ExpiredDate =cc.CFCommencingDate group by cc.CFExpiredDate ,cc.fpersonid ) as c left join T_HR_EmpLaborRelationhis \r\n" +
  211. " emph on c.fpersonid=emph.fpersonid where emph.feffdt<='2024-01-04' and emph.fleffdt>='2024-01-04' ) mxc \r\n" +
  212. " on mxc.fpersonid = pco.fpersonid and mxc.CFCommencingDate = pco.CFCommencingDate and mxc.CFCommencingDate= pco.CFCommencingDate \r\n" +
  213. " left join t_bd_person p on p.fid = pco.fpersonid left join (SELECT emp.FAdminOrgID,emp.fpositionid,emp.CFWorkercategoryID,emp.fpersonid \r\n" +
  214. " FROM T_HR_EmpOrgRelation emp where emp.fisLatestInAday ='1' and emp.fassignType ='1' and emp.feffdt <= '2024-01-04' and emp.fleffdt >='2024-01-04' ) emp \r\n" +
  215. " on p.fid =emp.fpersonid left join T_ORG_BaseUnit bu on bu.fid=emp.FAdminOrgID left join T_ORG_Position post on emp.fpositionid = post.fid left join T_ORG_Job job on post.FJobID=job.fid \r\n" +
  216. " left join T_HR_HRJob job2 on job2.FJobID =job.fid left join CT_MP_WorkerCategory w on w.fid =emp.CFWorkercategoryID left join T_HR_EmployeeClassify ify on ify.fid = p.cfpersontypeid left join \r\n" +
  217. " CT_MP_Fullorpart fu on p.cfftorptid= fu.fid LEFT JOIN (SELECT e.fname_l1 PersonType , f.fname_l1 FullorPartTime ,phs.FHistoryRelateID FROM T_BD_PersonHis phs left join T_HR_EmployeeClassify e ON e.fid =phs.cfpersontypeid \r\n" +
  218. " left join CT_MP_Fullorpart f on f.fid = phs.cfftorptid where phs.feffdt <= '2024-01-04' and phs.fleffdt >='2024-01-04') ph ON p.fid = ph.FHistoryRelateID left join (SELECT ps.FJoinGroupDateCur ,ps.FPERSONID FROM \r\n" +
  219. " T_HR_PersonPositionHis ps where ps.feffdt <= '2024-01-04' and ps.fleffdt >='2024-01-04') as ps on ps.fpersonid = p.fid left join \r\n" +
  220. " ( SELECT e.FPlanFormalDate,e.FPERSONID,e.FLABORRELATIONSTATEID,e.fenterdate FROM T_HR_EmpLaborRelationhis e where e.feffdt <= '2024-01-04' and e.fleffdt >='2024-01-04' ) as empl \r\n" +
  221. " on empl.FPERSONID = p.fid LEFT JOIN T_HR_BDEmployeeType dbe ON empl.FLABORRELATIONSTATEID = dbe.fid where 1 =1 and dbe.finservice='1' ");
  222. // String srt=sql.toString();
  223. // String tostr = srt.replaceAll("(?i)2024-01-04", queryTime);
  224. // sql.append(tostr);
  225. // 员工类别过滤
  226. String workerCategory = params.get("workerCategory").toString();
  227. if (!"".equals(workerCategory) && workerCategory != null) {
  228. sql.append(" and w.fid in ( " + workerCategory + ")");
  229. }
  230. // 职务过滤
  231. String job = params.get("job").toString();
  232. if (!"".equals(job) && job != null) {
  233. // sql.append(" and job.fid in ( " + job + ")");
  234. // HR职务
  235. sql.append(" and job2.fid in ( " + job + ")");
  236. }
  237. // 合同时间过滤
  238. if (!"".equals(queryTime) && queryTime != null) {
  239. sql.append(" and pco.CFCommencingDate <= '" + queryTime + "'");
  240. sql.append(" and pco.CFExpiredDate >= '" + queryTime + "'");
  241. }
  242. sql.append(" order by expireddate desc ");
  243. String str = sql.toString();
  244. System.out.print("我的sql是" + sql.toString());
  245. str = str.replaceAll("(?i)fname_l2", "fname_l1");
  246. str=str.replaceAll("(?i)2024-01-04", queryTime);
  247. System.out.print("我的sql是" + str);
  248. return str;
  249. }
  250. }