2026.3.18

This commit is contained in:
1009473166@qq.com
2026-03-18 14:22:57 +08:00
parent 24fb696a67
commit 24eaaa2823
13 changed files with 120 additions and 33 deletions

View File

@@ -1,5 +1,6 @@
package com.ruoyi; package com.ruoyi;
import com.ruoyi.schedule.ScheduleThread;
import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; 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.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
import javax.annotation.Resource;
/** /**
* 启动程序 * 启动程序
* *
@@ -17,6 +20,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
@EnableAsync @EnableAsync
public class RuoYiApplication public class RuoYiApplication
{ {
public static void main(String[] args) public static void main(String[] args)
{ {
// System.setProperty("spring.devtools.restart.enabled", "false"); // System.setProperty("spring.devtools.restart.enabled", "false");

View File

@@ -2,7 +2,6 @@ package com.ruoyi.queue.srgv.mapper;
import java.util.List; import java.util.List;
import com.ruoyi.queue.srgv.domain.WcsSrgvQueue; import com.ruoyi.queue.srgv.domain.WcsSrgvQueue;
import org.apache.ibatis.annotations.Param;
/** /**
* 四向小车任务队列Mapper接口 * 四向小车任务队列Mapper接口
@@ -10,11 +9,10 @@ import org.apache.ibatis.annotations.Param;
* @author ruoyi * @author ruoyi
* @date 2025-11-21 * @date 2025-11-21
*/ */
public interface WcsSrgvQueueMapper public interface WcsSrgvQueueMapper {
{
/** /**
* 查询四向小车任务队列 * 查询四向小车任务队列
* *
* @param guid 四向小车任务队列主键 * @param guid 四向小车任务队列主键
* @return 四向小车任务队列 * @return 四向小车任务队列
*/ */
@@ -29,12 +27,9 @@ public interface WcsSrgvQueueMapper
public WcsSrgvQueue selectWcsSrgvQueueByFloor(String theFloor); public WcsSrgvQueue selectWcsSrgvQueueByFloor(String theFloor);
/** /**
* 查询四向小车任务队列列表 * 查询四向小车任务队列列表
* *
* @param wcsSrgvQueue 四向小车任务队列 * @param wcsSrgvQueue 四向小车任务队列
* @return 四向小车任务队列集合 * @return 四向小车任务队列集合
*/ */
@@ -42,7 +37,7 @@ public interface WcsSrgvQueueMapper
/** /**
* 新增四向小车任务队列 * 新增四向小车任务队列
* *
* @param wcsSrgvQueue 四向小车任务队列 * @param wcsSrgvQueue 四向小车任务队列
* @return 结果 * @return 结果
*/ */
@@ -50,7 +45,7 @@ public interface WcsSrgvQueueMapper
/** /**
* 修改四向小车任务队列 * 修改四向小车任务队列
* *
* @param wcsSrgvQueue 四向小车任务队列 * @param wcsSrgvQueue 四向小车任务队列
* @return 结果 * @return 结果
*/ */
@@ -58,7 +53,7 @@ public interface WcsSrgvQueueMapper
/** /**
* 删除四向小车任务队列 * 删除四向小车任务队列
* *
* @param guid 四向小车任务队列主键 * @param guid 四向小车任务队列主键
* @return 结果 * @return 结果
*/ */
@@ -66,7 +61,7 @@ public interface WcsSrgvQueueMapper
/** /**
* 批量删除四向小车任务队列 * 批量删除四向小车任务队列
* *
* @param guids 需要删除的数据主键集合 * @param guids 需要删除的数据主键集合
* @return 结果 * @return 结果
*/ */
@@ -77,4 +72,7 @@ public interface WcsSrgvQueueMapper
Integer selectTsj(); Integer selectTsj();
Integer selectByCaogoPlaceSite(String siteId); Integer selectByCaogoPlaceSite(String siteId);
Integer selectByEndSite();
} }

View File

@@ -83,4 +83,6 @@ public interface IWcsSrgvQueueService
Integer selectTsj(); Integer selectTsj();
Integer selectByCaogoPlaceSite(String siteId); Integer selectByCaogoPlaceSite(String siteId);
Integer selectByEndSite();
} }

View File

@@ -131,6 +131,28 @@ public class WcsSrgvQueueServiceImpl implements IWcsSrgvQueueService
return wcsSrgvQueueMapper.selectByCaogoPlaceSite(siteId); return wcsSrgvQueueMapper.selectByCaogoPlaceSite(siteId);
} }
@Override
public String selectMinCountJob( List<String> 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 @Override
public WcsSrgvQueue insertHistory(String taskNo) { public WcsSrgvQueue insertHistory(String taskNo) {
WcsSrgvQueue wcsSrgvQueue = wcsSrgvQueueMapper.selectWcsSrgvQueueByTaskNo(taskNo); WcsSrgvQueue wcsSrgvQueue = wcsSrgvQueueMapper.selectWcsSrgvQueueByTaskNo(taskNo);

View File

@@ -79,6 +79,12 @@ public class PlcSrgvRead implements Runnable {
if (read1.IsSuccess) { if (read1.IsSuccess) {
setValueByByte1(read1.Content, deviceSrgv); setValueByByte1(read1.Content, deviceSrgv);
} }
OperateResultExOne<byte[]> read5 = modbusTcpNet.Read("4081", (short) 2);//2400-2414
if (read5.IsSuccess) {
setValueByByte5(read1.Content, deviceSrgv);
}
//读取二段任务 小车是否接收完成1段作业 //读取二段任务 小车是否接收完成1段作业
OperateResultExOne<byte[]> read3 = modbusTcpNet.Read("1000", (short) 2);//2400-2414 OperateResultExOne<byte[]> read3 = modbusTcpNet.Read("1000", (short) 2);//2400-2414
if (read3.IsSuccess) { if (read3.IsSuccess) {
@@ -111,7 +117,7 @@ public class PlcSrgvRead implements Runnable {
// agvData.setStatus(0); // agvData.setStatus(0);
agvData.setStatus(Convert.toInt(byteTransform.TransInt16(content, 8))); 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(Convert.toInt(byteTransform.TransInt16(content, 10)));
// agvData.setFinish(0); // 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) { private void setValueByByte3(byte[] content, DeviceSrgv agvData) {
// agvData.setTaskType(0); // agvData.setTaskType(0);

View File

@@ -68,6 +68,10 @@ public class PlcSsjRead implements Runnable {
// 线体到位输送机 // 线体到位输送机
readPlcOtherSsj(ssjDevice); readPlcOtherSsj(ssjDevice);
break; break;
case "4":
// 线体到位输送机
readPlcInDwSsj(ssjDevice);
break;
} }
} }
@@ -86,6 +90,18 @@ public class PlcSsjRead implements Runnable {
} }
} }
private void readPlcInDwSsj(DeviceSsj ssjDevice) {
OperateResultExOne<byte[]> 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));
}
}
/** /**
* 其他输送机 * 其他输送机
* *

View File

@@ -37,6 +37,7 @@ public class CdzThread implements Runnable {
private final Integer LITTLE_BETTERY = 40; private final Integer LITTLE_BETTERY = 40;
private final Integer MIDDLE_BETTERY = 70; private final Integer MIDDLE_BETTERY = 70;
private final Integer MAX_BETTERY = 90; private final Integer MAX_BETTERY = 90;
private final Integer JOB_BETTERY=50;
private ISrgvChargingJobService chargingJobService; private ISrgvChargingJobService chargingJobService;
private IDeviceCdzService deviceCdzService; private IDeviceCdzService deviceCdzService;
private IDeviceSrgvService deviceSrgvService; private IDeviceSrgvService deviceSrgvService;
@@ -139,7 +140,7 @@ public class CdzThread implements Runnable {
List<DeviceCdz> deviceCdzdd = deviceCdzService.selectDeviceCdzHasSRgvList(); List<DeviceCdz> deviceCdzdd = deviceCdzService.selectDeviceCdzHasSRgvList();
for (DeviceCdz deviceCdz : deviceCdzdd) { for (DeviceCdz deviceCdz : deviceCdzdd) {
DeviceSrgv deviceSrgv = PlcSrgvRead.deviceSrgvMap.get(deviceCdz.getSpare1()); 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.getWorkMode() == 5
&& deviceSrgv.getChargeFlag() == 2 && deviceCdz.getStatus() == 1) { && deviceSrgv.getChargeFlag() == 2 && deviceCdz.getStatus() == 1) {
createChargingOutJob(PlcSrgvRead.deviceSrgvMap.get(deviceCdz.getSpare1()), deviceCdz); createChargingOutJob(PlcSrgvRead.deviceSrgvMap.get(deviceCdz.getSpare1()), deviceCdz);

View File

@@ -338,9 +338,11 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
} }
if (deviceSrgv != null) { if (deviceSrgv != null) {
WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv.getDeviceId().toString()); 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 endSite = "";
String issued = "0"; String issued = "0";
@@ -1416,13 +1418,7 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
//不同层,终点为提升机 //不同层,终点为提升机
endSite = "tsj"; endSite = "tsj";
} }
// 如果终点是提升机需要判断是否有其他任务也是提升机的 这个时候先停一下
// if (endSite.equals("tsj")) {
// Integer count = wcsSagvQueueMapper.selectTsj();
// if (count > 0) {
// return;
// }
// }
if ("L1004".equals(wcsSrgvMapq.getRemark()) || "L1005".equals(wcsSrgvMapq.getRemark())) { if ("L1004".equals(wcsSrgvMapq.getRemark()) || "L1005".equals(wcsSrgvMapq.getRemark())) {
xfType = "1";//入库 xfType = "1";//入库
@@ -1517,7 +1513,26 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
{ {
wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid()); 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);
} }
//更新小车待机时间 //更新小车待机时间

View File

@@ -27,7 +27,9 @@ import com.ruoyi.schedule.plcRead.util.Tools;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.Date; import java.util.Date;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@Slf4j @Slf4j
public class TsjThread implements Runnable { public class TsjThread implements Runnable {
@@ -212,8 +214,16 @@ public class TsjThread implements Runnable {
WcsSrgvMap wcsSrgvMapq = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPickSite); WcsSrgvMap wcsSrgvMapq = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPickSite);
WcsSrgvMap wcsSrgvMapf = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPlaceSite); WcsSrgvMap wcsSrgvMapf = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPlaceSite);
if (wcsSrgvMapq != null && wcsSrgvMapf != null) { if (wcsSrgvMapq != null && wcsSrgvMapf != null) {
Integer count = wcsSrgvQueueService.selectByEndSite();
List<DeviceSrgv> 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.setDefault02("4");
wcsSrgvQueue.setTheFloor(wcsSrgvMapq.getTheLayer().toString()); wcsSrgvQueue.setTheFloor(wcsSrgvMapq.getTheLayer().toString());
wcsSrgvQueue.setDefault07(wcsSrgvMapf.getTheLayer().toString()); wcsSrgvQueue.setDefault07(wcsSrgvMapf.getTheLayer().toString());

View File

@@ -80,7 +80,7 @@ public class GetDeviceSrgvMap {
AgvDto dto = new AgvDto(); AgvDto dto = new AgvDto();
dto.setId(d.getDeviceId() == null ? "" : String.format("%04d", d.getDeviceId())); dto.setId(d.getDeviceId() == null ? "" : String.format("%04d", d.getDeviceId()));
dto.setTaskNo(d.getTaskNo() == null ? "" : String.valueOf(d.getTaskNo())); 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(); Integer wp = d.getWorkPhase();
String status = "0"; String status = "0";
if (wp != null) { if (wp != null) {

View File

@@ -101,14 +101,10 @@ public class GetDeviceSsjMap {
dto.setAlarmMsg(DictUtils.getDictLabel("ssj_ex", String.valueOf(d.getException()))); dto.setAlarmMsg(DictUtils.getDictLabel("ssj_ex", String.valueOf(d.getException())));
dto.setKX(String.valueOf(d.getKx())); dto.setKX(String.valueOf(d.getKx()));
if (!dto.getTaskNo().equals("0")){ if (!dto.getTaskNo().equals("0")){
if (dto.getRotationDirection().equals("1")){ if (dto.getKX().equals("0")){
dto.setDW(String.valueOf(d.getDw())); dto.setDW("1");
}else { }else {
if (dto.getKX().equals("0")){ dto.setDW("0");
dto.setDW("1");
}else {
dto.setDW("0");
}
} }
}else { }else {
dto.setDW("0"); dto.setDW("0");

View File

@@ -96,6 +96,7 @@ public class Wcs2wmsgetEmptyCargoSpace {
dto.setTrayCode(getText(node, "trayCode")); dto.setTrayCode(getText(node, "trayCode"));
dto.setProductCode(getText(node, "productCode")); dto.setProductCode(getText(node, "productCode"));
dto.setProductName(getText(node, "productName")); dto.setProductName(getText(node, "productName"));
dto.setCargoSpaceId(getText(node, "cargoSpaceId"));
return dto; return dto;
} }
@@ -125,5 +126,6 @@ public class Wcs2wmsgetEmptyCargoSpace {
private String trayCode; private String trayCode;
private String productCode; private String productCode;
private String productName; private String productName;
private String cargoSpaceId;
} }
} }

View File

@@ -222,4 +222,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select count(1) from wcs_srgv_queue where cargo_place_site=#{siteId} select count(1) from wcs_srgv_queue where cargo_place_site=#{siteId}
</select> </select>
<select id="selectByEndSite" resultType="java.lang.Integer" >
select count(1) from wcs_srgv_queue where end_site='070101' or end_site ='050101'
</select>
</mapper> </mapper>