From a76ce8a9fa6ff1eedf0d65298d86fc33825c08bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8C=AB=E7=8C=ABguowen?= <9290821+guowen-the-cat@user.noreply.gitee.com> Date: Wed, 13 Aug 2025 13:51:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=B0=E4=BD=8D=E9=85=8D=E9=80=81=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=82=B9=E5=AF=B9=E7=82=B9=E6=90=AC=E8=BF=90=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ruoyi/RuoYiApplication.java | 11 +- .../BasStandPositionController.java | 181 +++++++++-- ruoyi-ui/src/api/bas/basstandPosition.js | 9 + ruoyi-ui/src/lang/en.js | 7 + ruoyi-ui/src/lang/hu.js | 7 + ruoyi-ui/src/lang/zh.js | 7 + .../src/views/bas/basstandPosition/index.vue | 304 +++++++++++++++--- ruoyi-ui/src/views/index.vue | 1 - 8 files changed, 433 insertions(+), 94 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java index 5803460..d4af5cf 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java @@ -19,15 +19,6 @@ public class RuoYiApplication { // System.setProperty("spring.devtools.restart.enabled", "false"); SpringApplication.run(RuoYiApplication.class, args); - System.out.println("(♥◠‿◠)ノ゙ 若依启动成功 ლ(´ڡ`ლ)゙ \n" + - " .-------. ____ __ \n" + - " | _ _ \\ \\ \\ / / \n" + - " | ( ' ) | \\ _. / ' \n" + - " |(_ o _) / _( )_ .' \n" + - " | (_,_).' __ ___(_ o _)' \n" + - " | |\\ \\ | || |(_,_)' \n" + - " | | \\ `' /| `-' / \n" + - " | | \\ / \\ / \n" + - " ''-' `'-' `-..-' "); + System.out.println("(♥◠‿◠)ノ゙ WMS启动成功 ლ(´ڡ`ლ)゙ "); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/basstandPosition/controller/BasStandPositionController.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/basstandPosition/controller/BasStandPositionController.java index 2a5104b..c0f55e3 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/bas/basstandPosition/controller/BasStandPositionController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/basstandPosition/controller/BasStandPositionController.java @@ -4,10 +4,12 @@ import java.util.List; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; +import java.util.stream.Collectors; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.bas.port.domain.BasProductPort; @@ -16,6 +18,8 @@ import com.ruoyi.bas.container.domain.BasContainer; import com.ruoyi.bas.container.service.IBasContainerService; import com.ruoyi.bas.containerDetails.domain.BasContainerDetails; import com.ruoyi.bas.containerDetails.service.IBasContainerDetailsService; +import com.ruoyi.device.agv.domain.AgvContainerTask; +import com.ruoyi.device.agv.service.IAgvContainerTaskService; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.PageDomain; import com.ruoyi.common.core.page.TableSupport; @@ -40,27 +44,60 @@ public class BasStandPositionController extends BaseController @Autowired private IBasContainerDetailsService basContainerDetailsService; + + @Autowired + private IAgvContainerTaskService agvContainerTaskService; /** - * 查询点位类型为6的基础点位列表,并关联容器和容器明细数据 + * 查询基础点位列表,并关联容器和容器明细数据 + * 支持根据点位类型和点位名称筛选,默认返回所有数据 */ @PreAuthorize("@ss.hasPermi('bas:basstandPosition:list')") @GetMapping("/portType6") - public TableDataInfo getPortType6List(BasProductPort basProductPort) + public TableDataInfo getPortType6List(BasProductPort basProductPort, @RequestParam(required = false) Integer agvStatus) { - // 设置查询条件:portType为6 - basProductPort.setPortType("6"); + // 如果没有传入portType参数,则查询所有类型的数据 + // 如果传入了portType参数,则按指定类型筛选 + // 如果传入了portName参数,则按点位名称筛选(模糊查询) + // 如果传入了agvStatus参数,则按AGV状态筛选 - // 先查询所有portType为6的BasProductPort数据(不分页) + // 先查询所有符合条件的BasProductPort数据(不分页) List allPortList = basProductPortService.selectBasProductPortList(basProductPort); + // 查询所有agv任务数据,避免重复查询 + AgvContainerTask taskQuery = new AgvContainerTask(); + List allTaskList = agvContainerTaskService.selectAgvContainerTaskList(taskQuery); + // 构建完整的返回结果列表 List> allResultList = new ArrayList<>(); for (BasProductPort port : allPortList) { Map resultMap = new HashMap<>(); + + // 判断该点位的agv状态并添加到port对象中 + int portAgvStatus = 0; // 默认为0 + String portName = port.getPortName(); + for (AgvContainerTask task : allTaskList) { + if ((task.getStartPoint() != null && task.getStartPoint().equals(portName)) || + (task.getEndPoint() != null && task.getEndPoint().equals(portName))) { + portAgvStatus = 1; + break; + } + } + + // 创建一个包含agvStatus的port Map + Map portWithStatus = new HashMap<>(); + portWithStatus.put("id", port.getId()); + portWithStatus.put("portName", port.getPortName()); + portWithStatus.put("portType", port.getPortType()); + portWithStatus.put("portDesc", port.getPortDesc()); + portWithStatus.put("warehouseId", port.getWarehouseId()); + portWithStatus.put("createMan", port.getCreateMan()); + portWithStatus.put("createTime", port.getCreateTime()); + portWithStatus.put("agvStatus", portAgvStatus); + // 添加点位信息 - resultMap.put("port", port); + resultMap.put("port", portWithStatus); // 根据portName查询容器信息 BasContainer containerQuery = new BasContainer(); @@ -78,6 +115,8 @@ public class BasStandPositionController extends BaseController BasContainerDetails detailsQuery = new BasContainerDetails(); detailsQuery.setContainerId(container.getContainerId()); List detailsList = basContainerDetailsService.selectBasContainerDetailsList(detailsQuery); + + // 直接添加明细信息,不需要重复添加agvStatus containerMap.put("details", detailsList); containerWithDetails.add(containerMap); @@ -87,6 +126,29 @@ public class BasStandPositionController extends BaseController allResultList.add(resultMap); } + // 根据agvStatus筛选数据 + if (agvStatus != null) { + allResultList = allResultList.stream().filter(resultMap -> { + @SuppressWarnings("unchecked") + Map portMap = (Map) resultMap.get("port"); + String portName = (String) portMap.get("portName"); + + // 判断该点位的agv状态 + boolean hasAgvTask = false; + for (AgvContainerTask task : allTaskList) { + if ((task.getStartPoint() != null && task.getStartPoint().equals(portName)) || + (task.getEndPoint() != null && task.getEndPoint().equals(portName))) { + hasAgvTask = true; + break; + } + } + + // 根据筛选条件返回结果 + int currentAgvStatus = hasAgvTask ? 1 : 0; + return currentAgvStatus == agvStatus.intValue(); + }).collect(Collectors.toList()); + } + // 手动实现分页 PageDomain pageDomain = TableSupport.buildPageRequest(); int pageNum = pageDomain.getPageNum(); @@ -123,6 +185,10 @@ public class BasStandPositionController extends BaseController // 查询所有BasProductPort数据(不限制portType) List allPortList = basProductPortService.selectBasProductPortList(basProductPort); + // 查询所有agv任务数据,避免重复查询 + AgvContainerTask taskQuery = new AgvContainerTask(); + List allTaskList = agvContainerTaskService.selectAgvContainerTaskList(taskQuery); + // 构建无料架点位的返回结果列表 List> noContainerResultList = new ArrayList<>(); @@ -134,11 +200,36 @@ public class BasStandPositionController extends BaseController // 如果该点位没有容器信息,则添加到结果列表中 if (containerList == null || containerList.isEmpty()) { - Map resultMap = new HashMap<>(); - resultMap.put("port", port); - resultMap.put("containers", new ArrayList<>()); - resultMap.put("containerWithDetails", new ArrayList<>()); - noContainerResultList.add(resultMap); + // 判断该点位的agv状态并添加到port对象中 + int portAgvStatus = 0; // 默认为0 + String portName = port.getPortName(); + for (AgvContainerTask task : allTaskList) { + if ((task.getStartPoint() != null && task.getStartPoint().equals(portName)) || + (task.getEndPoint() != null && task.getEndPoint().equals(portName))) { + portAgvStatus = 1; + break; + } + } + + // 只返回agvStatus不等于1的点位数据 + if (portAgvStatus != 1) { + // 创建一个包含agvStatus的port Map + Map portWithStatus = new HashMap<>(); + portWithStatus.put("id", port.getId()); + portWithStatus.put("portName", port.getPortName()); + portWithStatus.put("portType", port.getPortType()); + portWithStatus.put("portDesc", port.getPortDesc()); + portWithStatus.put("warehouseId", port.getWarehouseId()); + portWithStatus.put("createMan", port.getCreateMan()); + portWithStatus.put("createTime", port.getCreateTime()); + portWithStatus.put("agvStatus", portAgvStatus); + + Map resultMap = new HashMap<>(); + resultMap.put("port", portWithStatus); + resultMap.put("containers", new ArrayList<>()); + resultMap.put("containerWithDetails", new ArrayList<>()); + noContainerResultList.add(resultMap); + } } } @@ -178,6 +269,10 @@ public class BasStandPositionController extends BaseController // 查询所有BasProductPort数据(不限制portType) List allPortList = basProductPortService.selectBasProductPortList(basProductPort); + // 查询所有agv任务数据,避免重复查询 + AgvContainerTask taskQuery = new AgvContainerTask(); + List allTaskList = agvContainerTaskService.selectAgvContainerTaskList(taskQuery); + // 构建有料架点位的返回结果列表 List> hasContainerResultList = new ArrayList<>(); @@ -189,27 +284,53 @@ public class BasStandPositionController extends BaseController // 如果该点位有容器信息,则添加到结果列表中 if (containerList != null && !containerList.isEmpty()) { - Map resultMap = new HashMap<>(); - resultMap.put("port", port); - resultMap.put("containers", containerList); - - // 为每个容器查询明细信息 - List> containerWithDetails = new ArrayList<>(); - for (BasContainer container : containerList) { - Map containerMap = new HashMap<>(); - containerMap.put("container", container); - - // 根据containerId查询容器明细 - BasContainerDetails detailsQuery = new BasContainerDetails(); - detailsQuery.setContainerId(container.getContainerId()); - List detailsList = basContainerDetailsService.selectBasContainerDetailsList(detailsQuery); - containerMap.put("details", detailsList); - - containerWithDetails.add(containerMap); + // 判断该点位的agv状态并添加到port对象中 + int portAgvStatus = 0; // 默认为0 + String portName = port.getPortName(); + for (AgvContainerTask task : allTaskList) { + if ((task.getStartPoint() != null && task.getStartPoint().equals(portName)) || + (task.getEndPoint() != null && task.getEndPoint().equals(portName))) { + portAgvStatus = 1; + break; + } } - resultMap.put("containerWithDetails", containerWithDetails); - hasContainerResultList.add(resultMap); + // 创建一个包含agvStatus的port Map + Map portWithStatus = new HashMap<>(); + portWithStatus.put("id", port.getId()); + portWithStatus.put("portName", port.getPortName()); + portWithStatus.put("portType", port.getPortType()); + portWithStatus.put("portDesc", port.getPortDesc()); + portWithStatus.put("warehouseId", port.getWarehouseId()); + portWithStatus.put("createMan", port.getCreateMan()); + portWithStatus.put("createTime", port.getCreateTime()); + portWithStatus.put("agvStatus", portAgvStatus); + + // 只返回agvStatus不等于1的数据 + if (portAgvStatus != 1) { + Map resultMap = new HashMap<>(); + resultMap.put("port", portWithStatus); + resultMap.put("containers", containerList); + + + // 为每个容器查询明细信息 + List> containerWithDetails = new ArrayList<>(); + for (BasContainer container : containerList) { + Map containerMap = new HashMap<>(); + containerMap.put("container", container); + + // 根据containerId查询容器明细 + BasContainerDetails detailsQuery = new BasContainerDetails(); + detailsQuery.setContainerId(container.getContainerId()); + List detailsList = basContainerDetailsService.selectBasContainerDetailsList(detailsQuery); + containerMap.put("details", detailsList); + + containerWithDetails.add(containerMap); + } + resultMap.put("containerWithDetails", containerWithDetails); + + hasContainerResultList.add(resultMap); + } } } diff --git a/ruoyi-ui/src/api/bas/basstandPosition.js b/ruoyi-ui/src/api/bas/basstandPosition.js index eb24fac..ffefa92 100644 --- a/ruoyi-ui/src/api/bas/basstandPosition.js +++ b/ruoyi-ui/src/api/bas/basstandPosition.js @@ -50,3 +50,12 @@ export function callMaterialRack(sourcePortName, targetPortName, containerId) { method: 'get' }) } + +// 推送AGV搬运作业 +export function pushAgvMoveJob(data) { + return request({ + url: '/api2wcs/pushAgvMoveJob', + method: 'post', + data: data + }) +} diff --git a/ruoyi-ui/src/lang/en.js b/ruoyi-ui/src/lang/en.js index 47e9beb..ea7c53d 100644 --- a/ruoyi-ui/src/lang/en.js +++ b/ruoyi-ui/src/lang/en.js @@ -3852,6 +3852,9 @@ export default { basstandPosition: { positionType: '点位类型', description: '描述', + enterPositionName:'请输入点位名称', + positionStatus:'点位状态', + selectPositionStatus:'请选择点位状态', creator: '创建人', warehouseId: '仓库ID', containerInfo: '容器信息', @@ -4090,6 +4093,10 @@ export default { a1: '未审核', a2: '审查通过', a3: '审核不通过' + }, + agv_status:{ + a1:'无任务', + a2:'任务中' } } diff --git a/ruoyi-ui/src/lang/hu.js b/ruoyi-ui/src/lang/hu.js index 47e9beb..cd65889 100644 --- a/ruoyi-ui/src/lang/hu.js +++ b/ruoyi-ui/src/lang/hu.js @@ -3851,6 +3851,9 @@ export default { }, basstandPosition: { positionType: '点位类型', + enterPositionName:'请输入点位名称', + positionStatus:'点位状态', + selectPositionStatus:'请选择点位状态', description: '描述', creator: '创建人', warehouseId: '仓库ID', @@ -4090,6 +4093,10 @@ export default { a1: '未审核', a2: '审查通过', a3: '审核不通过' + }, + agv_status:{ + a1:'无任务', + a2:'任务中' } } diff --git a/ruoyi-ui/src/lang/zh.js b/ruoyi-ui/src/lang/zh.js index 47e9beb..cd65889 100644 --- a/ruoyi-ui/src/lang/zh.js +++ b/ruoyi-ui/src/lang/zh.js @@ -3851,6 +3851,9 @@ export default { }, basstandPosition: { positionType: '点位类型', + enterPositionName:'请输入点位名称', + positionStatus:'点位状态', + selectPositionStatus:'请选择点位状态', description: '描述', creator: '创建人', warehouseId: '仓库ID', @@ -4090,6 +4093,10 @@ export default { a1: '未审核', a2: '审查通过', a3: '审核不通过' + }, + agv_status:{ + a1:'无任务', + a2:'任务中' } } diff --git a/ruoyi-ui/src/views/bas/basstandPosition/index.vue b/ruoyi-ui/src/views/bas/basstandPosition/index.vue index 57d063b..ad2fde3 100644 --- a/ruoyi-ui/src/views/bas/basstandPosition/index.vue +++ b/ruoyi-ui/src/views/bas/basstandPosition/index.vue @@ -1,5 +1,64 @@ - + + + - + + + + +