现场调度修改

This commit is contained in:
liuhanqing
2026-03-11 09:02:58 +08:00
parent 03e30d1db0
commit 9b008f5fe7
30 changed files with 533 additions and 270 deletions

View File

@@ -121,6 +121,10 @@ public interface IApiService
*/ */
public AjaxResult createInMydoJob(Map<String, Object> param); public AjaxResult createInMydoJob(Map<String, Object> param);
public AjaxResult sendCargoSpace(Map<String, Object> param);
public AjaxResult selectMydoJobByNoTrayCode(Map<String, Object> param); public AjaxResult selectMydoJobByNoTrayCode(Map<String, Object> param);
AjaxResult receiveOutMydoJob(ReceiveJob receiveOutJob); AjaxResult receiveOutMydoJob(ReceiveJob receiveOutJob);

View File

@@ -347,6 +347,20 @@ public class ApiServiceImpl implements IApiService {
} }
@Override
public AjaxResult sendCargoSpace(Map<String, Object> param) {
// 访问请求路径,生成入库作业 ,如果生成返回信息
RequestLog requestLog = requestLogService.getRequestLog(SEND_CARGOSPACE, "请求分配货位", JSONUtil.toJsonStr(param));
if ("1".equals(requestLog.getIsSuccessful())) {
InterfaceReceive bean = JSONUtil.toBean(requestLog.getResponseBody(), InterfaceReceive.class);
return AjaxResult.success(bean.getData());
} else {
return AjaxResult.error();
}
}
@Override @Override
public AjaxResult receiveOutMydoJob(ReceiveJob receiveOutJob) { public AjaxResult receiveOutMydoJob(ReceiveJob receiveOutJob) {
MydoJob mydoJob = new MydoJob(); MydoJob mydoJob = new MydoJob();

View File

@@ -1,7 +1,9 @@
package com.ruoyi.bas.srgvmap.mapper; package com.ruoyi.bas.srgvmap.mapper;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import com.ruoyi.bas.srgvmap.domain.WcsSrgvMap; import com.ruoyi.bas.srgvmap.domain.WcsSrgvMap;
import org.apache.ibatis.annotations.Param;
/** /**
* 小车点位地图表Mapper接口 * 小车点位地图表Mapper接口
@@ -62,4 +64,8 @@ public interface WcsSrgvMapMapper
* @return 结果 * @return 结果
*/ */
public int deleteWcsSrgvMapByGuids(String[] guids); public int deleteWcsSrgvMapByGuids(String[] guids);
List<WcsSrgvMap> selectNotInsite( @Param("cache") String cache,
@Param("floor") Integer floor,
@Param("sites") ArrayList<String> sites);
} }

View File

@@ -1,5 +1,6 @@
package com.ruoyi.bas.srgvmap.service; package com.ruoyi.bas.srgvmap.service;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import com.ruoyi.bas.srgvmap.domain.WcsSrgvMap; import com.ruoyi.bas.srgvmap.domain.WcsSrgvMap;
@@ -62,4 +63,6 @@ public interface IWcsSrgvMapService
* @return 结果 * @return 结果
*/ */
public int deleteWcsSrgvMapByGuid(String guid); public int deleteWcsSrgvMapByGuid(String guid);
List<WcsSrgvMap> selectNotInsite(String cache, Integer floor, ArrayList<String> sites);
} }

View File

@@ -4,7 +4,6 @@ package com.ruoyi.bas.srgvmap.service;
import com.ruoyi.bas.srgvmap.domain.WcsSrgvMap; import com.ruoyi.bas.srgvmap.domain.WcsSrgvMap;
import com.ruoyi.device.srgv.domain.DeviceSrgv; import com.ruoyi.device.srgv.domain.DeviceSrgv;
import java.util.List;
import java.util.Map; import java.util.Map;
public interface RoadCacheService { public interface RoadCacheService {
@@ -18,11 +17,13 @@ public interface RoadCacheService {
/** /**
* 处理地图 * 处理地图
*
* @param arrByRoadSite * @param arrByRoadSite
* @param deviceSrgv * @param deviceSrgv
* @param floor
* @return * @return
*/ */
int[][] handleMap(Map<String, WcsSrgvMap> arrByRoadSite, DeviceSrgv deviceSrgv); int[][] handleMap(Map<String, WcsSrgvMap> arrByRoadSite, DeviceSrgv deviceSrgv, Integer floor);
/** /**
* 根据x y z 获取指定位置的缓存 * 根据x y z 获取指定位置的缓存
* @param x * @param x

View File

@@ -41,29 +41,27 @@ public class RoadCacheServiceImpl implements RoadCacheService {
for (WcsSrgvMap wcsSrgvMap : wcsSrgvMaps) { for (WcsSrgvMap wcsSrgvMap : wcsSrgvMaps) {
maps.put(wcsSrgvMap.getSiteId(), wcsSrgvMap); maps.put(wcsSrgvMap.getSiteId(), wcsSrgvMap);
} }
param.setAxy("11,9");
List<WcsSrgvMap> tsjMap = wcsSrgvMapMapper.selectWcsSrgvMapList(param);
for (WcsSrgvMap wcsSrgvMap : tsjMap) {
maps.put("tsj",wcsSrgvMap);
}
return maps; return maps;
} }
@Override @Override
public int[][] handleMap(Map<String, WcsSrgvMap> maps, DeviceSrgv deviceSrgv) { public int[][] handleMap(Map<String, WcsSrgvMap> maps, DeviceSrgv deviceSrgv, Integer floor) {
//1.锁定其他车任务路径 //1.锁定其他车任务路径
lockedOtherCarQueuePath(maps, deviceSrgv); lockedOtherCarQueuePath(maps, deviceSrgv);
//2.锁定无任务小车当前位置 //2.锁定无任务小车当前位置
lockedOtherCarCurrSite(maps, deviceSrgv); // lockedOtherCarCurrSite(maps, deviceSrgv);
//3.锁定离线小车当前位置 //3.锁定离线小车当前位置
lockedOfflineCarCurrSite(maps, deviceSrgv); lockedOfflineCarCurrSite(maps, deviceSrgv);
maps.put("tsj", maps.get("07050" + floor));
//4.锁定满货位的位置 TODO 是否存在移库影响效率
int[][] mapsInt = new int[50][50]; int[][] mapsInt = new int[50][50];
for (String site : maps.keySet()) { for (String site : maps.keySet()) {
WcsSrgvMap wcsSrgvMap = maps.get(site); WcsSrgvMap wcsSrgvMap = maps.get(site);
mapsInt[wcsSrgvMap.getX()][wcsSrgvMap.getY()] = wcsSrgvMap.getValue(); mapsInt[wcsSrgvMap.getX()][wcsSrgvMap.getY()] = wcsSrgvMap.getValue();
if (wcsSrgvMap.getAxy().equals("11,8")){
if (wcsSrgvMap.getAxy().equals("11,9")) {
System.err.println(wcsSrgvMap.getValue()); System.err.println(wcsSrgvMap.getValue());
} }
} }
@@ -77,7 +75,7 @@ public class RoadCacheServiceImpl implements RoadCacheService {
param.setY(y); param.setY(y);
param.setZ(z); param.setZ(z);
List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapMapper.selectWcsSrgvMapList(param); List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapMapper.selectWcsSrgvMapList(param);
if (CollUtil.isNotEmpty(wcsSrgvMaps)){ if (CollUtil.isNotEmpty(wcsSrgvMaps)) {
return wcsSrgvMaps.get(0); return wcsSrgvMaps.get(0);
} }
return null; return null;
@@ -142,14 +140,14 @@ public class RoadCacheServiceImpl implements RoadCacheService {
//添加其他小车路径列表 //添加其他小车路径列表
HashSet<String> otherCarSiteList = new HashSet<>(); HashSet<String> otherCarSiteList = new HashSet<>();
for (WcsSrgvQueue wcsSrgvQueue : otherCarQueue) { for (WcsSrgvQueue wcsSrgvQueue : otherCarQueue) {
if (wcsSrgvQueue.getPathInfo()!=null) { if (wcsSrgvQueue.getPathInfo() != null) {
//根据小车当前点位去除已走路径 //根据小车当前点位去除已走路径
DeviceSrgv otherCarCurrStatus = deviceSrgvService.selectDeviceSrgvByGuid(wcsSrgvQueue.getAgvId()); DeviceSrgv otherCarCurrStatus = deviceSrgvService.selectDeviceSrgvByGuid(wcsSrgvQueue.getAgvId());
String currSite = otherCarCurrStatus.getCurrSite(); String currSite = otherCarCurrStatus.getCurrSite();
List<String> allSiteList = Arrays.asList(wcsSrgvQueue.getPathInfo().split(",")); List<String> allSiteList = Arrays.asList(wcsSrgvQueue.getPathInfo().split(","));
int i = allSiteList.indexOf(currSite); int i = allSiteList.indexOf(currSite);
if (i==-1){ if (i == -1) {
i=0; i = 0;
} }
List<String> resultSiteList = allSiteList.subList(i, allSiteList.size()); List<String> resultSiteList = allSiteList.subList(i, allSiteList.size());
otherCarSiteList.addAll(resultSiteList); otherCarSiteList.addAll(resultSiteList);

View File

@@ -1,6 +1,8 @@
package com.ruoyi.bas.srgvmap.service.impl; package com.ruoyi.bas.srgvmap.service.impl;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.ruoyi.bas.srgvmap.mapper.WcsSrgvMapMapper; import com.ruoyi.bas.srgvmap.mapper.WcsSrgvMapMapper;
@@ -14,8 +16,7 @@ import com.ruoyi.bas.srgvmap.service.IWcsSrgvMapService;
* @date 2025-11-21 * @date 2025-11-21
*/ */
@Service @Service
public class WcsSrgvMapServiceImpl implements IWcsSrgvMapService public class WcsSrgvMapServiceImpl implements IWcsSrgvMapService {
{
@Autowired @Autowired
private WcsSrgvMapMapper wcsSrgvMapMapper; private WcsSrgvMapMapper wcsSrgvMapMapper;
@@ -26,8 +27,7 @@ public class WcsSrgvMapServiceImpl implements IWcsSrgvMapService
* @return 小车点位地图表 * @return 小车点位地图表
*/ */
@Override @Override
public WcsSrgvMap selectWcsSrgvMapByGuid(String guid) public WcsSrgvMap selectWcsSrgvMapByGuid(String guid) {
{
return wcsSrgvMapMapper.selectWcsSrgvMapByGuid(guid); return wcsSrgvMapMapper.selectWcsSrgvMapByGuid(guid);
} }
@@ -43,8 +43,7 @@ public class WcsSrgvMapServiceImpl implements IWcsSrgvMapService
* @return 小车点位地图表 * @return 小车点位地图表
*/ */
@Override @Override
public List<WcsSrgvMap> selectWcsSrgvMapList(WcsSrgvMap wcsSrgvMap) public List<WcsSrgvMap> selectWcsSrgvMapList(WcsSrgvMap wcsSrgvMap) {
{
return wcsSrgvMapMapper.selectWcsSrgvMapList(wcsSrgvMap); return wcsSrgvMapMapper.selectWcsSrgvMapList(wcsSrgvMap);
} }
@@ -55,8 +54,7 @@ public class WcsSrgvMapServiceImpl implements IWcsSrgvMapService
* @return 结果 * @return 结果
*/ */
@Override @Override
public int insertWcsSrgvMap(WcsSrgvMap wcsSrgvMap) public int insertWcsSrgvMap(WcsSrgvMap wcsSrgvMap) {
{
return wcsSrgvMapMapper.insertWcsSrgvMap(wcsSrgvMap); return wcsSrgvMapMapper.insertWcsSrgvMap(wcsSrgvMap);
} }
@@ -67,8 +65,7 @@ public class WcsSrgvMapServiceImpl implements IWcsSrgvMapService
* @return 结果 * @return 结果
*/ */
@Override @Override
public int updateWcsSrgvMap(WcsSrgvMap wcsSrgvMap) public int updateWcsSrgvMap(WcsSrgvMap wcsSrgvMap) {
{
return wcsSrgvMapMapper.updateWcsSrgvMap(wcsSrgvMap); return wcsSrgvMapMapper.updateWcsSrgvMap(wcsSrgvMap);
} }
@@ -79,8 +76,7 @@ public class WcsSrgvMapServiceImpl implements IWcsSrgvMapService
* @return 结果 * @return 结果
*/ */
@Override @Override
public int deleteWcsSrgvMapByGuids(String[] guids) public int deleteWcsSrgvMapByGuids(String[] guids) {
{
return wcsSrgvMapMapper.deleteWcsSrgvMapByGuids(guids); return wcsSrgvMapMapper.deleteWcsSrgvMapByGuids(guids);
} }
@@ -91,8 +87,12 @@ public class WcsSrgvMapServiceImpl implements IWcsSrgvMapService
* @return 结果 * @return 结果
*/ */
@Override @Override
public int deleteWcsSrgvMapByGuid(String guid) public int deleteWcsSrgvMapByGuid(String guid) {
{
return wcsSrgvMapMapper.deleteWcsSrgvMapByGuid(guid); return wcsSrgvMapMapper.deleteWcsSrgvMapByGuid(guid);
} }
@Override
public List<WcsSrgvMap> selectNotInsite(String cache, Integer floor, ArrayList<String> sites) {
return wcsSrgvMapMapper.selectNotInsite(cache, floor, sites);
}
} }

View File

@@ -12,6 +12,7 @@ public class Constant {
public static final String CANCEL_TASK_URL = RCS_BASE_URL+"queryAgvStatus";; public static final String CANCEL_TASK_URL = RCS_BASE_URL+"queryAgvStatus";;
public static final String GEN_AGV_SCHEDULING_TASK = RCS_BASE_URL+"genAgvSchedulingTask";; public static final String GEN_AGV_SCHEDULING_TASK = RCS_BASE_URL+"genAgvSchedulingTask";;
public static final String CREATE_IN_MYDO_JOB_URL = WMS_BASE_URL+"requestEnterByTrayCode"; public static final String CREATE_IN_MYDO_JOB_URL = WMS_BASE_URL+"requestEnterByTrayCode";
public static final String SEND_CARGOSPACE = WMS_BASE_URL+"sendCargoSpace";
public static final String REQUEST_MYDO_JOB_URL = WMS_BASE_URL+"requestByNoTrayCode"; public static final String REQUEST_MYDO_JOB_URL = WMS_BASE_URL+"requestByNoTrayCode";
public static final String RE_ASSIGN_URL = WMS_BASE_URL+"reAssign"; public static final String RE_ASSIGN_URL = WMS_BASE_URL+"reAssign";
public static final String RE_MATERIAL_URL = WMS_BASE_URL+"reMaterial"; public static final String RE_MATERIAL_URL = WMS_BASE_URL+"reMaterial";

View File

@@ -68,4 +68,6 @@ public interface DeviceCdzMapper
* @return * @return
*/ */
List<DeviceCdz> selectDeviceCdzHasSRgvList(); List<DeviceCdz> selectDeviceCdzHasSRgvList();
void updateDeviceCdzSpare(DeviceCdz deviceCdz);
} }

View File

@@ -68,4 +68,6 @@ public interface IDeviceCdzService
* @return * @return
*/ */
List<DeviceCdz> selectDeviceCdzHasSRgvList(); List<DeviceCdz> selectDeviceCdzHasSRgvList();
void updateDeviceCdzSpare(DeviceCdz deviceCdz);
} }

View File

@@ -100,4 +100,9 @@ public class DeviceCdzServiceImpl implements IDeviceCdzService
public List<DeviceCdz> selectDeviceCdzHasSRgvList() { public List<DeviceCdz> selectDeviceCdzHasSRgvList() {
return deviceCdzMapper.selectDeviceCdzHasSRgvList(); return deviceCdzMapper.selectDeviceCdzHasSRgvList();
} }
@Override
public void updateDeviceCdzSpare(DeviceCdz deviceCdz) {
deviceCdzMapper.updateDeviceCdzSpare(deviceCdz);
}
} }

View File

@@ -75,4 +75,6 @@ public interface WcsSrgvQueueMapper
String selectMinCountJob(@Param("list") List<String> outModelSSJ); String selectMinCountJob(@Param("list") List<String> outModelSSJ);
Integer selectTsj(); Integer selectTsj();
Integer selectByCaogoPlaceSite(String siteId);
} }

View File

@@ -81,4 +81,6 @@ public interface IWcsSrgvQueueService
String selectMinCountJob(List<String> outModelSSJ); String selectMinCountJob(List<String> outModelSSJ);
Integer selectTsj(); Integer selectTsj();
Integer selectByCaogoPlaceSite(String siteId);
} }

View File

@@ -126,6 +126,11 @@ public class WcsSrgvQueueServiceImpl implements IWcsSrgvQueueService
return wcsSrgvQueueMapper.selectTsj(); return wcsSrgvQueueMapper.selectTsj();
} }
@Override
public Integer selectByCaogoPlaceSite(String siteId) {
return wcsSrgvQueueMapper.selectByCaogoPlaceSite(siteId);
}
@Override @Override
public WcsSrgvQueue insertHistory(String taskNo) { public WcsSrgvQueue insertHistory(String taskNo) {
WcsSrgvQueue wcsSrgvQueue = wcsSrgvQueueMapper.selectWcsSrgvQueueByTaskNo(taskNo); WcsSrgvQueue wcsSrgvQueue = wcsSrgvQueueMapper.selectWcsSrgvQueueByTaskNo(taskNo);

View File

@@ -177,7 +177,7 @@ public class ScheduleThread {
*/ */
public void startAllThread() { public void startAllThread() {
plcSsjReadCustomThread.getThread().start(); plcSsjReadCustomThread.getThread().start();
//plcSrgvReadCustomThread1.getThread().start(); plcSrgvReadCustomThread1.getThread().start();
plcSrgvReadCustomThread2.getThread().start(); plcSrgvReadCustomThread2.getThread().start();
plcSrgvReadCustomThread3.getThread().start(); plcSrgvReadCustomThread3.getThread().start();
plcTsjReadCustomThread.getThread().start(); plcTsjReadCustomThread.getThread().start();

View File

@@ -67,12 +67,12 @@ public class PlcCdzRead implements Runnable {
} }
private void plcRead(DeviceCdz deviceCdz) { private void plcRead(DeviceCdz deviceCdz) {
OperateResultExOne<byte[]> read2 = readWriteNet.Read(deviceCdz.getPlcDbReadAddress(), Short.parseShort("4")); OperateResultExOne<byte[]> read2 = readWriteNet.Read(deviceCdz.getPlcDbReadAddress(), Short.parseShort("2"));
String ddsx1 = "0"; String ddsx1 = "0";
if (read2.IsSuccess) { if (read2.IsSuccess) {
ddsx1 = SoftBasic.ByteToHexString(read2.Content); ddsx1 = SoftBasic.ByteToHexString(read2.Content);
deviceCdz.setStatus(ParseUtil.optInt(0, ddsx1)); deviceCdz.setStatus(ParseUtil.optInt(0, ddsx1));
deviceCdz.setModel(ParseUtil.optInt(2, ddsx1)); // deviceCdz.setModel(ParseUtil.optInt(2, ddsx1));
} }
} }

View File

@@ -110,6 +110,8 @@ public class PlcSrgvRead implements Runnable {
agvData.setAlarm(Convert.toInt(byteTransform.TransInt16(content, 6))); agvData.setAlarm(Convert.toInt(byteTransform.TransInt16(content, 6)));
// agvData.setStatus(0); // agvData.setStatus(0);
agvData.setStatus(Convert.toInt(byteTransform.TransInt16(content, 8))); agvData.setStatus(Convert.toInt(byteTransform.TransInt16(content, 8)));
//载货标志
agvData.setCargoFlag(Convert.toInt(byteTransform.TransInt16(content, 13)));
//接收完成标志 //接收完成标志
// agvData.setFinish(Convert.toInt(byteTransform.TransInt16(content, 10))); // agvData.setFinish(Convert.toInt(byteTransform.TransInt16(content, 10)));
// agvData.setFinish(0); // agvData.setFinish(0);

View File

@@ -198,6 +198,7 @@ public class PathFinder {
if (gCost[endX][endY] == Integer.MAX_VALUE) { if (gCost[endX][endY] == Integer.MAX_VALUE) {
List<int[]> path = new ArrayList<>(); List<int[]> path = new ArrayList<>();
path.add(new int[]{-1, -1}); path.add(new int[]{-1, -1});
return path; return path;
} }

View File

@@ -34,8 +34,8 @@ public class CdzThread implements Runnable {
public boolean isRun = true; public boolean isRun = true;
private final Integer LITTLE_BETTERY = 30; private final Integer LITTLE_BETTERY = 40;
private final Integer MIDDLE_BETTERY = 60; private final Integer MIDDLE_BETTERY = 70;
private final Integer MAX_BETTERY = 90; private final Integer MAX_BETTERY = 90;
private ISrgvChargingJobService chargingJobService; private ISrgvChargingJobService chargingJobService;
private IDeviceCdzService deviceCdzService; private IDeviceCdzService deviceCdzService;
@@ -68,7 +68,7 @@ public class CdzThread implements Runnable {
void dispatch() { void dispatch() {
Integer count = mydoJobService.selectMydoJobCount();
//获取低电量小车 //获取低电量小车
List<DeviceSrgv> littleBatterySRgv = new ArrayList<>(); List<DeviceSrgv> littleBatterySRgv = new ArrayList<>();
//获取中电量小车 //获取中电量小车
@@ -78,7 +78,7 @@ public class CdzThread implements Runnable {
if (deviceSrgv.getWorkMode() == 5 && deviceSrgv.getStatus() != 3 && deviceSrgv.getChargeFlag() != 2) { if (deviceSrgv.getWorkMode() == 5 && deviceSrgv.getStatus() != 3 && deviceSrgv.getChargeFlag() != 2) {
if (deviceSrgv.getBattery() <= LITTLE_BETTERY) { if (deviceSrgv.getBattery() <= LITTLE_BETTERY) {
littleBatterySRgv.add(deviceSrgv); littleBatterySRgv.add(deviceSrgv);
} else if (deviceSrgv.getBattery() <= MIDDLE_BETTERY) { } else if (deviceSrgv.getBattery() <= MIDDLE_BETTERY && count == 0) {
middleBatterySRgv.add(deviceSrgv); middleBatterySRgv.add(deviceSrgv);
} }
} }
@@ -96,22 +96,20 @@ public class CdzThread implements Runnable {
} }
//超过30分钟自动生成充电任务 //超过30分钟自动生成充电任务
List<DeviceSrgv> deviceSrgvs = deviceSrgvService.selectDeviceSrgvList(new DeviceSrgv()); // List<DeviceSrgv> deviceSrgvs = deviceSrgvService.selectDeviceSrgvList(new DeviceSrgv());
List<DeviceSrgv> timeOutSrgvList = deviceSrgvs.stream().filter(x -> DateUtil.between(DateUtil.parse(x.getLastTime()), DateUtil.date(), DateUnit.MINUTE) > 30).collect(Collectors.toList()); // List<DeviceSrgv> timeOutSrgvList = deviceSrgvs.stream().filter(x -> DateUtil.between(DateUtil.parse(x.getLastTime()), DateUtil.date(), DateUnit.MINUTE) > 30).collect(Collectors.toList());
if (CollUtil.isNotEmpty(timeOutSrgvList)) { // if (CollUtil.isNotEmpty(timeOutSrgvList)) {
//生成充电任务 // //生成充电任务
createChargingInJob(timeOutSrgvList); // createChargingInJob(timeOutSrgvList);
} // }
//充电任务下发 //充电任务下发 查到充电任务并且充电桩未开启直接开启
SrgvChargingJob srgvChargingJobParam = new SrgvChargingJob(); SrgvChargingJob srgvChargingJobParam = new SrgvChargingJob();
srgvChargingJobParam.setChargingStatus("0"); srgvChargingJobParam.setChargingStatus("0");
srgvChargingJobParam.setJobType("1"); srgvChargingJobParam.setJobType("1");
srgvChargingJobParam.setJobStatus("3");
List<SrgvChargingJob> srgvChargingJobs = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParam); List<SrgvChargingJob> srgvChargingJobs = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParam);
if (CollUtil.isNotEmpty(srgvChargingJobs)) { if (CollUtil.isNotEmpty(srgvChargingJobs)) {
for (SrgvChargingJob srgvChargingJob : srgvChargingJobs) { for (SrgvChargingJob srgvChargingJob : srgvChargingJobs) {
if ("0".equals(srgvChargingJob.getChargingStatus())) { if ("0".equals(srgvChargingJob.getChargingStatus())) {
String chargingSite = srgvChargingJob.getChargingSite(); String chargingSite = srgvChargingJob.getChargingSite();
@@ -122,67 +120,39 @@ public class CdzThread implements Runnable {
SendData qxSendData = new SendData(Tools.INT, 1); SendData qxSendData = new SendData(Tools.INT, 1);
byte[] bytes = Tools.sendData(qxSendData); byte[] bytes = Tools.sendData(qxSendData);
int i = PlcCdzRead.WriteToCdz(plcDbWriteAddress, bytes); int i = PlcCdzRead.WriteToCdz(plcDbWriteAddress, bytes);
// 查到充电任务,并且充电桩未开启就直接开启
if (i == 1) { if (i == 1) {
log.info("下发{" + deviceCdzs.get(0).getId() + "}号充电桩开启");
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 todo 代码无效 //生成断电任务 有任务且电量大于50
Integer count = mydoJobService.selectMydoJobCount();
List<DeviceCdz> deviceCdzdd = deviceCdzService.selectDeviceCdzHasSRgvList(); List<DeviceCdz> deviceCdzdd = deviceCdzService.selectDeviceCdzHasSRgvList();
for (DeviceCdz deviceCdz : deviceCdzdd) { for (DeviceCdz deviceCdz : deviceCdzdd) {
if (PlcSrgvRead.deviceSrgvMap.containsKey(deviceCdz.getSpare1()) DeviceSrgv deviceSrgv = PlcSrgvRead.deviceSrgvMap.get(deviceCdz.getSpare1());
&& ((PlcSrgvRead.deviceSrgvMap.get(deviceCdz.getSpare1()).getBattery() >= MIDDLE_BETTERY && count > 0) || PlcSrgvRead.deviceSrgvMap.get(deviceCdz.getSpare1()).getBattery() >= MAX_BETTERY) if (((deviceSrgv.getBattery() >= MIDDLE_BETTERY && count > 0) || deviceSrgv.getBattery() >= MAX_BETTERY)
&& PlcSrgvRead.deviceSrgvMap.get(deviceCdz.getSpare1()).getWorkMode() == 5 && deviceSrgv.getWorkMode() == 5
&& PlcSrgvRead.deviceSrgvMap.get(deviceCdz.getSpare1()).getChargeFlag() == 2 && deviceCdz.getStatus() == 1) { && deviceSrgv.getChargeFlag() == 2 && deviceCdz.getStatus() == 1) {
createChargingOutJob(PlcSrgvRead.deviceSrgvMap.get(deviceCdz.getSpare1()), deviceCdz); createChargingOutJob(PlcSrgvRead.deviceSrgvMap.get(deviceCdz.getSpare1()), deviceCdz);
} }
} }
// //生成断电任务 有任务且电量大于50 todo 代码无效
// WcsSrgvQueue wcsSrgvQueueParam = new WcsSrgvQueue();
// wcsSrgvQueueParam.setIssued("0");
// List<WcsSrgvQueue> wcsSrgvQueues = wcsSrgvQueueService.selectWcsSrgvQueueList(wcsSrgvQueueParam);
// if (CollUtil.isNotEmpty(wcsSrgvQueues)) {
// boolean existsKxSRgv = false;
// //判断有没有空闲小车
// for (DeviceSrgv x : PlcSrgvRead.deviceSrgvMap.values()) {
// if (x.getWorkMode() == 5 && x.getStatus() == 1) {
// existsKxSRgv = true;
// break;
// }
// }
// if (!existsKxSRgv) {
// List<DeviceCdz> deviceCdzs = deviceCdzService.selectDeviceCdzHasSRgvList();
// if (CollUtil.isNotEmpty(deviceCdzs)) {
// for (DeviceCdz deviceCdz : deviceCdzs) {
// if (PlcSrgvRead.deviceSrgvMap.containsKey(deviceCdz.getSpare1())) {
// DeviceSrgv deviceSrgv = PlcSrgvRead.deviceSrgvMap.get(deviceCdz.getSpare1());
// if (deviceSrgv.getBattery() >= 50) {
// //生成断电任务
// createChargingOutJob(deviceSrgv, deviceCdz);
// break;
// }
// }
// }
// }
// }
// }
//断电任务下发 //断电任务下发
SrgvChargingJob srgvChargingJobDdParam = new SrgvChargingJob(); SrgvChargingJob srgvChargingJobDdParam = new SrgvChargingJob();
srgvChargingJobDdParam.setChargingStatus("0"); srgvChargingJobDdParam.setChargingStatus("0");
srgvChargingJobDdParam.setJobType("2"); srgvChargingJobDdParam.setJobType("2");
List<SrgvChargingJob> srgvChargingJobDds = chargingJobService.selectSrgvChargingJobList(srgvChargingJobDdParam); List<SrgvChargingJob> srgvChargingJobDds = chargingJobService.selectSrgvChargingJobList(srgvChargingJobDdParam);
if (CollUtil.isNotEmpty(srgvChargingJobDds)) { if (CollUtil.isNotEmpty(srgvChargingJobDds)) {
for (SrgvChargingJob srgvChargingJob : srgvChargingJobDds) { for (SrgvChargingJob srgvChargingJob : srgvChargingJobDds) {
if ("0".equals(srgvChargingJob.getChargingStatus())) { if ("0".equals(srgvChargingJob.getChargingStatus())) {
String chargingSite = srgvChargingJob.getChargingSite(); String chargingSite = srgvChargingJob.getChargingSite();
@@ -194,6 +164,7 @@ public class CdzThread implements Runnable {
byte[] bytes = Tools.sendData(qxSendData); byte[] bytes = Tools.sendData(qxSendData);
int i = PlcCdzRead.WriteToCdz(plcDbWriteAddress, bytes); int i = PlcCdzRead.WriteToCdz(plcDbWriteAddress, bytes);
if (i == 1) { if (i == 1) {
log.info("下发{" + deviceCdzs.get(0).getId() + "}号充电桩关闭");
srgvChargingJob.setChargingStatus("1"); srgvChargingJob.setChargingStatus("1");
srgvChargingJob.setChargingDate(DateUtil.formatDateTime(DateUtil.date())); srgvChargingJob.setChargingDate(DateUtil.formatDateTime(DateUtil.date()));
chargingJobService.updateSrgvChargingJob(srgvChargingJob); chargingJobService.updateSrgvChargingJob(srgvChargingJob);
@@ -201,14 +172,11 @@ public class CdzThread implements Runnable {
chargingJobService.insertHistory(srgvChargingJob.getGuid()); chargingJobService.insertHistory(srgvChargingJob.getGuid());
chargingJobService.deleteSrgvChargingJobByGuid(srgvChargingJob.getGuid()); chargingJobService.deleteSrgvChargingJobByGuid(srgvChargingJob.getGuid());
deviceCdzs.get(0).setSpare1(null); deviceCdzs.get(0).setSpare1(null);
deviceCdzService.updateDeviceCdz(deviceCdzs.get(0)); deviceCdzService.updateDeviceCdzSpare(deviceCdzs.get(0));
} }
} }
} }
} }
} }
/** /**
@@ -223,42 +191,43 @@ public class CdzThread implements Runnable {
wcsChargingJob.setAgvId(deviceSrgv.getDeviceId().toString()); wcsChargingJob.setAgvId(deviceSrgv.getDeviceId().toString());
List<SrgvChargingJob> srgvChargingJobs = chargingJobService.selectSrgvChargingJobList(wcsChargingJob); List<SrgvChargingJob> srgvChargingJobs = chargingJobService.selectSrgvChargingJobList(wcsChargingJob);
if (CollUtil.isEmpty(srgvChargingJobs)) { if (CollUtil.isEmpty(srgvChargingJobs)) {
List<DeviceCdz> cdzList = deviceCdzService.selectDeviceCdzListNoSRgvId(); DeviceCdz deviceCdz = deviceCdzService.selectDeviceCdzById(Long.valueOf(deviceSrgv.getDeviceId()));
if (CollUtil.isNotEmpty(cdzList)) { // List<DeviceCdz> cdzList = deviceCdzService.selectDeviceCdzListNoSRgvId();
//寻找最接近的充电桩 // if (CollUtil.isNotEmpty(deviceCdz)) {
Integer floor = deviceSrgv.getCurrFloor(); //寻找最接近的充电桩
DeviceCdz cdz = null; // Integer floor = deviceSrgv.getCurrFloor();
Optional<DeviceCdz> min = cdzList.stream().min((o1, o2) -> { // DeviceCdz cdz = null;
Integer distance1 = Math.abs(o1.getSzcs()); // Optional<DeviceCdz> min = cdzList.stream().min((o1, o2) -> {
Integer distance2 = Math.abs(o2.getSzcs()); // Integer distance1 = Math.abs(o1.getSzcs());
return distance1 - distance2; // Integer distance2 = Math.abs(o2.getSzcs());
}); // return distance1 - distance2;
if (min.isPresent()) { // });
cdz = min.get(); // if (min.isPresent()) {
} // cdz = min.get();
if (ObjUtil.isNotNull(cdz)) { // }
//生成充电任务 if (ObjUtil.isNotNull(deviceCdz)) {
SrgvChargingJob srgvChargingJobParam = new SrgvChargingJob(); //生成充电任务
srgvChargingJobParam.setAgvId(deviceSrgv.getDeviceId().toString()); SrgvChargingJob srgvChargingJobParam = new SrgvChargingJob();
srgvChargingJobParam.setChargingSite("08020" + cdz.getSzcs()); srgvChargingJobParam.setAgvId(deviceSrgv.getDeviceId().toString());
srgvChargingJobParam.setChargingId(cdz.getId().toString()); srgvChargingJobParam.setChargingSite("08020" + deviceCdz.getSzcs());
List<SrgvChargingJob> wcsChargingJobs = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParam); srgvChargingJobParam.setChargingId(deviceCdz.getId().toString());
if (CollUtil.isEmpty(wcsChargingJobs)) { List<SrgvChargingJob> wcsChargingJobs = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParam);
SrgvChargingJob scj = new SrgvChargingJob(); if (CollUtil.isEmpty(wcsChargingJobs)) {
scj.setGuid(IdUtil.fastSimpleUUID()); SrgvChargingJob scj = new SrgvChargingJob();
scj.setChargingSite(cdz.getSiteId()); scj.setGuid(IdUtil.fastSimpleUUID());
scj.setJobStatus("1"); scj.setChargingSite(deviceCdz.getSiteId());
scj.setChargingStatus("0"); scj.setJobStatus("1");
scj.setStartDate(DateUtil.now()); scj.setChargingStatus("0");
scj.setJobType("1");//到充电桩 scj.setStartDate(DateUtil.now());
scj.setAgvId(deviceSrgv.getDeviceId().toString()); scj.setJobType("1");//到充电桩
scj.setChargingId(cdz.getId().toString()); scj.setAgvId(deviceSrgv.getDeviceId().toString());
chargingJobService.insertSrgvChargingJob(scj); scj.setChargingId(deviceCdz.getId().toString());
cdz.setSpare1(deviceSrgv.getDeviceId().toString()); chargingJobService.insertSrgvChargingJob(scj);
deviceCdzService.updateDeviceCdz(cdz); deviceCdz.setSpare1(deviceSrgv.getDeviceId().toString());
} deviceCdzService.updateDeviceCdz(deviceCdz);
} }
} }
// }
} }
} }
} }

View File

@@ -62,6 +62,7 @@ public class MonitoringThread implements Runnable {
for (String cdzCode : PlcCdzRead.deviceCdzMap.keySet()) { for (String cdzCode : PlcCdzRead.deviceCdzMap.keySet()) {
DeviceCdz deviceCdz = PlcCdzRead.deviceCdzMap.get(cdzCode); DeviceCdz deviceCdz = PlcCdzRead.deviceCdzMap.get(cdzCode);
deviceCdz.setSpare1(null); deviceCdz.setSpare1(null);
deviceCdz.setModel(deviceCdz.getStatus());
deviceCdzService.updateDeviceCdz(deviceCdz); deviceCdzService.updateDeviceCdz(deviceCdz);
} }
try { try {

View File

@@ -158,6 +158,10 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
param.setJobStatus("1"); param.setJobStatus("1");
param.setJobType("1"); param.setJobType("1");
param.setAgvId(deviceSrgv.getDeviceId().toString()); param.setAgvId(deviceSrgv.getDeviceId().toString());
if (deviceSrgv != null && deviceSrgv.getWorkMode() != 5) {
return;
}
List<SrgvChargingJob> srgvChargingJobs = srgvChargingJobMapper.selectSrgvChargingJobList(param); List<SrgvChargingJob> srgvChargingJobs = srgvChargingJobMapper.selectSrgvChargingJobList(param);
if (CollUtil.isNotEmpty(srgvChargingJobs)) { if (CollUtil.isNotEmpty(srgvChargingJobs)) {
SrgvChargingJob srgvChargingJob = srgvChargingJobs.get(0); SrgvChargingJob srgvChargingJob = srgvChargingJobs.get(0);
@@ -175,8 +179,8 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
wcsSrgvQueue.setCargo("0"); wcsSrgvQueue.setCargo("0");
wcsSrgvQueue.setIssued("0"); wcsSrgvQueue.setIssued("0");
wcsSrgvQueue.setExecutionStatus("1"); wcsSrgvQueue.setExecutionStatus("1");
wcsSrgvQueue.setCargoPickSite(""); wcsSrgvQueue.setCargoPickSite(deviceSrgv.getCurrSite());
wcsSrgvQueue.setCargoPlaceSite(""); wcsSrgvQueue.setCargoPlaceSite(chargingSite);
wcsSrgvQueue.setStartSite(deviceSrgv.getCurrSite()); wcsSrgvQueue.setStartSite(deviceSrgv.getCurrSite());
WcsSrgvMap wcsSrgvMap = wcsSrgvMapService.selectWcsSrgvMapBySiteId(chargingSite); WcsSrgvMap wcsSrgvMap = wcsSrgvMapService.selectWcsSrgvMapBySiteId(chargingSite);
@@ -186,13 +190,17 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
} else { } else {
wcsSrgvQueue.setEndSite("tsj"); wcsSrgvQueue.setEndSite("tsj");
wcsSrgvQueue.setDefault02("8"); wcsSrgvQueue.setDefault02("8");
// if (endSite.equals("tsj")){
Integer count = wcsSagvQueueMapper.selectTsj(); Integer count = wcsSagvQueueMapper.selectTsj();
if (count > 0) { if (count > 0) {
return; return;
} }
// }
} }
// TODO 如果小车的当前点和小车的充电点位置一样,直接生成已经下发的队列 等着充电就可以
// if (deviceSrgv.getCurrSite().equals(chargingSite)) {
// wcsSrgvQueue.setIssued("1");
// wcsSrgvQueue.setExecutionStatus("3");
// }
wcsSrgvQueue.setTaskNo(String.valueOf(deviceSrgv.getDeviceId() + 500)); wcsSrgvQueue.setTaskNo(String.valueOf(deviceSrgv.getDeviceId() + 500));
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()));
@@ -222,11 +230,6 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
* 生成出库小车队列 * 生成出库小车队列
*/ */
private void createCarOutQueue() { private void createCarOutQueue() {
// MydoJob mydoJob = new MydoJob();
// mydoJob.setInOut("2");
// mydoJob.setExecutionPhase("0");
// mydoJob.setStatus("1");
// List<MydoJob> mydoJobs = mydoJobService.selectInOrOutMydoJobList(mydoJob);
List<MydoJob> mydoJobs = mydoJobService.selectMydoJobOut(); List<MydoJob> mydoJobs = mydoJobService.selectMydoJobOut();
@@ -263,24 +266,63 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
String cargoPickSite = wcsSrgvMaps.get(0).getSiteId(); String cargoPickSite = wcsSrgvMaps.get(0).getSiteId();
//先找流程相等的小车 //先找流程相等的小车
List<DeviceSrgv> currentFloorCarList = deviceSrgvList.stream().filter(x -> x.getCurrFloor().toString().equals(mydoJob1.getTheFloor())).collect(Collectors.toList()); List<DeviceSrgv> currentFloorCarList = deviceSrgvList.stream().filter(x -> x.getCurrFloor().toString().equals(mydoJob1.getTheFloor())).collect(Collectors.toList());
int z = 100000; // int z = 100000;
// for (DeviceSrgv srgv : currentFloorCarList) {
// // 坐标截取和转换(保留你的原有逻辑)
// Integer startX = Convert.toInt(StrUtil.sub(srgv.getCurrSite(), 0, 2));
// Integer endX = Convert.toInt(StrUtil.sub(cargoPickSite, 0, 2));
// Integer startY = Convert.toInt(StrUtil.sub(srgv.getCurrSite(), 2, 4));
// Integer endY = Convert.toInt(StrUtil.sub(cargoPickSite, 2, 4));
//
// // 计算当前小车到取货点的曼哈顿距离 TODO 先算Y 再算X 如果Y相等再算X
//// int tempZ = Math.abs(startX - endX) + Math.abs(startY - endY);
// int tempZ = Math.abs(startY - endY) != 0 ? Math.abs(startY - endY) : Math.abs(startX - endX);
//
// // 核心修正:只要当前tempZ比记录的最小z更小,就更新z和对应的小车
// if (tempZ < z) {
// z = tempZ; // 把z更新为当前更小的距离
// deviceSrgv = srgv; // 记录这个更近的小车
// log.info("楼层相等,找到更近小车 距离{} srgv:{}", tempZ, srgv);
// }
// }
int minYDistance = 100000; // 记录最小的Y轴距离
int minXDistance = 100000; // 记录最小的X轴距离
DeviceSrgv bestSrgv = null; // 最终选中的最优小车
for (DeviceSrgv srgv : currentFloorCarList) { for (DeviceSrgv srgv : currentFloorCarList) {
// 坐标截取和转换(保留你的原有逻辑) // 坐标截取和转换(保留原有逻辑)
Integer startX = Convert.toInt(StrUtil.sub(srgv.getCurrSite(), 0, 2)); Integer startX = Convert.toInt(StrUtil.sub(srgv.getCurrSite(), 0, 2));
Integer endX = Convert.toInt(StrUtil.sub(cargoPickSite, 0, 2)); Integer endX = Convert.toInt(StrUtil.sub(cargoPickSite, 0, 2));
Integer startY = Convert.toInt(StrUtil.sub(srgv.getCurrSite(), 2, 4)); Integer startY = Convert.toInt(StrUtil.sub(srgv.getCurrSite(), 2, 4));
Integer endY = Convert.toInt(StrUtil.sub(cargoPickSite, 2, 4)); Integer endY = Convert.toInt(StrUtil.sub(cargoPickSite, 2, 4));
// 计算当前小车到取货点的曼哈顿距离 // 1. 计算当前小车到目标点的Y轴、X轴绝对距离
int tempZ = Math.abs(startX - endX) + Math.abs(startY - endY); int currentYDistance = Math.abs(startY - endY);
int currentXDistance = Math.abs(startX - endX);
// 核心修正:只要当前tempZ比记录的最小z更小,就更新z和对应的小车 // 2. 核心逻辑:优先按Y轴排序,Y轴相同再按X轴排序
if (tempZ < z) { if (currentYDistance < minYDistance) {
z = tempZ; // 把z更新为当前更小的距离 // 情况1:当前Y轴距离更小,直接更新最优解
deviceSrgv = srgv; // 记录这个更近的小车 minYDistance = currentYDistance;
log.info("楼层相等,找到更近小车 距离{} srgv:{}", tempZ, srgv); minXDistance = currentXDistance;
bestSrgv = srgv;
log.info("楼层相等,找到更近小车(Y轴更优) Y距离{} X距离{} srgv:{}", currentYDistance, currentXDistance, srgv);
} else if (currentYDistance == minYDistance) {
// 情况2:Y轴距离相同,比较X轴距离
if (currentXDistance < minXDistance) {
minXDistance = currentXDistance;
bestSrgv = srgv;
log.info("楼层相等,找到更近小车(X轴更优) Y距离{} X距离{} srgv:{}", currentYDistance, currentXDistance, srgv);
}
} }
} }
// 最终选中的小车赋值给deviceSrgv(保持原有变量名兼容)
deviceSrgv = bestSrgv;
if (deviceSrgv == null) { if (deviceSrgv == null) {
//如果未选择到小车,再找其他楼层的小车 //如果未选择到小车,再找其他楼层的小车
for (DeviceSrgv deviceSrgv1 : deviceSrgvList) { for (DeviceSrgv deviceSrgv1 : deviceSrgvList) {
@@ -326,12 +368,12 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
//终点是提升机 //终点是提升机
endSite = "tsj"; endSite = "tsj";
} }
if (endSite.equals("tsj")) { // if (endSite.equals("tsj")) {
Integer count = wcsSagvQueueMapper.selectTsj(); // Integer count = wcsSagvQueueMapper.selectTsj();
if (count > 0) { // if (count > 0) {
return; // return;
} // }
} // }
mydoJob1.setExitId(null); mydoJob1.setExitId(null);
WcsSrgvMap wcsSrgvMap1 = new WcsSrgvMap(); WcsSrgvMap wcsSrgvMap1 = new WcsSrgvMap();
@@ -353,7 +395,7 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
ssj = "L1005"; ssj = "L1005";
} }
Integer count = mydoJobService.selectExit(ssj); Integer count = mydoJobService.selectExit(ssj);
if (count == 0) { if (count >= 0 && count <= 1) {
mydoJob1.setExitId(ssj); mydoJob1.setExitId(ssj);
mydoJobService.updateMydoJob(mydoJob1); mydoJobService.updateMydoJob(mydoJob1);
outModelSSJ.add(s); outModelSSJ.add(s);
@@ -501,28 +543,44 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
//取货地址 //取货地址
String cargoPickSite = wcsSrgvMaps.get(0).getSiteId(); String cargoPickSite = wcsSrgvMaps.get(0).getSiteId();
//先找流程相等的小车 //先找层数相等的小车
List<DeviceSrgv> currentFloorCarList = deviceSrgvList.stream().filter(x -> x.getCurrFloor().toString().equals(mydoJob1.getTheFloor())).collect(Collectors.toList()); List<DeviceSrgv> currentFloorCarList = deviceSrgvList.stream().filter(x -> x.getCurrFloor().toString().equals(mydoJob1.getTheFloor())).collect(Collectors.toList());
int z = 100000; int minYDistance = 100000; // 记录最小的Y轴距离
int minXDistance = 100000; // 记录最小的X轴距离
DeviceSrgv bestSrgv = null; // 最终选中的最优小车
for (DeviceSrgv srgv : currentFloorCarList) { for (DeviceSrgv srgv : currentFloorCarList) {
// 坐标截取和转换(保留你的原有逻辑) // 坐标截取和转换(保留原有逻辑)
Integer startX = Convert.toInt(StrUtil.sub(srgv.getCurrSite(), 0, 2)); Integer startX = Convert.toInt(StrUtil.sub(srgv.getCurrSite(), 0, 2));
Integer endX = Convert.toInt(StrUtil.sub(cargoPickSite, 0, 2)); Integer endX = Convert.toInt(StrUtil.sub(cargoPickSite, 0, 2));
Integer startY = Convert.toInt(StrUtil.sub(srgv.getCurrSite(), 2, 4)); Integer startY = Convert.toInt(StrUtil.sub(srgv.getCurrSite(), 2, 4));
Integer endY = Convert.toInt(StrUtil.sub(cargoPickSite, 2, 4)); Integer endY = Convert.toInt(StrUtil.sub(cargoPickSite, 2, 4));
// 计算当前小车到取货点的曼哈顿距离 // 1. 计算当前小车到目标点的Y轴、X轴绝对距离
int tempZ = Math.abs(startX - endX) + Math.abs(startY - endY); int currentYDistance = Math.abs(startY - endY);
int currentXDistance = Math.abs(startX - endX);
// 核心修正:只要当前tempZ比记录的最小z更小,就更新z和对应的小车 // 2. 核心逻辑:优先按Y轴排序,Y轴相同再按X轴排序
if (tempZ < z) { if (currentYDistance < minYDistance) {
z = tempZ; // 把z更新为当前更小的距离 // 情况1:当前Y轴距离更小,直接更新最优解
deviceSrgv = srgv; // 记录这个更近的小车 minYDistance = currentYDistance;
log.info("楼层相等,找到更近小车 距离{} srgv:{}", tempZ, srgv); minXDistance = currentXDistance;
bestSrgv = srgv;
log.info("楼层相等,找到更近小车(Y轴更优) Y距离{} X距离{} srgv:{}", currentYDistance, currentXDistance, srgv);
} else if (currentYDistance == minYDistance) {
// 情况2:Y轴距离相同,比较X轴距离
if (currentXDistance < minXDistance) {
minXDistance = currentXDistance;
bestSrgv = srgv;
log.info("楼层相等,找到更近小车(X轴更优) Y距离{} X距离{} srgv:{}", currentYDistance, currentXDistance, srgv);
}
} }
} }
// 最终选中的小车赋值给deviceSrgv(保持原有变量名兼容)
deviceSrgv = bestSrgv;
if (deviceSrgv == null) { if (deviceSrgv == null) {
//如果未选择到小车,再找其他楼层的小车 //如果未选择到小车,找目标层小车
for (DeviceSrgv deviceSrgv1 : deviceSrgvList) { for (DeviceSrgv deviceSrgv1 : deviceSrgvList) {
if (!deviceSrgv1.getCurrFloor().toString().equals(mydoJob1.getTheFloor())) { if (!deviceSrgv1.getCurrFloor().toString().equals(mydoJob1.getTheFloor())) {
WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv1.getDeviceId().toString()); WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv1.getDeviceId().toString());
@@ -534,6 +592,20 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
} }
} }
} }
// // 如果目标层小车也没有 找其他层小车
// if (deviceSrgv==null){
// for (DeviceSrgv deviceSrgv1 : deviceSrgvList) {
// if (!deviceSrgv1.getCurrFloor().toString().equals(mydoJob1.getTheFloor())) {
// WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv1.getDeviceId().toString());
// if (deviceSrgv1.getStatus() == 1 && wcsSrgvQueue2 == null) {
// deviceSrgv = deviceSrgv1; // 更新为更小楼层的小车
// log.info("楼层bu相等:{}", deviceSrgv);
//
// }
// }
// }
//
// }
if (deviceSrgv != null) { if (deviceSrgv != null) {
WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv.getDeviceId().toString()); WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv.getDeviceId().toString());
@@ -560,28 +632,28 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
// 小车不在1楼 // 小车不在1楼
endSite = "tsj"; endSite = "tsj";
} }
if (endSite.equals("tsj")) { // if (endSite.equals("tsj")) {
Integer count = wcsSagvQueueMapper.selectTsj(); // Integer count = wcsSagvQueueMapper.selectTsj();
if (count > 0) { // if (count > 0) {
return; // return;
} // }
} // }
//筛选出deviceSrgvMap中deviceSrgv.getWorkMode() == 4并且deviceSrgv.getStatus() == 1并且deviceSrgv.getCurrSite() == cargoPickSite得对象,并排除掉其中deviceId与deviceSrgv.getDeviceId()相同的对象 //筛选出deviceSrgvMap中deviceSrgv.getWorkMode() == 4并且deviceSrgv.getStatus() == 1并且deviceSrgv.getCurrSite() == cargoPickSite得对象,并排除掉其中deviceId与deviceSrgv.getDeviceId()相同的对象
// 如果当前有其他小车也要去入库点取货 TODO 判断的是如果当前车要去取货点,但是取货点有车的的情况
List<DeviceSrgv> sameSiteDevices = deviceSrgvMap.values().stream() // List<DeviceSrgv> sameSiteDevices = deviceSrgvMap.values().stream()
.filter(d -> d.getWorkMode() == 5 // .filter(d -> d.getWorkMode() == 5
&& d.getStatus() == 1 // && d.getStatus() == 1
&& d.getCurrSite().equals(cargoPickSite)) // && d.getCurrSite().equals(cargoPickSite))
.collect(Collectors.toList()); // .collect(Collectors.toList());
if (!sameSiteDevices.isEmpty() && !Objects.equals(sameSiteDevices.get(0).getDeviceId(), deviceSrgv.getDeviceId())) { // 和当前小车不是一个 那么就生成一个去离母通道最近的点
WcsSrgvMap wcsSrgvMap3 = new WcsSrgvMap(); // if (!sameSiteDevices.isEmpty() && !Objects.equals(sameSiteDevices.get(0).getDeviceId(), deviceSrgv.getDeviceId())) {
wcsSrgvMap3.setRemark("cache"); // WcsSrgvMap wcsSrgvMap3 = new WcsSrgvMap();
List<WcsSrgvMap> wcsSrgvMaps3 = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap3); // wcsSrgvMap3.setSiteId("07070"+sameSiteDevices.get(0).getCurrFloor());
for (WcsSrgvMap wcsSrgvMap4 : wcsSrgvMaps3) { // List<WcsSrgvMap> wcsSrgvMaps3 = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap3);
//deviceSrgvMap中所有对象的currSite都不等于wcsSrgvMap4的siteId的对象 // for (WcsSrgvMap wcsSrgvMap4 : wcsSrgvMaps3) {
//todo //
// if (deviceSrgvMap.values().stream().noneMatch(d -> d.getCurrSite().equals(wcsSrgvMap4.getSiteId()))) { // if (deviceSrgvMap.values().stream().noneMatch(d -> d.getCurrSite().equals(wcsSrgvMap4.getSiteId()))) {
// WcsSrgvQueue wcsSrgvQueue5 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(sameSiteDevices.get(0).getDeviceId().toString()); // WcsSrgvQueue wcsSrgvQueue5 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(sameSiteDevices.get(0).getDeviceId().toString());
// WcsSrgvQueue wcsSrgvQueue = new WcsSrgvQueue(); // WcsSrgvQueue wcsSrgvQueue = new WcsSrgvQueue();
@@ -611,9 +683,9 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
// return; // return;
// } // }
// } // }
//
} // }
} // }
//生成小车取货队列 //生成小车取货队列
@@ -678,7 +750,8 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
sendMainTask(deviceSrgv, wcsSrgvQueue, currSite, endSite); sendMainTask(deviceSrgv, wcsSrgvQueue, currSite, endSite);
} else { } else {
//小车不在起始点 //小车不在起始点
sendPointToPointTask(deviceSrgv, wcsSrgvQueue, currSite, startSite); // sendPointToPointTask(deviceSrgv, wcsSrgvQueue, currSite, startSite);
sendPointToPointTask(deviceSrgv, wcsSrgvQueue, currSite, endSite);
} }
} }
} }
@@ -693,32 +766,54 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
Integer floor = deviceSrgv.getCurrFloor(); Integer floor = deviceSrgv.getCurrFloor();
//获取当前地图 //获取当前地图
Map<String, WcsSrgvMap> arrByRoadSite = roadCacheService.getArrByRoadSite(floor); Map<String, WcsSrgvMap> arrByRoadSite = roadCacheService.getArrByRoadSite(floor);
if ((wcsSrgvQueue.getDefault02().equals("1") || wcsSrgvQueue.getDefault02().equals("2") || wcsSrgvQueue.getDefault02().equals("4")) && wcsSrgvQueue.getTheFloor().equals("1") && !wcsSrgvQueue.getEndSite().equals("tsj")) { if (wcsSrgvQueue.getDefault02().equals("1") || wcsSrgvQueue.getDefault02().equals("2")) {
//如果是1层 锁定提升机站点 // 出入库任务时,只要车不在提升机里面就锁定提升机的点位,设置成墙
if (CollUtil.isNotEmpty(arrByRoadSite) && arrByRoadSite.values().iterator().next().getZ() == 1) { if (CollUtil.isNotEmpty(arrByRoadSite) && !deviceSrgv.getCurrSite().equals("09050" + floor)) {
if (arrByRoadSite.containsKey("080501")) { String siteId = "08050" + floor;
arrByRoadSite.get("080501").setValue(0); if (arrByRoadSite.containsKey(siteId)) {
arrByRoadSite.get(siteId).setValue(0);
} }
} }
} }
// if (wcsSrgvQueue.getDefault02().equals("8")){ // 移库任务直接锁定
// endSite="07050"+deviceSrgv.getCurrFloor(); if (wcsSrgvQueue.getDefault02().equals("7")) {
// } String siteId = "08050" + floor;
// if (arrByRoadSite.containsKey(siteId)) {
arrByRoadSite.get(siteId).setValue(0);
}
}
// 如果是点到点的 并且小车不在提升机里面才锁提升机,在提升机里面不需要锁
if (wcsSrgvQueue.getDefault02().equals("4") && !deviceSrgv.getCurrSite().equals("09050" + floor)) {
if (CollUtil.isNotEmpty(arrByRoadSite)) {
String siteId = "08050" + floor;
if (arrByRoadSite.containsKey(siteId)) {
arrByRoadSite.get(siteId).setValue(0);
}
}
}
// 当前是换层任务,并且车的当前层和目标层不一样的时候把提升机锁住 如果是一样的时候,则直接解锁
if (wcsSrgvQueue.getDefault02().equals("8") && floor != Integer.parseInt(wcsSrgvQueue.getDefault07())) {
String siteId = "08050" + floor;
if (arrByRoadSite.containsKey(siteId)) {
arrByRoadSite.get(siteId).setValue(0);
}
}
//处理地图 //处理地图
int[][] emptyMap = roadCacheService.handleMap(arrByRoadSite, deviceSrgv); int[][] emptyMap = roadCacheService.handleMap(arrByRoadSite, deviceSrgv, floor);
//计算最短路径 //计算最短路径
List<int[]> shortestPath = PathFinder.findShortestPath(emptyMap, arrByRoadSite.get(startSite).getX(), arrByRoadSite.get(startSite).getY(), arrByRoadSite.get(endSite).getX(), arrByRoadSite.get(endSite).getY()); List<int[]> shortestPath = PathFinder.findShortestPath(emptyMap, arrByRoadSite.get(startSite).getX(), arrByRoadSite.get(startSite).getY(), arrByRoadSite.get(endSite).getX(), arrByRoadSite.get(endSite).getY());
// TODO 小车避让 目前只针对同层最多两台车 并且点位设置到了050201 判断地图中取的路径 不能直达说明有车阻挡 直接返回-1 用-1判断小车阻挡调离小车 // TODO 小车避让 目前只针对同层最多两台车 并且点位设置到了050201 判断地图中取的路径 不能直达说明有车阻挡 直接返回-1 用-1判断小车阻挡调离小车
if (shortestPath.size() == 1 && shortestPath.get(0)[0] == -1 && shortestPath.get(0)[1] == -1) { if (shortestPath.size() > 0) {
shortestPath = null; if (shortestPath.size() == 1 && shortestPath.get(0)[0] == -1) {
return false;
}
String endBlockAgv = null; String endBlockAgv = null;
DeviceSrgv endBlockDevice = null; DeviceSrgv endBlockDevice = null;
if (arrByRoadSite != null && !arrByRoadSite.isEmpty()) { if (arrByRoadSite != null && !arrByRoadSite.isEmpty()) {
// 将arrByRoadSite转为String类型的Set(统一类型,方便匹配) // 将arrByRoadSite转为String类型的Set(统一类型,方便匹配)
Set<String> roadSiteSet = arrByRoadSite.keySet().stream() Set<String> roadSiteSet = arrByRoadSite.keySet().stream()
@@ -727,18 +822,37 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
.collect(Collectors.toSet()); .collect(Collectors.toSet());
// 2. Stream流式处理deviceSrgvMap // 2. Stream流式处理deviceSrgvMap
Optional<Map.Entry<String, DeviceSrgv>> targetEntry = PlcSrgvRead.deviceSrgvMap.entrySet().stream() Optional<Map.Entry<String, DeviceSrgv>> targetEntry = Optional.empty();
.filter(entry -> entry.getValue() != null) // 过滤other为null的条目 for (int i = 0; i < shortestPath.size(); i++) {
// 条件1:other的当前站点存在于roadSiteSet中 int endx = shortestPath.get(i)[0];
.filter(entry -> roadSiteSet.contains(entry.getValue().getCurrSite())) int endy = shortestPath.get(i)[1];
// 条件2:设备ID不等于当前entry的key WcsSrgvMap wcsSrgvMap = new WcsSrgvMap();
.filter(entry -> !Objects.equals(Convert.toStr(deviceSrgv.getDeviceId()), entry.getKey())) wcsSrgvMap.setX(endx);
.findFirst(); // 找到第一个符合条件的条目(等价于原代码的break) wcsSrgvMap.setY(endy);
wcsSrgvMap.setZ(floor);
List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap);
String siteId = wcsSrgvMaps.get(0).getSiteId();
targetEntry = PlcSrgvRead.deviceSrgvMap.entrySet().stream()
.filter(entry -> entry.getValue() != null) // 过滤other为null的条目
// 条件1:other的当前站点存在于roadSiteSet中
.filter(entry -> roadSiteSet.contains(entry.getValue().getCurrSite()))
.filter(entry -> siteId.equals(entry.getValue().getCurrSite()))
// 条件2:设备ID不等于当前entry的key
.filter(entry -> !Objects.equals(Convert.toStr(deviceSrgv.getDeviceId()), entry.getKey()))
.findFirst();
// 找到第一个符合条件的条目(等价于原代码的break)
if (targetEntry.isPresent()) {
break;
}
}
// 3. 处理结果(若找到则赋值) // 3. 处理结果(若找到则赋值)
if (targetEntry.isPresent()) { if (targetEntry.isPresent()) {
endBlockAgv = targetEntry.get().getKey(); endBlockAgv = targetEntry.get().getKey();
endBlockDevice = targetEntry.get().getValue(); endBlockDevice = targetEntry.get().getValue();
shortestPath = null;
} }
} }
@@ -747,10 +861,18 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
List<WcsSrgvQueue> wcsSrgvQueueBRS = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueueBR); List<WcsSrgvQueue> wcsSrgvQueueBRS = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueueBR);
if (endBlockDevice != null && wcsSrgvQueueBRS.isEmpty()) { if (endBlockDevice != null && wcsSrgvQueueBRS.isEmpty()) {
// 选择当前层最近且可达的缓存点(避让点) // 选择当前层最近且可达的缓存点(避让点)
WcsSrgvMap cacheParam = new WcsSrgvMap(); ConcurrentHashMap<String, DeviceSrgv> deviceSrgvMap = PlcSrgvRead.deviceSrgvMap;
cacheParam.setRemark("cache"); List<DeviceSrgv> deviceSrgvs = deviceSrgvMap.values().stream()
cacheParam.setTheLayer(floor); .filter(d -> d.getWorkMode() == 5
List<WcsSrgvMap> cacheMaps = wcsSrgvMapService.selectWcsSrgvMapList(cacheParam); && d.getStatus() == 1
&& d.getCurrFloor().equals(floor))
.collect(Collectors.toList());
ArrayList<String> sites = new ArrayList<>();
for (int i = 0; i < deviceSrgvs.size(); i++) {
sites.add(deviceSrgvs.get(i).getCurrSite());
}
List<WcsSrgvMap> cacheMaps = wcsSrgvMapService.selectNotInsite("cache", floor, sites);
// List<WcsSrgvMap> cacheMaps = wcsSrgvMapService.selectWcsSrgvMapList(cacheParam);
// 生成阻挡车的避让任务(点到点,高优先级,未下发) // 生成阻挡车的避让任务(点到点,高优先级,未下发)
WcsSrgvQueue taskB = new WcsSrgvQueue(); WcsSrgvQueue taskB = new WcsSrgvQueue();
taskB.setGuid(UUID.randomUUID().toString()); taskB.setGuid(UUID.randomUUID().toString());
@@ -764,19 +886,34 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
taskB.setExecutionStatus("1");// 初始状态 taskB.setExecutionStatus("1");// 初始状态
taskB.setStartSite(endBlockDevice.getCurrSite()); taskB.setStartSite(endBlockDevice.getCurrSite());
taskB.setCargoPickSite(endBlockDevice.getCurrSite()); taskB.setCargoPickSite(endBlockDevice.getCurrSite());
taskB.setCargoPlaceSite(cacheMaps.get(0).getSiteId()); if (cacheMaps.size() > 1) {
taskB.setEndSite(cacheMaps.get(0).getSiteId()); Integer count = wcsSagvQueueMapper.selectByCaogoPlaceSite(cacheMaps.get(0).getSiteId());
if (count > 0) {
taskB.setCargoPlaceSite(cacheMaps.get(1).getSiteId());
taskB.setEndSite(cacheMaps.get(1).getSiteId());
} else {
taskB.setCargoPlaceSite(cacheMaps.get(0).getSiteId());
taskB.setEndSite(cacheMaps.get(0).getSiteId());
}
}
if (cacheMaps.size() == 1) {
taskB.setCargoPlaceSite(cacheMaps.get(0).getSiteId());
taskB.setEndSite(cacheMaps.get(0).getSiteId());
}
taskB.setTheFloor(floor.toString()); taskB.setTheFloor(floor.toString());
// taskB.setDefault03(endBlockDevice.getCurrSite()); // taskB.setDefault03(endBlockDevice.getCurrSite());
taskB.setDefault07(floor.toString()); taskB.setDefault07(floor.toString());
// taskB.setDefault08("1");//避让任务,直接完成 // taskB.setDefault08("1");//避让任务,直接完成
taskB.setCreateDate(DateUtil.now()); taskB.setCreateDate(DateUtil.now());
wcsSagvQueueMapper.insertWcsSrgvQueue(taskB); wcsSagvQueueMapper.insertWcsSrgvQueue(taskB);
taskCache++; taskCache++;
log.info("目标点 {" + deviceSrgv.getCurrSite() + "} 被小车 {" + deviceSrgv.getDeviceId() + "} 占用,已调度其前往避让点 {}", endSite, endBlockAgv, "02050" + endBlockDevice.getCurrFloor()); log.info("目标点 {" + deviceSrgv.getCurrSite() + "} 被小车 {" + deviceSrgv.getDeviceId() + "} 占用,已调度其前往避让点 {}", endSite, endBlockAgv, "02050" + endBlockDevice.getCurrFloor());
// 当前车等待下一轮调度(待阻挡车移开后自然可达) // 当前车等待下一轮调度(待阻挡车移开后自然可达)
return false; return false;
} }
} }
@@ -881,14 +1018,14 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
} }
if (("tsj").equals(endSite)) { if (("tsj").equals(endSite)) {
if (wcsSrgvQueue.getDefault02().equals("8")) { if (wcsSrgvQueue.getDefault02().equals("8")) {
endSite = extractTarget(String.valueOf(pathBuilder)); // endSite = extractTarget(String.valueOf(pathBuilder));
} else { endSite = "07050" + wcsSrgvQueue.getTheFloor();
}
if (wcsSrgvQueue.getDefault02().equals("1") || wcsSrgvQueue.getDefault02().equals("2")) {
endSite = "09050" + wcsSrgvQueue.getTheFloor(); endSite = "09050" + wcsSrgvQueue.getTheFloor();
} }
} }
// if (("tsj").equals(startSite)) {
// endSite = "09050" + wcsSrgvQueue.getTheFloor();
// }
List<SendData2> sendDataList = null; List<SendData2> sendDataList = null;
if (StrUtil.isEmpty(wcsSrgvQueue.getDefault08())) { if (StrUtil.isEmpty(wcsSrgvQueue.getDefault08())) {
sendDataList = new ArrayList<>(); sendDataList = new ArrayList<>();
@@ -977,10 +1114,9 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
sendDataList.add(taskType); sendDataList.add(taskType);
} }
// TODO 这段下发有问题
if (wcsSrgvQueue.getDefault08().equals("2") && deviceSrgv.getSpare5().equals("1")) {
if (wcsSrgvQueue.getDefault08().equals("2")
&& deviceSrgv.getSpare5().equals("1")
) {
sendDataList = new ArrayList<>(); sendDataList = new ArrayList<>();
SendData2 path = new SendData2(); SendData2 path = new SendData2();
path.setAddress("4404");//地址 path.setAddress("4404");//地址
@@ -1002,14 +1138,17 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
wcjs.setType(1); wcjs.setType(1);
sendDataList.add(wcjs); sendDataList.add(wcjs);
//任务类型转换 //任务类型转换 //TODO 不行就改成7
SendData2 taskType = new SendData2(); SendData2 taskType = new SendData2();
taskType.setAddress("4402"); taskType.setAddress("4402");
taskType.setData("7"); taskType.setData("9");
taskType.setType(1); taskType.setType(1);
sendDataList.add(taskType); sendDataList.add(taskType);
} }
if (sendDataList == null) {
sendDataList = new ArrayList<>();
}
//任务号、原、目标数据转换 //任务号、原、目标数据转换
String siteId = wcsSrgvQueue.getTaskNo();//+ "," + startSite + "," + endSite; String siteId = wcsSrgvQueue.getTaskNo();//+ "," + startSite + "," + endSite;
SendData2 site = new SendData2(); SendData2 site = new SendData2();
@@ -1226,7 +1365,9 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
//处理换层逻辑 //处理换层逻辑
String site1 = "07050" + wcsSrgvQueue.getDefault07(); String site1 = "07050" + wcsSrgvQueue.getDefault07();
String site2 = "10050" + wcsSrgvQueue.getDefault07(); String site2 = "10050" + wcsSrgvQueue.getDefault07();
String site3 = "09050" + wcsSrgvQueue.getDefault07();
sites.add(site1); sites.add(site1);
sites.add(site3);
sites.add(site2); sites.add(site2);
} }
if (Objects.equals(currSite, wcsSrgvQueue.getEndSite()) || (siteId != null && Objects.equals(currSite, siteId)) || sites.contains(currSite)) { if (Objects.equals(currSite, wcsSrgvQueue.getEndSite()) || (siteId != null && Objects.equals(currSite, siteId)) || sites.contains(currSite)) {
@@ -1256,17 +1397,12 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
// return; // return;
} }
//空车任务 且当前车的位置和取货位置相同 //空车任务 且当前车的位置和取货位置相同
if ("1".equals(taskType) if ("1".equals(taskType) && (cargoPickSite.equals(currSite) || (wcsSrgvQueue.getDefault06() != null && wcsSrgvQueue.getDefault06().equals(currSite)) || sites.contains(currSite))) {
&& (cargoPickSite.equals(currSite) || (wcsSrgvQueue.getDefault06() != null && wcsSrgvQueue.getDefault06().equals(currSite)) || sites.contains(currSite))
) {
String endSite = ""; String endSite = "";
String xfType = ""; String xfType = "";
// 换完层直接根据任务去接出入库任务
if (wcsSrgvQueue.getDefault02().equals("8")) { if (wcsSrgvQueue.getDefault02().equals("8")) {
//换层任务直接完成,等待后续入出库作业下发
wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid());
return;
} else { } else {
WcsSrgvMap wcsSrgvMapq = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPickSite); WcsSrgvMap wcsSrgvMapq = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPickSite);
WcsSrgvMap wcsSrgvMapf = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPlaceSite); WcsSrgvMap wcsSrgvMapf = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPlaceSite);
@@ -1281,12 +1417,12 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
endSite = "tsj"; endSite = "tsj";
} }
// 如果终点是提升机需要判断是否有其他任务也是提升机的 这个时候先停一下 // 如果终点是提升机需要判断是否有其他任务也是提升机的 这个时候先停一下
if (endSite.equals("tsj")) { // if (endSite.equals("tsj")) {
Integer count = wcsSagvQueueMapper.selectTsj(); // Integer count = wcsSagvQueueMapper.selectTsj();
if (count > 0) { // if (count > 0) {
return; // return;
} // }
} // }
if ("L1004".equals(wcsSrgvMapq.getRemark()) || "L1005".equals(wcsSrgvMapq.getRemark())) { if ("L1004".equals(wcsSrgvMapq.getRemark()) || "L1005".equals(wcsSrgvMapq.getRemark())) {
xfType = "1";//入库 xfType = "1";//入库
@@ -1333,6 +1469,7 @@ 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 && (cargoPlaceSite.equals(currSite))) { if (mydoJobOut != null && (cargoPlaceSite.equals(currSite))) {
log.info("1471 taskNo:[{}],currSite:[{}],cargoPlaceSite:[{}]",wcsSrgvQueue.getTaskNo(),currSite,cargoPlaceSite);
JobCallBack jobCallBack = new JobCallBack(); JobCallBack jobCallBack = new JobCallBack();
jobCallBack.setType(wcsSrgvQueue.getDefault02()); jobCallBack.setType(wcsSrgvQueue.getDefault02());
jobCallBack.setMydojobId(mydoJobOut.getJobId()); jobCallBack.setMydojobId(mydoJobOut.getJobId());
@@ -1365,8 +1502,8 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo()); wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid()); wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid());
// 充电任务 // 充电任务 并且小车也是充电任务
} else if ("3".equals(taskType)) { } else if ("3".equals(taskType) && wcsSrgvQueue.getDefault02().equals("3")) {
//删除队列,插入历史表 //删除队列,插入历史表
wcsSrgvQueue.setExecutionStatus("4"); wcsSrgvQueue.setExecutionStatus("4");
wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo()); wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
@@ -1412,9 +1549,10 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
String startSite = wcsSrgvQueue.getStartSite(); String startSite = wcsSrgvQueue.getStartSite();
if (!startSite.equals(currSite)) { if (!startSite.equals(currSite)) {
wcsSrgvQueue.setIssued("1"); // wcsSrgvQueue.setIssued("1");
wcsSrgvQueue.setStartDate(DateUtil.now()); // wcsSrgvQueue.setExecutionStatus("3");
wcsSagvQueueMapper.updateWcsSrgvQueue(wcsSrgvQueue); // wcsSrgvQueue.setStartDate(DateUtil.now());
// wcsSagvQueueMapper.updateWcsSrgvQueue(wcsSrgvQueue);
} }
} }
} }

View File

@@ -124,17 +124,17 @@ public class SsjThread implements Runnable {
} }
void inDispatch1(DeviceSsj deviceSsj) { void inDispatch1(DeviceSsj deviceSsj) {
if (deviceSsj.getRkqq() == 1 && StrUtil.isNotBlank(deviceSsj.getTrayCode().trim()) ) { if (deviceSsj.getRkqq() == 1 && StrUtil.isNotBlank(deviceSsj.getTrayCode().trim())) {
String trayCode = deviceSsj.getTrayCode().trim(); String trayCode = deviceSsj.getTrayCode().trim();
MydoJob getMydoJob = mydoJobService.selectMydoJobByTrayCode(trayCode); MydoJob getMydoJob = mydoJobService.selectMydoJobByTrayCode(trayCode);
if (getMydoJob!=null && deviceSsj.getTaskNo()<1000){ if (getMydoJob != null && deviceSsj.getTaskNo() < 1000) {
int i = writeToSsj(deviceSsj.getPlcDbWriteAddress(), getMydoJob.getTaskNo(), 1, 1); int i = writeToSsj(deviceSsj.getPlcDbWriteAddress(), getMydoJob.getTaskNo(), 1, 1);
if (i == 1) { if (i == 1) {
getMydoJob.setStatus("3"); getMydoJob.setStatus("3");
mydoJobService.updateMydoJob(getMydoJob); mydoJobService.updateMydoJob(getMydoJob);
log.info(deviceSsj.getDeviceCode() + "输送机下发任务号成功:{}", getMydoJob.getTaskNo()); log.info(deviceSsj.getDeviceCode() + "输送机下发任务号成功:{}", getMydoJob.getTaskNo());
} }
}else { } else {
//todo 查是否为入库模式,不是退回,是否超重 //todo 查是否为入库模式,不是退回,是否超重
HashMap<String, Object> map = new HashMap<>(); HashMap<String, Object> map = new HashMap<>();
map.put("trayCode", deviceSsj.getTrayCode()); map.put("trayCode", deviceSsj.getTrayCode());
@@ -183,11 +183,28 @@ public class SsjThread implements Runnable {
void inDispatch2(DeviceSsj deviceSsj) { void inDispatch2(DeviceSsj deviceSsj) {
if (deviceSsj.getDw() == 1 && deviceSsj.getTaskNo() > 1000) { if (deviceSsj.getDw() == 1 && deviceSsj.getTaskNo() > 1000) {
MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo((long) deviceSsj.getTaskNo()); MydoJob mydoJob1 = mydoJobService.selectMydoJobByTaskNo(Long.valueOf(deviceSsj.getTaskNo()));
if (mydoJob != null) { if (mydoJob1.getCargoSpaceId() != null) {
mydoJob.setExecutionPhase("2"); return;
mydoJobService.updateMydoJob(mydoJob);
} }
HashMap<String, Object> map = new HashMap<>();
map.put("taskNo", deviceSsj.getTaskNo());
//拉取
AjaxResult ajaxResult = apiService.sendCargoSpace(map);
if (ajaxResult.isSuccess()) {
MydoJob data = BeanUtil.toBean(ajaxResult.get("data"), MydoJob.class);
String cargoSpaceId = data.getCargoSpaceId();
String theFloor = data.getClassId();
MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo((long) deviceSsj.getTaskNo());
if (mydoJob != null) {
mydoJob.setTheFloor(theFloor);
mydoJob.setCargoSpaceId(cargoSpaceId);
mydoJob.setExecutionPhase("2");
mydoJobService.updateMydoJob(mydoJob);
}
}
} }
} }
} }

View File

@@ -8,6 +8,8 @@ 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.port.service.IWcsPortService; import com.ruoyi.bas.port.service.IWcsPortService;
import com.ruoyi.bas.srgvmap.domain.WcsSrgvMap;
import com.ruoyi.bas.srgvmap.service.IWcsSrgvMapService;
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;
@@ -35,13 +37,17 @@ 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; private IMydoJobService mydoJobService;
private IWcsSrgvMapService wcsSrgvMapService;
public void init() { public void init() {
tsjDeviceExecutionQueueService = SpringUtils.getBean(ITsjDeviceExecutionQueueService.class); tsjDeviceExecutionQueueService = SpringUtils.getBean(ITsjDeviceExecutionQueueService.class);
tsjDeviceExecutionQueueFinishService = SpringUtils.getBean(ITsjDeviceExecutionQueueFinishService.class); tsjDeviceExecutionQueueFinishService = SpringUtils.getBean(ITsjDeviceExecutionQueueFinishService.class);
wcsPortService = SpringUtils.getBean(IWcsPortService.class); wcsPortService = SpringUtils.getBean(IWcsPortService.class);
wcsSrgvQueueService = SpringUtils.getBean(IWcsSrgvQueueService.class); wcsSrgvQueueService = SpringUtils.getBean(IWcsSrgvQueueService.class);
wcsSrgvMapService = SpringUtils.getBean(IWcsSrgvMapService.class);
} }
@Override @Override
@@ -76,7 +82,7 @@ public class TsjThread implements Runnable {
* 1、下发完成 如果设备状态为 2-工作 ,触发方式 2-自动,任务号大于999,则代表任务下发完成 * 1、下发完成 如果设备状态为 2-工作 ,触发方式 2-自动,任务号大于999,则代表任务下发完成
* *
* */ * */
if (czfs == 2 && sbzt == 2 && rwh > 999) { if (czfs == 2 && sbzt == 2 && rwh > 500) {
// finishSend(rwh, tsj); // finishSend(rwh, tsj);
} }
@@ -84,11 +90,16 @@ public class TsjThread implements Runnable {
* 2、四向车任务生成 2-工作 ,触发方式 2-自动,任务号大于999 * 2、四向车任务生成 2-工作 ,触发方式 2-自动,任务号大于999
* *
* */ * */
if (czfs == 2 && sbzt == 2 && jdbz == 4 && rwh > 999) { if (czfs == 2 && sbzt == 2 && jdbz == 4 && rwh > 500) {
createSRgvQueue(rwh, tsj); WcsSrgvQueue wcsSrgvQueue = wcsSrgvQueueService.selectWcsSrgvQueueByTaskNo(String.valueOf(rwh));
String agvId = wcsSrgvQueue.getAgvId();
DeviceSrgv deviceSrgv = PlcSrgvRead.deviceSrgvMap.get(agvId);
if (deviceSrgv.getCurrSite().equals("09050" + tsj.getDqcs())) {
createSRgvQueue(rwh, tsj);
}
} }
// 提升机取货中 说明对齐当前要取货层 开始给小车下发 // 提升机取货中 说明对齐当前要取货层 开始给小车下发
if (czfs == 2 && sbzt == 2 && jdbz == 2 && rwh > 999) { if (czfs == 2 && sbzt == 2 && jdbz == 2 && rwh > 500) {
createSRgvQueueTsjQd(rwh, tsj); createSRgvQueueTsjQd(rwh, tsj);
} }
@@ -96,7 +107,7 @@ public class TsjThread implements Runnable {
* 2、任务完成 * 2、任务完成
* *
* */ * */
if (czfs == 2 && sbzt == 2 && jdbz == 5 && rwh > 999) { if (czfs == 2 && sbzt == 2 && jdbz == 5 && rwh > 500) {
//任务完成 //任务完成
finishTask(rwh, tsj); finishTask(rwh, tsj);
} }
@@ -117,7 +128,7 @@ public class TsjThread implements Runnable {
private void createSRgvQueueTsjQd(Long rwh, DeviceTsj tsj) { private void createSRgvQueueTsjQd(Long rwh, DeviceTsj tsj) {
for (String sRgv : PlcSrgvRead.deviceSrgvMap.keySet()) { for (String sRgv : PlcSrgvRead.deviceSrgvMap.keySet()) {
DeviceSrgv deviceSrgv = PlcSrgvRead.deviceSrgvMap.get(sRgv); DeviceSrgv deviceSrgv = PlcSrgvRead.deviceSrgvMap.get(sRgv);
if ((deviceSrgv.getCurrSite().equals("09050" + deviceSrgv.getCurrFloor()) || deviceSrgv.getCurrSite().equals("10050" + deviceSrgv.getCurrFloor())) && deviceSrgv.getWorkMode() == 5 && deviceSrgv.getStatus() == 2 && tsj.getHczt() == 1) { if ((deviceSrgv.getCurrSite().equals("09050" + deviceSrgv.getCurrFloor()) || deviceSrgv.getCurrSite().equals("10050" + deviceSrgv.getCurrFloor())) && deviceSrgv.getWorkMode() == 5 && deviceSrgv.getStatus() == 1 && tsj.getHczt() == 1) {
SendData rwlxSendData = new SendData(Tools.INT, 1); SendData rwlxSendData = new SendData(Tools.INT, 1);
DeviceTsj deviceTsj = PlcTsjRead.deviceTsjMap.get(Convert.toStr(1)); DeviceTsj deviceTsj = PlcTsjRead.deviceTsjMap.get(Convert.toStr(1));
byte[] bytes = Tools.sendData(rwlxSendData); byte[] bytes = Tools.sendData(rwlxSendData);
@@ -146,11 +157,15 @@ public class TsjThread implements Runnable {
WcsSrgvQueue sRgvQueueParam = new WcsSrgvQueue(); WcsSrgvQueue sRgvQueueParam = new WcsSrgvQueue();
sRgvQueueParam.setTaskNo(Convert.toStr(rwh)); sRgvQueueParam.setTaskNo(Convert.toStr(rwh));
sRgvQueueParam.setEndSite(Convert.toStr("tsj")); sRgvQueueParam.setEndSite(Convert.toStr("tsj"));
sRgvQueueParam.setIssued("1");
sRgvQueueParam.setExecutionStatus("3");
List<WcsSrgvQueue> wcsSrgvQueues = wcsSrgvQueueService.selectWcsSrgvQueueList(sRgvQueueParam); List<WcsSrgvQueue> wcsSrgvQueues = wcsSrgvQueueService.selectWcsSrgvQueueList(sRgvQueueParam);
if (CollUtil.isEmpty(wcsSrgvQueues)) { if (CollUtil.isEmpty(wcsSrgvQueues)) {
return; return;
} }
WcsSrgvQueue wcsSrgvQueue = wcsSrgvQueueService.insertHistory(Convert.toStr(rwh)); WcsSrgvQueue wcsSrgvQueue = wcsSrgvQueueService.insertHistory(Convert.toStr(rwh));
String cargoPickSite = wcsSrgvQueue.getCargoPickSite();
String cargoPlaceSite = wcsSrgvQueue.getCargoPlaceSite();
//修改起点终点 //修改起点终点
if (ObjUtil.isNotEmpty(wcsSrgvQueue)) { if (ObjUtil.isNotEmpty(wcsSrgvQueue)) {
wcsSrgvQueue.setCreateDate(DateUtil.formatDateTime(DateUtil.date())); wcsSrgvQueue.setCreateDate(DateUtil.formatDateTime(DateUtil.date()));
@@ -174,7 +189,6 @@ public class TsjThread implements Runnable {
endSite = wcsSrgvQueue.getCargoPlaceSite(); endSite = wcsSrgvQueue.getCargoPlaceSite();
break; break;
case "3": case "3":
//充电
break; break;
case "4": case "4":
//点到点 //点到点
@@ -191,10 +205,44 @@ public class TsjThread implements Runnable {
log.info("任务类型错误"); log.info("任务类型错误");
} }
break; break;
case "8":
//换层任务直接变成点到点任务
switch (wcsSrgvQueue.getTaskType()) {
case "1":
WcsSrgvMap wcsSrgvMapq = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPickSite);
WcsSrgvMap wcsSrgvMapf = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPlaceSite);
if (wcsSrgvMapq != null && wcsSrgvMapf != null) {
wcsSrgvQueue.setEndSite(cargoPickSite);
wcsSrgvQueue.setDefault02("4");
wcsSrgvQueue.setTheFloor(wcsSrgvMapq.getTheLayer().toString());
wcsSrgvQueue.setDefault07(wcsSrgvMapf.getTheLayer().toString());
wcsSrgvQueue.setIssued("0");
wcsSrgvQueue.setExecutionStatus("1");
wcsSrgvQueue.setTaskType("1");
}
wcsSrgvQueue.setStartSite("09050" + tsj.getDqcs());
wcsSrgvQueueService.updateWcsSrgvQueue(wcsSrgvQueue);
break;
case "3":
WcsSrgvMap wcsSrgvMapq1 = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPickSite);
WcsSrgvMap wcsSrgvMapf1 = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPlaceSite);
if (wcsSrgvMapq1 != null && wcsSrgvMapf1 != null) {
wcsSrgvQueue.setEndSite(cargoPlaceSite);
wcsSrgvQueue.setDefault02("3");
wcsSrgvQueue.setTheFloor(wcsSrgvMapq1.getTheLayer().toString());
wcsSrgvQueue.setDefault07(wcsSrgvMapf1.getTheLayer().toString());
wcsSrgvQueue.setIssued("0");
wcsSrgvQueue.setExecutionStatus("1");
wcsSrgvQueue.setTaskType("3");
}
wcsSrgvQueue.setStartSite("09050" + tsj.getDqcs());
wcsSrgvQueueService.updateWcsSrgvQueue(wcsSrgvQueue);
break;
}
} }
if (StrUtil.isNotEmpty(startSite) && StrUtil.isNotEmpty(endSite)) { if (StrUtil.isNotEmpty(startSite) && StrUtil.isNotEmpty(endSite) && !wcsSrgvQueue.getDefault02().equals("8")) {
wcsSrgvQueue.setStartSite(startSite); wcsSrgvQueue.setStartSite(startSite);
wcsSrgvQueue.setEndSite(endSite); wcsSrgvQueue.setEndSite(endSite);
wcsSrgvQueueService.updateWcsSrgvQueue(wcsSrgvQueue); wcsSrgvQueueService.updateWcsSrgvQueue(wcsSrgvQueue);

View File

@@ -90,6 +90,9 @@ public class GetDeviceSrgvMap {
} }
dto.setStatus(status); dto.setStatus(status);
dto.setLocation(d.getCurrSite() == null ? "" : d.getCurrSite()); dto.setLocation(d.getCurrSite() == null ? "" : d.getCurrSite());
dto.setRow(d.getCurrSite() == null ? "" : d.getCurrSite().substring(2,4));
dto.setColumn(d.getCurrSite() == null ? "" :d.getCurrSite().substring(0,2));
dto.setLayer(d.getCurrSite() == null ? "" : d.getCurrSite().substring(4,6));
dto.setAlarm(d.getAlarm() == null ? "" : String.valueOf(d.getAlarm())); dto.setAlarm(d.getAlarm() == null ? "" : String.valueOf(d.getAlarm()));
dto.setAlarmMsg(DictUtils.getDictLabel("srgv_alarm", d.getAlarm() == null ? "" : String.valueOf(d.getAlarm()))); dto.setAlarmMsg(DictUtils.getDictLabel("srgv_alarm", d.getAlarm() == null ? "" : String.valueOf(d.getAlarm())));
if (d.getTaskNo() != null && d.getTaskNo() > 0) { if (d.getTaskNo() != null && d.getTaskNo() > 0) {
@@ -132,6 +135,9 @@ public class GetDeviceSrgvMap {
private String isThere; private String isThere;
private String status; private String status;
private String location; private String location;
private String row;
private String column;
private String layer;
private String alarm; private String alarm;
private String alarmMsg; private String alarmMsg;
private String trayCode; private String trayCode;

View File

@@ -99,8 +99,17 @@ public class GetDeviceSsjMap {
dto.setRotationDirection(calcRotationDirection(d.getTaskNo())); dto.setRotationDirection(calcRotationDirection(d.getTaskNo()));
dto.setAlarm(String.valueOf(d.getException())); dto.setAlarm(String.valueOf(d.getException()));
dto.setAlarmMsg(DictUtils.getDictLabel("ssj_ex", String.valueOf(d.getException()))); dto.setAlarmMsg(DictUtils.getDictLabel("ssj_ex", String.valueOf(d.getException())));
dto.setDW(String.valueOf(d.getDw()));
dto.setKX(String.valueOf(d.getKx())); dto.setKX(String.valueOf(d.getKx()));
if (!dto.getTaskNo().equals("0")){
if (dto.getKX().equals("0")){
dto.setDW("1");
}else {
dto.setDW("0");
}
}else {
dto.setDW("0");
}
if (d.getTaskNo() > 0) { if (d.getTaskNo() > 0) {
try { try {
MydoJob job = mydoJobService.selectMydoJobByTaskNo(Long.valueOf(d.getTaskNo())); MydoJob job = mydoJobService.selectMydoJobByTaskNo(Long.valueOf(d.getTaskNo()));
@@ -128,16 +137,10 @@ public class GetDeviceSsjMap {
*/ */
private String calcRotationDirection(int taskNo) { private String calcRotationDirection(int taskNo) {
try { try {
if (taskNo <= 0) return "0"; if (taskNo <= 0) {
MydoJob job = mydoJobService.selectMydoJobByTaskNo((long) taskNo);
if (job == null || job.getInOrOut() == null) return "0";
int val;
try {
val = Integer.parseInt(job.getInOrOut());
} catch (NumberFormatException e) {
return "0"; return "0";
} }
return val >= 20 ? "2" : "1"; return taskNo <= 50000 ? "1" : "2";
} catch (Exception e) { } catch (Exception e) {
return "0"; return "0";
} }

View File

@@ -80,7 +80,7 @@ public class GetDeviceTsjMap {
String code = entry.getKey(); String code = entry.getKey();
DeviceTsj d = entry.getValue(); DeviceTsj d = entry.getValue();
TsjDto dto = new TsjDto(); TsjDto dto = new TsjDto();
dto.setId(String.valueOf(d.getId())); dto.setId("TW001");
dto.setLayer(d.getDqcs() == null ? "" : String.valueOf(d.getDqcs())); dto.setLayer(d.getDqcs() == null ? "" : String.valueOf(d.getDqcs()));
dto.setTaskNo(d.getRwh() == null ? "" : String.valueOf(d.getRwh())); dto.setTaskNo(d.getRwh() == null ? "" : String.valueOf(d.getRwh()));
dto.setZxjd(d.getJdbz() == null ? "" : String.valueOf(d.getJdbz())); dto.setZxjd(d.getJdbz() == null ? "" : String.valueOf(d.getJdbz()));

View File

@@ -161,4 +161,29 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{guid} #{guid}
</foreach> </foreach>
</delete> </delete>
<select id="selectNotInsite" resultMap="WcsSrgvMapResult">
SELECT
*
FROM
wcs_srgv_map
WHERE
remark = #{cache}
AND plc_layer = #{floor}
<if test="sites != null and sites.size() > 0">
AND site_id NOT IN
<foreach collection="sites" item="site" separator="," open="(" close=")">
#{site}
</foreach>
</if>
<if test="sites == null or sites.size() == 0">
AND 1=1
</if>
</select>
</mapper> </mapper>

View File

@@ -123,4 +123,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id} #{id}
</foreach> </foreach>
</delete> </delete>
<update id="updateDeviceCdzSpare" parameterType="DeviceCdz">
update device_cdz set spare1=null where id=#{id}
</update>
</mapper> </mapper>

View File

@@ -291,7 +291,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
FROM FROM
floor_group floor_group
WHERE WHERE
rn &lt;= 2 rn &lt;= 1
ORDER BY ORDER BY
group_coding DESC; group_coding DESC;

View File

@@ -218,5 +218,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="selectByCaogoPlaceSite" resultType="java.lang.Integer" parameterType="string">
select count(1) from wcs_srgv_queue where cargo_place_site=#{siteId}
</select>
</mapper> </mapper>