FillSignCardEditHandlerEx.java 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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.Locale;
  8. import java.util.Map;
  9. import java.util.Set;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. import org.apache.commons.lang3.StringUtils;
  13. import org.apache.log4j.Logger;
  14. import org.springframework.ui.ModelMap;
  15. import com.kingdee.bos.BOSException;
  16. import com.kingdee.bos.Context;
  17. import com.kingdee.bos.dao.IObjectValue;
  18. import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
  19. import com.kingdee.eas.common.EASBizException;
  20. import com.kingdee.eas.framework.CoreBaseCollection;
  21. import com.kingdee.eas.framework.CoreBaseInfo;
  22. import com.kingdee.eas.hr.ats.AtsOverTimeBillEntryCollection;
  23. import com.kingdee.eas.hr.ats.AtsOverTimeBillEntryFactory;
  24. import com.kingdee.eas.hr.ats.AtsOverTimeBillEntryInfo;
  25. import com.kingdee.eas.hr.ats.AtsOverTimeBillInfo;
  26. import com.kingdee.eas.hr.ats.FillSignCardEntryCollection;
  27. import com.kingdee.eas.hr.ats.FillSignCardEntryFactory;
  28. import com.kingdee.eas.hr.ats.FillSignCardEntryInfo;
  29. import com.kingdee.eas.hr.ats.FillSignCardInfo;
  30. import com.kingdee.eas.hr.ats.FillSignReasonFactory;
  31. import com.kingdee.eas.hr.ats.FillSignReasonInfo;
  32. import com.kingdee.eas.util.app.DbUtil;
  33. import com.kingdee.jdbc.rowset.IRowSet;
  34. import com.kingdee.shr.ats.web.handler.FillSignCardEditHandler;
  35. import com.kingdee.shr.base.syssetting.context.SHRContext;
  36. import com.kingdee.shr.base.syssetting.exception.SHRWebException;
  37. import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
  38. import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
  39. import com.kingdee.shr.customer.gtiit.util.BaseUtil;
  40. import com.kingdee.util.LocaleUtils;
  41. public class FillSignCardEditHandlerEx extends FillSignCardEditHandler{
  42. private static Logger logger =
  43. Logger.getLogger("com.kingdee.shr.customer.gtiit.handler.FillSignCardEditHandlerEx");
  44. @Override
  45. protected void verifyModel(HttpServletRequest request, HttpServletResponse response, CoreBaseInfo model)
  46. throws SHRWebException {
  47. logger.error("进入补签卡校验");
  48. Context ctx = SHRContext.getInstance().getContext();
  49. FillSignCardInfo fillSignCardInfo = (FillSignCardInfo) model;
  50. FillSignCardEntryCollection entries = fillSignCardInfo.getEntries();
  51. Set<String> personIdSet = new HashSet<>();
  52. Map<String, Integer> personMap = new HashMap<>();
  53. for(int i=0;i<entries.size();i++) {
  54. String personId = entries.get(i).getPerson().getId().toString();
  55. Date attendDate = entries.get(i).getAttendDate();
  56. Calendar calendar = Calendar.getInstance();
  57. calendar.setTime(attendDate);
  58. String month = calendar.get(Calendar.MONTH)+1 >9?String.valueOf(calendar.get(Calendar.MONTH)+1):"0"+String.valueOf(calendar.get(Calendar.MONTH)+1);
  59. String mapKey = personId+calendar.get(Calendar.YEAR)+month;
  60. personIdSet.add(personId);
  61. FillSignReasonInfo fillSignReasonInfo = null;
  62. try {
  63. fillSignReasonInfo = FillSignReasonFactory.getLocalInstance(ctx).getFillSignReasonInfo(new ObjectUuidPK(entries.get(i).getReason().getId().toString()));
  64. } catch (EASBizException e) {
  65. e.printStackTrace();
  66. } catch (BOSException e) {
  67. e.printStackTrace();
  68. }
  69. if(fillSignReasonInfo!=null && "001".equals(fillSignReasonInfo.getNumber())) {
  70. if(personMap.containsKey(mapKey)) {
  71. personMap.put(mapKey, personMap.get(mapKey)+1);
  72. }else {
  73. personMap.put(mapKey, 1);
  74. }
  75. }
  76. }
  77. Map<String, String> personNameMap = BaseUtil.getPersonIdByName(ctx, personIdSet);
  78. logger.error("人员ID集合:"+personIdSet);
  79. logger.error("补卡信息集合:"+personMap);
  80. StringBuffer str = new StringBuffer();
  81. for(String personId:personIdSet) {
  82. str.append("'"+personId+"',");
  83. }
  84. if(str.length()>0) {
  85. String sql = "SELECT b.FPERSONID,count(1) count,year(b.FATTENDDATE) year ,month(b.FATTENDDATE) month FROM T_HR_ATS_FillSignCard a left join T_HR_ATS_FillSignCardEntry b on a.fid=b.fbillid left join T_HR_ATS_FillSignReason c on c.fid=b.freasonid "
  86. + "where c.FNUMBER = '001' and a.FBILLSTATE in ('2','3') and b.FPERSONID in ("+str.substring(0, str.length()-1)+") group by b.FPERSONID,year(b.FATTENDDATE),month(b.FATTENDDATE) ";
  87. logger.error("查询补签信息SQL:"+sql);
  88. try {
  89. IRowSet rowSet = DbUtil.executeQuery(ctx, sql);
  90. while(rowSet.next()) {
  91. int count = rowSet.getInt("count");
  92. String personId = rowSet.getString("FPERSONID");
  93. String month = rowSet.getString("month").length()>1?rowSet.getString("month"):"0"+rowSet.getString("month");
  94. String mapKey = personId + rowSet.getString("year") + month;
  95. if(personMap.containsKey(mapKey)) {
  96. personMap.put(mapKey, personMap.get(mapKey)==null?0:personMap.get(mapKey)+count);
  97. }
  98. }
  99. } catch (BOSException e) {
  100. e.printStackTrace();
  101. } catch (SQLException e) {
  102. e.printStackTrace();
  103. }
  104. }
  105. logger.error("人员ID集合:"+personIdSet);
  106. logger.error("人员编码映射:"+personNameMap);
  107. logger.error("补卡信息集合:"+personMap);
  108. for(String key:personMap.keySet()) {
  109. if(personMap.get(key) > 3) {
  110. String period = key.substring(key.length()-6);
  111. String personId = key.substring(0,key.length()-6);
  112. String personName = personNameMap.get(personId);
  113. throw new ShrWebBizException("Employee ("+personName+") forgot to clock in more than three times during the period ("+period+")");
  114. }
  115. }
  116. super.verifyModel(request, response, model);
  117. }
  118. public void getToremarksAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
  119. throws SHRWebException {
  120. Context ctx = SHRContext.getInstance().getContext();
  121. try {
  122. //单据ID
  123. String billId = request.getParameter("billId");
  124. if(StringUtils.isBlank(billId)) {
  125. return;
  126. }
  127. FillSignCardEntryCollection entryColl = FillSignCardEntryFactory.getLocalInstance(ctx).getFillSignCardEntryCollection("where bill = '"+billId+"'");
  128. for(int i = 0; i<entryColl.size();i++) {
  129. FillSignCardEntryInfo fillSignCardEntryInfo = entryColl.get(i);
  130. modelMap.put(fillSignCardEntryInfo.getId().toString(), fillSignCardEntryInfo.get("toremarks"));
  131. }
  132. } catch (BOSException e) {
  133. e.printStackTrace();
  134. }
  135. JSONUtils.writeJson(response, modelMap);
  136. }
  137. }