ソースを参照

作业的对接修改

车车 4 ヶ月 前
コミット
2f28a94d9b

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

@@ -59,4 +59,8 @@ public class JobTicketSaveReqVO {
     @Schema(description = "备注", example = "你说的对")
     private String remark;
 
+    // 如果启动,作业状态变更成1待上锁,作业步骤检查前面有没有自动执行的,如果有则需要自动执行完毕
+    @Schema(description = "是否启动(0否,1是)", example = "1")
+    private Integer ifStart;
+
 }

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

@@ -22,6 +22,9 @@ public class JobTicketStepPageReqVO extends PageParam {
     @Schema(description = "名称", example = "赵六")
     private String stepName;
 
+    @Schema(description = "步骤状态(0-未执行 1-已执行)", example = "0")
+    private Integer stepStatus;
+
     @Schema(description = "图标")
     private String stepIcon;
 

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

@@ -28,6 +28,9 @@ public class JobTicketStepRespVO {
     @ExcelProperty("名称")
     private String stepName;
 
+    @Schema(description = "步骤状态(0-未执行 1-已执行)", example = "0")
+    private Integer stepStatus;
+
     @Schema(description = "图标")
     @ExcelProperty("图标")
     private String stepIcon;

+ 7 - 5
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/jobticket/JobTicketGroupDO.java

@@ -1,11 +1,11 @@
 package cn.iocoder.yudao.module.iscs.dal.dataobject.jobticket;
 
-import lombok.*;
-import java.util.*;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
-import com.baomidou.mybatisplus.annotation.*;
 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
 
 /**
  * 作业票分组 DO
@@ -40,5 +40,7 @@ public class JobTicketGroupDO extends BaseDO {
      */
     private String remark;
 
+    @TableField(exist = false)
+    private Long sopGroupId;
 
 }

+ 4 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/dataobject/jobticket/JobTicketStepDO.java

@@ -38,6 +38,10 @@ public class JobTicketStepDO extends BaseDO {
      * 名称
      */
     private String stepName;
+    /**
+     * 步骤状态(0-未执行 1-已执行)
+     */
+    private Integer stepStatus;
     /**
      * 图标
      */

+ 1 - 0
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/dal/mysql/jobticket/JobTicketStepMapper.java

@@ -21,6 +21,7 @@ public interface JobTicketStepMapper extends BaseMapperX<JobTicketStepDO> {
 
     default PageResult<JobTicketStepDO> selectPage(JobTicketStepPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<JobTicketStepDO>()
+                .eqIfPresent(JobTicketStepDO::getTicketId, reqVO.getTicketId())
                 .eqIfPresent(JobTicketStepDO::getStepIndex, reqVO.getStepIndex())
                 .betweenIfPresent(JobTicketStepDO::getCreateTime, reqVO.getCreateTime())
                 .orderByDesc(JobTicketStepDO::getId));

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

@@ -33,7 +33,7 @@ public class JobTicketPointsServiceImpl extends ServiceImpl<JobTicketPointsMappe
 
     @Override
     public Boolean createJobTicketPoints(List<JobTicketPointsSaveReqVO> list) {
-        // 插入
+        // 插入,无需判重,前端机制决定,和人员选择同理
         List<JobTicketPointsDO> jobTicketPoints = BeanUtils.toBean(list, JobTicketPointsDO.class);
         jobTicketPointsMapper.insert(jobTicketPoints);
 
@@ -66,7 +66,7 @@ public class JobTicketPointsServiceImpl extends ServiceImpl<JobTicketPointsMappe
                 } else {
                     JobTicketLockDO one1 = jobTicketLockService.getOne(Wrappers.<JobTicketLockDO>lambdaQuery()
                             .eq(JobTicketLockDO::getTicketId, jobTicketPointsDO.getTicketId())
-                            .eq(JobTicketLockDO::getLockStatus, "0"));
+                            .eq(JobTicketLockDO::getLockStatus, "0").last("limit 1"));
                     if (one1 != null) {
                         longs.add(one1.getId());
                     }

+ 30 - 2
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/jobticket/JobTicketServiceImpl.java

@@ -195,6 +195,7 @@ public class JobTicketServiceImpl extends ServiceImpl<JobTicketMapper, JobTicket
     @Override
     public JobTicketRespVO getJobTicket(Long id) {
         JobTicketDO jobTicketDO = jobTicketMapper.selectById(id);
+        Assert.isTrue(jobTicketDO != null, "作业信息不存在!");
         JobTicketRespVO bean = BeanUtils.toBean(jobTicketDO, JobTicketRespVO.class);
         // 作业分组
         List<JobTicketGroupDO> ticketGroupDOList = jobTicketGroupService.list(Wrappers.<JobTicketGroupDO>lambdaQuery()
@@ -268,6 +269,10 @@ public class JobTicketServiceImpl extends ServiceImpl<JobTicketMapper, JobTicket
                 .eq(SopWorkflowStepDO::getSopId, vo.getSopId())
                 .orderByAsc(SopWorkflowStepDO::getStepIndex));
         Assert.isFalse(sopWorkflowStepDOS.isEmpty(), "sop步骤信息不存在!");
+        // 1.6 如果开启创建并启动,则更新作业状态为待上锁,并且执行完成步骤中前面自动执行的步骤
+        if (vo.getIfStart() != null && vo.getIfStart().equals(1)) {
+            vo.setTicketStatus("1");
+        }
 
         // 2.开始新增作业
         JobTicketDO bean = BeanUtils.toBean(vo, JobTicketDO.class);
@@ -296,15 +301,21 @@ public class JobTicketServiceImpl extends ServiceImpl<JobTicketMapper, JobTicket
             JobTicketGroupDO jobTicketGroupDO = new JobTicketGroupDO();
             jobTicketGroupDO.setTicketId(ticketId);
             jobTicketGroupDO.setGroupName(sopGroupDO.getGroupName());
+            jobTicketGroupDO.setSopGroupId(sopGroupDO.getId());
             jobTicketGroupDOS.add(jobTicketGroupDO);
         }
         jobTicketKeyService.saveBatch(jobTicketKeyDOS);
         jobTicketGroupService.saveBatch(jobTicketGroupDOS);
         // 2.3开始处理isc_job_ticket_points / isc_job_ticket_lock,lock需要根据点位数量来生成
         for (SopPointsDO sopPointsDO : sopPointsDOList) {
+            Long groupId = null;
+            if (!jobTicketGroupDOS.isEmpty()) {
+                JobTicketGroupDO jobTicketGroupDO = jobTicketGroupDOS.stream().filter(o -> o.getSopGroupId().equals(sopPointsDO.getGroupId())).toList().get(0);
+                groupId = jobTicketGroupDO.getId();
+            }
             JobTicketPointsDO jobTicketPointsDO = new JobTicketPointsDO();
             jobTicketPointsDO.setTicketId(ticketId);
-            jobTicketPointsDO.setGroupId(sopPointsDO.getGroupId());
+            jobTicketPointsDO.setGroupId(groupId);
             jobTicketPointsDO.setWorkshopId(sopPointsDO.getWorkshopId());
             jobTicketPointsDO.setWorkareaId(sopPointsDO.getWorkareaId());
             jobTicketPointsDO.setPointId(sopPointsDO.getPointId());
@@ -323,9 +334,14 @@ public class JobTicketServiceImpl extends ServiceImpl<JobTicketMapper, JobTicket
 
         // 2.4构造isc_job_ticket_user
         for (SopUserDO sopUserDO : sopUserDOS) {
+            Long groupId = null;
+            if (!jobTicketGroupDOS.isEmpty() && sopUserDO.getGroupId() != null) {
+                JobTicketGroupDO jobTicketGroupDO = jobTicketGroupDOS.stream().filter(o -> o.getSopGroupId().equals(sopUserDO.getGroupId())).toList().get(0);
+                groupId = jobTicketGroupDO.getId();
+            }
             JobTicketUserDO jobTicketUserDO = new JobTicketUserDO();
             jobTicketUserDO.setTicketId(ticketId);
-            jobTicketUserDO.setGroupId(sopUserDO.getGroupId());
+            jobTicketUserDO.setGroupId(groupId);
             jobTicketUserDO.setUserId(sopUserDO.getUserId());
             jobTicketUserDO.setUserName(sopUserDO.getUserName());
             jobTicketUserDO.setUserType(sopUserDO.getUserType());
@@ -335,6 +351,8 @@ public class JobTicketServiceImpl extends ServiceImpl<JobTicketMapper, JobTicket
         }
         jobTicketUserService.saveBatch(jobTicketUserDOS);
         // 2.5构造jobTicketStepDOS
+        // 0-未中断自动执行 1-中断自动执行  ----创建作业并启动时,需要更新前几步自动执行的步骤,如果非连续,需要停止后面非连续自动步骤的初始化
+        int breakAutoStep = 0;
         for (SopWorkflowStepDO sopWorkflowStepDO : sopWorkflowStepDOS) {
             JobTicketStepDO jobTicketStepDO = new JobTicketStepDO();
             jobTicketStepDO.setTicketId(ticketId);
@@ -358,6 +376,16 @@ public class JobTicketServiceImpl extends ServiceImpl<JobTicketMapper, JobTicket
             jobTicketStepDO.setEnableReleaseColock(sopWorkflowStepDO.getEnableReleaseColock());
             jobTicketStepDO.setEnableUnlock(sopWorkflowStepDO.getEnableUnlock());
             jobTicketStepDO.setEnableEndJob(sopWorkflowStepDO.getEnableEndJob());
+            // 判断创建作业并启动时,自动执行前几步的自动执行操作
+            if (vo.getIfStart() != null
+                    && vo.getIfStart().equals(1)
+                    && sopWorkflowStepDO.getConfirmType() != null
+                    && sopWorkflowStepDO.getConfirmType().equals(1)
+                    && breakAutoStep == 0) {
+                jobTicketStepDO.setStepStatus(1);
+            } else {
+                breakAutoStep = 1;
+            }
             jobTicketStepDOS.add(jobTicketStepDO);
         }
         jobTicketStepService.saveBatch(jobTicketStepDOS);

+ 13 - 3
yudao-module-iscs/src/main/java/cn/iocoder/yudao/module/iscs/service/jobticket/JobTicketUserServiceImpl.java

@@ -36,10 +36,20 @@ public class JobTicketUserServiceImpl extends ServiceImpl<JobTicketUserMapper, J
 
     @Override
     public Boolean createJobTicketUser(List<JobTicketUserSaveReqVO> list) {
-        // 插入
+        // 插入,前端机制决定不会重复,选择人员后,可供选择的人员会消失
         List<JobTicketUserDO> bean = BeanUtils.toBean(list, JobTicketUserDO.class);
         jobTicketUserMapper.insert(bean);
-
+        // 获取共锁人角色
+        /*AttributeDO jtcolocker = attributeService.getAttributeByKey("role.jtcolocker");
+        // 检查是否存在重复
+        for (JobTicketUserDO jobTicketUserDO : bean) {
+            List<JobTicketUserDO> jobTicketUserDOS = list(Wrappers.<JobTicketUserDO>lambdaQuery()
+                    .eq(JobTicketUserDO::getUserId, jobTicketUserDO.getUserId())
+                    .eq(JobTicketUserDO::getTicketId, jobTicketUserDO.getTicketId())
+                    .eq(JobTicketUserDO::getUserRole, jtcolocker.getSysAttrValue()));
+            Assert.isFalse(jobTicketUserDOS.isEmpty(), "共锁人存在重复名称");
+            jobTicketUserMapper.insert(jobTicketUserDO);
+        }*/
         // 返回
         return true;
     }
@@ -64,7 +74,7 @@ public class JobTicketUserServiceImpl extends ServiceImpl<JobTicketUserMapper, J
                 if (jobTicketUserDO.getUserRole().equals(sysAttrValue)) {
                     JobTicketKeyDO one = jobTicketKeyService.getOne(Wrappers.<JobTicketKeyDO>lambdaQuery()
                             .eq(JobTicketKeyDO::getTicketId, jobTicketUserDO.getTicketId())
-                            .eq(JobTicketKeyDO::getKeyStatus, "0"));
+                            .eq(JobTicketKeyDO::getKeyStatus, "0").last("limit 1"));
                     if (one != null) {
                         List<Long> objects = new ArrayList<>();
                         objects.add(one.getId());