2026.2.9 小车避让
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)) {
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,4 +58,6 @@ public interface IDeviceSrgvService
|
|||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
public int deleteDeviceSrgvByGuid(String guid);
|
public int deleteDeviceSrgvByGuid(String guid);
|
||||||
|
|
||||||
|
int updateLastTimeByAgvId(String agvId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除四向小车设备表信息
|
* 删除四向小车设备表信息
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -25,6 +25,11 @@ public interface WcsSrgvQueueMapper
|
|||||||
|
|
||||||
public WcsSrgvQueue selectWcsSrgvQueueByAgvId(String agvId);
|
public WcsSrgvQueue selectWcsSrgvQueueByAgvId(String agvId);
|
||||||
|
|
||||||
|
public WcsSrgvQueue selectWcsSrgvQueueByFloor(String theFloor);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询四向小车任务队列列表
|
* 查询四向小车任务队列列表
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ public interface IWcsSrgvQueueService
|
|||||||
|
|
||||||
public WcsSrgvQueue selectWcsSrgvQueueByAgvId(String agvId);
|
public WcsSrgvQueue selectWcsSrgvQueueByAgvId(String agvId);
|
||||||
|
|
||||||
|
public WcsSrgvQueue selectWcsSrgvQueueByFloor(String theFloor);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询四向小车任务队列列表
|
* 查询四向小车任务队列列表
|
||||||
|
|||||||
@@ -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 注意双字反转
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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=",">
|
||||||
|
|||||||
Reference in New Issue
Block a user