浏览代码

我的代办

车车 3 月之前
父节点
当前提交
df45bf7443

+ 7 - 4
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/jobticket/JobTicketController.java

@@ -2,10 +2,7 @@ package cn.iocoder.yudao.module.iscs.controller.admin.jobticket;
 
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.JobTicketPageReqVO;
-import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.JobTicketRespVO;
-import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.JobTicketSaveReqVO;
-import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.MonitorTicketPageVO;
+import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.*;
 import cn.iocoder.yudao.module.iscs.service.jobticket.JobTicketService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
@@ -98,4 +95,10 @@ public class JobTicketController {
         return success(jobTicketService.getNotStartJobBySopId(sopId));
     }
 
+    @GetMapping("/getMyAgent")
+    @Operation(summary = "获取我的代办")
+    public CommonResult<MyAgentRespVO> getMyAgent(String startTime, String endTime) {
+        return success(jobTicketService.getMyAgent(startTime, endTime));
+    }
+
 }

+ 23 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/jobticket/vo/MyAgentRespVO.java

@@ -0,0 +1,23 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Schema(description = "我的代办返回值")
+@Data
+@ExcelIgnoreUnannotated
+public class MyAgentRespVO {
+
+    @Schema(description = "等待中")
+    private List<MyAgentVO> waitAgent;
+
+    @Schema(description = "处理中")
+    private List<MyAgentVO> handleAgent;
+
+    @Schema(description = "已处理")
+    private List<MyAgentVO> finishAgent;
+
+}

+ 60 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/controller/admin/jobticket/vo/MyAgentVO.java

@@ -0,0 +1,60 @@
+package cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "我的代办数据结构")
+@Data
+@ExcelIgnoreUnannotated
+public class MyAgentVO {
+
+    @Schema(description = "作业票ID")
+    private Long ticketId;
+
+    @Schema(description = "作业名称")
+    private String ticketName;
+
+    @Schema(description = "作业票状态")
+    private String ticketStatus;
+
+    @Schema(description = "当前步骤 ID,对应 is_job_ticket_step.step_id")
+    private Long stepId;
+
+    @Schema(description = "步骤索引")
+    private Integer stepIndex;
+
+    @Schema(description = "是否是当前步骤")
+    private Boolean isCurrentStep;
+
+    @Schema(description = "待办标题(推荐使用短标题)")
+    private String todoTitle;
+
+    @Schema(description = "待办内容说明(比如步骤说明/确认人要求)")
+    private String todoContent;
+
+    @Schema(description = "待办类型(如:LOCK、COLOCK、RELEASE_COLOCK、UNLOCK、CONFIRM、END)")
+    private String todoType;
+
+    @Schema(description = "待办状态")
+    private String todoStatus;
+
+    @Schema(description = "当前步骤名称")
+    private String currentStepName;
+
+    @Schema(description = "当前步骤状态(0未执行 1已完成)")
+    private Integer stepStatus;
+
+    @Schema(description = "步骤更新时间")
+    private String stepUpdateTime;
+
+    @Schema(description = "分组id")
+    private Long groupId;
+
+    @Schema(description = "分组名称")
+    private String groupName;
+
+    @Schema(description = "当前操作名称")
+    private String currentOperateName;
+
+}

+ 21 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/enums/JobUserEnum.java

@@ -0,0 +1,21 @@
+package cn.iocoder.yudao.module.iscs.enums;
+
+import lombok.AllArgsConstructor;
+
+@AllArgsConstructor
+public enum JobUserEnum {
+    JTDRAWER("jtdrawer", "作业管理员"),
+    JTLOCKER("jtlocker", "作业负责人"),
+    JTCOLOCKER("jtcolocker", "作业参与人"),
+    JTGUARD("jtguard", "作业观察员");
+
+    /**
+     * 角色role key
+     */
+    public final String key;
+
+    /**
+     * 描述
+     */
+    public final String desc;
+}

+ 2 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/jobticket/JobTicketService.java

@@ -63,4 +63,6 @@ public interface JobTicketService extends IService<JobTicketDO> {
 
     List<JobTicketRespVO> getNotStartJobBySopId(Long sopId);
 
+    MyAgentRespVO getMyAgent(String startTime, String endTime);
+
 }

+ 430 - 3
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/jobticket/JobTicketServiceImpl.java

@@ -4,12 +4,14 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.lang.Assert;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.module.iscs.controller.admin.jobticket.vo.*;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.jobticket.*;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.sop.*;
 import cn.iocoder.yudao.module.iscs.dal.dataobject.workflow.WorkflowModeDO;
 import cn.iocoder.yudao.module.iscs.dal.mysql.jobticket.JobTicketMapper;
 import cn.iocoder.yudao.module.iscs.enums.JobStatusEnum;
+import cn.iocoder.yudao.module.iscs.enums.JobUserEnum;
 import cn.iocoder.yudao.module.iscs.service.sop.*;
 import cn.iocoder.yudao.module.iscs.service.workflow.WorkflowModeService;
 import cn.iocoder.yudao.module.system.service.attribute.AttributeService;
@@ -22,10 +24,13 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
+
 /**
  * 作业票 Service 实现类
  *
@@ -220,11 +225,11 @@ public class JobTicketServiceImpl extends ServiceImpl<JobTicketMapper, JobTicket
         for (JobTicketGroupRespVO groupRespVO : bean.getTicketGroupList()) {
             List<JobTicketPointsRespVO> list = ticketPointsRespVOList.stream().filter(o -> o.getGroupId().equals(groupRespVO.getId())).toList();
             // 待锁定
-            int waitLock = (int)list.stream().filter(o -> StringUtils.isBlank(o.getPointStatus()) || o.getPointStatus().equals("0")).count();
+            int waitLock = (int) list.stream().filter(o -> StringUtils.isBlank(o.getPointStatus()) || o.getPointStatus().equals("0")).count();
             // 已锁定
-            int locked = (int)list.stream().filter(o -> StringUtils.isNotBlank(o.getPointStatus()) && o.getPointStatus().equals("1")).count();
+            int locked = (int) list.stream().filter(o -> StringUtils.isNotBlank(o.getPointStatus()) && o.getPointStatus().equals("1")).count();
             // 已解锁
-            int unlocked = (int)list.stream().filter(o -> StringUtils.isNotBlank(o.getPointStatus()) && o.getPointStatus().equals("2")).count();
+            int unlocked = (int) list.stream().filter(o -> StringUtils.isNotBlank(o.getPointStatus()) && o.getPointStatus().equals("2")).count();
             // 组装数据
             groupRespVO.setTicketPointsRespVOList(list);
             groupRespVO.setWaitLock(waitLock);
@@ -521,4 +526,426 @@ public class JobTicketServiceImpl extends ServiceImpl<JobTicketMapper, JobTicket
         return BeanUtils.toBean(list, JobTicketRespVO.class);
     }
 
+    @Override
+    public MyAgentRespVO getMyAgent(String startTime, String endTime) {
+        MyAgentVO myAgentVO1 = new MyAgentVO();
+        myAgentVO1.setTicketId(130L);
+        myAgentVO1.setTicketName("测试作业");
+
+        myAgentVO1.setTicketStatus("1");
+        myAgentVO1.setStepId(1L);
+        myAgentVO1.setStepIndex(1);
+        myAgentVO1.setIsCurrentStep(true);
+        myAgentVO1.setTodoTitle("结束作业");
+        // myAgentVO.setTodoContent();
+        myAgentVO1.setTodoType("END");
+        // myAgentVO.setTodoStatus();
+        myAgentVO1.setStepStatus(1);
+        myAgentVO1.setStepUpdateTime(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now()));
+        myAgentVO1.setGroupId(1L);
+        myAgentVO1.setGroupName("默认分组1");
+        myAgentVO1.setCurrentStepName("1-启动上锁");
+        myAgentVO1.setCurrentOperateName("");
+        /*MyAgentVO myAgentVO1 = new MyAgentVO();
+        myAgentVO1.setTicketId(130L);
+        myAgentVO1.setTicketName("测试作业");
+
+        myAgentVO1.setTicketStatus("1");
+        myAgentVO1.setStepId(1L);
+        myAgentVO1.setStepIndex(1);
+        myAgentVO1.setIsCurrentStep(true);
+        myAgentVO1.setTodoTitle("启动上锁");
+        // myAgentVO.setTodoContent();
+        myAgentVO1.setTodoType("LOCK");
+        // myAgentVO.setTodoStatus();
+        myAgentVO1.setStepStatus(1);
+        myAgentVO1.setStepUpdateTime(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now()));
+        myAgentVO1.setGroupId(1L);
+        myAgentVO1.setGroupName("默认分组1");
+        myAgentVO1.setCurrentStepName("1-启动上锁");
+        myAgentVO1.setCurrentOperateName("");*/
+
+        MyAgentVO myAgentVO2 = new MyAgentVO();
+        myAgentVO2.setTicketId(130L);
+        myAgentVO2.setTicketName("测试作业");
+        myAgentVO2.setTicketStatus("1");
+        myAgentVO2.setStepId(1L);
+        myAgentVO2.setStepIndex(1);
+        myAgentVO2.setIsCurrentStep(true);
+        myAgentVO2.setTodoTitle("开始共锁");
+        // myAgentVO.setTodoContent();
+        myAgentVO2.setTodoType("LOCK");
+        // myAgentVO.setTodoStatus();
+        myAgentVO2.setStepStatus(1);
+        myAgentVO2.setStepUpdateTime(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now()));
+        myAgentVO2.setGroupId(1L);
+        myAgentVO2.setGroupName("");
+
+        // 需要我处理的
+        List<MyAgentVO> myAgent = new ArrayList<>();
+        // 等待上锁
+        List<MyAgentVO> waitAgent = new ArrayList<>();
+        waitAgent.add(myAgentVO2);
+        // 处理中
+        List<MyAgentVO> handleAgent = new ArrayList<>();
+        handleAgent.add(myAgentVO1);
+        // 已处理
+        List<MyAgentVO> finishAgent = new ArrayList<>();
+
+        // 1.获取当前用户信息
+        Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
+        // 2.获取有没有我的当前代办作业
+        List<JobTicketDO> jobTicketDOS = list(Wrappers.<JobTicketDO>lambdaQuery()
+                .eq(JobTicketDO::getCreator, loginUserId)
+                .ne(JobTicketDO::getTicketStatus, "5")
+                .ne(JobTicketDO::getTicketStatus, "6"));
+        // 如果jobTicketDOS有数据,说明有需要我处理的作业
+        for (JobTicketDO jobTicketDO : jobTicketDOS) {
+            // 3.1获取作业的步骤信息,看下作业执行到了哪一步
+            List<JobTicketStepDO> jobTicketStepDOS = jobTicketStepService.list(Wrappers.<JobTicketStepDO>lambdaQuery()
+                    .eq(JobTicketStepDO::getTicketId, jobTicketDO.getId())
+                    .orderByAsc(JobTicketStepDO::getStepIndex));
+            // 3.2获取当前该处理的步骤
+            JobTicketStepDO currentStep = getCurrentStep(jobTicketStepDOS);
+            // 3.2.1查看当前的步骤是不是需要我确定的
+            if (currentStep != null) {
+                // 当前步骤不为空才能继续
+                if (currentStep.getEnableLock().equals(true)) {
+                    // 3.3 如果开启上锁任务,检查有没有我的
+                    List<JobTicketUserDO> jobTicketUserDOS = jobTicketUserService.list(Wrappers.<JobTicketUserDO>lambdaQuery()
+                            .eq(JobTicketUserDO::getTicketId, jobTicketDO.getId())
+                            .eq(JobTicketUserDO::getUserId, loginUserId)
+                            .eq(JobTicketUserDO::getUserRole, JobUserEnum.JTLOCKER.key)
+                            .eq(JobTicketUserDO::getUserId, loginUserId));
+                    if (!jobTicketUserDOS.isEmpty()) {
+                        for (JobTicketUserDO jobTicketUserDO : jobTicketUserDOS) {
+                            MyAgentVO myAgentVO = new MyAgentVO();
+                            myAgentVO.setTicketId(jobTicketDO.getId());
+                            myAgentVO.setTicketName(jobTicketDO.getTicketName());
+                            myAgentVO.setTicketStatus(jobTicketDO.getTicketStatus());
+                            myAgentVO.setStepId(currentStep.getId());
+                            myAgentVO.setStepIndex(currentStep.getStepIndex());
+                            myAgentVO.setIsCurrentStep(true);
+                            myAgentVO.setTodoTitle(currentStep.getStepTitleShort());
+                            // myAgentVO.setTodoContent();
+                            myAgentVO.setTodoType("LOCK");
+                            // myAgentVO.setTodoStatus();
+                            myAgentVO.setStepStatus(currentStep.getStepStatus());
+                            myAgentVO.setStepUpdateTime(currentStep.getUpdateTime() != null ? DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(currentStep.getUpdateTime()) : null);
+                            myAgentVO.setGroupId(jobTicketUserDO.getId());
+                            if (jobTicketUserDO.getGroupId() != null) {
+                                JobTicketGroupDO jobTicketGroupDO = jobTicketGroupService.getById(jobTicketUserDO.getGroupId());
+                                if (jobTicketGroupDO != null) {
+                                    myAgentVO.setGroupName(jobTicketGroupDO.getGroupName());
+                                }
+                            }
+                            myAgentVO.setCurrentStepName(currentStep.getStepIndex() + currentStep.getStepTitleShort());
+                            myAgent.add(myAgentVO);
+                        }
+                    }
+                }
+
+                if (currentStep.getEnableColock().equals(true)) {
+                    // 3.4 如果开启共锁任务,检查有没有我的
+                    List<JobTicketUserDO> jobTicketUserDOS = jobTicketUserService.list(Wrappers.<JobTicketUserDO>lambdaQuery()
+                            .eq(JobTicketUserDO::getTicketId, jobTicketDO.getId())
+                            .eq(JobTicketUserDO::getUserId, loginUserId)
+                            .eq(JobTicketUserDO::getUserRole, JobUserEnum.JTCOLOCKER.key)
+                            .eq(JobTicketUserDO::getUserId, loginUserId));
+                    if (!jobTicketUserDOS.isEmpty()) {
+                        for (JobTicketUserDO jobTicketUserDO : jobTicketUserDOS) {
+                            MyAgentVO myAgentVO = new MyAgentVO();
+                            myAgentVO.setTicketId(jobTicketDO.getId());
+                            myAgentVO.setTicketName(jobTicketDO.getTicketName());
+                            myAgentVO.setTicketStatus(jobTicketDO.getTicketStatus());
+                            myAgentVO.setStepId(currentStep.getId());
+                            myAgentVO.setStepIndex(currentStep.getStepIndex());
+                            myAgentVO.setIsCurrentStep(true);
+                            myAgentVO.setTodoTitle(currentStep.getStepTitleShort());
+                            // myAgentVO.setTodoContent();
+                            myAgentVO.setTodoType("COLOCK");
+                            // myAgentVO.setTodoStatus();
+                            myAgentVO.setStepStatus(currentStep.getStepStatus());
+                            myAgentVO.setStepUpdateTime(currentStep.getUpdateTime() != null ? DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(currentStep.getUpdateTime()) : null);
+                            myAgentVO.setGroupId(jobTicketUserDO.getId());
+                            // 共锁没有分组区分
+                            /*if (jobTicketUserDO.getGroupId() != null) {
+                                JobTicketGroupDO jobTicketGroupDO = jobTicketGroupService.getById(jobTicketUserDO.getGroupId());
+                                if (jobTicketGroupDO != null) {
+                                    myAgentVO.setGroupName(jobTicketGroupDO.getGroupName());
+                                }
+                            }*/
+                            myAgentVO.setCurrentStepName(currentStep.getStepIndex() + currentStep.getStepTitleShort());
+                            myAgent.add(myAgentVO);
+                        }
+                    }
+                }
+
+                if (currentStep.getEnableReleaseColock().equals(true)) {
+                    // 3.5 如果开启解除共锁任务,检查有没有我的
+                    List<JobTicketUserDO> jobTicketUserDOS = jobTicketUserService.list(Wrappers.<JobTicketUserDO>lambdaQuery()
+                            .eq(JobTicketUserDO::getTicketId, jobTicketDO.getId())
+                            .eq(JobTicketUserDO::getUserId, loginUserId)
+                            .eq(JobTicketUserDO::getUserRole, JobUserEnum.JTCOLOCKER.key)
+                            .eq(JobTicketUserDO::getUserId, loginUserId));
+                    if (!jobTicketUserDOS.isEmpty()) {
+                        for (JobTicketUserDO jobTicketUserDO : jobTicketUserDOS) {
+                            MyAgentVO myAgentVO = new MyAgentVO();
+                            myAgentVO.setTicketId(jobTicketDO.getId());
+                            myAgentVO.setTicketName(jobTicketDO.getTicketName());
+                            myAgentVO.setTicketStatus(jobTicketDO.getTicketStatus());
+                            myAgentVO.setStepId(currentStep.getId());
+                            myAgentVO.setStepIndex(currentStep.getStepIndex());
+                            myAgentVO.setIsCurrentStep(true);
+                            myAgentVO.setTodoTitle(currentStep.getStepTitleShort());
+                            // myAgentVO.setTodoContent();
+                            myAgentVO.setTodoType("RELEASE_COLOCK");
+                            // myAgentVO.setTodoStatus();
+                            myAgentVO.setStepStatus(currentStep.getStepStatus());
+                            myAgentVO.setStepUpdateTime(currentStep.getUpdateTime() != null ? DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(currentStep.getUpdateTime()) : null);
+                            myAgentVO.setGroupId(jobTicketUserDO.getId());
+                            // 共锁没有分组区分
+                            /*if (jobTicketUserDO.getGroupId() != null) {
+                                JobTicketGroupDO jobTicketGroupDO = jobTicketGroupService.getById(jobTicketUserDO.getGroupId());
+                                if (jobTicketGroupDO != null) {
+                                    myAgentVO.setGroupName(jobTicketGroupDO.getGroupName());
+                                }
+                            }*/
+                            myAgentVO.setCurrentStepName(currentStep.getStepIndex() + currentStep.getStepTitleShort());
+                            myAgent.add(myAgentVO);
+                        }
+                    }
+                }
+
+                if (currentStep.getEnableUnlock().equals(true)) {
+                    // 3.6 如果开启解除上锁任务,检查有没有我的
+                    List<JobTicketUserDO> jobTicketUserDOS = jobTicketUserService.list(Wrappers.<JobTicketUserDO>lambdaQuery()
+                            .eq(JobTicketUserDO::getTicketId, jobTicketDO.getId())
+                            .eq(JobTicketUserDO::getUserId, loginUserId)
+                            .eq(JobTicketUserDO::getUserRole, JobUserEnum.JTLOCKER.key)
+                            .eq(JobTicketUserDO::getUserId, loginUserId));
+                    if (!jobTicketUserDOS.isEmpty()) {
+                        for (JobTicketUserDO jobTicketUserDO : jobTicketUserDOS) {
+                            MyAgentVO myAgentVO = new MyAgentVO();
+                            myAgentVO.setTicketId(jobTicketDO.getId());
+                            myAgentVO.setTicketName(jobTicketDO.getTicketName());
+                            myAgentVO.setTicketStatus(jobTicketDO.getTicketStatus());
+                            myAgentVO.setStepId(currentStep.getId());
+                            myAgentVO.setStepIndex(currentStep.getStepIndex());
+                            myAgentVO.setIsCurrentStep(true);
+                            myAgentVO.setTodoTitle(currentStep.getStepTitleShort());
+                            // myAgentVO.setTodoContent();
+                            myAgentVO.setTodoType("UNLOCK");
+                            // myAgentVO.setTodoStatus();
+                            myAgentVO.setStepStatus(currentStep.getStepStatus());
+                            myAgentVO.setStepUpdateTime(currentStep.getUpdateTime() != null ? DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(currentStep.getUpdateTime()) : null);
+                            myAgentVO.setGroupId(jobTicketUserDO.getId());
+                            if (jobTicketUserDO.getGroupId() != null) {
+                                JobTicketGroupDO jobTicketGroupDO = jobTicketGroupService.getById(jobTicketUserDO.getGroupId());
+                                if (jobTicketGroupDO != null) {
+                                    myAgentVO.setGroupName(jobTicketGroupDO.getGroupName());
+                                }
+                            }
+                            myAgentVO.setCurrentStepName(currentStep.getStepIndex() + currentStep.getStepTitleShort());
+                            myAgent.add(myAgentVO);
+                        }
+                    }
+                }
+
+                /*if (currentStep.getEnableUnlock().equals(true)) {
+                    // 3.7 如果开启结束作业
+                    List<JobTicketUserDO> jobTicketUserDOS = jobTicketUserService.list(Wrappers.<JobTicketUserDO>lambdaQuery()
+                            .eq(JobTicketUserDO::getTicketId, jobTicketDO.getId())
+                            .eq(JobTicketUserDO::getUserRole, JobUserEnum.JTLOCKER.key)
+                            .eq(JobTicketUserDO::getUserId, loginUserId));
+
+                }*/
+                // 不是自动执行
+                if (currentStep.getConfirmType() != null
+                        && currentStep.getConfirmType().equals(0)
+                        // 执行人是我
+                        && currentStep.getConfirmUser() != null
+                        && currentStep.getConfirmUser().equals(loginUserId)) {
+
+                    // 将步骤加入执行列表中
+                    MyAgentVO myAgentVO = new MyAgentVO();
+                    myAgentVO.setTicketId(jobTicketDO.getId());
+                    myAgentVO.setTicketName(jobTicketDO.getTicketName());
+                    myAgentVO.setTicketStatus(jobTicketDO.getTicketStatus());
+                    myAgentVO.setStepId(currentStep.getId());
+                    myAgentVO.setStepIndex(currentStep.getStepIndex());
+                    myAgentVO.setIsCurrentStep(true);
+                    myAgentVO.setTodoTitle(currentStep.getStepTitleShort());
+                    // myAgentVO.setTodoContent();
+                    myAgentVO.setTodoType("CONFIRM");
+                    // myAgentVO.setTodoStatus();
+                    myAgentVO.setStepStatus(currentStep.getStepStatus());
+                    myAgentVO.setStepUpdateTime(currentStep.getUpdateTime() != null ? DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(currentStep.getUpdateTime()) : null);
+                    myAgentVO.setCurrentStepName(currentStep.getStepIndex() + currentStep.getStepTitleShort());
+                    myAgent.add(myAgentVO);
+                }
+
+            }
+        }
+
+        // --------------查询所有我的现在已经完成的---------------------
+        List<MyAgentVO> myFinish = getMyFinish(loginUserId, startTime, endTime);
+        finishAgent.addAll(myFinish);
+
+        MyAgentRespVO myAgentRespVO = new MyAgentRespVO();
+        myAgentRespVO.setWaitAgent(waitAgent);
+        myAgentRespVO.setHandleAgent(handleAgent);
+        myAgentRespVO.setFinishAgent(finishAgent);
+        return myAgentRespVO;
+    }
+
+    private List<MyAgentVO> getMyFinish(Long userId, String startTime, String endTime) {
+        if (StringUtils.isBlank(startTime)) {
+            startTime = "1990-01-01 00:00:00";
+        }
+        if (StringUtils.isBlank(endTime)) {
+            endTime = "3000-01-01 00:00:00";
+        }
+        ArrayList<MyAgentVO> myAgentVOS = new ArrayList<>();
+        // 我的已完成上锁任务,解锁任务,共锁任务,解除共锁任务
+        List<JobTicketUserDO> jobTicketUserDOS = jobTicketUserService.list(Wrappers.<JobTicketUserDO>lambdaQuery()
+                .eq(JobTicketUserDO::getUserId, userId)
+                .gt(JobTicketUserDO::getJobStatus, 3));
+        for (JobTicketUserDO jobTicketUserDO : jobTicketUserDOS) {
+            JobTicketDO jobTicketDO = getById(jobTicketUserDO.getTicketId());
+            MyAgentVO myAgentVO = new MyAgentVO();
+            myAgentVO.setTicketId(jobTicketDO.getId());
+            myAgentVO.setTicketName(jobTicketDO.getTicketName());
+            myAgentVO.setTicketStatus(jobTicketDO.getTicketStatus());
+            // myAgentVO.setStepId();
+            // myAgentVO.setStepIndex();
+            // myAgentVO.setIsCurrentStep();
+            if (jobTicketUserDO.getUserRole().equals(JobUserEnum.JTLOCKER.key) && jobTicketUserDO.getJobStatus().equals("4")) {
+                myAgentVO.setTodoTitle("完成上锁");
+                myAgentVO.setTodoType("LOCK");
+                // myAgentVO.setTodoStatus();
+                // myAgentVO.setCurrentStepName();
+                // myAgentVO.setStepStatus();
+                myAgentVO.setStepUpdateTime( DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(jobTicketUserDO.getUpdateTime()));
+                JobTicketGroupDO groupDO = jobTicketGroupService.getById(jobTicketUserDO.getGroupId());
+                myAgentVO.setGroupId(groupDO.getId());
+                myAgentVO.setGroupName(groupDO.getGroupName());
+                // myAgentVO.setCurrentOperateName();
+            }
+            if (jobTicketUserDO.getUserRole().equals(JobUserEnum.JTLOCKER.key) && jobTicketUserDO.getJobStatus().equals("5")) {
+                myAgentVO.setTodoTitle("完成解锁");
+                myAgentVO.setTodoType("UNLOCK");
+                // myAgentVO.setTodoStatus();
+                // myAgentVO.setCurrentStepName();
+                // myAgentVO.setStepStatus();
+                myAgentVO.setStepUpdateTime( DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(jobTicketUserDO.getUpdateTime()));
+                JobTicketGroupDO groupDO = jobTicketGroupService.getById(jobTicketUserDO.getGroupId());
+                myAgentVO.setGroupId(groupDO.getId());
+                myAgentVO.setGroupName(groupDO.getGroupName());
+                // myAgentVO.setCurrentOperateName();
+            }
+            if (jobTicketUserDO.getUserRole().equals(JobUserEnum.JTCOLOCKER.key) && jobTicketUserDO.getJobStatus().equals("4")) {
+                myAgentVO.setTodoTitle("完成共锁");
+                myAgentVO.setTodoType("COLOCK");
+                // myAgentVO.setTodoStatus();
+                // myAgentVO.setCurrentStepName();
+                // myAgentVO.setStepStatus();
+                myAgentVO.setStepUpdateTime( DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(jobTicketUserDO.getUpdateTime()));
+                JobTicketGroupDO groupDO = jobTicketGroupService.getById(jobTicketUserDO.getGroupId());
+                myAgentVO.setGroupId(groupDO.getId());
+                myAgentVO.setGroupName(groupDO.getGroupName());
+                // myAgentVO.setCurrentOperateName();
+            }
+            if (jobTicketUserDO.getUserRole().equals(JobUserEnum.JTCOLOCKER.key) && jobTicketUserDO.getJobStatus().equals("5")) {
+                myAgentVO.setTodoTitle("完成解除共锁");
+                myAgentVO.setTodoType("RELEASE_COLOCK");
+                // myAgentVO.setTodoStatus();
+                // myAgentVO.setCurrentStepName();
+                // myAgentVO.setStepStatus();
+                myAgentVO.setStepUpdateTime(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(jobTicketUserDO.getUpdateTime()));
+                JobTicketGroupDO groupDO = jobTicketGroupService.getById(jobTicketUserDO.getGroupId());
+                myAgentVO.setGroupId(groupDO.getId());
+                myAgentVO.setGroupName(groupDO.getGroupName());
+                // myAgentVO.setCurrentOperateName();
+            }
+            myAgentVOS.add(myAgentVO);
+        }
+
+        // ---------------------- 我处理的步骤--------------------
+        List<JobTicketStepDO> stepDOS = jobTicketStepService.list(Wrappers.<JobTicketStepDO>lambdaQuery()
+                .eq(JobTicketStepDO::getUpdater, userId)
+                .eq(JobTicketStepDO::getStepStatus, 1));
+        for (JobTicketStepDO stepDO : stepDOS) {
+            JobTicketDO jobTicketDO = getById(stepDO.getTicketId());
+            MyAgentVO myAgentVO = new MyAgentVO();
+            myAgentVO.setTicketId(jobTicketDO.getId());
+            myAgentVO.setTicketName(jobTicketDO.getTicketName());
+            myAgentVO.setTicketStatus(jobTicketDO.getTicketStatus());
+            myAgentVO.setStepId(stepDO.getId());
+            myAgentVO.setStepIndex(stepDO.getStepIndex());
+            // myAgentVO.setIsCurrentStep();
+            myAgentVO.setTodoTitle(stepDO.getStepTitleShort());
+            // myAgentVO.setTodoContent();
+            myAgentVO.setTodoType("CONFIRM");
+            myAgentVO.setTodoStatus("1");
+            myAgentVO.setCurrentStepName(stepDO.getStepIndex() + "-" + stepDO.getStepTitleShort());
+            myAgentVO.setStepStatus(stepDO.getStepStatus());
+            myAgentVO.setStepUpdateTime(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(stepDO.getUpdateTime()));
+            // myAgentVO.setGroupId();
+            // myAgentVO.setGroupName();
+            // myAgentVO.setCurrentOperateName();
+            myAgentVOS.add(myAgentVO);
+        }
+        // 进行时间排序和过滤
+        if (!myAgentVOS.isEmpty()) {
+            String finalStartTime = startTime;
+            String finalEndTime = endTime;
+            myAgentVOS.stream()
+                    // ① 过滤无效时间和超出范围的数据
+                    .filter(vo -> {
+                        LocalDateTime stepTime = parseTime(vo.getStepUpdateTime());
+                        return stepTime != null && !stepTime.isBefore(parseTime(finalStartTime)) && !stepTime.isAfter(parseTime(finalEndTime));
+                    })
+                    // ② 按时间倒序排序
+                    .sorted((v1, v2) -> {
+                        LocalDateTime t1 = parseTime(v1.getStepUpdateTime());
+                        LocalDateTime t2 = parseTime(v2.getStepUpdateTime());
+                        return t2.compareTo(t1); // 降序
+                    })
+                    .collect(Collectors.toList());
+        }
+
+        return myAgentVOS;
+    }
+
+    // 如果时间格式固定为 "yyyy-MM-dd HH:mm:ss"
+    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+
+    private LocalDateTime parseTime(String timeStr) {
+        try {
+            return LocalDateTime.parse(timeStr, FORMATTER);
+        } catch (Exception e) {
+            // 可根据需求修改行为:跳过无效记录 / 抛异常 / 日志记录
+            System.err.println("Invalid time format: " + timeStr);
+            return null;
+        }
+    }
+
+    /**
+     * 根据作业步骤获取接下来需要执行的一步
+     *
+     * @param jobTicketStepDOS
+     * @return
+     */
+    private JobTicketStepDO getCurrentStep(List<JobTicketStepDO> jobTicketStepDOS) {
+        for (JobTicketStepDO step : jobTicketStepDOS) {
+            if (step.getStepStatus() == 0) {
+                return step; // 返回第一个未执行的步骤
+            }
+        }
+        return null;
+    }
+
+
 }