Merge remote-tracking branch 'origin/main'

# Conflicts:
#	ruoyi-admin/src/main/java/com/ruoyi/api/controller/AgvController.java
This commit is contained in:
1009473166@qq.com
2026-03-19 18:20:39 +08:00
12 changed files with 303 additions and 187 deletions

View File

@@ -1,22 +1,15 @@
package com.ruoyi.api.controller; package com.ruoyi.api.controller;
import cn.hutool.json.JSONUtil;
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.mapper.RequestLogMapper;
import com.ruoyi.api.service.IApiService; import com.ruoyi.api.service.IApiService;
import com.ruoyi.api.service.impl.RequestLogServiceImpl;
import com.ruoyi.common.annotation.RequestLog;
import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.device.ssj.domain.DeviceSsj;
import com.ruoyi.job.domain.MydoJob;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map; import java.util.Map;
/** /**
@@ -26,15 +19,13 @@ import java.util.Map;
@RequestMapping("/agv/api") @RequestMapping("/agv/api")
@Slf4j @Slf4j
public class AgvController extends BaseController { public class AgvController extends BaseController {
@Autowired
private RequestLogServiceImpl requestLogService;
@Autowired @Autowired
private IApiService apiService; private IApiService apiService;
/** /**
* agv执行状态返回接口 * agv执行状态返回接口
*
* @param request * @param request
* @return * @return
*/ */
@@ -44,40 +35,25 @@ public class AgvController extends BaseController {
} }
/** /**
* agv搬运作业 * agv搬运作业
* * @param param{
* @param param{ startPoint:起始点 * startPoint:起始点
* endPoint:结束点 * endPoint:结束点
* containerCode:容器编号 * containerCode:容器编号
* taskNo:任务号 * taskNo:任务号
* } * }
* @return * @return
*/ */
@PostMapping("/receiveAgvMoveJob") @PostMapping("/receiveAgvMoveJob")
public AjaxResult receiveAgvMoveJob(@RequestBody Map<String, String> param) { public int receiveAgvMoveJob(@RequestBody Map<String, String> param) {
return apiService.receiveAgvMoveJob(param); return apiService.receiveAgvMoveJob(param);
} }
// agv 获取请求获取输送机空闲信号 //@Scheduled(cron = "0/5 * * * * ?")
@PostMapping("/getDeviceMsg") public void sendAgvTask(){
@RequestLog apiService.sendAgvTask();
public AjaxResult getDeviceMsg(@RequestBody Map<String, String> param) {
DeviceSsj ssj = apiService.getDeviceMsg(param.get("taskNo"));
com.ruoyi.api.domain.RequestLog requestLog = new com.ruoyi.api.domain.RequestLog();
requestLog.setRequestBody(JSONUtil.toJsonStr(param));
requestLog.setRequestMethod("getDeviceMsg");
requestLog.setIsSuccessful("1");
requestLog.setRequestTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
requestLog.setRequestUrl("http://192.168.188.236:8081/agv/api/getDeviceMsg");
requestLog.setRequestMethod("post");
requestLog.setSourceSystem("agv");
requestLog.setTargetSystem("wcs");
requestLog.setEndpoint("获取输送机信号");
requestLog.setResponseBody(JSONUtil.toJsonStr(AjaxResult.success(ssj)));
requestLog.setResponseStatus("1");
requestLogService.insertRequestLog(requestLog);
return AjaxResult.success(ssj);
} }

View File

@@ -14,143 +14,187 @@ import java.util.UUID;
@Data @Data
public class GenAgvSchedulingTaskRequest { public class GenAgvSchedulingTaskRequest {
/** /**
* 请求编号 * 起始站点
* 同一个请求重复提交, 使用同一编号
*/ */
@NotNull private String FromStation;
private String reqCode = UUID.randomUUID().toString();
/** /**
* 请求时间 * 目的站点
* 格式: “yyyy-MM-dd HH:mm:ss”
*/ */
private String reqTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); private String ToStation;
/** /**
* 客户端编号 * 任务类型(以实际的任务类型为准)
* 客户端编号,如PDA,HCWMS等
*/ */
private String clientCode; private String Type;
/** /**
* 令牌号 * 类名
* 由调度系统颁发
*/ */
private String tokenCode; private String ClassName;
/** /**
* 任务类型 * 任务引导ID
* 内置任务类型:
* 厂内货架搬运: F01
* 厂内货架空满交换: F02
* 辊筒搬运接驳:F03
* 厂内货架出库AGV待命:F04
* 旋转货架: F05
* 厂内电梯任务: F06
* 以下为叉车专用任务类型
* 高位货架到工作台: F11
* 工作台到高位货架: F12
* 巷道到工作台: F13
* 工作台到巷道: F14
* 高位货架到工作台(接驳) : F15
* 工作台到高位货架 (接驳) : F16
* 巷道到工作台(接驳) : F17
* 工作台到巷道(接驳) : F18
* 叉车电梯主任务: F20
*/ */
@NotNull private String TaskGuideId;
private String taskTyp;
/** /**
* 容器类型(叉车/CTU专用) 叉车项目必传 * 订单 ID
*/ */
private String ctnrTyp; private String OrderId;
/** /**
* 容器编号 (叉车/CTU专用) * 触发ID
*/ */
private String ctnrCode; // private String TriggerId;
/** /**
* 容器数量(叉车堆叠专用),默认值1,仅记录堆叠的数量不记录堆叠的每个容器号 * 扩展字段4
*/ */
private String ctnrNum; private String Extend4;
/** /**
* 任务模式 * 扩展字段5
* 0-普通move 1-出库move 2-入库move 3-移库move
*/ */
private String taskMode; private String Extend5;
/** /**
* 工作位 * 扩展字段6
* 与RCS-2000端配置的位置名称一致, 工作位名称为字母\数字\或组合
*/ */
private String wbCode; private String Extend6;
/** /**
* 位置路径 * 扩展字段7
* AGV关键路径位置集合,与任务类型中模板配置的位置路径一一对应。待现场地图部署、配置完成后可获取
*/ */
private List<PositionCodeData> positionCodePath; private String Extend7;
/** /**
* 货架编号 * 扩展字段8
* 不指定货架可以为空
*/ */
private String podCode; private String Extend8;
/** /**
* 货架方向 * 扩展字段9
* “180”,”0”,”90”,”-90” 分别对应地图的”左”,”右”,”上”,”下”
* 不指定方向可以为空
* 如果终点不是工作台或工作台未配置操作方向则货架拣货方向podDir作为终点方向
* 如果工作台配有操作方向,则系统会根据货架拣货方向podDir和工作台操作方向计算货架终点方向
*/ */
private String podDir; private String Extend9;
/** /**
* 货架类型, 传空时表示随机找个货架 * 任务附加信息
* 找空货架传参方式如下:
* -1: 代表不关心货架类型, 找到空货架即可.
* -2: 代表从工作位获取关联货架类型, 如果未配置, 只找空货架.
* 货架类型编号: 只找该货架类型的空货架
*/ */
private String podTyp; private TaskAdditionallInfo TaskAdditionallInfo;
/** /**
* 物料批次 * 任务附加信息类
* 物料批次或货架上的物料唯一编码,生成任务单时,货架与物料直接绑定时使用. (通过同时传podCode和materialLot来绑定或通过 wbCode 找到位置上的货架和materialLot来绑定)
* 如果是区域/策略内查找货架,可以匹配对应物料批次的货架,支持以下值:
* 0:区域/策略内查找空货架
* 1:区域/策略内查找满货架
* 其他值:查找指定物料批次对应的货架
* 巷道任务通过该字段传入特征值
*/ */
private String materialLot; @Data
/** public static class TaskAdditionallInfo {
* 优先级 /**
* 从(1~127)级,最大优先级最高。为空时,采用任务模板的优先级 * 任务ID
*/ */
private String priority; private String TaskId;
/**
* AGV编号 /**
* 填写表示指定某一编号的AGV执行该任务 * 库存ID
*/ */
private String agvCode; private String StockId;
/**
* 任务单号 /**
* 选填, 不填系统自动生成 * 任务引导ID
*/ */
private String taskCode; private String TaskGuideId;
/**
* 组编号 /**
* CTU场景下用于按组出库,同组任务优先拼车。 如业务需要任务组间或组内按顺序出库,则需调用料箱顺序出库(CTU)接口。 * 触发ID
* 潜伏式场景下,通过组号来管理顺序出库的顺序,组号小的优先出库。 */
*/ private String TriggerId;
private String groupId;
/** /**
* 设备类型 * 下一任务添加阶段
*/ */
private String agvTyp; private String NextTaskAddStage;
/**
* 选择策略 /**
* 区域/策略中挑选货架以及根据物料批次挑选货架时的先进先出规则,支持以下4个值: * 链ID
* 1:按照货架到达储位的时间顺序,先进先出 */
* 2:按照货架到达储位的时间顺序,先进后出 private String ChainId;
* 9:按照货架绑定物料批次的时间顺序,先进先出
* 10:按照货架绑定物料批次的时间顺序,先进后出 /**
*/ * 链类型
private String positionSelStrategy; */
/** private Integer ChainType;
* 自定义数据
*/ /**
private String data; * 链排序
*/
private Integer ChainSort;
/**
* 图号
*/
private String FigureNo;
/**
* 尺寸
*/
private String Size;
/**
* 箱号
*/
private String BoxNo;
/**
* 物料
*/
private String Mater;
/**
* 相关数量
*/
private Integer RelatedCount;
/**
* 序列号
*/
private String SerialNo;
/**
* 重量
*/
private String Weight;
/**
* 站点号
*/
private String StationNo;
/**
* 手动计数
*/
private String HandCount;
/**
* 批次
*/
private String Batch;
/**
* 前置相关任务ID
*/
private String PreviousRelatedTaskId;
/**
* 下一相关任务ID
*/
private String NextRelatedTaskId;
/**
* 级联任务开始
*/
private String CascadeTaskBeginning;
/**
* 级联任务结束
*/
private String CascadeTaskEnding;
}
} }

View File

@@ -35,11 +35,11 @@ public interface IApiService
* @param code1 起点 * @param code1 起点
* @param code2 终点 * @param code2 终点
* @param wmsTrayCode 容器码 托盘料箱码/容器码 * @param wmsTrayCode 容器码 托盘料箱码/容器码
* @param wmsTaskNo mydojob 任务 * @param type mydojob 任务
* @param wmsTaskType 1-入库 2-出库 3-agv搬运 * @param jobId 1-入库 2-出库 3-agv搬运
* @return * @return
*/ */
public AgvQueue createAgvQueue(String code1,String code2,String wmsTrayCode,String taskCode,String wmsTaskType,String traySize,String wmsTaskNo); public int createAgvQueue(String code1,String code2,String wmsTrayCode,String taskCode,String type,String jobId);
/** /**
* 取消AGV任务 * 取消AGV任务
@@ -77,7 +77,9 @@ public interface IApiService
* @param param * @param param
* @return * @return
*/ */
AjaxResult receiveAgvMoveJob(Map<String, String> param); int receiveAgvMoveJob(Map<String, String> param);
void sendAgvTask();
/** /**
* 任务到达拣选口 * 任务到达拣选口

View File

@@ -68,6 +68,8 @@ public interface IRequestLogService
*/ */
public RequestLog getRequestLog(String url, String param, String endPoint); public RequestLog getRequestLog(String url, String param, String endPoint);
public RequestLog getRequestLogAgv(String url, String endPoint, String param);
/** /**
* 接收请求,并插入日志 * 接收请求,并插入日志
* @param url * @param url

View File

@@ -66,17 +66,22 @@ public class ApiServiceImpl implements IApiService {
*/ */
@Override @Override
public GenAgvSchedulingTaskResponse genAgvSchedulingTask(GenAgvSchedulingTaskRequest genAgvSchedulingTaskRequest) { public GenAgvSchedulingTaskResponse genAgvSchedulingTask(GenAgvSchedulingTaskRequest genAgvSchedulingTaskRequest) {
RequestLog requestLog = requestLogService.getRequestLog(GEN_AGV_SCHEDULING_TASK, "生成AGV任务", JSONUtil.toJsonStr(genAgvSchedulingTaskRequest)); RequestLog requestLog = requestLogService.getRequestLogAgv(CREATE_AGV_TASK_URL, "生成AGV任务", JSONUtil.toJsonStr(genAgvSchedulingTaskRequest));
if ("1".equals(requestLog.getIsSuccessful())) { if ("1".equals(requestLog.getIsSuccessful())) {
return BeanUtil.toBean(requestLog.getResponseBody(), GenAgvSchedulingTaskResponse.class); GenAgvSchedulingTaskRequest bean = BeanUtil.toBean(requestLog.getResponseBody(), GenAgvSchedulingTaskRequest.class);
GenAgvSchedulingTaskResponse response = new GenAgvSchedulingTaskResponse();
response.setCode(0);
response.setMessage("请求成功");
response.setReqCode(genAgvSchedulingTaskRequest.getOrderId());
return response;
} else { } else {
//todo 需要调试 //todo 需要调试
GenAgvSchedulingTaskResponse response = new GenAgvSchedulingTaskResponse(); GenAgvSchedulingTaskResponse response = new GenAgvSchedulingTaskResponse();
response.setCode(500); response.setCode(500);
response.setMessage("请求失败"); response.setMessage("请求失败");
//todo 需要调试小车请求 //todo 需要调试小车请求
response.setCode(0); // response.setCode(0);
response.setMessage("模拟测试"); // response.setMessage("模拟测试");
return response; return response;
} }
} }
@@ -115,18 +120,39 @@ public class ApiServiceImpl implements IApiService {
* @return * @return
*/ */
@Override @Override
public AjaxResult receiveAgvMoveJob(Map<String, String> param) { public int receiveAgvMoveJob(Map<String, String> param) {
String startPoint = param.get("startPoint"); String startPoint = param.get("startPoint");
String endPoint = param.get("endPoint"); String endPoint = param.get("endPoint");
String traySize = param.get("traySize"); String type = param.get("type");
String wmsTaskNo = param.get("wmsTaskNo"); String jobId = param.get("jobId");
AgvQueue agvQueue = createAgvQueue(startPoint, endPoint, param.get("trayCode"), param.get("taskNo"), "1", traySize, wmsTaskNo); int i = createAgvQueue(startPoint, endPoint, param.get("trayCode"), param.get("taskNo"), type,jobId);
GenAgvSchedulingTaskResponse genAgvSchedulingTaskResponse = requestAgvQueue(agvQueue);
if (genAgvSchedulingTaskResponse.getCode() == 0) { return i;
return AjaxResult.success(); // GenAgvSchedulingTaskResponse genAgvSchedulingTaskResponse = requestAgvQueue(agvQueue);
// if (genAgvSchedulingTaskResponse.getCode() == 0) {
// return AjaxResult.success();
// }
// return AjaxResult.error(genAgvSchedulingTaskResponse.getMessage());
}
@Override
public void sendAgvTask() {
AgvQueue agvQueue = agvQueueService.selectAgvQueueByStatus();
if (agvQueue != null) {
GenAgvSchedulingTaskResponse genAgvSchedulingTaskResponse = requestAgvQueue(agvQueue);
if (genAgvSchedulingTaskResponse.getCode() == 0) {
agvQueue.setStatus("1");
agvQueueService.updateAgvQueue(agvQueue);
agvQueueService.insertHistory(agvQueue.getReqCode());
}else{
agvQueue.setStatus("2");
agvQueueService.updateAgvQueue(agvQueue);
}
} }
return AjaxResult.error(genAgvSchedulingTaskResponse.getMessage());
} }
@@ -246,12 +272,12 @@ public class ApiServiceImpl implements IApiService {
* @param code1 起点 * @param code1 起点
* @param code2 终点 * @param code2 终点
* @param wmsTrayCode 容器码 托盘料箱码/容器码 * @param wmsTrayCode 容器码 托盘料箱码/容器码
* @param wmsTaskNo mydojob 任务 * @param type mydojob 任务
* @param wmsTaskType 1-入库 2-出库 3-agv搬运 * @param jobId 1-入库 2-出库 3-agv搬运
* @return * @return
*/ */
@Override @Override
public AgvQueue createAgvQueue(String code1, String code2, String wmsTrayCode, String taskCode, String wmsTaskType, String traySize, String wmsTaskNo) { public int createAgvQueue(String code1, String code2, String wmsTrayCode, String taskCode,String type,String jobId) {
//生成ctu执行队列 //生成ctu执行队列
AgvQueue agvQueue = new AgvQueue(); AgvQueue agvQueue = new AgvQueue();
String reqCode = IdUtil.fastSimpleUUID(); String reqCode = IdUtil.fastSimpleUUID();
@@ -261,20 +287,21 @@ public class ApiServiceImpl implements IApiService {
agvQueue.setAgvType("AGV"); agvQueue.setAgvType("AGV");
agvQueue.setPositionCode1(code1); agvQueue.setPositionCode1(code1);
agvQueue.setPositionCode2(code2); agvQueue.setPositionCode2(code2);
agvQueue.setTaskType("F01"); agvQueue.setTaskType(type);
agvQueue.setCtnrType(traySize); agvQueue.setCtnrType("0");
agvQueue.setCtnrCode("0"); agvQueue.setCtnrCode("0");
agvQueue.setCtnrNum("0"); agvQueue.setCtnrNum("0");
agvQueue.setTaskMode("0"); agvQueue.setTaskMode("0");
agvQueue.setPriority("10"); agvQueue.setPriority("10");
agvQueue.setRequest("0"); agvQueue.setRequest("0");
agvQueue.setWmsTraycode(wmsTrayCode); agvQueue.setWmsTraycode(wmsTrayCode);
agvQueue.setWmsTaskNo(wmsTaskNo); agvQueue.setWmsTaskNo(taskCode);
agvQueue.setStatus("0"); agvQueue.setStatus("0");
agvQueue.setTaskCode(taskCode); agvQueue.setTaskCode(jobId);
agvQueue.setWmsTaskType(wmsTaskType); agvQueue.setWmsTaskType("0");
agvQueueService.insertAgvQueue(agvQueue); int i = agvQueueService.insertAgvQueue(agvQueue);
return agvQueue; return i;
} }
/** /**
@@ -321,20 +348,15 @@ public class ApiServiceImpl implements IApiService {
public GenAgvSchedulingTaskResponse requestAgvQueue(AgvQueue agvQueue) { public GenAgvSchedulingTaskResponse requestAgvQueue(AgvQueue agvQueue) {
//todo 请求ctu //todo 请求ctu
GenAgvSchedulingTaskRequest genAgvSchedulingTaskRequest = new GenAgvSchedulingTaskRequest(); GenAgvSchedulingTaskRequest genAgvSchedulingTaskRequest = new GenAgvSchedulingTaskRequest();
genAgvSchedulingTaskRequest.setReqCode(agvQueue.getReqCode()); genAgvSchedulingTaskRequest.setFromStation(agvQueue.getPositionCode1());
genAgvSchedulingTaskRequest.setTaskMode("0"); genAgvSchedulingTaskRequest.setToStation(agvQueue.getPositionCode2());
genAgvSchedulingTaskRequest.setPriority("10"); genAgvSchedulingTaskRequest.setOrderId(agvQueue.getTaskCode());
genAgvSchedulingTaskRequest.setTaskTyp("F01"); genAgvSchedulingTaskRequest.setType(agvQueue.getTaskType());
genAgvSchedulingTaskRequest.setCtnrCode("0"); genAgvSchedulingTaskRequest.setTaskGuideId("00000000-0000-0000-0000-000000000000");
genAgvSchedulingTaskRequest.setCtnrNum("0"); genAgvSchedulingTaskRequest.setTriggerId("00000000-0000-0000-0000-000000000000");
genAgvSchedulingTaskRequest.setTaskMode("0"); GenAgvSchedulingTaskRequest.TaskAdditionallInfo taskAdditionallInfo = new GenAgvSchedulingTaskRequest.TaskAdditionallInfo();
genAgvSchedulingTaskRequest.setTaskCode(agvQueue.getTaskCode()); genAgvSchedulingTaskRequest.setTaskAdditionallInfo(taskAdditionallInfo);
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"));
genAgvSchedulingTaskRequest.setPositionCodePath(positionCodePath);
return genAgvSchedulingTask(genAgvSchedulingTaskRequest); return genAgvSchedulingTask(genAgvSchedulingTaskRequest);
} }

View File

@@ -6,6 +6,8 @@ import java.util.List;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.ruoyi.api.domain.InterfaceReceive; import com.ruoyi.api.domain.InterfaceReceive;
@@ -137,6 +139,7 @@ public class RequestLogServiceImpl implements IRequestLogService
requestLog.setDuration(Convert.toStr(DateUtil.between(requestTime, responseTime, DateUnit.MS))); requestLog.setDuration(Convert.toStr(DateUtil.between(requestTime, responseTime, DateUnit.MS)));
requestLog.setIsSuccessful("1"); requestLog.setIsSuccessful("1");
}else { }else {
requestLog.setResponseTime(DateUtil.format(responseTime, "yyyy-MM-dd HH:mm:ss"));
requestLog.setResponseStatus("0"); requestLog.setResponseStatus("0");
requestLog.setErrorDetails(bean.getMsg()); requestLog.setErrorDetails(bean.getMsg());
requestLog.setIsSuccessful("0"); requestLog.setIsSuccessful("0");
@@ -152,6 +155,56 @@ public class RequestLogServiceImpl implements IRequestLogService
return requestLog; return requestLog;
} }
@Override
public RequestLog getRequestLogAgv(String url, String endPoint, String param) {
RequestLog requestLog = new RequestLog();
Date requestTime = new Date();
requestLog.setRequestTime(DateUtil.format(requestTime, "yyyy-MM-dd HH:mm:ss"));
requestLog.setSourceSystem("wms");
requestLog.setTargetSystem("agv");
requestLog.setEndpoint(endPoint);
requestLog.setRequestMethod("post");
requestLog.setRequestHeaders(null);
requestLog.setRequestBody(param);
requestLog.setRequestUrl(url);
try {
// 使用HttpRequest获取HTTP状态码
HttpResponse response = HttpRequest.post(url)
.body(param)
.timeout(5000)
.execute();
int httpStatusCode = response.getStatus();
String resStr = response.body();
requestLog.setResponseBody(resStr);
Date responseTime = new Date();
// 判断HTTP状态码是否成功(200-299都算成功)
if (httpStatusCode == 200) {
requestLog.setResponseTime(DateUtil.format(responseTime, "yyyy-MM-dd HH:mm:ss"));
requestLog.setResponseStatus(String.valueOf(httpStatusCode));
requestLog.setDuration(Convert.toStr(DateUtil.between(requestTime, responseTime, DateUnit.MS)));
requestLog.setIsSuccessful("1");
} else {
requestLog.setResponseTime(DateUtil.format(responseTime, "yyyy-MM-dd HH:mm:ss"));
requestLog.setResponseStatus(String.valueOf(httpStatusCode));
requestLog.setErrorDetails("HTTP请求失败,状态码: " + httpStatusCode);
requestLog.setIsSuccessful("0");
}
} catch (Exception e) {
requestLog.setErrorDetails(e.getMessage());
requestLog.setIsSuccessful("0");
requestLog.setResponseStatus("0");
} finally {
insertRequestLog(requestLog);
}
return requestLog;
}
/** /**
* 插入请求日志 * 插入请求日志
* *

View File

@@ -5,6 +5,7 @@ public class Constant {
public static final String WMS_BASE_URL = "http://localhost:8080/api2wms/"; public static final String WMS_BASE_URL = "http://localhost:8080/api2wms/";
public static final String RCS_BASE_URL = "http://127.0.0.1:8081/rcms-dps/rest/"; public static final String RCS_BASE_URL = "http://127.0.0.1:8081/rcms-dps/rest/";
public static final String AGV_BASE_URL = "http://127.0.0.1:9501/api/app/agvs-task";
public static final String JOB_FINISH_URL = WMS_BASE_URL+"jobFinish"; public static final String JOB_FINISH_URL = WMS_BASE_URL+"jobFinish";
@@ -17,6 +18,7 @@ public class Constant {
public static final String RE_ASSIGN_URL = WMS_BASE_URL+"reAssign"; public static final String RE_ASSIGN_URL = WMS_BASE_URL+"reAssign";
public static final String RE_MATERIAL_URL = WMS_BASE_URL+"reMaterial"; public static final String RE_MATERIAL_URL = WMS_BASE_URL+"reMaterial";
public static final String REQUEST_ENTER_URL = WMS_BASE_URL+"requestEnterByTrayCodeAndEntranceId"; public static final String REQUEST_ENTER_URL = WMS_BASE_URL+"requestEnterByTrayCodeAndEntranceId";
public static final String CREATE_AGV_TASK_URL = AGV_BASE_URL+"agvs-task";
public static final String WAREHOUSE_01 = "01"; public static final String WAREHOUSE_01 = "01";

View File

@@ -66,5 +66,7 @@ public interface AgvQueueMapper
*/ */
AgvQueue selectAgvQueueByTaskCode(String taskCode); AgvQueue selectAgvQueueByTaskCode(String taskCode);
AgvQueue selectAgvQueueByStatus();
void insertHistory(String reqCode); void insertHistory(String reqCode);
} }

View File

@@ -66,6 +66,8 @@ public interface IAgvQueueService
*/ */
AgvQueue selectAgvQueueByTaskCode(String taskCode); AgvQueue selectAgvQueueByTaskCode(String taskCode);
AgvQueue selectAgvQueueByStatus();
/** /**
* 插入agv完成历史 * 插入agv完成历史
* @param reqCode * @param reqCode

View File

@@ -96,6 +96,11 @@ public class AgvQueueServiceImpl implements IAgvQueueService
return agvQueueMapper.selectAgvQueueByTaskCode(taskCode); return agvQueueMapper.selectAgvQueueByTaskCode(taskCode);
} }
@Override
public AgvQueue selectAgvQueueByStatus() {
return agvQueueMapper.selectAgvQueueByStatus();
}
@Override @Override
public void insertHistory(String reqCode) { public void insertHistory(String reqCode) {
agvQueueMapper.insertHistory(reqCode); agvQueueMapper.insertHistory(reqCode);

View File

@@ -62,6 +62,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where task_code = #{taskCode} where task_code = #{taskCode}
</select> </select>
<select id="selectAgvQueueByStatus" resultMap="AgvQueueResult">
select top(1)* from agv_queue
where status=0
</select>
<insert id="insertAgvQueue" parameterType="AgvQueue"> <insert id="insertAgvQueue" parameterType="AgvQueue">
insert into agv_queue insert into agv_queue
<trim prefix="(" suffix=")" suffixOverrides=","> <trim prefix="(" suffix=")" suffixOverrides=",">

View File

@@ -119,6 +119,7 @@ public class SecurityConfig
.antMatchers("/agv/api/**").permitAll() .antMatchers("/agv/api/**").permitAll()
.antMatchers("/device/api/**").permitAll() .antMatchers("/device/api/**").permitAll()
.antMatchers("/wcs2Wms/api/**").permitAll() .antMatchers("/wcs2Wms/api/**").permitAll()
.antMatchers("/agv/api/**").permitAll()
.antMatchers("/test/**").permitAll() .antMatchers("/test/**").permitAll()
.antMatchers("/largeScreen/monitor/**").permitAll() .antMatchers("/largeScreen/monitor/**").permitAll()
// 除上面外的所有请求全部需要鉴权认证 // 除上面外的所有请求全部需要鉴权认证