FlowTime.java 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package jnpf.flowable.job;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import jnpf.base.UserInfo;
  4. import jnpf.config.ConfigValueUtil;
  5. import jnpf.database.util.TenantDataSourceUtil;
  6. import jnpf.flowable.model.task.FlowModel;
  7. import jnpf.flowable.model.templatenode.nodejson.NodeModel;
  8. import jnpf.flowable.model.templatenode.nodejson.TimeConfig;
  9. import jnpf.flowable.model.time.FlowTimeModel;
  10. import jnpf.flowable.util.OverTimeUtil;
  11. import jnpf.flowable.util.TimeUtil;
  12. import jnpf.util.JsonUtil;
  13. import jnpf.util.RedisUtil;
  14. import jnpf.util.UserProvider;
  15. import jnpf.util.context.SpringContext;
  16. import org.quartz.*;
  17. import org.springframework.scheduling.quartz.QuartzJobBean;
  18. @DisallowConcurrentExecution
  19. public class FlowTime extends QuartzJobBean {
  20. private static RedisUtil redisUtil;
  21. private static ConfigValueUtil configValueUtil;
  22. private static OverTimeUtil overTimeUtil;
  23. static {
  24. redisUtil = SpringContext.getBean(RedisUtil.class);
  25. configValueUtil = SpringContext.getBean(ConfigValueUtil.class);
  26. overTimeUtil = SpringContext.getBean(OverTimeUtil.class);
  27. }
  28. @Override
  29. protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
  30. JobDetail jobDetail = context.getJobDetail();
  31. String jobName = jobDetail.getKey().getName();
  32. JobDataMap jobDataMap = jobDetail.getJobDataMap();
  33. FlowTimeModel model = FlowJobUtil.getModel(JsonUtil.getJsonToBean(jobDataMap, FlowTimeModel.class), redisUtil);
  34. boolean isModel = model == null;
  35. FlowTimeModel timeModel = isModel ? JsonUtil.getJsonToBean(jobDataMap, FlowTimeModel.class) : model;
  36. if (timeModel != null) {
  37. FlowModel flowModel = timeModel.getFlowModel();
  38. UserInfo userInfo = flowModel.getUserInfo();
  39. if (configValueUtil.isMultiTenancy()) {
  40. TenantDataSourceUtil.switchTenant(userInfo.getTenantId());
  41. UserProvider.setLoginUser(userInfo);
  42. UserProvider.setLocalLoginUser(userInfo);
  43. }
  44. try {
  45. overTimeUtil.overMsg(timeModel);
  46. Boolean isPause = timeModel.getIsPause();
  47. timeModel.setIsPause(false);
  48. boolean overTime = timeModel.getOverTime();
  49. FlowJobUtil.insertModel(timeModel, redisUtil);
  50. if (overTime) {
  51. if (isPause) {
  52. return;
  53. }
  54. NodeModel nodeModel = timeModel.getChildNode();
  55. TimeConfig time = nodeModel.getOverTimeConfig();
  56. Integer num = time.getOverAutoApproveTime();
  57. Boolean overAutoApprove = timeModel.getChildNode().getOverTimeConfig().getOverAutoApprove();
  58. if (overAutoApprove && ObjectUtil.equals(timeModel.getNum(), num)) {
  59. // 放在另一个redis的key(用于自动审批)
  60. FlowJobUtil.insertOperator(timeModel, redisUtil);
  61. }
  62. Boolean overAutoTransfer = timeModel.getChildNode().getOverTimeConfig().getOverAutoTransfer();
  63. Integer transferNum = time.getOverAutoTransferTime();
  64. if (!overAutoApprove && overAutoTransfer && ObjectUtil.equals(timeModel.getTransferNum(), transferNum)) {
  65. FlowJobUtil.insertTransfer(timeModel, redisUtil);
  66. }
  67. } else {
  68. // 下一次时间大于结束时间 删除提醒缓存
  69. if (timeModel.getEndDate().getTime() < context.getNextFireTime().getTime()) {
  70. FlowJobUtil.removeModel(timeModel, redisUtil);
  71. TimeUtil.deleteJob(jobName);
  72. }
  73. }
  74. } catch (Exception e) {
  75. FlowJobUtil.removeModel(timeModel, redisUtil);
  76. TimeUtil.deleteJob(jobName);
  77. }
  78. } else {
  79. TimeUtil.deleteJob(jobName);
  80. FlowJobUtil.removeModel(model, redisUtil);
  81. }
  82. }
  83. }