AutoDailTask.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package fi.gl.task;
  2. import kd.bos.context.RequestContext;
  3. import kd.bos.dataentity.entity.DynamicObject;
  4. import kd.bos.entity.AppInfo;
  5. import kd.bos.entity.AppMetadataCache;
  6. import kd.bos.entity.param.AppParam;
  7. import kd.bos.exception.KDException;
  8. import kd.bos.orm.query.QCP;
  9. import kd.bos.orm.query.QFilter;
  10. import kd.bos.schedule.api.TaskInfo;
  11. import kd.bos.schedule.executor.AbstractTask;
  12. import kd.bos.servicehelper.BusinessDataServiceHelper;
  13. import kd.bos.servicehelper.operation.SaveServiceHelper;
  14. import kd.bos.servicehelper.parameter.SystemParamServiceHelper;
  15. import kd.bos.servicehelper.schedule.ScheduleServiceHelper;
  16. import kd.bos.servicehelper.user.UserServiceHelper;
  17. import java.text.ParseException;
  18. import java.text.SimpleDateFormat;
  19. import java.util.Date;
  20. import java.util.Map;
  21. /**
  22. * 自动日结调度任务插件
  23. * 2024-06-28 wangj
  24. * 主要功能:日结执行按钮逻辑
  25. */
  26. public class AutoDailTask extends AbstractTask {
  27. @Override
  28. public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
  29. TaskInfo taskInfo = ScheduleServiceHelper.queryTask(this.taskId);
  30. String scheduleId = taskInfo.getScheduleId();
  31. DynamicObject schedule = BusinessDataServiceHelper.loadSingleFromCache(scheduleId,"sch_schedule");
  32. DynamicObject schprincipal = schedule.getDynamicObject("schprincipal");
  33. Long userId = schprincipal.getLong("id");
  34. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  35. String now = sdf.format(new Date());
  36. Date nowDate = null;
  37. try {
  38. nowDate = sdf.parse(now);
  39. } catch (ParseException e) {
  40. throw new RuntimeException(e);
  41. }
  42. QFilter qFilter_enable = new QFilter("enable", QCP.equals,"1");
  43. QFilter qFilter_status = new QFilter("status", QCP.equals, "C");
  44. QFilter qFilter_fisaccounting = new QFilter("fisaccounting", QCP.equals, "1");
  45. QFilter qFilter_number = new QFilter("number", QCP.equals, "A002");
  46. DynamicObject[] orgCol = BusinessDataServiceHelper.load("bos_org","id",
  47. new QFilter[]{qFilter_enable,qFilter_status,qFilter_fisaccounting,qFilter_number});
  48. for(DynamicObject orgObj : orgCol){
  49. //根据应用编码从缓存中获取应用信息
  50. AppInfo cgfwAppInfo = AppMetadataCache.getAppInfo("gl");
  51. //获取应用的主键
  52. String appId = cgfwAppInfo.getId();
  53. AppParam apm = new AppParam();
  54. apm.setAppId(appId);
  55. apm.setOrgId(orgObj.getLong("id"));
  56. Map<String,Object> paramWhole = SystemParamServiceHelper.loadAppParameterFromCache(apm);
  57. Object nckd_isautodaily = paramWhole.get("nckd_isautodaily");
  58. if("true".equals(nckd_isautodaily.toString())){
  59. dailyData(orgObj,nowDate,userId);
  60. }
  61. }
  62. }
  63. private void dailyData(DynamicObject org, Date dailydate, Long userId) {
  64. //创建日志对象
  65. DynamicObject dailybillLogObj = BusinessDataServiceHelper.newDynamicObject("nckd_gl_autodaillog");
  66. String messageInfo = "";
  67. QFilter qFilter_org = new QFilter("org", QCP.equals,org.getPkValue());
  68. QFilter qFilter_bizdate = new QFilter("bizdate",QCP.equals,dailydate);
  69. DynamicObject[] voucherCol = BusinessDataServiceHelper.load("gl_voucher","id,ispost,billno,bizdate,org,billstatus",
  70. new QFilter[]{qFilter_org,qFilter_bizdate});
  71. for(DynamicObject voucherObj : voucherCol){
  72. boolean ispost = voucherObj.getBoolean("ispost");
  73. if(ispost!=true){//是否过账等于否
  74. messageInfo = "所选日期存在未过账凭证";
  75. break;
  76. }
  77. }
  78. if("".equals(messageInfo)){
  79. QFilter qFilter_nckd_org = new QFilter("nckd_org", QCP.equals,org.getPkValue());
  80. QFilter qFilter_nckd_dailydate = new QFilter("nckd_dailydate",QCP.equals,dailydate);
  81. DynamicObject[] dailybillCol = BusinessDataServiceHelper.load("nckd_gl_dailybill","id",
  82. new QFilter[]{qFilter_nckd_org,qFilter_nckd_dailydate});
  83. if(dailybillCol!=null && dailybillCol.length>0){
  84. messageInfo = "所选日期已日结";
  85. }
  86. }
  87. if("".equals(messageInfo)){
  88. //写入日结记录
  89. messageInfo = writeDailybill(org,dailydate,userId);
  90. }
  91. //写入日志
  92. dailybillLogObj.set("nckd_orgfield",org.getPkValue());
  93. dailybillLogObj.set("nckd_dailydate",dailydate);
  94. dailybillLogObj.set("enable","1");
  95. dailybillLogObj.set("status","C");
  96. if("".equals(messageInfo)){
  97. dailybillLogObj.set("nckd_dailstatus","0");
  98. }else{
  99. dailybillLogObj.set("nckd_dailstatus","1");
  100. dailybillLogObj.set("nckd_errorinfo",messageInfo);
  101. }
  102. DynamicObject[] logDatalist = new DynamicObject[]{dailybillLogObj};
  103. SaveServiceHelper.save(logDatalist);
  104. }
  105. private String writeDailybill(DynamicObject orgObjReal, Date dailydate, Long userId) {
  106. String messageInfo = "";
  107. try {
  108. DynamicObject dailybillObj = BusinessDataServiceHelper.newDynamicObject("nckd_gl_dailybill");
  109. dailybillObj.set("nckd_org", orgObjReal);
  110. dailybillObj.set("nckd_dailydate", dailydate);
  111. dailybillObj.set("status", "A");
  112. dailybillObj.set("enable", "1");
  113. dailybillObj.set("creator", userId);
  114. DynamicObject[] datalist = new DynamicObject[]{dailybillObj};
  115. SaveServiceHelper.save(datalist);
  116. }catch(Exception e){
  117. messageInfo = e.getMessage();
  118. }
  119. return messageInfo;
  120. }
  121. }