From 75d5824fb5175bba89026058f8e969fd1b205703 Mon Sep 17 00:00:00 2001 From: "HUOJIN\\92525" Date: Wed, 11 Dec 2024 13:24:04 +0800 Subject: [PATCH] no message --- .../repository/PickRepository.java | 4 +- .../businessdata/service/PickService.java | 5 +- .../service/impl/KMReServiceImpl.java | 4 +- .../service/impl/MesServiceImpl.java | 42 ++++++---- .../service/impl/PickServiceImpl.java | 10 +-- .../service/impl/TaskServiceImpl.java | 19 +++-- .../modules/quartz/task/pickTask.java | 30 ++++++-- .../java/com/youchain/utils/BizStatus.java | 1 - .../java/com/youchain/utils/GtLineMap.java | 77 +++++++++++++++---- 9 files changed, 136 insertions(+), 56 deletions(-) diff --git a/youchain-system/src/main/java/com/youchain/businessdata/repository/PickRepository.java b/youchain-system/src/main/java/com/youchain/businessdata/repository/PickRepository.java index a98c965..ce84276 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/repository/PickRepository.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/repository/PickRepository.java @@ -30,8 +30,8 @@ import java.util.List; **/ public interface PickRepository extends JpaRepository, JpaSpecificationExecutor { - @Query(value = " FROM Pick p WHERE p.status in :status and p.isCall=:isCall order by p.createTime,p.lineNo ") - List findByPickStatus(List status,Boolean isCall); + @Query(value = " FROM Pick p WHERE p.status in :status and p.isCall=:isCall and (:orderType is null or p.orderType = :orderType) order by p.createTime,p.lineNo ") + List findByPickStatus(List status,Boolean isCall,String orderType); @Query(value = " FROM Pick p WHERE p.gdCode=:gdNo and p.cpCodeOrDpCode=:completeCode and p.station=:station ") Pick findByPick(String gdNo, String completeCode, String station); diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/PickService.java b/youchain-system/src/main/java/com/youchain/businessdata/service/PickService.java index ae9a73d..cbc59ec 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/PickService.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/PickService.java @@ -59,7 +59,7 @@ public interface PickService { * @param id ID * @return PickDto */ - PickDto findById(Long id); + Pick findById(Long id); /** * 创建 @@ -102,8 +102,9 @@ public interface PickService { * 根据状态查询、是否叫料出库单 * @param statuses 状态集合 * @param isCall 是否叫料 + * @param orderType 订单类型 */ - List findByPickStatus(List statuses, boolean isCall); + List findByPickStatus(List statuses, boolean isCall,String orderType); /** * 刷新出库单拣货状态 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 77bbad3..ee472d5 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 @@ -306,7 +306,7 @@ public class KMReServiceImpl implements KMReService { missionDataMap3.put("sequence", 3);//序号 missionDataMap3.put("position", agvTask.getEndSlotCode());//终点 missionDataMap3.put("type", "NODE_POINT");// - missionDataMap3.put("actionType", "ROLLER_RECEIVE");// + missionDataMap3.put("actionType", "ROLLER_SEND");// missionDataMap3.put("binCode", "");//容器 missionDataMap3.put("rollerLevel", 1);// missionDataMap3.put("deviceCode", agvTask.getEndSlotCode());//终点 @@ -482,7 +482,7 @@ public class KMReServiceImpl implements KMReService { handleCpOffLine(endPoint, stock);//成品下线完成 break; case BizStatus.Fx_Off_Line: - handleFxOffLine(agvTask);//返修下线完成 + handleFxOffLine(agvTask);//返修 break; } 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 0f03ce4..e9641dc 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 @@ -159,8 +159,10 @@ public class MesServiceImpl implements MesService { moveCpOffLine(transTask);//送满货架 break; case BizStatus.Fx_Off_Line: - moveFxOffLine(transTask);//滚筒 + moveFxOffLine(transTask);//返修呼叫空托盘、返修下线 break; + default: + throw new BadRequestException("任务类型错误!"); } } @@ -338,22 +340,34 @@ public class MesServiceImpl implements MesService { } private void moveFxOffLine(TransTask transTask) { - if (!gtLineMap.containsKey(transTask.getPointCode())) { - throw new BadRequestException(transTask.getPointCode() + "点位不是下线点,请核实!"); - } - 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) + "点位有任务,请稍后再试!"); + //返修上线起点 + String srcPointCode = transTask.getPointCode(); + //终点 + String dstPointCode; + //验证点位是否为上线点 + if (gtLineMap.isOnlinePoint(srcPointCode)) { + if ("BYDGT002".equals(srcPointCode)) { + dstPointCode = "BYDGT006"; + } else { + dstPointCode = gtLineMap.getKeyByValue(srcPointCode); + } + } else if (gtLineMap.isOfflinePoint(srcPointCode)) { + dstPointCode = gtLineMap.getValueByKey(srcPointCode); + } else { + throw new BadRequestException(srcPointCode + "点位不存在,请核实"); } - //生成任务 - AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Fx_Off_Line, null, transTask.getPointCode(), points.get(1), "ROLLER_MOVE"); - agvTaskService.update(agvTask); - //下发任务 + // 验证终点是否有任务 + if (!agvTaskService.findByEndSlotCode(dstPointCode, BizStatus.Fx_Off_Line, "ROLLER_MOVE")) { + throw new BadRequestException(dstPointCode + "点位有任务,请稍后再试!"); + } + + // 生成任务 + AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Fx_Off_Line, null, srcPointCode, dstPointCode, "ROLLER_MOVE"); + + // 下发任务 kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskGtJson(agvTask)); + } } diff --git a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/PickServiceImpl.java b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/PickServiceImpl.java index 51a09c6..0d72550 100644 --- a/youchain-system/src/main/java/com/youchain/businessdata/service/impl/PickServiceImpl.java +++ b/youchain-system/src/main/java/com/youchain/businessdata/service/impl/PickServiceImpl.java @@ -71,10 +71,8 @@ public class PickServiceImpl implements PickService { @Override @Transactional - public PickDto findById(Long id) { - Pick pick = pickRepository.findById(id).orElseGet(Pick::new); - ValidationUtil.isNull(pick.getId(), "Pick", "id", id); - return pickMapper.toDto(pick); + public Pick findById(Long id) { + return pickRepository.findById(id).orElseGet(Pick::new); } @Override @@ -123,8 +121,8 @@ public class PickServiceImpl implements PickService { } @Override - public List findByPickStatus(List statuses, boolean isCall) { - return pickRepository.findByPickStatus(statuses, isCall); + public List findByPickStatus(List statuses, boolean isCall,String orderType) { + return pickRepository.findByPickStatus(statuses, isCall, orderType); } 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 5fe4a97..46e0581 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 @@ -190,15 +190,19 @@ public class TaskServiceImpl implements TaskService { for (PickDetail pickDetail : pickDetails) { msgList.add(this.allocate(pickDetail.getId(), pickDetail.getOrderQty(), endPoint)); } - //绑定点位 - pick.setPoint(endPoint); - pickService.update(pick); /* 更新出库单状态*/ pickService.refreshPickStatus(pick); - //占用点位 - pointService.usedPoint(endPoint); + if (BizStatus.ALLOCATE.equals(pick.getStatus()) || BizStatus.ASSIGN.equals(pick.getStatus())) { + //绑定点位 + pick.setPoint(endPoint); + pickService.update(pick); + + //占用点位 + pointService.usedPoint(endPoint); + } + //保存日志 logService.saveLogInfo(pick.getCode(), pick.getCode(), "/pick/allocatePick", msgList.toString(), "出库单分配", 200, "info"); @@ -211,7 +215,7 @@ public class TaskServiceImpl implements TaskService { List taskList = this.findByPickNotAllTask(pick.getId()); for (Task task : taskList) { /*生成搬运任务*/ - List agvTaskList = agvTaskService.findRepeat(task.getSrcStockCode(),task.getSrcPointCode(),task.getDstPointCode()); + List agvTaskList = agvTaskService.findRepeat(task.getSrcStockCode(), task.getSrcPointCode(), task.getDstPointCode()); if (agvTaskList.isEmpty()) { //创建任务 agvTask = agvTaskService.createAgvTask(BizStatus.PICK, task.getSrcStock(), task.getSrcPoint().getCode(), task.getDstPoint().getCode(), "FORKLIFT_MOVE"); @@ -259,13 +263,12 @@ public class TaskServiceImpl implements TaskService { Point endPoint = pointList.get(0); //有任务则直接返回 - List agvTaskList = agvTaskService.findRepeat(stock.getCode(),srcPoint.getCode(),endPoint.getCode()); + List agvTaskList = agvTaskService.findRepeat(stock.getCode(), srcPoint.getCode(), endPoint.getCode()); if (!agvTaskList.isEmpty()) { return; } - //创建任务 agvTaskService.createAgvTask(BizStatus.CALL_RETURN, stock, srcPoint.getCode(), endPoint.getCode(), "RACK_MOVE"); diff --git a/youchain-system/src/main/java/com/youchain/modules/quartz/task/pickTask.java b/youchain-system/src/main/java/com/youchain/modules/quartz/task/pickTask.java index a5a8e5a..a93bb56 100644 --- a/youchain-system/src/main/java/com/youchain/modules/quartz/task/pickTask.java +++ b/youchain-system/src/main/java/com/youchain/modules/quartz/task/pickTask.java @@ -7,6 +7,7 @@ import com.youchain.businessdata.service.AgvTaskService; import com.youchain.businessdata.service.KMReService; import com.youchain.businessdata.service.PickService; import com.youchain.businessdata.service.TaskService; +import com.youchain.businessdata.service.dto.PickDto; import com.youchain.exception.BadRequestException; import com.youchain.utils.*; import lombok.extern.slf4j.Slf4j; @@ -37,13 +38,29 @@ public class pickTask { public KMReService kmReService; /** - * 轮询打开和分配中的出库单,分配库存 + * 轮询打开和分配中的成品出库单,分配库存 */ - public void allocatePick() { + public void allocateCpPick() { List statuses = Arrays.asList(BizStatus.OPEN, BizStatus.ASSIGN); - List pickList = pickService.findByPickStatus(statuses, false); + List pickList = pickService.findByPickStatus(statuses, false,BaseStatus.GD_TYPE_CT); if (pickList.isEmpty()) { - throw new BadRequestException("无待分配的出库单,分配失败!"); + throw new BadRequestException("无待分配的成品出库单,分配失败!"); + } + for (Pick pick : pickList) { + taskService.allocatePick(pick); + + } + + } + + /*** + * 轮询打开和分配中的单品品出库单,分配库存 + */ + public void allocateDpPick() { + List statuses = Arrays.asList(BizStatus.OPEN, BizStatus.ASSIGN); + List pickList = pickService.findByPickStatus(statuses, false, BaseStatus.GD_TYPE_DP); + if (pickList.isEmpty()) { + throw new BadRequestException("无待分配的单品出库单,分配失败!"); } for (Pick pick : pickList) { taskService.allocatePick(pick); @@ -54,12 +71,11 @@ public class pickTask { /** * 轮询已分配的出库单,生成备料任务 - * */ public void pickAgvTask() { /*查询分配完成的出库单*/ List statuses = Arrays.asList(BizStatus.ALLOCATE); - List pickList = pickService.findByPickStatus(statuses, false); + List pickList = pickService.findByPickStatus(statuses, false,null); if (pickList.isEmpty()) { throw new BadRequestException("无已分配的出库单,下发任务失败!"); } @@ -75,7 +91,7 @@ public class pickTask { public void callJlTask() { /*查询拣货完成完成的出库单*/ List statuses = Arrays.asList(BizStatus.PICK_ALL); - List pickList = pickService.findByPickStatus(statuses, true); + List pickList = pickService.findByPickStatus(statuses, true,null); if (pickList.isEmpty()) { throw new BadRequestException("无拣货完成的出库单或出库单未叫料,叫料失败!"); } diff --git a/youchain-system/src/main/java/com/youchain/utils/BizStatus.java b/youchain-system/src/main/java/com/youchain/utils/BizStatus.java index 9289fc2..f8811fd 100644 --- a/youchain-system/src/main/java/com/youchain/utils/BizStatus.java +++ b/youchain-system/src/main/java/com/youchain/utils/BizStatus.java @@ -144,7 +144,6 @@ public interface BizStatus { /** * 任务类型-叫料反空 - * */ String CALL_RETURN = "CALL_RETURN"; diff --git a/youchain-system/src/main/java/com/youchain/utils/GtLineMap.java b/youchain-system/src/main/java/com/youchain/utils/GtLineMap.java index 6322569..54eff62 100644 --- a/youchain-system/src/main/java/com/youchain/utils/GtLineMap.java +++ b/youchain-system/src/main/java/com/youchain/utils/GtLineMap.java @@ -2,35 +2,84 @@ package com.youchain.utils; import org.springframework.stereotype.Component; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; /** * 滚筒任务路线 - * 下线点 BYDGTO06、BYDGT007、BVDGTO01、BXDGT003、BYDGT005 - * 上线点 BYDGTO02、BYDGTO04、BYDGTO08 + * 下线:下线点 BYDGTO06、BYDGT007、BVDGTO01、BXDGT003、BYDGT005 + * 上线:上线点 BYDGTO02、BYDGTO04、BYDGTO08 */ @Component public class GtLineMap { - public static final Map> dataMap; + /** + * 关联关系映射 + */ + public static final Map dataMap; + + /** + * 上线点集合 + */ + private static final Set ONLINE_POINTS; + + /** + * 下线点集合 + */ + private static final Set OFFLINE_POINTS; static { dataMap = new ConcurrentHashMap<>(); // 初始化Map - dataMap.put("BYDGT006", Arrays.asList("FX001", "BYDGT002")); - dataMap.put("BYDGT007", Arrays.asList("FX001", "BYDGT002")); - dataMap.put("BYDGT001", Arrays.asList("FX001", "BYDGT002")); - dataMap.put("BYDGT003", Arrays.asList("FX001", "BYDGT004")); - dataMap.put("BYDGT005", Arrays.asList("FX001", "BYDGT008")); + dataMap.put("BYDGT006", "BYDGT002"); + dataMap.put("BYDGT007", "BYDGT002"); + dataMap.put("BYDGT001", "BYDGT002"); + dataMap.put("BYDGT003", "BYDGT004"); + dataMap.put("BYDGT005", "BYDGT008"); + + // 初始化上线点 + ONLINE_POINTS = new HashSet<>(Arrays.asList( + "BYDGT002", "BYDGT004", "BYDGT008" + )); + + // 初始化下线点 + OFFLINE_POINTS = new HashSet<>(Arrays.asList( + "BYDGT001", "BYDGT003", "BYDGT005", "BYDGT006", "BYDGT007" + )); + } - public List getData(String key) { + /** + * 通过key获取value + */ + public String getValueByKey(String key) { return dataMap.get(key); } - public boolean containsKey(String key) { - return dataMap.containsKey(key); + /** + * 通过value获取key + */ + public String getKeyByValue(String value) { + return dataMap.entrySet().stream() + .filter(entry -> value.equals(entry.getValue())) + .map(Map.Entry::getKey) + .findFirst() + .orElse(null); } + + /** + * 判断是否为上线点 + */ + public boolean isOnlinePoint(String point) { + return ONLINE_POINTS.contains(point); + } + + /** + * 判断是否为下线点 + */ + public boolean isOfflinePoint(String point) { + return OFFLINE_POINTS.contains(point); + } + + }