|
@@ -0,0 +1,449 @@
|
|
|
|
|
+package cn.iocoder.yudao.module.iscs.service.workdesign;
|
|
|
|
|
+
|
|
|
|
|
+import cn.hutool.core.lang.Assert;
|
|
|
|
|
+import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workflowworknode.vo.ApprovalNodeReqVO;
|
|
|
|
|
+import cn.iocoder.yudao.module.iscs.controller.admin.workdesign.workhandle.vo.*;
|
|
|
|
|
+import cn.iocoder.yudao.module.iscs.dal.dataobject.key.KeyDO;
|
|
|
|
|
+import cn.iocoder.yudao.module.iscs.dal.dataobject.mappoint.workdesign.WorkflowWorkLogService;
|
|
|
|
|
+import cn.iocoder.yudao.module.iscs.dal.dataobject.workdesign.*;
|
|
|
|
|
+import cn.iocoder.yudao.module.iscs.service.key.KeyService;
|
|
|
|
|
+import cn.iocoder.yudao.module.iscs.service.lock.LockService;
|
|
|
|
|
+import cn.iocoder.yudao.module.system.service.user.AdminUserService;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
+import org.springframework.validation.annotation.Validated;
|
|
|
|
|
+
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 作业票处理过程 Service 实现类
|
|
|
|
|
+ *
|
|
|
|
|
+ * @author 博士安全
|
|
|
|
|
+ */
|
|
|
|
|
+@Service
|
|
|
|
|
+@Validated
|
|
|
|
|
+@Slf4j
|
|
|
|
|
+public class PDAHandleServiceImpl implements PDAHandleService {
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private WorkflowWorkTicketService ticketService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private WorkflowWorkTicketKeyService keyService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private WorkflowWorkTicketLockService lockService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private WorkflowWorkPointService pointService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private WorkflowWorkNodeUserService nodeUserService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private AdminUserService adminUserService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private WorkflowWorkService workflowWorkService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private WorkflowWorkNodeService workflowWorkNodeService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private KeyService iscsKeyService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private LockService iscsLockService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private WorkflowWorkPointService workflowWorkPointService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private WorkflowWorkLogService workflowWorkLogService;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 点位上锁(归还钥匙)
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param keyBackVO
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ @Transactional
|
|
|
|
|
+ public BackDataVO updatePointLock(PDAKeyBackVO keyBackVO) {
|
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
+ List<PointLockVO> list = keyBackVO.getList();
|
|
|
|
|
+ BackDataVO backDataVO = new BackDataVO();
|
|
|
|
|
+ KeyDO keyDO = iscsKeyService.getOne(Wrappers.<KeyDO>lambdaQuery().eq(KeyDO::getKeyNfc, keyBackVO.getKeyNfc()));
|
|
|
|
|
+ try {
|
|
|
|
|
+ if (keyDO == null || list.isEmpty()) {
|
|
|
|
|
+ // 如果没有任务,则直接返回
|
|
|
|
|
+ backDataVO.setWorkName("无作业");
|
|
|
|
|
+ backDataVO.setNodeName("无任务");
|
|
|
|
|
+ backDataVO.setOrderNo(null);
|
|
|
|
|
+ backDataVO.setInitiatorName(null);
|
|
|
|
|
+ backDataVO.setHardwareName(keyDO != null ? keyDO.getKeyName() : "无法识别的钥匙");
|
|
|
|
|
+ backDataVO.setBackDesc("归还成功");
|
|
|
|
|
+ backDataVO.setBackStatus("1");
|
|
|
|
|
+ backDataVO.setOperationTime(now);
|
|
|
|
|
+ return backDataVO;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ Long nodeId = list.get(0).getNodeId();
|
|
|
|
|
+ WorkflowWorkNodeDO nodeDO = workflowWorkNodeService.getById(nodeId);
|
|
|
|
|
+ WorkflowWorkDO workflowWorkDO = workflowWorkService.getById(nodeDO.getWorkId());
|
|
|
|
|
+ List<WorkflowWorkPointDO> list1 = workflowWorkPointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
|
|
|
|
|
+ .eq(WorkflowWorkPointDO::getNodeId, nodeId));
|
|
|
|
|
+ if (list1.isEmpty() || list1.size() != list.size()) {
|
|
|
|
|
+ // 检测作业有没有完成,没有完成提示归还失败
|
|
|
|
|
+ backDataVO.setWorkName(workflowWorkDO.getName());
|
|
|
|
|
+ backDataVO.setNodeName(workflowWorkDO.getName());
|
|
|
|
|
+ backDataVO.setOrderNo(workflowWorkDO.getOrderNo());
|
|
|
|
|
+ backDataVO.setInitiatorName(workflowWorkDO.getInitiatorName());
|
|
|
|
|
+ backDataVO.setHardwareName(keyDO.getKeyName());
|
|
|
|
|
+ backDataVO.setBackDesc("归还失败(任务未完成)");
|
|
|
|
|
+ backDataVO.setBackStatus("0");
|
|
|
|
|
+ backDataVO.setOperationTime(LocalDateTime.now());
|
|
|
|
|
+ return backDataVO;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ backDataVO.setWorkName(workflowWorkDO.getName());
|
|
|
|
|
+ backDataVO.setNodeName(workflowWorkDO.getName());
|
|
|
|
|
+ backDataVO.setOrderNo(workflowWorkDO.getOrderNo());
|
|
|
|
|
+ backDataVO.setInitiatorName(workflowWorkDO.getInitiatorName());
|
|
|
|
|
+ backDataVO.setHardwareName(keyDO.getKeyName());
|
|
|
|
|
+ backDataVO.setBackDesc("归还成功");
|
|
|
|
|
+ backDataVO.setBackStatus("1");
|
|
|
|
|
+ backDataVO.setOperationTime(LocalDateTime.now());
|
|
|
|
|
+
|
|
|
|
|
+ for (PointLockVO vo : list) {
|
|
|
|
|
+ // Assert.notBlank(vo.getPointNfc(), "pointNfc不可为空");
|
|
|
|
|
+ // Assert.notBlank(vo.getLockNfc(), "lockNfc不可为空");
|
|
|
|
|
+ if (StringUtils.isNotBlank(vo.getPointNfc())
|
|
|
|
|
+ && StringUtils.isNotBlank(vo.getLockNfc())
|
|
|
|
|
+ && vo.getClosed().equals(1)) {
|
|
|
|
|
+ pointService.update(Wrappers.<WorkflowWorkPointDO>lambdaUpdate()
|
|
|
|
|
+ .eq(WorkflowWorkPointDO::getNodeId, vo.getNodeId())
|
|
|
|
|
+ .eq(WorkflowWorkPointDO::getPointNfc, vo.getPointNfc())
|
|
|
|
|
+ .set(WorkflowWorkPointDO::getLockNfc, vo.getLockNfc())
|
|
|
|
|
+ .set(WorkflowWorkPointDO::getLockTime, now)
|
|
|
|
|
+ .set(WorkflowWorkPointDO::getStatus, "1"));
|
|
|
|
|
+
|
|
|
|
|
+ lockService.update(Wrappers.<WorkflowWorkTicketLockDO>lambdaUpdate()
|
|
|
|
|
+ .eq(WorkflowWorkTicketLockDO::getNodeId, vo.getNodeId())
|
|
|
|
|
+ .eq(WorkflowWorkTicketLockDO::getLockNfc, vo.getLockNfc())
|
|
|
|
|
+ .set(WorkflowWorkTicketLockDO::getLockStatus, "2"));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // 检测上锁完成,更改上锁人状态
|
|
|
|
|
+ List<WorkflowWorkPointDO> unclockPoints = pointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
|
|
|
|
|
+ .eq(WorkflowWorkPointDO::getNodeId, nodeId)
|
|
|
|
|
+ .eq(WorkflowWorkPointDO::getStatus, "0"));
|
|
|
|
|
+ List<WorkflowWorkNodeUserDO> list2 = new ArrayList<>();
|
|
|
|
|
+ if (unclockPoints.isEmpty()) {
|
|
|
|
|
+ // 说明全部点位上锁完成,可以更新上锁人状态
|
|
|
|
|
+ nodeUserService.update(Wrappers.<WorkflowWorkNodeUserDO>lambdaUpdate()
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getNodeId, nodeId)
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getType, "jtlocker")
|
|
|
|
|
+ .set(WorkflowWorkNodeUserDO::getStatus, "1")
|
|
|
|
|
+ .set(WorkflowWorkNodeUserDO::getLockTime, now));
|
|
|
|
|
+ // 更新nodeProgress
|
|
|
|
|
+ workflowWorkNodeService.update(Wrappers.<WorkflowWorkNodeDO>lambdaUpdate()
|
|
|
|
|
+ .eq(WorkflowWorkNodeDO::getId, nodeDO.getId())
|
|
|
|
|
+ .set(WorkflowWorkNodeDO::getNodeProgress, "3"));
|
|
|
|
|
+ // 发送消息
|
|
|
|
|
+ workflowWorkNodeService.sendMessageToAdmin(nodeDO.getId());
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ // 检测有没有共锁人共锁操作,没有直接跳过
|
|
|
|
|
+ list2 = nodeUserService.list(Wrappers.<WorkflowWorkNodeUserDO>lambdaQuery()
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getNodeId, nodeId)
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getType, "jtcolocker")
|
|
|
|
|
+ .ne(WorkflowWorkNodeUserDO::getStatus, "1"));
|
|
|
|
|
+ if (list2.isEmpty()) {
|
|
|
|
|
+ // 说明没有共锁人需求或者全部共锁完成,可以审批节点
|
|
|
|
|
+ ApprovalNodeReqVO approvalNodeReqVO = new ApprovalNodeReqVO();
|
|
|
|
|
+ approvalNodeReqVO.setNodeId(nodeId);
|
|
|
|
|
+ approvalNodeReqVO.setApprovalStatus("approved");
|
|
|
|
|
+ approvalNodeReqVO.setApprovalOpinion("approved");
|
|
|
|
|
+ workflowWorkService.updateNodeApproval(approvalNodeReqVO);
|
|
|
|
|
+ // 并且直接开启解锁节点的第二步骤,省略第一步骤的解除共锁操作
|
|
|
|
|
+ workflowWorkNodeService.update(Wrappers.<WorkflowWorkNodeDO>lambdaUpdate()
|
|
|
|
|
+ .eq(WorkflowWorkNodeDO::getWorkId, nodeDO.getWorkId())
|
|
|
|
|
+ .eq(WorkflowWorkNodeDO::getIsolationNodeUuid, nodeDO.getUuid())
|
|
|
|
|
+ .set(WorkflowWorkNodeDO::getNodeProgress, "2"));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 帮助归还钥匙
|
|
|
|
|
+ String keyNfc = keyBackVO.getKeyNfc();
|
|
|
|
|
+ if (StringUtils.isNotBlank(keyNfc)) {
|
|
|
|
|
+ // PDA需要判断是否全部上锁完成,完成才可以归还
|
|
|
|
|
+ if (unclockPoints.isEmpty()) {
|
|
|
|
|
+ // 开始归还钥匙
|
|
|
|
|
+ keyService.update(Wrappers.<WorkflowWorkTicketKeyDO>lambdaUpdate()
|
|
|
|
|
+ .eq(WorkflowWorkTicketKeyDO::getNodeId, nodeId)
|
|
|
|
|
+ .eq(WorkflowWorkTicketKeyDO::getKeyNfc, keyNfc)
|
|
|
|
|
+ .set(WorkflowWorkTicketKeyDO::getKeyStatus, "2")
|
|
|
|
|
+ .set(WorkflowWorkTicketKeyDO::getToHardwareCode, keyBackVO.getHardwareCode())
|
|
|
|
|
+ .set(WorkflowWorkTicketKeyDO::getGiveBackTime, now));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!list2.isEmpty()) {
|
|
|
|
|
+ // 如果list2是空的则在updateNodeApproval中被记录
|
|
|
|
|
+ // isc_workflow_work_log日志记录
|
|
|
|
|
+ workflowWorkLogService.createWorkflowWorkLog(nodeDO.getId(), "2");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("发生异常{}", e);
|
|
|
|
|
+ backDataVO.setWorkName(null);
|
|
|
|
|
+ backDataVO.setNodeName(null);
|
|
|
|
|
+ backDataVO.setOrderNo(null);
|
|
|
|
|
+ backDataVO.setInitiatorName(null);
|
|
|
|
|
+ backDataVO.setHardwareName(keyDO != null ? keyDO.getKeyName() : "无法识别的钥匙");
|
|
|
|
|
+ backDataVO.setBackDesc(null);
|
|
|
|
|
+ backDataVO.setBackStatus("1");
|
|
|
|
|
+ backDataVO.setOperationTime(now);
|
|
|
|
|
+ return backDataVO;
|
|
|
|
|
+ }
|
|
|
|
|
+ return backDataVO;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ @Transactional
|
|
|
|
|
+ public BackDataVO updatePointUnlock(PDAKeyBackVO keyBackVO) {
|
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
+ List<PointLockVO> list = keyBackVO.getList();
|
|
|
|
|
+ BackDataVO backDataVO = new BackDataVO();
|
|
|
|
|
+ KeyDO keyDO = iscsKeyService.getOne(Wrappers.<KeyDO>lambdaQuery().eq(KeyDO::getKeyNfc, keyBackVO.getKeyNfc()));
|
|
|
|
|
+ try {
|
|
|
|
|
+ if (keyDO == null || list.isEmpty()) {
|
|
|
|
|
+ // 如果没有任务,则直接返回
|
|
|
|
|
+ backDataVO.setWorkName("无作业");
|
|
|
|
|
+ backDataVO.setNodeName("无任务");
|
|
|
|
|
+ backDataVO.setOrderNo(null);
|
|
|
|
|
+ backDataVO.setInitiatorName(null);
|
|
|
|
|
+ backDataVO.setHardwareName(keyDO != null ? keyDO.getKeyName() : "无法识别的钥匙");
|
|
|
|
|
+ backDataVO.setBackDesc("归还成功");
|
|
|
|
|
+ backDataVO.setBackStatus("1");
|
|
|
|
|
+ backDataVO.setOperationTime(now);
|
|
|
|
|
+ return backDataVO;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ Long nodeId = keyBackVO.getList().get(0).getNodeId();
|
|
|
|
|
+ Long fatherNodeId = 0L;
|
|
|
|
|
+ Assert.notNull(nodeId, "nodeId不可为空");
|
|
|
|
|
+ WorkflowWorkNodeDO byId = workflowWorkNodeService.getById(nodeId);
|
|
|
|
|
+ if (StringUtils.isNotBlank(byId.getIsolationNodeUuid())) {
|
|
|
|
|
+ // 如果是解除节点的查询操作,则查询对应隔离节点的数据
|
|
|
|
|
+ WorkflowWorkNodeDO one = workflowWorkNodeService.getOne(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
|
|
|
|
|
+ .eq(WorkflowWorkNodeDO::getWorkId, byId.getWorkId())
|
|
|
|
|
+ .eq(WorkflowWorkNodeDO::getUuid, byId.getIsolationNodeUuid()));
|
|
|
|
|
+ fatherNodeId = one.getId();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ WorkflowWorkDO workflowWorkDO = workflowWorkService.getById(byId.getWorkId());
|
|
|
|
|
+ List<WorkflowWorkPointDO> list1 = workflowWorkPointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
|
|
|
|
|
+ .eq(WorkflowWorkPointDO::getNodeId, fatherNodeId));
|
|
|
|
|
+
|
|
|
|
|
+ // 检查是不是所有人都已经解除共锁
|
|
|
|
|
+ Boolean b = pointUnlockCheck(fatherNodeId);
|
|
|
|
|
+ if (!b || list1.isEmpty() || list1.size() != list.size()) {
|
|
|
|
|
+ // 检测作业有没有完成,没有完成提示归还失败
|
|
|
|
|
+ backDataVO.setWorkName(workflowWorkDO.getName());
|
|
|
|
|
+ backDataVO.setNodeName(workflowWorkDO.getName());
|
|
|
|
|
+ backDataVO.setOrderNo(workflowWorkDO.getOrderNo());
|
|
|
|
|
+ backDataVO.setInitiatorName(workflowWorkDO.getInitiatorName());
|
|
|
|
|
+ backDataVO.setHardwareName(keyDO.getKeyName());
|
|
|
|
|
+ backDataVO.setBackDesc("归还失败(任务未完成)");
|
|
|
|
|
+ backDataVO.setBackStatus("0");
|
|
|
|
|
+ backDataVO.setOperationTime(LocalDateTime.now());
|
|
|
|
|
+ return backDataVO;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ backDataVO.setWorkName(workflowWorkDO.getName());
|
|
|
|
|
+ backDataVO.setNodeName(workflowWorkDO.getName());
|
|
|
|
|
+ backDataVO.setOrderNo(workflowWorkDO.getOrderNo());
|
|
|
|
|
+ backDataVO.setInitiatorName(workflowWorkDO.getInitiatorName());
|
|
|
|
|
+ backDataVO.setHardwareName(keyDO.getKeyName());
|
|
|
|
|
+ backDataVO.setBackDesc("归还成功");
|
|
|
|
|
+ backDataVO.setBackStatus("1");
|
|
|
|
|
+ backDataVO.setOperationTime(LocalDateTime.now());
|
|
|
|
|
+ for (PointLockVO vo : keyBackVO.getList()) {
|
|
|
|
|
+ Assert.notBlank(vo.getPointNfc(), "pointNfc不可为空");
|
|
|
|
|
+ if (StringUtils.isNotBlank(vo.getPointNfc())
|
|
|
|
|
+ && StringUtils.isNotBlank(vo.getLockNfc())
|
|
|
|
|
+ && vo.getClosed().equals(1)) {
|
|
|
|
|
+ // closed = 1 说明这个点位解锁任务操作完成
|
|
|
|
|
+ pointService.update(Wrappers.<WorkflowWorkPointDO>lambdaUpdate()
|
|
|
|
|
+ .eq(WorkflowWorkPointDO::getNodeId, fatherNodeId)
|
|
|
|
|
+ .eq(WorkflowWorkPointDO::getPointNfc, vo.getPointNfc())
|
|
|
|
|
+ .set(WorkflowWorkPointDO::getUnlockTime, now)
|
|
|
|
|
+ .set(WorkflowWorkPointDO::getStatus, "2"));
|
|
|
|
|
+ lockService.update(Wrappers.<WorkflowWorkTicketLockDO>lambdaUpdate()
|
|
|
|
|
+ .eq(WorkflowWorkTicketLockDO::getNodeId, fatherNodeId)
|
|
|
|
|
+ .eq(WorkflowWorkTicketLockDO::getLockNfc, vo.getLockNfc())
|
|
|
|
|
+ .set(WorkflowWorkTicketLockDO::getLockStatus, "4"));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 检测解除共锁(未解除不可解锁,前面pointUnlockCheck判断了现在不用判断了)和点位解锁是否完成
|
|
|
|
|
+ Boolean b1 = checkBackAutoApproval(nodeId, fatherNodeId);
|
|
|
|
|
+
|
|
|
|
|
+ // 帮助归还钥匙
|
|
|
|
|
+ String keyNfc = keyBackVO.getKeyNfc();
|
|
|
|
|
+ if (StringUtils.isNotBlank(keyNfc)) {
|
|
|
|
|
+ // PDA需要检测是不是全部解锁完成,全部解锁完成了才算归还
|
|
|
|
|
+ if (b1) {
|
|
|
|
|
+ // 开始归还钥匙
|
|
|
|
|
+ keyService.update(Wrappers.<WorkflowWorkTicketKeyDO>lambdaUpdate()
|
|
|
|
|
+ .eq(WorkflowWorkTicketKeyDO::getNodeId, nodeId)
|
|
|
|
|
+ .eq(WorkflowWorkTicketKeyDO::getKeyNfc, keyNfc)
|
|
|
|
|
+ .set(WorkflowWorkTicketKeyDO::getKeyStatus, "2")
|
|
|
|
|
+ .set(WorkflowWorkTicketKeyDO::getToHardwareCode, keyBackVO.getHardwareCode())
|
|
|
|
|
+ .set(WorkflowWorkTicketKeyDO::getGiveBackTime, now));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // isc_workflow_work_log日志记录
|
|
|
|
|
+ // workflowWorkLogService.createWorkflowWorkLog(nodeId, "1");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("发生异常{}", e);
|
|
|
|
|
+ backDataVO.setWorkName(null);
|
|
|
|
|
+ backDataVO.setNodeName(null);
|
|
|
|
|
+ backDataVO.setOrderNo(null);
|
|
|
|
|
+ backDataVO.setInitiatorName(null);
|
|
|
|
|
+ backDataVO.setHardwareName(keyDO != null ? keyDO.getKeyName() : "无法识别的钥匙");
|
|
|
|
|
+ backDataVO.setBackDesc(null);
|
|
|
|
|
+ backDataVO.setBackStatus("1");
|
|
|
|
|
+ backDataVO.setOperationTime(now);
|
|
|
|
|
+ return backDataVO;
|
|
|
|
|
+ }
|
|
|
|
|
+ return backDataVO;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 检测点位是不是全部解锁,如果是,自动审批当前节点
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param nodeId 解除隔离节点的nodeId
|
|
|
|
|
+ * @param fatherNodeId 隔离节点的nodeId
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ private Boolean checkBackAutoApproval(Long nodeId, Long fatherNodeId) {
|
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
+ // 检测点位是不是全部解锁完成
|
|
|
|
|
+ List<WorkflowWorkPointDO> list = pointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
|
|
|
|
|
+ .eq(WorkflowWorkPointDO::getNodeId, nodeId)
|
|
|
|
|
+ .ne(WorkflowWorkPointDO::getStatus, "2"));
|
|
|
|
|
+ if (!list.isEmpty()) {
|
|
|
|
|
+ // 说明没有全部解锁
|
|
|
|
|
+ return false;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 说明全部解锁,同时更新上锁人解锁完成状态
|
|
|
|
|
+ nodeUserService.update(Wrappers.<WorkflowWorkNodeUserDO>lambdaUpdate()
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getNodeId, fatherNodeId)
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getType, "jtlocker")
|
|
|
|
|
+ .set(WorkflowWorkNodeUserDO::getStatus, "2")
|
|
|
|
|
+ .set(WorkflowWorkNodeUserDO::getUnlockTime, now));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /*// 检测挂锁是不是还了
|
|
|
|
|
+ List<WorkflowWorkTicketLockDO> list2 = lockService.list(Wrappers.<WorkflowWorkTicketLockDO>lambdaQuery()
|
|
|
|
|
+ .eq(WorkflowWorkTicketLockDO::getNodeId, fatherNodeId)
|
|
|
|
|
+ .ne(WorkflowWorkTicketLockDO::getLockStatus, "5"));
|
|
|
|
|
+ if (!list2.isEmpty()) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }*/
|
|
|
|
|
+
|
|
|
|
|
+ // 全部解锁完成开始审批
|
|
|
|
|
+ ApprovalNodeReqVO approvalNodeReqVO = new ApprovalNodeReqVO();
|
|
|
|
|
+ approvalNodeReqVO.setNodeId(nodeId);
|
|
|
|
|
+ approvalNodeReqVO.setApprovalStatus("approved");
|
|
|
|
|
+ approvalNodeReqVO.setApprovalOpinion("approved");
|
|
|
|
|
+ workflowWorkService.updateNodeApproval(approvalNodeReqVO);
|
|
|
|
|
+
|
|
|
|
|
+ // isc_workflow_work_log日志记录
|
|
|
|
|
+ // updateNodeApproval方法种已经记录,防止多次记录
|
|
|
|
|
+ // workflowWorkLogService.createWorkflowWorkLog(nodeId, null);
|
|
|
|
|
+
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private Boolean pointUnlockCheck(Long nodeId) {
|
|
|
|
|
+ // 检查是不是所有人都已经解除共锁
|
|
|
|
|
+ List<WorkflowWorkNodeUserDO> list = nodeUserService.list(Wrappers.<WorkflowWorkNodeUserDO>lambdaQuery()
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getNodeId, nodeId)
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getType, "jtcolocker")
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getStatus, "1"));
|
|
|
|
|
+ if (!list.isEmpty()) {
|
|
|
|
|
+ // List<Long> colockUserIds = list.stream().map(WorkflowWorkNodeUserDO::getUserId).toList();
|
|
|
|
|
+ // List<AdminUserDO> userList = adminUserService.getUserList(colockUserIds);
|
|
|
|
|
+ // String colockUserNames = userList.stream().map(AdminUserDO::getNickname).collect(Collectors.joining(","));
|
|
|
|
|
+ // Assert.isTrue(false, colockUserNames + "未解除共锁,暂不可解锁");
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public BackDataVO updateKeyBack(PDAKeyBackVO vo) {
|
|
|
|
|
+ System.out.println("vo----------" + vo);
|
|
|
|
|
+ Assert.notNull(vo.getTarget(), "target不能为空!");
|
|
|
|
|
+ BackDataVO backDataVO = new BackDataVO();
|
|
|
|
|
+ if (vo.getTarget().equals(0)) {
|
|
|
|
|
+ backDataVO = updatePointLock(vo);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (vo.getTarget().equals(1)) {
|
|
|
|
|
+ backDataVO = updatePointUnlock(vo);
|
|
|
|
|
+ }
|
|
|
|
|
+ System.out.println("backDataVO------------" + backDataVO);
|
|
|
|
|
+ return backDataVO;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public List<KeyStatusVO> getKeyStatus(List<String> macs) {
|
|
|
|
|
+ ArrayList<KeyStatusVO> keyStatusVOS = new ArrayList<>();
|
|
|
|
|
+ if (!macs.isEmpty()) {
|
|
|
|
|
+ // 初始化一下
|
|
|
|
|
+ for (String mac : macs) {
|
|
|
|
|
+ KeyStatusVO keyStatusVO = new KeyStatusVO();
|
|
|
|
|
+ keyStatusVO.setMacAddress(mac);
|
|
|
|
|
+ keyStatusVO.setUsageStatus("2");
|
|
|
|
|
+ keyStatusVOS.add(keyStatusVO);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 获取系统内钥匙的信息,考虑可能获取不到的情况
|
|
|
|
|
+ List<KeyDO> keyDOList = iscsKeyService.list(Wrappers.<KeyDO>lambdaQuery()
|
|
|
|
|
+ .in(KeyDO::getMacAddress, macs));
|
|
|
|
|
+ if (!keyDOList.isEmpty()) {
|
|
|
|
|
+ // 获取正在使用的钥匙信息
|
|
|
|
|
+ List<String> keyNfcs = keyDOList.stream().map(KeyDO::getKeyNfc).toList();
|
|
|
|
|
+ List<WorkflowWorkTicketKeyDO> ticketKeyDOS = keyService.list(Wrappers.<WorkflowWorkTicketKeyDO>lambdaQuery()
|
|
|
|
|
+ .in(WorkflowWorkTicketKeyDO::getKeyNfc, keyNfcs)
|
|
|
|
|
+ .eq(WorkflowWorkTicketKeyDO::getKeyStatus, "1"));
|
|
|
|
|
+ // 进行数据封装
|
|
|
|
|
+ for (KeyStatusVO keyStatusVO : keyStatusVOS) {
|
|
|
|
|
+ for (KeyDO keyDO : keyDOList) {
|
|
|
|
|
+ if (StringUtils.isNotBlank(keyDO.getMacAddress()) && keyStatusVO.getMacAddress().equals(keyDO.getMacAddress())) {
|
|
|
|
|
+ keyStatusVO.setId(keyDO.getId());
|
|
|
|
|
+ keyStatusVO.setKeyCode(keyDO.getKeyCode());
|
|
|
|
|
+ keyStatusVO.setKeyName(keyDO.getKeyName());
|
|
|
|
|
+ keyStatusVO.setKeyNfc(keyDO.getKeyNfc());
|
|
|
|
|
+ keyStatusVO.setUsageStatus("0");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ for (WorkflowWorkTicketKeyDO ticketKeyDO : ticketKeyDOS) {
|
|
|
|
|
+ if (StringUtils.isNotBlank(keyStatusVO.getKeyNfc())
|
|
|
|
|
+ && StringUtils.isNotBlank(ticketKeyDO.getKeyNfc())
|
|
|
|
|
+ && keyStatusVO.getKeyNfc().equals(ticketKeyDO.getKeyNfc())) {
|
|
|
|
|
+ keyStatusVO.setUsageStatus("1");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return keyStatusVOS;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+}
|