From 30098547693ca0622e690259efe58e9690f18345 Mon Sep 17 00:00:00 2001 From: "HUOJIN\\92525" Date: Tue, 10 Dec 2024 11:47:18 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=94=E4=BF=AE=E4=B8=8B=E7=BA=BF=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/BydAppServiceImpl.java | 2 +- .../businessdata/service/AgvTaskService.java | 24 +++++++----- .../service/impl/AgvTaskServiceImpl.java | 6 +-- .../service/impl/KMReServiceImpl.java | 39 ++++++++++--------- .../service/impl/MesServiceImpl.java | 30 +++++++------- .../service/impl/TaskServiceImpl.java | 6 +-- .../java/com/youchain/utils/GtLineMap.java | 36 +++++++++++++++++ 7 files changed, 94 insertions(+), 49 deletions(-) create mode 100644 youchain-system/src/main/java/com/youchain/utils/GtLineMap.java diff --git a/youchain-system/src/main/java/com/youchain/appupdate/service/impl/BydAppServiceImpl.java b/youchain-system/src/main/java/com/youchain/appupdate/service/impl/BydAppServiceImpl.java index 3475f46..46713ae 100644 --- a/youchain-system/src/main/java/com/youchain/appupdate/service/impl/BydAppServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/appupdate/service/impl/BydAppServiceImpl.java @@ -102,7 +102,7 @@ public class BydAppServiceImpl implements BydAppService { Point endPoint = pointList.get(0); //创建下发任务 - AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.ASN, stock, srcPoint, endPoint, "FORKLIFT_MOVE"); + AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.ASN, stock, srcPoint.getCode(), endPoint.getCode(), "FORKLIFT_MOVE"); //创建ASN明细和ItemKey和Task任务 createAsnDetailsAndItemKeysAndTasks(barCodeVos, item, stock, srcPoint, endPoint, agvTask); diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java b/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java index 9ee43ee..1d95a6a 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/AgvTaskService.java @@ -94,28 +94,32 @@ public interface AgvTaskService { /** * 创建agvTask任务 - * @param bizStatus 状态 - * @param stock 容器 - * @param srcPoint 起点 - * @param endPoint 终点 - * @param jobType 任务类型 + * + * @param bizStatus 状态 + * @param stock 容器 + * @param srcPointCode 起点 + * @param endPointCode 终点 + * @param jobType 任务类型 */ - AgvTask createAgvTask(String bizStatus, Stock stock, Point srcPoint, Point endPoint, String jobType); + AgvTask createAgvTask(String bizStatus, Stock stock, String srcPointCode, String endPointCode, String jobType); /** * 根据容器查询任务 + * * @param stockCode 容器 */ List findRepeat(String stockCode, String srcPointCode, String endPointCode); /** * 根据终点查询是否有重复任务 - * @param stockCode 容器 + * + * @param endSlotCode 点位 + * @param type 任务类型 + * @param jobType 作业类型 */ Boolean findByEndSlotCode(String endSlotCode, String type, String jobType); - /** * 查询打开的任务并轮询下发 */ @@ -123,13 +127,13 @@ public interface AgvTaskService { /** * 翻包返库时,查询起点是否有多条不同容器的任务(不包括当前任务) - * @param agvTaskId 任务ID + * + * @param agvTaskId 任务ID * @param srcPointCode 起点 */ int existsBySrcPoint(Long agvTaskId, String srcPointCode); /** - * * 统计本周任务数量 */ Map queryWeeklyTaskCounts(); diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java index fd833c3..7f57dd3 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/AgvTaskServiceImpl.java @@ -125,12 +125,12 @@ public class AgvTaskServiceImpl implements AgvTaskService { @Override @Transactional(rollbackFor = Exception.class) - public AgvTask createAgvTask(String bizStatus, Stock stock, Point srcPoint, Point endPoint, String jobType) { + public AgvTask createAgvTask(String bizStatus, Stock stock, String srcPointCode, String endPointCode, String jobType) { AgvTask agvTask = new AgvTask(); agvTask.setType(bizStatus); agvTask.setStockCode(stock == null ? null : stock.getCode()); - agvTask.setStartSlotCode(srcPoint.getCode()); - agvTask.setEndSlotCode(endPoint.getCode()); + agvTask.setStartSlotCode(srcPointCode); + agvTask.setEndSlotCode(endPointCode); agvTask.setStatus(BizStatus.OPEN); agvTask.setJobType(jobType); agvTaskRepository.save(agvTask); diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/KMReServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/KMReServiceImpl.java index 1c6e4db..2beb1d7 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/KMReServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/KMReServiceImpl.java @@ -262,11 +262,10 @@ public class KMReServiceImpl implements KMReService { @Override public synchronized String sendAgvTaskGtJson(AgvTask agvTask) { JSONObject jsonObject = new JSONObject(new LinkedHashMap<>()); - String agvCode = TimeNumberUtils.getGTTaskCode(); Map objMap = new LinkedHashMap<>(); - objMap.put("orgId", agvCode);//库存组织 ID(或工厂代码,供应商代码) - objMap.put("requestId", agvCode);//请求 id - objMap.put("missionCode", agvCode);//任务编号 + objMap.put("orgId", agvTask.getId());//库存组织 ID(或工厂代码,供应商代码) + objMap.put("requestId", agvTask.getId());//请求 id + objMap.put("missionCode", agvTask.getId());//任务编号 objMap.put("missionType", "ROLLER_MOVE");//任务类型 :滚筒 objMap.put("viewBoardType", "");//上视识别类型: objMap.put("robotType", "ROLLER"); @@ -280,9 +279,9 @@ public class KMReServiceImpl implements KMReService { missionDataMap.put("position", agvTask.getStartSlotCode());//起点 missionDataMap.put("type", "NODE_POINT");// missionDataMap.put("actionType", "ROLLER_RECEIVE");// - missionDataMap.put("binCode", agvTask.getStockCode());//容器 + missionDataMap.put("binCode", "");//容器 missionDataMap.put("rollerLevel", 1);// - missionDataMap.put("deviceCode", agvTask.getSlotCode());//设备编号 + missionDataMap.put("deviceCode", agvTask.getStartSlotCode());//设备编号 missionDataMap.put("actionConfirm", true);// missionDataMap.put("passStrategy", "AUTO");// missionDataObj.putAll(missionDataMap); @@ -291,10 +290,10 @@ public class KMReServiceImpl implements KMReService { JSONObject missionDataObj2 = new JSONObject(new LinkedHashMap<>()); Map missionDataMap2 = new LinkedHashMap<>(); missionDataMap2.put("sequence", 2);//序号 - missionDataMap2.put("position", agvTask.getEndSlotCode());//起点 + missionDataMap2.put("position", "FX001");//中转点 missionDataMap2.put("type", "NODE_POINT");// missionDataMap2.put("actionType", "");// - missionDataMap2.put("binCode", agvTask.getStockCode());//容器 + missionDataMap2.put("binCode", "");//容器 missionDataMap2.put("rollerLevel", 1);// missionDataMap2.put("deviceCode", "");// missionDataMap2.put("actionConfirm", false);// @@ -305,12 +304,12 @@ public class KMReServiceImpl implements KMReService { JSONObject missionDataObj3 = new JSONObject(new LinkedHashMap<>()); Map missionDataMap3 = new LinkedHashMap<>(); missionDataMap3.put("sequence", 3);//序号 - missionDataMap3.put("position", agvTask.getStartSlotCode());//起点 + missionDataMap3.put("position", agvTask.getEndSlotCode());//终点 missionDataMap3.put("type", "NODE_POINT");// missionDataMap3.put("actionType", "ROLLER_RECEIVE");// - missionDataMap3.put("binCode", agvTask.getStockCode());//容器 + missionDataMap3.put("binCode", "");//容器 missionDataMap3.put("rollerLevel", 1);// - missionDataMap3.put("deviceCode", agvTask.getSlotCode());// + missionDataMap3.put("deviceCode", agvTask.getEndSlotCode());//终点 missionDataMap3.put("actionConfirm", true);// missionDataMap3.put("passStrategy", "AUTO");// missionDataObj3.putAll(missionDataMap3); @@ -355,9 +354,6 @@ public class KMReServiceImpl implements KMReService { @Transactional(rollbackFor = Exception.class) public void missionStateCallback(AgvTask agvTask, String status, String containerCode) { Stock stock = stockService.findByCode(containerCode); - if (stock == null) { - throw new BadRequestException(containerCode + "容器不存在或已失效"); - } //顶升的是起点;其它终点; Point point; String pointCode; @@ -405,7 +401,7 @@ public class KMReServiceImpl implements KMReService { Point endPoint = endPointList.get(0); //创建任务 - AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.FB_RETURN, stock, srcPoint, endPoint, "FORKLIFT_MOVE"); + AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.FB_RETURN, stock, srcPoint.getCode(), endPoint.getCode(), "FORKLIFT_MOVE"); //点位占用 pointService.usedPoint(endPoint); @@ -439,7 +435,7 @@ public class KMReServiceImpl implements KMReService { pointService.freePoint(startPoint); } - agvTask.setStockCode(stock.getCode()); + agvTask.setStockCode(stock == null ? null : stock.getCode()); agvTask.setStatus(BizStatus.UP_CONTAINER); agvTaskService.update(agvTask); @@ -489,6 +485,9 @@ public class KMReServiceImpl implements KMReService { case BizStatus.Cp_Off_Line: handleCpOffLine(endPoint, stock);//成品下线完成 break; + case BizStatus.Fx_Off_Line: + handleFxOffLine(agvTask);//返修下线完成 + break; } //更新任务状态 @@ -520,7 +519,7 @@ public class KMReServiceImpl implements KMReService { * @param agvTask 任务 */ private synchronized void handleResendTask(AgvTask agvTask) { - List repeatList = agvTaskService.findRepeat(agvTask.getStockCode(),agvTask.getStartSlotCode(),agvTask.getEndSlotCode()); + List repeatList = agvTaskService.findRepeat(agvTask.getStockCode(), agvTask.getStartSlotCode(), agvTask.getEndSlotCode()); if (!repeatList.isEmpty()) { throw new BadRequestException("任务已重新生成,请勿重复操作! "); } @@ -687,6 +686,10 @@ public class KMReServiceImpl implements KMReService { stockService.usedStock(stock, endPoint, BaseStatus.USED); } + private void handleFxOffLine(AgvTask agvTask) { + this.updateAgvTaskStatus(agvTask, null, BizStatus.FINISH); + } + /** * 满车入库 * @@ -770,7 +773,7 @@ public class KMReServiceImpl implements KMReService { * @param status 状态 */ private void updateAgvTaskStatus(AgvTask agvTask, Stock stock, String status) { - agvTask.setStockCode(stock.getCode()); + agvTask.setStockCode(stock == null ? null : stock.getCode()); agvTask.setStatus(status); agvTask.setEndTime(new Timestamp(new Date().getTime())); agvTaskService.update(agvTask); diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MesServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MesServiceImpl.java index eddc6bf..96b3000 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MesServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/MesServiceImpl.java @@ -18,10 +18,7 @@ import com.youchain.businessdata.service.AgvTaskService; import com.youchain.businessdata.service.MesService; import com.youchain.exception.BadRequestException; import com.youchain.modules.system.service.DeptService; -import com.youchain.utils.AreaNameDic; -import com.youchain.utils.BaseStatus; -import com.youchain.utils.BizStatus; -import com.youchain.utils.StringUtils; +import com.youchain.utils.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -47,6 +44,7 @@ public class MesServiceImpl implements MesService { private final AgvTaskService agvTaskService; private final KMReServiceImpl kmReService; private final DeptService deptService; + private final GtLineMap gtLineMap; @Override @Transactional(rollbackFor = Exception.class) @@ -274,7 +272,7 @@ public class MesServiceImpl implements MesService { throw new BadRequestException(endPoint.getCode() + "点位有任务,请稍后再试!"); } //创建Agv任务 - AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Up, emptyStock, srcPoint, endPoint, "RACK_MOVE"); + AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Up, emptyStock, srcPoint.getCode(), endPoint.getCode(), "RACK_MOVE"); // 更新点位状态 pointService.usedPoint(endPoint); //下发任务 @@ -296,7 +294,7 @@ public class MesServiceImpl implements MesService { //验证终点是否有任务 if (agvTaskService.findByEndSlotCode(endPoint.getCode(), BizStatus.Cp_Off_Line, "RACK_MOVE")) { //创建Agv任务 - AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Line, fullStock, srcPoint, endPoint, "RACK_MOVE"); + AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Line, fullStock, srcPoint.getCode(), endPoint.getCode(), "RACK_MOVE"); // 更新点位状态 pointService.usedPoint(endPoint); //占用容器 @@ -330,7 +328,7 @@ public class MesServiceImpl implements MesService { } //创建Agv任务 - AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Line, stock, srcPoint, endPoint, "RACK_MOVE"); + AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Line, stock, srcPoint.getCode(), endPoint.getCode(), "RACK_MOVE"); // 更新点位状态 pointService.usedPoint(endPoint); //占用容器 @@ -340,15 +338,19 @@ public class MesServiceImpl implements MesService { } private void moveFxOffLine(TransTask transTask) { - Point srcPoint = pointService.validatePoint(transTask.getPointCode());//起点 - List pointList = pointService.queryPoints(null, BaseStatus.FREE, BaseStatus.BOX, AreaNameDic.FXSXQ); - if (pointList.isEmpty()) { - throw new BadRequestException("返修上线区没有空闲点位!"); + if (!gtLineMap.containsKey(transTask.getPointCode())) { + throw new BadRequestException(transTask.getPointCode() + "点位不存在,请核实!"); } - Point endPoint = pointList.get(0); + List points = gtLineMap.getData(transTask.getPointCode()); + + //验证终点是否有任务 + if (!agvTaskService.findByEndSlotCode(points.get(1), BizStatus.Fx_Off_Line, "ROLLER_MOVE")) { + // 直接在条件判断为false时抛出异常,表示该点位有任务 + throw new BadRequestException(points.get(1) + "点位有任务,请稍后再试!"); + } + //生成任务 - AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Fx_Off_Line, null, srcPoint, endPoint, "ROLLER_MOVE"); - agvTask.setSlotCode(srcPoint.getName()); + AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Fx_Off_Line, null, transTask.getPointCode(), points.get(1), "ROLLER_MOVE"); agvTaskService.update(agvTask); //下发任务 diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/TaskServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/TaskServiceImpl.java index 4920f05..95f4c5d 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/TaskServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/TaskServiceImpl.java @@ -214,7 +214,7 @@ public class TaskServiceImpl implements TaskService { List agvTaskList = agvTaskService.findRepeat(task.getSrcStockCode(),task.getSrcPointCode(),task.getDstPointCode()); if (agvTaskList.isEmpty()) { //创建任务 - agvTask = agvTaskService.createAgvTask(BizStatus.PICK, task.getSrcStock(), task.getSrcPoint(), task.getDstPoint(), "FORKLIFT_MOVE"); + agvTask = agvTaskService.createAgvTask(BizStatus.PICK, task.getSrcStock(), task.getSrcPoint().getCode(), task.getDstPoint().getCode(), "FORKLIFT_MOVE"); //终点占用 pointService.usedPoint(task.getDstPoint()); @@ -267,7 +267,7 @@ public class TaskServiceImpl implements TaskService { //创建任务 - agvTaskService.createAgvTask(BizStatus.CALL_RETURN, stock, srcPoint, endPoint, "RACK_MOVE"); + agvTaskService.createAgvTask(BizStatus.CALL_RETURN, stock, srcPoint.getCode(), endPoint.getCode(), "RACK_MOVE"); //终点占用 pointService.usedPoint(endPoint); @@ -295,7 +295,7 @@ public class TaskServiceImpl implements TaskService { Stock stock = pick.getStock(); //创建任务 - AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.CALL_PICK, stock, srcPoint, endPoint, "RACK_MOVE"); + AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.CALL_PICK, stock, srcPoint.getCode(), endPoint.getCode(), "RACK_MOVE"); agvTask.setLineSlotCode(pick.getCode()); agvTaskService.update(agvTask); diff --git a/youchain-system/src/main/java/com/youchain/utils/GtLineMap.java b/youchain-system/src/main/java/com/youchain/utils/GtLineMap.java new file mode 100644 index 0000000..3c02f63 --- /dev/null +++ b/youchain-system/src/main/java/com/youchain/utils/GtLineMap.java @@ -0,0 +1,36 @@ +package com.youchain.utils; + +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 滚筒任务路线 + * 下线点 BYDGTO06、BYDGT007、BVDGTO01、BXDGT003、BYDGT005 + * 上线点 BYDGTO02、BYDGTO04、BYDGTO08 + */ +@Component +public class GtLineMap { + public static final Map> dataMap; + + static { + dataMap = new ConcurrentHashMap<>(); + // 初始化Map + dataMap.put("BYDGT006", Arrays.asList("FX001", "BYDGT002")); + dataMap.put("BYDGT007", Arrays.asList("FX001", "BYDGT002")); + dataMap.put("BVDGT001", Arrays.asList("FX001", "BYDGT002")); + dataMap.put("BXDGT003", Arrays.asList("FX001", "BYDGT004")); + dataMap.put("BYDGT005", Arrays.asList("FX001", "BYDGT008")); + } + + public List getData(String key) { + return dataMap.get(key); + } + + public boolean containsKey(String key) { + return dataMap.containsKey(key); + } +}