AutoSubDayDetailFacadeControllerBean.java 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. package com.kingdee.eas.custom.calcdailypay.task;
  2. import com.kingdee.bos.metadata.entity.*;
  3. import com.kingdee.bos.metadata.query.util.CompareType;
  4. import com.kingdee.bos.util.EASResource;
  5. import com.kingdee.shr.base.syssetting.exception.SHRWebException;
  6. import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
  7. import com.kingdee.shr.compensation.app.integrate.*;
  8. import com.kingdee.shr.compensation.app.utils.SubConstants;
  9. import com.kingdee.shr.compensation.integrate.verify.CycleVerify;
  10. import com.kingdee.shr.compensation.integrate.verify.ISubmitBillVerifyInterface;
  11. import com.kingdee.shr.compensation.integrate.verify.SubmitBillDisableElementVerify;
  12. import com.kingdee.shr.compensation.integrate.verify.SubmitBillEnableElementVerify;
  13. import com.kingdee.shr.compensation.util.budget.BudgetUtil;
  14. import com.google.common.collect.Maps;
  15. import org.apache.log4j.Logger;
  16. import com.kingdee.bos.*;
  17. import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
  18. import java.sql.SQLException;
  19. import java.time.LocalDate;
  20. import java.time.format.DateTimeFormatter;
  21. import java.util.Date;
  22. import java.util.Map;
  23. import com.kingdee.eas.common.EASBizException;
  24. import com.kingdee.eas.framework.CoreBaseInfo;
  25. import com.kingdee.eas.hr.base.HRBillStateEnum;
  26. import com.kingdee.eas.util.app.DbUtil;
  27. import com.kingdee.jdbc.rowset.IRowSet;
  28. /**
  29. * 自动提交日提报单
  30. * @author coyle
  31. * 2025-05-25
  32. */
  33. public class AutoSubDayDetailFacadeControllerBean extends AbstractAutoSubDayDetailFacadeControllerBean
  34. {
  35. private static Logger logger =
  36. Logger.getLogger("com.kingdee.eas.custom.calcdailypay.task.AutoSubDayDetailFacadeControllerBean");
  37. /**
  38. *
  39. * @param ctx
  40. * @param preCalcDays 日期偏移量,正数表示向后推,负数表示向前推
  41. * @throws BOSException
  42. * @throws EASBizException
  43. */
  44. public void _autoSubDayDetail(Context ctx, int preCalcDays) throws BOSException, EASBizException {
  45. // 获取当前日期
  46. LocalDate currentDate = LocalDate.now();
  47. // 根据preCalcDays计算起始日期和结束日期
  48. LocalDate startDate = currentDate.minusDays( Math.abs(preCalcDays));
  49. LocalDate endDate = currentDate;
  50. // 如果preCalcDays是正数,调整startDate和endDate的顺序
  51. // if (preCalcDays > 0) {
  52. // LocalDate temp = startDate;
  53. // startDate = endDate;
  54. // endDate = temp;
  55. // }
  56. // 在日期范围内每天执行一次executeSubmit方法
  57. while (!startDate.isAfter(endDate)) {
  58. try {
  59. executeSubmit(ctx, startDate);
  60. } catch (SQLException e) {
  61. logger.error("日提报自动提交sql执行异常"+e);
  62. e.printStackTrace();
  63. }
  64. startDate = startDate.plusDays(1);
  65. }
  66. }
  67. private void executeSubmit(Context ctx, LocalDate date) throws BOSException, EASBizException, SQLException {
  68. // 这里是executeSubmit的具体实现
  69. String field1 = "S64";
  70. CalSubmitItemCollection subColl = CalSubmitItemFactory.getLocalInstance(ctx)
  71. .getCalSubmitItemCollection("SELECT ID,FieldSn,number where number = '"+SubConstants.COMRATE+"'");
  72. if(subColl.size()>0) {
  73. CalSubmitItemInfo calSubmitItemInfo = subColl.get(0);
  74. int fieldSn = calSubmitItemInfo.getFieldSn();
  75. field1 = "S"+fieldSn ;
  76. }else{
  77. field1 = "S64";
  78. logger.error("查询薪酬项目编码,没有找到"+SubConstants.COMRATE+"字段数据");
  79. }
  80. // 假设你需要将日期格式化为特定格式
  81. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  82. String formattedDate = date.format(formatter);
  83. //业务逻辑
  84. IBatchSubmitShemeBill billIns = BatchSubmitShemeBillFactory.getLocalInstance(ctx);
  85. FilterInfo filter = new FilterInfo();
  86. filter.getFilterItems().add(new FilterItemInfo("billState", HRBillStateEnum.SAVED_VALUE, CompareType.EQUALS));
  87. //提报方案时日提报的;
  88. filter.getFilterItems().add(new FilterItemInfo("submitScheme.submitSchemeType", SubmitSchemeType.TIMEPIECE_VALUE, CompareType.EQUALS));
  89. filter.getFilterItems().add(new FilterItemInfo("applyDate", formattedDate , CompareType.LESS_EQUALS));
  90. filter.getFilterItems().add(new FilterItemInfo("applyDate", formattedDate , CompareType.GREATER_EQUALS ));
  91. EntityViewInfo viewInfo = new EntityViewInfo();
  92. viewInfo.setFilter(filter);
  93. try {
  94. BatchSubmitShemeBillCollection batchSubmitShemeBillCollection = billIns.getBatchSubmitShemeBillCollection(viewInfo);
  95. if (!batchSubmitShemeBillCollection.isEmpty()) {
  96. for (int i = 0; i < batchSubmitShemeBillCollection.size(); ++i) {
  97. BatchSubmitShemeBillInfo model = batchSubmitShemeBillCollection.get(i);
  98. // BatchSubmitShemeBillControllerBeanEx batchSubmitShemeBillControllerBeanEx = new BatchSubmitShemeBillControllerBeanEx();
  99. // batchSubmitShemeBillControllerBeanEx._save(ctx,model);
  100. billIns.save(new ObjectUuidPK(model.getId()),model);
  101. String checkSql = "SELECT "+field1 +" FROM T_HR_TimepieceBillEntry WHERE FBillID = '"+model.getId().toString()+"' ";
  102. IRowSet executeQuery = DbUtil.executeQuery(ctx, checkSql);
  103. boolean isOk = true;
  104. while(executeQuery.next()) {
  105. String value = executeQuery.getString(field1);
  106. if(value == null ) {
  107. logger.error("日提报单"+model.getNumber()+"的"+field1+"字段值为空,无法提交");
  108. isOk = false;
  109. break;
  110. }
  111. }
  112. if(!isOk) {
  113. continue;
  114. }
  115. beforeSubmit(ctx, model);
  116. billIns.submitEffect(model);
  117. }
  118. }
  119. } catch (SHRWebException e) {
  120. logger.error(e);
  121. }
  122. }
  123. ////////////DefaultSubmitShemeBillListHandler_beforeSubmit////////////
  124. protected void beforeSubmit( Context ctx,CoreBaseInfo model)
  125. throws SHRWebException {
  126. BatchSubmitShemeBillInfo info = (BatchSubmitShemeBillInfo) model;
  127. this.reAssembleModel(ctx, info);
  128. this.verifyIsBillEntryEmpty(ctx, info);
  129. try {
  130. ISubmitBillVerifyInterface verifyInstance = this.getVerifyInstance(ctx, info);
  131. verifyInstance.verify(ctx, info, this.getVerifyParams());
  132. BudgetUtil.verifyBudget(ctx, info);
  133. model.setInt("billState", 1);
  134. } catch (BOSException var8) {
  135. throw new SHRWebException(var8.getMessage(), var8);
  136. } catch (EASBizException var9) {
  137. throw new ShrWebBizException(var9.getMessage(), var9);
  138. }
  139. try {
  140. this.udpSubmitTime(ctx, info.getId().toString());
  141. } catch (BOSException var7) {
  142. throw new SHRWebException(var7.getMessage(), var7);
  143. }
  144. }
  145. protected void reAssembleModel(Context ctx, BatchSubmitShemeBillInfo model) throws SHRWebException {
  146. String oql = "select *, entry.*,submitScheme.id,entry.submitElement.name,entry.person.name,entry.person.number where id = '%s'";
  147. try {
  148. BatchSubmitShemeBillInfo info = BatchSubmitShemeBillFactory.getLocalInstance(ctx).getBatchSubmitShemeBillInfo(String.format(oql, model.getId().toString()));
  149. model.clear();
  150. model.putAll(info);
  151. } catch (EASBizException e) {
  152. e.printStackTrace();
  153. } catch (BOSException e) {
  154. e.printStackTrace();
  155. }
  156. }
  157. protected void verifyIsBillEntryEmpty(Context ctx, BatchSubmitShemeBillInfo info) throws SHRWebException {
  158. if (info.getEntry() == null || info.getEntry().isEmpty()) {
  159. throw new ShrWebBizException(EASResource.getString(
  160. "com.kingdee.shr.compensation.resource.SubmitShemeBillResource", "label19", ctx.getLocale()));
  161. }
  162. }
  163. protected ISubmitBillVerifyInterface getVerifyInstance(Context ctx, BatchSubmitShemeBillInfo info)
  164. throws SHRWebException {
  165. if (null == info) {
  166. throw new ShrWebBizException("model can not be null.");
  167. } else {
  168. try {
  169. CalSubmitSchemeInfo calSubmitSchemeInfo = CalSubmitSchemeFactory.getLocalInstance(ctx)
  170. .getCalSubmitSchemeInfo(new ObjectUuidPK(info.getSubmitScheme().getId().toString()));
  171. ISubmitBillVerifyInterface instance = this
  172. .createVerifyInstance(calSubmitSchemeInfo.isIsEnableSubmitElement());
  173. if (calSubmitSchemeInfo.isIscycle()) {
  174. instance = new CycleVerify((ISubmitBillVerifyInterface) instance);
  175. }
  176. return (ISubmitBillVerifyInterface) instance;
  177. } catch (EASBizException var5) {
  178. throw new ShrWebBizException(var5.getMessage(), var5);
  179. } catch (BOSException var6) {
  180. throw new SHRWebException(var6.getMessage(), var6);
  181. }
  182. }
  183. }
  184. protected ISubmitBillVerifyInterface createVerifyInstance(boolean isEnableSubmitElement) {
  185. return (ISubmitBillVerifyInterface) (isEnableSubmitElement
  186. ? new SubmitBillEnableElementVerify()
  187. : new SubmitBillDisableElementVerify());
  188. }
  189. protected Map<String, Object> getVerifyParams() {
  190. return Maps.newHashMap();
  191. }
  192. // protected void udpSubmitTime(Context ctx, String billId) throws BOSException {
  193. // String sql = "update T_HR_SBatchSubmitShemeBill set FSubmitTime = ? where FID = ?";
  194. // Object[] param = new Object[]{new Date((new Date()).getTime()), billId};
  195. // DbUtil.execute(ctx, sql, param);
  196. // }
  197. protected void udpSubmitTime(Context ctx, String billId) throws BOSException {
  198. String sql = "update T_HR_SBatchSubmitShemeBill set FSubmitTime = ? where FID = ?";
  199. // 使用java.sql.Timestamp替代java.util.Date
  200. Object[] param = new Object[]{new java.sql.Timestamp(System.currentTimeMillis()), billId};
  201. DbUtil.execute(ctx, sql, param);
  202. }
  203. }