Ver código fonte

删除无用类

caixiaofeng 6 meses atrás
pai
commit
13a2731f4b

+ 82 - 0
flow-common/flow-common-flowable-starter/src/main/java/com/flow/flowable/calendar/CustomBusinessCalendar.java

@@ -0,0 +1,82 @@
+package com.flow.flowable.calendar;
+
+import org.flowable.common.engine.api.FlowableException;
+import org.flowable.common.engine.impl.calendar.BusinessCalendarImpl;
+import org.flowable.common.engine.impl.runtime.ClockReader;
+import org.joda.time.DateTime;
+import org.joda.time.Duration;
+import org.joda.time.LocalDateTime;
+import org.joda.time.Period;
+
+import java.util.Date;
+
+public class CustomBusinessCalendar extends BusinessCalendarImpl {
+    public CustomBusinessCalendar(ClockReader clockReader) {
+        super(clockReader);
+    }
+
+    @Override
+    public Date resolveDuedate(String duedate, int maxIterations) {
+        try {
+            if (duedate.startsWith("P")) {
+                LocalDateTime currentTime = LocalDateTime.now();
+                LocalDateTime startTime = null;
+                LocalDateTime endTime = null;
+                if (currentTime.getDayOfWeek() == 6) {
+                    startTime = getLocalDateTime(currentTime.plusDays(2), 9, 0);
+                    endTime = getLocalDateTime(currentTime.plusDays(2), 17, 30);
+                } else if (currentTime.getDayOfWeek() == 7) {
+                    startTime = getLocalDateTime(currentTime.plusDays(1), 9, 0);
+                    endTime = getLocalDateTime(currentTime.plusDays(1), 17, 30);
+                } else {
+                    startTime = getLocalDateTime(currentTime, 9, 0);
+                    endTime = getLocalDateTime(currentTime, 17, 30);
+                }
+                // 有效开始时间
+                LocalDateTime effectiveStartTime = null;
+                if (currentTime.toDate().before(startTime.toDate())) {
+                    effectiveStartTime = startTime;
+                } else if (currentTime.toDate().after(startTime.toDate()) && currentTime.toDate().before(endTime.toDate())) {
+                    effectiveStartTime = currentTime;
+                } else if (currentTime.toDate().after(endTime.toDate())) {
+                    effectiveStartTime = startTime.plusDays(1);
+                    while (effectiveStartTime.getDayOfWeek() == 6 || effectiveStartTime.getDayOfWeek() == 7) {
+                        effectiveStartTime = effectiveStartTime.plusDays(1);
+                    }
+                }
+                Duration totalDuration = new Duration(
+                        effectiveStartTime.toDateTime(),
+                        (getLocalDateTime(effectiveStartTime, 17, 30)).toDateTime()
+                );
+                Duration dudateDuration = Period.parse(duedate).toStandardDuration();
+                if (totalDuration.isLongerThan(dudateDuration)) {
+                    return effectiveStartTime.plus(Period.parse(duedate)).toDate();
+                } else {
+                    LocalDateTime nextDay = effectiveStartTime;
+                    while (true) {
+                        nextDay = nextDay.plusDays(1);
+                        if (nextDay.getDayOfWeek() == 6 || nextDay.getDayOfWeek() == 7) {
+                            continue;
+                        }
+                        Duration nextDayDuration = new Duration(
+                                getLocalDateTime(nextDay, 9, 0).toDateTime(),
+                                (getLocalDateTime(nextDay, 17, 30)).toDateTime()
+                        );
+                        if (totalDuration.plus(nextDayDuration).isShorterThan(dudateDuration)) {
+                            totalDuration = totalDuration.plus(nextDayDuration);
+                        } else {
+                            return getLocalDateTime(nextDay, 9, 0).plus(dudateDuration.minus(totalDuration)).toDate();
+                        }
+                    }
+                }
+            }
+            return DateTime.parse(duedate).toDate();
+        } catch (Exception e) {
+            throw new FlowableException("couldn't resolve duedate: " + e.getMessage(), e);
+        }
+    }
+
+    private LocalDateTime getLocalDateTime(LocalDateTime dateTime, int hourOfDay, int minuteOfHour) {
+        return new LocalDateTime(dateTime.getYear(), dateTime.getMonthOfYear(), dateTime.getDayOfMonth(), hourOfDay, minuteOfHour, 0);
+    }
+}

+ 3 - 3
flow-workflow/flow-workflow-api/src/main/java/com/flow/service/FlowActivityService.java

@@ -1,12 +1,12 @@
 package com.flow.service;
 
-import com.flow.entity.Activity;
+import com.flow.entity.FlowActivity;
 
 import java.util.List;
 
 public interface FlowActivityService {
 
-    List<Activity> records(String instanceId);
+    List<FlowActivity> records(String instanceId);
 
-    List<Activity> historyRecords(String instanceId);
+    List<FlowActivity> historyRecords(String instanceId);
 }

+ 37 - 37
flow-workflow/flow-workflow-biz/src/main/java/com/flow/service/impl/FlowActivityServiceImpl.java

@@ -1,7 +1,7 @@
 package com.flow.service.impl;
 
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.flow.entity.Activity;
+import com.flow.entity.FlowActivity;
 import com.flow.entity.FlowDefine;
 import com.flow.entity.FlowTask;
 import com.flow.entity.node.ApprovalNode;
@@ -36,7 +36,7 @@ public class FlowActivityServiceImpl implements FlowActivityService {
     private HistoryService historyService;
 
     @Override
-    public List<Activity> records(String instanceId) {
+    public List<FlowActivity> records(String instanceId) {
         ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(instanceId).singleResult();
         if (Objects.isNull(processInstance)) {
             return historyRecords(instanceId);
@@ -51,38 +51,38 @@ public class FlowActivityServiceImpl implements FlowActivityService {
                 .list();
         return list.stream()
                 .map(e -> {
-                    Activity activity = new Activity(e);
-                    activity.setMulti(ApprovalMultiEnum.SEQUENTIAL);
-                    if ("userTask".equals(activity.getActivityType())) {
+                    FlowActivity flowActivity = new FlowActivity(e);
+                    flowActivity.setMulti(ApprovalMultiEnum.SEQUENTIAL);
+                    if ("userTask".equals(flowActivity.getActivityType())) {
                         Optional<FlowTask> optional = flowTasks.stream().filter(t -> t.getId().equals(e.getTaskId())).findFirst();
-                        optional.ifPresent(flowTask -> activity.setStatus(flowTask.getStatus()));
-                        String assignee = activity.getAssignee();
+                        optional.ifPresent(flowTask -> flowActivity.setStatus(flowTask.getStatus()));
+                        String assignee = flowActivity.getAssignee();
                         if (Objects.isNull(assignee)) {
-                            activity.setAssignee(processInstance.getStartUserId());
+                            flowActivity.setAssignee(processInstance.getStartUserId());
                         }
                         ApprovalNode approvalNode = flowDefine.findFlowNodeOfType(ApprovalNode.class, e.getActivityId());
                         if (Objects.nonNull(approvalNode)) {
                             ApprovalMultiEnum multi = approvalNode.getMulti();
-                            activity.setMulti(multi);
+                            flowActivity.setMulti(multi);
                         }
-                    } else if ("copyServiceTask".equals(activity.getActivityType())) {
-                        activity.setMulti(ApprovalMultiEnum.JOINT);
-                    } else if ("startEvent".equals(activity.getActivityType())) {
-                        activity.setAssignee(processInstance.getStartUserId());
-                    } else if ("jumpServiceTask".equals(activity.getActivityType())) {
-                        activity.setAssignee("admin");
-                        if (StringUtils.isBlank(activity.getDeleteReason())) {
-                            activity.setDeleteReason("<span>跳转失败 <span class='color-error'>不满足跳转条件</span></span>");
+                    } else if ("copyServiceTask".equals(flowActivity.getActivityType())) {
+                        flowActivity.setMulti(ApprovalMultiEnum.JOINT);
+                    } else if ("startEvent".equals(flowActivity.getActivityType())) {
+                        flowActivity.setAssignee(processInstance.getStartUserId());
+                    } else if ("jumpServiceTask".equals(flowActivity.getActivityType())) {
+                        flowActivity.setAssignee("admin");
+                        if (StringUtils.isBlank(flowActivity.getDeleteReason())) {
+                            flowActivity.setDeleteReason("<span>跳转失败 <span class='color-error'>不满足跳转条件</span></span>");
                         }
                     }
-                    return activity;
+                    return flowActivity;
                 })
-                .sorted(Comparator.comparing(Activity::getId))
+                .sorted(Comparator.comparing(FlowActivity::getId))
                 .collect(Collectors.toList());
     }
 
     @Override
-    public List<Activity> historyRecords(String instanceId) {
+    public List<FlowActivity> historyRecords(String instanceId) {
         HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
                 .processInstanceId(instanceId)
                 .singleResult();
@@ -96,33 +96,33 @@ public class FlowActivityServiceImpl implements FlowActivityService {
                 .list();
         return list.stream()
                 .map(e -> {
-                    Activity activity = new Activity(e);
-                    activity.setMulti(ApprovalMultiEnum.SEQUENTIAL);
-                    if ("userTask".equals(activity.getActivityType())) {
+                    FlowActivity flowActivity = new FlowActivity(e);
+                    flowActivity.setMulti(ApprovalMultiEnum.SEQUENTIAL);
+                    if ("userTask".equals(flowActivity.getActivityType())) {
                         Optional<FlowTask> optional = flowTasks.stream().filter(t -> t.getId().equals(e.getTaskId())).findFirst();
-                        optional.ifPresent(flowTask -> activity.setStatus(flowTask.getStatus()));
-                        String assignee = activity.getAssignee();
+                        optional.ifPresent(flowTask -> flowActivity.setStatus(flowTask.getStatus()));
+                        String assignee = flowActivity.getAssignee();
                         if (Objects.isNull(assignee)) {
-                            activity.setAssignee(historicProcessInstance.getStartUserId());
+                            flowActivity.setAssignee(historicProcessInstance.getStartUserId());
                         }
                         ApprovalNode approvalNode = flowDefine.findFlowNodeOfType(ApprovalNode.class, e.getActivityId());
                         if (Objects.nonNull(approvalNode)) {
                             ApprovalMultiEnum multi = approvalNode.getMulti();
-                            activity.setMulti(multi);
+                            flowActivity.setMulti(multi);
                         }
-                    } else if ("copyServiceTask".equals(activity.getActivityType())) {
-                        activity.setMulti(ApprovalMultiEnum.JOINT);
-                    } else if ("startEvent".equals(activity.getActivityType())) {
-                        activity.setAssignee(historicProcessInstance.getStartUserId());
-                    } else if ("jumpServiceTask".equals(activity.getActivityType())) {
-                        activity.setAssignee("admin");
-                        if (StringUtils.isBlank(activity.getDeleteReason())) {
-                            activity.setDeleteReason("<span>跳转失败 <span class='color-error'>不满足跳转条件</span></span>");
+                    } else if ("copyServiceTask".equals(flowActivity.getActivityType())) {
+                        flowActivity.setMulti(ApprovalMultiEnum.JOINT);
+                    } else if ("startEvent".equals(flowActivity.getActivityType())) {
+                        flowActivity.setAssignee(historicProcessInstance.getStartUserId());
+                    } else if ("jumpServiceTask".equals(flowActivity.getActivityType())) {
+                        flowActivity.setAssignee("admin");
+                        if (StringUtils.isBlank(flowActivity.getDeleteReason())) {
+                            flowActivity.setDeleteReason("<span>跳转失败 <span class='color-error'>不满足跳转条件</span></span>");
                         }
                     }
-                    return activity;
+                    return flowActivity;
                 })
-                .sorted(Comparator.comparing(Activity::getId))
+                .sorted(Comparator.comparing(FlowActivity::getId))
                 .collect(Collectors.toList());
     }
 }

+ 2 - 2
flow-workflow/flow-workflow-controller/src/main/java/com/flow/controller/FlowActivityController.java

@@ -1,7 +1,7 @@
 package com.flow.controller;
 
 import com.flow.common.core.model.Result;
-import com.flow.entity.Activity;
+import com.flow.entity.FlowActivity;
 import com.flow.service.FlowActivityService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -18,7 +18,7 @@ public class FlowActivityController {
     private FlowActivityService flowActivityService;
 
     @GetMapping("/records/{instanceId}")
-    public Result<List<Activity>> records(@PathVariable String instanceId) {
+    public Result<List<FlowActivity>> records(@PathVariable String instanceId) {
         return Result.success(flowActivityService.records(instanceId));
     }
 

+ 0 - 72
flow-workflow/flow-workflow-entity/src/main/java/com/flow/entity/Activity.java

@@ -1,72 +0,0 @@
-package com.flow.entity;
-
-import com.flow.enums.ApprovalMultiEnum;
-import com.flow.enums.ProcessStatus;
-import lombok.Data;
-import org.flowable.engine.history.HistoricActivityInstance;
-import org.flowable.engine.runtime.ActivityInstance;
-
-import java.util.Date;
-import java.util.Objects;
-
-@Data
-public class Activity {
-    private String id;
-    private String defineId;
-    private ApprovalMultiEnum multi;
-    private String taskId;
-    private String instanceId;
-    private String executionId;
-    private String activityId;
-    private String activityName;
-    private String activityType;
-    private String assignee;
-    private Date startTime;
-    private Date endTime;
-    private Long duration;
-    private String deleteReason;
-    private ProcessStatus status;
-
-    public Activity(ActivityInstance activityInstance) {
-        this.id = activityInstance.getId();
-        this.activityId = activityInstance.getActivityId();
-        this.activityName = activityInstance.getActivityName();
-        this.activityType = activityInstance.getActivityType();
-        this.assignee = activityInstance.getAssignee();
-        this.startTime = activityInstance.getStartTime();
-        this.endTime = activityInstance.getEndTime();
-        this.duration = activityInstance.getDurationInMillis();
-        this.executionId = activityInstance.getExecutionId();
-        this.instanceId = activityInstance.getProcessInstanceId();
-        this.taskId = activityInstance.getTaskId();
-        this.defineId = activityInstance.getProcessDefinitionId();
-        this.deleteReason = activityInstance.getDeleteReason();
-        if (Objects.isNull(this.endTime)) {
-            this.status = ProcessStatus.RUNNING;
-        } else {
-            this.status = ProcessStatus.COMPLETED;
-        }
-    }
-
-    public Activity(HistoricActivityInstance historicActivityInstance) {
-        this.id = historicActivityInstance.getId();
-        this.activityId = historicActivityInstance.getActivityId();
-        this.assignee = historicActivityInstance.getAssignee();
-        this.duration = historicActivityInstance.getDurationInMillis();
-        this.startTime = historicActivityInstance.getStartTime();
-        this.endTime = historicActivityInstance.getEndTime();
-        this.defineId = historicActivityInstance.getProcessDefinitionId();
-        this.instanceId = historicActivityInstance.getProcessInstanceId();
-        this.executionId = historicActivityInstance.getExecutionId();
-        this.taskId = historicActivityInstance.getTaskId();
-        this.activityName = historicActivityInstance.getActivityName();
-        this.activityType = historicActivityInstance.getActivityType();
-        this.deleteReason = historicActivityInstance.getDeleteReason();
-        if (Objects.isNull(this.endTime)) {
-            this.status = ProcessStatus.RUNNING;
-        } else {
-            this.status = ProcessStatus.COMPLETED;
-        }
-    }
-
-}

+ 59 - 38
flow-workflow/flow-workflow-entity/src/main/java/com/flow/entity/FlowActivity.java

@@ -1,51 +1,72 @@
 package com.flow.entity;
 
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
-import com.fasterxml.jackson.annotation.JsonInclude;
+import com.flow.enums.ApprovalMultiEnum;
 import com.flow.enums.ProcessStatus;
-import com.flow.model.FlowComment;
-import lombok.AllArgsConstructor;
 import lombok.Data;
-import lombok.NoArgsConstructor;
+import org.flowable.engine.history.HistoricActivityInstance;
+import org.flowable.engine.runtime.ActivityInstance;
 
-import java.time.LocalDateTime;
-import java.util.List;
+import java.util.Date;
+import java.util.Objects;
 
 @Data
-@AllArgsConstructor
-@NoArgsConstructor
 public class FlowActivity {
-    // id
     private String id;
-    // 节点id
-    private String nodeId;
-    // 多实例类型
-    private String multiType;
-    // 节点类型
-    private String nodeType;
-    // 节点名称
-    private String nodeName;
-    // 开始时间
-    private LocalDateTime startTime;
-    // 结束时间
-    private LocalDateTime endTime;
-    // 流程实例id
-    private String instanceId;
-    // 流程定义id
     private String defineId;
-    // 父节点id
-    private String parentId;
-    // 执行id
-    private String executionId;
-    // 任务id
+    private ApprovalMultiEnum multi;
     private String taskId;
-    // 处理用户
-    private String userId;
-    // 状态
+    private String instanceId;
+    private String executionId;
+    private String activityId;
+    private String activityName;
+    private String activityType;
+    private String assignee;
+    private Date startTime;
+    private Date endTime;
+    private Long duration;
+    private String deleteReason;
     private ProcessStatus status;
-    // 评论
-    @JsonInclude(JsonInclude.Include.NON_EMPTY)
-    @TableField(typeHandler = JacksonTypeHandler.class)
-    private List<FlowComment> flowComment;
+
+    public FlowActivity(ActivityInstance activityInstance) {
+        this.id = activityInstance.getId();
+        this.activityId = activityInstance.getActivityId();
+        this.activityName = activityInstance.getActivityName();
+        this.activityType = activityInstance.getActivityType();
+        this.assignee = activityInstance.getAssignee();
+        this.startTime = activityInstance.getStartTime();
+        this.endTime = activityInstance.getEndTime();
+        this.duration = activityInstance.getDurationInMillis();
+        this.executionId = activityInstance.getExecutionId();
+        this.instanceId = activityInstance.getProcessInstanceId();
+        this.taskId = activityInstance.getTaskId();
+        this.defineId = activityInstance.getProcessDefinitionId();
+        this.deleteReason = activityInstance.getDeleteReason();
+        if (Objects.isNull(this.endTime)) {
+            this.status = ProcessStatus.RUNNING;
+        } else {
+            this.status = ProcessStatus.COMPLETED;
+        }
+    }
+
+    public FlowActivity(HistoricActivityInstance historicActivityInstance) {
+        this.id = historicActivityInstance.getId();
+        this.activityId = historicActivityInstance.getActivityId();
+        this.assignee = historicActivityInstance.getAssignee();
+        this.duration = historicActivityInstance.getDurationInMillis();
+        this.startTime = historicActivityInstance.getStartTime();
+        this.endTime = historicActivityInstance.getEndTime();
+        this.defineId = historicActivityInstance.getProcessDefinitionId();
+        this.instanceId = historicActivityInstance.getProcessInstanceId();
+        this.executionId = historicActivityInstance.getExecutionId();
+        this.taskId = historicActivityInstance.getTaskId();
+        this.activityName = historicActivityInstance.getActivityName();
+        this.activityType = historicActivityInstance.getActivityType();
+        this.deleteReason = historicActivityInstance.getDeleteReason();
+        if (Objects.isNull(this.endTime)) {
+            this.status = ProcessStatus.RUNNING;
+        } else {
+            this.status = ProcessStatus.COMPLETED;
+        }
+    }
+
 }

+ 0 - 30
flow-workflow/flow-workflow-entity/src/main/java/com/flow/entity/ProcessDefinitionCache.java

@@ -1,30 +0,0 @@
-package com.flow.entity;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.flowable.bpmn.model.BpmnModel;
-import org.flowable.engine.impl.persistence.deploy.ProcessDefinitionCacheEntry;
-import org.flowable.engine.repository.ProcessDefinition;
-
-import java.io.Serializable;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-public class ProcessDefinitionCache implements Serializable {
-    private static final long serialVersionUID = 6833801933658529170L;
-    @JsonIgnoreProperties(ignoreUnknown = true)
-    private ProcessDefinition processDefinition;
-    private BpmnModel bpmnModel;
-
-    public ProcessDefinitionCache(ProcessDefinitionCacheEntry processDefinitionCacheEntry) {
-        this.processDefinition = processDefinitionCacheEntry.getProcessDefinition();
-        this.bpmnModel = processDefinitionCacheEntry.getBpmnModel();
-    }
-
-    public ProcessDefinitionCacheEntry toProcessDefinitionCacheEntry() {
-        return new ProcessDefinitionCacheEntry(processDefinition, bpmnModel, bpmnModel.getMainProcess());
-    }
-}