6cc21e310fbed1d76070a287c44b80c6e889ab71.svn-base 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package com.kingdee.shr.customer.gtiit.handler;
  2. import java.sql.SQLException;
  3. import java.util.Calendar;
  4. import java.util.Date;
  5. import java.util.HashMap;
  6. import java.util.HashSet;
  7. import java.util.Map;
  8. import java.util.Set;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import org.apache.log4j.Logger;
  12. import com.kingdee.bos.BOSException;
  13. import com.kingdee.bos.Context;
  14. import com.kingdee.bos.metadata.entity.FilterInfo;
  15. import com.kingdee.bos.metadata.entity.FilterItemInfo;
  16. import com.kingdee.bos.metadata.query.util.CompareType;
  17. import com.kingdee.bos.sql.ParserException;
  18. import com.kingdee.eas.util.app.DbUtil;
  19. import com.kingdee.jdbc.rowset.IRowSet;
  20. import com.kingdee.shr.base.syssetting.context.SHRContext;
  21. import com.kingdee.shr.base.syssetting.exception.SHRWebException;
  22. import com.kingdee.shr.compensation.web.handler.CmpEmpFilesDynamicListHandler;
  23. import com.kingdee.shr.customer.gtiit.util.DateTimeUtils;
  24. /**
  25. * 薪酬提报名单
  26. * @author xiaoxin
  27. *
  28. */
  29. public class PaySalaryDynamicListHandler extends CmpEmpFilesDynamicListHandler{
  30. private static Logger logger =
  31. Logger.getLogger("com.kingdee.shr.customer.gtiit.handler.PaySalaryDynamicListHandler");
  32. @Override
  33. protected FilterInfo getDefaultFilter(HttpServletRequest request, HttpServletResponse response)
  34. throws SHRWebException {
  35. Context ctx = SHRContext.getInstance().getContext();
  36. FilterInfo defaultFilter = super.getDefaultFilter(request, response);
  37. String today = DateTimeUtils.dateFormat(new Date(), "yyyy-MM-dd");
  38. Calendar calendar = Calendar.getInstance();
  39. calendar.set(Calendar.DAY_OF_MONTH, 1);
  40. calendar.add(Calendar.MONTH, -1);
  41. Date lastDate = calendar.getTime();
  42. calendar.add(Calendar.MONTH, 2);
  43. Date nextDate = calendar.getTime();
  44. String lastDateStr = DateTimeUtils.dateFormat(lastDate, "yyyy-MM-dd");
  45. String nextDateStr = DateTimeUtils.dateFormat(nextDate, "yyyy-MM-dd");
  46. try {
  47. //档案失效日期大于今天
  48. FilterInfo personLeffectDateFilter = new FilterInfo("personcmp.leffectdate > '"+today+"'");
  49. //发薪任职失效日期大于今天 获取离职日期在上月或者本月
  50. FilterInfo empOrgLeffectDateFilter = new FilterInfo("(cmpemporelation.leffectdate > '"+today+"' or (pp.leftdate >= '"+lastDateStr+"' and pp.leftdate < '"+nextDateStr+"'))");
  51. //任职类型为主要任职
  52. FilterInfo assingTypeFilter = new FilterInfo("emporgrelation.assigntype = '1'");
  53. defaultFilter.mergeFilter(personLeffectDateFilter, "and");
  54. defaultFilter.mergeFilter(empOrgLeffectDateFilter, "and");
  55. defaultFilter.mergeFilter(assingTypeFilter, "and");
  56. logger.error("档案花名册过滤条件:"+defaultFilter.toSql());
  57. String sql = "/*dialect*/SELECT DISTINCT \"personcmp\".fid AS \"personcmp.id\", \"person\".fnumber AS \"person.number\", "
  58. + "\"fullorpart\".fname_l2 AS \"fullorpart.name\", \"adminorgunit\".fnumber AS \"adminorgunit.number\", "
  59. + "\"cmphrorgunit\".fid AS \"cmphrorgunit.id\", \"cmpemporelation\".fusedefault AS \"cmpemporelation.usedefault\", "
  60. + "\"person\".fname_l2 AS \"person.name\", \"adminorgunit\".fsortcode AS \"adminorgunit.sortcode\", "
  61. + "\"position\".fnumber AS \"position.number\", \"person\".findex AS \"person.indexof\", \"pp\".fleftdate AS \"pp.leftdate\", "
  62. + "\"person\".fhistoryrelateid AS \"person.id\", \"emporgrelation\".fassigntype AS \"emporgrelation.assigntype\", "
  63. + "\"personcmp\".fissendsalary AS \"personcmp.issendsalary\", \"laborrela\".fenterdate AS \"laborrela.enterdate\", "
  64. + "\"adminorgunit\".fhistoryrelateid AS \"adminorgunit.id\", \"position\".findex AS \"position.index\", "
  65. + "\"cmpemporelation\".fid AS \"cmpemporelation.id\", \"cmpemporelation\".fleffectdate AS cmpleffectdate "
  66. + "FROM t_bd_personhis \"person\" LEFT OUTER JOIN t_hr_spersoncmp \"personcmp\" ON \"personcmp\".fpersonid = \"person\".fhistoryrelateid "
  67. + "LEFT OUTER JOIN ct_mp_fullorpart \"fullorpart\" ON \"fullorpart\".fid = \"person\".cfftorptid "
  68. + "LEFT OUTER JOIN t_hr_scmpemporelation \"cmpemporelation\" ON \"cmpemporelation\".fpersoncmpid = \"personcmp\".fid "
  69. + "LEFT OUTER JOIN t_hr_emporgrelation \"emporgrelation\" ON \"emporgrelation\".fid = \"cmpemporelation\".femporgrelationid "
  70. + "LEFT OUTER JOIN t_org_adminhis \"adminorgunit\" ON (\"adminorgunit\".fhistoryrelateid = \"emporgrelation\".fadminorgid AND "
  71. + "((\"adminorgunit\".feffdt <= \"emporgrelation\".fleffdt) AND (\"adminorgunit\".fleffdt >= \"emporgrelation\".fleffdt))) "
  72. + "LEFT OUTER JOIN t_org_adminorgtreehis \"adminorgunitt\" ON ((\"adminorgunit\".fhistoryrelateid = \"adminorgunitt\".fadminorgid AND "
  73. + "(\"adminorgunit\".fleffdt <= \"adminorgunitt\".fleffdt)) AND (\"adminorgunit\".fleffdt >= \"adminorgunitt\".feffdt)) "
  74. + "LEFT OUTER JOIN t_org_hro \"cmphrorgunit\" ON \"cmphrorgunit\".fid = \"personcmp\".fhrorgunitid "
  75. + "LEFT OUTER JOIN t_org_positionhis \"position\" ON (\"position\".fhistoryrelateid = \"emporgrelation\".fpositionid AND "
  76. + "((\"position\".feffdt <= \"emporgrelation\".fleffdt) AND (\"position\".fleffdt >= \"emporgrelation\".fleffdt))) "
  77. + "LEFT OUTER JOIN t_hr_personpositionhis \"pp\" ON (((\"pp\".fpersonid = \"emporgrelation\".fpersonid AND "
  78. + "(\"pp\".fstartdatetime <= \"emporgrelation\".fleffdt)) AND (\"pp\".fenddatetime >= \"emporgrelation\".fleffdt)) AND "
  79. + "((\"pp\".feffdt <= \"emporgrelation\".fleffdt) AND (\"pp\".fleffdt >= \"emporgrelation\".fleffdt))) "
  80. + "LEFT OUTER JOIN t_hr_emplaborrelationhis \"laborrela\" ON (\"laborrela\".fhistoryrelateid = \"emporgrelation\".flaborrelationid AND "
  81. + "((\"laborrela\".fstartdatetime <= \"emporgrelation\".fenddatetime) AND (\"laborrela\".fenddatetime >= \"emporgrelation\".fenddatetime))) "
  82. + "WHERE ((((((\"cmphrorgunit\".fid IN ('00000000-0000-0000-0000-000000000000CCE7AED4') ) AND (\"personcmp\".fleffectdate > '"+today+"')) AND "
  83. + "((\"cmpemporelation\".fleffectdate > '"+today+"') OR ((\"pp\".fleftdate >= '"+lastDateStr+"') AND (\"pp\".fleftdate < '"+nextDateStr+"')))) AND "
  84. + "\"emporgrelation\".fassigntype = '1') AND ((\"adminorgunit\".fissealup = 0 AND \"cmpemporelation\".fusedefault = 1) OR "
  85. + "(\"cmpemporelation\".fusedefault = 0 OR (\"cmpemporelation\".fusedefault IS NULL)))) AND ((\"person\".feffdt < '"+nextDateStr+"') AND "
  86. + "(\"person\".fleffdt >= '"+today+"'))) ORDER BY \"person.number\" ASC";
  87. logger.error("查询花名册信息SQL:"+sql);
  88. IRowSet rowSet = DbUtil.executeQuery(ctx, sql);
  89. StringBuffer strBuffer = new StringBuffer();
  90. Map<String, Date> map = new HashMap<>();
  91. Map<String, String> empMap = new HashMap<>();
  92. Set<String> set = new HashSet<>();
  93. while(rowSet.next()) {
  94. String personNumber = rowSet.getString("person.number");
  95. String cmpEmpRelationId = rowSet.getString("cmpemporelation.id");
  96. Date cmpLeffectdate = rowSet.getDate("cmpleffectdate");
  97. if(map.containsKey(personNumber)) {
  98. if(map.get(personNumber).compareTo(cmpLeffectdate)>0) {
  99. set.add(cmpEmpRelationId);
  100. }else {
  101. set.add(empMap.get(personNumber));
  102. map.put(personNumber, cmpLeffectdate);
  103. empMap.put(personNumber, cmpEmpRelationId);
  104. }
  105. }else {
  106. map.put(personNumber, cmpLeffectdate);
  107. empMap.put(personNumber, cmpEmpRelationId);
  108. }
  109. }
  110. logger.error("重复人员ID集合:"+set);
  111. for(String id:set) {
  112. strBuffer.append("'"+id+"',");
  113. }
  114. if(strBuffer.length()>0) {
  115. strBuffer.deleteCharAt(strBuffer.length()-1);
  116. FilterInfo itemInfo = new FilterInfo("cmpemporelation.id not in ("+strBuffer+")");
  117. defaultFilter.mergeFilter(itemInfo, "and");;
  118. }
  119. logger.error("档案花名册过滤条件:"+defaultFilter.toSql());
  120. } catch (ParserException e) {
  121. e.printStackTrace();
  122. } catch (BOSException e) {
  123. e.printStackTrace();
  124. } catch (SQLException e) {
  125. e.printStackTrace();
  126. }
  127. return defaultFilter;
  128. }
  129. }