From 4e341e1196d18ae4858342960e4928f0c3ccb099 Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Thu, 29 Aug 2024 15:12:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coderule/impl/SysCodeRuleServiceImpl.java | 2 +- .../service/impl/RawFoilPdaServiceImpl.java | 2 +- .../st/service/impl/NbjPdaServiceImpl.java | 8 +- .../nl/wms/sch/task_manage/AbstractTask.java | 8 ++ .../nl/wms/sch/task_manage/TaskStatus.java | 15 +--- .../impl/BakingOperationServiceImpl.java | 6 ++ .../tasks/hot/OutHotTrussTask.java | 45 ++++++----- .../tasks/nbj/SubRollDownAGVTask.java | 3 +- .../task_manage/tasks/raw/RawDownAGVTask.java | 77 ++++++++---------- .../slitter/SlitterSendRollTrussTask.java | 32 ++++---- .../tasks/slitter/SlitterUpAGVTask.java | 79 +++++++++++-------- .../tasks/slitter/SlitterUpTrussTask.java | 57 ++++++------- .../main/java/org/nl/wms/util/TaskUtils.java | 4 +- 13 files changed, 165 insertions(+), 173 deletions(-) diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java index 3bad5e42a..a108e0f1d 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/coderule/impl/SysCodeRuleServiceImpl.java @@ -58,7 +58,7 @@ public class SysCodeRuleServiceImpl extends ServiceImpl().eq(SysCodeRule::getCode, code)).getId(); diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/mps/service/impl/RawFoilPdaServiceImpl.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/mps/service/impl/RawFoilPdaServiceImpl.java index 592ae0108..e72ed1599 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/mps/service/impl/RawFoilPdaServiceImpl.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/mps/service/impl/RawFoilPdaServiceImpl.java @@ -227,7 +227,7 @@ public class RawFoilPdaServiceImpl implements RawFoilPdaService { MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.RAW_READY.getTag()); log.info("手持生箔准备就绪, {}", param); // param: point_code - String pointCode = param.getString("point_code"); + String pointCode = param.getString("point_code") + "_M"; // 将工单设置确认下卷(如果是空轴任务就不用),再写信号给ACS // 1、获取对应的任务 SchBaseTask task = taskService.getTaskByPointCodeX(null, pointCode, null, null); 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 5e7a46656..9511f300f 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 @@ -1,7 +1,6 @@ package org.nl.wms.pda.st.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.ObjectUtil; import com.alibaba.fastjson.JSONArray; @@ -9,7 +8,6 @@ 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.common.utils.SecurityUtils; import org.nl.config.lucene.TagNameEnum; import org.nl.wms.pda.st.service.NbjPdaService; import org.nl.wms.pdm.bi.dao.PdmBiSlittingproductionplan; @@ -25,9 +23,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.core.enums.TaskFinishedTypeEnum; import org.nl.wms.sch.task_manage.tasks.nbj.PdaSendShaftAGVTask; -import org.nl.wms.sch.task_manage.tasks.nbj.SendShaftAGVTask; import org.nl.wms.sch.task_manage.tasks.nbj.SubRollDownAGVTask; -import org.nl.wms.sch.task_manage.tasks.other.PointToPointAGVTask; import org.nl.wms.util.PointUtils; import org.nl.wms.util.TaskUtils; import org.slf4j.MDC; @@ -68,8 +64,6 @@ public class NbjPdaServiceImpl implements NbjPdaService { @Autowired private IBstIvtCutpointivtService bcutpointivtService; @Autowired - private PointToPointAGVTask pointToPointAGVTask; - @Autowired private PdaSendShaftAGVTask pdaSendShaftAGVTask; @Override public JSONObject changeLiftStatus(JSONObject param) { @@ -122,7 +116,7 @@ public class NbjPdaServiceImpl implements NbjPdaService { @Transactional(rollbackFor = Exception.class) public JSONObject doSubVolumeDown(JSONObject param) { MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.SUB_ROLL_DOWN.getTag()); - log.info("手持子卷下线,送到货梯 - {}", param); + log.info("手持子卷下线,送到一楼 - {}", param); // point_code, vehicle_code, container_name String pointCode = param.getString("point_code"); String containerName = param.getString("container_name"); 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 cf3ca4382..f7bbcd205 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 @@ -322,4 +322,12 @@ public abstract class AbstractTask { bean.create(); } } + + /** + * AGV取货完成上报 + * @param task 任务 + */ + public void agvPickUpCompleted(SchBaseTask task) { + + } } diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/TaskStatus.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/TaskStatus.java index cbe2181ab..b2cfd24b3 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/TaskStatus.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/TaskStatus.java @@ -9,19 +9,7 @@ package org.nl.wms.sch.task_manage; * @since 2023-11-16 */ public enum TaskStatus { - // APPLY("1", "申请", "申请"), - // // 创建完成 - // CREATED("2", "创建完成", "创建完成"), - // // 下发 - // ISSUED("3", "下发", "下发"), - // // 执行中 - // EXECUTING("4", "执行中", "执行中"), - // // 完成 - // FINISHED("5", "完成", "完成"), - // // 已取消 - // CANCELED("6", "已取消", "已取消"), - // // 未完成 - // UNFINISHED("7", "未完成", "未完成"); + // 任务状态 APPLY("00", "申请", "申请"), CREATED("01", "生成", "生成"), @@ -31,6 +19,7 @@ public enum TaskStatus { ISSUE("05", "下发", "下发"), EXECUTING("06", "执行中", "执行中"), FINISHED("07", "完成", "完成"), + PICK_UP_COMPLETED("071", "取货完成,执行中", "acs请求取货完成后修改的任务状态"), CANCELED("08", "已取消", "已取消"), // 未完成 UNFINISHED("09", "未完成", "未完成"); 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 e06fac1fc..a438ac454 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 @@ -10,6 +10,7 @@ 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.TaskStatus; 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; @@ -17,6 +18,7 @@ import org.nl.wms.sch.task_manage.tasks.hot.OutHotTrussTask; 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.util.List; @@ -37,6 +39,7 @@ public class BakingOperationServiceImpl implements BakingOperationService { @Autowired private InHotTrussTask inHotTrussTask; @Override + @Transactional(rollbackFor = Exception.class) public JSONObject acsRequestOutHotTask(JSONObject param) { log.info("acs请求出烘箱:{}", param); // device_code @@ -63,6 +66,9 @@ public class BakingOperationServiceImpl implements BakingOperationService { String taskCode = param.getString("task_code"); Assert.notBlank(taskCode, "任务编码不能为空!"); SchBaseTask taskObj = taskService.getByCode(taskCode); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("任务不存在"); + } JSONObject taskParam = new JSONObject(); String requestParam = taskObj.getRequest_param(); JSONObject requestObj = JSONObject.parseObject(requestParam); diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/hot/OutHotTrussTask.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/hot/OutHotTrussTask.java index 579f3918e..ad522f5ff 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/hot/OutHotTrussTask.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/hot/OutHotTrussTask.java @@ -3,8 +3,8 @@ package org.nl.wms.sch.task_manage.tasks.hot; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.nl.common.exception.BadRequestException; -import org.nl.wms.pdm.ivt.hot.service.dao.StIvtHotpointivt; import org.nl.wms.pdm.ivt.hot.service.IstIvtHotpointivtService; +import org.nl.wms.pdm.ivt.hot.service.dao.StIvtHotpointivt; 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; @@ -13,6 +13,7 @@ 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.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -47,26 +48,28 @@ public class OutHotTrussTask extends AbstractTask { @Override public void createCompletion(SchBaseTask task) { - // 从烘箱暂存位找一个空位 - List hotDjwList = pointService.getHotNotTaskPoint("A1", "A1-HXZC", - "4", "1"); - if (hotDjwList.size() == 0) { - throw new BadRequestException("烘箱烘烤完毕的暂存位不够!"); - } - String requestParam = task.getRequest_param(); - JSONObject requestObj = JSONObject.parseObject(requestParam); - String startPoint = task.getPoint_code1(); - StIvtHotpointivt hotPoint = hotpointivtService.getPointByCode(startPoint, false); - requestObj.put("workorder_id", hotPoint.getWorkorder_id()); - SchBasePoint point = hotDjwList.get(0); - task.setVehicle_code(hotPoint.getFull_vehicle_code()); - task.setPoint_code2(point.getPoint_code()); - task.setRequest_param(JSONObject.toJSONString(requestObj)); - // 保存任务参数 - task.setHandle_class(THIS_CLASS); - task.setTask_status(TaskStatus.START_AND_POINT.getCode()); - setUpdateByPC(task); - taskService.save(task); + TaskUtils.taskLock("A1-HXZC", () -> { + // 从烘箱暂存位找一个空位 + List hotDjwList = pointService.getHotNotTaskPoint("A1", "A1-HXZC", + "4", "1"); + if (hotDjwList.size() == 0) { + throw new BadRequestException("烘箱烘烤完毕的暂存位不够!"); + } + String requestParam = task.getRequest_param(); + JSONObject requestObj = JSONObject.parseObject(requestParam); + String startPoint = task.getPoint_code1(); + StIvtHotpointivt hotPoint = hotpointivtService.getPointByCode(startPoint, false); + requestObj.put("workorder_id", hotPoint.getWorkorder_id()); + SchBasePoint point = hotDjwList.get(0); + task.setVehicle_code(hotPoint.getFull_vehicle_code()); + task.setPoint_code2(point.getPoint_code()); + task.setRequest_param(JSONObject.toJSONString(requestObj)); + // 保存任务参数 + task.setHandle_class(THIS_CLASS); + task.setTask_status(TaskStatus.START_AND_POINT.getCode()); + setUpdateByPC(task); + taskService.save(task); + }); } @Override diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/nbj/SubRollDownAGVTask.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/nbj/SubRollDownAGVTask.java index 5a940b492..2ba498f1b 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/nbj/SubRollDownAGVTask.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/nbj/SubRollDownAGVTask.java @@ -46,7 +46,7 @@ public class SubRollDownAGVTask extends AbstractTask { @Override public void createCompletion(SchBaseTask task) { // update: 查找空位没任务的货梯 -> 查找一楼暂存位空位 - TaskUtils.createTask("A1-ZXZC", () -> { + TaskUtils.taskLock("A1-ZXZC", () -> { List zxPoints = pointService.getAllBusinessNotTaskPoint("A1", "A1-ZXZC", "1", "1", null, null); if (zxPoints.size() == 0) { @@ -78,6 +78,7 @@ public class SubRollDownAGVTask extends AbstractTask { endPoint.setVehicle_code(taskObj.getVehicle_code()); setUpdateByType(endPoint, taskFinishedType); pointService.updateById(endPoint); + // todo: 创建搬运空架子的任务 // 任务完成 taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setFinished_type(taskFinishedType.getCode()); 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 0e9abd63d..6ddaa1689 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 @@ -2,7 +2,6 @@ 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; @@ -16,18 +15,14 @@ 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.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.Propagation; 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; @@ -57,50 +52,40 @@ public class RawDownAGVTask extends AbstractTask { @SneakyThrows @Override - @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) public void createCompletion(SchBaseTask task) { - String requestParam = task.getRequest_param(); - JSONObject requestObj = JSONObject.parseObject(requestParam); - String flag = requestObj.getString("is_flag"); - // 生箔位置 - String deviceCode = requestObj.getString("device_code"); - // 收卷辊库出口 - String startPointCode = requestObj.getString("start_point_code"); - RLock lock = redissonClient.getLock(HX_REGION); - boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS); - try { - if (tryLock) { - // 查找烘箱对接位可用的位置(没货、没任务、没禁用) - 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 + "_K"); - task.setPoint_code3(deviceCode + "_M"); - task.setPoint_code4(hxPoint.getPoint_code()); - } else { - // 创建两点任务: 搬运到烘箱位置 - task.setPoint_code1(deviceCode + "_M"); - task.setPoint_code2(hxPoint.getPoint_code()); - } - // 保存任务参数 - task.setHandle_class(THIS_CLASS); - task.setTask_status(TaskStatus.START_AND_POINT.getCode()); - setUpdateByPC(task); - taskService.save(task); + TaskUtils.taskLock(HX_REGION, () -> { + String requestParam = task.getRequest_param(); + JSONObject requestObj = JSONObject.parseObject(requestParam); + String flag = requestObj.getString("is_flag"); + // 生箔位置 + String deviceCode = requestObj.getString("device_code"); + // 收卷辊库出口 + String startPointCode = requestObj.getString("start_point_code"); + // 查找烘箱对接位可用的位置(没货、没任务、没禁用) + 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 + "_K"); + task.setPoint_code3(deviceCode + "_M"); + task.setPoint_code4(hxPoint.getPoint_code()); } else { - throw new BadRequestException("系统繁忙,稍后再试!"); + // 创建两点任务: 搬运到烘箱位置 + task.setPoint_code1(deviceCode + "_M"); + task.setPoint_code2(hxPoint.getPoint_code()); } - } finally { - if (tryLock) { - lock.unlock(); - } - } + // 保存任务参数 + task.setHandle_class(THIS_CLASS); + task.setTask_status(TaskStatus.START_AND_POINT.getCode()); + setUpdateByPC(task); + taskService.save(task); + }); + } @Override diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterSendRollTrussTask.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterSendRollTrussTask.java index cfa7c8a1e..8fd38acec 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterSendRollTrussTask.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/tasks/slitter/SlitterSendRollTrussTask.java @@ -17,9 +17,8 @@ import org.springframework.transaction.annotation.Transactional; import java.util.List; -import static org.nl.wms.util.TaskUtils.checkTaskOptionStatus; -import static org.nl.wms.util.TaskUtils.setUpdateByPC; import static org.nl.wms.util.PointUtils.setUpdateByType; +import static org.nl.wms.util.TaskUtils.*; /** * @Author: lyd @@ -30,6 +29,7 @@ import static org.nl.wms.util.PointUtils.setUpdateByType; @Component(value = "SlitterSendRollTrussTask") public class SlitterSendRollTrussTask extends AbstractTask { private final String THIS_CLASS = SlitterSendRollTrussTask.class.getName(); + private final String SJG_REGION = "A1-SJGK"; @Autowired private ISchBasePointService pointService; @Autowired @@ -43,19 +43,21 @@ public class SlitterSendRollTrussTask extends AbstractTask { public void createCompletion(SchBaseTask task) { // 起点一样不记录,直接创建入库任务 // 查找空位终点即可 - List allSjgkPoints = pointService.getAllBusinessNotTaskPoint("A1", - "A1-SJGK", "3", "1", null, null); - if (allSjgkPoints.size() == 0) { - throw new BadRequestException("收卷辊不存在空位!"); - } - SchBasePoint endPoint = allSjgkPoints.get(0); - task.setPoint_code2(endPoint.getPoint_code()); - // 创建任务 - task.setHandle_class(THIS_CLASS); - task.setTask_status(TaskStatus.START_AND_POINT.getCode()); - setUpdateByPC(task); - taskService.save(task); - log.info("任务创建成功:{}", task); + taskLock(SJG_REGION, () -> { + List allSjgkPoints = pointService.getAllBusinessNotTaskPoint("A1", + SJG_REGION, "3", "1", null, null); + if (allSjgkPoints.size() == 0) { + throw new BadRequestException("收卷辊不存在空位!"); + } + SchBasePoint endPoint = allSjgkPoints.get(0); + task.setPoint_code2(endPoint.getPoint_code()); + // 创建任务 + task.setHandle_class(THIS_CLASS); + task.setTask_status(TaskStatus.START_AND_POINT.getCode()); + setUpdateByPC(task); + taskService.save(task); + log.info("任务创建成功:{}", task); + }); } @Override 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 59c90c93d..35379ad9f 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 @@ -3,8 +3,10 @@ package org.nl.wms.sch.task_manage.tasks.slitter; import cn.hutool.core.date.DateUtil; 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.common.utils.SecurityUtils; import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder; import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService; import org.nl.wms.pdm.ivt.cut.service.dao.StIvtCutpointivt; @@ -52,40 +54,39 @@ public class SlitterUpAGVTask extends AbstractTask { @Override public void createCompletion(SchBaseTask task) { - TaskUtils.createTask("A1-SJGK", () -> { - String requestParam = task.getRequest_param(); - JSONObject requestObj = JSONObject.parseObject(requestParam); - String isFlag = requestObj.getString("is_flag"); - // 分切上料满料对接位 - String cutPointCode = requestObj.getString("cut_point"); - // 烘箱暂存对接位 - String deviceCode = requestObj.getString("device_code"); - StIvtCutpointivt cutPoint = cutpointivtService.getByFullCode(cutPointCode, false); - if ("0".equals(isFlag)) { - // 两点任务 - task.setPoint_code1(deviceCode); - task.setPoint_code2(cutPoint.getFull_point_code()); - } else { - // 收卷辊的入库不做校验 - List sjgPoints = pointService.getPointByConditions("A1", "A1-SJGK", - "1", null, null, false); - if (sjgPoints.size() == 0) { - throw new BadRequestException("收卷辊库找不到入口!"); - } - SchBasePoint sjgPoint = sjgPoints.get(0); - // 四点任务 - task.setPoint_code1(deviceCode); - task.setPoint_code2(cutPoint.getFull_point_code()); - task.setPoint_code3(cutPoint.getEmpty_point_code()); - task.setPoint_code4(sjgPoint.getPoint_code()); + // 收卷辊不需要校验点位,因此无需加锁 + String requestParam = task.getRequest_param(); + JSONObject requestObj = JSONObject.parseObject(requestParam); + String isFlag = requestObj.getString("is_flag"); + // 分切上料满料对接位 + String cutPointCode = requestObj.getString("cut_point"); + // 烘箱暂存对接位 + String deviceCode = requestObj.getString("device_code"); + StIvtCutpointivt cutPoint = cutpointivtService.getByFullCode(cutPointCode, false); + if ("0".equals(isFlag)) { + // 两点任务 + task.setPoint_code1(deviceCode); + task.setPoint_code2(cutPoint.getFull_point_code()); + } else { + // 收卷辊的入库不做校验 + List sjgPoints = pointService.getPointByConditions("A1", "A1-SJGK", + "1", null, null, false); + if (sjgPoints.size() == 0) { + throw new BadRequestException("收卷辊库找不到入口!"); } - // 创建任务 - task.setHandle_class(THIS_CLASS); - task.setTask_status(TaskStatus.START_AND_POINT.getCode()); - setUpdateByPC(task); - taskService.save(task); - log.info("任务创建成功:{}", task); - }); + SchBasePoint sjgPoint = sjgPoints.get(0); + // 四点任务 + task.setPoint_code1(deviceCode); + task.setPoint_code2(cutPoint.getFull_point_code()); + task.setPoint_code3(cutPoint.getEmpty_point_code()); + task.setPoint_code4(sjgPoint.getPoint_code()); + } + // 创建任务 + task.setHandle_class(THIS_CLASS); + task.setTask_status(TaskStatus.START_AND_POINT.getCode()); + setUpdateByPC(task); + taskService.save(task); + log.info("任务创建成功:{}", task); } @@ -141,4 +142,16 @@ public class SlitterUpAGVTask extends AbstractTask { TaskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } + + @Override + public void agvPickUpCompleted(SchBaseTask task) { + LambdaUpdateWrapper lam = new LambdaUpdateWrapper<>(); + lam.set(SchBaseTask::getTask_status, TaskStatus.PICK_UP_COMPLETED.getCode()) + .set(SchBaseTask::getUpdate_id, SecurityUtils.getCurrentUserId()) + .set(SchBaseTask::getUpdate_name, SecurityUtils.getCurrentNickName()) + .set(SchBaseTask::getUpdate_time, DateUtil.now()) + .eq(SchBaseTask::getTask_code, task.getTask_code()); + boolean update = taskService.update(lam); + log.info("任务[{}]取货完成执行{}", task.getTask_code(), update); + } } 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 92cf5641c..0c50308dc 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 @@ -15,15 +15,12 @@ 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.Propagation; import org.springframework.transaction.annotation.Transactional; import java.util.List; -import java.util.concurrent.TimeUnit; import static org.nl.wms.util.PointUtils.clearPoint; import static org.nl.wms.util.TaskUtils.*; @@ -37,6 +34,7 @@ import static org.nl.wms.util.TaskUtils.*; @Component(value = "SlitterUpTrussTask") public class SlitterUpTrussTask extends AbstractTask { private final String THIS_CLASS = SlitterUpTrussTask.class.getName(); + private final static String HX_REGION = "A1-HXZC"; @Autowired private ISchBasePointService pointService; @Autowired @@ -54,38 +52,28 @@ public class SlitterUpTrussTask extends AbstractTask { @SneakyThrows @Override - @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) public void createCompletion(SchBaseTask task) { - // 桁架任务,到对接位 - String requestParam = task.getRequest_param(); - JSONObject requestObj = JSONObject.parseObject(requestParam); - String pointCode = requestObj.getString("zc_point"); - RLock lock = redissonClient.getLock("A1-HXZC"); - boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS); - try { - if (tryLock) { - // 终点为出口 - List endPoints = pointService.getHotNotTaskPoint("A1", "A1-HXZC", - "1", "1"); - if (endPoints.size() == 0) { - throw new BadRequestException("烘箱没有可以用的对接位!"); - } - SchBasePoint point = endPoints.get(0); - task.setPoint_code1(pointCode); - task.setPoint_code2(point.getPoint_code()); - // 创建任务 - task.setHandle_class(THIS_CLASS); - task.setTask_status(TaskStatus.START_AND_POINT.getCode()); - setUpdateByPC(task); - taskService.save(task); - log.info("任务创建成功:{}", task); + TaskUtils.taskLock(HX_REGION, () -> { + // 桁架任务,到对接位 + String requestParam = task.getRequest_param(); + JSONObject requestObj = JSONObject.parseObject(requestParam); + String pointCode = requestObj.getString("zc_point"); + // 终点为出口 + List endPoints = pointService.getHotNotTaskPoint("A1", HX_REGION, + "1", "1"); + if (endPoints.size() == 0) { + throw new BadRequestException("烘箱没有可以用的对接位!"); } - } finally { - if (lock.isHeldByCurrentThread() && lock.isLocked()) { - lock.unlock(); - } - } - + SchBasePoint point = endPoints.get(0); + task.setPoint_code1(pointCode); + task.setPoint_code2(point.getPoint_code()); + // 创建任务 + task.setHandle_class(THIS_CLASS); + task.setTask_status(TaskStatus.START_AND_POINT.getCode()); + setUpdateByPC(task); + taskService.save(task); + log.info("任务创建成功:{}", task); + }); } @Override @@ -95,6 +83,7 @@ public class SlitterUpTrussTask extends AbstractTask { // 任务完成起点清除,创建AGV任务到达参数中的point_code的点位上 String requestParam = taskObj.getRequest_param(); JSONObject requestObj = JSONObject.parseObject(requestParam); + // 分切机满料位 String isFlag = requestObj.getString("is_flag"); String workorderId = requestObj.getString("workorder_id"); @@ -102,6 +91,7 @@ public class SlitterUpTrussTask extends AbstractTask { String endPointCode = taskObj.getPoint_code2(); SchBasePoint startPoint = pointService.getById(startPointCode); clearPoint(startPoint, taskFinishedType); + // 创建AGV任务 log.info("点位{}更新完毕,创建AGV任务给分切机上料", startPointCode); PdmBiRawfoilworkorder order = rawfoilworkorderService.getById(workorderId); @@ -119,6 +109,7 @@ public class SlitterUpTrussTask extends AbstractTask { taskParam.put("up_task_code", taskObj.getTask_code()); taskParam.put("create_mode", GeneralDefinition.TASK_CREATION); slitterUpAGVTask.apply(taskParam); + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setFinished_type(taskFinishedType.getCode()); setUpdateByType(taskObj, taskFinishedType); diff --git a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java index c0785473c..a029f461a 100644 --- a/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java +++ b/lms2/nladmin-system/nlsso-server/src/main/java/org/nl/wms/util/TaskUtils.java @@ -44,7 +44,7 @@ public class TaskUtils { * @param function */ @SneakyThrows - public static void createTask(String region, Runnable function){ + public static void taskLock(String region, Runnable function){ RedissonClient redissonClient = SpringContextHolder.getBean(RedissonClient.class); RLock lock = redissonClient.getLock(region); boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS); @@ -52,7 +52,7 @@ public class TaskUtils { if (tryLock) { PlatformTransactionManager txManager = SpringContextHolder.getBean(PlatformTransactionManager.class); DefaultTransactionDefinition def = new DefaultTransactionDefinition(); - def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); + def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); TransactionStatus status = txManager.getTransaction(def); //执行目标方法