diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SendAirShaftAgvTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SendAirShaftAgvTask.java index f613833db..4424bd51a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SendAirShaftAgvTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SendAirShaftAgvTask.java @@ -76,6 +76,7 @@ public class SendAirShaftAgvTask extends AbstractAcsTask { } @Override + @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject taskObj, String status) { SchBaseTask task = taskService.getById(taskObj.getString("task_id")); if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { @@ -163,7 +164,6 @@ public class SendAirShaftAgvTask extends AbstractAcsTask { } @Override - @Transactional(rollbackFor = Exception.class) public void forceFinish(String task_id) { JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SendCopperFoilSubRollTrussTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SendCopperFoilSubRollTrussTask.java index 03e7421a8..bdad9b58b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SendCopperFoilSubRollTrussTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SendCopperFoilSubRollTrussTask.java @@ -74,6 +74,7 @@ public class SendCopperFoilSubRollTrussTask extends AbstractAcsTask { } @Override + @Transactional(rollbackFor = Exception.class) public void updateTaskStatus(JSONObject taskObj, String status) { SchBaseTask task = taskService.getById(taskObj.getString("task_id")); if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { @@ -126,7 +127,6 @@ public class SendCopperFoilSubRollTrussTask extends AbstractAcsTask { } @Override - @Transactional(rollbackFor = Exception.class) public void forceFinish(String task_id) { JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SlitterDownAgvTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SlitterDownAgvTask.java index 9c2eef54d..a497b3f09 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SlitterDownAgvTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SlitterDownAgvTask.java @@ -67,6 +67,7 @@ public class SlitterDownAgvTask extends AbstractAcsTask { return resultList; } + @Transactional(rollbackFor = Exception.class) @Override public void updateTaskStatus(JSONObject taskObj, String status) { SchBaseTask task = taskService.getById(taskObj.getString("task_id")); @@ -128,7 +129,6 @@ public class SlitterDownAgvTask extends AbstractAcsTask { } @Override - @Transactional(rollbackFor = Exception.class) public void forceFinish(String task_id) { JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SlitterDownTrussTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SlitterDownTrussTask.java index 2d041f19d..8e06a130b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SlitterDownTrussTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/SlitterDownTrussTask.java @@ -177,7 +177,6 @@ public class SlitterDownTrussTask extends AbstractAcsTask { } @Override - @Transactional(rollbackFor = Exception.class) public void forceFinish(String task_id) { JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallAirShaftTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallAirShaftTask.java index c4b2fc7a3..ca10dd1fa 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallAirShaftTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallAirShaftTask.java @@ -80,6 +80,7 @@ public class TrussCallAirShaftTask extends AbstractAcsTask { return resultList; } + @Transactional(rollbackFor = Exception.class) @Override public void updateTaskStatus(JSONObject taskObj, String status) { SchBaseTask task = taskService.getById(taskObj.getString("task_id")); @@ -196,7 +197,6 @@ public class TrussCallAirShaftTask extends AbstractAcsTask { } @Override - @Transactional(rollbackFor = Exception.class) public void forceFinish(String task_id) { JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallShaftCacheTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallShaftCacheTask.java index 44eb3b392..3f037c117 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallShaftCacheTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussCallShaftCacheTask.java @@ -67,6 +67,7 @@ public class TrussCallShaftCacheTask extends AbstractAcsTask { return resultList; } + @Transactional(rollbackFor = Exception.class) @Override public void updateTaskStatus(JSONObject taskObj, String status) { SchBaseTask task = taskService.getById(taskObj.getString("task_id")); @@ -131,7 +132,6 @@ public class TrussCallShaftCacheTask extends AbstractAcsTask { } @Override - @Transactional(rollbackFor = Exception.class) public void forceFinish(String task_id) { JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussSendAirShaftTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussSendAirShaftTask.java index b5ee3834b..0bea44d44 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussSendAirShaftTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussSendAirShaftTask.java @@ -79,6 +79,7 @@ public class TrussSendAirShaftTask extends AbstractAcsTask { return resultList; } + @Transactional(rollbackFor = Exception.class) @Override public void updateTaskStatus(JSONObject taskObj, String status) { SchBaseTask task = taskService.getById(taskObj.getString("task_id")); @@ -168,7 +169,6 @@ public class TrussSendAirShaftTask extends AbstractAcsTask { } @Override - @Transactional(rollbackFor = Exception.class) public void forceFinish(String task_id) { JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussSendShaftCacheTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussSendShaftCacheTask.java index 99618c189..3d90e29cf 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussSendShaftCacheTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/TrussSendShaftCacheTask.java @@ -68,6 +68,7 @@ class TrussSendShaftCacheTask extends AbstractAcsTask { return resultList; } + @Transactional(rollbackFor = Exception.class) @Override public void updateTaskStatus(JSONObject taskObj, String status) { SchBaseTask task = taskService.getById(taskObj.getString("task_id")); @@ -133,7 +134,6 @@ class TrussSendShaftCacheTask extends AbstractAcsTask { } @Override - @Transactional(rollbackFor = Exception.class) public void forceFinish(String task_id) { JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/UpShaftTrussTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/UpShaftTrussTask.java index 285f4da46..dad45f0c9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/UpShaftTrussTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/slitter/UpShaftTrussTask.java @@ -185,7 +185,6 @@ public class UpShaftTrussTask extends AbstractAcsTask { } @Override - @Transactional(rollbackFor = Exception.class) public void forceFinish(String task_id) { JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); 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 25b6f6f88..114f0f6f2 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 @@ -72,42 +72,29 @@ public class SlitterServiceImpl implements SlitterService { @Autowired private TrussCallShaftCacheTask trussCallShaftCacheTask; - @SneakyThrows @Override public JSONObject acsRequestShaftLoadTube(JSONObject param) { JSONObject res = new JSONObject(); JSONObject con = new JSONObject(); String deviceCode = param.getString("device_code"); - RLock lock = redissonClient.getLock(deviceCode); - boolean tryLock = lock.tryLock(10, TimeUnit.SECONDS); - try { - if (tryLock) { - String size = param.getString("size"); - BstIvtShafttubeivt point = shafttubeivtService.getByPointCode(deviceCode, false); - // 判断尺寸是否相同 - if (!size.equals(point.getQzz_size())) { - log.error("设备:{}对应的气胀轴尺寸不批对,需要气胀轴尺寸:{},实际尺寸:{}", deviceCode, point.getQzz_size(), size); - throw new BadRequestException("设备:{ " + deviceCode + " }对应的气胀轴尺寸不批对" + - ",需要气胀轴尺寸:{ " + point.getQzz_size() + " },实际尺寸:{ " + size + " }"); - } - res.put("device_code", deviceCode); - res.put("data", con); - con.put("left", point.getTube_code1()); - con.put("left_size", ObjectUtil.isNotEmpty(point.getTube_name1()) - ? point.getTube_name1().split("\\|")[2].charAt(0) : ""); - con.put("right", point.getTube_code2()); - con.put("right_size", ObjectUtil.isNotEmpty(point.getTube_name2()) - ? point.getTube_name2().split("\\|")[2].charAt(0) : ""); - con.put("number", ObjectUtil.isNotEmpty(point.getTube_code1()) && ObjectUtil.isNotEmpty(point.getTube_code2()) - ? "2" : "1"); - } else { - throw new BadRequestException("系统繁忙,稍后在试"); - } - } finally { - if (tryLock) { - lock.unlock(); - } + String size = param.getString("size"); + BstIvtShafttubeivt point = shafttubeivtService.getByPointCode(deviceCode, false); + // 判断尺寸是否相同 + if (!size.equals(point.getQzz_size())) { + log.error("设备:{}对应的气胀轴尺寸不批对,需要气胀轴尺寸:{},实际尺寸:{}", deviceCode, point.getQzz_size(), size); + throw new BadRequestException("设备:{ " + deviceCode + " }对应的气胀轴尺寸不批对" + + ",需要气胀轴尺寸:{ " + point.getQzz_size() + " },实际尺寸:{ " + size + " }"); } + res.put("device_code", deviceCode); + res.put("data", con); + con.put("left", point.getTube_code1()); + con.put("left_size", ObjectUtil.isNotEmpty(point.getTube_name1()) + ? point.getTube_name1().split("\\|")[2].charAt(0) : ""); + con.put("right", point.getTube_code2()); + con.put("right_size", ObjectUtil.isNotEmpty(point.getTube_name2()) + ? point.getTube_name2().split("\\|")[2].charAt(0) : ""); + con.put("number", ObjectUtil.isNotEmpty(point.getTube_code1()) && ObjectUtil.isNotEmpty(point.getTube_code2()) + ? "2" : "1"); res.put("code", HttpStatus.HTTP_OK); res.put("message", "任务请求成功!"); return res; @@ -118,46 +105,34 @@ public class SlitterServiceImpl implements SlitterService { public JSONObject acsFinishShaftPluckTube(JSONObject param) { JSONObject res = new JSONObject(); String deviceCode = param.getString("device_code"); - RLock lock = redissonClient.getLock(deviceCode); - boolean tryLock = lock.tryLock(10, TimeUnit.SECONDS); - try { - if (tryLock) { - // 气涨轴编码 - String qzzNo = param.getString("qzz_no"); - String direction = param.getString("direction"); - List plans = slittingproductionplanService.getByQzzNo(qzzNo); - if (plans.size() == 0) { - throw new BadRequestException("查询不到气胀轴编码「" + qzzNo + "」对应的子卷信息!"); - } - PdmBiSlittingproductionplan plan; - if ("1".equals(direction)) { - plan = plans.stream().filter(p -> "1".equals(p.getLeft_or_right())).findFirst().orElse(null); - } else { - plan = plans.stream().filter(p -> "2".equals(p.getLeft_or_right())).findFirst().orElse(null); - } - if (plan == null) { - log.error("设备{}, 找不到气胀轴编码{}对应的分切计划!参数:{}",deviceCode, qzzNo, param); - throw new BadRequestException("找不到气胀轴编码{ " + qzzNo + " }的分切计划!"); - } - // 查找终点 todo: 如何确认是废箔还是成品 - // todo: 暂时写死去成品称重 + // 气涨轴编码 + String qzzNo = param.getString("qzz_no"); + String direction = param.getString("direction"); + List plans = slittingproductionplanService.getByQzzNo(qzzNo); + if (plans.size() == 0) { + throw new BadRequestException("查询不到气胀轴编码「" + qzzNo + "」对应的子卷信息!"); + } + PdmBiSlittingproductionplan plan; + if ("1".equals(direction)) { + plan = plans.stream().filter(p -> "1".equals(p.getLeft_or_right())).findFirst().orElse(null); + } else { + plan = plans.stream().filter(p -> "2".equals(p.getLeft_or_right())).findFirst().orElse(null); + } + if (plan == null) { + log.error("设备{}, 找不到气胀轴编码{}对应的分切计划!参数:{}",deviceCode, qzzNo, param); + throw new BadRequestException("找不到气胀轴编码{ " + qzzNo + " }的分切计划!"); + } + // 查找终点 todo: 如何确认是废箔还是成品 + // todo: 暂时写死去成品称重 // BstIvtShafttubeivt one = shafttubeivtService.getOne(new LambdaQueryWrapper() // .eq(BstIvtShafttubeivt::getPoint_type, "4").eq(BstIvtShafttubeivt::getPoint_location, "0")); - JSONObject taskParam = new JSONObject(); - taskParam.put("point_code1", deviceCode); - taskParam.put("point_code2", "B_CZW01"); - taskParam.put("material_code", plan.getContainer_name()); - taskParam.put("task_type", "6"); - taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA); - sendCopperFoilSubRollTrussTask.createTask(taskParam); - } else { - throw new BadRequestException("系统繁忙,稍后在试"); - } - } finally { - if (tryLock) { - lock.unlock(); - } - } + JSONObject taskParam = new JSONObject(); + taskParam.put("point_code1", deviceCode); + taskParam.put("point_code2", "B_CZW01"); + taskParam.put("material_code", plan.getContainer_name()); + taskParam.put("task_type", "6"); + taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + sendCopperFoilSubRollTrussTask.createTask(taskParam); res.put("code", HttpStatus.HTTP_OK); res.put("message", "任务请求成功!"); return res; @@ -169,40 +144,28 @@ public class SlitterServiceImpl implements SlitterService { // 参数:设备号,type,插拔轴位,qzzSize JSONObject res = new JSONObject(); String deviceCode = param.getString("device_code"); - RLock lock = redissonClient.getLock(deviceCode); - boolean tryLock = lock.tryLock(10, TimeUnit.SECONDS); - try { - if (tryLock) { - String qzzNo = param.getString("qzz_no"); - if (ObjectUtil.isEmpty(qzzNo)) { - log.error("气涨轴编码不能为空!"); - throw new BadRequestException("气涨轴编码不能为空!"); - } - List plans = slittingproductionplanService.getByQzzNo(qzzNo); - if (plans.size() == 0) { - log.error("查询不到气胀轴编码「" + qzzNo + "」对应的子卷信息!"); - throw new BadRequestException("查询不到气胀轴编码「" + qzzNo + "」对应的子卷信息!"); - } - // 反馈 纸管尺寸 - JSONObject r = new JSONObject(); - res.put("data", r); - r.put("device_code", deviceCode); - for (PdmBiSlittingproductionplan plan : plans) { - String s = String.valueOf("1".equals(plan.getPaper_tube_or_FRP()) - ? plan.getPaper_tube_model().split("\\|")[2].charAt(0) - : plan.getFRP_model().split("\\|")[2].charAt(0)); - if ("1".equals(plan.getLeft_or_right())) { - r.put("left_size", s); - } else { - r.put("right_size", s); - } - } + String qzzNo = param.getString("qzz_no"); + if (ObjectUtil.isEmpty(qzzNo)) { + log.error("气涨轴编码不能为空!"); + throw new BadRequestException("气涨轴编码不能为空!"); + } + List plans = slittingproductionplanService.getByQzzNo(qzzNo); + if (plans.size() == 0) { + log.error("查询不到气胀轴编码「" + qzzNo + "」对应的子卷信息!"); + throw new BadRequestException("查询不到气胀轴编码「" + qzzNo + "」对应的子卷信息!"); + } + // 反馈 纸管尺寸 + JSONObject r = new JSONObject(); + res.put("data", r); + r.put("device_code", deviceCode); + for (PdmBiSlittingproductionplan plan : plans) { + String s = String.valueOf("1".equals(plan.getPaper_tube_or_FRP()) + ? plan.getPaper_tube_model().split("\\|")[2].charAt(0) + : plan.getFRP_model().split("\\|")[2].charAt(0)); + if ("1".equals(plan.getLeft_or_right())) { + r.put("left_size", s); } else { - throw new BadRequestException("系统繁忙,稍后在试"); - } - } finally { - if (tryLock) { - lock.unlock(); + r.put("right_size", s); } } res.put("code", HttpStatus.HTTP_OK); @@ -217,95 +180,82 @@ public class SlitterServiceImpl implements SlitterService { JSONObject res = new JSONObject(); // 穿拔轴位 String deviceCode = param.getString("device_code"); - RLock lock = redissonClient.getLock(deviceCode); - boolean tryLock = lock.tryLock(10, TimeUnit.SECONDS); + // todo: 纸管 + 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); + 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()); + List plans = slittingproductionplanService.list(new LambdaQueryWrapper() + .in(PdmBiSlittingproductionplan::getContainer_name, collect) + .eq(PdmBiSlittingproductionplan::getIs_delete, "0")); + if (plans.size() == 0) { + log.error("找不到[{}]对应的分切计划!", collect); + throw new BadRequestException("找不到[" + collect + "]对应的分切计划!"); + } + // 当前套轴的分切计划 + PdmBiSlittingproductionplan demoPlan = plans.get(0); + // 查找是否有同组的气胀轴位置 + 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.getAreaNotTaskPointByStatus( + "1", "1", startPoint.getPoint_location(), "1"); + if (emptyNotTaskPoint.size() == 0) { + throw new BadRequestException("找不到可用套轴对接位!"); + } + cutPoint = emptyNotTaskPoint.get(0); + } + // 枷锁 + RLock lockPoint = redissonClient.getLock(cutPoint.getPoint_code()); + boolean tryLockPoint = lockPoint.tryLock(0, TimeUnit.SECONDS); try { - if (tryLock) { - String taskCode = param.getString("task_code"); - // todo: 纸管 - 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); - 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()); - List plans = slittingproductionplanService.list(new LambdaQueryWrapper() - .in(PdmBiSlittingproductionplan::getContainer_name, collect) - .eq(PdmBiSlittingproductionplan::getIs_delete, "0")); - if (plans.size() == 0) { - log.error("找不到[{}]对应的分切计划!", collect); - throw new BadRequestException("找不到[" + collect + "]对应的分切计划!"); - } - // 当前套轴的分切计划 - PdmBiSlittingproductionplan demoPlan = plans.get(0); - // 查找是否有同组的气胀轴位置 - 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.getAreaNotTaskPointByStatus( - "1", "1", startPoint.getPoint_location(), "1"); - if (emptyNotTaskPoint.size() == 0) { - throw new BadRequestException("找不到可用套轴对接位!"); - } - cutPoint = emptyNotTaskPoint.get(0); - } - // 枷锁 - RLock lockPoint = redissonClient.getLock(cutPoint.getPoint_code()); - boolean tryLockPoint = lockPoint.tryLock(0, TimeUnit.SECONDS); - try { - if (tryLockPoint) { - // 分切计划设置套轴完成 - String qzzNo = IdUtil.getSnowflake(1,1).nextIdStr(); - plans.forEach(plan -> { - plan.setIs_child_tz_ok("1"); - plan.setQzzno(qzzNo); - TaskUtils.updateOptMessageBySlitterPlan(plan); - }); - slittingproductionplanService.updateBatchById(plans); - // 创建任务 - JSONObject taskParam = new JSONObject(); - taskParam.put("point_code1", startPoint.getPoint_code()); - taskParam.put("point_code2", "1".equals(demoPlan.getUp_or_down()) - ? cutPoint.getTruss_point_code1() : cutPoint.getTruss_point_code2()); - taskParam.put("vehicle_code1", "1".equals(demoPlan.getUp_or_down()) ? qzzNo : ""); - taskParam.put("vehicle_code2", "2".equals(demoPlan.getUp_or_down()) ? qzzNo : ""); - taskParam.put("task_type", "6"); - taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA); - trussSendAirShaftTask.createTask(taskParam); - } else { - throw new BadRequestException("系统繁忙,稍后在试"); - } - } finally { - if (tryLockPoint) { - lockPoint.unlock(); - } - } + if (tryLockPoint) { + // 分切计划设置套轴完成 + String qzzNo = IdUtil.getSnowflake(1,1).nextIdStr(); + plans.forEach(plan -> { + plan.setIs_child_tz_ok("1"); + plan.setQzzno(qzzNo); + TaskUtils.updateOptMessageBySlitterPlan(plan); + }); + slittingproductionplanService.updateBatchById(plans); + // 创建任务 + JSONObject taskParam = new JSONObject(); + taskParam.put("point_code1", startPoint.getPoint_code()); + taskParam.put("point_code2", "1".equals(demoPlan.getUp_or_down()) + ? cutPoint.getTruss_point_code1() : cutPoint.getTruss_point_code2()); + taskParam.put("vehicle_code1", "1".equals(demoPlan.getUp_or_down()) ? qzzNo : ""); + taskParam.put("vehicle_code2", "2".equals(demoPlan.getUp_or_down()) ? qzzNo : ""); + taskParam.put("task_type", "6"); + taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + trussSendAirShaftTask.createTask(taskParam); } else { throw new BadRequestException("系统繁忙,稍后在试"); } } finally { - if (tryLock) { - lock.unlock(); + if (tryLockPoint) { + lockPoint.unlock(); } } res.put("code", HttpStatus.HTTP_OK); @@ -318,44 +268,32 @@ public class SlitterServiceImpl implements SlitterService { public JSONObject acsSendShaftToCache(JSONObject param) { JSONObject res = new JSONObject(); String deviceCode = param.getString("device_code"); - RLock lock = redissonClient.getLock(deviceCode); - boolean tryLock = lock.tryLock(10, TimeUnit.SECONDS); - try { - if (tryLock) { - String qzzSize = param.getString("size"); - // 判断是否有未完成的任务 - List list = taskService.list(new LambdaQueryWrapper() - .eq(SchBaseTask::getPoint_code1, deviceCode) - .lt(SchBaseTask::getTask_status, "07")); - if (list.size() > 0) { - throw new BadRequestException("点位[" + deviceCode + "]存在未完成得任务!"); - } - BstIvtShafttubeivt startPoint = shafttubeivtService.getByPointCode(deviceCode, false); - // 临时存放气涨轴尺寸 - startPoint.setQzz_size(qzzSize); - // 获取空位 - List shafttubeivts = shafttubeivtService.getNotTaskShaftCacheEmpty(startPoint); - if (shafttubeivts.size() == 0) { - throw new BadRequestException("未找到可存放气涨轴规格「" + qzzSize + "」的空暂存位"); - } - BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); - // 创建任务 - param.put("point_code1", deviceCode); - param.put("point_code2", shafttubeivt.getPoint_code()); - // hint: 当前分切计划的气涨轴尺寸 - param.put("qzz_size", qzzSize); - param.put("task_type", "6"); - param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); - param.put("is_bushing", "0"); - trussCallShaftCacheTask.createTask(param); - } else { - throw new BadRequestException("系统繁忙,稍后在试"); - } - } finally { - if (tryLock) { - lock.unlock(); - } + String qzzSize = param.getString("size"); + // 判断是否有未完成的任务 + List list = taskService.list(new LambdaQueryWrapper() + .eq(SchBaseTask::getPoint_code1, deviceCode) + .lt(SchBaseTask::getTask_status, "07")); + if (list.size() > 0) { + throw new BadRequestException("点位[" + deviceCode + "]存在未完成得任务!"); } + BstIvtShafttubeivt startPoint = shafttubeivtService.getByPointCode(deviceCode, false); + // 临时存放气涨轴尺寸 + startPoint.setQzz_size(qzzSize); + // 获取空位 + List shafttubeivts = shafttubeivtService.getNotTaskShaftCacheEmpty(startPoint); + if (shafttubeivts.size() == 0) { + throw new BadRequestException("未找到可存放气涨轴规格「" + qzzSize + "」的空暂存位"); + } + BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0); + // 创建任务 + param.put("point_code1", deviceCode); + param.put("point_code2", shafttubeivt.getPoint_code()); + // hint: 当前分切计划的气涨轴尺寸 + param.put("qzz_size", qzzSize); + param.put("task_type", "6"); + param.put("product_area", SlitterConstant.SLITTER_TASK_AREA); + param.put("is_bushing", "0"); + trussCallShaftCacheTask.createTask(param); res.put("code", HttpStatus.HTTP_OK); res.put("message", "请求成功"); return res; diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java index 82d9c9f98..a9ab0816a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java @@ -116,7 +116,7 @@ public class AcsToWmsController { } /*@PostMapping("/getQZZInfo") - + @SaIgnore public ResponseEntity getQZZInfo(@RequestBody JSONObject jo) { return new ResponseEntity<>(acsToWmsService.getQZZInfo(jo), HttpStatus.OK); @@ -177,5 +177,10 @@ public class AcsToWmsController { return new ResponseEntity<>(acsToWmsService.deviceApplyExceptional(whereJson), HttpStatus.OK); } - + @PostMapping("/slitterApply") + @Log(value = "二期分切请求", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS) + @SaIgnore + public ResponseEntity slitterApply(@RequestBody JSONObject param) { + return new ResponseEntity<>(acsToWmsService.slitterApply(param), HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java index 86c1f3bfc..59e8ea10a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java @@ -167,4 +167,11 @@ public interface AcsToWmsService { * } */ JSONObject deviceApplyExceptional(JSONObject whereJson); + + /** + * 二期分切请求 + * @param param / + * @return / + */ + JSONObject slitterApply(JSONObject param); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 5443e3323..ec422b2fe 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -21,6 +21,7 @@ import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.service.IschBaseTaskService; import org.nl.b_lms.sch.tasks.TwoBoxExcepTask; import org.nl.b_lms.sch.tasks.first_floor_area.MzhcwTask; +import org.nl.b_lms.sch.tasks.slitter.service.SlitterService; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.b_lms.storage_manage.ios.enums.TASKEnum; import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.*; @@ -47,6 +48,7 @@ import org.nl.wms.st.inbill.service.RawAssistIStorService; import org.nl.wms.st.inbill.service.StorPublicService; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -126,6 +128,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { @Resource private MzhcwTask mzhcwTask; + private final SlitterService slitterService; + /** * task_id:任务标识 @@ -2029,4 +2033,56 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { return result; } + @SneakyThrows + @Override + public JSONObject slitterApply(JSONObject param) { + log.info("slitterApply请求参数:---------------------------------------------{}", param); + JSONObject res = new JSONObject(); + String deviceCode = param.getString("device_code"); + String type = param.getString("type"); + if (ObjectUtil.isEmpty(type)) { + throw new BadRequestException("任务类型「type」不能为空"); + } + RLock lock = redissonClient.getLock(deviceCode); + boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS); + try { + if (tryLock) { + switch (type) { + case "1": + // 申请套管 + res = slitterService.acsRequestShaftLoadTube(param); + break; + case "2": + // 套管完成 + res = slitterService.acsFinishLoadShaft(param); + break; + case "3": + // 拔轴完成 + res = slitterService.acsFinishShaftPluckTube(param); + break; + case "4": + // 申请拔轴 + res = slitterService.acsRequestShaftPluckTube(param); + break; + case "5": + // 缓存线已满,生产桁架任务 + res = slitterService.acsSendShaftToCache(param); + break; + default: + log.error("slitterApply任务类型「{}」无效!,参数:---------------------------------------------{}", type, param); + throw new BadRequestException("任务类型「" + type + "」无效!"); + } + } else { + log.error("slitterApply系统繁忙,参数:---------------------------------------------{}", param); + throw new BadRequestException("系统繁忙,请稍后再试!"); + } + } finally { + if (tryLock) { + lock.unlock(); + } + } + log.info("slitterApply返回参数:---------------------------------------------{}", res); + return res; + } + }