|
|
@@ -370,12 +370,26 @@ public class HardwareApiServiceImpl implements HardwareApiService {
|
|
|
Assert.notNull(isHardware, "该序列号无对应的硬件信息!");
|
|
|
// 2.开始更新归还信息
|
|
|
if (dto.getTicketId() != null) {
|
|
|
- // 2.1登陆后归还
|
|
|
- iIsJobTicketLockService.update(Wrappers.<IsJobTicketLock>lambdaUpdate()
|
|
|
- .eq(IsJobTicketLock::getTicketId, dto.getTicketId())
|
|
|
- .eq(IsJobTicketLock::getLockId, lock.getLockId())
|
|
|
- .set(IsJobTicketLock::getToHardwareId, isHardware.getId())
|
|
|
- .set(IsJobTicketLock::getLockStatus, LockStatusEnum.RETURN_LOCK.status));
|
|
|
+ // 2.1登陆后归还, 判断钥匙在哪个阶段,根据不同阶段更新不一样
|
|
|
+ Integer lockStateByNfc = getLockStateByNfc(dto.getLockNfc(), dto.getTicketId());
|
|
|
+ if (lockStateByNfc.equals(0)) {
|
|
|
+ // 0-上锁未取钥匙(可锁-需更改还锁逻辑)
|
|
|
+ iIsJobTicketLockService.update(Wrappers.<IsJobTicketLock>lambdaUpdate()
|
|
|
+ .eq(IsJobTicketLock::getTicketId, dto.getTicketId())
|
|
|
+ .eq(IsJobTicketLock::getLockId, lock.getLockId())
|
|
|
+ .set(IsJobTicketLock::getLockId, null)
|
|
|
+ .set(IsJobTicketLock::getFromHardwareId, null)
|
|
|
+ .set(IsJobTicketLock::getLockStatus, LockStatusEnum.WAIT_TAKE.status));
|
|
|
+ } else if (lockStateByNfc.equals(1)) {
|
|
|
+ // 1-上锁取了钥匙(不可锁)
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ iIsJobTicketLockService.update(Wrappers.<IsJobTicketLock>lambdaUpdate()
|
|
|
+ .eq(IsJobTicketLock::getTicketId, dto.getTicketId())
|
|
|
+ .eq(IsJobTicketLock::getLockId, lock.getLockId())
|
|
|
+ .set(IsJobTicketLock::getToHardwareId, isHardware.getId())
|
|
|
+ .set(IsJobTicketLock::getLockStatus, LockStatusEnum.RETURN_LOCK.status));
|
|
|
+ }
|
|
|
} else {
|
|
|
// 2.2不登陆状态下归还
|
|
|
// 查一下哪个作业票用了这个挂锁,而且还没有完成
|
|
|
@@ -386,11 +400,26 @@ public class HardwareApiServiceImpl implements HardwareApiService {
|
|
|
log.error("当前挂锁未找到关联的作业票, nfc: {}, name : {}", dto.getLockNfc(), lock.getLockName());
|
|
|
return null;
|
|
|
} else if (jobTicketLockList.size() == 1) {
|
|
|
- // 说明找到的就是
|
|
|
- iIsJobTicketLockService.update(Wrappers.<IsJobTicketLock>lambdaUpdate()
|
|
|
- .eq(IsJobTicketLock::getLockId, lock.getLockId())
|
|
|
- .set(IsJobTicketLock::getToHardwareId, isHardware.getId())
|
|
|
- .set(IsJobTicketLock::getLockStatus, LockStatusEnum.RETURN_LOCK.status));
|
|
|
+ // 2.1登陆后归还, 判断钥匙在哪个阶段,根据不同阶段更新不一样
|
|
|
+ Integer lockStateByNfc = getLockStateByNfc(dto.getLockNfc(), jobTicketLockList.get(0).getTicketId());
|
|
|
+ if (lockStateByNfc.equals(0)) {
|
|
|
+ // 0-上锁未取钥匙(可锁-需更改还锁逻辑)
|
|
|
+ iIsJobTicketLockService.update(Wrappers.<IsJobTicketLock>lambdaUpdate()
|
|
|
+ .eq(IsJobTicketLock::getTicketId, dto.getTicketId())
|
|
|
+ .eq(IsJobTicketLock::getLockId, lock.getLockId())
|
|
|
+ .set(IsJobTicketLock::getLockId, null)
|
|
|
+ .set(IsJobTicketLock::getFromHardwareId, null)
|
|
|
+ .set(IsJobTicketLock::getLockStatus, LockStatusEnum.WAIT_TAKE.status));
|
|
|
+ } else if (lockStateByNfc.equals(1)) {
|
|
|
+ // 1-上锁取了钥匙(不可锁)
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ // 说明找到的就是
|
|
|
+ iIsJobTicketLockService.update(Wrappers.<IsJobTicketLock>lambdaUpdate()
|
|
|
+ .eq(IsJobTicketLock::getLockId, lock.getLockId())
|
|
|
+ .set(IsJobTicketLock::getToHardwareId, isHardware.getId())
|
|
|
+ .set(IsJobTicketLock::getLockStatus, LockStatusEnum.RETURN_LOCK.status));
|
|
|
+ }
|
|
|
} else {
|
|
|
// 出现了多条对应
|
|
|
log.error("当前挂锁找到多条关联的作业票, nfc: {}, name : {}", dto.getLockNfc(), lock.getLockName());
|
|
|
@@ -556,11 +585,11 @@ public class HardwareApiServiceImpl implements HardwareApiService {
|
|
|
|
|
|
/**
|
|
|
* 需要增加上锁还钥匙的时候锁的验证
|
|
|
- * 1)、强制共享锁,交叉点位的锁rfid还钥匙时必须相同
|
|
|
- * 2)、强制多锁,交叉点位的锁rfid还钥匙时必须不同
|
|
|
- * 3)、非强制共享锁,交叉点位的锁rfid还钥匙时可相同
|
|
|
- *
|
|
|
- * 上锁后还钥匙
|
|
|
+ * 1)、强制共享锁,交叉点位的锁rfid还钥匙时必须相同
|
|
|
+ * 2)、强制多锁,交叉点位的锁rfid还钥匙时必须不同
|
|
|
+ * 3)、非强制共享锁,交叉点位的锁rfid还钥匙时可相同
|
|
|
+ * <p>
|
|
|
+ * 上锁后还钥匙
|
|
|
*/
|
|
|
private void checkBeforeLockKeyBack(String type, IsIsolationPoint point, IsLock lock) {
|
|
|
if (type.equals("1")) {
|
|
|
@@ -839,13 +868,13 @@ public class HardwareApiServiceImpl implements HardwareApiService {
|
|
|
}
|
|
|
}
|
|
|
}*/
|
|
|
- // 查找点位相同并且用了同一个锁没有解锁的作业点位(存在虚拟锁的冲突点位)
|
|
|
- for (JobTicketPointsVO jobTicketPointsVO : ticketPointsVOList) {
|
|
|
- List<IsJobTicketPoints> virtualLockConflictPoint = iIsJobTicketPointsService.getVirtualLockConflictPoint(jobTicketPointsVO.getPointId(), jobTicketPointsVO.getLockId(), jobTicketPointsVO.getTicketId());
|
|
|
- if (!virtualLockConflictPoint.isEmpty()) {
|
|
|
- noUnlockTicketPointsVOSet.add(jobTicketPointsVO);
|
|
|
- }
|
|
|
+ // 查找点位相同并且用了同一个锁没有解锁的作业点位(存在虚拟锁的冲突点位)
|
|
|
+ for (JobTicketPointsVO jobTicketPointsVO : ticketPointsVOList) {
|
|
|
+ List<IsJobTicketPoints> virtualLockConflictPoint = iIsJobTicketPointsService.getVirtualLockConflictPoint(jobTicketPointsVO.getPointId(), jobTicketPointsVO.getLockId(), jobTicketPointsVO.getTicketId());
|
|
|
+ if (!virtualLockConflictPoint.isEmpty()) {
|
|
|
+ noUnlockTicketPointsVOSet.add(jobTicketPointsVO);
|
|
|
}
|
|
|
+ }
|
|
|
// }
|
|
|
|
|
|
// 8.组装数据
|
|
|
@@ -1168,4 +1197,49 @@ public class HardwareApiServiceImpl implements HardwareApiService {
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断挂锁关联作业处于哪个阶段 0-上锁未取钥匙(可锁-需更改还锁逻辑) 1-上锁取了钥匙(不可锁) 2-上锁归还了钥匙(可锁) 3-解锁取了钥匙(可锁) 4-解锁归还了钥匙(可锁) 5-和作业无关(可锁)
|
|
|
+ *
|
|
|
+ * @param nfc
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Integer getLockStateByNfc(String nfc, Long ticketId) {
|
|
|
+ Assert.notBlank(nfc, "该锁nfc不能为空!");
|
|
|
+ // 查询当前锁是否存在
|
|
|
+ IsLock lock = iIsLockService.getOne(Wrappers.<IsLock>lambdaQuery()
|
|
|
+ .eq(IsLock::getLockNfc, nfc));
|
|
|
+ Assert.isFalse(lock == null, nfc + "对应的挂锁数据不存在!");
|
|
|
+ // 查询这个挂锁有没有不是完成或者取消的作业,然后判断作业能不能
|
|
|
+ IsJobTicketLock lockJobByBfc = iIsJobTicketLockService.getLockJobByBfc(nfc, ticketId);
|
|
|
+ if (lockJobByBfc != null) {
|
|
|
+ // 判断作业到了什么阶段
|
|
|
+ // 获取上锁时钥匙的最新一条数据
|
|
|
+ IsJobTicketKey lockLast = iIsJobTicketKeyService.getOne(Wrappers.<IsJobTicketKey>lambdaQuery()
|
|
|
+ .eq(IsJobTicketKey::getTicketId, lockJobByBfc.getTicketId())
|
|
|
+ .eq(IsJobTicketKey::getTicketType, 0)
|
|
|
+ .orderByDesc(IsJobTicketKey::getRecordId)
|
|
|
+ .last("limit 1"));
|
|
|
+ // 获取解锁时钥匙的最新一条数据
|
|
|
+ IsJobTicketKey unlockLast = iIsJobTicketKeyService.getOne(Wrappers.<IsJobTicketKey>lambdaQuery()
|
|
|
+ .eq(IsJobTicketKey::getTicketId, lockJobByBfc.getTicketId())
|
|
|
+ .eq(IsJobTicketKey::getTicketType, 1)
|
|
|
+ .orderByDesc(IsJobTicketKey::getRecordId)
|
|
|
+ .last("limit 1"));
|
|
|
+ // 判断阶段
|
|
|
+ if (lockLast.getKeyStatus().equals("0")) {
|
|
|
+ return 0;
|
|
|
+ } else if (lockLast.getKeyStatus().equals("1")) {
|
|
|
+ return 1;
|
|
|
+ } else if (lockLast.getKeyStatus().equals("2") && unlockLast.getKeyStatus().equals("0")) {
|
|
|
+ return 2;
|
|
|
+ } else if (unlockLast.getKeyStatus().equals("1")) {
|
|
|
+ return 3;
|
|
|
+ } else if (unlockLast.getKeyStatus().equals("2")) {
|
|
|
+ return 4;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return 5;
|
|
|
+ }
|
|
|
}
|