This commit is contained in:
zj
2026-01-04 08:39:00 +08:00
parent 88d01609d8
commit 2b6065d72f
31 changed files with 592 additions and 225 deletions

View File

@@ -5,6 +5,8 @@ import com.ruoyi.api.domain.agv.agvCallback.AgvCallbackResponse;
import com.ruoyi.api.service.IApiService;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.queue.agv.domain.AgvQueue;
import com.ruoyi.queue.agv.service.IAgvQueueService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -22,6 +24,8 @@ public class AgvController extends BaseController {
@Autowired
private IApiService apiService;
@Autowired
private IAgvQueueService agvQueueService;
/**
* agv执行状态返回接口
@@ -50,4 +54,26 @@ public class AgvController extends BaseController {
return apiService.receiveAgvMoveJob(param);
}
@PostMapping("/deleteAgvTray")
public AjaxResult deleteAgvTray(@RequestBody Map<String, String> param) {
AgvQueue agvQueue = agvQueueService.selectAgvQueueByTaskCode(param.get("taskCode"));
if(agvQueue==null){
return AjaxResult.error("AGV任务队列不存在!");
}else{
return apiService.deleteAgvTray(agvQueue);
}
}
@PostMapping("/continueTask")
public AjaxResult continueTask(@RequestBody Map<String, String> param) {
AgvQueue agvQueue = agvQueueService.selectAgvQueueByTaskCode(param.get("taskCode"));
if(agvQueue==null){
return AjaxResult.error("AGV任务队列不存在!");
}else{
return apiService.continueTask(agvQueue);
}
}
}

View File

@@ -20,49 +20,49 @@ import com.ruoyi.job.service.IMydoJobService;
/**
* 大屏接口Controller
*
*
* @author ruoyi
*/
@Anonymous
@RestController
@RequestMapping("/api/screen")
public class ScreenController extends BaseController {
@Autowired
private IDeviceSsjService deviceSsjService;
@Autowired
private IMydoJobService mydoJobService;
// 定义各区域输送机编号数组
private static final Map<Integer, List<String>> AREA_SSJ_CODES = new HashMap<>();
// 静态初始化输送机编号数组
static {
// 1区域输送机编号
AREA_SSJ_CODES.put(1, Arrays.asList(
"L2007","L2008","L2005","L2006","L2013"
"L2007", "L2008", "L2005", "L2006", "L2013"
));
// 2区域输送机编号
AREA_SSJ_CODES.put(2, Arrays.asList(
"L2003","L2004","L2012","L2001","L2002"
"L2003", "L2004", "L2012", "L2001", "L2002"
));
// 3区域输送机编号
AREA_SSJ_CODES.put(3, Arrays.asList(
"L1001","L1002","L1011"
"L1001", "L1002", "L1011"
));
// 4区域输送机编号
AREA_SSJ_CODES.put(4, Arrays.asList(
"L1003","L1004","L1012"
"L1003", "L1004", "L1012"
));
}
/**
* 根据区域编号查询输送机列表
*
*
* @param areaNum 区域编号(1-4)
* @return 输送机数据列表
*/
@@ -71,54 +71,155 @@ public class ScreenController extends BaseController {
if (areaNum < 1 || areaNum > 4) {
return AjaxResult.error("区域编号必须在1-4之间");
}
// 获取该区域的输送机编号数组
List<String> ssjCodes = AREA_SSJ_CODES.get(areaNum);
if (ssjCodes == null || ssjCodes.isEmpty()) {
return AjaxResult.error("未找到该区域的输送机编号配置");
}
// 查询所有输送机
List<DeviceSsj> allSsjList = deviceSsjService.selectDeviceSsjList(null);
// 根据编号数组筛选输送机
List<DeviceSsj> filteredList = allSsjList.stream()
.filter(ssj -> ssj.getDeviceCode() != null && ssjCodes.contains(ssj.getDeviceCode().trim()))
.collect(Collectors.toList());
// 转换为前端需要的数据格式
List<Map<String, Object>> resultList = new ArrayList<>();
// 创建作业信息列表
List<MydoJob> jobList = new ArrayList<>();
for (DeviceSsj ssj : filteredList) {
Map<String, Object> map = new HashMap<>();
map.put("id", ssj.getDeviceCode());
map.put("name", ssj.getName());
map.put("kx", String.valueOf(ssj.getKx()));
map.put("dw", String.valueOf(ssj.getDw()));
map.put("sbzt", ssj.getException());
map.put("kx", getSsjKx(ssj.getKx()));
map.put("dw", getSsjDw(ssj.getDw()));
map.put("sbzt", getSSzt(ssj.getSszt()));
// map.put("trayCode", ssj.getTrayCode());
map.put("allowPut", String.valueOf(ssj.getAllowPut()));
map.put("traySize", String.valueOf(ssj.getTraySize()));
map.put("exception", String.valueOf(ssj.getException()));
map.put("exception", getSSzt(ssj.getSszt()));
map.put("taskNo", ssj.getTaskNo());
resultList.add(map);
// 如果taskNo大于0,查询对应的作业信息
if (ssj.getTaskNo()> 0) {
MydoJob job = mydoJobService.selectMydoJobByTaskNo(Long.valueOf(ssj.getTaskNo()));
if (ssj.getTaskNo() > 0) {
MydoJob job = mydoJobService.selectJobByTaskNo(String.valueOf(ssj.getTaskNo()));
if (job != null) {
if("1".equals(job.getInOrOut())){
job.setInOrOut("生产入库");
job.setExitId(job.getEntranceId());
}else if("2".equals(job.getInOrOut())){
job.setInOrOut("退货入库");
job.setExitId(job.getEntranceId());
}else if("3".equals(job.getInOrOut())){
job.setInOrOut("其他入库");
job.setExitId(job.getEntranceId());
}else if("5".equals(job.getInOrOut())){
job.setInOrOut("盘点入库");
job.setExitId(job.getEntranceId());
}else if("21".equals(job.getInOrOut())){
job.setInOrOut("物资出库");
}else if("26".equals(job.getInOrOut())){
job.setInOrOut("盘点出库");
}
jobList.add(job);
}
}
}
// 返回结果包含data和job两个字段
Map<String, Object> result = new HashMap<>();
result.put("ssj", resultList);
result.put("job", jobList);
return AjaxResult.success(result);
}
private String getSsjDw(int dw) {
if(dw == 1){
return "到位";
}else{
return "未到位";
}
}
private String getSsjKx(int kx) {
if(kx == 1){
return "空闲";
}else{
return "不空闲";
}
}
private String getSSzt(int sszt) {
String msg = "";
switch (sszt) {
case 1:
msg = "手动";
break;
case 2:
msg = "自动";
break;
case 3:
msg = "运行";
break;
case 4:
msg = "输送超时";
break;
case 5:
msg = "断路器跳闸";
break;
case 6:
msg = "变频器报警";
break;
case 7:
msg = "开关任务异常";
break;
case 8:
msg = "急停";
break;
case 9:
msg = "输送超界";
break;
}
return msg;
}
private String getBjxx(int bjxx) {
String msg = "";
switch (bjxx) {
case 1:
msg = "前超长";
break;
case 2:
msg = "后超长";
break;
case 3:
msg = "左超宽";
break;
case 4:
msg = "右超宽";
break;
case 5:
msg = "超高";
break;
case 6:
msg = "无任务";
break;
case 7:
msg = "未扫到条码";
break;
case 8:
msg = "称重异常";
break;
}
return msg;
}
}

View File

@@ -16,5 +16,5 @@ public class ReceiveJob {
private String inOrOut;
private String jobId;
private String roadwayId;
private String departmentId;
}

View File

@@ -134,4 +134,6 @@ public interface IApiService
AjaxResult receiveInMydoJob(ReceiveJob receiveInJob);
AjaxResult selectMydoJobByTrayCodeAndEntranceId(HashMap<String, Object> paramMap);
AjaxResult deleteAgvTray(AgvQueue agvQueue);
}

View File

@@ -5,6 +5,7 @@ import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson2.JSON;
import com.ruoyi.api.domain.InterfaceReceive;
import com.ruoyi.api.domain.RequestLog;
import com.ruoyi.api.domain.agv.agvCallback.AgvCallbackRequest;
@@ -73,15 +74,17 @@ public class ApiServiceImpl implements IApiService {
public GenAgvSchedulingTaskResponse genAgvSchedulingTask(GenAgvSchedulingTaskRequest genAgvSchedulingTaskRequest) {
RequestLog requestLog = requestLogService.getRequestLog(GEN_AGV_SCHEDULING_TASK, "生成AGV任务", JSONUtil.toJsonStr(genAgvSchedulingTaskRequest));
if ("1".equals(requestLog.getIsSuccessful())) {
return BeanUtil.toBean(requestLog.getResponseBody(), GenAgvSchedulingTaskResponse.class);
AgvQueue agvQueue = agvQueueService.selectAgvQueueByTaskCode(genAgvSchedulingTaskRequest.getTaskCode());
if(agvQueue != null){
agvQueue.setStatus("1");
agvQueueService.updateAgvQueue(agvQueue);
}
return JSON.parseObject(requestLog.getResponseBody(), GenAgvSchedulingTaskResponse.class);
} else {
//todo 需要调试
GenAgvSchedulingTaskResponse response = new GenAgvSchedulingTaskResponse();
response.setCode(500);
response.setMessage("请求失败");
//todo 需要调试小车请求
response.setCode(0);
response.setMessage("模拟测试");
return response;
}
}
@@ -125,13 +128,16 @@ public class ApiServiceImpl implements IApiService {
String endPoint = param.get("endPoint");
String traySize = param.get("traySize");
String wmsTaskNo = param.get("wmsTaskNo");
AgvQueue agvQueue = createAgvQueue(startPoint, endPoint, param.get("trayCode"), param.get("taskNo"), "1", traySize, wmsTaskNo);
GenAgvSchedulingTaskResponse genAgvSchedulingTaskResponse = requestAgvQueue(agvQueue);
if (genAgvSchedulingTaskResponse.getCode() == 0) {
return AjaxResult.success();
GenAgvSchedulingTaskResponse response = new GenAgvSchedulingTaskResponse();
AgvQueue queue = agvQueueService.selectAgvQueueByTaskCode(param.get("taskCode"));
if(queue == null){
AgvQueue agvQueue = createAgvQueue(startPoint, endPoint, param.get("trayCode"), param.get("taskCode"), "1", traySize, wmsTaskNo);
response = requestAgvQueue(agvQueue);
if (response.getCode() == 0) {
return AjaxResult.success();
}
}
return AjaxResult.error(genAgvSchedulingTaskResponse.getMessage());
return AjaxResult.error(response.getMessage());
}
@@ -158,7 +164,7 @@ public class ApiServiceImpl implements IApiService {
String method = request.getMethod();
switch (method) {
case "applyin":
agvQueue.setStatus("1");
agvQueue.setStatus("2");
agvQueueService.updateAgvQueue(agvQueue);
log.info("【AGV请求取货】任务号:{}", request.getTaskCode());
break;
@@ -178,7 +184,6 @@ public class ApiServiceImpl implements IApiService {
log.info("【AGV请求放货】任务号:{}", request.getTaskCode());
break;
case "end":
agvQueue.setStatus("7");
agvQueueService.updateAgvQueue(agvQueue);
log.info("【AGV任务结束】任务号:{}", request.getTaskCode());
@@ -256,7 +261,7 @@ public class ApiServiceImpl implements IApiService {
/**
* 生成agv队列
* 生成agv队列----临时修改起终点
*
* @param code1 起点
* @param code2 终点
@@ -270,14 +275,13 @@ public class ApiServiceImpl implements IApiService {
//生成ctu执行队列
AgvQueue agvQueue = new AgvQueue();
String reqCode = IdUtil.fastSimpleUUID();
// String taskCode = IdUtil.fastSimpleUUID();
agvQueue.setReqCode(reqCode);
agvQueue.setReqTime(DateUtil.formatDateTime(DateUtil.date()));
agvQueue.setAgvType("AGV");
agvQueue.setPositionCode1(code1);
agvQueue.setPositionCode2(code2);
agvQueue.setTaskType("F01");
agvQueue.setCtnrType(traySize);
agvQueue.setTaskType("A24");
agvQueue.setCtnrType("1");
agvQueue.setCtnrCode("0");
agvQueue.setCtnrNum("0");
agvQueue.setTaskMode("0");
@@ -337,18 +341,13 @@ public class ApiServiceImpl implements IApiService {
GenAgvSchedulingTaskRequest genAgvSchedulingTaskRequest = new GenAgvSchedulingTaskRequest();
genAgvSchedulingTaskRequest.setReqCode(agvQueue.getReqCode());
genAgvSchedulingTaskRequest.setTaskMode("0");
genAgvSchedulingTaskRequest.setPriority("10");
genAgvSchedulingTaskRequest.setTaskTyp("F01");
genAgvSchedulingTaskRequest.setCtnrCode("0");
genAgvSchedulingTaskRequest.setCtnrNum("0");
genAgvSchedulingTaskRequest.setTaskMode("0");
genAgvSchedulingTaskRequest.setTaskTyp(agvQueue.getTaskType());
genAgvSchedulingTaskRequest.setCtnrTyp(agvQueue.getCtnrType());
genAgvSchedulingTaskRequest.setTaskCode(agvQueue.getTaskCode());
genAgvSchedulingTaskRequest.setAgvTyp("AGV");
genAgvSchedulingTaskRequest.setPositionSelStrategy("0");
List<PositionCodeData> positionCodePath = new ArrayList<>();
positionCodePath.add(new PositionCodeData(agvQueue.getPositionCode1(), "0"));
positionCodePath.add(new PositionCodeData(agvQueue.getPositionCode2(), "0"));
positionCodePath.add(new PositionCodeData(agvQueue.getPositionCode1(), "05"));
positionCodePath.add(new PositionCodeData(agvQueue.getPositionCode2(), "05"));
genAgvSchedulingTaskRequest.setPositionCodePath(positionCodePath);
return genAgvSchedulingTask(genAgvSchedulingTaskRequest);
}
@@ -378,6 +377,7 @@ public class ApiServiceImpl implements IApiService {
mydoJob.setRoadwayId(receiveOutJob.getRoadwayId());
mydoJob.setCreateTime(DateUtils.getNowDate());
mydoJob.setExecutionPhase(TASK_EP_CREATE);
mydoJob.setTraySize(receiveOutJob.getDepartmentId());
int i = mydoJobService.insertMydoJob(mydoJob);
if (i > 0) {
return AjaxResult.success();
@@ -403,6 +403,24 @@ public class ApiServiceImpl implements IApiService {
}
}
@Override
public AjaxResult deleteAgvTray(AgvQueue agvQueue) {
Map<String, String> paramMap = new HashMap<>();
paramMap.put("reqCode", IdUtil.fastSimpleUUID());
paramMap.put("ctnrTyp", agvQueue.getCtnrType());
paramMap.put("binName", agvQueue.getPositionCode2());
paramMap.put("indBind", "0");
RequestLog requestLog = requestLogService.getRequestLog(DELETE_BIN_URL, "AGV解绑容器", JSONUtil.toJsonStr(paramMap));
if ("1".equals(requestLog.getIsSuccessful())) {
log.info("站点:"+agvQueue.getPositionCode2()+"{}AGV容器解绑成功!");
return AjaxResult.success();
} else {
log.info("站点:"+agvQueue.getPositionCode2()+"{}AGV容器解绑失败!");
return AjaxResult.error();
}
}
@Override
public AjaxResult selectMydoJobByNoTrayCode(Map<String, Object> param) {

View File

@@ -131,7 +131,7 @@ public class RequestLogServiceImpl implements IRequestLogService
String resStr = HttpUtil.post(url, param);
requestLog.setResponseBody(resStr);
InterfaceReceive bean = JSONUtil.toBean(resStr, InterfaceReceive.class);
if (bean.getCode() == 200) {
if (bean.getCode() == 0) {
requestLog.setResponseTime(DateUtil.format(responseTime, "yyyy-MM-dd HH:mm:ss"));
requestLog.setResponseStatus("1");
requestLog.setDuration(Convert.toStr(DateUtil.between(requestTime, responseTime, DateUnit.MS)));