diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java index dd1417b90..5452e0608 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/service/impl/SlitterServiceImpl.java @@ -285,56 +285,55 @@ public class SlitterServiceImpl implements SlitterService { @Override @Transactional(rollbackFor = Exception.class) public JSONObject acsFinishLoadShaft(JSONObject param) { - log.info("ACS申请套管完成参数: {}", param); String msg = ""; JSONObject res = new JSONObject(); // 穿拔轴位 String deviceCode = param.getString("device_code"); List stepTipLogs = getRedisListValue("ERROR" + deviceCode); - // 纸管 - String weight1 = param.getString("weight1"); - String material1 = param.getString("material1"); - String weight2 = param.getString("weight2"); - String material2 = param.getString("material2"); - // 判断是否有未完成的任务 - List list = taskService.list(new LambdaQueryWrapper() - .eq(SchBaseTask::getPoint_code1, deviceCode) - .lt(SchBaseTask::getTask_status, "07")); - if (list.size() > 0) { - log.error("点位[{}]存在未完成得任务!", deviceCode); - stepTipLogs.add("套轴完成->点位[" + deviceCode + "]存在未完成得任务!"); - redisUtils.set("ERROR" + deviceCode, stepTipLogs); - throw new BadRequestException("点位[" + deviceCode + "]存在未完成得任务!"); - } - BstIvtShafttubeivt startPoint = shafttubeivtService.getOne(new LambdaQueryWrapper() - .eq(BstIvtShafttubeivt::getPoint_code, deviceCode)); - // 获取分切计划 - List collect = Stream.of(startPoint.getContainer_name1(), startPoint.getContainer_name2()) - .filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList()); - if (collect.size() == 0) { - log.error("找不到[{}]对应的分切计划!", deviceCode); - stepTipLogs.add("套轴完成->找不到[" + deviceCode + "]点位记录的分切计划!分切计划可能被删除或者拼接!"); - redisUtils.set("ERROR" + deviceCode, stepTipLogs); - throw new BadRequestException("找不到[" + deviceCode + "]对应的分切计划!"); - } - List plans = slittingproductionplanService.list( - new LambdaQueryWrapper() - .in(PdmBiSlittingproductionplan::getContainer_name, collect) - .eq(PdmBiSlittingproductionplan::getStatus, "01") - .eq(PdmBiSlittingproductionplan::getIs_delete, "0")); - // 去异常位 - if (plans.size() == 0) { - log.error("找不到[{}]对应的分切计划,分切计划可能被删除或者拼接!", collect); - // 移动到异常处理位(随机一个点位,在送到B2对面的位置) - List exceptionPoints = bcutpointivtService.getAreaNotTaskPointByStatus("1", "1", "0", "0"); - if (exceptionPoints.size() > 0) { - BstIvtCutpointivt exceptionPoint = exceptionPoints.get(0); - // 枷锁 - RLock lockPointR = redissonClient.getLock(exceptionPoint.getPoint_code()); - boolean tryLockPointR = lockPointR.tryLock(0, TimeUnit.SECONDS); - try { - if (tryLockPointR) { - // 需要枷锁 + // 枷锁 + RLock lock = redissonClient.getLock("doAcsFinishLoadShaft"); + boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); + try { + if (tryLock) { + log.info("ACS申请套管完成参数: {}", param); + // 纸管 + String weight1 = param.getString("weight1"); + String material1 = param.getString("material1"); + String weight2 = param.getString("weight2"); + String material2 = param.getString("material2"); + // 判断是否有未完成的任务 + List list = taskService.list(new LambdaQueryWrapper() + .eq(SchBaseTask::getPoint_code1, deviceCode) + .lt(SchBaseTask::getTask_status, "07")); + if (list.size() > 0) { + log.error("点位[{}]存在未完成得任务!", deviceCode); + stepTipLogs.add("套轴完成->点位[" + deviceCode + "]存在未完成得任务!"); + redisUtils.set("ERROR" + deviceCode, stepTipLogs); + throw new BadRequestException("点位[" + deviceCode + "]存在未完成得任务!"); + } + BstIvtShafttubeivt startPoint = shafttubeivtService.getOne(new LambdaQueryWrapper() + .eq(BstIvtShafttubeivt::getPoint_code, deviceCode)); + // 获取分切计划 + List collect = Stream.of(startPoint.getContainer_name1(), startPoint.getContainer_name2()) + .filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList()); + if (collect.size() == 0) { + log.error("找不到[{}]对应的分切计划!", deviceCode); + stepTipLogs.add("套轴完成->找不到[" + deviceCode + "]点位记录的分切计划!分切计划可能被删除或者拼接!"); + redisUtils.set("ERROR" + deviceCode, stepTipLogs); + throw new BadRequestException("找不到[" + deviceCode + "]对应的分切计划!"); + } + List plans = slittingproductionplanService.list( + new LambdaQueryWrapper() + .in(PdmBiSlittingproductionplan::getContainer_name, collect) + .eq(PdmBiSlittingproductionplan::getStatus, "01") + .eq(PdmBiSlittingproductionplan::getIs_delete, "0")); + // 去异常位 + if (plans.size() == 0) { + log.error("找不到[{}]对应的分切计划,分切计划可能被删除或者拼接!", collect); + // 移动到异常处理位(随机一个点位,在送到B2对面的位置) + List exceptionPoints = bcutpointivtService.getAreaNotTaskPointByStatus("1", "1", "0", "0"); + if (exceptionPoints.size() > 0) { + BstIvtCutpointivt exceptionPoint = exceptionPoints.get(0); JSONObject exParam = new JSONObject(); exParam.put("point_code1", startPoint.getPoint_code()); exParam.put("point_code2", ObjectUtil.isEmpty(exceptionPoint.getQzz_no1()) @@ -352,101 +351,87 @@ public class SlitterServiceImpl implements SlitterService { res.put("message", "创建送至异常处理位!"); return res; } else { - throw new BadRequestException("系统繁忙,稍后在试!"); - } - } finally { - if (tryLockPointR) { - lockPointR.unlock(); + stepTipLogs.add("套轴完成->[" + collect + "]对应的分切计划状态已更改,无暂存位置,创建任务失败!"); + redisUtils.set("ERROR" + deviceCode, stepTipLogs); + JSONObject exParam = new JSONObject(); + exParam.put("point_code1", startPoint.getPoint_code()); + exParam.put("point_code2", "-"); + exParam.put("vehicle_code1", collect); + exParam.put("task_type", SlitterEnum.TASK_TYPE.code("套轴异常处理桁架任务")); + exParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + exParam.put("task_status", TaskStatusEnum.SURE_START.getCode()); + exParam.put("acs_task_type", "6"); + sendNBJExceptionPointTask.createTask(exParam); + res.put("status", HttpStatus.HTTP_OK); + res.put("message", "请求成功"); + res.put("msg", msg); + return res; } } - } else { - stepTipLogs.add("套轴完成->[" + collect + "]对应的分切计划状态已更改,无暂存位置,创建任务失败!"); - redisUtils.set("ERROR" + deviceCode, stepTipLogs); - JSONObject exParam = new JSONObject(); - exParam.put("point_code1", startPoint.getPoint_code()); - exParam.put("point_code2", "-"); - exParam.put("vehicle_code1", collect); - exParam.put("task_type", SlitterEnum.TASK_TYPE.code("套轴异常处理桁架任务")); - exParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA); - exParam.put("task_status", TaskStatusEnum.SURE_START.getCode()); - exParam.put("acs_task_type", "6"); - sendNBJExceptionPointTask.createTask(exParam); - res.put("status", HttpStatus.HTTP_OK); - res.put("message", "请求成功"); - res.put("msg", msg); - return res; -// throw new BadRequestException("[" + collect + "]对应的分切计划状态已更改,无暂存位置!"); - } - } - // 分切计划设置纸卷重量 - for (PdmBiSlittingproductionplan plan : plans) { - if (SlitterConstant.SLITTER_SUB_VOLUME_LEFT.equals(plan.getLeft_or_right())) { - plan.setPaper_weight(weight1); - msg = msg + "子卷号:" + plan.getContainer_name() + "的纸管重量: " + weight1 + " | "; - } else { - plan.setPaper_weight(weight2); - msg = msg + "子卷号:" + plan.getContainer_name() + "的纸管重量: " + weight2 + " | "; - } - TaskUtils.updateOptMessageBySlitterPlan(plan); - } - slittingproductionplanService.updateBatchById(plans); + // 分切计划设置纸卷重量 + for (PdmBiSlittingproductionplan plan : plans) { + if (SlitterConstant.SLITTER_SUB_VOLUME_LEFT.equals(plan.getLeft_or_right())) { + plan.setPaper_weight(weight1); + msg = msg + "子卷号:" + plan.getContainer_name() + "的纸管重量: " + weight1 + " | "; + } else { + plan.setPaper_weight(weight2); + msg = msg + "子卷号:" + plan.getContainer_name() + "的纸管重量: " + weight2 + " | "; + } + TaskUtils.updateOptMessageBySlitterPlan(plan); + } + slittingproductionplanService.updateBatchById(plans); - // 当前套轴的分切计划 - PdmBiSlittingproductionplan demoPlan = plans.get(0); - // 分切计划设置套轴完成 - String resourceName = demoPlan.getResource_name(); - String qzzNo = resourceName.substring(0, 2) - + resourceName.substring(resourceName.length() - 2) - + demoPlan.getSplit_group() - + TaskUtils.getDateTime("yyMMddHHmmss") + "-" - + demoPlan.getUp_or_down(); - plans.forEach(plan -> { - plan.setIs_child_tz_ok(SlitterConstant.SLITTER_YES); - plan.setQzzno(qzzNo); - TaskUtils.updateOptMessageBySlitterPlan(plan); - }); - slittingproductionplanService.updateBatchById(plans); - // 查找是否有同组的气胀轴位置 - BstIvtCutpointivt cutPoint = slitterMapper.getSameGroupPoint(demoPlan); - if (ObjectUtil.isEmpty(cutPoint)) { - // 也有可能在路上, 获取任务的终点 - String endPoint = slitterMapper.getSameGroupTaskPoint(demoPlan); - if (ObjectUtil.isNotEmpty(endPoint)) { - cutPoint = bcutpointivtService.getOne(new LambdaQueryWrapper() - .eq(BstIvtCutpointivt::getTruss_point_code1, endPoint).or() - .eq(BstIvtCutpointivt::getTruss_point_code2, endPoint)); - } - } - if (ObjectUtil.isEmpty(cutPoint)) { - // 获取一个空位 (上下区域) - List emptyNotTaskPoint = bcutpointivtService.getNBJAreaNotTaskPointByStatus( - "1", "1", startPoint.getPoint_location(), "1"); - if (emptyNotTaskPoint.size() > 0) { - cutPoint = emptyNotTaskPoint.get(0); - } else { - stepTipLogs.add("提示:套轴完成->找不到可用套轴对接位,创建半条任务,等待AGV取货完成触发!"); - redisUtils.set("ERROR" + deviceCode, stepTipLogs); - // 创建任务 - JSONObject taskParam = new JSONObject(); - taskParam.put("point_code1", startPoint.getPoint_code()); - taskParam.put("point_code2", "-"); - taskParam.put("needPosition", SlitterConstant.SLITTER_SHAFT_UP.equals(demoPlan.getUp_or_down()) - ? "A" : "B"); - taskParam.put("vehicle_code1", SlitterConstant.SLITTER_SHAFT_UP.equals(demoPlan.getUp_or_down()) ? qzzNo : ""); - taskParam.put("vehicle_code2", SlitterConstant.SLITTER_SHAFT_DOWN.equals(demoPlan.getUp_or_down()) ? qzzNo : ""); - taskParam.put("task_type", "010814"); - taskParam.put("task_status", TaskStatusEnum.SURE_START.getCode()); - taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA); - taskParam.put("immediateNotifyAcs", "0"); - trussSendAirShaftTask.createTask(taskParam); - } - } - if (ObjectUtil.isNotEmpty(cutPoint)) { - // 枷锁 - RLock lockPoint = redissonClient.getLock(cutPoint.getPoint_code()); - boolean tryLockPoint = lockPoint.tryLock(0, TimeUnit.SECONDS); - try { - if (tryLockPoint) { + // 当前套轴的分切计划 + PdmBiSlittingproductionplan demoPlan = plans.get(0); + // 分切计划设置套轴完成 + String resourceName = demoPlan.getResource_name(); + String qzzNo = resourceName.substring(0, 2) + + resourceName.substring(resourceName.length() - 2) + + demoPlan.getSplit_group() + + TaskUtils.getDateTime("yyMMddHHmmss") + "-" + + demoPlan.getUp_or_down(); + plans.forEach(plan -> { + plan.setIs_child_tz_ok(SlitterConstant.SLITTER_YES); + plan.setQzzno(qzzNo); + TaskUtils.updateOptMessageBySlitterPlan(plan); + }); + slittingproductionplanService.updateBatchById(plans); + // 查找是否有同组的气胀轴位置 + BstIvtCutpointivt cutPoint = slitterMapper.getSameGroupPoint(demoPlan); + if (ObjectUtil.isEmpty(cutPoint)) { + // 也有可能在路上, 获取任务的终点 + String endPoint = slitterMapper.getSameGroupTaskPoint(demoPlan); + if (ObjectUtil.isNotEmpty(endPoint)) { + cutPoint = bcutpointivtService.getOne(new LambdaQueryWrapper() + .eq(BstIvtCutpointivt::getTruss_point_code1, endPoint).or() + .eq(BstIvtCutpointivt::getTruss_point_code2, endPoint)); + } + } + if (ObjectUtil.isEmpty(cutPoint)) { + // 获取一个空位 (上下区域) + List emptyNotTaskPoint = bcutpointivtService.getNBJAreaNotTaskPointByStatus( + "1", "1", startPoint.getPoint_location(), "1"); + if (emptyNotTaskPoint.size() > 0) { + cutPoint = emptyNotTaskPoint.get(0); + } else { + stepTipLogs.add("提示:套轴完成->找不到可用套轴对接位,创建半条任务,等待AGV取货完成触发!"); + redisUtils.set("ERROR" + deviceCode, stepTipLogs); + // 创建任务 + JSONObject taskParam = new JSONObject(); + taskParam.put("point_code1", startPoint.getPoint_code()); + taskParam.put("point_code2", "-"); + taskParam.put("needPosition", SlitterConstant.SLITTER_SHAFT_UP.equals(demoPlan.getUp_or_down()) + ? "A" : "B"); + taskParam.put("vehicle_code1", SlitterConstant.SLITTER_SHAFT_UP.equals(demoPlan.getUp_or_down()) ? qzzNo : ""); + taskParam.put("vehicle_code2", SlitterConstant.SLITTER_SHAFT_DOWN.equals(demoPlan.getUp_or_down()) ? qzzNo : ""); + taskParam.put("task_type", "010814"); + taskParam.put("task_status", TaskStatusEnum.SURE_START.getCode()); + taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + taskParam.put("immediateNotifyAcs", "0"); + trussSendAirShaftTask.createTask(taskParam); + } + } + if (ObjectUtil.isNotEmpty(cutPoint)) { // 创建任务 JSONObject taskParam = new JSONObject(); taskParam.put("point_code1", startPoint.getPoint_code()); @@ -458,18 +443,17 @@ public class SlitterServiceImpl implements SlitterService { taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA); taskParam.put("immediateNotifyAcs", "1"); trussSendAirShaftTask.createTask(taskParam); - } else { - stepTipLogs.add("套轴完成->系统繁忙,稍后在试!"); - redisUtils.set("ERROR" + deviceCode, stepTipLogs); - throw new BadRequestException("系统繁忙,稍后在试!"); - } - } finally { - if (tryLockPoint) { - lockPoint.unlock(); } + } else { + stepTipLogs.add("套轴完成->系统繁忙,稍后在试!"); + redisUtils.set("ERROR" + deviceCode, stepTipLogs); + throw new BadRequestException("系统繁忙,稍后在试!"); + } + } finally { + if (tryLock) { + lock.unlock(); } } - res.put("status", HttpStatus.HTTP_OK); res.put("message", "请求成功"); res.put("msg", msg);