2026.2.9 小车避让

This commit is contained in:
1009473166@qq.com
2026-02-09 19:20:17 +08:00
parent 83dc4efd72
commit 93da2f1cd0
20 changed files with 527 additions and 139 deletions

View File

@@ -2,6 +2,7 @@ package com.ruoyi.bas.cargospace.mapper;
import java.util.List; import java.util.List;
import com.ruoyi.bas.cargospace.domain.BasCargoSpace; import com.ruoyi.bas.cargospace.domain.BasCargoSpace;
import org.apache.ibatis.annotations.Param;
/** /**
* 库存信息Mapper接口 * 库存信息Mapper接口
@@ -60,4 +61,8 @@ public interface BasCargoSpaceMapper
public int deleteBasCargoSpaceByCargoSpaceIds(String[] cargoSpaceIds); public int deleteBasCargoSpaceByCargoSpaceIds(String[] cargoSpaceIds);
BasCargoSpace selectBasCargoSpaceByWmsCargoSpaceId(String cargoSpaceId); BasCargoSpace selectBasCargoSpaceByWmsCargoSpaceId(String cargoSpaceId);
String selecGroupCodingBySite(@Param("currSite") String currSite);
String selectMaxSiteIdByNo(@Param("siteId") String groupCodingNo);
} }

View File

@@ -60,4 +60,8 @@ public interface IBasCargoSpaceService
public int deleteBasCargoSpaceByCargoSpaceId(String cargoSpaceId); public int deleteBasCargoSpaceByCargoSpaceId(String cargoSpaceId);
BasCargoSpace selectBasCargoSpaceByWmsCargoSpaceId(String cargoSpaceId); BasCargoSpace selectBasCargoSpaceByWmsCargoSpaceId(String cargoSpaceId);
String selecGroupCodingBySite(String currSite);
String selectMaxSiteIdByNo(String groupCodingNo);
} }

View File

@@ -95,4 +95,14 @@ public class BasCargoSpaceServiceImpl implements IBasCargoSpaceService
public BasCargoSpace selectBasCargoSpaceByWmsCargoSpaceId(String cargoSpaceId) { public BasCargoSpace selectBasCargoSpaceByWmsCargoSpaceId(String cargoSpaceId) {
return basCargoSpaceMapper.selectBasCargoSpaceByWmsCargoSpaceId(cargoSpaceId); return basCargoSpaceMapper.selectBasCargoSpaceByWmsCargoSpaceId(cargoSpaceId);
} }
@Override
public String selectMaxSiteIdByNo(String groupCodingNo) {
return basCargoSpaceMapper.selectMaxSiteIdByNo(groupCodingNo);
}
@Override
public String selecGroupCodingBySite(String currSite) {
return basCargoSpaceMapper.selecGroupCodingBySite(currSite);
}
} }

View File

@@ -142,7 +142,9 @@ public class RoadCacheServiceImpl implements RoadCacheService {
//添加其他小车路径列表 //添加其他小车路径列表
HashSet<String> otherCarSiteList = new HashSet<>(); HashSet<String> otherCarSiteList = new HashSet<>();
for (WcsSrgvQueue wcsSrgvQueue : otherCarQueue) { for (WcsSrgvQueue wcsSrgvQueue : otherCarQueue) {
otherCarSiteList.addAll(Arrays.asList(wcsSrgvQueue.getPathInfo().split(","))); if (wcsSrgvQueue.getPathInfo()!=null) {
otherCarSiteList.addAll(Arrays.asList(wcsSrgvQueue.getPathInfo().split(",")));
}
} }
//锁定其他小车路径 //锁定其他小车路径
if (CollUtil.isNotEmpty(otherCarSiteList)) { if (CollUtil.isNotEmpty(otherCarSiteList)) {

View File

@@ -2,6 +2,7 @@ package com.ruoyi.device.srgv.mapper;
import java.util.List; import java.util.List;
import com.ruoyi.device.srgv.domain.DeviceSrgv; import com.ruoyi.device.srgv.domain.DeviceSrgv;
import org.apache.ibatis.annotations.Param;
/** /**
* 四向小车设备表Mapper接口 * 四向小车设备表Mapper接口
@@ -58,4 +59,6 @@ public interface DeviceSrgvMapper
* @return 结果 * @return 结果
*/ */
public int deleteDeviceSrgvByGuids(String[] guids); public int deleteDeviceSrgvByGuids(String[] guids);
int updateLastTimeByAgvId(@Param("agvId") String agvId);
} }

View File

@@ -58,4 +58,6 @@ public interface IDeviceSrgvService
* @return 结果 * @return 结果
*/ */
public int deleteDeviceSrgvByGuid(String guid); public int deleteDeviceSrgvByGuid(String guid);
int updateLastTimeByAgvId(String agvId);
} }

View File

@@ -79,6 +79,11 @@ public class DeviceSrgvServiceImpl implements IDeviceSrgvService
return deviceSrgvMapper.deleteDeviceSrgvByGuids(guids); return deviceSrgvMapper.deleteDeviceSrgvByGuids(guids);
} }
@Override
public int updateLastTimeByAgvId(String agvId) {
return deviceSrgvMapper.updateLastTimeByAgvId(agvId);
}
/** /**
* 删除四向小车设备表信息 * 删除四向小车设备表信息
* *

View File

@@ -25,6 +25,11 @@ public interface WcsSrgvQueueMapper
public WcsSrgvQueue selectWcsSrgvQueueByAgvId(String agvId); public WcsSrgvQueue selectWcsSrgvQueueByAgvId(String agvId);
public WcsSrgvQueue selectWcsSrgvQueueByFloor(String theFloor);
/** /**
* 查询四向小车任务队列列表 * 查询四向小车任务队列列表

View File

@@ -24,6 +24,8 @@ public interface IWcsSrgvQueueService
public WcsSrgvQueue selectWcsSrgvQueueByAgvId(String agvId); public WcsSrgvQueue selectWcsSrgvQueueByAgvId(String agvId);
public WcsSrgvQueue selectWcsSrgvQueueByFloor(String theFloor);

View File

@@ -50,7 +50,10 @@ public class WcsSrgvQueueServiceImpl implements IWcsSrgvQueueService
return wcsSrgvQueueMapper.selectWcsSrgvQueueByAgvId(agvId); return wcsSrgvQueueMapper.selectWcsSrgvQueueByAgvId(agvId);
} }
@Override
public WcsSrgvQueue selectWcsSrgvQueueByFloor(String theFloor) {
return wcsSrgvQueueMapper.selectWcsSrgvQueueByFloor(theFloor);
}
/** /**
* 查询四向小车任务队列列表 * 查询四向小车任务队列列表

View File

@@ -79,6 +79,11 @@ public class PlcSrgvRead implements Runnable {
if (read1.IsSuccess) { if (read1.IsSuccess) {
setValueByByte1(read1.Content, deviceSrgv); setValueByByte1(read1.Content, deviceSrgv);
} }
//读取二段任务 小车是否接收完成1段作业
OperateResultExOne<byte[]> read3 = modbusTcpNet.Read("1000", (short) 2);//2400-2414
if (read3.IsSuccess) {
setValueByByte3(read3.Content, deviceSrgv);
}
//读取双字 //读取双字
OperateResultExOne<byte[]> read2 = modbusTcpNet.Read("4060", (short) 8);// 4800-4807任务号、原点、目标点、当前 OperateResultExOne<byte[]> read2 = modbusTcpNet.Read("4060", (short) 8);// 4800-4807任务号、原点、目标点、当前
@@ -118,6 +123,12 @@ public class PlcSrgvRead implements Runnable {
} }
//单字
private void setValueByByte3(byte[] content, DeviceSrgv agvData) {
// agvData.setTaskType(0);
agvData.setSpare5(String.valueOf(Convert.toInt(byteTransform.TransInt16(content, 0))));
}
private void setValueByByte2(byte[] content, DeviceSrgv agvData) { private void setValueByByte2(byte[] content, DeviceSrgv agvData) {
byteTransform.setDataFormat(DataFormat.CDAB); byteTransform.setDataFormat(DataFormat.CDAB);
// TODO 注意双字反转 // TODO 注意双字反转

View File

@@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.ObjUtil;
import com.ruoyi.common.domain.SendData;
import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.device.cdz.domain.DeviceCdz; import com.ruoyi.device.cdz.domain.DeviceCdz;
import com.ruoyi.device.cdz.service.IDeviceCdzService; import com.ruoyi.device.cdz.service.IDeviceCdzService;
@@ -16,11 +17,14 @@ import com.ruoyi.queue.srgv.domain.WcsSrgvQueue;
import com.ruoyi.queue.srgv.service.IWcsSrgvQueueService; import com.ruoyi.queue.srgv.service.IWcsSrgvQueueService;
import com.ruoyi.schedule.plcRead.cdz.PlcCdzRead; import com.ruoyi.schedule.plcRead.cdz.PlcCdzRead;
import com.ruoyi.schedule.plcRead.srgv.PlcSrgvRead; import com.ruoyi.schedule.plcRead.srgv.PlcSrgvRead;
import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead;
import com.ruoyi.schedule.plcRead.util.Tools;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
@@ -48,10 +52,10 @@ public class CdzThread implements Runnable {
init(); init();
while (isRun) { while (isRun) {
try { try {
dispatch(); dispatch();
Thread.sleep(1500); Thread.sleep(1500);
}catch (Exception e){ } catch (Exception e) {
log.error(e.getMessage(),e); log.error(e.getMessage(), e);
} }
@@ -106,20 +110,26 @@ public class CdzThread implements Runnable {
for (SrgvChargingJob srgvChargingJob : srgvChargingJobs) { for (SrgvChargingJob srgvChargingJob : srgvChargingJobs) {
if ("0".equals(srgvChargingJob.getChargingStatus())) { if ("0".equals(srgvChargingJob.getChargingStatus())) {
int i = PlcCdzRead.WriteToCdz("", null); String chargingSite = srgvChargingJob.getChargingSite();
DeviceCdz deviceCdz = new DeviceCdz();
deviceCdz.setSiteId(chargingSite);
List<DeviceCdz> deviceCdzs = deviceCdzService.selectDeviceCdzList(deviceCdz);
String plcDbWriteAddress = deviceCdzs.get(0).getPlcDbWriteAddress();
SendData qxSendData = new SendData(Tools.INT, 1);
byte[] bytes = Tools.sendData(qxSendData);
int i = PlcCdzRead.WriteToCdz(plcDbWriteAddress, bytes);
if (i == 1) { if (i == 1) {
srgvChargingJob.setChargingStatus("2"); srgvChargingJob.setChargingStatus("2");
srgvChargingJob.setChargingDate(DateUtil.formatDateTime(DateUtil.date())); srgvChargingJob.setChargingDate(DateUtil.formatDateTime(DateUtil.date()));
chargingJobService.updateSrgvChargingJob(srgvChargingJob); chargingJobService.updateSrgvChargingJob(srgvChargingJob);
} }
} }
} }
} }
//生成断电任务 有任务且电量大于50 //生成断电任务 有任务且电量大于50 todo 代码无效
WcsSrgvQueue wcsSrgvQueueParam = new WcsSrgvQueue(); WcsSrgvQueue wcsSrgvQueueParam = new WcsSrgvQueue();
wcsSrgvQueueParam.setIssued("0"); wcsSrgvQueueParam.setIssued("0");
List<WcsSrgvQueue> wcsSrgvQueues = wcsSrgvQueueService.selectWcsSrgvQueueList(wcsSrgvQueueParam); List<WcsSrgvQueue> wcsSrgvQueues = wcsSrgvQueueService.selectWcsSrgvQueueList(wcsSrgvQueueParam);
@@ -157,17 +167,25 @@ public class CdzThread implements Runnable {
List<SrgvChargingJob> srgvChargingJobDds = chargingJobService.selectSrgvChargingJobList(srgvChargingJobDdParam); List<SrgvChargingJob> srgvChargingJobDds = chargingJobService.selectSrgvChargingJobList(srgvChargingJobDdParam);
if (CollUtil.isNotEmpty(srgvChargingJobDds)) { if (CollUtil.isNotEmpty(srgvChargingJobDds)) {
for (SrgvChargingJob srgvChargingJob : srgvChargingJobs) { for (SrgvChargingJob srgvChargingJob : srgvChargingJobDds) {
if ("0".equals(srgvChargingJob.getChargingStatus())) { if ("0".equals(srgvChargingJob.getChargingStatus())) {
int i = PlcCdzRead.WriteToCdz("", null); String chargingSite = srgvChargingJob.getChargingSite();
DeviceCdz deviceCdz = new DeviceCdz();
deviceCdz.setSiteId(chargingSite);
List<DeviceCdz> deviceCdzs = deviceCdzService.selectDeviceCdzList(deviceCdz);
String plcDbWriteAddress = deviceCdzs.get(0).getPlcDbWriteAddress();
SendData qxSendData = new SendData(Tools.INT, 0);
byte[] bytes = Tools.sendData(qxSendData);
int i = PlcCdzRead.WriteToCdz(plcDbWriteAddress, bytes);
if (i == 1) { if (i == 1) {
srgvChargingJob.setChargingStatus("1"); srgvChargingJob.setChargingStatus("1");
srgvChargingJob.setChargingDate(DateUtil.formatDateTime(DateUtil.date())); srgvChargingJob.setChargingDate(DateUtil.formatDateTime(DateUtil.date()));
chargingJobService.updateSrgvChargingJob(srgvChargingJob); chargingJobService.updateSrgvChargingJob(srgvChargingJob);
//插入历史 //插入历史
chargingJobService.insertHistory(srgvChargingJob.getGuid()); chargingJobService.insertHistory(srgvChargingJob.getGuid());
chargingJobService.deleteSrgvChargingJobByGuid(srgvChargingJob.getGuid()); chargingJobService.deleteSrgvChargingJobByGuid(srgvChargingJob.getGuid());
deviceCdzs.get(0).setSpare1(null);
deviceCdzService.updateDeviceCdz(deviceCdzs.get(0));
} }
} }
@@ -179,7 +197,6 @@ public class CdzThread implements Runnable {
/** /**
* 创建充电任务 * 创建充电任务
*
*/ */
private void createChargingInJob(List<DeviceSrgv> srgvList) { private void createChargingInJob(List<DeviceSrgv> srgvList) {
srgvList.sort((o1, o2) -> o2.getBattery() - o1.getBattery()); srgvList.sort((o1, o2) -> o2.getBattery() - o1.getBattery());
@@ -207,7 +224,7 @@ public class CdzThread implements Runnable {
//生成充电任务 //生成充电任务
SrgvChargingJob srgvChargingJobParam = new SrgvChargingJob(); SrgvChargingJob srgvChargingJobParam = new SrgvChargingJob();
srgvChargingJobParam.setAgvId(deviceSrgv.getDeviceId().toString()); srgvChargingJobParam.setAgvId(deviceSrgv.getDeviceId().toString());
srgvChargingJobParam.setChargingSite(cdz.getSiteId()); srgvChargingJobParam.setChargingSite("08020" + cdz.getSzcs());
srgvChargingJobParam.setChargingId(cdz.getId().toString()); srgvChargingJobParam.setChargingId(cdz.getId().toString());
List<SrgvChargingJob> wcsChargingJobs = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParam); List<SrgvChargingJob> wcsChargingJobs = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParam);
if (CollUtil.isEmpty(wcsChargingJobs)) { if (CollUtil.isEmpty(wcsChargingJobs)) {
@@ -219,8 +236,10 @@ public class CdzThread implements Runnable {
scj.setStartDate(DateUtil.now()); scj.setStartDate(DateUtil.now());
scj.setJobType("1");//到充电桩 scj.setJobType("1");//到充电桩
scj.setAgvId(deviceSrgv.getDeviceId().toString()); scj.setAgvId(deviceSrgv.getDeviceId().toString());
scj.setChargingId(deviceSrgv.getDeviceId().toString()); scj.setChargingId(cdz.getId().toString());
chargingJobService.insertSrgvChargingJob(scj); chargingJobService.insertSrgvChargingJob(scj);
cdz.setSpare1(deviceSrgv.getDeviceId().toString());
deviceCdzService.updateDeviceCdz(cdz);
} }
} }
} }
@@ -230,28 +249,39 @@ public class CdzThread implements Runnable {
/** /**
* 创建充电任务 * 创建充电任务
*
*/ */
private void createChargingOutJob(DeviceSrgv deviceSrgv, DeviceCdz cdz) { private void createChargingOutJob(DeviceSrgv deviceSrgv, DeviceCdz cdz) {
SrgvChargingJob srgvChargingJobParam = new SrgvChargingJob(); SrgvChargingJob srgvChargingJobParam = new SrgvChargingJob();
srgvChargingJobParam.setAgvId(deviceSrgv.getDeviceId().toString()); srgvChargingJobParam.setAgvId(deviceSrgv.getDeviceId().toString());
srgvChargingJobParam.setChargingSite(cdz.getSiteId()); srgvChargingJobParam.setChargingSite(cdz.getSiteId());
srgvChargingJobParam.setChargingId(cdz.getId().toString()); srgvChargingJobParam.setChargingId(cdz.getId().toString());
srgvChargingJobParam.setJobType("1");
List<SrgvChargingJob> srgvChargingJobs = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParam); List<SrgvChargingJob> srgvChargingJobs = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParam);
if (CollUtil.isNotEmpty(srgvChargingJobs)) {
SrgvChargingJob srgvChargingJobParamOut = new SrgvChargingJob();
srgvChargingJobParamOut.setAgvId(deviceSrgv.getDeviceId().toString());
srgvChargingJobParamOut.setChargingSite(cdz.getSiteId());
srgvChargingJobParamOut.setChargingId(cdz.getId().toString());
srgvChargingJobParamOut.setJobType("2");
List<SrgvChargingJob> srgvChargingJobOut = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParamOut);
if (CollUtil.isNotEmpty(srgvChargingJobs)&&CollUtil.isEmpty(srgvChargingJobOut)) {
SrgvChargingJob scj = srgvChargingJobs.get(0); SrgvChargingJob scj = srgvChargingJobs.get(0);
//插入历史 //插入历史
chargingJobService.insertHistory(scj.getGuid()); chargingJobService.insertHistory(scj.getGuid());
chargingJobService.deleteSrgvChargingJobByGuid(scj.getGuid());
scj.setChargingSite(cdz.getSiteId()); scj.setChargingSite(cdz.getSiteId());
scj.setGuid(IdUtil.fastSimpleUUID());
scj.setJobStatus("1"); scj.setJobStatus("1");
scj.setChargingStatus("0"); scj.setChargingStatus("0");
scj.setStartDate(DateUtil.now()); scj.setStartDate(DateUtil.now());
scj.setJobType("2");//到充电桩 scj.setJobType("2");//到充电桩
scj.setAgvId(deviceSrgv.getDeviceId().toString()); scj.setAgvId(deviceSrgv.getDeviceId().toString());
scj.setChargingId(deviceSrgv.getDeviceId().toString()); scj.setChargingId(String.valueOf(cdz.getId()));
chargingJobService.insertSrgvChargingJob(scj); chargingJobService.insertSrgvChargingJob(scj);
} }
} }

View File

@@ -7,6 +7,7 @@ import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.ruoyi.api.domain.RequestLog; import com.ruoyi.api.domain.RequestLog;
import com.ruoyi.api.service.IApiService; import com.ruoyi.api.service.IApiService;
import com.ruoyi.bas.cargospace.service.IBasCargoSpaceService;
import com.ruoyi.bas.port.service.IWcsPortService; import com.ruoyi.bas.port.service.IWcsPortService;
import com.ruoyi.bas.srgvmap.domain.WcsSrgvMap; import com.ruoyi.bas.srgvmap.domain.WcsSrgvMap;
import com.ruoyi.bas.srgvmap.service.IWcsSrgvMapService; import com.ruoyi.bas.srgvmap.service.IWcsSrgvMapService;
@@ -16,6 +17,7 @@ import com.ruoyi.common.domain.CustomThread;
import com.ruoyi.common.domain.SendData2; import com.ruoyi.common.domain.SendData2;
import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.device.srgv.domain.DeviceSrgv; import com.ruoyi.device.srgv.domain.DeviceSrgv;
import com.ruoyi.device.srgv.service.IDeviceSrgvService;
import com.ruoyi.job.charg.domain.SrgvChargingJob; import com.ruoyi.job.charg.domain.SrgvChargingJob;
import com.ruoyi.job.charg.service.ISrgvChargingJobService; import com.ruoyi.job.charg.service.ISrgvChargingJobService;
import com.ruoyi.job.domain.JobCallBack; import com.ruoyi.job.domain.JobCallBack;
@@ -60,6 +62,11 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
private IApiService apiService; private IApiService apiService;
private JobCallBackServiceImpl jobCallBackService; private JobCallBackServiceImpl jobCallBackService;
private IBasCargoSpaceService basCargoSpaceService;
public IDeviceSrgvService deviceSrgvService;
private int taskCache = 450001;
public void init() { public void init() {
sRgvCodeList = new HashMap<>(); sRgvCodeList = new HashMap<>();
ArrayList<String> sRgvCodes = new ArrayList<>(); ArrayList<String> sRgvCodes = new ArrayList<>();
@@ -77,6 +84,9 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
roadCacheService = SpringUtils.getBean(RoadCacheService.class); roadCacheService = SpringUtils.getBean(RoadCacheService.class);
apiService = SpringUtils.getBean(IApiService.class); apiService = SpringUtils.getBean(IApiService.class);
jobCallBackService = SpringUtils.getBean(JobCallBackServiceImpl.class); jobCallBackService = SpringUtils.getBean(JobCallBackServiceImpl.class);
basCargoSpaceService = SpringUtils.getBean(IBasCargoSpaceService.class);
deviceSrgvService = SpringUtils.getBean(IDeviceSrgvService.class);
mydoJobService = SpringUtils.getBean(IMydoJobService.class);
} }
@Override @Override
@@ -102,7 +112,7 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
// 充电任务 // 充电任务
inCharging(deviceSrgv); inCharging(deviceSrgv);
// 充电完成调离 // 充电完成调离
outCharging(deviceSrgv); // outCharging(deviceSrgv);
} else { } else {
log.error("小车设备为空"); log.error("小车设备为空");
@@ -168,13 +178,15 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
WcsSrgvMap wcsSrgvMap = wcsSrgvMapService.selectWcsSrgvMapBySiteId(chargingSite); WcsSrgvMap wcsSrgvMap = wcsSrgvMapService.selectWcsSrgvMapBySiteId(chargingSite);
if (wcsSrgvMap.getTheLayer().equals(deviceSrgv.getCurrFloor())) { if (wcsSrgvMap.getTheLayer().equals(deviceSrgv.getCurrFloor())) {
wcsSrgvQueue.setEndSite(chargingSite); wcsSrgvQueue.setEndSite(chargingSite);
wcsSrgvQueue.setDefault02("3");
} else { } else {
wcsSrgvQueue.setEndSite("tsj"); wcsSrgvQueue.setEndSite("tsj");
wcsSrgvQueue.setDefault02("8");
} }
wcsSrgvQueue.setTaskNo("9999");
wcsSrgvQueue.setTheFloor(deviceSrgv.getCurrFloor().toString()); wcsSrgvQueue.setTheFloor(deviceSrgv.getCurrFloor().toString());
wcsSrgvQueue.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); wcsSrgvQueue.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
wcsSrgvQueue.setAgvId(deviceSrgv.getDeviceId().toString()); wcsSrgvQueue.setAgvId(deviceSrgv.getDeviceId().toString());
wcsSrgvQueue.setDefault02("3");
wcsSrgvQueue.setDefault07(Convert.toStr(wcsSrgvMap.getZ())); wcsSrgvQueue.setDefault07(Convert.toStr(wcsSrgvMap.getZ()));
wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue); wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue);
} }
@@ -213,6 +225,7 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
ConcurrentHashMap<String, DeviceSrgv> deviceSrgvMap = PlcSrgvRead.deviceSrgvMap; ConcurrentHashMap<String, DeviceSrgv> deviceSrgvMap = PlcSrgvRead.deviceSrgvMap;
List<DeviceSrgv> deviceSrgvList = deviceSrgvMap.values().stream() List<DeviceSrgv> deviceSrgvList = deviceSrgvMap.values().stream()
.filter(deviceSrgv -> deviceSrgv.getWorkMode() == 5) .filter(deviceSrgv -> deviceSrgv.getWorkMode() == 5)
.filter(deviceSrgv -> deviceSrgv.getBattery() > 30)
.sorted((d1, d2) -> Math.abs(Integer.parseInt(mydoJob1.getTheFloor()) - d2.getCurrFloor()) .sorted((d1, d2) -> Math.abs(Integer.parseInt(mydoJob1.getTheFloor()) - d2.getCurrFloor())
- Math.abs(Integer.parseInt(mydoJob1.getTheFloor()) - d1.getCurrFloor())) - Math.abs(Integer.parseInt(mydoJob1.getTheFloor()) - d1.getCurrFloor()))
.collect(Collectors.toList()); .collect(Collectors.toList());
@@ -227,17 +240,20 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv1.getDeviceId().toString()); WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv1.getDeviceId().toString());
if (deviceSrgv1.getStatus() == 1 && wcsSrgvQueue2 == null) { if (deviceSrgv1.getStatus() == 1 && wcsSrgvQueue2 == null) {
deviceSrgv = deviceSrgv1; deviceSrgv = deviceSrgv1;
break;
} }
} }
} }
if (deviceSrgv != null) { if (deviceSrgv != null) {
WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv.getDeviceId().toString()); WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv.getDeviceId().toString());
if (wcsSrgvQueue2 == null && deviceSrgv.getStatus() == 1) { WcsSrgvQueue wcsSrgvQueue4 = wcsSagvQueueMapper.selectWcsSrgvQueueByFloor(mydoJob1.getTheFloor());
if (wcsSrgvQueue2 == null && deviceSrgv.getStatus() == 1 && wcsSrgvQueue4 == null) {
//查询小车是否为取货楼层 //查询小车是否为取货楼层
String endSite = ""; String endSite = "";
String issued = "0"; String issued = "0";
String executionStatus = "1"; String executionStatus = "1";
String default08 = "";//是否二段任务标识
String default06 = "";
WcsSrgvMap wcsSrgvMap = new WcsSrgvMap(); WcsSrgvMap wcsSrgvMap = new WcsSrgvMap();
wcsSrgvMap.setCargoSpaceId(mydoJob1.getCargoSpaceId()); wcsSrgvMap.setCargoSpaceId(mydoJob1.getCargoSpaceId());
List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap); List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap);
@@ -248,6 +264,13 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
if (Objects.equals(deviceSrgv.getCurrFloor(), wcsSrgvMaps.get(0).getPlcLayer())) { if (Objects.equals(deviceSrgv.getCurrFloor(), wcsSrgvMaps.get(0).getPlcLayer())) {
//终点是巷道口到位输送线 //终点是巷道口到位输送线
endSite = cargoPickSite; endSite = cargoPickSite;
//生成队列时插入二段下发标识和第二段任务终点
String groupCodingNo = basCargoSpaceService.selecGroupCodingBySite(endSite);
String siteId = basCargoSpaceService.selectMaxSiteIdByNo(groupCodingNo);
if (!endSite.equals(siteId) && !deviceSrgv.getCurrSite().equals(endSite)) {
default08 = "1";
default06 = siteId;
}
if (cargoPickSite.equals(deviceSrgv.getCurrSite())) { if (cargoPickSite.equals(deviceSrgv.getCurrSite())) {
issued = "1"; issued = "1";
executionStatus = "3"; executionStatus = "3";
@@ -299,8 +322,6 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue3); wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue3);
} }
} }
} }
} }
@@ -322,16 +343,20 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
wcsSrgvQueue.setTheFloor(deviceSrgv.getCurrFloor().toString()); wcsSrgvQueue.setTheFloor(deviceSrgv.getCurrFloor().toString());
wcsSrgvQueue.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); wcsSrgvQueue.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
wcsSrgvQueue.setAgvId(deviceSrgv.getDeviceId().toString()); wcsSrgvQueue.setAgvId(deviceSrgv.getDeviceId().toString());
wcsSrgvQueue.setDefault02("4"); if (endSite.equals("tsj")) {
wcsSrgvQueue.setDefault07("1"); wcsSrgvQueue.setDefault02("8");
} else {
wcsSrgvQueue.setDefault02("4");
}
String cargoSpaceId = mydoJob1.getCargoSpaceId();
String tarFloor = cargoSpaceId.substring(5, 6);
wcsSrgvQueue.setDefault07(tarFloor);
wcsSrgvQueue.setDefault08(default08);
wcsSrgvQueue.setDefault06(default06);
wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue); wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue);
} }
} }
} }
} }
} }
} }
@@ -355,20 +380,26 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
List<DeviceSrgv> deviceSrgvList = deviceSrgvMap.values().stream() List<DeviceSrgv> deviceSrgvList = deviceSrgvMap.values().stream()
.filter(deviceSrgv -> deviceSrgv.getWorkMode() == 5) .filter(deviceSrgv -> deviceSrgv.getWorkMode() == 5)
.filter(deviceSrgv -> deviceSrgv.getBattery() > 30)
.filter(deviceSrgv -> deviceSrgv.getCurrFloor() > 0) .filter(deviceSrgv -> deviceSrgv.getCurrFloor() > 0)
.sorted((d1, d2) -> d2.getCurrFloor().compareTo(d1.getCurrFloor())) .sorted((d1, d2) -> d2.getCurrFloor().compareTo(d1.getCurrFloor()))
.collect(Collectors.toList()); .collect(Collectors.toList());
log.info("list:{}", deviceSrgvList);
if (!deviceSrgvList.isEmpty()) { if (!deviceSrgvList.isEmpty()) {
DeviceSrgv deviceSrgv = null; DeviceSrgv deviceSrgv = null;
for (DeviceSrgv deviceSrgv1 : deviceSrgvList) { for (DeviceSrgv deviceSrgv1 : deviceSrgvList) {
if (deviceSrgv1.getCurrFloor().toString().equals(mydoJob1.getTheFloor())) { if (deviceSrgv1.getCurrFloor().toString().equals(mydoJob1.getTheFloor())) {
deviceSrgv = deviceSrgv1; deviceSrgv = deviceSrgv1;
log.info("楼层相等:{}", deviceSrgv);
break; // 找到了相同楼层的直接选它 break; // 找到了相同楼层的直接选它
} else { } else {
WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv1.getDeviceId().toString()); WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv1.getDeviceId().toString());
if (deviceSrgv1.getStatus() == 1 && wcsSrgvQueue2 == null) { if (deviceSrgv1.getStatus() == 1 && wcsSrgvQueue2 == null) {
deviceSrgv = deviceSrgv1; // 更新为更小楼层的小车 deviceSrgv = deviceSrgv1; // 更新为更小楼层的小车
break; log.info("楼层bu相等:{}", deviceSrgv);
} }
} }
} }
@@ -376,7 +407,9 @@ 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());
if (wcsSrgvQueue2 == null && deviceSrgv.getStatus() == 1) { WcsSrgvQueue wcsSrgvQueue4 = wcsSagvQueueMapper.selectWcsSrgvQueueByFloor(mydoJob1.getTheFloor());
if (wcsSrgvQueue2 == null && deviceSrgv.getStatus() == 1 && wcsSrgvQueue4 == null) {
//查询小车是否为1楼,且1楼小车不在入库站点 //查询小车是否为1楼,且1楼小车不在入库站点
String endSite = ""; String endSite = "";
@@ -469,7 +502,11 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
wcsSrgvQueue.setTheFloor(deviceSrgv.getCurrFloor().toString()); wcsSrgvQueue.setTheFloor(deviceSrgv.getCurrFloor().toString());
wcsSrgvQueue.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); wcsSrgvQueue.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
wcsSrgvQueue.setAgvId(deviceSrgv.getDeviceId().toString()); wcsSrgvQueue.setAgvId(deviceSrgv.getDeviceId().toString());
wcsSrgvQueue.setDefault02("4"); if (endSite.equals("tsj")) {
wcsSrgvQueue.setDefault02("8");
} else {
wcsSrgvQueue.setDefault02("4");
}
wcsSrgvQueue.setDefault07("1"); wcsSrgvQueue.setDefault07("1");
wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue); wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue);
@@ -529,6 +566,72 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
} }
} }
} }
// if (wcsSrgvQueue.getDefault02().equals("8")){
// endSite="07050"+deviceSrgv.getCurrFloor();
// }
//
String endBlockAgv = null;
DeviceSrgv endBlockDevice = null;
// TODO 通过arrByRoadSite 中的站点 查询是否存在其他车的站点,如果存在则生成其他车到避让点的队列
if (arrByRoadSite != null && !arrByRoadSite.isEmpty()) {
// 将arrByRoadSite转为String类型的Set(统一类型,方便匹配)
Set<String> roadSiteSet = arrByRoadSite.keySet().stream()
.filter(Objects::nonNull) // 过滤集合中的null值
.map(Object::toString) // 转为字符串,适配站点类型
.collect(Collectors.toSet());
// 2. Stream流式处理deviceSrgvMap
Optional<Map.Entry<String, DeviceSrgv>> targetEntry = PlcSrgvRead.deviceSrgvMap.entrySet().stream()
.filter(entry -> entry.getValue() != null) // 过滤other为null的条目
// 条件1:other的当前站点存在于roadSiteSet中
.filter(entry -> roadSiteSet.contains(entry.getValue().getCurrSite()))
// 条件2:设备ID不等于当前entry的key
.filter(entry -> !Objects.equals(Convert.toStr(deviceSrgv.getDeviceId()), entry.getKey()))
.findFirst(); // 找到第一个符合条件的条目(等价于原代码的break)
// 3. 处理结果(若找到则赋值)
if (targetEntry.isPresent()) {
endBlockAgv = targetEntry.get().getKey();
endBlockDevice = targetEntry.get().getValue();
}
}
WcsSrgvQueue wcsSrgvQueueBR = new WcsSrgvQueue();
wcsSrgvQueueBR.setAgvId(endBlockAgv);
List<WcsSrgvQueue> wcsSrgvQueueBRS = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueueBR);
if (endBlockDevice != null && wcsSrgvQueueBRS.isEmpty()) {
// 选择当前层最近且可达的缓存点(避让点)
WcsSrgvMap cacheParam = new WcsSrgvMap();
cacheParam.setRemark("cache");
cacheParam.setTheLayer(floor);
List<WcsSrgvMap> cacheMaps = wcsSrgvMapService.selectWcsSrgvMapList(cacheParam);
// 生成阻挡车的避让任务(点到点,高优先级,未下发)
WcsSrgvQueue taskB = new WcsSrgvQueue();
taskB.setGuid(UUID.randomUUID().toString());
// 生成纯数字任务号(PLC要求),9 + HHmmss
taskB.setTaskNo(String.valueOf(taskCache));
taskB.setAgvId(endBlockAgv);
taskB.setTaskType("1"); // 点到点移动
taskB.setDefault02("4"); // 业务类型标识为点到点
taskB.setPriority(9L); // 高优先级,尽快避让
taskB.setIssued("0"); // 未下发
taskB.setExecutionStatus("1");// 初始状态
taskB.setStartSite(endBlockDevice.getCurrSite());
taskB.setCargoPickSite(endBlockDevice.getCurrSite());
taskB.setCargoPlaceSite("05020"+endBlockDevice.getCurrFloor());
taskB.setEndSite("05020"+endBlockDevice.getCurrFloor());
taskB.setTheFloor(floor.toString());
taskB.setDefault03(endBlockDevice.getCurrSite());
taskB.setDefault07(floor.toString());
taskB.setDefault08("1");//避让任务,直接完成
taskB.setCreateDate(DateUtil.now());
wcsSagvQueueMapper.insertWcsSrgvQueue(taskB);
taskCache++;
log.info("目标点 {} 被小车 {} 占用,已调度其前往避让点 {}", endSite, endBlockAgv, "02050"+endBlockDevice.getCurrFloor());
// 当前车等待下一轮调度(待阻挡车移开后自然可达)
return false;
}
//处理地图 //处理地图
int[][] emptyMap = roadCacheService.handleMap(arrByRoadSite, deviceSrgv); int[][] emptyMap = roadCacheService.handleMap(arrByRoadSite, deviceSrgv);
@@ -563,7 +666,6 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
break; break;
} }
} }
} }
} }
if ("4".equals(wcsSrgvQueue.getDefault02()) && "tsj".equals(wcsSrgvQueue.getStartSite()) && wcsSrgvQueue.getEndSite().equals(wcsSrgvQueue.getCargoPickSite())) { if ("4".equals(wcsSrgvQueue.getDefault02()) && "tsj".equals(wcsSrgvQueue.getStartSite()) && wcsSrgvQueue.getEndSite().equals(wcsSrgvQueue.getCargoPickSite())) {
@@ -634,62 +736,176 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
} }
} }
if (("tsj").equals(endSite)) { if (("tsj").equals(endSite)) {
endSite = "09050" + wcsSrgvQueue.getTheFloor(); if (wcsSrgvQueue.getDefault02().equals("8")) {
endSite = extractTarget(String.valueOf(pathBuilder));
} else {
endSite = "09050" + wcsSrgvQueue.getTheFloor();
}
} }
// if (("tsj").equals(startSite)) { // if (("tsj").equals(startSite)) {
// endSite = "09050" + wcsSrgvQueue.getTheFloor(); // endSite = "09050" + wcsSrgvQueue.getTheFloor();
// } // }
List<SendData2> sendDataList = new ArrayList<>(); List<SendData2> sendDataList = null;
if (!trun.isEmpty()) { if (StrUtil.isEmpty(wcsSrgvQueue.getDefault08())) {
SendData2 path = new SendData2(); sendDataList = new ArrayList<>();
path.setAddress("4004");//地址 if (!trun.isEmpty()) {
path.setData(startSite + "," + endSite + "," + turnBuilder); SendData2 path = new SendData2();
path.setType(2); path.setAddress("4004");//地址
sendDataList.add(path); path.setData(startSite + "," + endSite + "," + turnBuilder);
path.setType(2);
sendDataList.add(path);
} else {
SendData2 path = new SendData2();
path.setAddress("4004");//地址
path.setData(startSite + "," + endSite + ",0,0,0,0,0,0");
path.setType(2);
sendDataList.add(path);
}
//任务号、原、目标数据转换
String siteId = wcsSrgvQueue.getTaskNo();//+ "," + startSite + "," + endSite;
SendData2 site = new SendData2();
site.setAddress("4000");
site.setData(siteId);
site.setType(2);
sendDataList.add(site);
//任务类型转换
SendData2 taskType = new SendData2();
taskType.setAddress("4002");
taskType.setData(wcsSrgvQueue.getDefault02());
taskType.setType(1);
sendDataList.add(taskType);
//下发标志转换
SendData2 flag = new SendData2();
flag.setAddress("4021");
flag.setData("1");
flag.setType(1);
sendDataList.add(flag);
if (wcsSrgvQueue.getDefault02().equals("8")) {
//换层标志
SendData2 hcbz = new SendData2();
hcbz.setAddress("4020");
hcbz.setData("1");
hcbz.setType(1);
sendDataList.add(hcbz);
//换层目标层
SendData2 hcmbc = new SendData2();
hcmbc.setAddress("4022");
hcmbc.setData(wcsSrgvQueue.getDefault07());
hcmbc.setType(1);
sendDataList.add(hcmbc);
}
} else { } else {
SendData2 path = new SendData2(); if (wcsSrgvQueue.getDefault08().equals("1")) {
path.setAddress("4004");//地址 sendDataList = new ArrayList<>();
path.setData(startSite + "," + endSite); if (!trun.isEmpty()) {
path.setType(2); SendData2 path = new SendData2();
sendDataList.add(path); path.setAddress("4404");//地址
path.setData(startSite + "," + endSite + "," + turnBuilder);
path.setType(2);
sendDataList.add(path);
} else {
SendData2 path = new SendData2();
path.setAddress("4404");//地址
path.setData(startSite + "," + endSite + ",0,0,0,0,0,0");
path.setType(2);
sendDataList.add(path);
}
//下发标志转换
SendData2 flag = new SendData2();
flag.setAddress("4422");
flag.setData("1");
flag.setType(1);
sendDataList.add(flag);
//任务类型转换
SendData2 taskType = new SendData2();
taskType.setAddress("4402");
taskType.setData(wcsSrgvQueue.getDefault02());
taskType.setType(1);
sendDataList.add(taskType);
}
if (wcsSrgvQueue.getDefault08().equals("2") && deviceSrgv.getSpare5().equals("1")) {
sendDataList = new ArrayList<>();
SendData2 path = new SendData2();
path.setAddress("4404");//地址
path.setData(endSite + "," + wcsSrgvQueue.getDefault06() + ",0,0,0,0,0,0");
path.setType(2);
sendDataList.add(path);
//下发标志转换
SendData2 flag = new SendData2();
flag.setAddress("4422");
flag.setData("2");
flag.setType(1);
sendDataList.add(flag);
//多段任务完成标志
SendData2 wcjs = new SendData2();
wcjs.setAddress("4423");
wcjs.setData("99");
wcjs.setType(1);
sendDataList.add(wcjs);
//任务类型转换
SendData2 taskType = new SendData2();
taskType.setAddress("4402");
taskType.setData("7");
taskType.setType(1);
sendDataList.add(taskType);
}
//任务号、原、目标数据转换
String siteId = wcsSrgvQueue.getTaskNo();//+ "," + startSite + "," + endSite;
SendData2 site = new SendData2();
site.setAddress("4400");
site.setData(siteId);
site.setType(2);
sendDataList.add(site);
} }
//任务号、原、目标数据转换
String siteId = wcsSrgvQueue.getTaskNo();//+ "," + startSite + "," + endSite;
SendData2 site = new SendData2();
site.setAddress("4000");
site.setData(siteId);
site.setType(2);
sendDataList.add(site);
//任务类型转换
SendData2 taskType = new SendData2();
taskType.setAddress("4002");
taskType.setData(wcsSrgvQueue.getDefault02());
taskType.setType(1);
sendDataList.add(taskType);
//下发标志转换
SendData2 flag = new SendData2();
flag.setAddress("4021");
flag.setData("1");
flag.setType(1);
sendDataList.add(flag);
//下发数据 //下发数据
boolean b = sendCarTask(sendDataList, deviceSrgv); boolean b = sendCarTask(sendDataList, deviceSrgv);
if (b) { if (b) {
wcsSrgvQueue.setPathInfo(pathBuilder.toString()); wcsSrgvQueue.setPathInfo(pathBuilder.toString());
wcsSrgvQueue.setTrunPath(turnBuilder.toString()); wcsSrgvQueue.setTrunPath(turnBuilder.toString());
wcsSrgvQueue.setIssued("1"); if (wcsSrgvQueue.getDefault08() == null || !wcsSrgvQueue.getDefault08().equals("1")) {
wcsSrgvQueue.setIssued("1");
}
wcsSrgvQueue.setExecutionStatus("3"); wcsSrgvQueue.setExecutionStatus("3");
if (wcsSrgvQueue.getDefault08() != null && wcsSrgvQueue.getDefault08().equals("1")) {
wcsSrgvQueue.setDefault08("2");
} else {
wcsSrgvQueue.setDefault08("");
// wcsSrgvQueue.setDefault06("");
}
wcsSagvQueueMapper.updateWcsSrgvQueue(wcsSrgvQueue); wcsSagvQueueMapper.updateWcsSrgvQueue(wcsSrgvQueue);
MydoJob mydoJob = new MydoJob(); MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(Long.valueOf(wcsSrgvQueue.getTaskNo()));
mydoJob.setTaskNo(wcsSrgvQueue.getTaskNo()); //换层任务不修改执行阶段
mydoJob.setExecutionPhase("3"); if (!wcsSrgvQueue.getDefault02().equals("8") && !wcsSrgvQueue.getDefault02().equals("3")) {
mydoJob.setStatus("3"); mydoJob.setExecutionPhase("3");
mydoJobService.updateMydoJob(mydoJob); mydoJob.setStatus("3");
mydoJobService.updateMydoJob(mydoJob);
}
// 充电修改 srgvchaningjob
if (wcsSrgvQueue.getDefault02().equals("3")) {
SrgvChargingJob srgvChargingJob = new SrgvChargingJob();
srgvChargingJob.setJobStatus("3");
srgvChargingJob.setAgvId(wcsSrgvQueue.getAgvId());
srgvChargingJobMapper.updateSrgvChargingJob(srgvChargingJob);
}
return true; return true;
} else { } else {
log.error("小车下发失败 taskNo:{}", wcsSrgvQueue.getTaskNo()); log.error("小车下发失败 taskNo:{}", wcsSrgvQueue.getTaskNo());
@@ -708,11 +924,21 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
// 空车任务(充电、换层、手动点到点、除尘等) // 空车任务(充电、换层、手动点到点、除尘等)
sendFlag = sendPointToPointTask(deviceSrgv, wcsSrgvQueue, currSite, endSite); sendFlag = sendPointToPointTask(deviceSrgv, wcsSrgvQueue, currSite, endSite);
break; break;
case "1": case "8":
sendFlag = sendPointToPointTask(deviceSrgv, wcsSrgvQueue, currSite, endSite);
break;
case "2": case "2":
// 载货任务(出库、入库、移库等) // 载货任务(出库、入库、移库等)
sendFlag = sendPointToPointTask(deviceSrgv, wcsSrgvQueue, currSite, endSite); sendFlag = sendPointToPointTask(deviceSrgv, wcsSrgvQueue, currSite, endSite);
break; break;
case "1":
// 载货任务(出库、入库、移库等)
sendFlag = sendPointToPointTask(deviceSrgv, wcsSrgvQueue, currSite, endSite);
break;
case "3":
// 载货任务(出库、入库、移库等)
sendFlag = sendPointToPointTask(deviceSrgv, wcsSrgvQueue, currSite, endSite);
break;
} }
if (sendFlag) { if (sendFlag) {
@@ -805,18 +1031,30 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
* 小车完成队列 * 小车完成队列
*/ */
private void completeCarTask(DeviceSrgv deviceSrgv) { private void completeCarTask(DeviceSrgv deviceSrgv) {
//联机自动
if (deviceSrgv.getWorkMode() == 5) {
if (deviceSrgv.getStatus() == 1) { if (deviceSrgv.getWorkMode() == 5) { //联机自动
if (deviceSrgv.getStatus() == 1) {//小车待机
WcsSrgvQueue param = new WcsSrgvQueue(); WcsSrgvQueue param = new WcsSrgvQueue();
param.setAgvId(Convert.toStr(deviceSrgv.getDeviceId())); param.setAgvId(Convert.toStr(deviceSrgv.getDeviceId()));
param.setEndSite(deviceSrgv.getCurrSite());//目标点 param.setTaskNo(String.valueOf(deviceSrgv.getTaskNo()));//目标点
param.setIssued("1"); param.setIssued("1");
param.setExecutionStatus("3"); param.setExecutionStatus("3");
List<WcsSrgvQueue> wcsSagvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(param);//查询到达目标的 List<WcsSrgvQueue> wcsSagvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(param);//查询到达目标的
if (CollUtil.isNotEmpty(wcsSagvQueues)) { if (CollUtil.isNotEmpty(wcsSagvQueues)) {
WcsSrgvQueue wcsSrgvQueue = wcsSagvQueues.get(0); WcsSrgvQueue wcsSrgvQueue = wcsSagvQueues.get(0);
finishTaskByQueue(deviceSrgv.getCurrSite(), wcsSrgvQueue); finishTaskByQueue(deviceSrgv.getCurrSite(), wcsSrgvQueue);
} else {
WcsSrgvQueue param1 = new WcsSrgvQueue();
param1.setAgvId(Convert.toStr(deviceSrgv.getDeviceId()));
param1.setEndSite(deviceSrgv.getCurrSite());
param1.setIssued("1");
param1.setExecutionStatus("3");
List<WcsSrgvQueue> wcsSagvQueues1 = wcsSagvQueueMapper.selectWcsSrgvQueueList(param1);//查询到达目标的
if (CollUtil.isNotEmpty(wcsSagvQueues1)) {
WcsSrgvQueue wcsSrgvQueue = wcsSagvQueues1.get(0);
finishTaskByQueue(deviceSrgv.getCurrSite(), wcsSrgvQueue);
}
} }
} }
} }
@@ -831,9 +1069,17 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
*/ */
private void finishTaskByQueue(String currSite, WcsSrgvQueue wcsSrgvQueue) { private void finishTaskByQueue(String currSite, WcsSrgvQueue wcsSrgvQueue) {
String groupCodingNo = basCargoSpaceService.selecGroupCodingBySite(currSite);
// 如果当前在终点 String siteId = basCargoSpaceService.selectMaxSiteIdByNo(groupCodingNo);
if (Objects.equals(currSite, wcsSrgvQueue.getEndSite())) { List<String> sites = new ArrayList<>();
if (wcsSrgvQueue.getEndSite().equals("tsj") && wcsSrgvQueue.getDefault02().equals("8")) {
//处理换层逻辑
String site1 = "07050" + wcsSrgvQueue.getDefault07();
String site2 = "10050" + wcsSrgvQueue.getDefault07();
sites.add(site1);
sites.add(site2);
}
if (Objects.equals(currSite, wcsSrgvQueue.getEndSite()) || (siteId != null && Objects.equals(currSite, siteId)) || sites.contains(currSite)) {
String taskType = wcsSrgvQueue.getTaskType(); String taskType = wcsSrgvQueue.getTaskType();
String cargoPickSite = wcsSrgvQueue.getCargoPickSite(); String cargoPickSite = wcsSrgvQueue.getCargoPickSite();
String cargoPlaceSite = wcsSrgvQueue.getCargoPlaceSite(); String cargoPlaceSite = wcsSrgvQueue.getCargoPlaceSite();
@@ -860,48 +1106,55 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
// return; // return;
} }
//空车任务 且当前车的位置和取货位置相同 //空车任务 且当前车的位置和取货位置相同
if ("1".equals(taskType) && cargoPickSite.equals(currSite)) { if ("1".equals(taskType)
&& (cargoPickSite.equals(currSite) || (wcsSrgvQueue.getDefault06() != null && wcsSrgvQueue.getDefault06().equals(currSite)) || sites.contains(currSite))
WcsSrgvMap wcsSrgvMapq = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPickSite); ) {
WcsSrgvMap wcsSrgvMapf = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPlaceSite);
String endSite = ""; String endSite = "";
String xfType = ""; String xfType = "";
// 取货点地图和放货点地图不为空 if (wcsSrgvQueue.getDefault02().equals("8")) {
if (wcsSrgvMapq != null && wcsSrgvMapf != null) { //换层任务直接完成,等待后续入出库作业下发
if (Objects.equals(wcsSrgvMapq.getTheLayer(), wcsSrgvMapf.getTheLayer())) {
//如果是同层,终点为放货点
endSite = cargoPlaceSite;
} else {
//不同层,终点为提升机
endSite = "tsj";
}
if ("L1004".equals(wcsSrgvMapq.getRemark()) || "L1005".equals(wcsSrgvMapq.getRemark())) {
xfType = "1";//入库
} else {
if ("L1004".equals(wcsSrgvMapf.getRemark()) || "L1005".equals(wcsSrgvMapf.getRemark())) {
xfType = "2";//出库
} else {
xfType = "7";//移库
}
}
// 更新目标点,修改执行队列
wcsSrgvQueue.setExecutionStatus("4");
wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo()); wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
wcsSrgvQueue.setStartSite(currSite); wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid());
wcsSrgvQueue.setEndSite(endSite); return;
wcsSrgvQueue.setDefault02(xfType); } else {
wcsSrgvQueue.setTheFloor(wcsSrgvMapq.getTheLayer().toString()); WcsSrgvMap wcsSrgvMapq = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPickSite);
wcsSrgvQueue.setDefault07(wcsSrgvMapf.getTheLayer().toString()); WcsSrgvMap wcsSrgvMapf = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPlaceSite);
wcsSrgvQueue.setIssued("0"); // 取货点地图和放货点地图不为空
wcsSrgvQueue.setExecutionStatus("1"); if (wcsSrgvMapq != null && wcsSrgvMapf != null) {
wcsSrgvQueue.setTaskType("2");
wcsSagvQueueMapper.updateWcsSrgvQueue(wcsSrgvQueue);
if (Objects.equals(wcsSrgvMapq.getTheLayer(), wcsSrgvMapf.getTheLayer())) {
//如果是同层,终点为放货点
endSite = cargoPlaceSite;
} else {
//不同层,终点为提升机
endSite = "tsj";
}
if ("L1004".equals(wcsSrgvMapq.getRemark()) || "L1005".equals(wcsSrgvMapq.getRemark())) {
xfType = "1";//入库
} else {
if ("L1004".equals(wcsSrgvMapf.getRemark()) || "L1005".equals(wcsSrgvMapf.getRemark())) {
xfType = "2";//出库
} else {
xfType = "7";//移库
}
}
// 更新目标点,修改执行队列
wcsSrgvQueue.setEndSite(endSite);
wcsSrgvQueue.setDefault02(xfType);
wcsSrgvQueue.setTheFloor(wcsSrgvMapq.getTheLayer().toString());
wcsSrgvQueue.setDefault07(wcsSrgvMapf.getTheLayer().toString());
wcsSrgvQueue.setIssued("0");
wcsSrgvQueue.setExecutionStatus("1");
wcsSrgvQueue.setTaskType("2");
}
wcsSrgvQueue.setStartSite(currSite);
wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
wcsSagvQueueMapper.updateWcsSrgvQueue(wcsSrgvQueue);
} }
// 入库任务 原地址和目标地址不同,且小车当前地址和放货地址相同处理入库任务执行队列 // 入库任务 原地址和目标地址不同,且小车当前地址和放货地址相同处理入库任务执行队列
} else if ("2".equals(taskType) && cargoPlaceSite.equals(currSite)) { } else if ("2".equals(taskType) && (cargoPlaceSite.equals(currSite) || siteId.equals(currSite))) {
//判断对列的任务类型 当前只限于处理出库任务执行队列 //判断对列的任务类型 当前只限于处理出库任务执行队列
switch (wcsSrgvQueue.getDefault02()) { switch (wcsSrgvQueue.getDefault02()) {
case "1"://入库,插库存, case "1"://入库,插库存,
@@ -922,12 +1175,10 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
case "2": case "2":
MydoJob mydoJobOut = mydoJobService.selectMydoJobByTaskNo(Long.valueOf(wcsSrgvQueue.getTaskNo())); MydoJob mydoJobOut = mydoJobService.selectMydoJobByTaskNo(Long.valueOf(wcsSrgvQueue.getTaskNo()));
if (mydoJobOut != null) { if (mydoJobOut != null) {
mydoJobService.insertHistory(mydoJobOut.getJobId());
mydoJobService.deleteMydoJobByJobId(mydoJobOut.getJobId()); mydoJobService.deleteMydoJobByJobId(mydoJobOut.getJobId());
} }
case "7"://移库,变动库存 case "7"://移库,变动库存
break; break;
default: default:
break; break;
@@ -937,12 +1188,20 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo()); wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid()); wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid());
} else { // 充电任务
} else if ("3".equals(taskType)) {
//删除队列,插入历史表
wcsSrgvQueue.setExecutionStatus("4");
wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid());
// 删除充电任务
srgvChargingJobMapper.deleteSrgvChargingJobByGuid(wcsSrgvQueue.getAgvId());
//充电之类的,不知道用不用 //充电之类的,不知道用不用
} }
//更新小车待机时间
deviceSrgvService.updateLastTimeByAgvId(wcsSrgvQueue.getAgvId());
} }
} }
@@ -979,5 +1238,36 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
} }
public static String extractTarget(String data) {
// 1. 基础校验
if (data == null || data.trim().isEmpty()) {
return "无效数据";
}
// 2. 分割字符串
String[] parts = data.split(",");
int len = parts.length;
// 3. 优先检查是否符合【第一种数据】的特征
// 特征:倒数第三个字段以 "07" 开头
if (len >= 3) {
String val3 = parts[len - 3];
if (val3.startsWith("07")) {
return val3; // 命中规则1,直接返回
}
}
// 4. 检查是否符合【第二种数据】的特征
// 特征:倒数第二个字段以 "10" 开头
if (len >= 2) {
String val2 = parts[len - 2];
if (val2.startsWith("10")) {
return val2; // 命中规则2,直接返回
}
}
return "tsj";
}
} }

View File

@@ -143,7 +143,7 @@ public class SsjThread implements Runnable {
} }
// 插入入库作业,并且根据作业直接下发 ,下发完毕直接修改执行阶段 // 插入入库作业,并且根据作业直接下发 ,下发完毕直接修改执行阶段
MydoJob mydoJob1 = new MydoJob(); MydoJob mydoJob1 = new MydoJob();
mydoJob1.setTrayCode(mydoJob.getTaskNo()); mydoJob1.setTaskNo(mydoJob.getTaskNo());
List<MydoJob> mydoJobs = mydoJobService.selectMydoJobList(mydoJob1); List<MydoJob> mydoJobs = mydoJobService.selectMydoJobList(mydoJob1);
if (mydoJobs.size() > 0) { if (mydoJobs.size() > 0) {
return; return;
@@ -156,7 +156,7 @@ public class SsjThread implements Runnable {
log.info(deviceSsj.getDeviceCode() + "输送机下发任务号成功:{}", mydoJob.getTaskNo()); log.info(deviceSsj.getDeviceCode() + "输送机下发任务号成功:{}", mydoJob.getTaskNo());
} }
} else { } else {
int i = writeToSsj(deviceSsj.getPlcDbWriteAddress(), "0", 2, 1); int i = writeToSsj(deviceSsj.getPlcDbWriteAddress(), "0", 2, 2);
if (i == 1) { if (i == 1) {
log.info(deviceSsj.getDeviceCode() + "未查到该托盘码作业,下发退回,去向2"); log.info(deviceSsj.getDeviceCode() + "未查到该托盘码作业,下发退回,去向2");
} }

View File

@@ -7,14 +7,11 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.ruoyi.bas.cargospace.service.IBasCargoSpaceService;
import com.ruoyi.bas.port.domain.WcsPort;
import com.ruoyi.bas.port.service.IWcsPortService; import com.ruoyi.bas.port.service.IWcsPortService;
import com.ruoyi.common.domain.SendData; import com.ruoyi.common.domain.SendData;
import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.device.srgv.domain.DeviceSrgv; import com.ruoyi.device.srgv.domain.DeviceSrgv;
import com.ruoyi.device.tsj.domain.DeviceTsj; import com.ruoyi.device.tsj.domain.DeviceTsj;
import com.ruoyi.device.tsj.service.IDeviceTsjService;
import com.ruoyi.job.service.IMydoJobService; import com.ruoyi.job.service.IMydoJobService;
import com.ruoyi.queue.srgv.domain.WcsSrgvQueue; import com.ruoyi.queue.srgv.domain.WcsSrgvQueue;
import com.ruoyi.queue.srgv.service.IWcsSrgvQueueService; import com.ruoyi.queue.srgv.service.IWcsSrgvQueueService;
@@ -23,7 +20,6 @@ import com.ruoyi.queue.tsj.domain.TsjDeviceExecutionQueueFinish;
import com.ruoyi.queue.tsj.service.ITsjDeviceExecutionQueueFinishService; import com.ruoyi.queue.tsj.service.ITsjDeviceExecutionQueueFinishService;
import com.ruoyi.queue.tsj.service.ITsjDeviceExecutionQueueService; import com.ruoyi.queue.tsj.service.ITsjDeviceExecutionQueueService;
import com.ruoyi.schedule.plcRead.srgv.PlcSrgvRead; import com.ruoyi.schedule.plcRead.srgv.PlcSrgvRead;
import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead;
import com.ruoyi.schedule.plcRead.tsj.PlcTsjRead; import com.ruoyi.schedule.plcRead.tsj.PlcTsjRead;
import com.ruoyi.schedule.plcRead.util.Tools; import com.ruoyi.schedule.plcRead.util.Tools;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -39,7 +35,7 @@ public class TsjThread implements Runnable {
private ITsjDeviceExecutionQueueFinishService tsjDeviceExecutionQueueFinishService; private ITsjDeviceExecutionQueueFinishService tsjDeviceExecutionQueueFinishService;
private IWcsPortService wcsPortService; private IWcsPortService wcsPortService;
private IWcsSrgvQueueService wcsSrgvQueueService; private IWcsSrgvQueueService wcsSrgvQueueService;
public IMydoJobService mydoJobService;
public void init() { public void init() {
tsjDeviceExecutionQueueService = SpringUtils.getBean(ITsjDeviceExecutionQueueService.class); tsjDeviceExecutionQueueService = SpringUtils.getBean(ITsjDeviceExecutionQueueService.class);
@@ -81,7 +77,7 @@ public class TsjThread implements Runnable {
* *
* */ * */
if (czfs == 2 && sbzt == 2 && rwh > 999) { if (czfs == 2 && sbzt == 2 && rwh > 999) {
finishSend(rwh); // finishSend(rwh, tsj);
} }
/* /*
@@ -102,7 +98,7 @@ public class TsjThread implements Runnable {
* */ * */
if (czfs == 2 && sbzt == 2 && jdbz == 5 && rwh > 999) { if (czfs == 2 && sbzt == 2 && jdbz == 5 && rwh > 999) {
//任务完成 //任务完成
finishTask(rwh); finishTask(rwh, tsj);
} }
/* /*
@@ -131,6 +127,7 @@ public class TsjThread implements Runnable {
} }
} }
// 下发提升机完成 // 下发提升机完成
private void createSRgvQueueTsjFinish(Long rwh, DeviceTsj tsj) { private void createSRgvQueueTsjFinish(Long rwh, DeviceTsj tsj) {
for (String sRgv : PlcSrgvRead.deviceSrgvMap.keySet()) { for (String sRgv : PlcSrgvRead.deviceSrgvMap.keySet()) {
@@ -235,6 +232,7 @@ public class TsjThread implements Runnable {
tsjDeviceExecutionQueue.setSrcRow("0"); tsjDeviceExecutionQueue.setSrcRow("0");
tsjDeviceExecutionQueue.setSrcLayer(strFloor); tsjDeviceExecutionQueue.setSrcLayer(strFloor);
tsjDeviceExecutionQueue.setTarRow("0"); tsjDeviceExecutionQueue.setTarRow("0");
tsjDeviceExecutionQueue.setTarLayer(tarFloor); tsjDeviceExecutionQueue.setTarLayer(tarFloor);
tsjDeviceExecutionQueue.setSendType("1"); tsjDeviceExecutionQueue.setSendType("1");
tsjDeviceExecutionQueue.setCreateDate(DateUtil.formatDateTime(new Date())); tsjDeviceExecutionQueue.setCreateDate(DateUtil.formatDateTime(new Date()));
@@ -344,11 +342,11 @@ public class TsjThread implements Runnable {
} }
private void finishTask(Long taskNo) { private void finishTask(Long taskNo, DeviceTsj tsj) {
//根据任务号查询队列 修改执行状态 //根据任务号查询队列 修改执行状态
TsjDeviceExecutionQueue tsjDeviceExecutionQueue = tsjDeviceExecutionQueueService.selectTsjDeviceExecutionQueueByRwh(taskNo); TsjDeviceExecutionQueue tsjDeviceExecutionQueue = tsjDeviceExecutionQueueService.selectTsjDeviceExecutionQueueByRwh(taskNo);
if (ObjUtil.isNotNull(tsjDeviceExecutionQueue)) { if (ObjUtil.isNotNull(tsjDeviceExecutionQueue) && tsjDeviceExecutionQueue.getSendFlag().equals("1") && tsj.getDqcs() == Integer.parseInt(tsjDeviceExecutionQueue.getTarLayer())) {
//完成提升机任务 插入历史表 //完成提升机任务 插入历史表
TsjDeviceExecutionQueueFinish tsjDeviceExecutionQueueFinish = new TsjDeviceExecutionQueueFinish(); TsjDeviceExecutionQueueFinish tsjDeviceExecutionQueueFinish = new TsjDeviceExecutionQueueFinish();
BeanUtil.copyProperties(tsjDeviceExecutionQueue, tsjDeviceExecutionQueueFinish); BeanUtil.copyProperties(tsjDeviceExecutionQueue, tsjDeviceExecutionQueueFinish);
@@ -364,11 +362,12 @@ public class TsjThread implements Runnable {
* 提升机下发任务完成 * 提升机下发任务完成
* *
* @param taskNo * @param taskNo
* @param tsj
*/ */
private void finishSend(Long taskNo) { private void finishSend(Long taskNo, DeviceTsj tsj) {
//根据任务号查询是否存在入库或者出库的正执行任务 //根据任务号查询是否存在入库或者出库的正执行任务
TsjDeviceExecutionQueue tsjDeviceExecutionQueue = tsjDeviceExecutionQueueService.selectTsjDeviceExecutionQueueByRwh(taskNo); TsjDeviceExecutionQueue tsjDeviceExecutionQueue = tsjDeviceExecutionQueueService.selectTsjDeviceExecutionQueueByRwh(taskNo);
if (ObjUtil.isNotNull(tsjDeviceExecutionQueue)) { if (ObjUtil.isNotNull(tsjDeviceExecutionQueue) && !tsjDeviceExecutionQueue.getTarLayer().equals(tsj.getDqcs())) {
tsjDeviceExecutionQueue.setSendFlag("1"); tsjDeviceExecutionQueue.setSendFlag("1");
tsjDeviceExecutionQueue.setStartDate(DateUtil.formatDateTime(DateUtil.date())); tsjDeviceExecutionQueue.setStartDate(DateUtil.formatDateTime(DateUtil.date()));
tsjDeviceExecutionQueueService.updateTsjDeviceExecutionQueue(tsjDeviceExecutionQueue); tsjDeviceExecutionQueueService.updateTsjDeviceExecutionQueue(tsjDeviceExecutionQueue);

View File

@@ -150,4 +150,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{cargoSpaceId} #{cargoSpaceId}
</foreach> </foreach>
</delete> </delete>
<select id="selecGroupCodingBySite" parameterType="String" resultType="String">
select group_coding_no from bas_cargo_space where cargo_space_logo =#{currSite}
</select>
<select id="selectMaxSiteIdByNo" resultType="java.lang.String" parameterType="String">
select top 1 cargo_space_logo from bas_cargo_space where group_coding_no =#{siteId} order by group_coding desc
</select>
</mapper> </mapper>

View File

@@ -225,4 +225,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{guid} #{guid}
</foreach> </foreach>
</delete> </delete>
<update id="updateLastTimeByAgvId" parameterType="String">
update device_srgv set last_time =getdate() where agv_id=#{agvId}
</update>
</mapper> </mapper>

View File

@@ -67,7 +67,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectMydoJobByTaskNo" parameterType="String" resultMap="MydoJobResult"> <select id="selectMydoJobByTaskNo" parameterType="String" resultMap="MydoJobResult">
<include refid="selectMydoJobVo"/> <include refid="selectMydoJobVo"/>
where task_no = #{taskNo} where task_no = #{taskNo}
and execution_phase != '2'
</select> </select>
<select id="ddjTaskFinish" parameterType="java.util.Map" statementType="CALLABLE"> <select id="ddjTaskFinish" parameterType="java.util.Map" statementType="CALLABLE">
{call proc_mydojob_finish( {call proc_mydojob_finish(

View File

@@ -81,7 +81,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="agvId != null">agv_id = #{agvId},</if> <if test="agvId != null">agv_id = #{agvId},</if>
<if test="chargingId != null">charging_id = #{chargingId},</if> <if test="chargingId != null">charging_id = #{chargingId},</if>
</trim> </trim>
where guid = #{guid} where agv_id = #{agvId}
</update> </update>
<delete id="deleteSrgvChargingJobByGuid" parameterType="String"> <delete id="deleteSrgvChargingJobByGuid" parameterType="String">

View File

@@ -83,6 +83,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where agv_id = #{AgvId} where agv_id = #{AgvId}
</select> </select>
<select id="selectWcsSrgvQueueByFloor" parameterType="String" resultMap="WcsSrgvQueueResult">
<include refid="selectWcsSrgvQueueVo"/>
where default07 =#{theFloor}
</select>
<insert id="insertWcsSrgvQueue" parameterType="WcsSrgvQueue"> <insert id="insertWcsSrgvQueue" parameterType="WcsSrgvQueue">
insert into wcs_srgv_queue insert into wcs_srgv_queue
<trim prefix="(" suffix=")" suffixOverrides=","> <trim prefix="(" suffix=")" suffixOverrides=",">