ctu入库相关流程修改
This commit is contained in:
@@ -21,6 +21,13 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public interface IApiService
|
public interface IApiService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求入库
|
||||||
|
* @param mydoJob
|
||||||
|
* @return 返回入库口位置
|
||||||
|
*/
|
||||||
|
public MydoJob requestEnter(MydoJob mydoJob);
|
||||||
/**
|
/**
|
||||||
* 获取任务列表
|
* 获取任务列表
|
||||||
* @param mydoJob
|
* @param mydoJob
|
||||||
|
|||||||
@@ -47,6 +47,14 @@ public class ApiServiceImpl implements IApiService {
|
|||||||
private IAgvQueueService agvQueueService;
|
private IAgvQueueService agvQueueService;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MydoJob requestEnter(MydoJob mydoJob) {
|
||||||
|
RequestLog requestLog = requestLogService.getRequestLog(GET_MYDOJOB_URL, "请求入库", JSONUtil.toJsonStr(mydoJob));
|
||||||
|
String responseBody = requestLog.getResponseBody();
|
||||||
|
InterfaceReceive bean = JSONUtil.toBean(responseBody, InterfaceReceive.class);
|
||||||
|
return JSONUtil.toBean(JSONUtil.toJsonStr(bean.getData()), MydoJob.class);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<MydoJob> getMydoJobList(MydoJob mydoJob) {
|
public List<MydoJob> getMydoJobList(MydoJob mydoJob) {
|
||||||
RequestLog requestLog = requestLogService.getRequestLog(GET_MYDOJOB_URL, "获取任务", JSONUtil.toJsonStr(mydoJob));
|
RequestLog requestLog = requestLogService.getRequestLog(GET_MYDOJOB_URL, "获取任务", JSONUtil.toJsonStr(mydoJob));
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ public class ThreadOperationController {
|
|||||||
private ScheduleThread scheduleThread;
|
private ScheduleThread scheduleThread;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 开启线程
|
* 开启plc读取线程
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@@ -28,6 +28,18 @@ public class ThreadOperationController {
|
|||||||
return AjaxResult.success();
|
return AjaxResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 开启调度线程
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@RequestMapping("/startAllThread2")
|
||||||
|
//@PreAuthorize("@ss.hasPermi('device:operation:start')")
|
||||||
|
public AjaxResult startAllThread2() {
|
||||||
|
scheduleThread.startAllThread2();
|
||||||
|
return AjaxResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关闭线程
|
* 关闭线程
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
package com.ruoyi.device.ssj.domain;
|
package com.ruoyi.device.ssj.domain;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||||
import com.ruoyi.common.annotation.Excel;
|
import com.ruoyi.common.annotation.Excel;
|
||||||
@@ -11,6 +14,9 @@ import com.ruoyi.common.core.domain.BaseEntity;
|
|||||||
* @author ruoyi
|
* @author ruoyi
|
||||||
* @date 2025-07-04
|
* @date 2025-07-04
|
||||||
*/
|
*/
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
public class DeviceSsj extends BaseEntity
|
public class DeviceSsj extends BaseEntity
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
@@ -48,15 +54,15 @@ public class DeviceSsj extends BaseEntity
|
|||||||
|
|
||||||
/** 入库请求 */
|
/** 入库请求 */
|
||||||
@Excel(name = "入库请求")
|
@Excel(name = "入库请求")
|
||||||
private Integer rkqq;
|
private int rkqq;
|
||||||
|
|
||||||
/** 空闲 */
|
/** 空闲 */
|
||||||
@Excel(name = "空闲")
|
@Excel(name = "空闲")
|
||||||
private Integer kx;
|
private int kx;
|
||||||
|
|
||||||
/** 到位 */
|
/** 到位 */
|
||||||
@Excel(name = "到位")
|
@Excel(name = "到位")
|
||||||
private Integer dw;
|
private int dw;
|
||||||
|
|
||||||
/** 条码 */
|
/** 条码 */
|
||||||
@Excel(name = "条码")
|
@Excel(name = "条码")
|
||||||
@@ -64,109 +70,7 @@ public class DeviceSsj extends BaseEntity
|
|||||||
|
|
||||||
/** 任务号 */
|
/** 任务号 */
|
||||||
@Excel(name = "任务号")
|
@Excel(name = "任务号")
|
||||||
private Integer taskNo;
|
private int taskNo;
|
||||||
|
|
||||||
public Long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(Long id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDeviceCode() {
|
|
||||||
return deviceCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDeviceCode(String deviceCode) {
|
|
||||||
this.deviceCode = deviceCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getType() {
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setType(String type) {
|
|
||||||
this.type = type;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getIpAddress() {
|
|
||||||
return ipAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setIpAddress(String ipAddress) {
|
|
||||||
this.ipAddress = ipAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPlcDbReadAddress() {
|
|
||||||
return plcDbReadAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPlcDbReadAddress(String plcDbReadAddress) {
|
|
||||||
this.plcDbReadAddress = plcDbReadAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getIsActive() {
|
|
||||||
return isActive;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setIsActive(String isActive) {
|
|
||||||
this.isActive = isActive;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPlcDbWriteAddress() {
|
|
||||||
return plcDbWriteAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPlcDbWriteAddress(String plcDbWriteAddress) {
|
|
||||||
this.plcDbWriteAddress = plcDbWriteAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getRkqq() {
|
|
||||||
return rkqq;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRkqq(Integer rkqq) {
|
|
||||||
this.rkqq = rkqq;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getKx() {
|
|
||||||
return kx;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setKx(Integer kx) {
|
|
||||||
this.kx = kx;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getDw() {
|
|
||||||
return dw;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDw(Integer dw) {
|
|
||||||
this.dw = dw;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getTrayCode() {
|
|
||||||
return trayCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTrayCode(String trayCode) {
|
|
||||||
this.trayCode = trayCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getTaskNo() {
|
|
||||||
return taskNo;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTaskNo(Integer taskNo) {
|
|
||||||
this.taskNo = taskNo;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import com.ruoyi.device.ssj.service.IDeviceSsjService;
|
|||||||
import com.ruoyi.schedule.plcRead.ssj.domain.PlcConnectInfo;
|
import com.ruoyi.schedule.plcRead.ssj.domain.PlcConnectInfo;
|
||||||
import com.ruoyi.schedule.plcRead.ssj.PlcRead;
|
import com.ruoyi.schedule.plcRead.ssj.PlcRead;
|
||||||
import com.ruoyi.schedule.plcRead.ssj.domain.CustomThread;
|
import com.ruoyi.schedule.plcRead.ssj.domain.CustomThread;
|
||||||
|
import com.ruoyi.schedule.scheduleTask.ssj.bs.BsInSsjThread;
|
||||||
|
import com.ruoyi.schedule.scheduleTask.ssj.js.JsInSsjThread;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -19,6 +21,9 @@ public class ScheduleThread {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IDeviceSsjService deviceSsjService;
|
private IDeviceSsjService deviceSsjService;
|
||||||
|
|
||||||
|
public CustomThread bsInSsjThread;
|
||||||
|
public CustomThread jsInSsjThread;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 项目初始化启动
|
* 项目初始化启动
|
||||||
*/
|
*/
|
||||||
@@ -37,6 +42,12 @@ public class ScheduleThread {
|
|||||||
PlcRead plcRead = new PlcRead(list,ssjPlcConnectInfo);
|
PlcRead plcRead = new PlcRead(list,ssjPlcConnectInfo);
|
||||||
Thread plcReadThread = new Thread(plcRead);
|
Thread plcReadThread = new Thread(plcRead);
|
||||||
customThread = new CustomThread(plcReadThread, plcRead);
|
customThread = new CustomThread(plcReadThread, plcRead);
|
||||||
|
|
||||||
|
//调度初始化
|
||||||
|
BsInSsjThread bsInSsjThread1 = new BsInSsjThread();
|
||||||
|
bsInSsjThread = new CustomThread(new Thread(bsInSsjThread1),bsInSsjThread1);
|
||||||
|
JsInSsjThread jsInSsjThread1 = new JsInSsjThread();
|
||||||
|
jsInSsjThread = new CustomThread(new Thread(jsInSsjThread1),bsInSsjThread1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -46,6 +57,11 @@ public class ScheduleThread {
|
|||||||
customThread.getThread().start();
|
customThread.getThread().start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void startAllThread2() {
|
||||||
|
bsInSsjThread.getThread().start();
|
||||||
|
jsInSsjThread.getThread().start();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 停止线程
|
* 停止线程
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -3,11 +3,13 @@ package com.ruoyi.schedule.scheduleTask.ssj.bs;
|
|||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
|
import cn.hutool.core.util.ObjUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.ruoyi.api.domain.agv.genAgvSchedulingTask.GenAgvSchedulingTaskRequest;
|
import com.ruoyi.api.domain.agv.genAgvSchedulingTask.GenAgvSchedulingTaskRequest;
|
||||||
import com.ruoyi.api.domain.agv.genAgvSchedulingTask.GenAgvSchedulingTaskResponse;
|
import com.ruoyi.api.domain.agv.genAgvSchedulingTask.GenAgvSchedulingTaskResponse;
|
||||||
import com.ruoyi.api.domain.wcs2wms.MydoJob;
|
import com.ruoyi.api.domain.wcs2wms.MydoJob;
|
||||||
import com.ruoyi.api.service.IApiService;
|
import com.ruoyi.api.service.IApiService;
|
||||||
|
import com.ruoyi.common.utils.spring.SpringUtils;
|
||||||
import com.ruoyi.device.agv.domain.AgvQueue;
|
import com.ruoyi.device.agv.domain.AgvQueue;
|
||||||
import com.ruoyi.device.agv.service.IAgvQueueService;
|
import com.ruoyi.device.agv.service.IAgvQueueService;
|
||||||
import com.ruoyi.device.ssj.domain.DeviceSsj;
|
import com.ruoyi.device.ssj.domain.DeviceSsj;
|
||||||
@@ -23,58 +25,143 @@ import java.util.List;
|
|||||||
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Component
|
public class BsInSsjThread implements Runnable {
|
||||||
public class BsInSsjThread {
|
|
||||||
|
|
||||||
public HashMap<String, List<String>> ssjCodeList;
|
public HashMap<String, List<String>> ssjCodeList;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private IApiService apiService;
|
private IApiService apiService;
|
||||||
@Resource
|
|
||||||
private IAgvQueueService agvQueueService;
|
private IAgvQueueService agvQueueService;
|
||||||
|
|
||||||
|
public boolean isRun = true;
|
||||||
|
|
||||||
|
|
||||||
@PostConstruct
|
|
||||||
public void init() {
|
public void init() {
|
||||||
//todo 获取设备编码列表
|
//todo 获取设备编码列表
|
||||||
ssjCodeList = new HashMap<>();
|
ssjCodeList = new HashMap<>();
|
||||||
|
log.info("初始化臂式入库输送机");
|
||||||
|
//入库口
|
||||||
ArrayList<String> ssjCodes = new ArrayList<>();
|
ArrayList<String> ssjCodes = new ArrayList<>();
|
||||||
ssjCodes.add("G1003");
|
ssjCodes.add("G1003");
|
||||||
ssjCodes.add("G1009");
|
ssjCodes.add("G1009");
|
||||||
ssjCodeList.put("in", ssjCodes);
|
ssjCodeList.put("in", ssjCodes);
|
||||||
|
//流利架
|
||||||
|
ArrayList<String> ssjCodes2 = new ArrayList<>();
|
||||||
|
ssjCodes2.add("LLJ1");
|
||||||
|
ssjCodes2.add("LLJ2");
|
||||||
|
ssjCodes2.add("LLJ3");
|
||||||
|
ssjCodes2.add("LLJ4");
|
||||||
|
ssjCodes2.add("LLJ5");
|
||||||
|
ssjCodeList.put("in2", ssjCodes2);
|
||||||
|
|
||||||
|
apiService = SpringUtils.getBean(IApiService.class);
|
||||||
|
agvQueueService = SpringUtils.getBean(IAgvQueueService.class);
|
||||||
|
log.info("初始化服务 {},{}", apiService, agvQueueService);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
for (String type : ssjCodeList.keySet()) {
|
init();
|
||||||
if ("in".equals(type)) {
|
while (isRun){
|
||||||
for (String ssjCode : ssjCodeList.get(type)) {
|
for (String type : ssjCodeList.keySet()) {
|
||||||
if (PlcRead.deviceMap.containsKey(ssjCode)) {
|
|
||||||
inDispatch(PlcRead.deviceMap.get(ssjCode));
|
switch ( type){
|
||||||
} else {
|
case "in":
|
||||||
log.error("设备不存在 ssjCode{}", ssjCode);
|
//正常入库
|
||||||
}
|
for (String ssjCode : ssjCodeList.get(type)) {
|
||||||
|
try {
|
||||||
|
if (PlcRead.deviceMap.containsKey(ssjCode)) {
|
||||||
|
inDispatch(PlcRead.deviceMap.get(ssjCode));
|
||||||
|
} else {
|
||||||
|
log.error("设备不存在 ssjCode{}", ssjCode);
|
||||||
|
}
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
log.error(e.getMessage(),e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "in2":
|
||||||
|
//流利架 空料箱入库
|
||||||
|
for (String lljCode : ssjCodeList.get(type)) {
|
||||||
|
try {
|
||||||
|
inLljDispatch(lljCode);
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
log.error(e.getMessage(),e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
|
Thread.sleep(3000);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 流利架空料箱入库
|
||||||
|
* @param lljCode
|
||||||
|
*/
|
||||||
|
private void inLljDispatch(String lljCode) {
|
||||||
|
//查询流利架未开始的作业
|
||||||
|
MydoJob mydoJobParam = new MydoJob();
|
||||||
|
mydoJobParam.setStatus("1");
|
||||||
|
mydoJobParam.setEntranceId(lljCode);
|
||||||
|
MydoJob mydoJob = apiService.requestEnter(mydoJobParam);
|
||||||
|
if (ObjUtil.isNotNull(mydoJob) && !"6".equals(mydoJob.getExecutionPhase())) {
|
||||||
|
//判断是否生成队列
|
||||||
|
AgvQueue agvQueueParam = new AgvQueue();
|
||||||
|
agvQueueParam.setWmsTaskNo(mydoJob.getTaskNo());
|
||||||
|
agvQueueParam.setPositionCode1(lljCode);
|
||||||
|
agvQueueParam.setStatus("0");
|
||||||
|
List<AgvQueue> agvQueues = agvQueueService.selectAgvQueueList(agvQueueParam);
|
||||||
|
if (CollUtil.isEmpty(agvQueues)) {
|
||||||
|
//生成agv队列
|
||||||
|
AgvQueue agvQueue = createAgvQueue(lljCode, mydoJob);
|
||||||
|
//请求任务生成
|
||||||
|
GenAgvSchedulingTaskResponse genAgvSchedulingTaskResponse = requestAgvQueue(mydoJob, agvQueue);
|
||||||
|
//修改wms任务状态
|
||||||
|
if (genAgvSchedulingTaskResponse.getCode() == 0) {
|
||||||
|
//修改ctu执行状态
|
||||||
|
agvQueue.setStatus("1");
|
||||||
|
agvQueueService.updateAgvQueue(agvQueue);
|
||||||
|
log.info("向CTU下入库库作业");
|
||||||
|
//修改mydoJob执行阶段
|
||||||
|
mydoJob.setExecutionPhase("6");
|
||||||
|
apiService.updateMydoJob(mydoJob);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
if (ObjUtil.isNull(mydoJob)){
|
||||||
|
log.info("无入库库作业 lljCode:{}", lljCode);
|
||||||
|
}
|
||||||
|
if ("6".equals(mydoJob.getExecutionPhase())) {
|
||||||
|
log.info("入库库作业已下发 taskNo:{}", mydoJob.getTaskNo());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 输送线入库
|
||||||
|
* @param inSsjDevice
|
||||||
|
*/
|
||||||
public void inDispatch(DeviceSsj inSsjDevice) {
|
public void inDispatch(DeviceSsj inSsjDevice) {
|
||||||
//如果入库请求1 并且 托盘码不为空
|
//如果入库请求1 并且 托盘码不为空
|
||||||
if (inSsjDevice.getRkqq() == 1 && StrUtil.isNotEmpty(inSsjDevice.getTrayCode())) {
|
if (inSsjDevice.getRkqq() == 1 && StrUtil.isNotEmpty(inSsjDevice.getTrayCode())) {
|
||||||
//根据入口,查询对应的入库作业
|
//根据入口,查询对应的入库作业
|
||||||
MydoJob mydoJobParam = new MydoJob();
|
MydoJob mydoJobParam = new MydoJob();
|
||||||
//mydoJobParam.setEntranceId(inSsjDevice.getDeviceCode());
|
|
||||||
mydoJobParam.setStatus("1");
|
mydoJobParam.setStatus("1");
|
||||||
mydoJobParam.setTrayCode(inSsjDevice.getTrayCode());
|
mydoJobParam.setTrayCode(inSsjDevice.getTrayCode());
|
||||||
List<MydoJob> mydoJobs = apiService.getMydoJobList(mydoJobParam);
|
MydoJob mydoJob = apiService.requestEnter(mydoJobParam);
|
||||||
if (CollUtil.isNotEmpty(mydoJobs)) {
|
if (ObjUtil.isNotNull(mydoJob) && !"6".equals(mydoJob.getExecutionPhase())){
|
||||||
MydoJob mydoJob = mydoJobs.get(0);
|
//通知wms 当前料箱的入库口
|
||||||
//修改mydojob入口
|
|
||||||
mydoJob.setEntranceId(inSsjDevice.getDeviceCode());
|
mydoJob.setEntranceId(inSsjDevice.getDeviceCode());
|
||||||
apiService.updateMydoJob(mydoJob);
|
apiService.updateMydoJob(mydoJob);
|
||||||
|
|
||||||
//判断是否生成队列
|
//判断是否生成队列
|
||||||
AgvQueue agvQueueParam = new AgvQueue();
|
AgvQueue agvQueueParam = new AgvQueue();
|
||||||
agvQueueParam.setWmsTaskNo(mydoJob.getTaskNo());
|
agvQueueParam.setWmsTaskNo(mydoJob.getTaskNo());
|
||||||
@@ -83,7 +170,7 @@ public class BsInSsjThread {
|
|||||||
List<AgvQueue> agvQueues = agvQueueService.selectAgvQueueList(agvQueueParam);
|
List<AgvQueue> agvQueues = agvQueueService.selectAgvQueueList(agvQueueParam);
|
||||||
if (CollUtil.isEmpty(agvQueues)) {
|
if (CollUtil.isEmpty(agvQueues)) {
|
||||||
//生成agv队列
|
//生成agv队列
|
||||||
AgvQueue agvQueue = createAgvQueue(inSsjDevice, mydoJob);
|
AgvQueue agvQueue = createAgvQueue(inSsjDevice.getDeviceCode(), mydoJob);
|
||||||
//请求任务生成
|
//请求任务生成
|
||||||
GenAgvSchedulingTaskResponse genAgvSchedulingTaskResponse = requestAgvQueue(mydoJob, agvQueue);
|
GenAgvSchedulingTaskResponse genAgvSchedulingTaskResponse = requestAgvQueue(mydoJob, agvQueue);
|
||||||
//修改wms任务状态
|
//修改wms任务状态
|
||||||
@@ -96,51 +183,28 @@ public class BsInSsjThread {
|
|||||||
mydoJob.setExecutionPhase("6");
|
mydoJob.setExecutionPhase("6");
|
||||||
apiService.updateMydoJob(mydoJob);
|
apiService.updateMydoJob(mydoJob);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
AgvQueue agvQueue = agvQueues.get(0);
|
|
||||||
//请求任务生成
|
|
||||||
GenAgvSchedulingTaskResponse genAgvSchedulingTaskResponse = requestAgvQueue(mydoJob, agvQueue);
|
|
||||||
//修改wms任务状态
|
|
||||||
if (genAgvSchedulingTaskResponse.getCode() == 0) {
|
|
||||||
//修改ctu执行状态
|
|
||||||
agvQueue.setStatus("1");
|
|
||||||
agvQueueService.updateAgvQueue(agvQueue);
|
|
||||||
log.info("向CTU下入库库作业");
|
|
||||||
//修改mydoJob执行阶段
|
|
||||||
mydoJob.setExecutionPhase("6");
|
|
||||||
apiService.updateMydoJob(mydoJob);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
mydoJobParam.setEntranceId(inSsjDevice.getDeviceCode());
|
|
||||||
mydoJobParam.setStatus("3");
|
|
||||||
mydoJobParam.setTrayCode(inSsjDevice.getTrayCode());
|
|
||||||
mydoJobs = apiService.getMydoJobList(mydoJobParam);
|
|
||||||
if (CollUtil.isNotEmpty(mydoJobs)) {
|
|
||||||
log.info("trayCode:{} 入库作业正在执行中", inSsjDevice.getTrayCode());
|
|
||||||
} else {
|
|
||||||
log.info("trayCode:{} 无入库作业", inSsjDevice.getTrayCode());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生成入库AGV队列
|
* 生成入库AGV队列
|
||||||
*
|
*
|
||||||
* @param ssjDevice
|
* @param positionCode1
|
||||||
* @param mydoJob
|
* @param mydoJob
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private AgvQueue createAgvQueue(DeviceSsj ssjDevice, MydoJob mydoJob) {
|
private AgvQueue createAgvQueue(String positionCode1, MydoJob mydoJob) {
|
||||||
//生成ctu执行队列
|
//生成ctu执行队列
|
||||||
AgvQueue agvQueue = new AgvQueue();
|
AgvQueue agvQueue = new AgvQueue();
|
||||||
String reqCode = IdUtil.fastSimpleUUID();
|
String reqCode = IdUtil.fastSimpleUUID();
|
||||||
agvQueue.setReqCode(reqCode);
|
agvQueue.setReqCode(reqCode);
|
||||||
agvQueue.setReqTime(DateUtil.formatDateTime(DateUtil.date()));
|
agvQueue.setReqTime(DateUtil.formatDateTime(DateUtil.date()));
|
||||||
agvQueue.setAgvType("CTU");
|
agvQueue.setAgvType("CTU");
|
||||||
agvQueue.setPositionCode1(mydoJob.getCargoSpaceId());
|
agvQueue.setPositionCode1(positionCode1);
|
||||||
agvQueue.setPositionCode2(ssjDevice.getDeviceCode());
|
agvQueue.setPositionCode2(mydoJob.getCargoSpaceId());
|
||||||
agvQueue.setTaskType("F01");
|
agvQueue.setTaskType("F01");
|
||||||
agvQueue.setCtnrType("0");
|
agvQueue.setCtnrType("0");
|
||||||
agvQueue.setCtnrCode("0");
|
agvQueue.setCtnrCode("0");
|
||||||
|
|||||||
@@ -3,7 +3,9 @@ package com.ruoyi.schedule.scheduleTask.ssj.js;
|
|||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
|
import cn.hutool.core.util.ObjUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.ruoyi.common.utils.spring.SpringUtils;
|
||||||
import com.ruoyi.device.agv.domain.AgvQueue;
|
import com.ruoyi.device.agv.domain.AgvQueue;
|
||||||
import com.ruoyi.device.agv.service.IAgvQueueService;
|
import com.ruoyi.device.agv.service.IAgvQueueService;
|
||||||
import com.ruoyi.api.domain.agv.genAgvSchedulingTask.GenAgvSchedulingTaskRequest;
|
import com.ruoyi.api.domain.agv.genAgvSchedulingTask.GenAgvSchedulingTaskRequest;
|
||||||
@@ -23,18 +25,16 @@ import java.util.List;
|
|||||||
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Component
|
public class JsInSsjThread implements Runnable {
|
||||||
public class JsInSsjThread {
|
|
||||||
|
|
||||||
public HashMap<String, List<String>> ssjCodeList;
|
public HashMap<String, List<String>> ssjCodeList;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private IApiService apiService;
|
private IApiService apiService;
|
||||||
@Resource
|
|
||||||
private IAgvQueueService agvQueueService;
|
private IAgvQueueService agvQueueService;
|
||||||
|
|
||||||
|
public boolean isRun = true;
|
||||||
|
|
||||||
|
|
||||||
@PostConstruct
|
|
||||||
public void init() {
|
public void init() {
|
||||||
//todo 获取设备编码列表
|
//todo 获取设备编码列表
|
||||||
ssjCodeList = new HashMap<>();
|
ssjCodeList = new HashMap<>();
|
||||||
@@ -47,19 +47,41 @@ public class JsInSsjThread {
|
|||||||
ssjCodes.add("G5009");
|
ssjCodes.add("G5009");
|
||||||
ssjCodes.add("G5018");
|
ssjCodes.add("G5018");
|
||||||
ssjCodeList.put("in", ssjCodes);
|
ssjCodeList.put("in", ssjCodes);
|
||||||
|
|
||||||
|
apiService = SpringUtils.getBean(IApiService.class);
|
||||||
|
agvQueueService = SpringUtils.getBean(IAgvQueueService.class);
|
||||||
|
log.info("初始化服务 {},{}", apiService, agvQueueService);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
for (String type : ssjCodeList.keySet()) {
|
init();
|
||||||
if ("in".equals(type)) {
|
while (isRun){
|
||||||
for (String ssjCode : ssjCodeList.get(type)) {
|
for (String type : ssjCodeList.keySet()) {
|
||||||
if (PlcRead.deviceMap.containsKey(ssjCode)) {
|
|
||||||
inDispatch(PlcRead.deviceMap.get(ssjCode));
|
switch ( type){
|
||||||
} else {
|
case "in":
|
||||||
log.error("设备不存在 ssjCode{}", ssjCode);
|
//正常入库 尾箱回流 物料入库 空料箱入库
|
||||||
}
|
for (String ssjCode : ssjCodeList.get(type)) {
|
||||||
|
try {
|
||||||
|
if (PlcRead.deviceMap.containsKey(ssjCode)) {
|
||||||
|
inDispatch(PlcRead.deviceMap.get(ssjCode));
|
||||||
|
} else {
|
||||||
|
log.error("设备不存在 ssjCode{}", ssjCode);
|
||||||
|
}
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
log.error(e.getMessage(),e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
|
Thread.sleep(3000);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -70,16 +92,13 @@ public class JsInSsjThread {
|
|||||||
if (inSsjDevice.getRkqq() == 1 && StrUtil.isNotEmpty(inSsjDevice.getTrayCode())) {
|
if (inSsjDevice.getRkqq() == 1 && StrUtil.isNotEmpty(inSsjDevice.getTrayCode())) {
|
||||||
//根据入口,查询对应的入库作业
|
//根据入口,查询对应的入库作业
|
||||||
MydoJob mydoJobParam = new MydoJob();
|
MydoJob mydoJobParam = new MydoJob();
|
||||||
//mydoJobParam.setEntranceId(inSsjDevice.getDeviceCode());
|
|
||||||
mydoJobParam.setStatus("1");
|
mydoJobParam.setStatus("1");
|
||||||
mydoJobParam.setTrayCode(inSsjDevice.getTrayCode());
|
mydoJobParam.setTrayCode(inSsjDevice.getTrayCode());
|
||||||
List<MydoJob> mydoJobs = apiService.getMydoJobList(mydoJobParam);
|
MydoJob mydoJob = apiService.requestEnter(mydoJobParam);
|
||||||
if (CollUtil.isNotEmpty(mydoJobs)) {
|
if (ObjUtil.isNotNull(mydoJob) && !"6".equals(mydoJob.getExecutionPhase())){
|
||||||
MydoJob mydoJob = mydoJobs.get(0);
|
//通知wms 当前料箱的入库口
|
||||||
//修改mydojob入口
|
|
||||||
mydoJob.setEntranceId(inSsjDevice.getDeviceCode());
|
mydoJob.setEntranceId(inSsjDevice.getDeviceCode());
|
||||||
apiService.updateMydoJob(mydoJob);
|
apiService.updateMydoJob(mydoJob);
|
||||||
|
|
||||||
//判断是否生成队列
|
//判断是否生成队列
|
||||||
AgvQueue agvQueueParam = new AgvQueue();
|
AgvQueue agvQueueParam = new AgvQueue();
|
||||||
agvQueueParam.setWmsTaskNo(mydoJob.getTaskNo());
|
agvQueueParam.setWmsTaskNo(mydoJob.getTaskNo());
|
||||||
@@ -101,32 +120,9 @@ public class JsInSsjThread {
|
|||||||
mydoJob.setExecutionPhase("6");
|
mydoJob.setExecutionPhase("6");
|
||||||
apiService.updateMydoJob(mydoJob);
|
apiService.updateMydoJob(mydoJob);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
AgvQueue agvQueue = agvQueues.get(0);
|
|
||||||
//请求任务生成
|
|
||||||
GenAgvSchedulingTaskResponse genAgvSchedulingTaskResponse = requestAgvQueue(mydoJob, agvQueue);
|
|
||||||
//修改wms任务状态
|
|
||||||
if (genAgvSchedulingTaskResponse.getCode() == 0) {
|
|
||||||
//修改ctu执行状态
|
|
||||||
agvQueue.setStatus("1");
|
|
||||||
agvQueueService.updateAgvQueue(agvQueue);
|
|
||||||
log.info("向CTU下入库库作业");
|
|
||||||
//修改mydoJob执行阶段
|
|
||||||
mydoJob.setExecutionPhase("6");
|
|
||||||
apiService.updateMydoJob(mydoJob);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
mydoJobParam.setEntranceId(inSsjDevice.getDeviceCode());
|
|
||||||
mydoJobParam.setStatus("3");
|
|
||||||
mydoJobParam.setTrayCode(inSsjDevice.getTrayCode());
|
|
||||||
mydoJobs = apiService.getMydoJobList(mydoJobParam);
|
|
||||||
if (CollUtil.isNotEmpty(mydoJobs)) {
|
|
||||||
log.info("trayCode:{} 入库作业正在执行中", inSsjDevice.getTrayCode());
|
|
||||||
} else {
|
|
||||||
log.info("trayCode:{} 无入库作业", inSsjDevice.getTrayCode());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ public class JsPickSsjTread {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Scheduled(fixedDelay = 5000)
|
|
||||||
public void run(){
|
public void run(){
|
||||||
for (String type : ssjCodeList.keySet()) {
|
for (String type : ssjCodeList.keySet()) {
|
||||||
if ("pick".equals(type)) {
|
if ("pick".equals(type)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user