|
|
@@ -8,15 +8,17 @@ import com.ktg.iscs.domain.*;
|
|
|
import com.ktg.iscs.domain.dto.hardwareApi.*;
|
|
|
import com.ktg.iscs.domain.enums.*;
|
|
|
import com.ktg.iscs.domain.vo.hardwareApi.*;
|
|
|
+import com.ktg.iscs.domain.vo.ticket.JobTicketDetailVO;
|
|
|
import com.ktg.iscs.domain.vo.ticket.JobTicketUpdateProgressReqVO;
|
|
|
+import com.ktg.iscs.domain.vo.ticketPoints.IsJobTicketPointsVO;
|
|
|
import com.ktg.iscs.service.*;
|
|
|
+import com.sun.org.apache.bcel.internal.generic.NEW;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
@@ -53,6 +55,8 @@ public class HardwareApiServiceImpl implements HardwareApiService {
|
|
|
@Autowired
|
|
|
private IIsJobCardService iIsJobCardService;
|
|
|
@Autowired
|
|
|
+ private IIsJobTicketStepService iIsJobTicketStepService;
|
|
|
+ @Autowired
|
|
|
private IIsSystemAttributeService isSystemAttributeService;
|
|
|
// @Value("${ktg-mes.jtcolocker}")
|
|
|
// private String jtcolocker;
|
|
|
@@ -589,6 +593,21 @@ public class HardwareApiServiceImpl implements HardwareApiService {
|
|
|
@Override
|
|
|
public JobTicketVO selectTicketDetailById(Long ticketId) {
|
|
|
Assert.notNull(ticketId, "作业票id不可为空!");
|
|
|
+ // 0.作业前检查
|
|
|
+ List<IsJobTicketStep> steps = iIsJobTicketStepService.list(Wrappers.<IsJobTicketStep>lambdaQuery()
|
|
|
+ .eq(IsJobTicketStep::getTicketId, ticketId));
|
|
|
+ IsJobTicketStep isJobTicketStep3 = steps.stream().filter(o -> o.getStepIndex().equals(3)).collect(Collectors.toList()).get(0);
|
|
|
+ IsJobTicketStep isJobTicketStep4 = steps.stream().filter(o -> o.getStepIndex().equals(4)).collect(Collectors.toList()).get(0);
|
|
|
+ IsJobTicketStep isJobTicketStep6 = steps.stream().filter(o -> o.getStepIndex().equals(6)).collect(Collectors.toList()).get(0);
|
|
|
+ IsJobTicketStep isJobTicketStep7 = steps.stream().filter(o -> o.getStepIndex().equals(7)).collect(Collectors.toList()).get(0);
|
|
|
+ if (isJobTicketStep3.getStepStatus().equals("1") && isJobTicketStep4.getStepStatus().equals("0")) {
|
|
|
+ // 则是去上锁
|
|
|
+ checkBeforeToLock(ticketId);
|
|
|
+ }
|
|
|
+ if (isJobTicketStep6.getStepStatus().equals("1") && isJobTicketStep7.getStepStatus().equals("0")) {
|
|
|
+ // 则是去上锁
|
|
|
+ checkBeforeToUnlock(ticketId);
|
|
|
+ }
|
|
|
// 1.查询作业票信息
|
|
|
IsJobTicket isJobTicket = isJobTicketService.getById(ticketId);
|
|
|
Assert.notNull(isJobTicket, "作业票信息丢失!");
|
|
|
@@ -614,12 +633,32 @@ public class HardwareApiServiceImpl implements HardwareApiService {
|
|
|
List<IsJobTicketPoints> jobTicketPointsList = iIsJobTicketPointsService.list(Wrappers.<IsJobTicketPoints>lambdaQuery()
|
|
|
.eq(IsJobTicketPoints::getTicketId, ticketId));
|
|
|
List<JobTicketPointsVO> ticketPointsVOList = BeanUtils.toBean(jobTicketPointsList, JobTicketPointsVO.class);
|
|
|
- // 5.组装数据
|
|
|
+ // 7.解锁时,提供的不可解锁的点位数据
|
|
|
+ Set<JobTicketPointsVO> noUnlockTicketPointsVOSet = new HashSet<>();
|
|
|
+ List<Long> points = ticketPointsVOList.stream().map(JobTicketPointsVO::getPointId).collect(Collectors.toList());
|
|
|
+ List<JobTicketDetailVO> jobTicketDetailVOS2 = isJobTicketService.selectConflictTicket2(points, ticketId);
|
|
|
+ if (!jobTicketDetailVOS2.isEmpty()) {
|
|
|
+ // 代表存在不可解除的点位,查询出来
|
|
|
+ List<Long> longList = jobTicketDetailVOS2.stream().map(JobTicketDetailVO::getTicketId).collect(Collectors.toList());
|
|
|
+ List<IsJobTicketPoints> list = iIsJobTicketPointsService.list(Wrappers.<IsJobTicketPoints>lambdaQuery()
|
|
|
+ .in(IsJobTicketPoints::getTicketId, longList));
|
|
|
+ // 可能有多个作业多个点位,去重一下
|
|
|
+ Set<IsJobTicketPoints> set = new HashSet<>(list);
|
|
|
+ for (JobTicketPointsVO isJobTicketPoints : ticketPointsVOList) {
|
|
|
+ for (IsJobTicketPoints jobTicketPoints : set) {
|
|
|
+ if (isJobTicketPoints.getPointId().equals(jobTicketPoints.getPointId())) {
|
|
|
+ noUnlockTicketPointsVOSet.add(isJobTicketPoints);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 8.组装数据
|
|
|
jobTicketVO.setTicketKeyVOList(ticketKeyVOList);
|
|
|
jobTicketVO.setTicketLockVOList(ticketLockVOList);
|
|
|
jobTicketVO.setTicketLocksetVOList(ticketLocksetVOList);
|
|
|
jobTicketVO.setTicketUserVOList(ticketUserVOList);
|
|
|
jobTicketVO.setTicketPointsVOList(ticketPointsVOList);
|
|
|
+ jobTicketVO.setNoUnlockTicketPointsVOSet(noUnlockTicketPointsVOSet);
|
|
|
return jobTicketVO;
|
|
|
}
|
|
|
|
|
|
@@ -659,4 +698,76 @@ public class HardwareApiServiceImpl implements HardwareApiService {
|
|
|
.eq(IsIsolationPoint::getPointNfc, dto.getPointNfc())
|
|
|
.set(IsIsolationPoint::getSwitchStatus, dto.getSwitchStatus()));
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Boolean checkBeforeToLock(Long ticketId) {
|
|
|
+ Assert.notNull(ticketId, "当前作业票id不能为空!");
|
|
|
+ // 1.查询当前作业票需要上锁的点位信息
|
|
|
+ List<IsJobTicketPoints> listByTicketId = iIsJobTicketPointsService.list(Wrappers.<IsJobTicketPoints>lambdaQuery()
|
|
|
+ .eq(IsJobTicketPoints::getTicketId, ticketId));
|
|
|
+ if (!listByTicketId.isEmpty()) {
|
|
|
+ // 如果存在冲突的作业,检查下到了哪个阶段(取了钥匙上锁还未归还、上锁钥匙已归还、取了钥匙去解锁未归还、解锁完成钥匙已归还)
|
|
|
+ List<Long> points = listByTicketId.stream().map(IsJobTicketPoints::getPointId).collect(Collectors.toList());
|
|
|
+ // 2.如果有重复点位,取了钥匙去上锁没有归还的作业
|
|
|
+ List<JobTicketDetailVO> jobTicketDetailVOS1 = isJobTicketService.selectConflictTicket1(points, ticketId);
|
|
|
+ if (!jobTicketDetailVOS1.isEmpty()) {
|
|
|
+ Assert.isFalse(true, "请等待作业票[" + jobTicketDetailVOS1.get(0).getTicketName() + "]上锁完成!");
|
|
|
+ }
|
|
|
+ // 3.如果上锁钥匙已经归还,需要使用别人的数据帮我们的重复点位上锁了
|
|
|
+ // 找到别人已经上锁的并且没有解锁的,而且点位和我重复的
|
|
|
+ List<JobTicketDetailVO> jobTicketDetailVOS2 = isJobTicketService.selectConflictTicket2(points, ticketId);
|
|
|
+ if (!jobTicketDetailVOS2.isEmpty()) {
|
|
|
+ List<Long> longList = jobTicketDetailVOS2.stream().map(JobTicketDetailVO::getTicketId).collect(Collectors.toList());
|
|
|
+ List<IsJobTicketPoints> list = iIsJobTicketPointsService.list(Wrappers.<IsJobTicketPoints>lambdaQuery()
|
|
|
+ .in(IsJobTicketPoints::getTicketId, longList));
|
|
|
+ // 可能有多个作业多个点位,去重一下
|
|
|
+ Set<IsJobTicketPoints> set = new HashSet<>(list);
|
|
|
+ for (IsJobTicketPoints isJobTicketPoints : listByTicketId) {
|
|
|
+ for (IsJobTicketPoints jobTicketPoints : set) {
|
|
|
+ if (isJobTicketPoints.getPointId().equals(jobTicketPoints.getPointId())) {
|
|
|
+ // isJobTicketPoints.setWorkshopId();
|
|
|
+ // isJobTicketPoints.setWorkareaId();
|
|
|
+ // isJobTicketPoints.setPointId();
|
|
|
+ isJobTicketPoints.setPointStatus(jobTicketPoints.getPointStatus());
|
|
|
+ isJobTicketPoints.setLockId(jobTicketPoints.getLockId());
|
|
|
+ isJobTicketPoints.setLockedByKeyId(jobTicketPoints.getLockedByKeyId());
|
|
|
+ // isJobTicketPoints.setUnlockedByKeyId();
|
|
|
+ isJobTicketPoints.setLockTime(jobTicketPoints.getLockTime());
|
|
|
+ // isJobTicketPoints.setUnlockTime();
|
|
|
+ // isJobTicketPoints.setPrePointId();
|
|
|
+ // isJobTicketPoints.setWorkstationId();
|
|
|
+ // isJobTicketPoints.setMachineryId();
|
|
|
+ iIsJobTicketPointsService.updateById(isJobTicketPoints);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 4.如果别人拿了钥匙去解锁,那我直接弹全部,自己去上锁
|
|
|
+ // 5.如果别人解锁完成归还钥匙,则全部可以弹出去上锁
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Boolean checkBeforeToUnlock(Long ticketId) {
|
|
|
+ Assert.notNull(ticketId, "当前作业票id不能为空!");
|
|
|
+ // 1.查询当前作业票需要解锁的点位信息
|
|
|
+ List<IsJobTicketPoints> listByTicketId = iIsJobTicketPointsService.list(Wrappers.<IsJobTicketPoints>lambdaQuery()
|
|
|
+ .eq(IsJobTicketPoints::getTicketId, ticketId));
|
|
|
+ if (!listByTicketId.isEmpty()) {
|
|
|
+ // 如果存在冲突的作业,检查下到了哪个阶段(取了钥匙上锁还未归还、上锁钥匙已归还、取了钥匙去解锁未归还、解锁完成钥匙已归还)
|
|
|
+ List<Long> points = listByTicketId.stream().map(IsJobTicketPoints::getPointId).collect(Collectors.toList());
|
|
|
+ // 2.如果有重复点位,取了钥匙去上锁没有归还的作业
|
|
|
+ List<JobTicketDetailVO> jobTicketDetailVOS1 = isJobTicketService.selectConflictTicket1(points, ticketId);
|
|
|
+ if (!jobTicketDetailVOS1.isEmpty()) {
|
|
|
+ Assert.isFalse(true, "请等待作业票[" + jobTicketDetailVOS1.get(0).getTicketName() + "]上锁完成!");
|
|
|
+ }
|
|
|
+ // 3.如果取了钥匙去上锁已经归还,代表别的上锁已经完成,我可以解除不是重复的点位,然后手动完成作业,这样别人作业结束以后可以直接解除物理锁
|
|
|
+ List<JobTicketDetailVO> jobTicketDetailVOS2 = isJobTicketService.selectConflictTicket2(points, ticketId);
|
|
|
+ // 4.如果别人取了钥匙去解锁,说明都是去解锁,我可以解全部
|
|
|
+
|
|
|
+ // 5.如果别人解除完了回来完成了作业,我可以解除全部
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
}
|