From fb1749396f865665990965a26835324c2fa9122e Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Tue, 27 Aug 2024 15:07:09 +0800 Subject: [PATCH] =?UTF-8?q?modified:=20=E5=88=86=E5=88=87=E4=B8=8B?= =?UTF-8?q?=E6=96=99=E3=80=81=E5=88=86=E5=88=87=E4=B8=8A=E6=96=99=E3=80=81?= =?UTF-8?q?=E7=83=98=E7=AE=B1=E3=80=81=E5=86=85=E5=8C=85=E9=97=B4=E5=A5=97?= =?UTF-8?q?=E8=BD=B4=E3=80=81=E5=BA=9F=E7=AE=94=E3=80=81=E5=8F=96=E6=A0=B7?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../acs/controller/AcsToWmsController.java | 12 ++ .../wms/ext/acs/service/AcsToWmsService.java | 14 ++ .../wms/ext/acs/service/WmsToAcsService.java | 3 +- .../acs/service/impl/AcsToWmsServiceImpl.java | 13 ++ .../acs/service/impl/WmsToAcsServiceImpl.java | 2 +- .../mps/controller/SlitterPdaController.java | 16 +- .../pda/mps/service/SlitterPdaService.java | 15 ++ .../service/impl/SlitterPdaServiceImpl.java | 146 ++++++++++++++++-- .../java/org/nl/wms/pda/package-info.java | 4 + .../pda/st/controller/NbjPdaController.java | 3 +- .../pda/st/controller/OtherPdaController.java | 10 ++ .../nl/wms/pda/st/service/NbjPdaService.java | 7 + .../wms/pda/st/service/OtherPdaService.java | 15 ++ .../pda/st/service/impl/GxPdaServiceImpl.java | 16 +- .../st/service/impl/NbjPdaServiceImpl.java | 60 ++++++- .../st/service/impl/OtherPdaServiceImpl.java | 135 +++++++++++++++- .../IpdmBiSlittingproductionplanService.java | 22 +++ ...dmBiSlittingproductionplanServiceImpl.java | 22 +++ .../service/IBstIvtCutpointivtService.java | 7 + .../dao/mapper/BstIvtCutpointivtMapper.java | 2 + .../dao/mapper/BstIvtCutpointivtMapper.xml | 10 ++ .../impl/BstIvtCutpointivtServiceImpl.java | 5 + .../wms/quartz/AutoSendWasteFoilAGVTask.java | 53 +++++++ .../point/service/ISchBasePointService.java | 6 + .../dao/mapper/SchBasePointMapper.java | 6 + .../service/dao/mapper/SchBasePointMapper.xml | 9 ++ .../service/impl/SchBasePointServiceImpl.java | 5 + .../sch/task/service/ISchBaseTaskService.java | 21 +++ .../service/impl/SchBaseTaskServiceImpl.java | 43 +++++- .../nl/wms/sch/task_manage/AbstractTask.java | 1 + .../nl/wms/sch/task_manage/AcsTaskDto.java | 5 + .../service/BakingOperationService.java | 7 + .../impl/BakingOperationServiceImpl.java | 55 +++++++ .../service/impl/NbjOperationServiceImpl.java | 33 +++- .../impl/OtherOperationServiceImpl.java | 4 +- .../tasks/nbj/SendShaftAGVTask.java | 1 + .../tasks/other/SendWasteFoilAGVTask.java | 125 +++++++++++++++ .../tasks/other/WasteFoilAGVTask.java | 31 ++++ .../sch/task_manage/tasks/package-info.java | 10 ++ .../task_manage/tasks/raw/RawDownAGVTask.java | 113 ++++++++------ .../tasks/slitter/SlitterDownAGVTask.java | 11 +- .../tasks/slitter/SlitterInHotAGVTask.java | 100 ++++++++++++ .../tasks/slitter/SlitterSendRollAGVTask.java | 6 +- .../tasks/slitter/SlitterUpAGVTask.java | 2 +- .../tasks/slitter/SlitterUpTrussTask.java | 4 +- 45 files changed, 1090 insertions(+), 100 deletions(-) create mode 100644 lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/package-info.java create mode 100644 lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/quartz/AutoSendWasteFoilAGVTask.java create mode 100644 lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/other/SendWasteFoilAGVTask.java create mode 100644 lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/package-info.java create mode 100644 lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterInHotAGVTask.java diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java index c623ff275..c2a43f0af 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/controller/AcsToWmsController.java @@ -47,6 +47,18 @@ public class AcsToWmsController { public ResponseEntity outHotTaskApply(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(acsToWmsService.outHotTaskApply(whereJson), HttpStatus.OK); } + @PostMapping("/applyOvenGantryTask") + @Log(value = "申请出烘箱任务", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS) + @SaIgnore + public ResponseEntity applyOvenGantryTask(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(acsToWmsService.applyOvenGantryTask(whereJson), HttpStatus.OK); + } + @PostMapping("/applyNewPoint") + @Log(value = "管芯库满入空出申请新点位", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS) + @SaIgnore + public ResponseEntity applyNewPoint(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(acsToWmsService.applyNewPoint(whereJson), HttpStatus.OK); + } @PostMapping("/receiveWasteFoilWeight") @Log(value = "废箔重量反馈", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS) @SaIgnore diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java index 5e7d405b2..67b017a36 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java @@ -132,4 +132,18 @@ public interface AcsToWmsService { * @return */ JSONObject receiveWasteFoilWeight(JSONObject whereJson); + + /** + * ACS申请入烘箱 + * @param param + * @return + */ + JSONObject applyOvenGantryTask(JSONObject param); + + /** + * 管芯库满入空出 + * @param param + * @return + */ + JSONObject applyNewPoint(JSONObject param); } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java index 0c3fad90d..4769c63dc 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java @@ -2,7 +2,6 @@ package org.nl.wms.ext.acs.service; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse; import org.nl.wms.sch.task_manage.AcsTaskDto; import java.util.List; @@ -40,7 +39,7 @@ public interface WmsToAcsService { */ JSONObject canFinishPreviousTask(JSONArray param); /** - * 通知ACS可以完成任务 + * 管芯入库 * @param param / * @return / */ diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index 9caaba0cb..f7e49d701 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -11,6 +11,7 @@ import org.nl.wms.sch.task_manage.AbstractTask; import org.nl.wms.sch.task_manage.TaskFactory; import org.nl.wms.sch.task_manage.TaskStatus; import org.nl.wms.sch.task_manage.service.BakingOperationService; +import org.nl.wms.sch.task_manage.service.NbjOperationService; import org.nl.wms.sch.task_manage.service.OtherOperationService; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; @@ -35,6 +36,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { private BakingOperationService bakingOperationService; @Autowired private OtherOperationService otherOperationService; + @Autowired + private NbjOperationService nbjOperationService; @Override public Map receiveTaskStatusAcs(String string) throws InterruptedException { log.info("acs向lms反馈任务状态,请求参数:--------------------------------------" + string); @@ -175,4 +178,14 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { public JSONObject receiveWasteFoilWeight(JSONObject whereJson) { return otherOperationService.acsRequestWasteFoilWeight(whereJson); } + + @Override + public JSONObject applyOvenGantryTask(JSONObject param) { + return bakingOperationService.acsRequestInHotTask(param); + } + + @Override + public JSONObject applyNewPoint(JSONObject param) { + return nbjOperationService.tubeExceptionHandling(param); + } } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java index c2a8c4112..e8839287d 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java @@ -37,7 +37,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { @Override public JSONObject updateTask(JSONArray arr) { String api = "api/wms/updateTask"; - return AcsUtil.notifyAcs(api, arr); + return AcsUtil.notifyAcs4(api, arr); } @Override diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/mps/controller/SlitterPdaController.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/mps/controller/SlitterPdaController.java index 8590bff0f..d5dd897bc 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/mps/controller/SlitterPdaController.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/mps/controller/SlitterPdaController.java @@ -36,13 +36,19 @@ public class SlitterPdaController { return new ResponseEntity<>(slitterPdaService.queryOrderInfo(whereJson), HttpStatus.OK); } + @PostMapping("/sendSlitterRoll") + @Log("母卷送回 - 分切复烤") + public ResponseEntity sendSlitterRoll(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(slitterPdaService.sendSlitterRoll(whereJson), HttpStatus.OK); + } + @PostMapping("/callSlitterRoll") - @Log("呼叫母卷") + @Log("呼叫母卷 - 分切上料") public ResponseEntity callSlitterRoll(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(slitterPdaService.callSlitterRoll(whereJson), HttpStatus.OK); } @PostMapping("/allowCoiling") - @Log("允许上卷") + @Log("允许上卷 - 确认上料") public ResponseEntity allowCoiling(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(slitterPdaService.allowCoiling(whereJson), HttpStatus.OK); } @@ -56,4 +62,10 @@ public class SlitterPdaController { public ResponseEntity slitterDown(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(slitterPdaService.slitterDown(whereJson), HttpStatus.OK); } + @PostMapping("/querySlitterDeviceSubVolumeInfos") + @Log("查询手持查询设备对应的子卷数据") + @SaIgnore + public ResponseEntity querySlitterDeviceSubVolumeInfos(@RequestBody JSONObject param) { + return new ResponseEntity<>(slitterPdaService.querySlitterDeviceSubVolumeInfos(param), HttpStatus.OK); + } } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/mps/service/SlitterPdaService.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/mps/service/SlitterPdaService.java index 10f7a2692..878d2e7e3 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/mps/service/SlitterPdaService.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/mps/service/SlitterPdaService.java @@ -42,4 +42,19 @@ public interface SlitterPdaService { * @return / */ JSONObject slitterDown(JSONObject param); + + /** + * 母卷送回-分切复烤 + * @see org.nl.wms.sch.task_manage.tasks.slitter.SlitterInHotAGVTask + * @param param / + * @return / + */ + JSONObject sendSlitterRoll(JSONObject param); + + /** + * 查询手持查询设备对应的子卷数据 + * @param param / + * @return / + */ + JSONObject querySlitterDeviceSubVolumeInfos(JSONObject param); } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/mps/service/impl/SlitterPdaServiceImpl.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/mps/service/impl/SlitterPdaServiceImpl.java index 220423197..149e008a0 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/mps/service/impl/SlitterPdaServiceImpl.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/mps/service/impl/SlitterPdaServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.wms.ext.acs.service.WmsToAcsService; @@ -12,6 +13,8 @@ import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder; import org.nl.wms.pdm.bi.dao.PdmBiSlittingproductionplan; import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService; import org.nl.wms.pdm.bi.service.IpdmBiSlittingproductionplanService; +import org.nl.wms.pdm.ivt.bcut.service.IBstIvtCutpointivtService; +import org.nl.wms.pdm.ivt.bcut.service.dao.BstIvtCutpointivt; import org.nl.wms.pdm.ivt.cut.service.dao.StIvtCutpointivt; import org.nl.wms.pdm.ivt.cut.service.IstIvtCutpointivtService; import org.nl.wms.sch.task.service.ISchBaseTaskService; @@ -19,6 +22,7 @@ import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition; import org.nl.wms.sch.task_manage.tasks.nbj.SendShaftAGVTask; import org.nl.wms.sch.task_manage.tasks.slitter.SlitterDownAGVTask; +import org.nl.wms.sch.task_manage.tasks.slitter.SlitterInHotAGVTask; import org.nl.wms.sch.task_manage.tasks.slitter.SlitterSendRollAGVTask; import org.nl.wms.sch.task_manage.tasks.slitter.SlitterUpTrussTask; import org.springframework.beans.factory.annotation.Autowired; @@ -51,14 +55,17 @@ public class SlitterPdaServiceImpl implements SlitterPdaService { @Autowired private IstIvtCutpointivtService cutpointivtService; @Autowired + private IBstIvtCutpointivtService bstIvtCutpointivtService; + @Autowired private IpdmBiSlittingproductionplanService slittingproductionplanService; @Autowired private SlitterDownAGVTask slitterDownAGVTask; + @Autowired + private SlitterInHotAGVTask slitterInHotAGVTask; @Override public JSONObject queryOrderInfo(JSONObject param) { - List orders = rawfoilworkorderService.getAllUsedRawPlanOnZc(); JSONObject result = new JSONObject(); - result.put("data", orders); + result.put("data", rawfoilworkorderService.getAllUsedRawPlanOnZc()); result.put("message", "操作成功!"); return result; } @@ -70,19 +77,24 @@ public class SlitterPdaServiceImpl implements SlitterPdaService { String workorderId = param.getString("workorder_id"); // 分切机满料位 String pointCode = param.getString("point_code"); - String vehicleCode = param.getString("vehicle_code"); + String zcPoint = param.getString("zc_point"); Assert.notBlank(workorderId, "请选择母卷!"); Assert.notBlank(pointCode, "点位不能为空!"); + // 校验桁架任务 + Boolean isTask = taskService.checkHaveTaskByPoints( + Stream.of(zcPoint, pointCode).collect(Collectors.toList())); // 判断是否呼叫过任务 - List schBaseTasks = taskService.checkHaveTask(pointCode); - if (schBaseTasks.size() > 0) { + if (isTask) { throw new BadRequestException("点位[" + pointCode + "]已经创建过任务!"); } + StIvtCutpointivt cutPoint = cutpointivtService.getOneByCode(pointCode); param.put("config_code", "SlitterUpTrussTask"); param.put("device_code", pointCode); param.put("create_mode", GeneralDefinition.PDA_CREATION); + // 判断空轴位状态 // 标记一下, 0: 只做呼叫母卷,1:呼叫母卷还要送空辊 - param.put("is_flag", ObjectUtil.isEmpty(vehicleCode) ? "0" : "1"); + param.put("is_flag", "01".equals(cutPoint.getEmpty_point_status()) ? "0" : "1"); + param.put("vehicle_code", cutPoint.getEmpty_vehicle_code()); slitterUpTrussTask.apply(param); JSONObject result = new JSONObject(); result.put("message", "操作成功!"); @@ -91,7 +103,7 @@ public class SlitterPdaServiceImpl implements SlitterPdaService { @Override public JSONObject allowCoiling(JSONObject param) { - log.info("手持分切准备就绪, {}", param); + log.info("手持分切确认上料, {}", param); // point_code String pointCode = param.getString("point_code"); // 获取对应任务 @@ -120,19 +132,21 @@ public class SlitterPdaServiceImpl implements SlitterPdaService { @Override public JSONObject vehicleReturn(JSONObject param) { log.info("手持空轴送回, {}", param); - // param: point_code, vehicle_code + // param: point_code String pointCode = param.getString("point_code"); - String vehicleCode = param.getString("vehicle_code"); - Assert.notBlank(vehicleCode, "载具编码不能为空!"); StIvtCutpointivt cutPoint = cutpointivtService.getByFullCode(pointCode, false); + if ("01".equals(cutPoint.getEmpty_point_status())) { + throw new BadRequestException("系统识别到分切上料位[ " + pointCode + " ]无空轴!"); + } // 校验是否有任务 List schBaseTasks = taskService.checkHaveTask(cutPoint.getEmpty_point_code()); if (schBaseTasks.size() > 0) { throw new BadRequestException("点位[" + pointCode + "]已经存在任务!"); } - // todo: 载具类型没有获取 param.put("device_code", cutPoint.getEmpty_point_code()); param.put("config_code", "SlitterSendRollAGVTask"); + // 最后一趟送回去的才需要清 + param.put("is_flag", "1"); param.put("create_mode", GeneralDefinition.PDA_CREATION); slitterSendRollAGVTask.apply(param); JSONObject result = new JSONObject(); @@ -177,4 +191,114 @@ public class SlitterPdaServiceImpl implements SlitterPdaService { result.put("message", "分切机" + deviceCode + "下卷成功!"); return result; } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject sendSlitterRoll(JSONObject param) { + log.info("手持母卷复烤, {}", param); + // param: point_code + String pointCode = param.getString("point_code"); + // 判断是否存在任务 + List unFinishTasks = taskService.checkHaveTask(pointCode); + // 判断是否存在对应的桁架任务 + List unFinishRelatedTasks = taskService.checkHaveRelatedTaskInRequestParam(pointCode); + if (unFinishTasks.size() > 0 || unFinishRelatedTasks.size() > 0) { + throw new BadRequestException("点位[" + pointCode + "]已经存在任务!"); + } + StIvtCutpointivt cutPoint = cutpointivtService.getOneByCode(pointCode); + if ("01".equals(cutPoint.getFull_point_status()) + || ObjectUtil.isEmpty(cutPoint.getContainer_name())) { + throw new BadRequestException("点位[" + pointCode + "]系统检测空位!"); + } + // 获取生箔工单 + PdmBiRawfoilworkorder rawOrder = rawfoilworkorderService.getByContainerName(cutPoint.getContainer_name()); + // 组织请求任务参数 + JSONObject taskParam = new JSONObject(); + taskParam.put("device_code", pointCode); + taskParam.put("config_code", "SlitterInHotAGVTask"); + // todo: 流转单号暂时当作母卷号 + taskParam.put("order_code", rawOrder.getContainer_name()); + taskParam.put("create_mode", GeneralDefinition.PDA_CREATION); + slitterInHotAGVTask.apply(taskParam); + JSONObject result = new JSONObject(); + result.put("message", "母卷回库任务创建成功!"); + return result; + } + + @Override + public JSONObject querySlitterDeviceSubVolumeInfos(JSONObject param) { + JSONObject res = new JSONObject(); + JSONObject data = new JSONObject(); + res.put("status", cn.hutool.http.HttpStatus.HTTP_OK); + res.put("data", data); + // param: device_code + String device_code = param.getString("point_code"); + String msg = ""; + StIvtCutpointivt deviceCode = cutpointivtService.getPintByExtCode(device_code, false); + String upQzzno = deviceCode.getUp_qzzno(); + String downQzzno = deviceCode.getDown_qzzno(); + if (ObjectUtil.isNotEmpty(upQzzno)) { + List byQzzNo = slittingproductionplanService.getByQzzNoByStatus(upQzzno, "05"); + if (byQzzNo.size() == 0) { + msg = "上轴对应的数据不存在!"; + } else { + String collect = byQzzNo + .stream() + .map(PdmBiSlittingproductionplan::getContainer_name) + .collect(Collectors.joining(",")); + data.put("up", collect); + } + } else { + msg = "上轴无子卷信息!"; + } + if (ObjectUtil.isNotEmpty(downQzzno)) { + List byQzzNo = slittingproductionplanService.getByQzzNoByStatus(downQzzno, "05"); + if (byQzzNo.size() == 0) { + msg = msg + "下轴对应的数据不存在!"; + } else { + String collect = byQzzNo + .stream() + .map(PdmBiSlittingproductionplan::getContainer_name) + .collect(Collectors.joining(",")); + data.put("down", collect); + } + } else { + msg = msg + "下轴无子卷信息!"; + } + // 获取当前分切机的下一组分切计划(最多四条分切计划) + // hint: 获取到的分切可能是不同组的但具有一定时间顺序, 可能是以前的脏数据 + List timePlans = slittingproductionplanService.list( + new LambdaQueryWrapper() + .eq(PdmBiSlittingproductionplan::getResource_name, deviceCode.getExt_code()) + .eq(PdmBiSlittingproductionplan::getStatus, "03") + .eq(PdmBiSlittingproductionplan::getIs_delete, "0") + .orderByAsc(PdmBiSlittingproductionplan::getUpdate_time)); + log.info("获取下一组分切计划:{}", timePlans); + if (timePlans.size() > 0) { + // 寻找备好轴的对接点位 + List cutPointList = bstIvtCutpointivtService.getReadyShaftPoint(deviceCode.getExt_code()); + if (cutPointList.size() == 0) { + msg = msg + "没有套好轴的位置!"; + } else { + // 找到该分切计划的点位 + BstIvtCutpointivt newCutPoint = cutPointList.get(0); + List qzzNos = Stream.of(newCutPoint.getQzz_no1(), newCutPoint.getQzz_no2()) + .filter(value -> value != null && !value.isEmpty()) + .collect(Collectors.toList()); + List nextPlans = slittingproductionplanService.list(new LambdaQueryWrapper() + .in(PdmBiSlittingproductionplan::getQzzno, qzzNos) + .eq(PdmBiSlittingproductionplan::getStatus, "03") + .eq(PdmBiSlittingproductionplan::getIs_delete, "0")); + String collect = nextPlans.stream() + .map(PdmBiSlittingproductionplan::getContainer_name) + .filter(ObjectUtil::isNotEmpty) + .collect(Collectors.joining(",")); + msg = msg + "下一趟子卷号[" + collect + "]准备的气胀轴位置[" + newCutPoint.getPoint_code() + "]"; + } + } else { + msg = msg + " 没有套好轴的下一趟分切计划!"; + } + data.put("msg", msg); + return res; + } } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/package-info.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/package-info.java new file mode 100644 index 000000000..e5be9bd3b --- /dev/null +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/package-info.java @@ -0,0 +1,4 @@ +/** + * 手持相关包 + */ +package org.nl.wms.pda; diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/controller/NbjPdaController.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/controller/NbjPdaController.java index 8884cbf02..a0e3b6096 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/controller/NbjPdaController.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/controller/NbjPdaController.java @@ -65,8 +65,9 @@ public class NbjPdaController { @PostMapping("/doBindingGx") @Log("套轴绑定-绑定管芯") public ResponseEntity doBindingGx(@RequestBody JSONObject param) { - return new ResponseEntity<>(nbjPdaService.doBindingGx(param), HttpStatus.OK); + return new ResponseEntity<>(nbjPdaService.doBindingGxV2(param), HttpStatus.OK); } + @PostMapping("/getSlitterDeviceBox") @Log(value = "套轴绑定-分切机设备下拉框", isAddLogTable=false) public ResponseEntity getSlitterDeviceBox() { diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/controller/OtherPdaController.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/controller/OtherPdaController.java index 30659d2a2..d01b87c14 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/controller/OtherPdaController.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/controller/OtherPdaController.java @@ -30,6 +30,11 @@ public class OtherPdaController { public ResponseEntity startMoveWasteFoilV2(@RequestBody JSONObject param) { return new ResponseEntity<>(otherPdaService.startMoveWasteFoilV2(param), HttpStatus.OK); } + @PostMapping("/resumeMoveWasteFoil/v2") + @Log("继续/结束搬运废箔信息") + public ResponseEntity resumeMoveWasteFoilV2(@RequestBody JSONObject param) { + return new ResponseEntity<>(otherPdaService.resumeMoveWasteFoilV2(param), HttpStatus.OK); + } @PostMapping("/startMoveWasteFoil") @Log("开始搬运废箔信息") public ResponseEntity startMoveWasteFoil(@RequestBody JSONObject param) { @@ -45,6 +50,11 @@ public class OtherPdaController { public ResponseEntity callAgvToSampling(@RequestBody JSONObject param) { return new ResponseEntity<>(otherPdaService.callAgvToSampling(param), HttpStatus.OK); } + @PostMapping("/callAgvToSamplingVerify") + @Log("取样确认") + public ResponseEntity callAgvToSamplingVerify(@RequestBody JSONObject param) { + return new ResponseEntity<>(otherPdaService.callAgvToSamplingVerify(param), HttpStatus.OK); + } @PostMapping("/onlyCallRollTruss") @Log("呼叫出辊-桁架任务完成不做AGV") public ResponseEntity onlyCallRollTruss(@RequestBody JSONObject param) { diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/service/NbjPdaService.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/service/NbjPdaService.java index 240c72d0e..a25b9d41c 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/service/NbjPdaService.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/service/NbjPdaService.java @@ -71,4 +71,11 @@ public interface NbjPdaService { * @return / */ JSONObject doSendShaft(JSONObject param); + + /** + * 套轴绑定-绑定管芯 + * @param param / + * @return / + */ + JSONObject doBindingGxV2(JSONObject param); } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/service/OtherPdaService.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/service/OtherPdaService.java index 93e08978a..3aaf067d0 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/service/OtherPdaService.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/service/OtherPdaService.java @@ -14,6 +14,14 @@ public interface OtherPdaService { * @return / */ JSONObject startMoveWasteFoilV2(JSONObject param); + + /** + * 继续/结束搬运废箔信息 + * @param param / + * @return / + */ + JSONObject resumeMoveWasteFoilV2(JSONObject param); + /** * 开始搬运废箔 * @param param / @@ -48,4 +56,11 @@ public interface OtherPdaService { * @return / */ JSONObject onlySendRollTruss(JSONObject param); + + /** + * 取样送样确认 + * @param param / + * @return / + */ + JSONObject callAgvToSamplingVerify(JSONObject param); } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/service/impl/GxPdaServiceImpl.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/service/impl/GxPdaServiceImpl.java index 11a6db5df..db079e4ab 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/service/impl/GxPdaServiceImpl.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/service/impl/GxPdaServiceImpl.java @@ -151,17 +151,16 @@ public class GxPdaServiceImpl implements GxPdaService { throw new BadRequestException("一次性最多只能入5个管芯"); } // 找管芯库中的空位。 - List allGxPoints = pointService.getPointByConditions("A1", "A1-GXK", - "3", "1", null, true); + List allGxPoints = pointService.getGxPointNotLock(); if (allGxPoints.size() < gxNumber) { log.warn("管芯库不够存放,只够存放{}个管芯", allGxPoints.size()); } - gxNumber = Math.min(gxNumber, allGxPoints.size()); + int actualQuantity = Math.min(gxNumber, allGxPoints.size()); // 更新点位信息 List updatePoint = new ArrayList<>(); - for (int i = 0; i < gxNumber; i++) { + for (int i = 0; i < actualQuantity; i++) { SchBasePoint point = allGxPoints.get(i); - point.setPoint_status("2"); + point.setLock_type("2"); point.setVehicle_code(materialCode); point.setRemark(materialSpec); updatePoint.add(point); @@ -172,10 +171,11 @@ public class GxPdaServiceImpl implements GxPdaService { JSONObject acs = new JSONObject(); acs.put("product_area", URLEnum.ACS_URL_A1.getProduct_area()); acs.put("device_code", gxRks.get(0).getPoint_code()); - for (int i = 0; i < gxNumber; i++) { + acs.put("num", gxNumber); + for (int i = 0; i < actualQuantity; i++) { // 查找点位最终一次性发给ACS - acs.put("to_barcode" + (i + 1), materialCode); - acs.put("to_target" + (i + 1), allGxPoints.get(i).getPoint_code()); + acs.put("barcode" + (i + 1), materialCode); + acs.put("target" + (i + 1), allGxPoints.get(i).getPoint_code()); acsArray.add(acs); } // 调用ACS diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/service/impl/NbjPdaServiceImpl.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/service/impl/NbjPdaServiceImpl.java index db23f7089..6912a0d47 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/service/impl/NbjPdaServiceImpl.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/service/impl/NbjPdaServiceImpl.java @@ -148,13 +148,14 @@ public class NbjPdaServiceImpl implements NbjPdaService { @Override public JSONObject doSubVolumeBindingWeight(JSONObject param) { log.info("子卷绑定重量 - {}", param); - // vehicle_code, weight - String vehicleCode = param.getString("vehicle_code"); + // container_name, weight + String containerName = param.getString("container_name"); String weight = param.getString("weight"); - PdmBiSlittingproductionplan plan = slittingproductionplanService.getByTubeCode(vehicleCode); + PdmBiSlittingproductionplan plan = slittingproductionplanService.getByContainerName(containerName); if (ObjectUtil.isEmpty(plan)) { - throw new BadRequestException("分切计划不存在!"); + throw new BadRequestException("子卷号[ " + containerName + " ]分切计划不存在!"); } + log.info("更新子卷:{} - 重量:{}", containerName, weight); plan.setWeight(weight); plan.setUpdate_time(DateUtil.now()); plan.setUpdate_optid(SecurityUtils.getCurrentUserId()); @@ -168,8 +169,8 @@ public class NbjPdaServiceImpl implements NbjPdaService { @Override public List getSlitterNeedShaftPlans(@RequestBody JSONObject param) { - String pointCode = param.getString("point_code"); - // 获取所有状态是01的分切计划 + String pointCode = param.getString("device"); + // 获取所有状态是01的分切计划 device List list = slittingproductionplanService.list(new LambdaQueryWrapper() .eq(PdmBiSlittingproductionplan::getStatus, "01") .eq(PdmBiSlittingproductionplan::getIs_child_tz_ok, "0") @@ -180,6 +181,49 @@ public class NbjPdaServiceImpl implements NbjPdaService { @Override @Transactional(rollbackFor = Exception.class) + public JSONObject doBindingGxV2(JSONObject param) { + log.info("手持绑定管芯 - {}", param); + // param: point_code,row + String pointCode = param.getString("point_code"); + BstIvtCutpointivt tzzcPoint = bstIvtCutpointivtService.getPintByTrussCode(pointCode, false); + JSONArray rows = param.getJSONArray("row"); + List orderIds = rows.stream() + .map(o -> ((JSONObject) o)) + .map(o -> o.getString("workorder_id")) + .collect(Collectors.toList()); + List plans = slittingproductionplanService.getByIds(orderIds); + // 当前套轴的分切计划 + PdmBiSlittingproductionplan demoPlan = plans.get(0); + String resourceName = demoPlan.getResource_name(); + // 生成虚拟气胀轴编码 + String qzzNo = TaskUtils.createVirtualQzzNo(resourceName, "yyMMddHHmmss", demoPlan); + for (PdmBiSlittingproductionplan plan : plans) { + plan.setQzzno(qzzNo); + plan.setIs_child_tz_ok("1"); + TaskUtils.updateOptMessageBySlitterPlan(plan); + } + // 批量更新 + slittingproductionplanService.updateBatchById(plans); + // 点位更新数据 + if (tzzcPoint.getTruss_point_code1().equals(pointCode)) { + // 上轴 + tzzcPoint.setQzz_no1(qzzNo); + } else { + // 下轴 + tzzcPoint.setQzz_no2(qzzNo); + } + tzzcPoint.setPoint_status("2"); + setBCutUpdateByPC(tzzcPoint); + bstIvtCutpointivtService.updateById(tzzcPoint); + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "管芯绑定成功!"); + return result; + } + + @Override + @Deprecated + @Transactional(rollbackFor = Exception.class) public JSONObject doBindingGx(JSONObject param) { log.info("手持绑定管芯 - {}", param); // param: point_code, vehicle_code,workorder_id(row) @@ -316,11 +360,11 @@ public class NbjPdaServiceImpl implements NbjPdaService { PdmBiSlittingproductionplan currentUpPlan = plans.stream() .filter(p -> "1".equals(p.getUp_or_down())) .findFirst() - .orElse(null); + .orElse(new PdmBiSlittingproductionplan()); PdmBiSlittingproductionplan currentDownPlan = plans.stream() .filter(p -> "2".equals(p.getUp_or_down())) .findFirst() - .orElse(null); + .orElse(new PdmBiSlittingproductionplan()); PdmBiSlittingproductionplan demoPlan = plans.get(0); StIvtCutpointivt endPoint = stIvtCutpointivtService.getPintByExtCode(demoPlan.getResource_name(), false); taskParam.put("point_code2", endPoint.getPoint_code()); diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/service/impl/OtherPdaServiceImpl.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/service/impl/OtherPdaServiceImpl.java index 8148110fd..bd43d3bfb 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/service/impl/OtherPdaServiceImpl.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/st/service/impl/OtherPdaServiceImpl.java @@ -1,5 +1,7 @@ package org.nl.wms.pda.st.service.impl; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -8,14 +10,18 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.pda.st.service.OtherPdaService; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; import org.nl.wms.sch.task.service.ISchBaseTaskService; import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task_manage.TaskStatus; import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition; import org.nl.wms.sch.task_manage.tasks.other.CallToSamplingAGVTask; +import org.nl.wms.sch.task_manage.tasks.other.SendWasteFoilAGVTask; import org.nl.wms.sch.task_manage.tasks.other.WasteFoilAGVTask; import org.nl.wms.sch.task_manage.tasks.raw.RawCallRollTrussTask; import org.nl.wms.sch.task_manage.tasks.slitter.SlitterSendRollTrussTask; +import org.nl.wms.util.TaskUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @@ -43,16 +49,109 @@ public class OtherPdaServiceImpl implements OtherPdaService { private SlitterSendRollTrussTask slitterSendRollTrussTask; @Autowired private WmsToAcsService wmsToAcsService; + @Autowired + private SendWasteFoilAGVTask sendWasteFoilAGVTask; + @Autowired + private ISchBasePointService pointService; @Override @Transactional(rollbackFor = Exception.class) public JSONObject startMoveWasteFoilV2(JSONObject param) { + // 点击开始,都将废箔任务创建单条任务存储到任务表中, + // 在通过定时任务,确保只有一条执行中/终点不是废箔终点的任务 log.info("手持开始搬运废箔 - {}", param); - return null; + // 只做保存任务 + // point_code + String pointCode = param.getString("point_code"); + List schBaseTasks = taskService.checkHaveTask(pointCode); + if (schBaseTasks.size() > 0) { + throw new BadRequestException("点位[" + pointCode + "]已经存在任务!"); + } + JSONObject taskParam = new JSONObject(); + taskParam.put("point_code2", pointCode); + taskParam.put("index_task", 1); + taskParam.put("config_code", "SendWasteFoilAGVTask"); + taskParam.put("create_mode", GeneralDefinition.PDA_CREATION); + taskParam.put("task_status", TaskStatus.SURE_END.getCode()); + sendWasteFoilAGVTask.createTask(taskParam); + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "废箔开始搬运请求成功!"); + return result; } @Override @Transactional(rollbackFor = Exception.class) + public JSONObject resumeMoveWasteFoilV2(JSONObject param) { + log.info("继续/结束搬运废箔 - {}", param); + // 当前的点位是放好废箔的点位 参数:flag:1-确认,2-结束 point_code + String flag = param.getString("flag"); + // 判断是否能够搬运 + String pointCode = param.getString("point_code"); + // 校验是否二次创建任务 + List schBaseTasks = taskService.checkHaveTask(pointCode); + if (schBaseTasks.size() > 0) { + throw new BadRequestException("点位[" + pointCode + "]已经存在任务!"); + } + // 查找执行中的任务 + SchBaseTask task = taskService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTask::getPoint_code2, pointCode) + .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("点位[" + pointCode + "]上一个任务不存在!"); + } + JSONObject upTaskRequestObj = JSONObject.parseObject(task.getRequest_param()); + // 获取下一条的任务 + List waitTask = taskService.getTaskByConfigAndStatus(task.getConfig_code(), TaskStatus.SURE_END.getCode()); + if (waitTask.size() == 0 || "2".equals(flag)) { + // 最后一条任务, 创建去终点的任务 + // 获取一个废箔位置 + List fbPoints = pointService.getAllBusinessNotTaskPoint("A1", "A1-FB", + "2", null, null, null); + if (CollectionUtil.isEmpty(fbPoints)) { + throw new BadRequestException("找不到废箔点位,请稍后再试!"); + } + JSONObject taskParam = new JSONObject(); + taskParam.put("point_code1", pointCode); + taskParam.put("point_code2", fbPoints.get(0).getPoint_code()); + taskParam.put("config_code", "SendWasteFoilAGVTask"); + taskParam.put("create_mode", GeneralDefinition.PDA_CREATION); + taskParam.put("remark", "废箔回去"); + taskParam.put("index_task", upTaskRequestObj.getInteger("index_task") + 1); + taskParam.put("carNo", task.getCar_no()); + taskParam.put("task_status", TaskStatus.START_AND_POINT.getCode()); + sendWasteFoilAGVTask.createTask(taskParam); + } else { + // 获取其中一条任务设置起点 + SchBaseTask nextTask = waitTask.get(0); + JSONObject requestObj = JSONObject.parseObject(nextTask.getRequest_param()); + requestObj.put("up_task_code", task.getTask_code()); + requestObj.put("index_task", upTaskRequestObj.getInteger("index_task") + 1); + nextTask.setCar_no(task.getCar_no()); + nextTask.setPoint_code1(task.getPoint_code2()); + nextTask.setRequest_param(requestObj.toJSONString()); + nextTask.setTask_status(TaskStatus.START_AND_POINT.getCode()); + TaskUtils.setUpdateByDefault(nextTask); + taskService.updateById(nextTask); + } + // 通知ACS完成上一个任务 + JSONArray acs = new JSONArray(); + JSONObject acsParam = new JSONObject(); + acsParam.put("task_code", task.getTask_code()); + acsParam.put("product_area", task.getProduct_area()); + acs.add(acsParam); + log.info("通知ACS完成上一个任务的参数 - {}", acs); + JSONObject jsonObject = wmsToAcsService.canFinishPreviousTask(acs); + log.info("通知ACS完成上一个任务的反馈 - {}", jsonObject); + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "废箔继续搬运请求成功!"); + return result; + } + + @Override + @Deprecated + @Transactional(rollbackFor = Exception.class) public JSONObject startMoveWasteFoil(JSONObject param) { log.info("手持开始搬运废箔 - {}", param); // row @@ -78,6 +177,7 @@ public class OtherPdaServiceImpl implements OtherPdaService { } @Override + @Deprecated @Transactional(rollbackFor = Exception.class) public JSONObject resumeMoveWasteFoil(JSONObject param) { log.info("继续/结束搬运废箔 - {}", param); @@ -194,4 +294,37 @@ public class OtherPdaServiceImpl implements OtherPdaService { result.put("message", "收卷辊入库任务请求成功!"); return result; } + + @Override + public JSONObject callAgvToSamplingVerify(JSONObject param) { + log.info("取样/放样确认 - {}", param); + // 放货1, 取货2 : flag, startPoint, endPoint + String flag = param.getString("flag"); + String startPoint = param.getString("startPoint"); + String endPoint = param.getString("endPoint"); + JSONArray acs = new JSONArray(); + JSONObject acsParam = new JSONObject(); + SchBaseTask task; + if ("1".equals(flag)) { + Assert.notBlank(startPoint, "起点不能为空!"); + // 获取这个任务 + task = taskService.getTaskByPointCodeX(startPoint, null, null, null); + acsParam.put("device_code", startPoint); + acsParam.put("option", "2"); + } else { + Assert.notBlank(endPoint, "终点不能为空!"); + task = taskService.getTaskByPointCodeX(null, endPoint, null, null); + acsParam.put("device_code", endPoint); + acsParam.put("option", "3"); + } + acsParam.put("task_code", task.getTask_code()); + acsParam.put("product_area", task.getProduct_area()); + acs.add(acsParam); + JSONObject jsonObject = wmsToAcsService.updateTask(acs); + log.info("取样下发ACS,执行AGV动作,请求参数{},返回结果:{}", acs, jsonObject); + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "取样确认请求成功!"); + return result; + } } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/service/IpdmBiSlittingproductionplanService.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/service/IpdmBiSlittingproductionplanService.java index bc06b9d40..1da6ca4d3 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/service/IpdmBiSlittingproductionplanService.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/service/IpdmBiSlittingproductionplanService.java @@ -7,6 +7,7 @@ import org.nl.wms.pdm.bi.dao.PdmBiSlittingproductionplan; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.wms.pdm.bi.dto.PdmBiSlittingproductionplanParam; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; @@ -116,6 +117,27 @@ public interface IpdmBiSlittingproductionplanService extends IService getByQzzNos(List qzzNo); + + /** + * 获取id对应的分切计划 + * @param ids / + * @return / + */ + List getByIds(Collection ids); + + /** + * 获取分切计划 + * @param qzzno 气胀轴 + * @param status 状态 + * @return / + */ + List getByQzzNoByStatus(String qzzno, String status); + /** + * 根据子卷获取分切 + * @param containerName 子卷 + * @return / + */ + PdmBiSlittingproductionplan getByContainerName(String containerName); } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/service/impl/PdmBiSlittingproductionplanServiceImpl.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/service/impl/PdmBiSlittingproductionplanServiceImpl.java index 6f49c83c0..debe4d867 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/service/impl/PdmBiSlittingproductionplanServiceImpl.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/bi/service/impl/PdmBiSlittingproductionplanServiceImpl.java @@ -266,5 +266,27 @@ public class PdmBiSlittingproductionplanServiceImpl extends ServiceImpl getByIds(Collection ids) { + LambdaQueryWrapper lam = new QueryWrapper().lambda(); + lam.in(PdmBiSlittingproductionplan::getWorkorder_id, ids); + return list(lam); + } + + @Override + public List getByQzzNoByStatus(String qzzNo, String status) { + LambdaQueryWrapper lam = new QueryWrapper().lambda(); + lam.eq(PdmBiSlittingproductionplan::getQzzno, qzzNo) + .eq(PdmBiSlittingproductionplan::getIs_delete, "0") + .eq(PdmBiSlittingproductionplan::getStatus, status); + return pdmBiSlittingproductionplanMapper.selectList(lam); + } + @Override + public PdmBiSlittingproductionplan getByContainerName(String containerName) { + LambdaQueryWrapper lam = new QueryWrapper().lambda(); + lam.eq(PdmBiSlittingproductionplan::getContainer_name, containerName) + .eq(PdmBiSlittingproductionplan::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")); + return pdmBiSlittingproductionplanMapper.selectOne(lam); + } } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/bcut/service/IBstIvtCutpointivtService.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/bcut/service/IBstIvtCutpointivtService.java index c5c7592c1..75a6efac9 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/bcut/service/IBstIvtCutpointivtService.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/bcut/service/IBstIvtCutpointivtService.java @@ -129,4 +129,11 @@ public interface IBstIvtCutpointivtService extends IService { * @return / */ BstIvtCutpointivt getSleeveShaftOkNotTaskPoint(String resourceName); + + /** + * 获取准备好的点 + * @param code / + * @return / + */ + List getReadyShaftPoint(String code); } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/bcut/service/dao/mapper/BstIvtCutpointivtMapper.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/bcut/service/dao/mapper/BstIvtCutpointivtMapper.java index 7cacefb0c..9e82e69f4 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/bcut/service/dao/mapper/BstIvtCutpointivtMapper.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/bcut/service/dao/mapper/BstIvtCutpointivtMapper.java @@ -25,4 +25,6 @@ public interface BstIvtCutpointivtMapper extends BaseMapper { List getAreaNotTaskPointByStatusNotCheckPickUpCompleted(String type, String pointStatus, String area, String sort); BstIvtCutpointivt getSleeveShaftOkNotTaskPoint(String resourceName); + + List getReadyShaftPoint(String code); } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/bcut/service/dao/mapper/BstIvtCutpointivtMapper.xml b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/bcut/service/dao/mapper/BstIvtCutpointivtMapper.xml index 51dd48268..9af25e17f 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/bcut/service/dao/mapper/BstIvtCutpointivtMapper.xml +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/bcut/service/dao/mapper/BstIvtCutpointivtMapper.xml @@ -156,4 +156,14 @@ AND pp.resource_name = #{resourceName} ORDER BY bic.update_time LIMIT 1 + diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/bcut/service/impl/BstIvtCutpointivtServiceImpl.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/bcut/service/impl/BstIvtCutpointivtServiceImpl.java index bd231ea4c..1570a7ea9 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/bcut/service/impl/BstIvtCutpointivtServiceImpl.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pdm/ivt/bcut/service/impl/BstIvtCutpointivtServiceImpl.java @@ -149,4 +149,9 @@ public class BstIvtCutpointivtServiceImpl extends ServiceImpl getReadyShaftPoint(String code) { + return bstIvtCutpointivtMapper.getReadyShaftPoint(code); + } } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/quartz/AutoSendWasteFoilAGVTask.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/quartz/AutoSendWasteFoilAGVTask.java new file mode 100644 index 000000000..6a46d1005 --- /dev/null +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/quartz/AutoSendWasteFoilAGVTask.java @@ -0,0 +1,53 @@ +package org.nl.wms.quartz; + +import cn.hutool.core.collection.CollectionUtil; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task_manage.TaskStatus; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @Author: lyd + * @Description: 从废箔起点开始 + * @Date: 2024/8/27 + */ +@Slf4j +@Component +public class AutoSendWasteFoilAGVTask { + public static final String TASK_CODE = "SendWasteFoilAGVTask"; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private ISchBasePointService pointService; + public void run() { + log.info("查找废箔起点任务开始执行..."); + // 获取下一条的任务 + List waitTask = taskService.getTaskByConfigAndStatus(TASK_CODE, TaskStatus.SURE_END.getCode()); + if (taskService.checkAllWaiteByWasteFoil()) { + log.info("没有搬运中的废箔,执行创建从废箔起点到废箔终点的任务!"); + // 都是等待状态的任务 + SchBaseTask task = waitTask.get(0); + // 查找废箔起点 + List fbPoints = pointService.getAllBusinessNotTaskPoint("A1", "A1-FB", + "2", "2", null, null); + if (CollectionUtil.isEmpty(fbPoints)) { + log.error("找不到废箔点位 - {}", task); + return; + } + SchBasePoint point = fbPoints.get(0); + task.setPoint_code1(point.getPoint_code()); + task.setTask_status(TaskStatus.START_AND_POINT.getCode()); + TaskUtils.setUpdateByDefault(task); + taskService.updateById(task); + } + + } +} diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/ISchBasePointService.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/ISchBasePointService.java index c38b289c9..8c6108672 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/ISchBasePointService.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/ISchBasePointService.java @@ -118,4 +118,10 @@ public interface ISchBasePointService extends IService { * @return */ List getWindRollConformRawNotTaskPoints(String code); + + /** + * 获取管芯无锁位置 + * @return + */ + List getGxPointNotLock(); } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.java index c682db951..1329038fb 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.java @@ -44,4 +44,10 @@ public interface SchBasePointMapper extends BaseMapper { * @return / */ List getWindRollConformRawNotTaskPoints(String code); + + /** + * 获取无锁点位 + * @return + */ + List getGxPointNotLock(); } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml index 33db38d8b..9f6e27e7d 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/dao/mapper/SchBasePointMapper.xml @@ -80,4 +80,13 @@ ORDER BY p.update_time + diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java index 6d6139261..caf26db91 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/point/service/impl/SchBasePointServiceImpl.java @@ -242,4 +242,9 @@ public class SchBasePointServiceImpl extends ServiceImpl getGxPointNotLock() { + return pointMapper.getGxPointNotLock(); + } + } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/ISchBaseTaskService.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/ISchBaseTaskService.java index a33761a77..df983b09d 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/ISchBaseTaskService.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/ISchBaseTaskService.java @@ -145,4 +145,25 @@ public interface ISchBaseTaskService extends IService { * @return / */ List getWasteFoilTask(String code); + + /** + * 判断是否存在任务 + * @param collect 点位集合 + * @return / + */ + Boolean checkHaveTaskByPoints(List collect); + + /** + * 获取同配置、状态的任务 + * @param configCode 配置 + * @param status 状态 + * @return / + */ + List getTaskByConfigAndStatus(String configCode, String status); + + /** + * 判断废箔是否都是等待的任务 + * @return / + */ + boolean checkAllWaiteByWasteFoil(); } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java index c229ff76c..eaca122c9 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task/service/impl/SchBaseTaskServiceImpl.java @@ -1,5 +1,6 @@ package org.nl.wms.sch.task.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.IdUtil; @@ -31,6 +32,7 @@ import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Consumer; import java.util.stream.Collectors; /** @@ -272,7 +274,9 @@ public class SchBaseTaskServiceImpl extends ServiceImpl collect) { + if (CollectionUtil.isEmpty(collect)) { + return true; + } + LambdaQueryWrapper lam = new QueryWrapper().lambda(); + lam.eq(SchBaseTask::getIs_delete, "0") + .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()).and(la -> la.in(SchBaseTask::getPoint_code1, collect).or() + .in(SchBaseTask::getPoint_code2, collect).or() + .in(SchBaseTask::getPoint_code3, collect).or() + .in(SchBaseTask::getPoint_code4, collect)); + List list = list(lam); + return list.size() > 0; + } + + @Override + public List getTaskByConfigAndStatus(String configCode, String status) { + LambdaQueryWrapper lam = new QueryWrapper().lambda(); + lam.eq(SchBaseTask::getConfig_code, configCode) + .eq(SchBaseTask::getTask_status, status) + .eq(SchBaseTask::getIs_delete, "0") + .orderByAsc(SchBaseTask::getCreate_time); + return list(lam); + } + + @Override + public boolean checkAllWaiteByWasteFoil() { + LambdaQueryWrapper lam = new QueryWrapper().lambda(); + lam.eq(SchBaseTask::getConfig_code, "SendWasteFoilAGVTask") + .gt(SchBaseTask::getTask_status, TaskStatus.SURE_END.getCode()) + .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()) + .eq(SchBaseTask::getIs_delete, "0") + .orderByAsc(SchBaseTask::getCreate_time); + List list = list(lam); + return list.size() == 0; + } + } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java index 2dcdd13b3..2758be449 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AbstractTask.java @@ -112,6 +112,7 @@ public abstract class AbstractTask { taskDto.setVehicle_code(task.getVehicle_code()); taskDto.setVehicle_code2(task.getVehicle_code2()); taskDto.setProduct_area(task.getProduct_area()); + taskDto.setCar_no(task.getCar_no()); // 如果各类方法对返回参数有不同,可以通过调用子类实现的deliveryBeforeProcessing方法来完成赋值, // 也可以是统一封装到参数值中。 this.deliveryBeforeProcessing(task, taskDto); diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AcsTaskDto.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AcsTaskDto.java index 81af250e4..1e8d7f58d 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AcsTaskDto.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/AcsTaskDto.java @@ -130,6 +130,11 @@ public class AcsTaskDto { */ private String direction; + /** + * 车号 + */ + private String car_no; + /** * 扩展属性 */ diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/service/BakingOperationService.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/service/BakingOperationService.java index e99156917..81709077a 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/service/BakingOperationService.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/service/BakingOperationService.java @@ -14,4 +14,11 @@ public interface BakingOperationService { * @return / */ JSONObject acsRequestOutHotTask(JSONObject param); + + /** + * ACS请求入烘箱 + * @param param / + * @return / + */ + JSONObject acsRequestInHotTask(JSONObject param); } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/service/impl/BakingOperationServiceImpl.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/service/impl/BakingOperationServiceImpl.java index a599feaa2..e06fac1fc 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/service/impl/BakingOperationServiceImpl.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/service/impl/BakingOperationServiceImpl.java @@ -1,11 +1,18 @@ package org.nl.wms.sch.task_manage.service.impl; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; +import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder; +import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService; import org.nl.wms.sch.task.service.ISchBaseTaskService; import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition; import org.nl.wms.sch.task_manage.service.BakingOperationService; +import org.nl.wms.sch.task_manage.tasks.hot.InHotTrussTask; import org.nl.wms.sch.task_manage.tasks.hot.OutHotTrussTask; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -25,6 +32,10 @@ public class BakingOperationServiceImpl implements BakingOperationService { private ISchBaseTaskService taskService; @Autowired private OutHotTrussTask outHotTrussTask; + @Autowired + private IpdmBiRawfoilworkorderService rawfoilworkorderService; + @Autowired + private InHotTrussTask inHotTrussTask; @Override public JSONObject acsRequestOutHotTask(JSONObject param) { log.info("acs请求出烘箱:{}", param); @@ -43,4 +54,48 @@ public class BakingOperationServiceImpl implements BakingOperationService { result.put("data", new JSONObject()); return result; } + + @Override + public JSONObject acsRequestInHotTask(JSONObject param) { + log.info("acs请求入烘箱:{}", param); + // 任务完成将工单对应的状态设置04, 维护重量信息。触发烘箱桁架任务 + // param: task_code + String taskCode = param.getString("task_code"); + Assert.notBlank(taskCode, "任务编码不能为空!"); + SchBaseTask taskObj = taskService.getByCode(taskCode); + JSONObject taskParam = new JSONObject(); + String requestParam = taskObj.getRequest_param(); + JSONObject requestObj = JSONObject.parseObject(requestParam); + String orderCode = requestObj.getString("order_code"); + if (ObjectUtil.isNotEmpty(orderCode)) { + rawfoilworkorderService.update(new LambdaUpdateWrapper() + .set(PdmBiRawfoilworkorder::getStatus, "04") + .eq(PdmBiRawfoilworkorder::getContainer_name, orderCode)); + log.info("工单修改完毕 - 母卷号 - {}", orderCode); + } + // 烘箱暂存位 + String hxPointCode = ""; + // 获取点位 + if (ObjectUtil.isEmpty(taskObj.getPoint_code3())) { + // 取满任务 + hxPointCode = taskObj.getPoint_code2(); + } else { + // 取满放空任务 + hxPointCode = taskObj.getPoint_code4(); + } + log.info("开始创建桁架任务入烘箱...."); + taskParam.put("order_code", orderCode); + taskParam.put("up_task_code", taskObj.getTask_code()); + taskParam.put("device_code", hxPointCode); + taskParam.put("config_code", "InHotTrussTask"); + taskParam.put("create_mode", GeneralDefinition.ACS_CREATION); + // 满卷的收卷辊编码放在AGV任务的载具2上 + taskParam.put("vehicle_code", taskObj.getVehicle_code2()); + inHotTrussTask.apply(taskParam); + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "任务创建成功!"); + result.put("data", new JSONObject()); + return result; + } } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/service/impl/NbjOperationServiceImpl.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/service/impl/NbjOperationServiceImpl.java index c315e5ab4..ce2118a90 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/service/impl/NbjOperationServiceImpl.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/service/impl/NbjOperationServiceImpl.java @@ -2,15 +2,19 @@ package org.nl.wms.sch.task_manage.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.config.lucene.TagNameEnum; import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition; import org.nl.wms.sch.task_manage.core.enums.TaskFinishedTypeEnum; import org.nl.wms.sch.task_manage.service.NbjOperationService; +import org.nl.wms.util.TaskUtils; import org.slf4j.MDC; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -32,14 +36,17 @@ import static org.nl.wms.util.PointUtils.clearPoint; public class NbjOperationServiceImpl implements NbjOperationService { @Autowired private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; @Override @Transactional(rollbackFor = Exception.class) public JSONObject tubeExceptionHandling(JSONObject param) { MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.ERROR_GX_IN_OUT.getTag()); log.info("ACS请求满入/空出异常处理 - {}", param); - // type: 1满入,2空出、device_code: 异常点位 + // type: 1满入,2空出、target: 异常点位、barcode:条码、task_code: 任务编码 String type = param.getString("type"); - String deviceCode = param.getString("device_code"); + String deviceCode = param.getString("target"); + String vehicleCode = param.getString("barcode"); Assert.notBlank(type, "类型不能为空!"); Assert.notBlank(deviceCode, "点位不能为空!"); SchBasePoint exceptionPoint = pointService.getById(deviceCode); @@ -48,15 +55,25 @@ public class NbjOperationServiceImpl implements NbjOperationService { // 满入: 把点位禁用,重新分配点位 exceptionPoint.setIs_used(false); exceptionPoint.setUpdate_time(DateUtil.now()); - allGxPoints = pointService.getPointByConditions("A1", "A1-GXK", - "2", "1", null, true); + // 找管芯库中的空位。 + allGxPoints = pointService.getGxPointNotLock(); log.info("满入禁用点位"); pointService.updateById(exceptionPoint); } else { - // 空出: 根据点位的载具类型查找相同位置 - String vehicleType = exceptionPoint.getVehicle_type(); - allGxPoints = pointService.getPointByConditions("A1", "A1-GXK", - "2", "2", vehicleType, true); + String taskCode = param.getString("task_code"); + SchBaseTask task = taskService.getByCode(taskCode); + if (ObjectUtil.isEmpty(task)) { + throw new BadRequestException("任务[ {" + taskCode + "} ]不存在!"); + } + // 空出: 根据点位的载具类型查找相同位置: 应该查找没有任务的点位 + allGxPoints = pointService.getAllBusinessNotTaskPoint("A1", "A1-GXK", + "3", "2", null, vehicleCode); + if (allGxPoints.size() > 0) { + task.setPoint_code3(allGxPoints.get(0).getPoint_code()); + task.setRemark("重新分配货位"); + TaskUtils.setUpdateByDefault(task); + taskService.updateById(task); + } } if (allGxPoints.size() == 0) { throw new BadRequestException("重新分配货位失败!"); diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/service/impl/OtherOperationServiceImpl.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/service/impl/OtherOperationServiceImpl.java index 3c6d28a40..b93c1af8b 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/service/impl/OtherOperationServiceImpl.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/service/impl/OtherOperationServiceImpl.java @@ -16,6 +16,7 @@ import org.nl.wms.sch.task_manage.service.OtherOperationService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; @@ -34,6 +35,7 @@ public class OtherOperationServiceImpl implements OtherOperationService { @Autowired private IWastefoilrecordService wastefoilrecordService; @Override + @Transactional(rollbackFor = Exception.class) public JSONObject acsRequestWasteFoilWeight(JSONObject param) { log.info("ACS反馈废箔重量: {}", param); // task_code, point_code, weight @@ -47,7 +49,7 @@ public class OtherOperationServiceImpl implements OtherOperationService { JSONObject requestObj = JSONObject.parseObject(requestParam); int indexTask = requestObj.getInteger("index_task"); requestObj.put("weight", weight); - if (indexTask != 0) { + if (indexTask != 1) { // 获取上一条任务的重量 String upTaskCode = requestObj.getString("up_task_code"); SchBaseTask upTask = taskService.getByCode(upTaskCode); diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/nbj/SendShaftAGVTask.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/nbj/SendShaftAGVTask.java index beaac175c..6ee0d4c39 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/nbj/SendShaftAGVTask.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/nbj/SendShaftAGVTask.java @@ -59,6 +59,7 @@ public class SendShaftAGVTask extends AbstractTask { BstIvtCutpointivt startPoint = bcutpointivtService.getSleeveShaftOkNotTaskPoint(requestObj.getString("resource_name")); if (ObjectUtil.isEmpty(startPoint)) { log.warn("没有找到设备为[ {} ]套好轴的气胀轴点位信息!", requestObj.getString("resource_name")); + return; } List collect = Stream.of(startPoint.getUp_gx1(), startPoint.getUp_gx2(), startPoint.getDown_gx1(), startPoint.getDown_gx2()) .filter(ObjectUtil::isNotEmpty).collect(Collectors.toList()); diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/other/SendWasteFoilAGVTask.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/other/SendWasteFoilAGVTask.java new file mode 100644 index 000000000..9b48ba63d --- /dev/null +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/other/SendWasteFoilAGVTask.java @@ -0,0 +1,125 @@ +package org.nl.wms.sch.task_manage.tasks.other; + +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.CodeUtil; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.TaskStatus; +import org.nl.wms.sch.task_manage.core.enums.TaskFinishedTypeEnum; +import org.nl.wms.sch.task_manage.service.OtherOperationService; +import org.nl.wms.util.PointUtils; +import org.nl.wms.util.TaskUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; + +import static org.nl.wms.util.TaskUtils.checkTaskOptionStatus; + +/** + * @Author: lyd + * @Description: 废箔业务 + * @Date: 2024/8/27 + */ +@Slf4j +@Component(value = "SendWasteFoilAGVTask") +public class SendWasteFoilAGVTask extends AbstractTask { + private final String THIS_CLASS = SendWasteFoilAGVTask.class.getName(); + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private OtherOperationService otherOperationService; + @Autowired + private ISchBasePointService pointService; + @Override + public void create() throws BadRequestException { + + } + + @Override + public String createTask(JSONObject form) { + String taskStatus = form.getString("task_status"); + // 创建任务 + SchBaseTask task = new SchBaseTask(); + task.setTask_id(IdUtil.getSnowflake(1,1).nextIdStr()); + task.setTask_code(CodeUtil.getNewCode("TASK_CODE")); + task.setConfig_code("SendWasteFoilAGVTask"); + task.setPoint_code1(form.getString("point_code1")); + task.setPoint_code2(form.getString("point_code2")); + task.setProduct_area(form.getString("product_area")); + task.setVehicle_code(form.getString("vehicle_code")); + task.setVehicle_type(form.getString("vehicle_type")); + task.setCreate_mode(form.getString("create_mode")); + task.setRemark(form.getString("remark")); + task.setCar_no(form.getString("carNo")); + task.setRequest_param(JSONObject.toJSONString(form)); + task.setHandle_class(THIS_CLASS); + task.setTask_status(ObjectUtil.isEmpty(taskStatus) + ? TaskStatus.START_AND_POINT.getCode() + : taskStatus); + TaskUtils.setCreateByDefault(task); + taskService.save(task); + return task.getTask_id(); + } + + @Override + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + checkTaskOptionStatus(taskObj); + // 如果是废箔起点,需要吧点位置空 + String startPointCode = taskObj.getPoint_code1(); + SchBasePoint startPoint = pointService.getById(startPointCode); + if ("A1-FB".equals(startPoint.getRegion_code())) { + // 清空 + PointUtils.clearPoint(startPoint, taskFinishedType); + } + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + checkTaskOptionStatus(taskObj); + // 取消 + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + @Override + public void updateStatus(JSONObject task, TaskStatus status) { + String taskCode = task.getString("task_code"); + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(taskCode); + BigDecimal weight = task.getBigDecimal("weight"); + if (ObjectUtil.isNotEmpty(weight)) { + // 调用更新重量 + otherOperationService.acsRequestWasteFoilWeight(task); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setCar_no(task.getString("car_no")); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + if (status.equals(TaskStatus.CANCELED)) { + cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + } +} diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/other/WasteFoilAGVTask.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/other/WasteFoilAGVTask.java index 4595d9f81..3206cfd49 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/other/WasteFoilAGVTask.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/other/WasteFoilAGVTask.java @@ -1,5 +1,6 @@ package org.nl.wms.sch.task_manage.tasks.other; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; @@ -12,11 +13,13 @@ import org.nl.wms.sch.task_manage.AbstractTask; import org.nl.wms.sch.task_manage.TaskStatus; import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition; import org.nl.wms.sch.task_manage.core.enums.TaskFinishedTypeEnum; +import org.nl.wms.sch.task_manage.service.OtherOperationService; import org.nl.wms.util.TaskUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.List; import static org.nl.wms.util.TaskUtils.checkTaskOptionStatus; @@ -28,6 +31,7 @@ import static org.nl.wms.util.TaskUtils.setUpdateByPC; * @Date: 2024/8/14 */ @Slf4j +@Deprecated @Component(value = "WasteFoilAGVTask") public class WasteFoilAGVTask extends AbstractTask { private final String THIS_CLASS = WasteFoilAGVTask.class.getName(); @@ -35,6 +39,8 @@ public class WasteFoilAGVTask extends AbstractTask { private ISchBasePointService pointService; @Autowired private ISchBaseTaskService taskService; + @Autowired + private OtherOperationService otherOperationService; @Override public void create() throws BadRequestException { @@ -102,4 +108,29 @@ public class WasteFoilAGVTask extends AbstractTask { TaskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } + + @Override + public void updateStatus(JSONObject task, TaskStatus status) { + String taskCode = task.getString("task_code"); + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(taskCode); + BigDecimal weight = task.getBigDecimal("weight"); + if (ObjectUtil.isNotEmpty(weight)) { + // 调用更新重量 + otherOperationService.acsRequestWasteFoilWeight(task); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setCar_no(task.getString("car_no")); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + if (status.equals(TaskStatus.CANCELED)) { + cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + } } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/package-info.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/package-info.java new file mode 100644 index 000000000..bdf690370 --- /dev/null +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/package-info.java @@ -0,0 +1,10 @@ +/** + *

所有任务类

+ *

包括所有的任务业务,找点业务,更新任务业务

+ *
  • hot: 烘箱相关任务
  • + *
  • nbj: 内包间相关任务
  • + *
  • other: 废箔搬运、检验搬运相关任务
  • + *
  • raw: 生箔相关任务
  • + *
  • slitter: 分切相关任务
  • + */ +package org.nl.wms.sch.task_manage.tasks; diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/raw/RawDownAGVTask.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/raw/RawDownAGVTask.java index 18a488315..7d52a6600 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/raw/RawDownAGVTask.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/raw/RawDownAGVTask.java @@ -3,6 +3,7 @@ package org.nl.wms.sch.task_manage.tasks.raw; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder; @@ -17,11 +18,15 @@ import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition; import org.nl.wms.sch.task_manage.core.enums.TaskFinishedTypeEnum; import org.nl.wms.sch.task_manage.tasks.hot.InHotTrussTask; import org.nl.wms.util.TaskUtils; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.List; +import java.util.concurrent.TimeUnit; import static org.nl.wms.util.TaskUtils.checkTaskOptionStatus; import static org.nl.wms.util.TaskUtils.setUpdateByPC; @@ -43,12 +48,13 @@ public class RawDownAGVTask extends AbstractTask { @Autowired private IpdmBiRawfoilworkorderService rawfoilworkorderService; @Autowired - private InHotTrussTask inHotTrussTask; + private RedissonClient redissonClient; @Override public void create() throws BadRequestException { } + @SneakyThrows @Override public void createCompletion(SchBaseTask task) { String requestParam = task.getRequest_param(); @@ -59,60 +65,46 @@ public class RawDownAGVTask extends AbstractTask { // 收卷辊库出口 String startPointCode = requestObj.getString("start_point_code"); // 查找烘箱可用的位置(没货、没锁、没任务、没禁用) - List hxPoints = pointService.getHotNotTaskPoint("A1", HX_REGION, "1", "1"); + List hxPoints = pointService.getHotNotTaskPoint("A1", HX_REGION, + "1", "1"); if (hxPoints.size() == 0) { throw new BadRequestException("烘箱没有可以用的对接位!"); } SchBasePoint hxPoint = hxPoints.get(0); - if ("1".equals(flag)) { - // 创建四点任务:先到生箔位,在从生箔到烘箱对接位 - task.setPoint_code1(startPointCode); - task.setPoint_code2(deviceCode); - task.setPoint_code3(deviceCode); - task.setPoint_code4(hxPoint.getPoint_code()); - } else { - // 创建两点任务: 搬运到烘箱位置 - task.setPoint_code1(deviceCode); - task.setPoint_code2(hxPoint.getPoint_code()); + RLock lock = redissonClient.getLock(hxPoint.getPoint_code()); + boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); + try { + if (tryLock) { + if ("1".equals(flag)) { + // 创建四点任务:先去收卷辊出口在到生箔位,在从生箔到烘箱对接位 + task.setPoint_code1(startPointCode); + task.setPoint_code2(deviceCode); + task.setPoint_code3(deviceCode); + task.setPoint_code4(hxPoint.getPoint_code()); + } else { + // 创建两点任务: 搬运到烘箱位置 + task.setPoint_code1(deviceCode); + task.setPoint_code2(hxPoint.getPoint_code()); + } + // 保存任务参数 + task.setHandle_class(THIS_CLASS); + task.setTask_status(TaskStatus.START_AND_POINT.getCode()); + setUpdateByPC(task); + taskService.save(task); + } else { + throw new BadRequestException("系统繁忙,稍后再试!"); + } + } finally { + if (tryLock) { + lock.unlock(); + } } - // 保存任务参数 - task.setHandle_class(THIS_CLASS); - task.setTask_status(TaskStatus.START_AND_POINT.getCode()); - setUpdateByPC(task); - taskService.save(task); } @Override @Transactional(rollbackFor = Exception.class) public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { - // 任务完成将工单对应的状态设置04, 维护重量信息。触发烘箱桁架任务 - JSONObject taskParam = new JSONObject(); - String requestParam = taskObj.getRequest_param(); - JSONObject requestObj = JSONObject.parseObject(requestParam); - String orderCode = requestObj.getString("order_code"); - if (ObjectUtil.isNotEmpty(orderCode)) { - rawfoilworkorderService.update(new LambdaUpdateWrapper() - .set(PdmBiRawfoilworkorder::getStatus, "04") - .eq(PdmBiRawfoilworkorder::getContainer_name, orderCode)); - log.info("工单修改完毕 - 母卷号 - {}", orderCode); - } - String hxPointCode = ""; - // 获取点位 - if (ObjectUtil.isEmpty(taskObj.getPoint_code3())) { - // 取满任务 - hxPointCode = taskObj.getPoint_code2(); - } else { - // 取满放空任务 - hxPointCode = taskObj.getPoint_code4(); - } - log.info("开始创建桁架任务入烘箱...."); - taskParam.put("order_code", orderCode); - taskParam.put("up_task_code", taskObj.getTask_code()); - taskParam.put("device_code", hxPointCode); - taskParam.put("config_code", "InHotTrussTask"); - // 满卷的收卷辊编码放在AGV任务的载具2上 - taskParam.put("vehicle_code", taskObj.getVehicle_code2()); - inHotTrussTask.apply(taskParam); + // update: 任务完成创建桁架任务改成等待AGV申请 taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setFinished_type(taskFinishedType.getCode()); TaskUtils.setUpdateByType(taskObj, taskFinishedType); @@ -130,4 +122,35 @@ public class RawDownAGVTask extends AbstractTask { TaskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } + + @Override + public void updateStatus(JSONObject task, TaskStatus status) { + String taskCode = task.getString("task_code"); + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(taskCode); + BigDecimal weight = task.getBigDecimal("weight"); + if (ObjectUtil.isNotEmpty(weight)) { + // 更新生箔重量 + JSONObject requestObj = JSONObject.parseObject(taskObj.getRequest_param()); + String orderCode = requestObj.getString("order_code"); + PdmBiRawfoilworkorder rawOrder = rawfoilworkorderService.getByContainerName(orderCode); + rawOrder.setProductin_qty(weight); + TaskUtils.setRawOrderCreateByDefault(rawOrder); + rawfoilworkorderService.getById(rawOrder); + log.info("ACS请求更新生箔母卷: [{}]重量: [{}]", orderCode, weight); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setCar_no(task.getString("car_no")); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + if (status.equals(TaskStatus.CANCELED)) { + cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); + } + } } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterDownAGVTask.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterDownAGVTask.java index 5019c5e09..43c58b525 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterDownAGVTask.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterDownAGVTask.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; import org.nl.wms.pdm.bi.dao.PdmBiSlittingproductionplan; @@ -60,6 +61,7 @@ public class SlitterDownAGVTask extends AbstractTask { } + @SneakyThrows @Override public void createCompletion(SchBaseTask task) { // 分切下料,子卷信息在请求参数中 @@ -93,12 +95,7 @@ public class SlitterDownAGVTask extends AbstractTask { } BstIvtCutpointivt endPoint = areaEmptyNotTaskPoint.get(0); RLock lock = redissonClient.getLock(endPoint.getPoint_code()); - boolean tryLock; - try { - tryLock = lock.tryLock(0, TimeUnit.SECONDS); - } catch (InterruptedException e) { - throw new BadRequestException("获取锁异常"); - } + boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); try { if (tryLock) { task.setPoint_code2(endPoint.getPoint_code()); @@ -160,7 +157,7 @@ public class SlitterDownAGVTask extends AbstractTask { .in(PdmBiSlittingproductionplan::getQzzno, qzzNo)); } PdmBiSlittingproductionplan demoPlan = list.get(0); - // 创建送气胀轴任务 + // hint: 创建送气胀轴任务 JSONObject taskParam = new JSONObject(); taskParam.put("up_task_code", taskObj.getTask_code()); taskParam.put("config_code", "SendShaftAGVTask"); diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterInHotAGVTask.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterInHotAGVTask.java new file mode 100644 index 000000000..56cb7c696 --- /dev/null +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterInHotAGVTask.java @@ -0,0 +1,100 @@ +package org.nl.wms.sch.task_manage.tasks.slitter; + +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.wms.sch.point.service.ISchBasePointService; +import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.TaskStatus; +import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition; +import org.nl.wms.sch.task_manage.core.enums.TaskFinishedTypeEnum; +import org.nl.wms.util.TaskUtils; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.concurrent.TimeUnit; + +import static org.nl.wms.util.TaskUtils.checkTaskOptionStatus; +import static org.nl.wms.util.TaskUtils.setUpdateByPC; + +/** + * @Author: lyd + * @Description: 分切入烘箱任务 + * @Date: 2024/8/26 + */ +@Slf4j +@Component(value = "SlitterInHotAGVTask") +public class SlitterInHotAGVTask extends AbstractTask { + private final String THIS_CLASS = SlitterInHotAGVTask.class.getName(); + private final static String HX_REGION = "A1-HXZC"; + @Autowired + private ISchBasePointService pointService; + @Autowired + private ISchBaseTaskService taskService; + @Autowired + private RedissonClient redissonClient; + @Override + public void create() throws BadRequestException { + + } + + @SneakyThrows + @Override + public void createCompletion(SchBaseTask task) { + // 查找烘箱可用的位置(没货、没任务、没禁用) + List hxPoints = pointService.getHotNotTaskPoint("A1", HX_REGION, + "1", "1"); + if (hxPoints.size() == 0) { + throw new BadRequestException("烘箱没有可以用的对接位!"); + } + SchBasePoint hxPoint = hxPoints.get(0); + RLock lock = redissonClient.getLock(hxPoint.getPoint_code()); + boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); + try { + if (tryLock) { + // 搬运到烘箱暂存位置 + task.setPoint_code2(hxPoint.getPoint_code()); + // 保存任务参数 + task.setHandle_class(THIS_CLASS); + task.setTask_status(TaskStatus.START_AND_POINT.getCode()); + setUpdateByPC(task); + taskService.save(task); + } else { + throw new BadRequestException("系统繁忙,稍后再试!"); + } + } finally { + if (tryLock) { + lock.unlock(); + } + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // update: 任务完成创建桁架任务改成等待AGV申请 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + checkTaskOptionStatus(taskObj); + // 取消 + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_CANCEL); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); + } +} diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterSendRollAGVTask.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterSendRollAGVTask.java index 6d1a20350..a225dd286 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterSendRollAGVTask.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterSendRollAGVTask.java @@ -70,10 +70,14 @@ public class SlitterSendRollAGVTask extends AbstractTask { @Transactional(rollbackFor = Exception.class) public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { checkTaskOptionStatus(taskObj); + JSONObject requestObj = JSONObject.parseObject(taskObj.getRequest_param()); // 起点清除 String startPointCode = taskObj.getPoint_code1(); StIvtCutpointivt startPoint = cutpointivtService.getOneByCode(startPointCode); - if (ObjectUtil.isEmpty(startPoint)) { + // todo: 是否改成取货完成上报 + if (ObjectUtil.isEmpty(startPoint) + && ObjectUtil.isNotEmpty(requestObj.getString("is_flag")) + && "1".equals(requestObj.getString("is_flag"))) { // 如果是生箔就不做操作,只有分切上料位才需要清空数据 startPoint.setContainer_name(""); startPoint.setFull_point_status("01"); diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterUpAGVTask.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterUpAGVTask.java index b3c6f5dd3..06166458b 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterUpAGVTask.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterUpAGVTask.java @@ -101,7 +101,7 @@ public class SlitterUpAGVTask extends AbstractTask { cutPoint.setFull_point_status("02"); cutPoint.setContainer_name(order.getContainer_name()); cutPoint.setEmpty_vehicle_code(""); - cutPoint.setEmpty_point_status("01"); + cutPoint.setEmpty_point_status("02"); setCutUpdateByType(cutPoint, taskFinishedType); cutpointivtService.updateById(cutPoint); if (ObjectUtil.isNotEmpty(taskObj.getPoint_code3())) { diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterUpTrussTask.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterUpTrussTask.java index eae152068..6dd806308 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterUpTrussTask.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterUpTrussTask.java @@ -47,7 +47,7 @@ public class SlitterUpTrussTask extends AbstractTask { @Override public void createCompletion(SchBaseTask task) { - // 桁架任务,到对接位。(对接位不作更新。) + // 桁架任务,到对接位 String requestParam = task.getRequest_param(); JSONObject requestObj = JSONObject.parseObject(requestParam); String pointCode = requestObj.getString("zc_point"); @@ -94,7 +94,7 @@ public class SlitterUpTrussTask extends AbstractTask { taskParam.put("vehicle_code", taskObj.getVehicle_code()); taskParam.put("vehicle_code2", order.getWind_roll()); taskParam.put("workorder_id", workorderId); - taskParam.put("config_code", "SlitterSendRollTrussTask"); + taskParam.put("config_code", "SlitterUpAGVTask"); taskParam.put("up_task_code", taskObj.getTask_code()); taskParam.put("create_mode", GeneralDefinition.TASK_CREATION); slitterUpAGVTask.apply(taskParam);