From 29bb4817c304156d1d38c2fa4293e0e7225e5a67 Mon Sep 17 00:00:00 2001 From: XaoLi717 <144221124+XaoLi717@users.noreply.github.com> Date: Wed, 18 Dec 2024 11:31:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=A1=E6=89=B9=E8=BF=87=E8=AF=B7=E5=81=87?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/home/service/qjgl/QjglService.java | 14 ++++ .../home/service/qjgl/QjglServiceImpl.java | 68 +++++++++++++++++++ .../qjgl/listener/ProcessEndListener.java | 33 +++++++-- 3 files changed, 110 insertions(+), 5 deletions(-) diff --git a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/qjgl/QjglService.java b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/qjgl/QjglService.java index d0df2ef..80f5b29 100644 --- a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/qjgl/QjglService.java +++ b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/qjgl/QjglService.java @@ -53,4 +53,18 @@ public interface QjglService { PageResult getQjglPage(QjglPageReqVO pageReqVO); PageResult getQjglPage(Long userid,QjglPageReqVO pageReqVO); + /** + * 改变请假管理数据状态 + * @param id + */ + Boolean dataStatus(Long id); + + /** + * 请假管理监听器判断 + * @param id + * @param processId + * @return + */ + Boolean QjglHistoryService(Long id, String processId); + } diff --git a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/qjgl/QjglServiceImpl.java b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/qjgl/QjglServiceImpl.java index 40b9eb0..e1222ba 100644 --- a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/qjgl/QjglServiceImpl.java +++ b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/qjgl/QjglServiceImpl.java @@ -5,8 +5,12 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.bpm.dal.dataobject.processinstancetodo.ProcessInstanceTodoDO; import cn.iocoder.yudao.module.bpm.dal.mysql.processinstancetodo.ProcessInstanceTodoMapper; import cn.iocoder.yudao.module.bpm.service.processinstancetodo.ProcessInstanceTodoService; +import cn.iocoder.yudao.module.home.controller.admin.njgl.vo.NjglPageReqVO; +import cn.iocoder.yudao.module.home.controller.admin.njgl.vo.NjglRespVO; import cn.iocoder.yudao.module.home.controller.admin.qjgl.vo.*; +import cn.iocoder.yudao.module.home.dal.dataobject.njgl.NjglDO; import cn.iocoder.yudao.module.home.dal.dataobject.qjgl.QjglDO; +import cn.iocoder.yudao.module.home.dal.mysql.njgl.NjglMapper; import cn.iocoder.yudao.module.home.dal.mysql.qjgl.QjglMapper; import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; @@ -15,6 +19,7 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.HashMap; import java.util.Map; @@ -41,6 +46,9 @@ public class QjglServiceImpl implements QjglService { @Resource private ProcessInstanceTodoService processInstanceTodoService; + + @Resource + private NjglMapper njglMapper; @Override public Long createQjgl(Long userId,QjglSaveReqVO createReqVO) { PROCESS_KEY = createReqVO.getProcessDefinitionKey(); @@ -136,4 +144,64 @@ public class QjglServiceImpl implements QjglService { return qjglMapper.selectPage(userId,pageReqVO); } + @Override + public Boolean dataStatus(Long id) { + + QjglDO qjgl = qjglMapper.selectById(id); + + NjglPageReqVO njglPageReqVO = buildNjglReqVo(qjgl); + NjglDO njglDO = getNjglPage(njglPageReqVO); + if (njglDO == null) { + return false; + } + + NjglRespVO njglRespVO = BeanUtils.toBean(njglDO, NjglRespVO.class); + upDataRespVo(njglRespVO,qjgl); + //这里在是不用判断是不是剩余天数不够 而是在前端实现 +// if ((njglRespVO.getUsedDays().compareTo(BigDecimal.valueOf(10)) > 0)&&(njglRespVO.getRemainingDays().compareTo(BigDecimal.ZERO) < 0)) { +// return false; +// } + // 更新 + NjglDO updateObj = BeanUtils.toBean(njglRespVO, NjglDO.class); + njglMapper.updateById(updateObj); + return true; + + } + + private NjglPageReqVO buildNjglReqVo(QjglDO qjgl) { + NjglPageReqVO njglPageReqVO = new NjglPageReqVO(); + njglPageReqVO.setUserId(qjgl.getUserId()); + njglPageReqVO.setUserName(qjgl.getUserName()); + njglPageReqVO.setDeptId(qjgl.getDeptId()); + njglPageReqVO.setDeptName(qjgl.getDeptName()); + njglPageReqVO.setYear(String.valueOf(qjgl.getStartTime().getYear())); + return njglPageReqVO; + } + + private NjglDO getNjglPage(NjglPageReqVO njglPageReqVO) { + PageResult pageResult = njglMapper.selectPage(njglPageReqVO); + if (pageResult.getList().isEmpty()) { + return null; + } + return pageResult.getList().get(0); + } + + private void upDataRespVo(NjglRespVO njglRespVO, QjglDO qjgl) { + njglRespVO.setStatus(1); + njglRespVO.setRemainingDays(njglRespVO.getRemainingDays().subtract(qjgl.getDay())); + njglRespVO.setUsedDays(njglRespVO.getUsedDays().add(qjgl.getDay())); + } + + @Override + public Boolean QjglHistoryService(Long id, String processId) { + QjglDO qjglDO = qjglMapper.selectById(id); + if (qjglDO == null) { + return false; + } + if (!qjglDO.getProcessInstanceId().equals(processId)) { + return false; + } + return true; + } + } diff --git a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/qjgl/listener/ProcessEndListener.java b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/qjgl/listener/ProcessEndListener.java index 52b98e4..8f14fa6 100644 --- a/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/qjgl/listener/ProcessEndListener.java +++ b/yudao-module-home/yudao-module-home-biz/src/main/java/cn/iocoder/yudao/module/home/service/qjgl/listener/ProcessEndListener.java @@ -1,15 +1,38 @@ package cn.iocoder.yudao.module.home.service.qjgl.listener; +import cn.iocoder.yudao.module.home.application.ApplicationContextHandler; +import cn.iocoder.yudao.module.home.service.qjgl.QjglService; import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.delegate.ExecutionListener; +import org.springframework.stereotype.Component; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.home.enums.ErrorCodeConstants.NJGL_DATA_STATUS; + +@Component public class ProcessEndListener implements ExecutionListener { + @Override public void notify(DelegateExecution execution) { - System.out.println("task name:"+execution.getEventName() ); -// if (execution.getEventName().equals("end")) { -// // 流程结束时触发 -// System.out.println("Process instance " + execution.getProcessInstanceId() + " has ended."); -// } + if (execution.getEventName().equals("end")) { + + String key = execution.getProcessInstanceBusinessKey(); + Long QjId = Long.parseLong(key); + String processId = execution.getProcessInstanceId(); + + QjglService qjglService = ApplicationContextHandler.getBean(QjglService.class); + + if (!qjglService.QjglHistoryService(QjId,processId)) { + return; + } + Boolean err = qjglService.dataStatus(QjId); + if (!err) { + throw exception(NJGL_DATA_STATUS); + } + } } +// System.out.println("task name11:"+execution.getEventName()); +// System.out.println("kdy11: " + QjId); +// System.out.println("processId: " + processId); +// System.out.println("delegateExecution2211: " + execution); }