2026.3.18
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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();
|
||||
|
||||
}
|
||||
|
||||
@@ -83,4 +83,6 @@ public interface IWcsSrgvQueueService
|
||||
Integer selectTsj();
|
||||
|
||||
Integer selectByCaogoPlaceSite(String siteId);
|
||||
|
||||
Integer selectByEndSite();
|
||||
}
|
||||
|
||||
@@ -131,6 +131,28 @@ public class WcsSrgvQueueServiceImpl implements IWcsSrgvQueueService
|
||||
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
|
||||
public WcsSrgvQueue insertHistory(String taskNo) {
|
||||
WcsSrgvQueue wcsSrgvQueue = wcsSrgvQueueMapper.selectWcsSrgvQueueByTaskNo(taskNo);
|
||||
|
||||
@@ -79,6 +79,12 @@ public class PlcSrgvRead implements Runnable {
|
||||
if (read1.IsSuccess) {
|
||||
setValueByByte1(read1.Content, deviceSrgv);
|
||||
}
|
||||
|
||||
OperateResultExOne<byte[]> read5 = modbusTcpNet.Read("4081", (short) 2);//2400-2414
|
||||
if (read5.IsSuccess) {
|
||||
setValueByByte5(read1.Content, deviceSrgv);
|
||||
}
|
||||
|
||||
//读取二段任务 小车是否接收完成1段作业
|
||||
OperateResultExOne<byte[]> 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);
|
||||
|
||||
@@ -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<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));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 其他输送机
|
||||
*
|
||||
|
||||
@@ -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<DeviceCdz> 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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
//更新小车待机时间
|
||||
|
||||
@@ -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<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.setTheFloor(wcsSrgvMapq.getTheLayer().toString());
|
||||
wcsSrgvQueue.setDefault07(wcsSrgvMapf.getTheLayer().toString());
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
<select id="selectByEndSite" resultType="java.lang.Integer" >
|
||||
select count(1) from wcs_srgv_queue where end_site='070101' or end_site ='050101'
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user