Compare commits
6 Commits
main
...
cafcde4a35
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cafcde4a35 | ||
|
|
24eaaa2823 | ||
|
|
24fb696a67 | ||
|
|
9b008f5fe7 | ||
|
|
03e30d1db0 | ||
|
|
9c6c32b7ed |
@@ -1,5 +1,6 @@
|
||||
package com.ruoyi;
|
||||
|
||||
import com.ruoyi.schedule.ScheduleThread;
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
@@ -7,6 +8,8 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
||||
import org.springframework.scheduling.annotation.EnableAsync;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 启动程序
|
||||
*
|
||||
@@ -17,6 +20,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
@EnableAsync
|
||||
public class RuoYiApplication
|
||||
{
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
// System.setProperty("spring.devtools.restart.enabled", "false");
|
||||
|
||||
@@ -10,11 +10,14 @@ import lombok.NoArgsConstructor;
|
||||
public class ReceiveJob {
|
||||
private String taskNo;
|
||||
private String cargoSpaceId;
|
||||
private String targetCargoSpaceId;
|
||||
private String exitId;
|
||||
private String trayCode;
|
||||
private String entranceId;
|
||||
private String inOrOut;
|
||||
private String jobId;
|
||||
private String roadwayId;
|
||||
private String classId;
|
||||
private Long priority;
|
||||
|
||||
}
|
||||
|
||||
@@ -121,6 +121,10 @@ public interface IApiService
|
||||
*/
|
||||
public AjaxResult createInMydoJob(Map<String, Object> param);
|
||||
|
||||
public AjaxResult sendCargoSpace(Map<String, Object> param);
|
||||
|
||||
|
||||
|
||||
public AjaxResult selectMydoJobByNoTrayCode(Map<String, Object> param);
|
||||
|
||||
AjaxResult receiveOutMydoJob(ReceiveJob receiveOutJob);
|
||||
|
||||
@@ -347,12 +347,27 @@ 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
|
||||
public AjaxResult receiveOutMydoJob(ReceiveJob receiveOutJob) {
|
||||
MydoJob mydoJob = new MydoJob();
|
||||
mydoJob.setJobId(receiveOutJob.getJobId());
|
||||
mydoJob.setTaskNo(receiveOutJob.getTaskNo());
|
||||
mydoJob.setCargoSpaceId(receiveOutJob.getCargoSpaceId());
|
||||
mydoJob.setTargetCargoSpaceId(receiveOutJob.getTargetCargoSpaceId());
|
||||
mydoJob.setExitId(receiveOutJob.getExitId());
|
||||
mydoJob.setInOrOut(receiveOutJob.getInOrOut());
|
||||
mydoJob.setStatus("1");
|
||||
@@ -360,6 +375,8 @@ public class ApiServiceImpl implements IApiService {
|
||||
mydoJob.setRoadwayId(receiveOutJob.getRoadwayId());
|
||||
mydoJob.setCreateTime(DateUtils.getNowDate());
|
||||
mydoJob.setExecutionPhase("0");
|
||||
mydoJob.setTheFloor(receiveOutJob.getClassId());
|
||||
mydoJob.setPriority(receiveOutJob.getPriority());
|
||||
int i = mydoJobService.insertMydoJob(mydoJob);
|
||||
if (i > 0) {
|
||||
return AjaxResult.success();
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package com.ruoyi.bas.srgvmap.mapper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import com.ruoyi.bas.srgvmap.domain.WcsSrgvMap;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* 小车点位地图表Mapper接口
|
||||
@@ -62,4 +64,8 @@ public interface WcsSrgvMapMapper
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteWcsSrgvMapByGuids(String[] guids);
|
||||
|
||||
List<WcsSrgvMap> selectNotInsite( @Param("cache") String cache,
|
||||
@Param("floor") Integer floor,
|
||||
@Param("sites") ArrayList<String> sites);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.ruoyi.bas.srgvmap.service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import com.ruoyi.bas.srgvmap.domain.WcsSrgvMap;
|
||||
|
||||
@@ -62,4 +63,6 @@ public interface IWcsSrgvMapService
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteWcsSrgvMapByGuid(String guid);
|
||||
|
||||
List<WcsSrgvMap> selectNotInsite(String cache, Integer floor, ArrayList<String> sites);
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ package com.ruoyi.bas.srgvmap.service;
|
||||
import com.ruoyi.bas.srgvmap.domain.WcsSrgvMap;
|
||||
import com.ruoyi.device.srgv.domain.DeviceSrgv;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface RoadCacheService {
|
||||
@@ -18,11 +17,13 @@ public interface RoadCacheService {
|
||||
|
||||
/**
|
||||
* 处理地图
|
||||
*
|
||||
* @param arrByRoadSite
|
||||
* @param deviceSrgv
|
||||
* @param floor
|
||||
* @return
|
||||
*/
|
||||
int[][] handleMap(Map<String, WcsSrgvMap> arrByRoadSite, DeviceSrgv deviceSrgv);
|
||||
int[][] handleMap(Map<String, WcsSrgvMap> arrByRoadSite, DeviceSrgv deviceSrgv, Integer floor);
|
||||
/**
|
||||
* 根据x y z 获取指定位置的缓存
|
||||
* @param x
|
||||
|
||||
@@ -41,29 +41,27 @@ public class RoadCacheServiceImpl implements RoadCacheService {
|
||||
for (WcsSrgvMap wcsSrgvMap : wcsSrgvMaps) {
|
||||
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;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[][] handleMap(Map<String, WcsSrgvMap> maps, DeviceSrgv deviceSrgv) {
|
||||
public int[][] handleMap(Map<String, WcsSrgvMap> maps, DeviceSrgv deviceSrgv, Integer floor) {
|
||||
|
||||
//1.锁定其他车任务路径
|
||||
lockedOtherCarQueuePath(maps, deviceSrgv);
|
||||
//2.锁定无任务小车当前位置
|
||||
lockedOtherCarCurrSite(maps, deviceSrgv);
|
||||
// lockedOtherCarCurrSite(maps, deviceSrgv);
|
||||
//3.锁定离线小车当前位置
|
||||
lockedOfflineCarCurrSite(maps, deviceSrgv);
|
||||
|
||||
maps.put("tsj", maps.get("07050" + floor));
|
||||
//4.锁定满货位的位置 TODO 是否存在移库影响效率
|
||||
int[][] mapsInt = new int[50][50];
|
||||
for (String site : maps.keySet()) {
|
||||
WcsSrgvMap wcsSrgvMap = maps.get(site);
|
||||
mapsInt[wcsSrgvMap.getX()][wcsSrgvMap.getY()] = wcsSrgvMap.getValue();
|
||||
if (wcsSrgvMap.getAxy().equals("11,8")){
|
||||
|
||||
if (wcsSrgvMap.getAxy().equals("11,9")) {
|
||||
System.err.println(wcsSrgvMap.getValue());
|
||||
}
|
||||
}
|
||||
@@ -77,7 +75,7 @@ public class RoadCacheServiceImpl implements RoadCacheService {
|
||||
param.setY(y);
|
||||
param.setZ(z);
|
||||
List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapMapper.selectWcsSrgvMapList(param);
|
||||
if (CollUtil.isNotEmpty(wcsSrgvMaps)){
|
||||
if (CollUtil.isNotEmpty(wcsSrgvMaps)) {
|
||||
return wcsSrgvMaps.get(0);
|
||||
}
|
||||
return null;
|
||||
@@ -142,8 +140,18 @@ public class RoadCacheServiceImpl implements RoadCacheService {
|
||||
//添加其他小车路径列表
|
||||
HashSet<String> otherCarSiteList = new HashSet<>();
|
||||
for (WcsSrgvQueue wcsSrgvQueue : otherCarQueue) {
|
||||
if (wcsSrgvQueue.getPathInfo()!=null) {
|
||||
otherCarSiteList.addAll(Arrays.asList(wcsSrgvQueue.getPathInfo().split(",")));
|
||||
if (wcsSrgvQueue.getPathInfo() != null) {
|
||||
//根据小车当前点位去除已走路径
|
||||
DeviceSrgv otherCarCurrStatus = deviceSrgvService.selectDeviceSrgvByGuid(wcsSrgvQueue.getAgvId());
|
||||
String currSite = otherCarCurrStatus.getCurrSite();
|
||||
List<String> allSiteList = Arrays.asList(wcsSrgvQueue.getPathInfo().split(","));
|
||||
int i = allSiteList.indexOf(currSite);
|
||||
if (i == -1) {
|
||||
i = 0;
|
||||
}
|
||||
List<String> resultSiteList = allSiteList.subList(i, allSiteList.size());
|
||||
otherCarSiteList.addAll(resultSiteList);
|
||||
//otherCarSiteList.addAll(Arrays.asList(wcsSrgvQueue.getPathInfo().split(",")));
|
||||
}
|
||||
}
|
||||
//锁定其他小车路径
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.ruoyi.bas.srgvmap.service.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.ruoyi.bas.srgvmap.mapper.WcsSrgvMapMapper;
|
||||
@@ -9,25 +11,23 @@ import com.ruoyi.bas.srgvmap.service.IWcsSrgvMapService;
|
||||
|
||||
/**
|
||||
* 小车点位地图表Service业务层处理
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2025-11-21
|
||||
*/
|
||||
@Service
|
||||
public class WcsSrgvMapServiceImpl implements IWcsSrgvMapService
|
||||
{
|
||||
public class WcsSrgvMapServiceImpl implements IWcsSrgvMapService {
|
||||
@Autowired
|
||||
private WcsSrgvMapMapper wcsSrgvMapMapper;
|
||||
|
||||
/**
|
||||
* 查询小车点位地图表
|
||||
*
|
||||
*
|
||||
* @param guid 小车点位地图表主键
|
||||
* @return 小车点位地图表
|
||||
*/
|
||||
@Override
|
||||
public WcsSrgvMap selectWcsSrgvMapByGuid(String guid)
|
||||
{
|
||||
public WcsSrgvMap selectWcsSrgvMapByGuid(String guid) {
|
||||
return wcsSrgvMapMapper.selectWcsSrgvMapByGuid(guid);
|
||||
}
|
||||
|
||||
@@ -38,61 +38,61 @@ public class WcsSrgvMapServiceImpl implements IWcsSrgvMapService
|
||||
|
||||
/**
|
||||
* 查询小车点位地图表列表
|
||||
*
|
||||
*
|
||||
* @param wcsSrgvMap 小车点位地图表
|
||||
* @return 小车点位地图表
|
||||
*/
|
||||
@Override
|
||||
public List<WcsSrgvMap> selectWcsSrgvMapList(WcsSrgvMap wcsSrgvMap)
|
||||
{
|
||||
public List<WcsSrgvMap> selectWcsSrgvMapList(WcsSrgvMap wcsSrgvMap) {
|
||||
return wcsSrgvMapMapper.selectWcsSrgvMapList(wcsSrgvMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增小车点位地图表
|
||||
*
|
||||
*
|
||||
* @param wcsSrgvMap 小车点位地图表
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int insertWcsSrgvMap(WcsSrgvMap wcsSrgvMap)
|
||||
{
|
||||
public int insertWcsSrgvMap(WcsSrgvMap wcsSrgvMap) {
|
||||
return wcsSrgvMapMapper.insertWcsSrgvMap(wcsSrgvMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改小车点位地图表
|
||||
*
|
||||
*
|
||||
* @param wcsSrgvMap 小车点位地图表
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int updateWcsSrgvMap(WcsSrgvMap wcsSrgvMap)
|
||||
{
|
||||
public int updateWcsSrgvMap(WcsSrgvMap wcsSrgvMap) {
|
||||
return wcsSrgvMapMapper.updateWcsSrgvMap(wcsSrgvMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除小车点位地图表
|
||||
*
|
||||
*
|
||||
* @param guids 需要删除的小车点位地图表主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteWcsSrgvMapByGuids(String[] guids)
|
||||
{
|
||||
public int deleteWcsSrgvMapByGuids(String[] guids) {
|
||||
return wcsSrgvMapMapper.deleteWcsSrgvMapByGuids(guids);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除小车点位地图表信息
|
||||
*
|
||||
*
|
||||
* @param guid 小车点位地图表主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteWcsSrgvMapByGuid(String guid)
|
||||
{
|
||||
public int deleteWcsSrgvMapByGuid(String guid) {
|
||||
return wcsSrgvMapMapper.deleteWcsSrgvMapByGuid(guid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<WcsSrgvMap> selectNotInsite(String cache, Integer floor, ArrayList<String> sites) {
|
||||
return wcsSrgvMapMapper.selectNotInsite(cache, floor, sites);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ public class Constant {
|
||||
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 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 RE_ASSIGN_URL = WMS_BASE_URL+"reAssign";
|
||||
public static final String RE_MATERIAL_URL = WMS_BASE_URL+"reMaterial";
|
||||
|
||||
@@ -68,4 +68,6 @@ public interface DeviceCdzMapper
|
||||
* @return
|
||||
*/
|
||||
List<DeviceCdz> selectDeviceCdzHasSRgvList();
|
||||
|
||||
void updateDeviceCdzSpare(DeviceCdz deviceCdz);
|
||||
}
|
||||
|
||||
@@ -68,4 +68,6 @@ public interface IDeviceCdzService
|
||||
* @return
|
||||
*/
|
||||
List<DeviceCdz> selectDeviceCdzHasSRgvList();
|
||||
|
||||
void updateDeviceCdzSpare(DeviceCdz deviceCdz);
|
||||
}
|
||||
|
||||
@@ -100,4 +100,9 @@ public class DeviceCdzServiceImpl implements IDeviceCdzService
|
||||
public List<DeviceCdz> selectDeviceCdzHasSRgvList() {
|
||||
return deviceCdzMapper.selectDeviceCdzHasSRgvList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDeviceCdzSpare(DeviceCdz deviceCdz) {
|
||||
deviceCdzMapper.updateDeviceCdzSpare(deviceCdz);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,4 +94,5 @@ public class MydoJob extends BaseEntity
|
||||
|
||||
private String productId;
|
||||
private String productName;
|
||||
private String classId;
|
||||
}
|
||||
|
||||
@@ -81,4 +81,12 @@ public interface MydoJobMapper
|
||||
List<MydoJob> selectMydoJobFinishList(MydoJob mydoJob);
|
||||
|
||||
MydoJob selectRunningMydoJobByExitList(@Param("exitList") List<String> exitList);
|
||||
|
||||
List<MydoJob> selectMydoJobOut();
|
||||
|
||||
MydoJob selectMydoJobByTrayCode(String trayCode);
|
||||
|
||||
Integer selectExit(String ssj);
|
||||
|
||||
Integer selectMydoJobCount();
|
||||
}
|
||||
|
||||
@@ -80,4 +80,12 @@ public interface IMydoJobService
|
||||
MydoJob selectRunningMydoJobByExitList(List<String> strings);
|
||||
|
||||
AjaxResult manualCallback(String jobId);
|
||||
|
||||
List<MydoJob> selectMydoJobOut();
|
||||
|
||||
MydoJob selectMydoJobByTrayCode(String trayCode);
|
||||
|
||||
Integer selectExit(String ssj);
|
||||
|
||||
Integer selectMydoJobCount();
|
||||
}
|
||||
|
||||
@@ -173,4 +173,24 @@ public class MydoJobServiceImpl implements IMydoJobService
|
||||
}
|
||||
return AjaxResult.error("手动回调失败");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MydoJob> selectMydoJobOut() {
|
||||
return mydoJobMapper.selectMydoJobOut();
|
||||
}
|
||||
|
||||
@Override
|
||||
public MydoJob selectMydoJobByTrayCode(String trayCode) {
|
||||
return mydoJobMapper.selectMydoJobByTrayCode(trayCode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer selectExit(String ssj) {
|
||||
return mydoJobMapper.selectExit(ssj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer selectMydoJobCount() {
|
||||
return mydoJobMapper.selectMydoJobCount();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,11 +9,10 @@ import com.ruoyi.queue.srgv.domain.WcsSrgvQueue;
|
||||
* @author ruoyi
|
||||
* @date 2025-11-21
|
||||
*/
|
||||
public interface WcsSrgvQueueMapper
|
||||
{
|
||||
public interface WcsSrgvQueueMapper {
|
||||
/**
|
||||
* 查询四向小车任务队列
|
||||
*
|
||||
*
|
||||
* @param guid 四向小车任务队列主键
|
||||
* @return 四向小车任务队列
|
||||
*/
|
||||
@@ -28,12 +27,9 @@ public interface WcsSrgvQueueMapper
|
||||
public WcsSrgvQueue selectWcsSrgvQueueByFloor(String theFloor);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 查询四向小车任务队列列表
|
||||
*
|
||||
*
|
||||
* @param wcsSrgvQueue 四向小车任务队列
|
||||
* @return 四向小车任务队列集合
|
||||
*/
|
||||
@@ -41,7 +37,7 @@ public interface WcsSrgvQueueMapper
|
||||
|
||||
/**
|
||||
* 新增四向小车任务队列
|
||||
*
|
||||
*
|
||||
* @param wcsSrgvQueue 四向小车任务队列
|
||||
* @return 结果
|
||||
*/
|
||||
@@ -49,7 +45,7 @@ public interface WcsSrgvQueueMapper
|
||||
|
||||
/**
|
||||
* 修改四向小车任务队列
|
||||
*
|
||||
*
|
||||
* @param wcsSrgvQueue 四向小车任务队列
|
||||
* @return 结果
|
||||
*/
|
||||
@@ -57,7 +53,7 @@ public interface WcsSrgvQueueMapper
|
||||
|
||||
/**
|
||||
* 删除四向小车任务队列
|
||||
*
|
||||
*
|
||||
* @param guid 四向小车任务队列主键
|
||||
* @return 结果
|
||||
*/
|
||||
@@ -65,9 +61,18 @@ public interface WcsSrgvQueueMapper
|
||||
|
||||
/**
|
||||
* 批量删除四向小车任务队列
|
||||
*
|
||||
*
|
||||
* @param guids 需要删除的数据主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteWcsSrgvQueueByGuids(String[] guids);
|
||||
|
||||
String selectMinCountJob(@Param("list") List<String> outModelSSJ);
|
||||
|
||||
Integer selectTsj();
|
||||
|
||||
Integer selectByCaogoPlaceSite(String siteId);
|
||||
|
||||
Integer selectByEndSite();
|
||||
|
||||
}
|
||||
|
||||
@@ -77,4 +77,12 @@ public interface IWcsSrgvQueueService
|
||||
* @param taskNo
|
||||
*/
|
||||
public WcsSrgvQueue insertHistory(String taskNo);
|
||||
|
||||
String selectMinCountJob(List<String> outModelSSJ);
|
||||
|
||||
Integer selectTsj();
|
||||
|
||||
Integer selectByCaogoPlaceSite(String siteId);
|
||||
|
||||
Integer selectByEndSite();
|
||||
}
|
||||
|
||||
@@ -115,6 +115,29 @@ public class WcsSrgvQueueServiceImpl implements IWcsSrgvQueueService
|
||||
return wcsSrgvQueueMapper.deleteWcsSrgvQueueByGuid(guid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String selectMinCountJob( List<String> outModelSSJ) {
|
||||
return wcsSrgvQueueMapper.selectMinCountJob(outModelSSJ) ;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer selectTsj() {
|
||||
|
||||
return wcsSrgvQueueMapper.selectTsj();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer selectByCaogoPlaceSite(String siteId) {
|
||||
return wcsSrgvQueueMapper.selectByCaogoPlaceSite(siteId);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Integer selectByEndSite() {
|
||||
return wcsSrgvQueueMapper.selectByEndSite();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public WcsSrgvQueue insertHistory(String taskNo) {
|
||||
WcsSrgvQueue wcsSrgvQueue = wcsSrgvQueueMapper.selectWcsSrgvQueueByTaskNo(taskNo);
|
||||
|
||||
@@ -65,4 +65,6 @@ public interface TsjDeviceExecutionQueueMapper
|
||||
* @return 提升机执行队列
|
||||
*/
|
||||
TsjDeviceExecutionQueue selectTsjDeviceExecutionQueueByRwh(Long taskNo);
|
||||
|
||||
Integer selectCount();
|
||||
}
|
||||
|
||||
@@ -64,4 +64,6 @@ public interface ITsjDeviceExecutionQueueService
|
||||
* @return
|
||||
*/
|
||||
TsjDeviceExecutionQueue selectTsjDeviceExecutionQueueByRwh(Long taskNo);
|
||||
|
||||
Integer selectCount();
|
||||
}
|
||||
|
||||
@@ -104,5 +104,10 @@ public class TsjDeviceExecutionQueueServiceImpl implements ITsjDeviceExecutionQu
|
||||
return tsjDeviceExecutionQueueMapper.selectTsjDeviceExecutionQueueByRwh(taskNo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer selectCount() {
|
||||
return tsjDeviceExecutionQueueMapper.selectCount();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -67,12 +67,12 @@ public class PlcCdzRead implements Runnable {
|
||||
}
|
||||
|
||||
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";
|
||||
if (read2.IsSuccess) {
|
||||
ddsx1 = SoftBasic.ByteToHexString(read2.Content);
|
||||
deviceCdz.setStatus(ParseUtil.optInt(0, ddsx1));
|
||||
deviceCdz.setModel(ParseUtil.optInt(2, ddsx1));
|
||||
// deviceCdz.setModel(ParseUtil.optInt(2, ddsx1));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -79,6 +79,12 @@ public class PlcSrgvRead implements Runnable {
|
||||
if (read1.IsSuccess) {
|
||||
setValueByByte1(read1.Content, deviceSrgv);
|
||||
}
|
||||
|
||||
OperateResultExOne<byte[]> read5 = modbusTcpNet.Read("4081", (short) 2);//2400-2414
|
||||
if (read5.IsSuccess) {
|
||||
setValueByByte5(read1.Content, deviceSrgv);
|
||||
}
|
||||
|
||||
//读取二段任务 小车是否接收完成1段作业
|
||||
OperateResultExOne<byte[]> read3 = modbusTcpNet.Read("1000", (short) 2);//2400-2414
|
||||
if (read3.IsSuccess) {
|
||||
@@ -90,6 +96,12 @@ public class PlcSrgvRead implements Runnable {
|
||||
if (read2.IsSuccess) {
|
||||
setValueByByte2(read2.Content, deviceSrgv);
|
||||
}
|
||||
|
||||
// //读取双字,路径
|
||||
OperateResultExOne<byte[]> read4 = modbusTcpNet.Read("6000", (short) 800);// 5000-5799 路径 400个
|
||||
if (read4.IsSuccess) {
|
||||
setValueByByte4(read4.Content, deviceSrgv);
|
||||
}
|
||||
}
|
||||
|
||||
//单字
|
||||
@@ -104,6 +116,8 @@ public class PlcSrgvRead implements Runnable {
|
||||
agvData.setAlarm(Convert.toInt(byteTransform.TransInt16(content, 6)));
|
||||
// agvData.setStatus(0);
|
||||
agvData.setStatus(Convert.toInt(byteTransform.TransInt16(content, 8)));
|
||||
//载货标志
|
||||
// agvData.setCargoFlag(Convert.toInt(byteTransform.TransInt32(content[1], 13)));
|
||||
//接收完成标志
|
||||
// agvData.setFinish(Convert.toInt(byteTransform.TransInt16(content, 10)));
|
||||
// agvData.setFinish(0);
|
||||
@@ -123,6 +137,15 @@ public class PlcSrgvRead implements Runnable {
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void setValueByByte5(byte[] content, DeviceSrgv agvData) {
|
||||
int cargoFlag = content[27] & 0xFF;
|
||||
agvData.setCargoFlag(cargoFlag);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//单字
|
||||
private void setValueByByte3(byte[] content, DeviceSrgv agvData) {
|
||||
// agvData.setTaskType(0);
|
||||
@@ -150,6 +173,29 @@ public class PlcSrgvRead implements Runnable {
|
||||
agvData.setCurrFloor(floor);
|
||||
}
|
||||
|
||||
private void setValueByByte4(byte[] content, DeviceSrgv agvData) {
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < content.length; i += 4) {
|
||||
// 检查剩余字节是否足够4个
|
||||
if (i + 4 > content.length) break;
|
||||
// TODO 注意双字反转
|
||||
int value = byteTransform.TransInt32(content, i);
|
||||
|
||||
// 如果值为0,终止循环
|
||||
if (value == 0) {
|
||||
break;
|
||||
}
|
||||
sb.append(String.format("%06d", value)).append(","); // 用逗号分隔每个int值
|
||||
}
|
||||
|
||||
// 移除最后多余的 ","
|
||||
if (sb.length() > 0) {
|
||||
sb.setLength(sb.length() - 1);
|
||||
}
|
||||
agvData.setPath(sb.toString());
|
||||
}
|
||||
|
||||
public void ConnectServer() {
|
||||
modbusTcpNet = new ModbusTcpNet();//创建一个Modbus对象
|
||||
log.info("创建连接对象,IP{}", this.ip);
|
||||
|
||||
@@ -198,6 +198,7 @@ public class PathFinder {
|
||||
if (gCost[endX][endY] == Integer.MAX_VALUE) {
|
||||
List<int[]> path = new ArrayList<>();
|
||||
path.add(new int[]{-1, -1});
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
|
||||
@@ -68,6 +68,10 @@ public class PlcSsjRead implements Runnable {
|
||||
// 线体到位输送机
|
||||
readPlcOtherSsj(ssjDevice);
|
||||
break;
|
||||
case "4":
|
||||
// 线体到位输送机
|
||||
readPlcInDwSsj(ssjDevice);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,6 +90,18 @@ public class PlcSsjRead implements Runnable {
|
||||
}
|
||||
}
|
||||
|
||||
private void readPlcInDwSsj(DeviceSsj ssjDevice) {
|
||||
OperateResultExOne<byte[]> read2 = readWriteNet.Read(ssjDevice.getPlcDbReadAddress(), Short.parseShort("10"));
|
||||
String ddsx1 = "0";
|
||||
if (read2.IsSuccess) {
|
||||
ddsx1 = SoftBasic.ByteToHexString(read2.Content);
|
||||
ssjDevice.setKx(ParseUtil.optInt(4, ddsx1));
|
||||
ssjDevice.setDw(ParseUtil.optInt(6, ddsx1));
|
||||
ssjDevice.setTaskNo(ParseUtil.optDInt(0, ddsx1));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 其他输送机
|
||||
*
|
||||
@@ -99,6 +115,7 @@ public class PlcSsjRead implements Runnable {
|
||||
ssjDevice.setKx(ParseUtil.optInt(4, ddsx1));
|
||||
ssjDevice.setDw(ParseUtil.optInt(6, ddsx1));
|
||||
ssjDevice.setTaskNo(ParseUtil.optDInt(0, ddsx1));
|
||||
ssjDevice.setModel(ParseUtil.optInt(8, ddsx1));//出入库模式 1入 2出
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,8 @@ 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.service.ISrgvChargingJobService;
|
||||
import com.ruoyi.job.mapper.MydoJobMapper;
|
||||
import com.ruoyi.job.service.IMydoJobService;
|
||||
import com.ruoyi.queue.srgv.domain.WcsSrgvQueue;
|
||||
import com.ruoyi.queue.srgv.service.IWcsSrgvQueueService;
|
||||
import com.ruoyi.schedule.plcRead.cdz.PlcCdzRead;
|
||||
@@ -32,19 +34,22 @@ public class CdzThread implements Runnable {
|
||||
|
||||
public boolean isRun = true;
|
||||
|
||||
private final Integer LITTLE_BETTERY = 30;
|
||||
private final Integer LITTLE_BETTERY = 40;
|
||||
private final Integer MIDDLE_BETTERY = 70;
|
||||
|
||||
private final Integer MAX_BETTERY = 90;
|
||||
private final Integer JOB_BETTERY=50;
|
||||
private ISrgvChargingJobService chargingJobService;
|
||||
private IDeviceCdzService deviceCdzService;
|
||||
private IDeviceSrgvService deviceSrgvService;
|
||||
private IWcsSrgvQueueService wcsSrgvQueueService;
|
||||
public IMydoJobService mydoJobService;
|
||||
|
||||
public void init() {
|
||||
chargingJobService = SpringUtils.getBean(ISrgvChargingJobService.class);
|
||||
deviceCdzService = SpringUtils.getBean(IDeviceCdzService.class);
|
||||
deviceSrgvService = SpringUtils.getBean(IDeviceSrgvService.class);
|
||||
wcsSrgvQueueService = SpringUtils.getBean(IWcsSrgvQueueService.class);
|
||||
mydoJobService = SpringUtils.getBean(IMydoJobService.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -64,17 +69,17 @@ public class CdzThread implements Runnable {
|
||||
|
||||
|
||||
void dispatch() {
|
||||
|
||||
Integer count = mydoJobService.selectMydoJobCount();
|
||||
//获取低电量小车
|
||||
List<DeviceSrgv> littleBatterySRgv = new ArrayList<>();
|
||||
//获取中电量小车
|
||||
List<DeviceSrgv> middleBatterySRgv = new ArrayList<>();
|
||||
for (String sRgv : PlcSrgvRead.deviceSrgvMap.keySet()) {
|
||||
DeviceSrgv deviceSrgv = PlcSrgvRead.deviceSrgvMap.get(sRgv);
|
||||
if (deviceSrgv.getWorkMode() == 5 && deviceSrgv.getStatus() != 3) {
|
||||
if (deviceSrgv.getWorkMode() == 5 && deviceSrgv.getStatus() != 3 && deviceSrgv.getChargeFlag() != 2) {
|
||||
if (deviceSrgv.getBattery() <= LITTLE_BETTERY) {
|
||||
littleBatterySRgv.add(deviceSrgv);
|
||||
} else if (deviceSrgv.getBattery() <= MIDDLE_BETTERY) {
|
||||
} else if (deviceSrgv.getBattery() <= MIDDLE_BETTERY && count == 0) {
|
||||
middleBatterySRgv.add(deviceSrgv);
|
||||
}
|
||||
}
|
||||
@@ -92,22 +97,20 @@ public class CdzThread implements Runnable {
|
||||
}
|
||||
|
||||
//超过30分钟自动生成充电任务
|
||||
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());
|
||||
if (CollUtil.isNotEmpty(timeOutSrgvList)) {
|
||||
//生成充电任务
|
||||
createChargingInJob(timeOutSrgvList);
|
||||
}
|
||||
// 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());
|
||||
// if (CollUtil.isNotEmpty(timeOutSrgvList)) {
|
||||
// //生成充电任务
|
||||
// createChargingInJob(timeOutSrgvList);
|
||||
// }
|
||||
|
||||
|
||||
//充电任务下发
|
||||
//充电任务下发 查到充电任务并且充电桩未开启直接开启
|
||||
SrgvChargingJob srgvChargingJobParam = new SrgvChargingJob();
|
||||
srgvChargingJobParam.setChargingStatus("0");
|
||||
srgvChargingJobParam.setJobType("1");
|
||||
srgvChargingJobParam.setJobStatus("3");
|
||||
List<SrgvChargingJob> srgvChargingJobs = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParam);
|
||||
if (CollUtil.isNotEmpty(srgvChargingJobs)) {
|
||||
|
||||
for (SrgvChargingJob srgvChargingJob : srgvChargingJobs) {
|
||||
if ("0".equals(srgvChargingJob.getChargingStatus())) {
|
||||
String chargingSite = srgvChargingJob.getChargingSite();
|
||||
@@ -118,44 +121,29 @@ public class CdzThread implements Runnable {
|
||||
SendData qxSendData = new SendData(Tools.INT, 1);
|
||||
byte[] bytes = Tools.sendData(qxSendData);
|
||||
int i = PlcCdzRead.WriteToCdz(plcDbWriteAddress, bytes);
|
||||
// 查到充电任务,并且充电桩未开启就直接开启
|
||||
if (i == 1) {
|
||||
log.info("下发{" + deviceCdzs.get(0).getId() + "}号充电桩开启");
|
||||
srgvChargingJob.setChargingStatus("2");
|
||||
srgvChargingJob.setChargingDate(DateUtil.formatDateTime(DateUtil.date()));
|
||||
chargingJobService.updateSrgvChargingJob(srgvChargingJob);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//生成断电任务 有任务且电量大于50
|
||||
|
||||
//生成断电任务 有任务且电量大于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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
List<DeviceCdz> deviceCdzdd = deviceCdzService.selectDeviceCdzHasSRgvList();
|
||||
for (DeviceCdz deviceCdz : deviceCdzdd) {
|
||||
DeviceSrgv deviceSrgv = PlcSrgvRead.deviceSrgvMap.get(deviceCdz.getSpare1());
|
||||
if (((deviceSrgv.getBattery() >= JOB_BETTERY && count > 0) || deviceSrgv.getBattery() >= MAX_BETTERY)
|
||||
&& deviceSrgv.getWorkMode() == 5
|
||||
&& deviceSrgv.getChargeFlag() == 2 && deviceCdz.getStatus() == 1) {
|
||||
createChargingOutJob(PlcSrgvRead.deviceSrgvMap.get(deviceCdz.getSpare1()), deviceCdz);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,7 +154,6 @@ public class CdzThread implements Runnable {
|
||||
srgvChargingJobDdParam.setJobType("2");
|
||||
List<SrgvChargingJob> srgvChargingJobDds = chargingJobService.selectSrgvChargingJobList(srgvChargingJobDdParam);
|
||||
if (CollUtil.isNotEmpty(srgvChargingJobDds)) {
|
||||
|
||||
for (SrgvChargingJob srgvChargingJob : srgvChargingJobDds) {
|
||||
if ("0".equals(srgvChargingJob.getChargingStatus())) {
|
||||
String chargingSite = srgvChargingJob.getChargingSite();
|
||||
@@ -178,6 +165,7 @@ public class CdzThread implements Runnable {
|
||||
byte[] bytes = Tools.sendData(qxSendData);
|
||||
int i = PlcCdzRead.WriteToCdz(plcDbWriteAddress, bytes);
|
||||
if (i == 1) {
|
||||
log.info("下发{" + deviceCdzs.get(0).getId() + "}号充电桩关闭");
|
||||
srgvChargingJob.setChargingStatus("1");
|
||||
srgvChargingJob.setChargingDate(DateUtil.formatDateTime(DateUtil.date()));
|
||||
chargingJobService.updateSrgvChargingJob(srgvChargingJob);
|
||||
@@ -185,14 +173,11 @@ public class CdzThread implements Runnable {
|
||||
chargingJobService.insertHistory(srgvChargingJob.getGuid());
|
||||
chargingJobService.deleteSrgvChargingJobByGuid(srgvChargingJob.getGuid());
|
||||
deviceCdzs.get(0).setSpare1(null);
|
||||
deviceCdzService.updateDeviceCdz(deviceCdzs.get(0));
|
||||
deviceCdzService.updateDeviceCdzSpare(deviceCdzs.get(0));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -207,42 +192,43 @@ public class CdzThread implements Runnable {
|
||||
wcsChargingJob.setAgvId(deviceSrgv.getDeviceId().toString());
|
||||
List<SrgvChargingJob> srgvChargingJobs = chargingJobService.selectSrgvChargingJobList(wcsChargingJob);
|
||||
if (CollUtil.isEmpty(srgvChargingJobs)) {
|
||||
List<DeviceCdz> cdzList = deviceCdzService.selectDeviceCdzListNoSRgvId();
|
||||
if (CollUtil.isNotEmpty(cdzList)) {
|
||||
//寻找最接近的充电桩
|
||||
Integer floor = deviceSrgv.getCurrFloor();
|
||||
DeviceCdz cdz = null;
|
||||
Optional<DeviceCdz> min = cdzList.stream().filter(c -> c.getSzcs().equals(floor)).min((o1, o2) -> {
|
||||
Integer distance1 = Math.abs(o1.getSzcs());
|
||||
Integer distance2 = Math.abs(o2.getSzcs());
|
||||
return distance1 - distance2;
|
||||
});
|
||||
if (min.isPresent()) {
|
||||
cdz = min.get();
|
||||
}
|
||||
if (ObjUtil.isNotNull(cdz)) {
|
||||
//生成充电任务
|
||||
SrgvChargingJob srgvChargingJobParam = new SrgvChargingJob();
|
||||
srgvChargingJobParam.setAgvId(deviceSrgv.getDeviceId().toString());
|
||||
srgvChargingJobParam.setChargingSite("08020" + cdz.getSzcs());
|
||||
srgvChargingJobParam.setChargingId(cdz.getId().toString());
|
||||
List<SrgvChargingJob> wcsChargingJobs = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParam);
|
||||
if (CollUtil.isEmpty(wcsChargingJobs)) {
|
||||
SrgvChargingJob scj = new SrgvChargingJob();
|
||||
scj.setGuid(IdUtil.fastSimpleUUID());
|
||||
scj.setChargingSite(cdz.getSiteId());
|
||||
scj.setJobStatus("1");
|
||||
scj.setChargingStatus("0");
|
||||
scj.setStartDate(DateUtil.now());
|
||||
scj.setJobType("1");//到充电桩
|
||||
scj.setAgvId(deviceSrgv.getDeviceId().toString());
|
||||
scj.setChargingId(cdz.getId().toString());
|
||||
chargingJobService.insertSrgvChargingJob(scj);
|
||||
cdz.setSpare1(deviceSrgv.getDeviceId().toString());
|
||||
deviceCdzService.updateDeviceCdz(cdz);
|
||||
}
|
||||
DeviceCdz deviceCdz = deviceCdzService.selectDeviceCdzById(Long.valueOf(deviceSrgv.getDeviceId()));
|
||||
// List<DeviceCdz> cdzList = deviceCdzService.selectDeviceCdzListNoSRgvId();
|
||||
// if (CollUtil.isNotEmpty(deviceCdz)) {
|
||||
//寻找最接近的充电桩
|
||||
// Integer floor = deviceSrgv.getCurrFloor();
|
||||
// DeviceCdz cdz = null;
|
||||
// Optional<DeviceCdz> min = cdzList.stream().min((o1, o2) -> {
|
||||
// Integer distance1 = Math.abs(o1.getSzcs());
|
||||
// Integer distance2 = Math.abs(o2.getSzcs());
|
||||
// return distance1 - distance2;
|
||||
// });
|
||||
// if (min.isPresent()) {
|
||||
// cdz = min.get();
|
||||
// }
|
||||
if (ObjUtil.isNotNull(deviceCdz)) {
|
||||
//生成充电任务
|
||||
SrgvChargingJob srgvChargingJobParam = new SrgvChargingJob();
|
||||
srgvChargingJobParam.setAgvId(deviceSrgv.getDeviceId().toString());
|
||||
srgvChargingJobParam.setChargingSite("08020" + deviceCdz.getSzcs());
|
||||
srgvChargingJobParam.setChargingId(deviceCdz.getId().toString());
|
||||
List<SrgvChargingJob> wcsChargingJobs = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParam);
|
||||
if (CollUtil.isEmpty(wcsChargingJobs)) {
|
||||
SrgvChargingJob scj = new SrgvChargingJob();
|
||||
scj.setGuid(IdUtil.fastSimpleUUID());
|
||||
scj.setChargingSite(deviceCdz.getSiteId());
|
||||
scj.setJobStatus("1");
|
||||
scj.setChargingStatus("0");
|
||||
scj.setStartDate(DateUtil.now());
|
||||
scj.setJobType("1");//到充电桩
|
||||
scj.setAgvId(deviceSrgv.getDeviceId().toString());
|
||||
scj.setChargingId(deviceCdz.getId().toString());
|
||||
chargingJobService.insertSrgvChargingJob(scj);
|
||||
deviceCdz.setSpare1(deviceSrgv.getDeviceId().toString());
|
||||
deviceCdzService.updateDeviceCdz(deviceCdz);
|
||||
}
|
||||
}
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -265,7 +251,7 @@ public class CdzThread implements Runnable {
|
||||
srgvChargingJobParamOut.setJobType("2");
|
||||
List<SrgvChargingJob> srgvChargingJobOut = chargingJobService.selectSrgvChargingJobList(srgvChargingJobParamOut);
|
||||
|
||||
if (CollUtil.isNotEmpty(srgvChargingJobs)&&CollUtil.isEmpty(srgvChargingJobOut)) {
|
||||
if (CollUtil.isNotEmpty(srgvChargingJobs) && CollUtil.isEmpty(srgvChargingJobOut)) {
|
||||
SrgvChargingJob scj = srgvChargingJobs.get(0);
|
||||
|
||||
//插入历史
|
||||
|
||||
@@ -51,7 +51,9 @@ public class MonitoringThread implements Runnable {
|
||||
}
|
||||
for (String srgvCode : PlcSrgvRead.deviceSrgvMap.keySet()) {
|
||||
DeviceSrgv deviceSrgv = PlcSrgvRead.deviceSrgvMap.get(srgvCode);
|
||||
deviceSrgvService.updateDeviceSrgv(deviceSrgv);
|
||||
if (!deviceSrgv.getCurrSite().equals("000000")){
|
||||
deviceSrgvService.updateDeviceSrgv(deviceSrgv);
|
||||
}
|
||||
}
|
||||
for (String tsjCode : PlcTsjRead.deviceTsjMap.keySet()) {
|
||||
DeviceTsj deviceTsj = PlcTsjRead.deviceTsjMap.get(tsjCode);
|
||||
@@ -59,6 +61,8 @@ public class MonitoringThread implements Runnable {
|
||||
}
|
||||
for (String cdzCode : PlcCdzRead.deviceCdzMap.keySet()) {
|
||||
DeviceCdz deviceCdz = PlcCdzRead.deviceCdzMap.get(cdzCode);
|
||||
deviceCdz.setSpare1(null);
|
||||
deviceCdz.setModel(deviceCdz.getStatus());
|
||||
deviceCdzService.updateDeviceCdz(deviceCdz);
|
||||
}
|
||||
try {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -124,46 +124,58 @@ public class SsjThread implements Runnable {
|
||||
}
|
||||
|
||||
void inDispatch1(DeviceSsj deviceSsj) {
|
||||
if (deviceSsj.getRkqq() == 1 && StrUtil.isNotBlank(deviceSsj.getTrayCode())) {
|
||||
//todo 查是否为入库模式,不是退回,是否超重
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
map.put("trayCode", deviceSsj.getTrayCode());
|
||||
//拉取
|
||||
AjaxResult ajaxResult = apiService.createInMydoJob(map);
|
||||
if (ajaxResult.isSuccess()) {
|
||||
//拿到正常作业,插到wcs作业表,下发给输送机任务号,覆盖任务号
|
||||
MydoJob mydoJob = BeanUtil.toBean(ajaxResult.get("data"), MydoJob.class);
|
||||
mydoJob.setStatus("1");
|
||||
mydoJob.setExecutionPhase("1");
|
||||
mydoJob.setCreateTime(new Date());
|
||||
if ("GS1002".equals(deviceSsj.getDeviceCode())) {
|
||||
mydoJob.setEntranceId("L1004");
|
||||
} else {
|
||||
mydoJob.setEntranceId("L1005");
|
||||
}
|
||||
// 插入入库作业,并且根据作业直接下发 ,下发完毕直接修改执行阶段
|
||||
MydoJob mydoJob1 = new MydoJob();
|
||||
mydoJob1.setTaskNo(mydoJob.getTaskNo());
|
||||
List<MydoJob> mydoJobs = mydoJobService.selectMydoJobList(mydoJob1);
|
||||
if (mydoJobs.size() > 0) {
|
||||
return;
|
||||
}
|
||||
mydoJobService.insertMydoJob(mydoJob);
|
||||
int i = writeToSsj(deviceSsj.getPlcDbWriteAddress(), mydoJob.getTaskNo(), 1, 1);
|
||||
if (deviceSsj.getRkqq() == 1 && StrUtil.isNotBlank(deviceSsj.getTrayCode().trim())) {
|
||||
String trayCode = deviceSsj.getTrayCode().trim();
|
||||
MydoJob getMydoJob = mydoJobService.selectMydoJobByTrayCode(trayCode);
|
||||
if (getMydoJob != null && deviceSsj.getTaskNo() < 1000) {
|
||||
int i = writeToSsj(deviceSsj.getPlcDbWriteAddress(), getMydoJob.getTaskNo(), 1, 1);
|
||||
if (i == 1) {
|
||||
mydoJob.setStatus("3");
|
||||
mydoJobService.updateMydoJob(mydoJob);
|
||||
log.info(deviceSsj.getDeviceCode() + "输送机下发任务号成功:{}", mydoJob.getTaskNo());
|
||||
getMydoJob.setStatus("3");
|
||||
mydoJobService.updateMydoJob(getMydoJob);
|
||||
log.info(deviceSsj.getDeviceCode() + "输送机下发任务号成功:{}", getMydoJob.getTaskNo());
|
||||
}
|
||||
} else {
|
||||
int i = writeToSsj(deviceSsj.getPlcDbWriteAddress(), "0", 2, 2);
|
||||
if (i == 1) {
|
||||
log.info(deviceSsj.getDeviceCode() + "未查到该托盘码作业,下发退回,去向2");
|
||||
//todo 查是否为入库模式,不是退回,是否超重
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
map.put("trayCode", deviceSsj.getTrayCode());
|
||||
//拉取
|
||||
AjaxResult ajaxResult = apiService.createInMydoJob(map);
|
||||
if (ajaxResult.isSuccess()) {
|
||||
//拿到正常作业,插到wcs作业表,下发给输送机任务号,覆盖任务号
|
||||
MydoJob mydoJob = BeanUtil.toBean(ajaxResult.get("data"), MydoJob.class);
|
||||
mydoJob.setStatus("1");
|
||||
mydoJob.setExecutionPhase("1");
|
||||
mydoJob.setCreateTime(new Date());
|
||||
mydoJob.setTheFloor(mydoJob.getClassId());
|
||||
mydoJob.setTrayCode(trayCode);
|
||||
if ("GS1002".equals(deviceSsj.getDeviceCode())) {
|
||||
mydoJob.setEntranceId("L1004");
|
||||
} else {
|
||||
mydoJob.setEntranceId("L1005");
|
||||
}
|
||||
// 插入入库作业,并且根据作业直接下发 ,下发完毕直接修改执行阶段
|
||||
MydoJob mydoJob1 = new MydoJob();
|
||||
mydoJob1.setTaskNo(mydoJob.getTaskNo());
|
||||
mydoJob1.setTrayCode(mydoJob.getTrayCode());
|
||||
List<MydoJob> mydoJobs = mydoJobService.selectMydoJobList(mydoJob1);
|
||||
if (mydoJobs.size() > 0) {
|
||||
return;
|
||||
}
|
||||
mydoJobService.insertMydoJob(mydoJob);
|
||||
int i = writeToSsj(deviceSsj.getPlcDbWriteAddress(), mydoJob.getTaskNo(), 1, 1);
|
||||
if (i == 1) {
|
||||
mydoJob.setStatus("3");
|
||||
mydoJobService.updateMydoJob(mydoJob);
|
||||
log.info(deviceSsj.getDeviceCode() + "输送机下发任务号成功:{}", mydoJob.getTaskNo());
|
||||
}
|
||||
} else {
|
||||
int i = writeToSsj(deviceSsj.getPlcDbWriteAddress(), "0", 2, 2);
|
||||
if (i == 1) {
|
||||
log.info(deviceSsj.getDeviceCode() + "未查到该托盘码作业,下发退回,去向2 条码" + deviceSsj.getTrayCode());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -171,11 +183,28 @@ public class SsjThread implements Runnable {
|
||||
void inDispatch2(DeviceSsj deviceSsj) {
|
||||
if (deviceSsj.getDw() == 1 && deviceSsj.getTaskNo() > 1000) {
|
||||
|
||||
MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo((long) deviceSsj.getTaskNo());
|
||||
if (mydoJob != null) {
|
||||
mydoJob.setExecutionPhase("2");
|
||||
mydoJobService.updateMydoJob(mydoJob);
|
||||
MydoJob mydoJob1 = mydoJobService.selectMydoJobByTaskNo(Long.valueOf(deviceSsj.getTaskNo()));
|
||||
if (mydoJob1.getCargoSpaceId() != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,8 @@ import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
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.utils.spring.SpringUtils;
|
||||
import com.ruoyi.device.srgv.domain.DeviceSrgv;
|
||||
@@ -25,7 +27,9 @@ import com.ruoyi.schedule.plcRead.util.Tools;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
public class TsjThread implements Runnable {
|
||||
@@ -35,13 +39,17 @@ public class TsjThread implements Runnable {
|
||||
private ITsjDeviceExecutionQueueFinishService tsjDeviceExecutionQueueFinishService;
|
||||
private IWcsPortService wcsPortService;
|
||||
private IWcsSrgvQueueService wcsSrgvQueueService;
|
||||
public IMydoJobService mydoJobService;
|
||||
private IMydoJobService mydoJobService;
|
||||
private IWcsSrgvMapService wcsSrgvMapService;
|
||||
|
||||
|
||||
public void init() {
|
||||
tsjDeviceExecutionQueueService = SpringUtils.getBean(ITsjDeviceExecutionQueueService.class);
|
||||
tsjDeviceExecutionQueueFinishService = SpringUtils.getBean(ITsjDeviceExecutionQueueFinishService.class);
|
||||
wcsPortService = SpringUtils.getBean(IWcsPortService.class);
|
||||
wcsSrgvQueueService = SpringUtils.getBean(IWcsSrgvQueueService.class);
|
||||
wcsSrgvMapService = SpringUtils.getBean(IWcsSrgvMapService.class);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -76,7 +84,7 @@ public class TsjThread implements Runnable {
|
||||
* 1、下发完成 如果设备状态为 2-工作 ,触发方式 2-自动,任务号大于999,则代表任务下发完成
|
||||
*
|
||||
* */
|
||||
if (czfs == 2 && sbzt == 2 && rwh > 999) {
|
||||
if (czfs == 2 && sbzt == 2 && rwh > 500) {
|
||||
// finishSend(rwh, tsj);
|
||||
}
|
||||
|
||||
@@ -84,11 +92,16 @@ public class TsjThread implements Runnable {
|
||||
* 2、四向车任务生成 2-工作 ,触发方式 2-自动,任务号大于999
|
||||
*
|
||||
* */
|
||||
if (czfs == 2 && sbzt == 2 && jdbz == 4 && rwh > 999) {
|
||||
createSRgvQueue(rwh, tsj);
|
||||
if (czfs == 2 && sbzt == 2 && jdbz == 4 && rwh > 500) {
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -96,7 +109,7 @@ public class TsjThread implements Runnable {
|
||||
* 2、任务完成
|
||||
*
|
||||
* */
|
||||
if (czfs == 2 && sbzt == 2 && jdbz == 5 && rwh > 999) {
|
||||
if (czfs == 2 && sbzt == 2 && jdbz == 5 && rwh > 500) {
|
||||
//任务完成
|
||||
finishTask(rwh, tsj);
|
||||
}
|
||||
@@ -117,8 +130,7 @@ public class TsjThread implements Runnable {
|
||||
private void createSRgvQueueTsjQd(Long rwh, DeviceTsj tsj) {
|
||||
for (String sRgv : PlcSrgvRead.deviceSrgvMap.keySet()) {
|
||||
DeviceSrgv deviceSrgv = PlcSrgvRead.deviceSrgvMap.get(sRgv);
|
||||
if (deviceSrgv.getCurrSite().equals("09050" + 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);
|
||||
DeviceTsj deviceTsj = PlcTsjRead.deviceTsjMap.get(Convert.toStr(1));
|
||||
byte[] bytes = Tools.sendData(rwlxSendData);
|
||||
@@ -147,11 +159,15 @@ public class TsjThread implements Runnable {
|
||||
WcsSrgvQueue sRgvQueueParam = new WcsSrgvQueue();
|
||||
sRgvQueueParam.setTaskNo(Convert.toStr(rwh));
|
||||
sRgvQueueParam.setEndSite(Convert.toStr("tsj"));
|
||||
sRgvQueueParam.setIssued("1");
|
||||
sRgvQueueParam.setExecutionStatus("3");
|
||||
List<WcsSrgvQueue> wcsSrgvQueues = wcsSrgvQueueService.selectWcsSrgvQueueList(sRgvQueueParam);
|
||||
if (CollUtil.isEmpty(wcsSrgvQueues)) {
|
||||
return;
|
||||
}
|
||||
WcsSrgvQueue wcsSrgvQueue = wcsSrgvQueueService.insertHistory(Convert.toStr(rwh));
|
||||
String cargoPickSite = wcsSrgvQueue.getCargoPickSite();
|
||||
String cargoPlaceSite = wcsSrgvQueue.getCargoPlaceSite();
|
||||
//修改起点终点
|
||||
if (ObjUtil.isNotEmpty(wcsSrgvQueue)) {
|
||||
wcsSrgvQueue.setCreateDate(DateUtil.formatDateTime(DateUtil.date()));
|
||||
@@ -175,7 +191,6 @@ public class TsjThread implements Runnable {
|
||||
endSite = wcsSrgvQueue.getCargoPlaceSite();
|
||||
break;
|
||||
case "3":
|
||||
//充电
|
||||
break;
|
||||
case "4":
|
||||
//点到点
|
||||
@@ -192,10 +207,52 @@ public class TsjThread implements Runnable {
|
||||
log.info("任务类型错误");
|
||||
}
|
||||
break;
|
||||
case "8":
|
||||
//换层任务直接变成点到点任务
|
||||
switch (wcsSrgvQueue.getTaskType()) {
|
||||
case "1":
|
||||
WcsSrgvMap wcsSrgvMapq = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPickSite);
|
||||
WcsSrgvMap wcsSrgvMapf = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPlaceSite);
|
||||
if (wcsSrgvMapq != null && wcsSrgvMapf != null) {
|
||||
Integer count = wcsSrgvQueueService.selectByEndSite();
|
||||
List<DeviceSrgv> collect = PlcSrgvRead.deviceSrgvMap.values().stream().filter(d ->
|
||||
d.getCurrSite().equals(cargoPickSite))
|
||||
.collect(Collectors.toList());
|
||||
if (count > 0 || !collect.isEmpty()) {
|
||||
wcsSrgvQueue.setEndSite("070301");
|
||||
} else {
|
||||
wcsSrgvQueue.setEndSite(cargoPickSite);
|
||||
}
|
||||
|
||||
wcsSrgvQueue.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.setEndSite(endSite);
|
||||
wcsSrgvQueueService.updateWcsSrgvQueue(wcsSrgvQueue);
|
||||
@@ -209,7 +266,8 @@ public class TsjThread implements Runnable {
|
||||
private void createQueue(DeviceTsj tsj) {
|
||||
for (String sRgv : PlcSrgvRead.deviceSrgvMap.keySet()) {
|
||||
DeviceSrgv deviceSrgv = PlcSrgvRead.deviceSrgvMap.get(sRgv);
|
||||
if (deviceSrgv.getSpare2().equals("1") && deviceSrgv.getTaskNo() > 0) {
|
||||
Integer count = tsjDeviceExecutionQueueService.selectCount();
|
||||
if (deviceSrgv.getSpare2().equals("1") && deviceSrgv.getTaskNo() > 0 && count == 0) {
|
||||
//请求进入输送机
|
||||
WcsSrgvQueue sRgvQueueParam = new WcsSrgvQueue();
|
||||
sRgvQueueParam.setAgvId(Convert.toStr(deviceSrgv.getDeviceId()));
|
||||
|
||||
@@ -80,7 +80,7 @@ public class GetDeviceSrgvMap {
|
||||
AgvDto dto = new AgvDto();
|
||||
dto.setId(d.getDeviceId() == null ? "" : String.format("%04d", d.getDeviceId()));
|
||||
dto.setTaskNo(d.getTaskNo() == null ? "" : String.valueOf(d.getTaskNo()));
|
||||
dto.setIsThere((d.getWorkPhase() >= 3 && d.getWorkPhase() < 6 ? "1" : "0"));
|
||||
dto.setIsThere(d.getCargoFlag()==256?"1":"0");
|
||||
Integer wp = d.getWorkPhase();
|
||||
String status = "0";
|
||||
if (wp != null) {
|
||||
@@ -90,6 +90,9 @@ public class GetDeviceSrgvMap {
|
||||
}
|
||||
dto.setStatus(status);
|
||||
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.setAlarmMsg(DictUtils.getDictLabel("srgv_alarm", d.getAlarm() == null ? "" : String.valueOf(d.getAlarm())));
|
||||
if (d.getTaskNo() != null && d.getTaskNo() > 0) {
|
||||
@@ -132,6 +135,9 @@ public class GetDeviceSrgvMap {
|
||||
private String isThere;
|
||||
private String status;
|
||||
private String location;
|
||||
private String row;
|
||||
private String column;
|
||||
private String layer;
|
||||
private String alarm;
|
||||
private String alarmMsg;
|
||||
private String trayCode;
|
||||
|
||||
@@ -99,8 +99,17 @@ public class GetDeviceSsjMap {
|
||||
dto.setRotationDirection(calcRotationDirection(d.getTaskNo()));
|
||||
dto.setAlarm(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()));
|
||||
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) {
|
||||
try {
|
||||
MydoJob job = mydoJobService.selectMydoJobByTaskNo(Long.valueOf(d.getTaskNo()));
|
||||
@@ -128,16 +137,10 @@ public class GetDeviceSsjMap {
|
||||
*/
|
||||
private String calcRotationDirection(int taskNo) {
|
||||
try {
|
||||
if (taskNo <= 0) return "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) {
|
||||
if (taskNo <= 0) {
|
||||
return "0";
|
||||
}
|
||||
return val >= 20 ? "2" : "1";
|
||||
return taskNo <= 50000 ? "1" : "2";
|
||||
} catch (Exception e) {
|
||||
return "0";
|
||||
}
|
||||
|
||||
@@ -80,7 +80,7 @@ public class GetDeviceTsjMap {
|
||||
String code = entry.getKey();
|
||||
DeviceTsj d = entry.getValue();
|
||||
TsjDto dto = new TsjDto();
|
||||
dto.setId(String.valueOf(d.getId()));
|
||||
dto.setId("TW001");
|
||||
dto.setLayer(d.getDqcs() == null ? "" : String.valueOf(d.getDqcs()));
|
||||
dto.setTaskNo(d.getRwh() == null ? "" : String.valueOf(d.getRwh()));
|
||||
dto.setZxjd(d.getJdbz() == null ? "" : String.valueOf(d.getJdbz()));
|
||||
|
||||
@@ -96,6 +96,7 @@ public class Wcs2wmsgetEmptyCargoSpace {
|
||||
dto.setTrayCode(getText(node, "trayCode"));
|
||||
dto.setProductCode(getText(node, "productCode"));
|
||||
dto.setProductName(getText(node, "productName"));
|
||||
dto.setCargoSpaceId(getText(node, "cargoSpaceId"));
|
||||
return dto;
|
||||
}
|
||||
|
||||
@@ -125,5 +126,6 @@ public class Wcs2wmsgetEmptyCargoSpace {
|
||||
private String trayCode;
|
||||
private String productCode;
|
||||
private String productName;
|
||||
private String cargoSpaceId;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,9 +6,9 @@ spring:
|
||||
druid:
|
||||
#主数据信息
|
||||
master:
|
||||
url: jdbc:sqlserver://127.0.0.1:1433;databaseName=FT546-WCS;
|
||||
url: jdbc:sqlserver://127.0.0.1:1433;databaseName=FT546-wcs;
|
||||
username: sa
|
||||
password: 123456
|
||||
password: Flrd0914.
|
||||
# 从库数据源
|
||||
slave:
|
||||
# 从数据源开关/默认关闭
|
||||
|
||||
@@ -34,7 +34,7 @@ server:
|
||||
# 日志配置
|
||||
logging:
|
||||
level:
|
||||
com.ruoyi: debug
|
||||
com.ruoyi: info
|
||||
org.springframework: warn
|
||||
|
||||
# 用户配置
|
||||
@@ -64,7 +64,7 @@ spring:
|
||||
devtools:
|
||||
restart:
|
||||
# 热部署开关
|
||||
enabled: true
|
||||
enabled: false
|
||||
# redis 配置
|
||||
redis:
|
||||
# 地址
|
||||
|
||||
@@ -161,4 +161,29 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
#{guid}
|
||||
</foreach>
|
||||
</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>
|
||||
|
||||
@@ -123,4 +123,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
<update id="updateDeviceCdzSpare" parameterType="DeviceCdz">
|
||||
update device_cdz set spare1=null where id=#{id}
|
||||
</update>
|
||||
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -25,13 +25,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="theFloor" column="the_floor" />
|
||||
<result property="productId" column="product_id" />
|
||||
<result property="productName" column="product_name" />
|
||||
<result property="trayCode" column="tray_code" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectMydoJobVo">
|
||||
select job_id, status, task_no, roadway_id, cargo_space_id, target_roadway_id, target_cargo_space_id, priority, execution_phase, in_or_out, create_time, start_time, finish_time, entrance_id, exit_id, warehouse_id, fault_flag,the_floor,product_id,product_name from mydo_job_wcs
|
||||
select job_id, status, task_no, roadway_id, cargo_space_id, target_roadway_id, target_cargo_space_id, priority, execution_phase, in_or_out, create_time, start_time, finish_time, entrance_id, exit_id, warehouse_id, fault_flag,the_floor,product_id,product_name,tray_code from mydo_job_wcs
|
||||
</sql>
|
||||
<sql id="selectMydoJobFinishVo">
|
||||
select job_id, status, task_no, roadway_id, cargo_space_id, target_roadway_id, target_cargo_space_id, priority, execution_phase, in_or_out, create_time, start_time, finish_time, entrance_id, exit_id, warehouse_id, fault_flag,the_floor from mydo_job_wcs_finish
|
||||
select job_id, status, task_no, roadway_id, cargo_space_id, target_roadway_id, target_cargo_space_id, priority, execution_phase, in_or_out, create_time, start_time, finish_time, entrance_id, exit_id, warehouse_id, fault_flag,the_floor,product_id,product_name,tray_code from mydo_job_wcs_finish
|
||||
</sql>
|
||||
|
||||
<select id="selectMydoJobList" parameterType="MydoJob" resultMap="MydoJobResult">
|
||||
@@ -55,6 +56,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="theFloor != null and theFloor != ''"> and the_floor = #{theFloor}</if>
|
||||
<if test="productId != null and productId != ''"> and product_id = #{productId}</if>
|
||||
<if test="productName != null and productName != ''"> and product_name = #{productName}</if>
|
||||
<if test="trayCode != null and trayCode != ''"> and tray_code = #{trayCode}</if>
|
||||
|
||||
</where>
|
||||
</select>
|
||||
@@ -118,6 +120,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="warehouseId != null">warehouse_id,</if>
|
||||
<if test="faultFlag != null">fault_flag,</if>
|
||||
<if test="theFloor != null">the_floor,</if>
|
||||
<if test="trayCode != null">tray_code,</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="jobId != null">#{jobId},</if>
|
||||
@@ -138,6 +141,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="warehouseId != null">#{warehouseId},</if>
|
||||
<if test="faultFlag != null">#{faultFlag},</if>
|
||||
<if test="theFloor != null">#{theFloor},</if>
|
||||
<if test="trayCode != null">#{trayCode},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
<insert id="insertHistory">
|
||||
@@ -244,4 +248,67 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
and status = 3
|
||||
order by priority desc,create_time
|
||||
</select>
|
||||
|
||||
<select id="selectMydoJobOut" resultMap="MydoJobResult">
|
||||
WITH floor_group AS (
|
||||
SELECT
|
||||
b.cargo_space_id,
|
||||
b.group_coding_no,
|
||||
b.the_floor,
|
||||
b.group_coding,
|
||||
a.task_no AS task_no,
|
||||
a.job_id AS job_id,
|
||||
a.in_or_out, -- 之前新增的字段
|
||||
a.target_cargo_space_id, -- 新增字段:加入target_cargo_space_id
|
||||
ROW_NUMBER() OVER (PARTITION BY b.the_floor ORDER BY b.group_coding DESC) AS rn
|
||||
FROM
|
||||
mydo_job_wcs a
|
||||
INNER JOIN bas_cargo_space b
|
||||
ON a.cargo_space_id = b.cargo_space_id
|
||||
AND a.the_floor = b.the_floor
|
||||
WHERE
|
||||
a.in_or_out >= 20
|
||||
AND a.status = '1'
|
||||
GROUP BY
|
||||
b.group_coding_no,
|
||||
b.cargo_space_id,
|
||||
b.the_floor,
|
||||
b.group_coding,
|
||||
a.task_no,
|
||||
a.job_id,
|
||||
a.create_time,
|
||||
a.in_or_out, -- 之前新增的分组字段
|
||||
a.target_cargo_space_id -- 分组字段中新增:必须加入GROUP BY
|
||||
)
|
||||
SELECT
|
||||
cargo_space_id,
|
||||
group_coding_no,
|
||||
the_floor,
|
||||
task_no,
|
||||
job_id,
|
||||
in_or_out, -- 之前新增的展示字段
|
||||
target_cargo_space_id -- 最终查询结果中显示该字段
|
||||
FROM
|
||||
floor_group
|
||||
WHERE
|
||||
rn <= 1
|
||||
ORDER BY
|
||||
group_coding DESC;
|
||||
|
||||
</select>
|
||||
<select id="selectMydoJobByTrayCode" resultMap="MydoJobResult">
|
||||
<include refid="selectMydoJobVo"/>
|
||||
where tray_code =#{trayCode}
|
||||
</select>
|
||||
|
||||
<select id="selectExit" parameterType="string" resultType="java.lang.Integer">
|
||||
select count(1) from mydo_job_wcs where in_or_out>=20 and exit_id = #{exitId}
|
||||
|
||||
</select>
|
||||
|
||||
<select id="selectMydoJobCount" resultType="java.lang.Integer">
|
||||
select count(1) from mydo_job_wcs
|
||||
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -121,6 +121,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
|
||||
<select id="selectCount" resultType="java.lang.Integer">
|
||||
select count(1)
|
||||
from tsj_device_execution_queue
|
||||
|
||||
</select>
|
||||
|
||||
<update id="updateTsjDeviceExecutionQueue" parameterType="TsjDeviceExecutionQueue">
|
||||
update tsj_device_execution_queue
|
||||
<trim prefix="SET" suffixOverrides=",">
|
||||
|
||||
@@ -85,7 +85,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
|
||||
<select id="selectWcsSrgvQueueByFloor" parameterType="String" resultMap="WcsSrgvQueueResult">
|
||||
<include refid="selectWcsSrgvQueueVo"/>
|
||||
where default07 =#{theFloor}
|
||||
where default07 =#{theFloor} and default07 !='1'
|
||||
</select>
|
||||
|
||||
<insert id="insertWcsSrgvQueue" parameterType="WcsSrgvQueue">
|
||||
@@ -192,4 +192,40 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
<select id="selectMinCountJob" parameterType="list" resultType="string">
|
||||
<choose>
|
||||
<when test="list == null or list.size() == 0">
|
||||
SELECT '' AS result_site
|
||||
</when>
|
||||
<otherwise>
|
||||
select top(1) site_id from
|
||||
(select '050101' as site_id,isnull(count(1),0) as num from wcs_srgv_queue where cargo_place_site ='050101'
|
||||
union
|
||||
select '070101' as site_id,isnull(count(1),0) as num from wcs_srgv_queue where cargo_place_site ='070101')r
|
||||
where r.site_id in
|
||||
<foreach collection="list" item="site" open="(" separator="," close=")">
|
||||
#{site}
|
||||
</foreach>
|
||||
order by num
|
||||
|
||||
</otherwise>
|
||||
</choose>
|
||||
</select>
|
||||
|
||||
|
||||
<select id="selectTsj" resultType="java.lang.Integer" >
|
||||
select count(1) from wcs_srgv_queue where end_site='tsj'
|
||||
|
||||
</select>
|
||||
|
||||
<select id="selectByCaogoPlaceSite" resultType="java.lang.Integer" parameterType="string">
|
||||
select count(1) from wcs_srgv_queue where cargo_place_site=#{siteId}
|
||||
</select>
|
||||
|
||||
<select id="selectByEndSite" resultType="java.lang.Integer" >
|
||||
select count(1) from wcs_srgv_queue where end_site='070101' or end_site ='050101'
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -157,7 +157,6 @@ export default {
|
||||
{ key: 'kx', label: '空闲', value: d.kx, dict: 'ssj_kx' },
|
||||
{ key: 'dw', label: '到位', value: d.dw, dict: 'ssj_dw' },
|
||||
{ key: 'exception', label: '异常', value: d.exception, dict: 'ssj_ex'},
|
||||
|
||||
]
|
||||
}
|
||||
if (dev.kind === 'srgv') {
|
||||
|
||||
@@ -9,7 +9,7 @@ const CompressionPlugin = require('compression-webpack-plugin')
|
||||
|
||||
const name = process.env.VUE_APP_TITLE || 'FORTUCKY WCS SYSTEM' // 网页标题
|
||||
|
||||
const baseUrl = 'http://localhost:8081' // 后端接口地址(你的后端端口是8081)
|
||||
const baseUrl = 'http://192.168.188.236:8081' // 后端接口地址(你的后端端口是8081)
|
||||
|
||||
const port = process.env.port || process.env.npm_config_port || 80 // 前端端口
|
||||
|
||||
|
||||
Reference in New Issue
Block a user