From 24eaaa2823747659b6fe29122cafd099683dfb1d Mon Sep 17 00:00:00 2001 From: "1009473166@qq.com" <草拟吗23> Date: Wed, 18 Mar 2026 14:22:57 +0800 Subject: [PATCH] 2026.3.18 --- .../main/java/com/ruoyi/RuoYiApplication.java | 4 +++ .../queue/srgv/mapper/WcsSrgvQueueMapper.java | 22 ++++++------ .../srgv/service/IWcsSrgvQueueService.java | 2 ++ .../service/impl/WcsSrgvQueueServiceImpl.java | 22 ++++++++++++ .../schedule/plcRead/srgv/PlcSrgvRead.java | 17 ++++++++- .../schedule/plcRead/ssj/PlcSsjRead.java | 16 +++++++++ .../schedule/scheduleTask/cdz/CdzThread.java | 3 +- .../scheduleTask/srgv/BaseSRgvThread.java | 35 +++++++++++++------ .../schedule/scheduleTask/tsj/TsjThread.java | 12 ++++++- .../java/com/ruoyi/tcp/GetDeviceSrgvMap.java | 2 +- .../java/com/ruoyi/tcp/GetDeviceSsjMap.java | 10 ++---- .../ruoyi/tcp/Wcs2wmsgetEmptyCargoSpace.java | 2 ++ .../mapper/queue/WcsSrgvQueueMapper.xml | 6 ++++ 13 files changed, 120 insertions(+), 33 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java index e95a574..5bcd40a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java @@ -1,5 +1,6 @@ package com.ruoyi; +import com.ruoyi.schedule.ScheduleThread; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -7,6 +8,8 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; +import javax.annotation.Resource; + /** * 启动程序 * @@ -17,6 +20,7 @@ import org.springframework.scheduling.annotation.EnableScheduling; @EnableAsync public class RuoYiApplication { + public static void main(String[] args) { // System.setProperty("spring.devtools.restart.enabled", "false"); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/queue/srgv/mapper/WcsSrgvQueueMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/queue/srgv/mapper/WcsSrgvQueueMapper.java index 219b0e7..3c58130 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/queue/srgv/mapper/WcsSrgvQueueMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/queue/srgv/mapper/WcsSrgvQueueMapper.java @@ -2,7 +2,6 @@ package com.ruoyi.queue.srgv.mapper; import java.util.List; import com.ruoyi.queue.srgv.domain.WcsSrgvQueue; -import org.apache.ibatis.annotations.Param; /** * 四向小车任务队列Mapper接口 @@ -10,11 +9,10 @@ import org.apache.ibatis.annotations.Param; * @author ruoyi * @date 2025-11-21 */ -public interface WcsSrgvQueueMapper -{ +public interface WcsSrgvQueueMapper { /** * 查询四向小车任务队列 - * + * * @param guid 四向小车任务队列主键 * @return 四向小车任务队列 */ @@ -29,12 +27,9 @@ public interface WcsSrgvQueueMapper public WcsSrgvQueue selectWcsSrgvQueueByFloor(String theFloor); - - - /** * 查询四向小车任务队列列表 - * + * * @param wcsSrgvQueue 四向小车任务队列 * @return 四向小车任务队列集合 */ @@ -42,7 +37,7 @@ public interface WcsSrgvQueueMapper /** * 新增四向小车任务队列 - * + * * @param wcsSrgvQueue 四向小车任务队列 * @return 结果 */ @@ -50,7 +45,7 @@ public interface WcsSrgvQueueMapper /** * 修改四向小车任务队列 - * + * * @param wcsSrgvQueue 四向小车任务队列 * @return 结果 */ @@ -58,7 +53,7 @@ public interface WcsSrgvQueueMapper /** * 删除四向小车任务队列 - * + * * @param guid 四向小车任务队列主键 * @return 结果 */ @@ -66,7 +61,7 @@ public interface WcsSrgvQueueMapper /** * 批量删除四向小车任务队列 - * + * * @param guids 需要删除的数据主键集合 * @return 结果 */ @@ -77,4 +72,7 @@ public interface WcsSrgvQueueMapper Integer selectTsj(); Integer selectByCaogoPlaceSite(String siteId); + + Integer selectByEndSite(); + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/queue/srgv/service/IWcsSrgvQueueService.java b/ruoyi-admin/src/main/java/com/ruoyi/queue/srgv/service/IWcsSrgvQueueService.java index 08c2168..123dfb3 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/queue/srgv/service/IWcsSrgvQueueService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/queue/srgv/service/IWcsSrgvQueueService.java @@ -83,4 +83,6 @@ public interface IWcsSrgvQueueService Integer selectTsj(); Integer selectByCaogoPlaceSite(String siteId); + + Integer selectByEndSite(); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/queue/srgv/service/impl/WcsSrgvQueueServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/queue/srgv/service/impl/WcsSrgvQueueServiceImpl.java index 7769dd6..4d878e4 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/queue/srgv/service/impl/WcsSrgvQueueServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/queue/srgv/service/impl/WcsSrgvQueueServiceImpl.java @@ -131,6 +131,28 @@ public class WcsSrgvQueueServiceImpl implements IWcsSrgvQueueService return wcsSrgvQueueMapper.selectByCaogoPlaceSite(siteId); } + @Override + public String selectMinCountJob( List outModelSSJ) { + return wcsSrgvQueueMapper.selectMinCountJob(outModelSSJ) ; + } + + @Override + public Integer selectTsj() { + + return wcsSrgvQueueMapper.selectTsj(); + } + + @Override + public Integer selectByCaogoPlaceSite(String siteId) { + return wcsSrgvQueueMapper.selectByCaogoPlaceSite(siteId); + } + + @Override + public Integer selectByEndSite() { + return wcsSrgvQueueMapper.selectByEndSite(); + + } + @Override public WcsSrgvQueue insertHistory(String taskNo) { WcsSrgvQueue wcsSrgvQueue = wcsSrgvQueueMapper.selectWcsSrgvQueueByTaskNo(taskNo); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/srgv/PlcSrgvRead.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/srgv/PlcSrgvRead.java index 3a666a3..e6e4f9a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/srgv/PlcSrgvRead.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/srgv/PlcSrgvRead.java @@ -79,6 +79,12 @@ public class PlcSrgvRead implements Runnable { if (read1.IsSuccess) { setValueByByte1(read1.Content, deviceSrgv); } + + OperateResultExOne read5 = modbusTcpNet.Read("4081", (short) 2);//2400-2414 + if (read5.IsSuccess) { + setValueByByte5(read1.Content, deviceSrgv); + } + //读取二段任务 小车是否接收完成1段作业 OperateResultExOne read3 = modbusTcpNet.Read("1000", (short) 2);//2400-2414 if (read3.IsSuccess) { @@ -111,7 +117,7 @@ public class PlcSrgvRead implements Runnable { // agvData.setStatus(0); agvData.setStatus(Convert.toInt(byteTransform.TransInt16(content, 8))); //载货标志 - agvData.setCargoFlag(Convert.toInt(byteTransform.TransInt16(content, 13))); +// agvData.setCargoFlag(Convert.toInt(byteTransform.TransInt32(content[1], 13))); //接收完成标志 // agvData.setFinish(Convert.toInt(byteTransform.TransInt16(content, 10))); // agvData.setFinish(0); @@ -131,6 +137,15 @@ public class PlcSrgvRead implements Runnable { } + + private void setValueByByte5(byte[] content, DeviceSrgv agvData) { + int cargoFlag = content[27] & 0xFF; + agvData.setCargoFlag(cargoFlag); + + } + + + //单字 private void setValueByByte3(byte[] content, DeviceSrgv agvData) { // agvData.setTaskType(0); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ssj/PlcSsjRead.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ssj/PlcSsjRead.java index 4bc6775..357fa42 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ssj/PlcSsjRead.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ssj/PlcSsjRead.java @@ -68,6 +68,10 @@ public class PlcSsjRead implements Runnable { // 线体到位输送机 readPlcOtherSsj(ssjDevice); break; + case "4": + // 线体到位输送机 + readPlcInDwSsj(ssjDevice); + break; } } @@ -86,6 +90,18 @@ public class PlcSsjRead implements Runnable { } } + private void readPlcInDwSsj(DeviceSsj ssjDevice) { + OperateResultExOne read2 = readWriteNet.Read(ssjDevice.getPlcDbReadAddress(), Short.parseShort("10")); + String ddsx1 = "0"; + if (read2.IsSuccess) { + ddsx1 = SoftBasic.ByteToHexString(read2.Content); + ssjDevice.setKx(ParseUtil.optInt(4, ddsx1)); + ssjDevice.setDw(ParseUtil.optInt(6, ddsx1)); + ssjDevice.setTaskNo(ParseUtil.optDInt(0, ddsx1)); + + } + } + /** * 其他输送机 * diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/cdz/CdzThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/cdz/CdzThread.java index 9aafc13..ce2eab2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/cdz/CdzThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/cdz/CdzThread.java @@ -37,6 +37,7 @@ public class CdzThread implements Runnable { private final Integer LITTLE_BETTERY = 40; private final Integer MIDDLE_BETTERY = 70; private final Integer MAX_BETTERY = 90; + private final Integer JOB_BETTERY=50; private ISrgvChargingJobService chargingJobService; private IDeviceCdzService deviceCdzService; private IDeviceSrgvService deviceSrgvService; @@ -139,7 +140,7 @@ public class CdzThread implements Runnable { List deviceCdzdd = deviceCdzService.selectDeviceCdzHasSRgvList(); for (DeviceCdz deviceCdz : deviceCdzdd) { DeviceSrgv deviceSrgv = PlcSrgvRead.deviceSrgvMap.get(deviceCdz.getSpare1()); - if (((deviceSrgv.getBattery() >= MIDDLE_BETTERY && count > 0) || deviceSrgv.getBattery() >= MAX_BETTERY) + if (((deviceSrgv.getBattery() >= JOB_BETTERY && count > 0) || deviceSrgv.getBattery() >= MAX_BETTERY) && deviceSrgv.getWorkMode() == 5 && deviceSrgv.getChargeFlag() == 2 && deviceCdz.getStatus() == 1) { createChargingOutJob(PlcSrgvRead.deviceSrgvMap.get(deviceCdz.getSpare1()), deviceCdz); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/srgv/BaseSRgvThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/srgv/BaseSRgvThread.java index 49a41e4..13c14f7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/srgv/BaseSRgvThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/srgv/BaseSRgvThread.java @@ -338,9 +338,11 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { } if (deviceSrgv != null) { WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv.getDeviceId().toString()); - WcsSrgvQueue wcsSrgvQueue4 = wcsSagvQueueMapper.selectWcsSrgvQueueByFloor(mydoJob1.getTheFloor()); +// WcsSrgvQueue wcsSrgvQueue4 = wcsSagvQueueMapper.selectWcsSrgvQueueByFloor(mydoJob1.getTheFloor()); - if (wcsSrgvQueue2 == null && deviceSrgv.getStatus() == 1 && wcsSrgvQueue4 == null) { + if (wcsSrgvQueue2 == null && deviceSrgv.getStatus() == 1 +// && wcsSrgvQueue4 == null + ) { //查询小车是否为取货楼层 String endSite = ""; String issued = "0"; @@ -1416,13 +1418,7 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { //不同层,终点为提升机 endSite = "tsj"; } - // 如果终点是提升机需要判断是否有其他任务也是提升机的 这个时候先停一下 -// if (endSite.equals("tsj")) { -// Integer count = wcsSagvQueueMapper.selectTsj(); -// if (count > 0) { -// return; -// } -// } + if ("L1004".equals(wcsSrgvMapq.getRemark()) || "L1005".equals(wcsSrgvMapq.getRemark())) { xfType = "1";//入库 @@ -1517,7 +1513,26 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface { { wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid()); } - + // 如果是空车且 任务是点到点并且目标点是“070301” + }else if ("1".equals(taskType)&&wcsSrgvQueue.getDefault02().equals("4")&&wcsSrgvQueue.getEndSite().equals("070301")){ + String endSite = ""; + String xfType = ""; + WcsSrgvMap wcsSrgvMapq = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPickSite); + WcsSrgvMap wcsSrgvMapf = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPlaceSite); + // 取货点地图和放货点地图不为空 + if (wcsSrgvMapq != null && wcsSrgvMapf != null) { + //如果是同层,终点为取货点 + endSite = cargoPickSite; + // 更新目标点,修改执行队列 + wcsSrgvQueue.setEndSite(endSite); + wcsSrgvQueue.setDefault02("4"); + wcsSrgvQueue.setIssued("0"); + wcsSrgvQueue.setExecutionStatus("1"); + wcsSrgvQueue.setTaskType("1"); + } + wcsSrgvQueue.setStartSite(currSite); + wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo()); + wcsSagvQueueMapper.updateWcsSrgvQueue(wcsSrgvQueue); } //更新小车待机时间 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/tsj/TsjThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/tsj/TsjThread.java index 4704812..94cecef 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/tsj/TsjThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/tsj/TsjThread.java @@ -27,7 +27,9 @@ import com.ruoyi.schedule.plcRead.util.Tools; import lombok.extern.slf4j.Slf4j; import java.util.Date; +import java.util.Iterator; import java.util.List; +import java.util.stream.Collectors; @Slf4j public class TsjThread implements Runnable { @@ -212,8 +214,16 @@ public class TsjThread implements Runnable { WcsSrgvMap wcsSrgvMapq = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPickSite); WcsSrgvMap wcsSrgvMapf = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPlaceSite); if (wcsSrgvMapq != null && wcsSrgvMapf != null) { + Integer count = wcsSrgvQueueService.selectByEndSite(); + List collect = PlcSrgvRead.deviceSrgvMap.values().stream().filter(d -> + d.getCurrSite().equals(cargoPickSite)) + .collect(Collectors.toList()); + if (count > 0 || !collect.isEmpty()) { + wcsSrgvQueue.setEndSite("070301"); + } else { + wcsSrgvQueue.setEndSite(cargoPickSite); + } - wcsSrgvQueue.setEndSite(cargoPickSite); wcsSrgvQueue.setDefault02("4"); wcsSrgvQueue.setTheFloor(wcsSrgvMapq.getTheLayer().toString()); wcsSrgvQueue.setDefault07(wcsSrgvMapf.getTheLayer().toString()); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/tcp/GetDeviceSrgvMap.java b/ruoyi-admin/src/main/java/com/ruoyi/tcp/GetDeviceSrgvMap.java index 64e1fda..2045d5c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/tcp/GetDeviceSrgvMap.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/tcp/GetDeviceSrgvMap.java @@ -80,7 +80,7 @@ public class GetDeviceSrgvMap { AgvDto dto = new AgvDto(); dto.setId(d.getDeviceId() == null ? "" : String.format("%04d", d.getDeviceId())); dto.setTaskNo(d.getTaskNo() == null ? "" : String.valueOf(d.getTaskNo())); - dto.setIsThere((d.getWorkPhase() >= 3 && d.getWorkPhase() < 6 ? "1" : "0")); + dto.setIsThere(d.getCargoFlag()==256?"1":"0"); Integer wp = d.getWorkPhase(); String status = "0"; if (wp != null) { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/tcp/GetDeviceSsjMap.java b/ruoyi-admin/src/main/java/com/ruoyi/tcp/GetDeviceSsjMap.java index 6fe56ea..bfca15b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/tcp/GetDeviceSsjMap.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/tcp/GetDeviceSsjMap.java @@ -101,14 +101,10 @@ public class GetDeviceSsjMap { dto.setAlarmMsg(DictUtils.getDictLabel("ssj_ex", String.valueOf(d.getException()))); dto.setKX(String.valueOf(d.getKx())); if (!dto.getTaskNo().equals("0")){ - if (dto.getRotationDirection().equals("1")){ - dto.setDW(String.valueOf(d.getDw())); + if (dto.getKX().equals("0")){ + dto.setDW("1"); }else { - if (dto.getKX().equals("0")){ - dto.setDW("1"); - }else { - dto.setDW("0"); - } + dto.setDW("0"); } }else { dto.setDW("0"); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/tcp/Wcs2wmsgetEmptyCargoSpace.java b/ruoyi-admin/src/main/java/com/ruoyi/tcp/Wcs2wmsgetEmptyCargoSpace.java index 3f599cc..647e003 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/tcp/Wcs2wmsgetEmptyCargoSpace.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/tcp/Wcs2wmsgetEmptyCargoSpace.java @@ -96,6 +96,7 @@ public class Wcs2wmsgetEmptyCargoSpace { dto.setTrayCode(getText(node, "trayCode")); dto.setProductCode(getText(node, "productCode")); dto.setProductName(getText(node, "productName")); + dto.setCargoSpaceId(getText(node, "cargoSpaceId")); return dto; } @@ -125,5 +126,6 @@ public class Wcs2wmsgetEmptyCargoSpace { private String trayCode; private String productCode; private String productName; + private String cargoSpaceId; } } diff --git a/ruoyi-admin/src/main/resources/mapper/queue/WcsSrgvQueueMapper.xml b/ruoyi-admin/src/main/resources/mapper/queue/WcsSrgvQueueMapper.xml index a73408d..d583ed6 100644 --- a/ruoyi-admin/src/main/resources/mapper/queue/WcsSrgvQueueMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/queue/WcsSrgvQueueMapper.xml @@ -222,4 +222,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select count(1) from wcs_srgv_queue where cargo_place_site=#{siteId} + + + +