Преглед на файлове

新增取出辅件时更新数据,辅件绑定隔离点

车车 преди 11 месеца
родител
ревизия
a7baf81d83

+ 18 - 0
ktg-iscs/src/main/java/com/ktg/iscs/controller/HardwareApiController.java

@@ -72,4 +72,22 @@ public class HardwareApiController extends BaseController
     }
 
 
+
+    @ApiOperation("取出辅件时更新数据")
+    @Log(title = "取出辅件时更新数据", businessType = BusinessType.UPDATE)
+    @PostMapping("/updateLocksetTake")
+    public CommonResult<Boolean> updateLocksetTake(@RequestBody @Parameter(name = "list", description = "修改数据类,放到body") List<TakeLocksetDTO> list)
+    {
+        return CommonResult.success(hardwareApiService.updateLocksetTake(list));
+    }
+
+    @ApiOperation("辅件绑定隔离点(辅件和给隔离点上锁时)")
+    @Log(title = "辅件绑定隔离点", businessType = BusinessType.UPDATE)
+    @PostMapping("/updateLocksetPoint")
+    public CommonResult<Boolean> updateLocksetPoint(@RequestBody @Parameter(name = "dto", description = "修改数据类,放到body") LocksetPointDTO dto)
+    {
+        return CommonResult.success(hardwareApiService.updateLocksetPoint(dto));
+    }
+
+
 }

+ 2 - 2
ktg-iscs/src/main/java/com/ktg/iscs/domain/IsJobTicketLock.java

@@ -44,8 +44,8 @@ public class IsJobTicketLock extends BaseBean
     @Excel(name = "隔离点ID")
     private Long isolationPointId;
 
-    @ApiModelProperty(value = "锁具状态(0-待取出 1-未上锁 2-已上锁 3-已解锁 4-已归还)")
-    @Excel(name = "锁具状态(0-待取出 1-未上锁 2-已上锁 3-已解锁 4-已归还)")
+    @ApiModelProperty(value = "锁具状态(0-待取出 1-未上锁 2-已上锁 3-待解锁 4-已解锁 5-已归还))")
+    @Excel(name = "锁具状态(0-待取出 1-未上锁 2-已上锁 3-待解锁 4-已解锁 5-已归还)")
     private String lockStatus;
 
     @ApiModelProperty(value = "删除标志(0代表存在 2代表删除)")

+ 24 - 0
ktg-iscs/src/main/java/com/ktg/iscs/domain/dto/hardwareApi/LocksetPointDTO.java

@@ -0,0 +1,24 @@
+package com.ktg.iscs.domain.dto.hardwareApi;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * UpdateTicketLockDTO
+ *
+ * @author cgj
+ * @date 2024-10-16
+ */
+@Data
+public class LocksetPointDTO {
+
+    @ApiModelProperty(value = "作业票ID")
+    private Long ticketId;
+
+    @ApiModelProperty(value = "辅件NFC")
+    private String locksetNfc;
+
+    @ApiModelProperty(value = "隔离点nfc")
+    private String pointNfc;
+
+}

+ 27 - 0
ktg-iscs/src/main/java/com/ktg/iscs/domain/dto/hardwareApi/TakeLocksetDTO.java

@@ -0,0 +1,27 @@
+package com.ktg.iscs.domain.dto.hardwareApi;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * UpdateTicketLockDTO
+ *
+ * @author cgj
+ * @date 2024-10-16
+ */
+@Data
+public class TakeLocksetDTO {
+
+    @ApiModelProperty(value = "作业票ID")
+    private Long ticketId;
+
+    @ApiModelProperty(value = "锁具NFC")
+    private String locksetNfc;
+
+    @ApiModelProperty(value = "取出硬件ID")
+    private Long fromHardwareId;
+
+    @ApiModelProperty(value = "对接时不需要传入,给了NFC就行")
+    private Long locksetId;
+
+}

+ 23 - 0
ktg-iscs/src/main/java/com/ktg/iscs/domain/enums/LockStatusEnum.java

@@ -0,0 +1,23 @@
+package com.ktg.iscs.domain.enums;
+
+import lombok.AllArgsConstructor;
+
+@AllArgsConstructor
+public enum LockStatusEnum {
+    WAIT_TAKE("0", "待取出"),
+    NOT_LOCK("1", "未上锁"),
+    LOCKED("2", "已上锁"),
+    WAIT_REMOVE_LOCK("3", "待解锁"),
+    REMOVED_LOCK("4", "已解锁"),
+    RETURN_LOCK("5", "已归还");
+
+    /**
+     * 状态编号
+     */
+    public final String status;
+
+    /**
+     * 描述
+     */
+    public final String desc;
+}

+ 24 - 0
ktg-iscs/src/main/java/com/ktg/iscs/domain/enums/LocksetStatusEnum.java

@@ -0,0 +1,24 @@
+package com.ktg.iscs.domain.enums;
+
+import lombok.AllArgsConstructor;
+
+@AllArgsConstructor
+public enum LocksetStatusEnum {
+    WAIT_TAKE("0", "待取出"),
+    TAKED("1", "已取出"),
+    WAIT_USE("2", "待使用"),
+    USING("3", "使用中"),
+    WAIT_REMOVED("4", "待拆除"),
+    WAIT_RETURN("5", "待归还"),
+    RETURNED("6", "已归还");
+
+    /**
+     * 状态编号
+     */
+    public final String status;
+
+    /**
+     * 描述
+     */
+    public final String desc;
+}

+ 20 - 0
ktg-iscs/src/main/java/com/ktg/iscs/service/HardwareApiService.java

@@ -47,4 +47,24 @@ public interface HardwareApiService {
      */
     Boolean updateTicketLockStatus(UpdateTicketStatusDTO dto);
 
+
+
+
+
+
+
+    /**
+     * 取出辅件时更新数据
+     * @param list
+     * @return
+     */
+    Boolean updateLocksetTake(List<TakeLocksetDTO> list);
+
+    /**
+     * 辅件绑定隔离点
+     * @param dto
+     * @return
+     */
+    Boolean updateLocksetPoint(LocksetPointDTO dto);
+
 }

+ 88 - 8
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/HardwareApiServiceImpl.java

@@ -4,7 +4,10 @@ import cn.hutool.core.lang.Assert;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.ktg.iscs.domain.*;
 import com.ktg.iscs.domain.dto.hardwareApi.*;
+import com.ktg.iscs.domain.enums.LockStatusEnum;
+import com.ktg.iscs.domain.enums.LocksetStatusEnum;
 import com.ktg.iscs.service.*;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -18,6 +21,7 @@ import java.util.stream.Collectors;
  * @author cgj
  * @date 2024-10-16
  */
+@Slf4j
 @Service
 public class HardwareApiServiceImpl implements HardwareApiService {
     @Autowired
@@ -32,6 +36,10 @@ public class HardwareApiServiceImpl implements HardwareApiService {
     private IIsJobTicketLockService iIsJobTicketLockService;
     @Autowired
     private IIsIsolationPointService iIsIsolationPointService;
+    @Autowired
+    private IIsLocksetService iIsLocksetService;
+    @Autowired
+    private IIsJobTicketLocksetService iIsJobTicketLocksetService;
 
     @Override
     public Boolean updateTicketKetStatus(UpdateKeyStatusDTO dto) {
@@ -110,7 +118,7 @@ public class HardwareApiServiceImpl implements HardwareApiService {
             IsJobTicketLock isJobTicketLock = jobTicketLockList.get(i);
             isJobTicketLock.setLockId(list.get(i).getLockId());
             isJobTicketLock.setFromHardwareId(list.get(i).getFromHardwareId());
-            isJobTicketLock.setLockStatus("1");
+            isJobTicketLock.setLockStatus(LockStatusEnum.NOT_LOCK.status);
         }
         // 4.开始批量更新
         return iIsJobTicketLockService.updateBatchById(jobTicketLockList);
@@ -118,7 +126,7 @@ public class HardwareApiServiceImpl implements HardwareApiService {
 
     @Override
     public Boolean updateTicketLockReturn(ReturnTicketLockDTO dto) {
-        Assert.notNull(dto.getTicketId(), "请告诉我关于哪个作业票!");
+        // Assert.notNull(dto.getTicketId(), "请告诉我关于哪个作业票!");
         Assert.notBlank(dto.getLockNfc(), "挂锁nfc缺失!");
         Assert.notNull(dto.getToHardwareId(), "请告知归还到哪一个柜子!");
         // 1.通过nfc查询挂锁信息
@@ -126,11 +134,32 @@ public class HardwareApiServiceImpl implements HardwareApiService {
                 .eq(IsLock::getLockNfc, dto.getLockNfc()));
         Assert.notNull(lock, "该nfc无对应的挂锁信息");
         // 2.开始更新归还信息
-        iIsJobTicketLockService.update(Wrappers.<IsJobTicketLock>lambdaUpdate()
-                .eq(IsJobTicketLock::getTicketId, dto.getTicketId())
-                .eq(IsJobTicketLock::getLockId, lock.getLockId())
-                .set(IsJobTicketLock::getToHardwareId, dto.getToHardwareId())
-                .set(IsJobTicketLock::getLockStatus, "4"));
+        if (dto.getTicketId() != null) {
+            // 2.1登陆后归还
+            iIsJobTicketLockService.update(Wrappers.<IsJobTicketLock>lambdaUpdate()
+                    .eq(IsJobTicketLock::getTicketId, dto.getTicketId())
+                    .eq(IsJobTicketLock::getLockId, lock.getLockId())
+                    .set(IsJobTicketLock::getToHardwareId, dto.getToHardwareId())
+                    .set(IsJobTicketLock::getLockStatus, LockStatusEnum.RETURN_LOCK.status));
+        } else {
+            // 2.2不登陆状态下归还
+            // 查一下哪个作业票用了这个挂锁,而且还没有完成
+            List<IsJobTicketLock> jobTicketLockList = iIsJobTicketLockService.list(Wrappers.<IsJobTicketLock>lambdaQuery()
+                    .eq(IsJobTicketLock::getLockId, lock.getLockId())
+                    .ne(IsJobTicketLock::getLockStatus, LockStatusEnum.RETURN_LOCK.status));
+            if (jobTicketLockList.isEmpty()) {
+                log.error("当前挂锁未找到关联的作业票, nfc: {}, name : {}", dto.getLockNfc(), lock.getLockName());
+            } else if (jobTicketLockList.size() == 1) {
+                // 说明找到的就是
+                iIsJobTicketLockService.update(Wrappers.<IsJobTicketLock>lambdaUpdate()
+                        .eq(IsJobTicketLock::getLockId, lock.getLockId())
+                        .set(IsJobTicketLock::getToHardwareId, dto.getToHardwareId())
+                        .set(IsJobTicketLock::getLockStatus, LockStatusEnum.RETURN_LOCK.status));
+            } else {
+                // 出现了多条对应
+                log.error("当前挂锁找到多条关联的作业票, nfc: {}, name : {}", dto.getLockNfc(), lock.getLockName());
+            }
+        }
         return true;
     }
 
@@ -152,7 +181,7 @@ public class HardwareApiServiceImpl implements HardwareApiService {
                 .eq(IsJobTicketLock::getTicketId, dto.getTicketId())
                 .eq(IsJobTicketLock::getLockId, lock.getLockId())
                 .set(IsJobTicketLock::getIsolationPointId, point.getPointId())
-                .set(IsJobTicketLock::getLockStatus, "2"));
+                .set(IsJobTicketLock::getLockStatus, LockStatusEnum.RETURN_LOCK.status));
         return true;
     }
 
@@ -172,4 +201,55 @@ public class HardwareApiServiceImpl implements HardwareApiService {
                 .set(IsJobTicketLock::getLockStatus, dto.getLockStatus()));
         return true;
     }
+
+    @Override
+    public Boolean updateLocksetTake(List<TakeLocksetDTO> list) {
+        Assert.isFalse(list.isEmpty(), "请取出至少一个辅件!");
+        // 情况复杂,软条件过多,单条剥离处理吧
+        for (TakeLocksetDTO dto : list) {
+            Assert.notNull(dto.getTicketId(), "请告诉我关于哪个作业票!");
+            Assert.notBlank(dto.getLocksetNfc(), "辅件nfc缺失!");
+            // 1.查询辅件的详情
+            IsLockset lockset = iIsLocksetService.getOne(Wrappers.<IsLockset>lambdaQuery().eq(IsLockset::getLocksetNfc, dto.getLocksetNfc()));
+            Assert.notNull(lockset, dto.getLocksetNfc() + "无对应的辅件信息!");
+            // 1.1获取该辅件的类型,找到is_job_ticket_lockset有没有对应的,可能会有多条,取其中一条即可,
+            IsJobTicketLockset jobTicketLockset = iIsJobTicketLocksetService.getOne(Wrappers.<IsJobTicketLockset>lambdaQuery()
+                    .eq(IsJobTicketLockset::getJobTicketId, dto.getTicketId())
+                    // 未使用过的数据
+                    .isNull(IsJobTicketLockset::getLocksetId)
+                    // 处理下多条取一条用,按照从上倒下顺序使用
+                    .orderByAsc(IsJobTicketLockset::getRecordId)
+                    .last("limit 1"));
+            Assert.notNull(jobTicketLockset, "无初始化数据来提供给该辅件更新");
+            // 1.2开始补充该条数据
+            jobTicketLockset.setLocksetId(lockset.getLocksetId());
+            jobTicketLockset.setFromHardwareId(dto.getFromHardwareId());
+            jobTicketLockset.setLocksetStatus(LocksetStatusEnum.TAKED.status);
+            jobTicketLockset.setCollectTime(new Date());
+            iIsJobTicketLocksetService.updateById(jobTicketLockset);
+        }
+        return true;
+    }
+
+    @Override
+    public Boolean updateLocksetPoint(LocksetPointDTO dto) {
+        Assert.notNull(dto.getTicketId(), "请告诉我关于哪个作业票!");
+        Assert.notBlank(dto.getLocksetNfc(), "辅件nfc缺失!");
+        Assert.notNull(dto.getPointNfc(), "请告知隔离点信息!");
+        // 1.通过nfc查询挂锁信息
+        IsLockset lockset = iIsLocksetService.getOne(Wrappers.<IsLockset>lambdaQuery()
+                .eq(IsLockset::getLocksetNfc, dto.getLocksetNfc()));
+        Assert.notNull(lockset, "该nfc无对应的辅件信息");
+        // 2.通过nfc查询隔离点信息
+        IsIsolationPoint point = iIsIsolationPointService.getOne(Wrappers.<IsIsolationPoint>lambdaQuery()
+                .eq(IsIsolationPoint::getPointNfc, dto.getPointNfc()));
+        Assert.notNull(point, "该nfc无对应的隔离点信息");
+        // 3.开始更新绑定关系
+        iIsJobTicketLocksetService.update(Wrappers.<IsJobTicketLockset>lambdaUpdate()
+                .eq(IsJobTicketLockset::getJobTicketId, dto.getTicketId())
+                .eq(IsJobTicketLockset::getLocksetId, lockset.getLocksetId())
+                .set(IsJobTicketLockset::getPointId, point.getPointId())
+                .set(IsJobTicketLockset::getLocksetStatus, LocksetStatusEnum.USING.status));
+        return true;
+    }
 }