入库写入任务号,盘点回流 出库回流写入任务号

This commit is contained in:
liuhanqing
2025-10-13 10:53:34 +08:00
parent a5bda35055
commit 4154cbe213
9 changed files with 88 additions and 14 deletions

View File

@@ -1,5 +1,6 @@
package com.ruoyi.api.controller; package com.ruoyi.api.controller;
import com.ruoyi.api.domain.SsjTaskNoParam;
import com.ruoyi.api.domain.wcs2wms.JobParam; import com.ruoyi.api.domain.wcs2wms.JobParam;
import com.ruoyi.api.domain.wcs2wms.ReceiveJob; import com.ruoyi.api.domain.wcs2wms.ReceiveJob;
import com.ruoyi.api.service.IApiService; import com.ruoyi.api.service.IApiService;

View File

@@ -0,0 +1,13 @@
package com.ruoyi.api.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SsjTaskNoParam {
private String taskNo;
private String deviceCode;
}

View File

@@ -1,6 +1,7 @@
package com.ruoyi.api.service; package com.ruoyi.api.service;
import com.ruoyi.api.domain.RequestLog; import com.ruoyi.api.domain.RequestLog;
import com.ruoyi.api.domain.SsjTaskNoParam;
import com.ruoyi.api.domain.agv.agvCallback.AgvCallbackRequest; import com.ruoyi.api.domain.agv.agvCallback.AgvCallbackRequest;
import com.ruoyi.api.domain.agv.agvCallback.AgvCallbackResponse; import com.ruoyi.api.domain.agv.agvCallback.AgvCallbackResponse;
import com.ruoyi.api.domain.agv.cancelTask.CancelTaskRequest; import com.ruoyi.api.domain.agv.cancelTask.CancelTaskRequest;
@@ -29,10 +30,18 @@ public interface IApiService
/** /**
* 根据条码请求入库 * 根据条码请求入库
*
* @param mydoJob * @param mydoJob
* @return 返回入库口位置 * @return 返回入库口位置
*/ */
public MydoJob requestEnterByTrayCode(MydoJob mydoJob); public MydoJob requestEnterByTrayCode(MydoJob mydoJob);
/**
* 根据任务号请求入库
*
* @param mydoJob
* @return
*/
public MydoJob requestEnterByTaskNo(MydoJob mydoJob);
/** /**
* 根据入口请求入库 * 根据入口请求入库
@@ -110,7 +119,7 @@ public interface IApiService
* @param param * @param param
* @return * @return
*/ */
public AjaxResult sendOutMydoJobStatus(Map<String, Object> param) ; public AjaxResult startMydoJobStatus(Map<String, Object> param) ;
/** /**

View File

@@ -33,8 +33,8 @@ import com.ruoyi.schedule.plcRead.ssj.PlcRead;
import com.ruoyi.schedule.plcRead.ssj.domain.SendData; import com.ruoyi.schedule.plcRead.ssj.domain.SendData;
import com.ruoyi.schedule.plcRead.util.Tools; import com.ruoyi.schedule.plcRead.util.Tools;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -78,6 +78,25 @@ public class ApiServiceImpl implements IApiService {
} }
/**
* 请求入库
*
* @param mydoJob
* @return 返回入库口位置
*/
@Override
public MydoJob requestEnterByTaskNo(MydoJob mydoJob) {
RequestLog requestLog = requestLogService.getRequestLog(REQUEST_ENTER_BY_TASK_NO, "根据条码请求入库", JSONUtil.toJsonStr(mydoJob));
if ("1".equals(requestLog.getIsSuccessful())) {
String responseBody = requestLog.getResponseBody();
InterfaceReceive bean = JSONUtil.toBean(responseBody, InterfaceReceive.class);
return JSONUtil.toBean(JSONUtil.toJsonStr(bean.getData()), MydoJob.class);
} else {
return null;
}
}
/** /**
* 请求入库 * 请求入库
* @param mydoJob * @param mydoJob
@@ -199,7 +218,7 @@ public class ApiServiceImpl implements IApiService {
* @return * @return
*/ */
@Override @Override
public AjaxResult sendOutMydoJobStatus(Map<String, Object> param) { public AjaxResult startMydoJobStatus(Map<String, Object> param) {
RequestLog requestLog = requestLogService.getRequestLog(SEND_TASK_STARTED, "发送任务开始信号", JSONUtil.toJsonStr(param)); RequestLog requestLog = requestLogService.getRequestLog(SEND_TASK_STARTED, "发送任务开始信号", JSONUtil.toJsonStr(param));
if ("1".equals(requestLog.getIsSuccessful())) { if ("1".equals(requestLog.getIsSuccessful())) {
return AjaxResult.success(); return AjaxResult.success();
@@ -245,7 +264,7 @@ public class ApiServiceImpl implements IApiService {
//通知wms //通知wms
param.put("taskNo", agvQueue.getWmsTaskNo()); param.put("taskNo", agvQueue.getWmsTaskNo());
param.put("wmsType", agvQueue.getWmsTaskType()); param.put("wmsType", agvQueue.getWmsTaskType());
sendOutMydoJobStatus(param); startMydoJobStatus(param);
break; break;
case "outbin": case "outbin":
//走出储位 //走出储位
@@ -396,7 +415,7 @@ public class ApiServiceImpl implements IApiService {
*/ */
@Override @Override
public AjaxResult receiveInMydoJob(ReceiveJob receiveInJob) { public AjaxResult receiveInMydoJob(ReceiveJob receiveInJob) {
AgvQueue agvQueue = createAgvQueue(receiveInJob.getEntranceId(),receiveInJob.getCargoSpaceId(),receiveInJob.getTrayCode(),receiveInJob.getTaskNo(),"1"); AgvQueue agvQueue = createAgvQueue(receiveInJob.getEntranceId(), receiveInJob.getCargoSpaceId(), receiveInJob.getTrayCode(), receiveInJob.getTaskNo(), "1");
if (agvQueue != null){ if (agvQueue != null){
return AjaxResult.success(); return AjaxResult.success();
}else { }else {
@@ -404,6 +423,24 @@ public class ApiServiceImpl implements IApiService {
} }
} }
@Scheduled(cron = "0/5 * * * * ?")
public void sendInSsjTaskNo(){
AgvQueue agvQueueParam = new AgvQueue();
agvQueueParam.setSsjTaskNo("0");
List<AgvQueue> agvQueues = agvQueueService.selectAgvQueueList(agvQueueParam);
for (AgvQueue agvQueue : agvQueues) {
//输送机写入任务号
DeviceSsj deviceSsj = PlcRead.deviceMap.get(agvQueue.getPositionCode1());
SendData rwh = new SendData(Tools.DINT, agvQueue.getWmsTaskNo());
byte[] bytes = Tools.sendData(rwh);
int i = PlcRead.WriteToSSJ(deviceSsj.getPlcDbWriteAddress(), bytes);
if (i==1){
agvQueue.setSsjTaskNo("1");
agvQueueService.updateAgvQueue(agvQueue);
}
}
}
/** /**
* 流利架出库确认,清空流利架状态信息 * 流利架出库确认,清空流利架状态信息
* @param jobParam * @param jobParam
@@ -484,6 +521,7 @@ public class ApiServiceImpl implements IApiService {
agvQueue.setStatus("0"); agvQueue.setStatus("0");
agvQueue.setTaskCode(taskCode); agvQueue.setTaskCode(taskCode);
agvQueue.setWmsTaskType(wmsTaskType); agvQueue.setWmsTaskType(wmsTaskType);
agvQueue.setSsjTaskNo("0");
agvQueueService.insertAgvQueue(agvQueue); agvQueueService.insertAgvQueue(agvQueue);
return agvQueue; return agvQueue;
} }

View File

@@ -20,6 +20,7 @@ public class Constant {
public static final String REQUEST_ENTER_BY_TRAYCODE = "http://localhost:8080/api2wms/requestEnterByTrayCode"; public static final String REQUEST_ENTER_BY_TRAYCODE = "http://localhost:8080/api2wms/requestEnterByTrayCode";
public static final String REQUEST_ENTER_BY_TASK_NO = "http://localhost:8080/api2wms/requestEnterByTaskNo";
public static final String REQUEST_ENTER_BY_ENTER_ID = "http://localhost:8080/api2wms/requestEnterByEnterId"; public static final String REQUEST_ENTER_BY_ENTER_ID = "http://localhost:8080/api2wms/requestEnterByEnterId";
public static final String JOB_FINISH_URL = "http://localhost:8080/api2wms/jobFinish"; public static final String JOB_FINISH_URL = "http://localhost:8080/api2wms/jobFinish";
public static final String CONTINUE_TASK_URL = "http://127.0.0.1:8081/rcms-dps/rest/queryAgvStatus/"; public static final String CONTINUE_TASK_URL = "http://127.0.0.1:8081/rcms-dps/rest/queryAgvStatus/";

View File

@@ -80,6 +80,16 @@ public class AgvQueue extends BaseEntity
private String wmsTaskType; private String wmsTaskType;
private String ssjTaskNo;
public String getSsjTaskNo() {
return ssjTaskNo;
}
public void setSsjTaskNo(String ssjTaskNo) {
this.ssjTaskNo = ssjTaskNo;
}
public String getWmsTaskType() { public String getWmsTaskType() {
return wmsTaskType; return wmsTaskType;
} }

View File

@@ -1,6 +1,7 @@
package com.ruoyi.schedule.scheduleTask.ssj.bs; package com.ruoyi.schedule.scheduleTask.ssj.bs;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.ObjUtil;
@@ -148,19 +149,16 @@ public class BsInSsjThread implements Runnable {
*/ */
public void inDispatch(DeviceSsj inSsjDevice) { public void inDispatch(DeviceSsj inSsjDevice) {
//如果入库请求1 并且 托盘码不为空 //如果入库请求1 并且 托盘码不为空
if (inSsjDevice.getDw()==1 && inSsjDevice.getRkqq() == 1 && StrUtil.isNotEmpty(inSsjDevice.getTrayCode())) { if (inSsjDevice.getDw()==1 && inSsjDevice.getRkqq() == 1 && inSsjDevice.getTaskNo()>0) {
//判断是否生成队列 //判断是否生成队列
AgvQueue agvQueueParam = new AgvQueue(); AgvQueue agvQueueParam = new AgvQueue();
agvQueueParam.setWmsTraycode(inSsjDevice.getTrayCode()); agvQueueParam.setWmsTaskNo(String.valueOf(inSsjDevice.getTaskNo()));
//agvQueueParam.setStatus("0");
List<AgvQueue> agvQueues = agvQueueService.selectAgvQueueList(agvQueueParam); List<AgvQueue> agvQueues = agvQueueService.selectAgvQueueList(agvQueueParam);
if (CollUtil.isEmpty(agvQueues)) { if (CollUtil.isEmpty(agvQueues)) {
//根据入口,查询对应的入库作业 //根据入口,查询对应的入库作业
MydoJob mydoJobParam = new MydoJob(); MydoJob mydoJobParam = new MydoJob();
mydoJobParam.setStatus("1"); mydoJobParam.setTaskNo(Convert.toStr(inSsjDevice.getTaskNo()));
mydoJobParam.setTrayCode(inSsjDevice.getTrayCode()); MydoJob mydoJob = apiService.requestEnterByTaskNo(mydoJobParam);
mydoJobParam.setEntranceId(inSsjDevice.getDeviceCode());
MydoJob mydoJob = apiService.requestEnterByTrayCode(mydoJobParam);
if (ObjUtil.isNotNull(mydoJob)) { if (ObjUtil.isNotNull(mydoJob)) {
//生成agv队列 //生成agv队列

View File

@@ -95,9 +95,8 @@ public class JsInSsjThread implements Runnable {
mydoJobParam.setStatus("1"); mydoJobParam.setStatus("1");
mydoJobParam.setTrayCode(inSsjDevice.getTrayCode()); mydoJobParam.setTrayCode(inSsjDevice.getTrayCode());
mydoJobParam.setEntranceId(inSsjDevice.getDeviceCode()); mydoJobParam.setEntranceId(inSsjDevice.getDeviceCode());
MydoJob mydoJob = apiService.requestEnterByTrayCode(mydoJobParam); MydoJob mydoJob = apiService.requestEnterByTaskNo(mydoJobParam);
if (ObjUtil.isNotNull(mydoJob)) { if (ObjUtil.isNotNull(mydoJob)) {
//生成agv队列 //生成agv队列
AgvQueue agvQueue = apiService.createAgvQueue(inSsjDevice.getName(), mydoJob.getCargoSpaceId(),mydoJob.getTrayCode(),mydoJob.getTaskNo(),"1"); AgvQueue agvQueue = apiService.createAgvQueue(inSsjDevice.getName(), mydoJob.getCargoSpaceId(),mydoJob.getTrayCode(),mydoJob.getTaskNo(),"1");
//请求任务生成 //请求任务生成

View File

@@ -49,6 +49,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="status != null and status != ''"> and status = #{status}</if> <if test="status != null and status != ''"> and status = #{status}</if>
<if test="taskCode != null and taskCode != ''"> and task_code = #{taskCode}</if> <if test="taskCode != null and taskCode != ''"> and task_code = #{taskCode}</if>
<if test="wmsTaskType != null and wmsTaskType != ''"> and wms_task_type = #{wmsTaskType}</if> <if test="wmsTaskType != null and wmsTaskType != ''"> and wms_task_type = #{wmsTaskType}</if>
<if test="ssjTaskNo != null and ssjTaskNo != ''"> and ssj_task_no = #{ssjTaskNo}</if>
</where> </where>
order by req_time desc order by req_time desc
</select> </select>
@@ -83,6 +84,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="status != null">status,</if> <if test="status != null">status,</if>
<if test="taskCode != null">task_code,</if> <if test="taskCode != null">task_code,</if>
<if test="wmsTaskType != null">wms_task_type,</if> <if test="wmsTaskType != null">wms_task_type,</if>
<if test="ssjTaskNo != null">ssj_task_no,</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="reqCode != null">#{reqCode},</if> <if test="reqCode != null">#{reqCode},</if>
@@ -103,6 +105,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="status != null">#{status},</if> <if test="status != null">#{status},</if>
<if test="taskCode != null">#{taskCode},</if> <if test="taskCode != null">#{taskCode},</if>
<if test="wmsTaskType != null">#{wmsTaskType},</if> <if test="wmsTaskType != null">#{wmsTaskType},</if>
<if test="ssjTaskNo != null">#{ssjTaskNo},</if>
</trim> </trim>
</insert> </insert>
<insert id="insertHistory"> <insert id="insertHistory">
@@ -130,6 +134,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="wmsTraycode != null">wms_traycode = #{wmsTraycode},</if> <if test="wmsTraycode != null">wms_traycode = #{wmsTraycode},</if>
<if test="wmsTaskNo != null">wms_task_no = #{wmsTaskNo},</if> <if test="wmsTaskNo != null">wms_task_no = #{wmsTaskNo},</if>
<if test="status != null">status = #{status},</if> <if test="status != null">status = #{status},</if>
<if test="ssjTaskNo != null">ssj_task_no =#{ssjTaskNo},</if>
</trim> </trim>
where req_code = #{reqCode} where req_code = #{reqCode}
</update> </update>