|
@@ -0,0 +1,391 @@
|
|
|
|
|
+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.workdesign.*;
|
|
|
|
|
+import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
|
|
|
|
|
+import cn.iocoder.yudao.module.system.service.user.AdminUserService;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
|
|
+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;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 作业票处理过程 Service 实现类
|
|
|
|
|
+ *
|
|
|
|
|
+ * @author 博士安全
|
|
|
|
|
+ */
|
|
|
|
|
+@Service
|
|
|
|
|
+@Validated
|
|
|
|
|
+public class WorkflowWorkHandleServiceImpl implements WorkflowWorkHandleService {
|
|
|
|
|
+
|
|
|
|
|
+ @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;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Boolean insertWorkTicket(WorkHandleSaveReqVO vo) {
|
|
|
|
|
+ Assert.notNull(vo.getNodeId(), "nodeId不可为空");
|
|
|
|
|
+ // 检查是否重复下发作业
|
|
|
|
|
+ List<WorkflowWorkTicketDO> list = ticketService.list(Wrappers.<WorkflowWorkTicketDO>lambdaQuery().eq(WorkflowWorkTicketDO::getNodeId, vo.getNodeId()));
|
|
|
|
|
+ Assert.isTrue(list.isEmpty(), "切勿重复下发作业");
|
|
|
|
|
+ WorkflowWorkNodeDO nodeDO = workflowWorkNodeService.getById(vo.getNodeId());
|
|
|
|
|
+
|
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
+ Long ticketId = 0L;
|
|
|
|
|
+ if (StringUtils.isNotBlank(vo.getTicketContent())) {
|
|
|
|
|
+ WorkflowWorkTicketDO workflowWorkTicketDO = new WorkflowWorkTicketDO();
|
|
|
|
|
+ workflowWorkTicketDO.setNodeId(vo.getNodeId());
|
|
|
|
|
+ workflowWorkTicketDO.setTicketContent(vo.getTicketContent());
|
|
|
|
|
+ workflowWorkTicketDO.setTicketStatus("2");
|
|
|
|
|
+ workflowWorkTicketDO.setTicketStartTime(now);
|
|
|
|
|
+ ticketService.save(workflowWorkTicketDO);
|
|
|
|
|
+ ticketId = workflowWorkTicketDO.getId();
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!vo.getKeyNfcList().isEmpty()) {
|
|
|
|
|
+ List<WorkflowWorkTicketKeyDO> keyDOList = new ArrayList<>();
|
|
|
|
|
+ for (HandleKeyVO key : vo.getKeyNfcList()) {
|
|
|
|
|
+ WorkflowWorkTicketKeyDO workflowWorkTicketKeyDO = new WorkflowWorkTicketKeyDO();
|
|
|
|
|
+ workflowWorkTicketKeyDO.setTicketId(ticketId);
|
|
|
|
|
+ workflowWorkTicketKeyDO.setNodeId(vo.getNodeId());
|
|
|
|
|
+ workflowWorkTicketKeyDO.setKeyNfc(key.getKeyNfc());
|
|
|
|
|
+ workflowWorkTicketKeyDO.setCollectTime(now);
|
|
|
|
|
+ workflowWorkTicketKeyDO.setKeyStatus("1");
|
|
|
|
|
+ workflowWorkTicketKeyDO.setTicketType(0);
|
|
|
|
|
+ workflowWorkTicketKeyDO.setFromHardwareCode(key.getHardwareCode());
|
|
|
|
|
+ keyDOList.add(workflowWorkTicketKeyDO);
|
|
|
|
|
+ }
|
|
|
|
|
+ keyService.saveBatch(keyDOList);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!vo.getLockNfcList().isEmpty() && "isolation".equals(nodeDO.getType())) {
|
|
|
|
|
+ // isolation节点才需要新增,releaseIsolation节点不需要
|
|
|
|
|
+ List<WorkflowWorkTicketLockDO> lockDOList = new ArrayList<>();
|
|
|
|
|
+ for (HandleLockVO lock : vo.getLockNfcList()) {
|
|
|
|
|
+ WorkflowWorkTicketLockDO workflowWorkTicketLockDO = new WorkflowWorkTicketLockDO();
|
|
|
|
|
+ workflowWorkTicketLockDO.setTicketId(ticketId);
|
|
|
|
|
+ workflowWorkTicketLockDO.setNodeId(vo.getNodeId());
|
|
|
|
|
+ workflowWorkTicketLockDO.setLockNfc(lock.getLockNfc());
|
|
|
|
|
+ workflowWorkTicketLockDO.setLockStatus("1");
|
|
|
|
|
+ workflowWorkTicketLockDO.setFromHardwareCode(lock.getHardwareCode());
|
|
|
|
|
+ lockDOList.add(workflowWorkTicketLockDO);
|
|
|
|
|
+ }
|
|
|
|
|
+ lockService.saveBatch(lockDOList);
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Transactional
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Boolean updatePointLock(KeyBackVO keyBackVO) {
|
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
+ List<PointLockVO> list = keyBackVO.getList();
|
|
|
|
|
+ if (!list.isEmpty()) {
|
|
|
|
|
+ Long nodeId = list.get(0).getNodeId();
|
|
|
|
|
+ Assert.notNull(nodeId, "nodeId不可为空");
|
|
|
|
|
+ for (PointLockVO vo : list) {
|
|
|
|
|
+ Assert.notBlank(vo.getPointNfc(), "pointNfc不可为空");
|
|
|
|
|
+ Assert.notBlank(vo.getLockNfc(), "lockNfc不可为空");
|
|
|
|
|
+ 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"));
|
|
|
|
|
+ }
|
|
|
|
|
+ // 检测上锁完成,更改上锁人状态
|
|
|
|
|
+ List<WorkflowWorkPointDO> unclockPoints = pointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
|
|
|
|
|
+ .eq(WorkflowWorkPointDO::getNodeId, nodeId)
|
|
|
|
|
+ .eq(WorkflowWorkPointDO::getStatus, "0"));
|
|
|
|
|
+ if (unclockPoints.isEmpty()) {
|
|
|
|
|
+ // 说明全部点位上锁完成,可以更新上锁人状态
|
|
|
|
|
+ nodeUserService.update(Wrappers.<WorkflowWorkNodeUserDO>lambdaUpdate()
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getNodeId, nodeId)
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getType, "jtlocker")
|
|
|
|
|
+ .set(WorkflowWorkNodeUserDO::getStatus, "1")
|
|
|
|
|
+ .set(WorkflowWorkNodeUserDO::getLockTime, now));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 帮助归还钥匙
|
|
|
|
|
+ String keyNfc = keyBackVO.getKeyNfc();
|
|
|
|
|
+ if (StringUtils.isNotBlank(keyNfc)) {
|
|
|
|
|
+ // 开始归还钥匙
|
|
|
|
|
+ keyService.update(Wrappers.<WorkflowWorkTicketKeyDO>lambdaUpdate()
|
|
|
|
|
+ .eq(WorkflowWorkTicketKeyDO::getNodeId, nodeId)
|
|
|
|
|
+ .eq(WorkflowWorkTicketKeyDO::getKeyNfc, keyNfc)
|
|
|
|
|
+ .set(WorkflowWorkTicketKeyDO::getKeyStatus, "2")
|
|
|
|
|
+ .set(WorkflowWorkTicketKeyDO::getToHardwareCode, keyBackVO.getHardwareCode()));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Transactional
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Boolean updateUserLock(UserLockVO vo) {
|
|
|
|
|
+ // 开始共锁
|
|
|
|
|
+ Assert.notNull(vo.getNodeId(), "nodeId不可为空");
|
|
|
|
|
+ Assert.notNull(vo.getCardNfc(), "cardNfc不可为空");
|
|
|
|
|
+
|
|
|
|
|
+ // 检查是不是所有点位已经上锁,不是不可共锁
|
|
|
|
|
+ List<WorkflowWorkPointDO> unlockPoints = pointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
|
|
|
|
|
+ .eq(WorkflowWorkPointDO::getNodeId, vo.getNodeId())
|
|
|
|
|
+ .eq(WorkflowWorkPointDO::getStatus, "0"));
|
|
|
|
|
+ Assert.isTrue(unlockPoints.isEmpty(), "共锁失败,存在未上锁的的点位!");
|
|
|
|
|
+
|
|
|
|
|
+ AdminUserDO adminUserDO = adminUserService.getOne(Wrappers.<AdminUserDO>lambdaQuery()
|
|
|
|
|
+ .eq(AdminUserDO::getCardNfc, vo.getCardNfc()));
|
|
|
|
|
+ Assert.notNull(adminUserDO, "共锁失败,工卡未录入!");
|
|
|
|
|
+ // 检查是否是需要的共锁人
|
|
|
|
|
+ WorkflowWorkNodeUserDO nodeUserDO = nodeUserService.getOne(Wrappers.<WorkflowWorkNodeUserDO>lambdaQuery()
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getNodeId, vo.getNodeId())
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getUserId, adminUserDO.getId()));
|
|
|
|
|
+ Assert.notNull(nodeUserDO, "共锁失败,您不是共锁人!");
|
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
+ nodeUserService.update(Wrappers.<WorkflowWorkNodeUserDO>lambdaUpdate()
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getId, nodeUserDO.getId())
|
|
|
|
|
+ .set(WorkflowWorkNodeUserDO::getLockTime, now)
|
|
|
|
|
+ .set(WorkflowWorkNodeUserDO::getStatus, "1"));
|
|
|
|
|
+
|
|
|
|
|
+ // 共锁完成之后检测是不是所有点位上锁(未上锁不可共锁,所以前面检测了,现在不用管了,只要检测全部共锁完成就行)和共锁完成,完成后审批这个node
|
|
|
|
|
+ List<WorkflowWorkNodeUserDO> list = nodeUserService.list(Wrappers.<WorkflowWorkNodeUserDO>lambdaQuery()
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getNodeId, vo.getNodeId())
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getType, "jtcolocker")
|
|
|
|
|
+ .ne(WorkflowWorkNodeUserDO::getStatus, "1"));
|
|
|
|
|
+ if (list.isEmpty()) {
|
|
|
|
|
+ // 说明没有共锁人需求或者全部共锁完成,可以审批节点
|
|
|
|
|
+ ApprovalNodeReqVO approvalNodeReqVO = new ApprovalNodeReqVO();
|
|
|
|
|
+ approvalNodeReqVO.setNodeId(vo.getNodeId());
|
|
|
|
|
+ approvalNodeReqVO.setApprovalStatus("approved");
|
|
|
|
|
+ approvalNodeReqVO.setApprovalOpinion("approved");
|
|
|
|
|
+ workflowWorkService.updateNodeApproval(approvalNodeReqVO);
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Boolean updateUserUnlock(UserLockVO vo) {
|
|
|
|
|
+ // 开始解除共锁
|
|
|
|
|
+ Assert.notNull(vo.getNodeId(), "nodeId不可为空");
|
|
|
|
|
+ Assert.notNull(vo.getCardNfc(), "cardNfc不可为空");
|
|
|
|
|
+ AdminUserDO adminUserDO = adminUserService.getOne(Wrappers.<AdminUserDO>lambdaQuery()
|
|
|
|
|
+ .eq(AdminUserDO::getCardNfc, vo.getCardNfc()));
|
|
|
|
|
+ Assert.notNull(adminUserDO, "共锁失败,工卡未录入!");
|
|
|
|
|
+ WorkflowWorkNodeDO byId = workflowWorkNodeService.getById(vo.getNodeId());
|
|
|
|
|
+ Long fatherNodeId = 0L;
|
|
|
|
|
+ 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();
|
|
|
|
|
+ }
|
|
|
|
|
+ // 检查是否是需要的共锁人
|
|
|
|
|
+ WorkflowWorkNodeUserDO nodeUserDO = nodeUserService.getOne(Wrappers.<WorkflowWorkNodeUserDO>lambdaQuery()
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getNodeId, fatherNodeId)
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getUserId, adminUserDO.getId())
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getStatus, "1"));
|
|
|
|
|
+ Assert.notNull(nodeUserDO, "解除共锁失败,您不是共锁人或您未共锁!");
|
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
+ nodeUserService.update(Wrappers.<WorkflowWorkNodeUserDO>lambdaUpdate()
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getId, nodeUserDO.getId())
|
|
|
|
|
+ .set(WorkflowWorkNodeUserDO::getUnlockTime, now)
|
|
|
|
|
+ .set(WorkflowWorkNodeUserDO::getStatus, "2"));
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /*@Override
|
|
|
|
|
+ public Boolean insertUnlockKey(UnlockKeyVO vo) {
|
|
|
|
|
+ Assert.notNull(vo.getNodeId(), "nodeId不可为空");
|
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
+ if (!vo.getKeyNfcList().isEmpty()) {
|
|
|
|
|
+ ArrayList<WorkflowWorkTicketKeyDO> workflowWorkTicketKeyDOS = new ArrayList<>();
|
|
|
|
|
+ for (HandleKeyVO handleKeyVO : vo.getKeyNfcList()) {
|
|
|
|
|
+ WorkflowWorkTicketKeyDO workflowWorkTicketKeyDO = new WorkflowWorkTicketKeyDO();
|
|
|
|
|
+ workflowWorkTicketKeyDO.setNodeId(vo.getNodeId());
|
|
|
|
|
+ workflowWorkTicketKeyDO.setKeyNfc(handleKeyVO.getKeyNfc());
|
|
|
|
|
+ workflowWorkTicketKeyDO.setFromHardwareCode(handleKeyVO.getHardwareCode());
|
|
|
|
|
+ workflowWorkTicketKeyDO.setCollectTime(now);
|
|
|
|
|
+ workflowWorkTicketKeyDO.setKeyStatus("1");
|
|
|
|
|
+ workflowWorkTicketKeyDO.setTicketType(1);
|
|
|
|
|
+ workflowWorkTicketKeyDOS.add(workflowWorkTicketKeyDO);
|
|
|
|
|
+ }
|
|
|
|
|
+ keyService.saveBatch(workflowWorkTicketKeyDOS);
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }*/
|
|
|
|
|
+
|
|
|
|
|
+ @Transactional
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Boolean updatePointUnlock(KeyBackVO keyBackVO) {
|
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
+ if (!keyBackVO.getList().isEmpty()) {
|
|
|
|
|
+ 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();
|
|
|
|
|
+ }
|
|
|
|
|
+ // 检查是不是所有人都已经解除共锁
|
|
|
|
|
+ pointUnlockCheck(fatherNodeId);
|
|
|
|
|
+ for (PointLockVO vo : keyBackVO.getList()) {
|
|
|
|
|
+ Assert.notBlank(vo.getPointNfc(), "pointNfc不可为空");
|
|
|
|
|
+ pointService.update(Wrappers.<WorkflowWorkPointDO>lambdaUpdate()
|
|
|
|
|
+ .eq(WorkflowWorkPointDO::getNodeId, fatherNodeId)
|
|
|
|
|
+ .eq(WorkflowWorkPointDO::getPointNfc, vo.getPointNfc())
|
|
|
|
|
+ .set(WorkflowWorkPointDO::getUnlockTime, now)
|
|
|
|
|
+ .set(WorkflowWorkPointDO::getStatus, "2"));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 检测解除共锁(未解除不可解锁,前面pointUnlockCheck判断了现在不用判断了)和点位解锁是否完成
|
|
|
|
|
+ checkBackAutoApproval(nodeId, fatherNodeId);
|
|
|
|
|
+ /*List<WorkflowWorkPointDO> unlockPoints = pointService.list(Wrappers.<WorkflowWorkPointDO>lambdaQuery()
|
|
|
|
|
+ .eq(WorkflowWorkPointDO::getNodeId, fatherNodeId)
|
|
|
|
|
+ .ne(WorkflowWorkPointDO::getStatus, "2"));
|
|
|
|
|
+ if (unlockPoints.isEmpty()) {
|
|
|
|
|
+ // 全部解锁完成开始审批
|
|
|
|
|
+ ApprovalNodeReqVO approvalNodeReqVO = new ApprovalNodeReqVO();
|
|
|
|
|
+ approvalNodeReqVO.setNodeId(nodeId);
|
|
|
|
|
+ approvalNodeReqVO.setApprovalStatus("approved");
|
|
|
|
|
+ approvalNodeReqVO.setApprovalOpinion("approved");
|
|
|
|
|
+ workflowWorkService.updateNodeApproval(approvalNodeReqVO);
|
|
|
|
|
+
|
|
|
|
|
+ // 同时更新上锁人解锁完成状态
|
|
|
|
|
+ nodeUserService.update(Wrappers.<WorkflowWorkNodeUserDO>lambdaUpdate()
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getNodeId, fatherNodeId)
|
|
|
|
|
+ .eq(WorkflowWorkNodeUserDO::getType, "jtlocker")
|
|
|
|
|
+ .set(WorkflowWorkNodeUserDO::getStatus, "2")
|
|
|
|
|
+ .set(WorkflowWorkNodeUserDO::getUnlockTime, now));
|
|
|
|
|
+ }*/
|
|
|
|
|
+
|
|
|
|
|
+ // 帮助归还钥匙
|
|
|
|
|
+ String keyNfc = keyBackVO.getKeyNfc();
|
|
|
|
|
+ if (StringUtils.isNotBlank(keyNfc)) {
|
|
|
|
|
+ // 开始归还钥匙
|
|
|
|
|
+ keyService.update(Wrappers.<WorkflowWorkTicketKeyDO>lambdaUpdate()
|
|
|
|
|
+ .eq(WorkflowWorkTicketKeyDO::getNodeId, nodeId)
|
|
|
|
|
+ .eq(WorkflowWorkTicketKeyDO::getKeyNfc, keyNfc)
|
|
|
|
|
+ .set(WorkflowWorkTicketKeyDO::getKeyStatus, "2")
|
|
|
|
|
+ .set(WorkflowWorkTicketKeyDO::getToHardwareCode, keyBackVO.getHardwareCode()));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 检测是不是钥匙和锁都还完,如果是,自动审批当前节点
|
|
|
|
|
+ * @param nodeId 解除隔离节点的nodeId
|
|
|
|
|
+ * @param fatherNodeId 隔离节点的nodeId
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ private Boolean checkBackAutoApproval(Long nodeId, Long fatherNodeId) {
|
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
+ // 检测钥匙是不是还了
|
|
|
|
|
+ List<WorkflowWorkTicketKeyDO> list = keyService.list(Wrappers.<WorkflowWorkTicketKeyDO>lambdaQuery()
|
|
|
|
|
+ .eq(WorkflowWorkTicketKeyDO::getNodeId, nodeId)
|
|
|
|
|
+ .ne(WorkflowWorkTicketKeyDO::getKeyStatus, "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);
|
|
|
|
|
+
|
|
|
|
|
+ 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 true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Boolean updateBackLock(List<HandleLockVO> list) {
|
|
|
|
|
+ // 直接还
|
|
|
|
|
+ // LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
+ if (!list.isEmpty()) {
|
|
|
|
|
+ Long nodeId = list.get(0).getNodeId();
|
|
|
|
|
+ Assert.notNull(nodeId, "nodeId不能为空!");
|
|
|
|
|
+ WorkflowWorkNodeDO byId = workflowWorkNodeService.getById(nodeId);
|
|
|
|
|
+
|
|
|
|
|
+ for (HandleLockVO vo : list) {
|
|
|
|
|
+ Assert.notNull(vo.getLockNfc(), "lockNfc不可为空");
|
|
|
|
|
+ Assert.notNull(vo.getHardwareCode(), "hardwareCode不可为空");
|
|
|
|
|
+ lockService.update(Wrappers.<WorkflowWorkTicketLockDO>lambdaUpdate()
|
|
|
|
|
+ .eq(WorkflowWorkTicketLockDO::getLockNfc, vo.getLockNfc())
|
|
|
|
|
+ .set(WorkflowWorkTicketLockDO::getLockStatus, "5")
|
|
|
|
|
+ .set(WorkflowWorkTicketLockDO::getToHardwareCode, vo.getHardwareCode()));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (StringUtils.isNotBlank(byId.getIsolationNodeUuid())) {
|
|
|
|
|
+ // 如果是解除节点的查询操作,则查询对应隔离节点的数据
|
|
|
|
|
+ WorkflowWorkNodeDO one = workflowWorkNodeService.getOne(Wrappers.<WorkflowWorkNodeDO>lambdaQuery()
|
|
|
|
|
+ .eq(WorkflowWorkNodeDO::getWorkId, byId.getWorkId())
|
|
|
|
|
+ .eq(WorkflowWorkNodeDO::getUuid, byId.getIsolationNodeUuid()));
|
|
|
|
|
+ Long fatherNodeId = one.getId();
|
|
|
|
|
+
|
|
|
|
|
+ // 检测是不是都已经
|
|
|
|
|
+ checkBackAutoApproval(nodeId, fatherNodeId);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+}
|