From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master

---
 jnpf-flowable/jnpf-flowable-biz/src/main/java/jnpf/flowable/util/OverTimeUtil.java |  106 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 106 insertions(+), 0 deletions(-)

diff --git a/jnpf-flowable/jnpf-flowable-biz/src/main/java/jnpf/flowable/util/OverTimeUtil.java b/jnpf-flowable/jnpf-flowable-biz/src/main/java/jnpf/flowable/util/OverTimeUtil.java
new file mode 100644
index 0000000..674e1f8
--- /dev/null
+++ b/jnpf-flowable/jnpf-flowable-biz/src/main/java/jnpf/flowable/util/OverTimeUtil.java
@@ -0,0 +1,106 @@
+package jnpf.flowable.util;
+
+import cn.hutool.core.util.ObjectUtil;
+import jnpf.constant.MsgCode;
+import jnpf.exception.WorkFlowException;
+import jnpf.flowable.entity.OperatorEntity;
+import jnpf.flowable.entity.TaskEntity;
+import jnpf.flowable.entity.TemplateEntity;
+import jnpf.flowable.enums.OperatorStateEnum;
+import jnpf.flowable.enums.TemplateStatueEnum;
+import jnpf.flowable.mapper.OperatorMapper;
+import jnpf.flowable.mapper.TaskMapper;
+import jnpf.flowable.mapper.TemplateMapper;
+import jnpf.flowable.model.message.FlowMsgModel;
+import jnpf.flowable.model.time.FlowTimeModel;
+import jnpf.flowable.model.util.FlowNature;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author 锛欽NPF寮�鍙戝钩鍙扮粍
+ * @version: V3.1.0
+ * @copyright 寮曡繄淇℃伅鎶�鏈湁闄愬叕鍙�
+ * @date 锛�2024/5/23 涓婂崍10:33
+ */
+@Component
+@RequiredArgsConstructor
+public class OverTimeUtil {
+    
+    private final MsgUtil msgUtil;
+    
+    private final FlowUtil flowUtil;
+    
+    private final TaskMapper taskMapper;
+    
+    private final OperatorMapper operatorMapper;
+    
+    private final TemplateMapper templateMapper;
+
+    public void overMsg(FlowTimeModel flowTimeModel) throws WorkFlowException {
+        TaskEntity task = taskMapper.getInfo(flowTimeModel.getTaskId());
+        //鏆傚仠锛屾槸璺宠繃
+        if (task == null) {
+            throw new WorkFlowException(MsgCode.FA001.get());
+        }
+        boolean isSuccess = false;
+        try {
+            flowUtil.isSuspend(task);
+        } catch (Exception e) {
+            isSuccess = true;
+        }
+        if (!isSuccess) {
+            // 鍒ゆ柇鏄惁涓嬫灦
+            TemplateEntity template = templateMapper.selectById(task.getTemplateId());
+            if (null != template && !ObjectUtil.equals(template.getStatus(), TemplateStatueEnum.UP.getCode())) {
+                isSuccess = true;
+            }
+        }
+        if (isSuccess) {
+            if (Boolean.TRUE.equals(flowTimeModel.getOverTime())) {
+                flowTimeModel.setNum(flowTimeModel.getNum() + 1);
+                flowTimeModel.setTransferNum(flowTimeModel.getTransferNum() + 1);
+            }
+            flowTimeModel.setIsPause(true);
+            return;
+        }
+        flowUtil.isCancel(task);
+        OperatorEntity operator = operatorMapper.selectById(flowTimeModel.getOperatorId());
+        if (operator == null || ObjectUtil.equals(operator.getStatus(), OperatorStateEnum.FUTILITY.getCode())) {
+            throw new WorkFlowException(MsgCode.FA001.get());
+        }
+        if (operator.getHandleStatus() != null) {
+            throw new WorkFlowException(MsgCode.WF031.get());
+        }
+        // complete涓�1鐨勭粡鍔烇紝涓嶆墽琛岋紙鍔犵銆佹寚娲俱�佽浆鍔炪�侀┏鍥炪�佹挙鍥炪�佸彉鏇淬�佸娲绘祦绋嬶紝璇ヨ妭鐐圭殑闄愭椂鎻愰啋瑙勫垯閲嶆柊鐢熸晥锛�
+        if (operator.getCompletion().equals(FlowNature.ACTION)) {
+            throw new WorkFlowException(MsgCode.FA001.get());
+        }
+        if (Boolean.TRUE.equals(flowTimeModel.getOverTime()) && operator.getDuedate() == null) {
+                operator.setDuedate(new Date());
+                operatorMapper.updateById(operator);
+            }
+
+        List<OperatorEntity> list = new ArrayList<>();
+        list.add(operator);
+        FlowMsgModel msgModel = new FlowMsgModel();
+        msgModel.setUserInfo(flowTimeModel.getFlowModel().getUserInfo());
+        msgModel.setTaskEntity(task);
+        msgModel.setNodeList(flowTimeModel.getFlowModel().getNodeEntityList());
+        msgModel.setNodeCode(operator.getNodeCode());
+        msgModel.setOperatorList(list);
+        msgModel.setNotice(!flowTimeModel.getOverTime());
+        msgModel.setOvertime(flowTimeModel.getOverTime());
+        msgModel.setWait(false);
+        msgUtil.message(msgModel);
+        if (Boolean.TRUE.equals(flowTimeModel.getOverTime())) {
+            flowTimeModel.setNum(flowTimeModel.getNum() + 1);
+            flowTimeModel.setTransferNum(flowTimeModel.getTransferNum() + 1);
+        }
+    }
+
+}

--
Gitblit v1.8.0