Compare commits
3 Commits
cafcde4a35
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
004c8740b1 | ||
|
|
652607ce15 | ||
|
|
3f38269a1f |
2
pom.xml
2
pom.xml
@@ -37,7 +37,7 @@
|
||||
<spring-framework.version>5.3.39</spring-framework.version>
|
||||
<hutool.version>5.8.27</hutool.version>
|
||||
<lombok.version>1.18.30</lombok.version>
|
||||
<HslCommunication.version>3.7.0</HslCommunication.version>
|
||||
<HslCommunication.version>2.0.0</HslCommunication.version>
|
||||
<mybatis-plus.version>3.5.2</mybatis-plus.version>
|
||||
|
||||
</properties>
|
||||
|
||||
21
ruoyi-admin/src/main/java/com/ruoyi/MyStartupRunner.java
Normal file
21
ruoyi-admin/src/main/java/com/ruoyi/MyStartupRunner.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package com.ruoyi;
|
||||
|
||||
import com.ruoyi.schedule.ScheduleThread;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.CommandLineRunner;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class MyStartupRunner implements CommandLineRunner {
|
||||
|
||||
@Autowired
|
||||
private ScheduleThread scheduleThread;
|
||||
|
||||
@Override
|
||||
public void run(String... args) throws Exception {
|
||||
// 这里编写项目启动后要执行的方法逻辑
|
||||
//System.out.println("项目启动成功后自动执行此方法");
|
||||
// scheduleThread.startAllThread();
|
||||
// scheduleThread.startAllThread2();
|
||||
}
|
||||
}
|
||||
@@ -1,30 +1,43 @@
|
||||
package com.ruoyi.api.controller;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.mchange.v2.lang.ObjectUtils;
|
||||
import com.ruoyi.api.domain.agv.agvCallback.AgvCallbackRequest;
|
||||
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.service.impl.AgvQueueServiceImpl;
|
||||
import com.ruoyi.system.domain.AgvContainerTask;
|
||||
import com.ruoyi.system.mapper.AgvContainerTaskMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Agv操作请求
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/agv/api")
|
||||
@RequestMapping("/api/agv")
|
||||
@Slf4j
|
||||
public class AgvController extends BaseController {
|
||||
|
||||
|
||||
@Autowired
|
||||
private IApiService apiService;
|
||||
@Autowired
|
||||
private AgvQueueServiceImpl agvQueueService;
|
||||
@Autowired
|
||||
private AgvContainerTaskMapper agvContainerTaskMapper;
|
||||
|
||||
/**
|
||||
* agv执行状态返回接口
|
||||
*
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@@ -34,15 +47,14 @@ public class AgvController extends BaseController {
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* agv搬运作业
|
||||
* @param param{
|
||||
* startPoint:起始点
|
||||
* endPoint:结束点
|
||||
* containerCode:容器编号
|
||||
* taskNo:任务号
|
||||
* }
|
||||
*
|
||||
* @param param{ startPoint:起始点
|
||||
* endPoint:结束点
|
||||
* containerCode:容器编号
|
||||
* taskNo:任务号
|
||||
* }
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/receiveAgvMoveJob")
|
||||
@@ -50,4 +62,98 @@ public class AgvController extends BaseController {
|
||||
return apiService.receiveAgvMoveJob(param);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取AGV任务定时器
|
||||
*/
|
||||
|
||||
@Scheduled(fixedDelay = 5000)
|
||||
public void queryAgvMoveJob() {
|
||||
apiService.sendContarTask();
|
||||
}
|
||||
|
||||
@Scheduled(fixedDelay = 5000)
|
||||
public void finishAgvMoveJob() {
|
||||
AgvContainerTask agvContainerTask= agvContainerTaskMapper.selectAgvContainerFinishOne();
|
||||
if (agvContainerTask!=null){
|
||||
apiService.finishAgvJob(agvContainerTask.getContainer());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**任务下发
|
||||
*
|
||||
*/
|
||||
@Scheduled(fixedDelay = 1000)
|
||||
public void sendAgvMoveJob() {
|
||||
AgvContainerTask agvContainerTask = new AgvContainerTask();
|
||||
agvContainerTask.setStatus("0");
|
||||
List<AgvContainerTask> agvContainerTasks = agvContainerTaskMapper.selectAgvContainerTaskList(agvContainerTask);
|
||||
if (agvContainerTasks.size() > 0) {
|
||||
AgvContainerTask agvContainerTask1 = agvContainerTasks.get(0);
|
||||
Map<String, String> param = new HashMap<>();
|
||||
param.put("FromStation", agvContainerTask1.getStartPoint());
|
||||
param.put("ToStation", agvContainerTask1.getEndPoint());
|
||||
param.put("Type", agvContainerTask1.getSpare1());
|
||||
param.put("OrderId", agvContainerTask1.getContainer());
|
||||
// param.put("TaskGuideId", agvContainerTask1.getTaskNo());
|
||||
AjaxResult ajaxResult = apiService.sendAgvCar(param);
|
||||
Integer code = (Integer) ajaxResult.get("code");
|
||||
if (200 == code) {
|
||||
agvContainerTask1.setStatus("1");
|
||||
agvContainerTaskMapper.updateAgvContainerTask(agvContainerTask1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***
|
||||
* 请求取货放货接口
|
||||
* @param jsonObject
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/checkAllow")
|
||||
public AjaxResult checkAllow(@RequestBody JSONObject jsonObject) {
|
||||
// 取放货站点
|
||||
String requestStation = String.valueOf(jsonObject.get("requestStation"));
|
||||
// 表内主键
|
||||
String orderId = String.valueOf(jsonObject.get("orderId"));
|
||||
String Type = String.valueOf(jsonObject.get("type"));
|
||||
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
map.put("v_position", requestStation);
|
||||
map.put("v_orderId", orderId);
|
||||
map.put("v_type", Type);
|
||||
agvQueueService.selectKx(map);
|
||||
Integer vResult = (Integer) map.get("v_result");
|
||||
if (vResult == 1) {
|
||||
return new AjaxResult(1, Type.equals("1") ? "允许取货" : "允许放货");
|
||||
} else {
|
||||
return new AjaxResult(0, Type.equals("1") ? "不允许取货,请等待" : "不允许放货,请等待");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 取货放货完成返回接口
|
||||
*
|
||||
* @param jsonObject
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/completionSignal")
|
||||
public AjaxResult completionSignal(@RequestBody JSONObject jsonObject) {
|
||||
|
||||
String orderId = String.valueOf(jsonObject.get("orderId"));
|
||||
String Type = String.valueOf(jsonObject.get("type"));
|
||||
|
||||
|
||||
agvContainerTaskMapper.updateAgvContainerTaskByOrder(orderId);
|
||||
// agvContainerTaskMapper.insertAgvContainerTaskFinish(orderId);
|
||||
// agvContainerTaskMapper.deleteAgvContainerTaskByContainer(orderId);
|
||||
|
||||
return new AjaxResult(1, "返回成功");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
package com.ruoyi.api.controller;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.ruoyi.api.domain.wcs2wms.JobParam;
|
||||
import com.ruoyi.api.domain.wcs2wms.ReceiveJob;
|
||||
import com.ruoyi.api.service.IApiService;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
@@ -53,4 +55,5 @@ public class Wcs2WmsController {
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -136,4 +136,18 @@ public interface IApiService
|
||||
AjaxResult allotSpace(JobParam jobParam);
|
||||
|
||||
AjaxResult JobFinish(Map<String, Object> param);
|
||||
|
||||
AjaxResult OutMakeSure(HashMap<String, Object> map);
|
||||
|
||||
void updateLed(HashMap<String, Object> objectObjectHashMap);
|
||||
|
||||
void updateLedError(HashMap<String, Object> objectObjectHashMap);
|
||||
|
||||
void sendContarTask();
|
||||
|
||||
AjaxResult sendAgvCar(Map<String, String> param);
|
||||
|
||||
AjaxResult insertAgvQuene(HashMap<String, Object> objectObjectHashMap);
|
||||
|
||||
void finishAgvJob(String container);
|
||||
}
|
||||
|
||||
@@ -75,4 +75,6 @@ public interface IRequestLogService
|
||||
* @return
|
||||
*/
|
||||
public RequestLog getRequestLog(String url, String param);
|
||||
|
||||
public RequestLog getRequestLogs(String url, String param, String endPoint);
|
||||
}
|
||||
|
||||
@@ -24,6 +24,8 @@ import com.ruoyi.job.domain.MydoJob;
|
||||
import com.ruoyi.job.service.IMydoJobService;
|
||||
import com.ruoyi.queue.agv.domain.AgvQueue;
|
||||
import com.ruoyi.queue.agv.service.IAgvQueueService;
|
||||
import com.ruoyi.system.domain.AgvContainerTask;
|
||||
import com.ruoyi.system.service.IAgvContainerTaskService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -51,7 +53,8 @@ public class ApiServiceImpl implements IApiService {
|
||||
private IAgvQueueService agvQueueService;
|
||||
@Autowired
|
||||
private IMydoJobService mydoJobService;
|
||||
|
||||
@Autowired
|
||||
private IAgvContainerTaskService agvContainerTaskService;
|
||||
|
||||
|
||||
/**
|
||||
@@ -138,10 +141,6 @@ public class ApiServiceImpl implements IApiService {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 处理agv状态返回
|
||||
*
|
||||
@@ -196,26 +195,24 @@ public class ApiServiceImpl implements IApiService {
|
||||
public AjaxResult cancelMydoJob(JobParam jobParam) {
|
||||
|
||||
MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(Convert.toLong(jobParam.getTaskNo()));
|
||||
if(mydoJob==null){
|
||||
if (mydoJob == null) {
|
||||
return AjaxResult.error("任务不存在");
|
||||
}
|
||||
if("1".equals(mydoJob.getStatus())){
|
||||
if ("1".equals(mydoJob.getStatus())) {
|
||||
mydoJob.setStatus("5");
|
||||
mydoJobService.insertHistory(mydoJob.getJobId());
|
||||
mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId());
|
||||
return AjaxResult.success();
|
||||
}else{
|
||||
} else {
|
||||
return AjaxResult.error("任务已开始");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public AjaxResult reAssign(JobParam jobParam) {
|
||||
RequestLog requestLog = requestLogService.getRequestLog(RE_ASSIGN_URL, "重新分配货位", JSONUtil.toJsonStr(jobParam));
|
||||
if ("1".equals(requestLog.getIsSuccessful())){
|
||||
if ("1".equals(requestLog.getIsSuccessful())) {
|
||||
InterfaceReceive bean = JSONUtil.toBean(requestLog.getResponseBody(), InterfaceReceive.class);
|
||||
MydoJob wmsMydoJob = BeanUtil.toBean(bean.getData(), MydoJob.class);
|
||||
MydoJob mydoJob = mydoJobService.selectMydoJobByJobId(wmsMydoJob.getJobId());
|
||||
@@ -229,7 +226,7 @@ public class ApiServiceImpl implements IApiService {
|
||||
@Override
|
||||
public AjaxResult reMaterial(JobParam jobParam) {
|
||||
RequestLog requestLog = requestLogService.getRequestLog(RE_MATERIAL_URL, "重新分配物料", JSONUtil.toJsonStr(jobParam));
|
||||
if ("1".equals(requestLog.getIsSuccessful())){
|
||||
if ("1".equals(requestLog.getIsSuccessful())) {
|
||||
return AjaxResult.success();
|
||||
}
|
||||
return AjaxResult.error();
|
||||
@@ -360,7 +357,6 @@ public class ApiServiceImpl implements IApiService {
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public AjaxResult receiveOutMydoJob(ReceiveJob receiveOutJob) {
|
||||
MydoJob mydoJob = new MydoJob();
|
||||
@@ -380,7 +376,7 @@ public class ApiServiceImpl implements IApiService {
|
||||
int i = mydoJobService.insertMydoJob(mydoJob);
|
||||
if (i > 0) {
|
||||
return AjaxResult.success();
|
||||
}else{
|
||||
} else {
|
||||
return AjaxResult.error();
|
||||
}
|
||||
|
||||
@@ -402,7 +398,7 @@ public class ApiServiceImpl implements IApiService {
|
||||
int i = mydoJobService.insertMydoJob(mydoJob);
|
||||
if (i > 0) {
|
||||
return AjaxResult.success();
|
||||
}else{
|
||||
} else {
|
||||
return AjaxResult.error();
|
||||
}
|
||||
}
|
||||
@@ -447,4 +443,74 @@ public class ApiServiceImpl implements IApiService {
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaxResult OutMakeSure(HashMap<String, Object> map) {
|
||||
RequestLog requestLog = requestLogService.getRequestLog(OUT_MAKE_SURE, "线边直出请求过账", JSONUtil.toJsonStr(map));
|
||||
if ("1".equals(requestLog.getIsSuccessful())) {
|
||||
InterfaceReceive bean = JSONUtil.toBean(requestLog.getResponseBody(), InterfaceReceive.class);
|
||||
return AjaxResult.success(bean.getData());
|
||||
} else {
|
||||
return AjaxResult.error();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateLed(HashMap<String, Object> map) {
|
||||
RequestLog requestLog = requestLogService.getRequestLog(UPDATE_LED, "出库到位更新LED", JSONUtil.toJsonStr(map));
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateLedError(HashMap<String, Object> map) {
|
||||
RequestLog requestLog = requestLogService.getRequestLog(UPDATE_LED_ERROR, "更新线体报错信息", JSONUtil.toJsonStr(map));
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendContarTask() {
|
||||
RequestLog requestLog = requestLogService.getRequestLog(QUERY_AGV_QUENE, "请求获取AGV执行队列", JSONUtil.toJsonStr(""));
|
||||
if ("1".equals(requestLog.getIsSuccessful())) {
|
||||
InterfaceReceive bean = JSONUtil.toBean(requestLog.getResponseBody(), InterfaceReceive.class);
|
||||
AgvContainerTask bean1 = BeanUtil.toBean(bean.getData(), AgvContainerTask.class);
|
||||
bean1.setStatus("0");
|
||||
agvContainerTaskService.insertAgvContainerTask(bean1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaxResult sendAgvCar(Map<String, String> param) {
|
||||
RequestLog requestLog = requestLogService.getRequestLogs(SEND_AGV_CAR, "下发AGV执行对列", JSONUtil.toJsonStr(param));
|
||||
if ("1".equals(requestLog.getIsSuccessful())) {
|
||||
return AjaxResult.success();
|
||||
}
|
||||
{
|
||||
return AjaxResult.error();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaxResult insertAgvQuene(HashMap<String, Object> param) {
|
||||
RequestLog requestLog = requestLogService.getRequestLog(INSERT_AGV_QUENE, "请求自动生成AGV执行队列", JSONUtil.toJsonStr(param));
|
||||
if ("1".equals(requestLog.getIsSuccessful())) {
|
||||
return AjaxResult.success();
|
||||
}
|
||||
{
|
||||
return AjaxResult.error();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void finishAgvJob(String container) {
|
||||
HashMap<Object, Object> objectObjectHashMap = new HashMap<>();
|
||||
objectObjectHashMap.put("order", container);
|
||||
RequestLog requestLog = requestLogService.getRequestLog(FINISH_AGV_QUENE, "完成AGV执行队列", JSONUtil.toJsonStr(objectObjectHashMap));
|
||||
if ("1".equals(requestLog.getIsSuccessful())) {
|
||||
|
||||
agvContainerTaskService.deleteAgvContainerTaskByOrderId(container);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@ import java.util.List;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.http.ContentType;
|
||||
import cn.hutool.http.HttpResponse;
|
||||
import cn.hutool.http.HttpUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.ruoyi.api.domain.InterfaceReceive;
|
||||
@@ -24,8 +26,7 @@ import com.ruoyi.api.service.IRequestLogService;
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class RequestLogServiceImpl implements IRequestLogService
|
||||
{
|
||||
public class RequestLogServiceImpl implements IRequestLogService {
|
||||
@Autowired
|
||||
private RequestLogMapper requestLogMapper;
|
||||
|
||||
@@ -36,8 +37,7 @@ public class RequestLogServiceImpl implements IRequestLogService
|
||||
* @return 接口记录
|
||||
*/
|
||||
@Override
|
||||
public RequestLog selectRequestLogByRequestId(Long requestId)
|
||||
{
|
||||
public RequestLog selectRequestLogByRequestId(Long requestId) {
|
||||
return requestLogMapper.selectRequestLogByRequestId(requestId);
|
||||
}
|
||||
|
||||
@@ -48,8 +48,7 @@ public class RequestLogServiceImpl implements IRequestLogService
|
||||
* @return 接口记录
|
||||
*/
|
||||
@Override
|
||||
public List<RequestLog> selectRequestLogList(RequestLog requestLog)
|
||||
{
|
||||
public List<RequestLog> selectRequestLogList(RequestLog requestLog) {
|
||||
return requestLogMapper.selectRequestLogList(requestLog);
|
||||
}
|
||||
|
||||
@@ -60,11 +59,10 @@ public class RequestLogServiceImpl implements IRequestLogService
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int insertRequestLog(RequestLog requestLog)
|
||||
{
|
||||
if ("1".equals(requestLog.getIsSuccessful())){
|
||||
public int insertRequestLog(RequestLog requestLog) {
|
||||
if ("1".equals(requestLog.getIsSuccessful())) {
|
||||
return requestLogMapper.insertRequestLog(requestLog);
|
||||
}else {
|
||||
} else {
|
||||
//log.error("请求失败:" + requestLog.getErrorDetails());
|
||||
return 0;
|
||||
}
|
||||
@@ -77,8 +75,7 @@ public class RequestLogServiceImpl implements IRequestLogService
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int updateRequestLog(RequestLog requestLog)
|
||||
{
|
||||
public int updateRequestLog(RequestLog requestLog) {
|
||||
return requestLogMapper.updateRequestLog(requestLog);
|
||||
}
|
||||
|
||||
@@ -89,8 +86,7 @@ public class RequestLogServiceImpl implements IRequestLogService
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteRequestLogByRequestIds(Long[] requestIds)
|
||||
{
|
||||
public int deleteRequestLogByRequestIds(Long[] requestIds) {
|
||||
return requestLogMapper.deleteRequestLogByRequestIds(requestIds);
|
||||
}
|
||||
|
||||
@@ -101,8 +97,7 @@ public class RequestLogServiceImpl implements IRequestLogService
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteRequestLogByRequestId(Long requestId)
|
||||
{
|
||||
public int deleteRequestLogByRequestId(Long requestId) {
|
||||
return requestLogMapper.deleteRequestLogByRequestId(requestId);
|
||||
}
|
||||
|
||||
@@ -115,7 +110,7 @@ public class RequestLogServiceImpl implements IRequestLogService
|
||||
* @return requestLog
|
||||
*/
|
||||
@Override
|
||||
public RequestLog getRequestLog(String url, String endPoint,String param) {
|
||||
public RequestLog getRequestLog(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"));
|
||||
@@ -128,15 +123,17 @@ public class RequestLogServiceImpl implements IRequestLogService
|
||||
requestLog.setRequestUrl(url);
|
||||
try {
|
||||
String resStr = HttpUtil.post(url, param);
|
||||
|
||||
requestLog.setResponseBody(resStr);
|
||||
|
||||
InterfaceReceive bean = JSONUtil.toBean(resStr, InterfaceReceive.class);
|
||||
Date responseTime =new Date();
|
||||
Date responseTime = new Date();
|
||||
if (bean.getCode() == 200) {
|
||||
requestLog.setResponseTime(DateUtil.format(responseTime, "yyyy-MM-dd HH:mm:ss"));
|
||||
requestLog.setResponseStatus("1");
|
||||
requestLog.setDuration(Convert.toStr(DateUtil.between(requestTime, responseTime, DateUnit.MS)));
|
||||
requestLog.setIsSuccessful("1");
|
||||
}else {
|
||||
} else {
|
||||
requestLog.setResponseStatus("0");
|
||||
requestLog.setErrorDetails(bean.getMsg());
|
||||
requestLog.setIsSuccessful("0");
|
||||
@@ -171,4 +168,46 @@ public class RequestLogServiceImpl implements IRequestLogService
|
||||
requestLog.setDuration(Convert.toStr(DateUtil.between(requestTime, requestTime, DateUnit.MS)));
|
||||
return requestLog;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RequestLog getRequestLogs(String url, String param, String endPoint) {
|
||||
RequestLog requestLog = new RequestLog();
|
||||
Date requestTime = new Date();
|
||||
requestLog.setRequestTime(DateUtil.format(requestTime, "yyyy-MM-dd HH:mm:ss"));
|
||||
requestLog.setSourceSystem("wcs");
|
||||
requestLog.setTargetSystem("wms");
|
||||
requestLog.setEndpoint(param);
|
||||
requestLog.setRequestMethod("post");
|
||||
requestLog.setRequestHeaders(null);
|
||||
requestLog.setRequestBody(endPoint);
|
||||
requestLog.setRequestUrl(url);
|
||||
try {
|
||||
// 链式创建POST请求,获取完整响应对象
|
||||
HttpResponse response = HttpUtil.createPost(url)
|
||||
.body(endPoint, "application/json") // 传入表单参数
|
||||
.execute();
|
||||
String body = response.body();
|
||||
int status = response.getStatus();
|
||||
InterfaceReceive bean = JSONUtil.toBean(body, InterfaceReceive.class);
|
||||
Date responseTime = new Date();
|
||||
if (status == 200) {
|
||||
requestLog.setResponseTime(DateUtil.format(responseTime, "yyyy-MM-dd HH:mm:ss"));
|
||||
requestLog.setResponseStatus("1");
|
||||
requestLog.setDuration(Convert.toStr(DateUtil.between(requestTime, responseTime, DateUnit.MS)));
|
||||
requestLog.setIsSuccessful("1");
|
||||
} else {
|
||||
requestLog.setResponseStatus("0");
|
||||
requestLog.setErrorDetails(bean.getMsg());
|
||||
requestLog.setIsSuccessful("0");
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
requestLog.setErrorDetails(e.getMessage());
|
||||
requestLog.setIsSuccessful("0");
|
||||
requestLog.setResponseStatus("0");
|
||||
} finally {
|
||||
insertRequestLog(requestLog);
|
||||
}
|
||||
return requestLog;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,7 +141,7 @@ public class RoadCacheServiceImpl implements RoadCacheService {
|
||||
HashSet<String> otherCarSiteList = new HashSet<>();
|
||||
for (WcsSrgvQueue wcsSrgvQueue : otherCarQueue) {
|
||||
if (wcsSrgvQueue.getPathInfo() != null) {
|
||||
//根据小车当前点位去除已走路径
|
||||
//根据小车当前点位去除已走路径 除了当前点和上一个点之外都解锁
|
||||
DeviceSrgv otherCarCurrStatus = deviceSrgvService.selectDeviceSrgvByGuid(wcsSrgvQueue.getAgvId());
|
||||
String currSite = otherCarCurrStatus.getCurrSite();
|
||||
List<String> allSiteList = Arrays.asList(wcsSrgvQueue.getPathInfo().split(","));
|
||||
|
||||
@@ -4,8 +4,8 @@ package com.ruoyi.common;
|
||||
public class Constant {
|
||||
|
||||
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://192.168.188.251:9501/";
|
||||
public static final String WMS_BASE_PDA_URL = "http://localhost:8080/pda/";
|
||||
|
||||
public static final String JOB_FINISH_URL = WMS_BASE_URL+"jobFinish";
|
||||
public static final String CONTINUE_TASK_URL = RCS_BASE_URL+"continueTask";
|
||||
@@ -17,8 +17,13 @@ public class Constant {
|
||||
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 REQUEST_ENTER_URL = WMS_BASE_URL+"requestEnterByTrayCodeAndEntranceId";
|
||||
|
||||
|
||||
public static final String OUT_MAKE_SURE=WMS_BASE_PDA_URL+"outMakeSure";
|
||||
public static final String UPDATE_LED=WMS_BASE_URL+"updateLed";
|
||||
public static final String QUERY_AGV_QUENE=WMS_BASE_URL+"queryAgvQuene";
|
||||
public static final String FINISH_AGV_QUENE=WMS_BASE_URL+"finishAgvQuene";
|
||||
public static final String SEND_AGV_CAR=RCS_BASE_URL+"api/app/agvs-task";
|
||||
public static final String INSERT_AGV_QUENE=WMS_BASE_URL+"insertAgvQuene";
|
||||
public static final String UPDATE_LED_ERROR=WMS_BASE_URL+"updateLedError";
|
||||
public static final String WAREHOUSE_01 = "01";
|
||||
public static final String WAREHOUSE_02 = "02";
|
||||
|
||||
|
||||
@@ -83,6 +83,8 @@ public class DeviceSsj extends BaseEntity
|
||||
|
||||
@Excel(name="输送线模式 1-入库 2-出库")
|
||||
private int model;
|
||||
// 报警信息
|
||||
private int errorCode;
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.ruoyi.job.controller;
|
||||
|
||||
import java.util.List;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
@@ -29,8 +30,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/job/mydoJob")
|
||||
public class MydoJobController extends BaseController
|
||||
{
|
||||
public class MydoJobController extends BaseController {
|
||||
@Autowired
|
||||
private IMydoJobService mydoJobService;
|
||||
|
||||
@@ -39,8 +39,7 @@ public class MydoJobController extends BaseController
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('job:mydoJob:list')")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(MydoJob mydoJob)
|
||||
{
|
||||
public TableDataInfo list(MydoJob mydoJob) {
|
||||
startPage();
|
||||
List<MydoJob> list = mydoJobService.selectMydoJobList(mydoJob);
|
||||
return getDataTable(list);
|
||||
@@ -51,10 +50,11 @@ public class MydoJobController extends BaseController
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('job:mydoJob:list')")
|
||||
@GetMapping("/listFinish")
|
||||
public TableDataInfo listFinish(MydoJob mydoJob)
|
||||
{
|
||||
public TableDataInfo listFinish(MydoJob mydoJob) {
|
||||
startPage();
|
||||
// mydoJob.setStatus("3");
|
||||
List<MydoJob> list = mydoJobService.selectMydoJobFinishList(mydoJob);
|
||||
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
@@ -64,9 +64,15 @@ public class MydoJobController extends BaseController
|
||||
@PreAuthorize("@ss.hasPermi('job:mydoJob:export')")
|
||||
@Log(title = "作业信息", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, MydoJob mydoJob)
|
||||
{
|
||||
List<MydoJob> list = mydoJobService.selectMydoJobList(mydoJob);
|
||||
public void export(HttpServletResponse response, MydoJob mydoJob) {
|
||||
List<MydoJob> list = null;
|
||||
if (mydoJob.getStatus().equals("3")) {
|
||||
list = mydoJobService.selectMydoJobList(mydoJob);
|
||||
} else {
|
||||
|
||||
list = mydoJobService.selectMydoJobFinishList(mydoJob);
|
||||
}
|
||||
|
||||
ExcelUtil<MydoJob> util = new ExcelUtil<MydoJob>(MydoJob.class);
|
||||
util.exportExcel(response, list, "作业信息数据");
|
||||
}
|
||||
@@ -76,8 +82,7 @@ public class MydoJobController extends BaseController
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('job:mydoJob:query')")
|
||||
@GetMapping(value = "/{jobId}")
|
||||
public AjaxResult getInfo(@PathVariable("jobId") String jobId)
|
||||
{
|
||||
public AjaxResult getInfo(@PathVariable("jobId") String jobId) {
|
||||
return success(mydoJobService.selectMydoJobByJobId(jobId));
|
||||
}
|
||||
|
||||
@@ -87,8 +92,7 @@ public class MydoJobController extends BaseController
|
||||
@PreAuthorize("@ss.hasPermi('job:mydoJob:add')")
|
||||
@Log(title = "作业信息", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public AjaxResult add(@RequestBody MydoJob mydoJob)
|
||||
{
|
||||
public AjaxResult add(@RequestBody MydoJob mydoJob) {
|
||||
return toAjax(mydoJobService.insertMydoJob(mydoJob));
|
||||
}
|
||||
|
||||
@@ -98,8 +102,7 @@ public class MydoJobController extends BaseController
|
||||
@PreAuthorize("@ss.hasPermi('job:mydoJob:edit')")
|
||||
@Log(title = "作业信息", businessType = BusinessType.UPDATE)
|
||||
@PutMapping
|
||||
public AjaxResult edit(@RequestBody MydoJob mydoJob)
|
||||
{
|
||||
public AjaxResult edit(@RequestBody MydoJob mydoJob) {
|
||||
return toAjax(mydoJobService.updateMydoJob(mydoJob));
|
||||
}
|
||||
|
||||
@@ -108,9 +111,8 @@ public class MydoJobController extends BaseController
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('job:mydoJob:remove')")
|
||||
@Log(title = "作业信息", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{jobIds}")
|
||||
public AjaxResult remove(@PathVariable String[] jobIds)
|
||||
{
|
||||
@DeleteMapping("/{jobIds}")
|
||||
public AjaxResult remove(@PathVariable String[] jobIds) {
|
||||
return toAjax(mydoJobService.deleteMydoJobByJobIds(jobIds));
|
||||
}
|
||||
|
||||
@@ -118,8 +120,7 @@ public class MydoJobController extends BaseController
|
||||
@PreAuthorize("@ss.hasPermi('job:mydoJob:manualCallback')")
|
||||
@Log(title = "作业信息", businessType = BusinessType.UPDATE)
|
||||
@GetMapping("/manualCallback/{jobId}")
|
||||
public AjaxResult manualCallback(@PathVariable("jobId") String jobId)
|
||||
{
|
||||
public AjaxResult manualCallback(@PathVariable("jobId") String jobId) {
|
||||
return mydoJobService.manualCallback(jobId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,10 +24,11 @@ public class MydoJob extends BaseEntity
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 任务ID */
|
||||
@Excel(name = "任务ID")
|
||||
private String jobId;
|
||||
|
||||
/** 任务状态 */
|
||||
@Excel(name = "任务状态")
|
||||
@Excel(name = "任务状态",dictType = "job_status")
|
||||
private String status;
|
||||
|
||||
/** 任务号 */
|
||||
@@ -35,7 +36,7 @@ public class MydoJob extends BaseEntity
|
||||
private String taskNo;
|
||||
|
||||
/** 巷道ID */
|
||||
@Excel(name = "巷道ID")
|
||||
// @Excel(name = "巷道ID")
|
||||
private String roadwayId;
|
||||
|
||||
/** 货位ID */
|
||||
@@ -55,11 +56,11 @@ public class MydoJob extends BaseEntity
|
||||
private Long priority;
|
||||
|
||||
/** 执行阶段 */
|
||||
@Excel(name = "执行阶段")
|
||||
// @Excel(name = "执行阶段")
|
||||
private String executionPhase;
|
||||
|
||||
/** 任务类型 */
|
||||
@Excel(name = "任务类型")
|
||||
@Excel(name = "任务类型",dictType = "job_type")
|
||||
private String inOrOut;
|
||||
|
||||
/** 开始时间 */
|
||||
@@ -83,9 +84,9 @@ public class MydoJob extends BaseEntity
|
||||
private String warehouseId;
|
||||
|
||||
/** 重分标志 */
|
||||
@Excel(name = "重分标志")
|
||||
// @Excel(name = "重分标志")
|
||||
private String faultFlag;
|
||||
|
||||
@Excel(name = "托盘条码")
|
||||
private String trayCode;
|
||||
|
||||
private String inOut;
|
||||
|
||||
@@ -89,4 +89,18 @@ public interface MydoJobMapper
|
||||
Integer selectExit(String ssj);
|
||||
|
||||
Integer selectMydoJobCount();
|
||||
|
||||
Integer selectMydoJobIn();
|
||||
|
||||
Integer selectMydoJobCountOut();
|
||||
|
||||
Integer selectByJobOut(Integer currFloor);
|
||||
|
||||
Integer selectByJobOutIsOne(Integer currFloor);
|
||||
|
||||
Integer selectMydoJobExit(String exit);
|
||||
|
||||
Integer selectTheFloorYk(String theFloor);
|
||||
|
||||
void deleteMydoJobByTaskNos(List<String> validTaskNos);
|
||||
}
|
||||
|
||||
@@ -88,4 +88,16 @@ public interface IMydoJobService
|
||||
Integer selectExit(String ssj);
|
||||
|
||||
Integer selectMydoJobCount();
|
||||
|
||||
Integer selectMydoJobIn();
|
||||
|
||||
Integer selectMydoJobCountOut();
|
||||
|
||||
Integer selectByJobOut(Integer currFloor);
|
||||
|
||||
Integer selectByJobOutIsOne(Integer currFloor);
|
||||
|
||||
Integer selectMydoJobExit(String exit);
|
||||
|
||||
Integer selectTheFloorYk(String theFloor);
|
||||
}
|
||||
|
||||
@@ -193,4 +193,35 @@ public class MydoJobServiceImpl implements IMydoJobService
|
||||
public Integer selectMydoJobCount() {
|
||||
return mydoJobMapper.selectMydoJobCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer selectMydoJobIn() {
|
||||
return mydoJobMapper.selectMydoJobIn();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer selectMydoJobCountOut() {
|
||||
return mydoJobMapper.selectMydoJobCountOut();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer selectByJobOut(Integer currFloor) {
|
||||
|
||||
return mydoJobMapper.selectByJobOut(currFloor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer selectByJobOutIsOne(Integer currFloor) {
|
||||
return mydoJobMapper.selectByJobOutIsOne(currFloor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer selectMydoJobExit(String exit) {
|
||||
return mydoJobMapper.selectMydoJobExit(exit);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer selectTheFloorYk(String theFloor) {
|
||||
return mydoJobMapper.selectTheFloorYk(theFloor);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.ruoyi.queue.agv.mapper;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import com.ruoyi.queue.agv.domain.AgvQueue;
|
||||
|
||||
@@ -67,4 +68,6 @@ public interface AgvQueueMapper
|
||||
AgvQueue selectAgvQueueByTaskCode(String taskCode);
|
||||
|
||||
void insertHistory(String reqCode);
|
||||
|
||||
void selectKx(HashMap<String, Object> map);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.ruoyi.queue.agv.service;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import com.ruoyi.queue.agv.domain.AgvQueue;
|
||||
|
||||
@@ -71,4 +72,6 @@ public interface IAgvQueueService
|
||||
* @param reqCode
|
||||
*/
|
||||
void insertHistory(String reqCode);
|
||||
|
||||
void selectKx(HashMap<String, Object> map);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.ruoyi.queue.agv.service.impl;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -100,4 +101,9 @@ public class AgvQueueServiceImpl implements IAgvQueueService
|
||||
public void insertHistory(String reqCode) {
|
||||
agvQueueMapper.insertHistory(reqCode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void selectKx(HashMap<String, Object> map) {
|
||||
agvQueueMapper.selectKx(map);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.ruoyi.queue.srgv.mapper;
|
||||
|
||||
import java.util.List;
|
||||
import com.ruoyi.queue.srgv.domain.WcsSrgvQueue;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* 四向小车任务队列Mapper接口
|
||||
@@ -9,10 +10,11 @@ import com.ruoyi.queue.srgv.domain.WcsSrgvQueue;
|
||||
* @author ruoyi
|
||||
* @date 2025-11-21
|
||||
*/
|
||||
public interface WcsSrgvQueueMapper {
|
||||
public interface WcsSrgvQueueMapper
|
||||
{
|
||||
/**
|
||||
* 查询四向小车任务队列
|
||||
*
|
||||
*
|
||||
* @param guid 四向小车任务队列主键
|
||||
* @return 四向小车任务队列
|
||||
*/
|
||||
@@ -27,9 +29,12 @@ public interface WcsSrgvQueueMapper {
|
||||
public WcsSrgvQueue selectWcsSrgvQueueByFloor(String theFloor);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 查询四向小车任务队列列表
|
||||
*
|
||||
*
|
||||
* @param wcsSrgvQueue 四向小车任务队列
|
||||
* @return 四向小车任务队列集合
|
||||
*/
|
||||
@@ -37,7 +42,7 @@ public interface WcsSrgvQueueMapper {
|
||||
|
||||
/**
|
||||
* 新增四向小车任务队列
|
||||
*
|
||||
*
|
||||
* @param wcsSrgvQueue 四向小车任务队列
|
||||
* @return 结果
|
||||
*/
|
||||
@@ -45,7 +50,7 @@ public interface WcsSrgvQueueMapper {
|
||||
|
||||
/**
|
||||
* 修改四向小车任务队列
|
||||
*
|
||||
*
|
||||
* @param wcsSrgvQueue 四向小车任务队列
|
||||
* @return 结果
|
||||
*/
|
||||
@@ -53,7 +58,7 @@ public interface WcsSrgvQueueMapper {
|
||||
|
||||
/**
|
||||
* 删除四向小车任务队列
|
||||
*
|
||||
*
|
||||
* @param guid 四向小车任务队列主键
|
||||
* @return 结果
|
||||
*/
|
||||
@@ -61,7 +66,7 @@ public interface WcsSrgvQueueMapper {
|
||||
|
||||
/**
|
||||
* 批量删除四向小车任务队列
|
||||
*
|
||||
*
|
||||
* @param guids 需要删除的数据主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
@@ -75,4 +80,5 @@ public interface WcsSrgvQueueMapper {
|
||||
|
||||
Integer selectByEndSite();
|
||||
|
||||
List<String> selectTaskNosByGuids(String[] guids);
|
||||
}
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
package com.ruoyi.queue.srgv.service.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjUtil;
|
||||
import com.ruoyi.job.mapper.MydoJobMapper;
|
||||
import com.ruoyi.queue.srgv.domain.WcsSrgvQueueFinish;
|
||||
import com.ruoyi.queue.srgv.mapper.WcsSrgvQueueFinishMapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -26,7 +28,8 @@ public class WcsSrgvQueueServiceImpl implements IWcsSrgvQueueService
|
||||
private WcsSrgvQueueMapper wcsSrgvQueueMapper;
|
||||
@Autowired
|
||||
private WcsSrgvQueueFinishMapper wcsSrgvQueueFinishMapper;
|
||||
|
||||
@Autowired
|
||||
private MydoJobMapper mydoJobMapper;
|
||||
/**
|
||||
* 查询四向小车任务队列
|
||||
*
|
||||
@@ -100,9 +103,29 @@ public class WcsSrgvQueueServiceImpl implements IWcsSrgvQueueService
|
||||
@Override
|
||||
public int deleteWcsSrgvQueueByGuids(String[] guids)
|
||||
{
|
||||
if (guids == null || guids.length == 0) {
|
||||
return 0;
|
||||
}
|
||||
List<String> taskNos = wcsSrgvQueueMapper.selectTaskNosByGuids(guids);
|
||||
deleteMydoJobsByTaskNos(taskNos);
|
||||
return wcsSrgvQueueMapper.deleteWcsSrgvQueueByGuids(guids);
|
||||
}
|
||||
|
||||
private void deleteMydoJobsByTaskNos(List<String> taskNos) {
|
||||
if (taskNos == null || taskNos.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
List<String> validTaskNos = new ArrayList<>();
|
||||
for (String taskNo : taskNos) {
|
||||
if (taskNo != null && !"".equals(taskNo)) {
|
||||
validTaskNos.add(taskNo);
|
||||
}
|
||||
}
|
||||
if (!validTaskNos.isEmpty()) {
|
||||
mydoJobMapper.deleteMydoJobByTaskNos(validTaskNos);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除四向小车任务队列信息
|
||||
*
|
||||
@@ -131,7 +154,6 @@ public class WcsSrgvQueueServiceImpl implements IWcsSrgvQueueService
|
||||
return wcsSrgvQueueMapper.selectByCaogoPlaceSite(siteId);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Integer selectByEndSite() {
|
||||
return wcsSrgvQueueMapper.selectByEndSite();
|
||||
|
||||
@@ -73,6 +73,8 @@ public class PlcCdzRead implements Runnable {
|
||||
ddsx1 = SoftBasic.ByteToHexString(read2.Content);
|
||||
deviceCdz.setStatus(ParseUtil.optInt(0, ddsx1));
|
||||
// deviceCdz.setModel(ParseUtil.optInt(2, ddsx1));
|
||||
}else {
|
||||
log.error(read2.Message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,8 +118,8 @@ public class PlcCdzRead implements Runnable {
|
||||
}
|
||||
|
||||
void closeServer() {
|
||||
if (readWriteNet != null) {
|
||||
readWriteNet.ConnectClose();
|
||||
if (siemensS7Net != null) {
|
||||
siemensS7Net.ConnectClose();
|
||||
}
|
||||
setIsConnect(false);
|
||||
}
|
||||
|
||||
@@ -123,8 +123,8 @@ public class PlcDdjRead implements Runnable {
|
||||
}
|
||||
|
||||
void closeServer() {
|
||||
if (readWriteNet != null) {
|
||||
readWriteNet.ConnectClose();
|
||||
if (siemensS7Net != null) {
|
||||
siemensS7Net.ConnectClose();
|
||||
}
|
||||
setIsConnect(false);
|
||||
}
|
||||
|
||||
@@ -78,29 +78,39 @@ public class PlcSrgvRead implements Runnable {
|
||||
OperateResultExOne<byte[]> read1 = modbusTcpNet.Read("4068", (short) 15);//2400-2414
|
||||
if (read1.IsSuccess) {
|
||||
setValueByByte1(read1.Content, deviceSrgv);
|
||||
}else {
|
||||
log.error(read1.Message);
|
||||
}
|
||||
|
||||
OperateResultExOne<byte[]> read5 = modbusTcpNet.Read("4081", (short) 2);//2400-2414
|
||||
if (read5.IsSuccess) {
|
||||
setValueByByte5(read1.Content, deviceSrgv);
|
||||
}else {
|
||||
log.error(read1.Message);
|
||||
}
|
||||
|
||||
//读取二段任务 小车是否接收完成1段作业
|
||||
OperateResultExOne<byte[]> read3 = modbusTcpNet.Read("1000", (short) 2);//2400-2414
|
||||
if (read3.IsSuccess) {
|
||||
setValueByByte3(read3.Content, deviceSrgv);
|
||||
}else {
|
||||
log.error(read1.Message);
|
||||
}
|
||||
|
||||
//读取双字
|
||||
OperateResultExOne<byte[]> read2 = modbusTcpNet.Read("4060", (short) 8);// 4800-4807任务号、原点、目标点、当前
|
||||
if (read2.IsSuccess) {
|
||||
setValueByByte2(read2.Content, deviceSrgv);
|
||||
}else {
|
||||
log.error(read1.Message);
|
||||
}
|
||||
|
||||
// //读取双字,路径
|
||||
OperateResultExOne<byte[]> read4 = modbusTcpNet.Read("6000", (short) 800);// 5000-5799 路径 400个
|
||||
if (read4.IsSuccess) {
|
||||
setValueByByte4(read4.Content, deviceSrgv);
|
||||
}else {
|
||||
log.error(read1.Message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -234,8 +244,8 @@ public class PlcSrgvRead implements Runnable {
|
||||
}
|
||||
|
||||
void closeServer() {
|
||||
if (readWriteNet != null) {
|
||||
readWriteNet.ConnectClose();
|
||||
if (modbusTcpNet != null) {
|
||||
modbusTcpNet.ConnectClose();
|
||||
}
|
||||
setIsConnect(false);
|
||||
}
|
||||
|
||||
@@ -97,6 +97,7 @@ public class PlcSsjRead implements Runnable {
|
||||
ddsx1 = SoftBasic.ByteToHexString(read2.Content);
|
||||
ssjDevice.setKx(ParseUtil.optInt(4, ddsx1));
|
||||
ssjDevice.setDw(ParseUtil.optInt(6, ddsx1));
|
||||
ssjDevice.setErrorCode(ParseUtil.optInt(8,ddsx1));
|
||||
ssjDevice.setTaskNo(ParseUtil.optDInt(0, ddsx1));
|
||||
|
||||
}
|
||||
@@ -135,6 +136,8 @@ public class PlcSsjRead implements Runnable {
|
||||
ssjDevice.setDw(ParseUtil.optInt(6, ddsx1));
|
||||
// ssjDevice.setTrayCode(ParseUtil.optString(14, 12, ddsx1));
|
||||
// ssjDevice.setModel(ParseUtil.optInt(28, ddsx1));
|
||||
}else {
|
||||
log.error(read2.Message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -155,6 +158,8 @@ public class PlcSsjRead implements Runnable {
|
||||
// ssjDevice.setKx(ParseUtil.optInt(4, ddsx1));
|
||||
// ssjDevice.setDw(ParseUtil.optInt(6, ddsx1));
|
||||
|
||||
}else {
|
||||
log.error(read2.Message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -192,6 +197,8 @@ public class PlcSsjRead implements Runnable {
|
||||
//去除bytes中
|
||||
ssjDevice.setTrayCode(ParseUtil.filterAndConvert(trayCodeRead.Content));
|
||||
}
|
||||
}else {
|
||||
log.error(read2.Message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -235,8 +242,8 @@ public class PlcSsjRead implements Runnable {
|
||||
}
|
||||
|
||||
void closeServer() {
|
||||
if (readWriteNet != null) {
|
||||
readWriteNet.ConnectClose();
|
||||
if (siemensS7Net != null) {
|
||||
siemensS7Net.ConnectClose();
|
||||
}
|
||||
setIsConnect(false);
|
||||
}
|
||||
|
||||
@@ -126,8 +126,8 @@ public class PlcTsjRead implements Runnable {
|
||||
}
|
||||
|
||||
void closeServer() {
|
||||
if (readWriteNet != null) {
|
||||
readWriteNet.ConnectClose();
|
||||
if (siemensS7Net != null) {
|
||||
siemensS7Net.ConnectClose();
|
||||
}
|
||||
setIsConnect(false);
|
||||
}
|
||||
|
||||
@@ -23,6 +23,9 @@ import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead;
|
||||
import com.ruoyi.schedule.plcRead.util.Tools;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
@@ -67,6 +70,19 @@ public class CdzThread implements Runnable {
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isMoreThan30Min(String timeStr, String pattern) {
|
||||
// 1. 创建格式化器
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
|
||||
// 2. 解析字符串为时间对象
|
||||
LocalDateTime targetTime = LocalDateTime.parse(timeStr, formatter);
|
||||
// 3. 获取当前系统时间
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
// 4. 计算两个时间相差的总分钟(可正可负)
|
||||
long diffMinutes = ChronoUnit.MINUTES.between(targetTime, now);
|
||||
// 取绝对值:不管是过去/未来时间,只要间隔超30分钟就满足
|
||||
long absDiff = Math.abs(diffMinutes);
|
||||
return absDiff > 30;
|
||||
}
|
||||
|
||||
void dispatch() {
|
||||
Integer count = mydoJobService.selectMydoJobCount();
|
||||
@@ -79,7 +95,7 @@ public class CdzThread implements Runnable {
|
||||
if (deviceSrgv.getWorkMode() == 5 && deviceSrgv.getStatus() != 3 && deviceSrgv.getChargeFlag() != 2) {
|
||||
if (deviceSrgv.getBattery() <= LITTLE_BETTERY) {
|
||||
littleBatterySRgv.add(deviceSrgv);
|
||||
} else if (deviceSrgv.getBattery() <= MIDDLE_BETTERY && count == 0) {
|
||||
} else if (deviceSrgv.getBattery() <= MIDDLE_BETTERY && isMoreThan30Min(deviceSrgv.getLastTime(),"yyyy-MM-dd HH:mm:ss")) {
|
||||
middleBatterySRgv.add(deviceSrgv);
|
||||
}
|
||||
}
|
||||
@@ -136,11 +152,11 @@ public class CdzThread implements Runnable {
|
||||
}
|
||||
|
||||
//生成断电任务 有任务且电量大于50
|
||||
|
||||
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.getBattery() >= JOB_BETTERY && count > 0) ||
|
||||
if (( deviceSrgv.getBattery() >= MAX_BETTERY)
|
||||
&& deviceSrgv.getWorkMode() == 5
|
||||
&& deviceSrgv.getChargeFlag() == 2 && deviceCdz.getStatus() == 1) {
|
||||
createChargingOutJob(PlcSrgvRead.deviceSrgvMap.get(deviceCdz.getSpare1()), deviceCdz);
|
||||
|
||||
@@ -115,8 +115,7 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
createCarOutQueue();
|
||||
// 充电任务队列
|
||||
inCharging(deviceSrgv);
|
||||
// 充电完成调离
|
||||
// outCharging(deviceSrgv);
|
||||
|
||||
|
||||
} else {
|
||||
log.error("小车设备为空");
|
||||
@@ -191,10 +190,10 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
wcsSrgvQueue.setEndSite("tsj");
|
||||
wcsSrgvQueue.setDefault02("8");
|
||||
|
||||
Integer count = wcsSagvQueueMapper.selectTsj();
|
||||
if (count > 0) {
|
||||
return;
|
||||
}
|
||||
// Integer count = wcsSagvQueueMapper.selectTsj();
|
||||
// if (count > 0) {
|
||||
// return;
|
||||
// }
|
||||
}
|
||||
// TODO 如果小车的当前点和小车的充电点位置一样,直接生成已经下发的队列 等着充电就可以
|
||||
// if (deviceSrgv.getCurrSite().equals(chargingSite)) {
|
||||
@@ -230,14 +229,19 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
* 生成出库小车队列
|
||||
*/
|
||||
private void createCarOutQueue() {
|
||||
|
||||
|
||||
List<MydoJob> mydoJobs = mydoJobService.selectMydoJobOut();
|
||||
|
||||
if (!mydoJobs.isEmpty()) {
|
||||
for (MydoJob mydoJob1 : mydoJobs) {
|
||||
// 根据 当前层的 出库任务查询是否存在当前层的移库任务,如果有直接return;
|
||||
// String theFloor = mydoJob1.getTheFloor();
|
||||
// Integer count= mydoJobService.selectTheFloorYk(theFloor);
|
||||
// if (count>0){
|
||||
// return;
|
||||
// }
|
||||
|
||||
WcsSrgvQueue wcsSrgvQueue1 = wcsSagvQueueMapper.selectWcsSrgvQueueByTaskNo(mydoJob1.getTaskNo());
|
||||
if (wcsSrgvQueue1 == null) {
|
||||
|
||||
ConcurrentHashMap<String, DeviceSrgv> deviceSrgvMap = PlcSrgvRead.deviceSrgvMap;
|
||||
List<DeviceSrgv> deviceSrgvList = deviceSrgvMap.values().stream()
|
||||
.filter(deviceSrgv -> deviceSrgv.getWorkMode() == 5 && deviceSrgv.getStatus() == 1)
|
||||
@@ -247,18 +251,7 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
.collect(Collectors.toList());
|
||||
if (!deviceSrgvList.isEmpty()) {
|
||||
DeviceSrgv deviceSrgv = null;
|
||||
/*for (DeviceSrgv deviceSrgv1 : deviceSrgvList) {
|
||||
//优先出库层,如果没有优先邻近层
|
||||
if (deviceSrgv1.getCurrFloor().toString().equals(mydoJob1.getTheFloor())) {
|
||||
deviceSrgv = deviceSrgv1;
|
||||
break;
|
||||
} else if (deviceSrgv == null || (Math.abs(Integer.parseInt(mydoJob1.getTheFloor()) - deviceSrgv1.getCurrFloor())) < (Math.abs(Integer.parseInt(mydoJob1.getTheFloor()) - deviceSrgv.getCurrFloor()))) {
|
||||
WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv1.getDeviceId().toString());
|
||||
if (deviceSrgv1.getStatus() == 1 && wcsSrgvQueue2 == null) {
|
||||
deviceSrgv = deviceSrgv1;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
WcsSrgvMap wcsSrgvMap = new WcsSrgvMap();
|
||||
wcsSrgvMap.setCargoSpaceId(mydoJob1.getCargoSpaceId());
|
||||
List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap);
|
||||
@@ -266,25 +259,6 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
String cargoPickSite = wcsSrgvMaps.get(0).getSiteId();
|
||||
//先找流程相等的小车
|
||||
List<DeviceSrgv> currentFloorCarList = deviceSrgvList.stream().filter(x -> x.getCurrFloor().toString().equals(mydoJob1.getTheFloor())).collect(Collectors.toList());
|
||||
// int z = 100000;
|
||||
// for (DeviceSrgv srgv : currentFloorCarList) {
|
||||
// // 坐标截取和转换(保留你的原有逻辑)
|
||||
// Integer startX = Convert.toInt(StrUtil.sub(srgv.getCurrSite(), 0, 2));
|
||||
// Integer endX = Convert.toInt(StrUtil.sub(cargoPickSite, 0, 2));
|
||||
// Integer startY = Convert.toInt(StrUtil.sub(srgv.getCurrSite(), 2, 4));
|
||||
// Integer endY = Convert.toInt(StrUtil.sub(cargoPickSite, 2, 4));
|
||||
//
|
||||
// // 计算当前小车到取货点的曼哈顿距离 TODO 先算Y 再算X 如果Y相等再算X
|
||||
//// int tempZ = Math.abs(startX - endX) + Math.abs(startY - endY);
|
||||
// int tempZ = Math.abs(startY - endY) != 0 ? Math.abs(startY - endY) : Math.abs(startX - endX);
|
||||
//
|
||||
// // 核心修正:只要当前tempZ比记录的最小z更小,就更新z和对应的小车
|
||||
// if (tempZ < z) {
|
||||
// z = tempZ; // 把z更新为当前更小的距离
|
||||
// deviceSrgv = srgv; // 记录这个更近的小车
|
||||
// log.info("楼层相等,找到更近小车 距离{} srgv:{}", tempZ, srgv);
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
int minYDistance = 100000; // 记录最小的Y轴距离
|
||||
@@ -321,8 +295,6 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
|
||||
// 最终选中的小车赋值给deviceSrgv(保持原有变量名兼容)
|
||||
deviceSrgv = bestSrgv;
|
||||
|
||||
|
||||
if (deviceSrgv == null) {
|
||||
//如果未选择到小车,再找其他楼层的小车
|
||||
for (DeviceSrgv deviceSrgv1 : deviceSrgvList) {
|
||||
@@ -330,7 +302,7 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv1.getDeviceId().toString());
|
||||
if (deviceSrgv1.getStatus() == 1 && wcsSrgvQueue2 == null) {
|
||||
deviceSrgv = deviceSrgv1; // 更新为更小楼层的小车
|
||||
log.info("楼层bu相等:{}", deviceSrgv);
|
||||
log.info("楼层不相等:{}", deviceSrgv);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -370,13 +342,8 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
//终点是提升机
|
||||
endSite = "tsj";
|
||||
}
|
||||
// if (endSite.equals("tsj")) {
|
||||
// Integer count = wcsSagvQueueMapper.selectTsj();
|
||||
// if (count > 0) {
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
|
||||
String ssj1 = null;
|
||||
String ssj2 = null;
|
||||
mydoJob1.setExitId(null);
|
||||
WcsSrgvMap wcsSrgvMap1 = new WcsSrgvMap();
|
||||
String cargoPlaceSite = "";
|
||||
@@ -391,21 +358,50 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
String ssj = "";
|
||||
if (deviceSsj1.getName().equals("TD1001")) {
|
||||
s = "050101";
|
||||
ssj = "L1004";
|
||||
ssj1 = "L1004";
|
||||
} else {
|
||||
s = "070101";
|
||||
ssj = "L1005";
|
||||
}
|
||||
Integer count = mydoJobService.selectExit(ssj);
|
||||
if (count >= 0 && count <= 1) {
|
||||
mydoJob1.setExitId(ssj);
|
||||
mydoJobService.updateMydoJob(mydoJob1);
|
||||
outModelSSJ.add(s);
|
||||
break;
|
||||
ssj2 = "L1005";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Integer count1 = 0;
|
||||
Integer count2 = 0;
|
||||
if (ssj1 != null) {
|
||||
count1 = mydoJobService.selectExit(ssj1);
|
||||
}
|
||||
if (ssj2 != null) {
|
||||
count2 = mydoJobService.selectExit(ssj2);
|
||||
}
|
||||
if (ssj1 != null && ssj2 != null) {
|
||||
if (count1 < count2) {
|
||||
mydoJob1.setExitId(ssj1);
|
||||
mydoJob1.setStartTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
||||
mydoJobService.updateMydoJob(mydoJob1);
|
||||
outModelSSJ.add("050101");
|
||||
} else {
|
||||
mydoJob1.setExitId(ssj2);
|
||||
mydoJob1.setStartTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
||||
mydoJobService.updateMydoJob(mydoJob1);
|
||||
outModelSSJ.add("070101");
|
||||
}
|
||||
}
|
||||
if (ssj1 != null && ssj2 == null) {
|
||||
mydoJob1.setExitId(ssj1);
|
||||
mydoJob1.setStartTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
||||
mydoJobService.updateMydoJob(mydoJob1);
|
||||
outModelSSJ.add("050101");
|
||||
}
|
||||
if (ssj1 == null && ssj2 != null) {
|
||||
mydoJob1.setExitId(ssj2);
|
||||
mydoJob1.setStartTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
||||
mydoJobService.updateMydoJob(mydoJob1);
|
||||
outModelSSJ.add("070101");
|
||||
}
|
||||
|
||||
|
||||
cargoPlaceSite = wcsSagvQueueMapper.selectMinCountJob(outModelSSJ);
|
||||
if (Objects.equals(cargoPlaceSite, "")) {
|
||||
return;
|
||||
@@ -424,37 +420,13 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
if (!sameSiteDevices.isEmpty() && !Objects.equals(sameSiteDevices.get(0).getDeviceId(), deviceSrgv.getDeviceId())) {
|
||||
WcsSrgvMap wcsSrgvMap3 = new WcsSrgvMap();
|
||||
wcsSrgvMap3.setRemark("cache");
|
||||
// List<WcsSrgvMap> wcsSrgvMaps3 = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap3);
|
||||
// for (WcsSrgvMap wcsSrgvMap4 : wcsSrgvMaps3) {
|
||||
// //deviceSrgvMap中所有对象的currSite都不等于wcsSrgvMap4的siteId的对象
|
||||
// if (deviceSrgvMap.values().stream().noneMatch(d -> d.getCurrSite().equals(wcsSrgvMap4.getSiteId()))) {
|
||||
// //生成小车到缓存点队列
|
||||
// WcsSrgvQueue wcsSrgvQueue5 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(sameSiteDevices.get(0).getDeviceId().toString());
|
||||
// WcsSrgvQueue wcsSrgvQueue = new WcsSrgvQueue();
|
||||
// wcsSrgvQueue.setCargoPlaceSite(wcsSrgvMap4.getSiteId());
|
||||
// List<WcsSrgvQueue> wcsSrgvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueue);
|
||||
// if (wcsSrgvQueue5 == null && wcsSrgvQueues.isEmpty()) {
|
||||
// WcsSrgvQueue wcsSrgvQueue3 = new WcsSrgvQueue();
|
||||
// wcsSrgvQueue3.setGuid(UUID.randomUUID().toString());
|
||||
// wcsSrgvQueue3.setTaskNo("11111");
|
||||
// wcsSrgvQueue3.setTaskType("1");
|
||||
// wcsSrgvQueue3.setPriority(Long.parseLong("2"));
|
||||
// wcsSrgvQueue3.setCargo("1");
|
||||
// wcsSrgvQueue3.setIssued(issued);
|
||||
// wcsSrgvQueue3.setExecutionStatus(executionStatus);
|
||||
// wcsSrgvQueue3.setCargoPickSite(cargoPickSite);
|
||||
// wcsSrgvQueue3.setCargoPlaceSite(wcsSrgvMap4.getSiteId());
|
||||
// wcsSrgvQueue3.setStartSite(sameSiteDevices.get(0).getCurrSite());
|
||||
// wcsSrgvQueue3.setEndSite(wcsSrgvMap4.getSiteId());
|
||||
// wcsSrgvQueue3.setTheFloor(sameSiteDevices.get(0).getCurrFloor().toString());
|
||||
// wcsSrgvQueue3.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
||||
// wcsSrgvQueue3.setAgvId(sameSiteDevices.get(0).getDeviceId().toString());
|
||||
// wcsSrgvQueue3.setDefault02("4");
|
||||
// wcsSrgvQueue3.setDefault07(sameSiteDevices.get(0).getCurrFloor().toString());
|
||||
// wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue3);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
// 强复合作业控制,如果车在取货放货点,判断是否有要入库的作业,有的话则直接退出,让小车开始进入库的
|
||||
Integer InJobCount = mydoJobService.selectMydoJobIn();
|
||||
if (deviceSrgv != null && (deviceSrgv.getCurrSite().equals("070101") || deviceSrgv.getCurrSite().equals("050101")) && InJobCount > 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -498,8 +470,6 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -541,16 +511,21 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
return;
|
||||
}
|
||||
List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap);
|
||||
|
||||
//取货地址
|
||||
String cargoPickSite = wcsSrgvMaps.get(0).getSiteId();
|
||||
|
||||
//先找层数相等的小车
|
||||
List<DeviceSrgv> currentFloorCarList = deviceSrgvList.stream().filter(x -> x.getCurrFloor().toString().equals(mydoJob1.getTheFloor())).collect(Collectors.toList());
|
||||
int minYDistance = 100000; // 记录最小的Y轴距离
|
||||
int minXDistance = 100000; // 记录最小的X轴距离
|
||||
DeviceSrgv bestSrgv = null; // 最终选中的最优小车
|
||||
Integer count = wcsSagvQueueMapper.selectByCaogoPlaceSite("070101");
|
||||
Integer counts = wcsSagvQueueMapper.selectByCaogoPlaceSite("050101");
|
||||
// 暂时不加限制
|
||||
// if (currentFloorCarList.size() == 0 && (counts > 0 || count > 0)) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
// 先找目标层小车
|
||||
for (DeviceSrgv srgv : currentFloorCarList) {
|
||||
// 坐标截取和转换(保留原有逻辑)
|
||||
Integer startX = Convert.toInt(StrUtil.sub(srgv.getCurrSite(), 0, 2));
|
||||
@@ -563,18 +538,17 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
int currentXDistance = Math.abs(startX - endX);
|
||||
|
||||
// 2. 核心逻辑:优先按Y轴排序,Y轴相同再按X轴排序
|
||||
// 用 if-else if 合并,互斥判断
|
||||
if (currentYDistance < minYDistance) {
|
||||
// 情况1:当前Y轴距离更小,直接更新最优解
|
||||
// Y更近
|
||||
minYDistance = currentYDistance;
|
||||
minXDistance = currentXDistance;
|
||||
bestSrgv = srgv;
|
||||
log.info("楼层相等,找到更近小车(Y轴更优) Y距离{} X距离{} srgv:{}", currentYDistance, currentXDistance, srgv);
|
||||
} else if (currentYDistance == minYDistance) {
|
||||
// 情况2:Y轴距离相同,比较X轴距离
|
||||
// Y相同,比X
|
||||
if (currentXDistance < minXDistance) {
|
||||
minXDistance = currentXDistance;
|
||||
bestSrgv = srgv;
|
||||
log.info("楼层相等,找到更近小车(X轴更优) Y距离{} X距离{} srgv:{}", currentYDistance, currentXDistance, srgv);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -582,32 +556,82 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
// 最终选中的小车赋值给deviceSrgv(保持原有变量名兼容)
|
||||
deviceSrgv = bestSrgv;
|
||||
if (deviceSrgv == null) {
|
||||
//如果未选择到小车,找目标层小车
|
||||
//如果没找到目标层小车 先找一层的车
|
||||
for (DeviceSrgv deviceSrgv1 : deviceSrgvList) {
|
||||
if (!deviceSrgv1.getCurrFloor().toString().equals(mydoJob1.getTheFloor())) {
|
||||
if (deviceSrgv1.getCurrFloor().toString().equals("1")) {
|
||||
WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv1.getDeviceId().toString());
|
||||
if (deviceSrgv1.getStatus() == 1 && wcsSrgvQueue2 == null) {
|
||||
deviceSrgv = deviceSrgv1; // 更新为更小楼层的小车
|
||||
log.info("楼层bu相等:{}", deviceSrgv);
|
||||
Integer startX = Convert.toInt(StrUtil.sub(deviceSrgv1.getCurrSite(), 0, 2));
|
||||
Integer endX = Convert.toInt(StrUtil.sub(cargoPickSite, 0, 2));
|
||||
Integer startY = Convert.toInt(StrUtil.sub(deviceSrgv1.getCurrSite(), 2, 4));
|
||||
Integer endY = Convert.toInt(StrUtil.sub(cargoPickSite, 2, 4));
|
||||
|
||||
// 1. 计算当前小车到目标点的Y轴、X轴绝对距离
|
||||
int currentYDistance = Math.abs(startY - endY);
|
||||
int currentXDistance = Math.abs(startX - endX);
|
||||
|
||||
// 2. 核心逻辑:优先按Y轴排序,Y轴相同再按X轴排序
|
||||
// 用 if-else if 合并,互斥判断
|
||||
if (currentYDistance < minYDistance) {
|
||||
// Y更近
|
||||
minYDistance = currentYDistance;
|
||||
minXDistance = currentXDistance;
|
||||
deviceSrgv = deviceSrgv1;
|
||||
} else if (currentYDistance == minYDistance) {
|
||||
// Y相同,比X
|
||||
if (currentXDistance < minXDistance) {
|
||||
minXDistance = currentXDistance;
|
||||
deviceSrgv = deviceSrgv1;
|
||||
}
|
||||
}
|
||||
}
|
||||
// 一层的车没有 再找不等于作业层的车
|
||||
} else if (!deviceSrgv1.getCurrFloor().toString().equals(mydoJob1.getTheFloor())) {
|
||||
WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv1.getDeviceId().toString());
|
||||
if (deviceSrgv1.getStatus() == 1 && wcsSrgvQueue2 == null) {
|
||||
Integer startX = Convert.toInt(StrUtil.sub(deviceSrgv1.getCurrSite(), 0, 2));
|
||||
Integer endX = Convert.toInt(StrUtil.sub(cargoPickSite, 0, 2));
|
||||
Integer startY = Convert.toInt(StrUtil.sub(deviceSrgv1.getCurrSite(), 2, 4));
|
||||
Integer endY = Convert.toInt(StrUtil.sub(cargoPickSite, 2, 4));
|
||||
|
||||
// 1. 计算当前小车到目标点的Y轴、X轴绝对距离
|
||||
int currentYDistance = Math.abs(startY - endY);
|
||||
int currentXDistance = Math.abs(startX - endX);
|
||||
|
||||
// 2. 核心逻辑:优先按Y轴排序,Y轴相同再按X轴排序
|
||||
// 用 if-else if 合并,互斥判断
|
||||
if (currentYDistance < minYDistance) {
|
||||
// Y更近
|
||||
minYDistance = currentYDistance;
|
||||
minXDistance = currentXDistance;
|
||||
deviceSrgv = deviceSrgv1;
|
||||
} else if (currentYDistance == minYDistance) {
|
||||
// Y相同,比X
|
||||
if (currentXDistance < minXDistance) {
|
||||
minXDistance = currentXDistance;
|
||||
deviceSrgv = deviceSrgv1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// // 如果目标层小车也没有 找其他层小车
|
||||
// if (deviceSrgv==null){
|
||||
// for (DeviceSrgv deviceSrgv1 : deviceSrgvList) {
|
||||
// if (!deviceSrgv1.getCurrFloor().toString().equals(mydoJob1.getTheFloor())) {
|
||||
// WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv1.getDeviceId().toString());
|
||||
// if (deviceSrgv1.getStatus() == 1 && wcsSrgvQueue2 == null) {
|
||||
// deviceSrgv = deviceSrgv1; // 更新为更小楼层的小车
|
||||
// log.info("楼层bu相等:{}", deviceSrgv);
|
||||
//
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// }
|
||||
|
||||
if (deviceSrgv != null) {
|
||||
Integer currFloor = deviceSrgv.getCurrFloor();
|
||||
String currSite = deviceSrgv.getCurrSite();
|
||||
Integer i = mydoJobService.selectByJobOut(currFloor);
|
||||
Integer a = mydoJobService.selectByJobOutIsOne(currFloor);
|
||||
if (i > 0 && currFloor > 1) {
|
||||
return;
|
||||
}
|
||||
// 车在一层 并且一层的出库任务还有,并且车的当前点位不在取货放货点
|
||||
if (currFloor == 1 && a > 0 && !deviceSrgv.getCurrSite().equals("070101") && !deviceSrgv.getCurrSite().equals("050101")) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (deviceSrgv != null) {
|
||||
|
||||
WcsSrgvQueue wcsSrgvQueue2 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(deviceSrgv.getDeviceId().toString());
|
||||
@@ -634,61 +658,8 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
// 小车不在1楼
|
||||
endSite = "tsj";
|
||||
}
|
||||
// if (endSite.equals("tsj")) {
|
||||
// Integer count = wcsSagvQueueMapper.selectTsj();
|
||||
// if (count > 0) {
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
//筛选出deviceSrgvMap中deviceSrgv.getWorkMode() == 4并且deviceSrgv.getStatus() == 1并且deviceSrgv.getCurrSite() == cargoPickSite得对象,并排除掉其中deviceId与deviceSrgv.getDeviceId()相同的对象
|
||||
// 如果当前有其他小车也要去入库点取货 TODO 判断的是如果当前车要去取货点,但是取货点有车的的情况
|
||||
// List<DeviceSrgv> sameSiteDevices = deviceSrgvMap.values().stream()
|
||||
// .filter(d -> d.getWorkMode() == 5
|
||||
// && d.getStatus() == 1
|
||||
// && d.getCurrSite().equals(cargoPickSite))
|
||||
// .collect(Collectors.toList());
|
||||
// 和当前小车不是一个 那么就生成一个去离母通道最近的点
|
||||
// if (!sameSiteDevices.isEmpty() && !Objects.equals(sameSiteDevices.get(0).getDeviceId(), deviceSrgv.getDeviceId())) {
|
||||
// WcsSrgvMap wcsSrgvMap3 = new WcsSrgvMap();
|
||||
// wcsSrgvMap3.setSiteId("07070"+sameSiteDevices.get(0).getCurrFloor());
|
||||
// List<WcsSrgvMap> wcsSrgvMaps3 = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap3);
|
||||
// for (WcsSrgvMap wcsSrgvMap4 : wcsSrgvMaps3) {
|
||||
//
|
||||
// if (deviceSrgvMap.values().stream().noneMatch(d -> d.getCurrSite().equals(wcsSrgvMap4.getSiteId()))) {
|
||||
// WcsSrgvQueue wcsSrgvQueue5 = wcsSagvQueueMapper.selectWcsSrgvQueueByAgvId(sameSiteDevices.get(0).getDeviceId().toString());
|
||||
// WcsSrgvQueue wcsSrgvQueue = new WcsSrgvQueue();
|
||||
// wcsSrgvQueue.setCargoPlaceSite(wcsSrgvMap4.getSiteId());
|
||||
// List<WcsSrgvQueue> wcsSrgvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueue);
|
||||
// if (wcsSrgvQueue5 == null && wcsSrgvQueues.isEmpty()) {
|
||||
// //生成占位小车到缓存点队列
|
||||
// WcsSrgvQueue wcsSrgvQueue3 = new WcsSrgvQueue();
|
||||
// wcsSrgvQueue3.setGuid(UUID.randomUUID().toString());
|
||||
// wcsSrgvQueue3.setTaskNo(String.valueOf(taskCache));
|
||||
// wcsSrgvQueue3.setTaskType("1");
|
||||
// wcsSrgvQueue3.setPriority(Long.parseLong("2"));
|
||||
// wcsSrgvQueue3.setCargo("1");
|
||||
// wcsSrgvQueue3.setIssued(issued);
|
||||
// wcsSrgvQueue3.setExecutionStatus(executionStatus);
|
||||
// wcsSrgvQueue3.setCargoPickSite(cargoPickSite);
|
||||
// wcsSrgvQueue3.setCargoPlaceSite(wcsSrgvMap4.getSiteId());
|
||||
// wcsSrgvQueue3.setStartSite(sameSiteDevices.get(0).getCurrSite());
|
||||
// wcsSrgvQueue3.setEndSite(wcsSrgvMap4.getSiteId());
|
||||
// wcsSrgvQueue3.setTheFloor(sameSiteDevices.get(0).getCurrFloor().toString());
|
||||
// wcsSrgvQueue3.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
||||
// wcsSrgvQueue3.setAgvId(sameSiteDevices.get(0).getDeviceId().toString());
|
||||
// wcsSrgvQueue3.setDefault02("4");
|
||||
// wcsSrgvQueue3.setDefault07(sameSiteDevices.get(0).getCurrFloor().toString());
|
||||
// wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue3);
|
||||
// taskCache++;
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
//生成小车取货队列
|
||||
WcsSrgvQueue wcsSrgvQueue = new WcsSrgvQueue();
|
||||
@@ -716,15 +687,15 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
}
|
||||
wcsSrgvQueue.setDefault07("1");
|
||||
wcsSagvQueueMapper.insertWcsSrgvQueue(wcsSrgvQueue);
|
||||
mydoJob1.setStartTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
||||
mydoJobService.updateMydoJob(mydoJob1);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -761,6 +732,134 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 公共方法:生成小车避让任务
|
||||
*/
|
||||
private void buildAvoidTask(String agvId, DeviceSrgv device, Integer floor) {
|
||||
ConcurrentHashMap<String, DeviceSrgv> deviceSrgvMap = PlcSrgvRead.deviceSrgvMap;
|
||||
List<DeviceSrgv> deviceSrgvs = deviceSrgvMap.values().stream()
|
||||
.filter(d -> d.getWorkMode() == 5
|
||||
&& d.getStatus() == 1
|
||||
&& d.getCurrFloor().equals(floor))
|
||||
.collect(Collectors.toList());
|
||||
ArrayList<String> sites = new ArrayList<>();
|
||||
for (DeviceSrgv d : deviceSrgvs) {
|
||||
sites.add(d.getCurrSite());
|
||||
}
|
||||
List<WcsSrgvMap> cacheMaps = wcsSrgvMapService.selectNotInsite("cache", floor, sites);
|
||||
if (CollUtil.isEmpty(cacheMaps)) {
|
||||
log.warn("楼层 {} 无可用避让缓存点,无法生成避让任务", floor);
|
||||
return;
|
||||
}
|
||||
|
||||
// 生成阻挡车的避让任务
|
||||
WcsSrgvQueue taskB = new WcsSrgvQueue();
|
||||
taskB.setGuid(UUID.randomUUID().toString());
|
||||
taskB.setTaskNo(String.valueOf(taskCache));
|
||||
taskB.setAgvId(agvId);
|
||||
taskB.setTaskType("4"); // 避让任务
|
||||
taskB.setDefault02("4"); // 业务类型标识为点到点
|
||||
taskB.setPriority(9L); // 高优先级
|
||||
taskB.setIssued("0"); // 未下发
|
||||
taskB.setExecutionStatus("1");
|
||||
taskB.setStartSite(device.getCurrSite());
|
||||
taskB.setCargoPickSite(device.getCurrSite());
|
||||
|
||||
// 选择避让缓存点
|
||||
if (cacheMaps.size() > 1) {
|
||||
Integer count = wcsSagvQueueMapper.selectByCaogoPlaceSite(cacheMaps.get(0).getSiteId());
|
||||
if (count > 0) {
|
||||
taskB.setCargoPlaceSite(cacheMaps.get(1).getSiteId());
|
||||
taskB.setEndSite(cacheMaps.get(1).getSiteId());
|
||||
} else {
|
||||
taskB.setCargoPlaceSite(cacheMaps.get(0).getSiteId());
|
||||
taskB.setEndSite(cacheMaps.get(0).getSiteId());
|
||||
}
|
||||
} else {
|
||||
taskB.setCargoPlaceSite(cacheMaps.get(0).getSiteId());
|
||||
taskB.setEndSite(cacheMaps.get(0).getSiteId());
|
||||
}
|
||||
|
||||
taskB.setTheFloor(floor.toString());
|
||||
taskB.setDefault07(floor.toString());
|
||||
taskB.setCreateDate(DateUtil.now());
|
||||
wcsSagvQueueMapper.insertWcsSrgvQueue(taskB);
|
||||
taskCache++;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理通道占用避让:目标通道有其他车则生成避让任务
|
||||
*
|
||||
* @param currDevice 当前调度小车
|
||||
* @param floor 当前楼层
|
||||
* @param shortestPath 最短路径
|
||||
* @return true=已触发避让,当前车需等待;false=通道无占用,正常走后续逻辑
|
||||
*/
|
||||
private boolean handleChannelAvoid(DeviceSrgv currDevice, Integer floor, List<int[]> shortestPath) {
|
||||
// 1. 取路径终点坐标
|
||||
int[] lastPoint = shortestPath.get(shortestPath.size() - 1);
|
||||
int x = lastPoint[0];
|
||||
int y = lastPoint[1];
|
||||
|
||||
// 2. 根据坐标查询站点及所属通道
|
||||
WcsSrgvMap queryMap = new WcsSrgvMap();
|
||||
queryMap.setX(x);
|
||||
queryMap.setY(y);
|
||||
queryMap.setZ(floor);
|
||||
List<WcsSrgvMap> siteList = wcsSrgvMapService.selectWcsSrgvMapList(queryMap);
|
||||
if (CollUtil.isEmpty(siteList)) {
|
||||
return false;
|
||||
}
|
||||
// 目标通道ID
|
||||
String targetChannelId = siteList.get(0).getSpaceArea();
|
||||
if (StrUtil.isBlank(targetChannelId)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 3. 筛选:同楼层、同通道、非当前车、空闲可调度的小车
|
||||
List<Map.Entry<String, DeviceSrgv>> channelCarList = PlcSrgvRead.deviceSrgvMap.entrySet().stream()
|
||||
.filter(entry -> entry.getValue() != null)
|
||||
// 同楼层
|
||||
.filter(entry -> floor.equals(entry.getValue().getCurrFloor()))
|
||||
// 不是当前调度的车
|
||||
.filter(entry -> !Objects.equals(Convert.toStr(currDevice.getDeviceId()), entry.getKey()))
|
||||
// 空闲可调度状态(和原有避让状态保持一致)
|
||||
.filter(entry -> entry.getValue().getWorkMode() == 5
|
||||
&& entry.getValue().getStatus() == 1)
|
||||
// 车辆当前站点属于目标通道
|
||||
.filter(entry -> {
|
||||
String currSite = entry.getValue().getCurrSite();
|
||||
WcsSrgvMap siteParam = new WcsSrgvMap();
|
||||
siteParam.setSiteId(currSite);
|
||||
siteParam.setZ(floor);
|
||||
List<WcsSrgvMap> siteInfos = wcsSrgvMapService.selectWcsSrgvMapList(siteParam);
|
||||
return CollUtil.isNotEmpty(siteInfos)
|
||||
&& targetChannelId.equals(siteInfos.get(0).getSpaceArea());
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 4. 通道内无其他车,无需避让
|
||||
if (CollUtil.isEmpty(channelCarList)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 5. 取通道内第一台占用车,生成避让任务
|
||||
Map.Entry<String, DeviceSrgv> blockCar = channelCarList.get(0);
|
||||
String blockAgvId = blockCar.getKey();
|
||||
DeviceSrgv blockDevice = blockCar.getValue();
|
||||
|
||||
// 查询阻挡车是否已有任务,无任务才生成避让
|
||||
WcsSrgvQueue checkQueue = new WcsSrgvQueue();
|
||||
checkQueue.setAgvId(blockAgvId);
|
||||
List<WcsSrgvQueue> existQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(checkQueue);
|
||||
if (CollUtil.isEmpty(existQueues)) {
|
||||
buildAvoidTask(blockAgvId, blockDevice, floor);
|
||||
log.info("通道 {} 内存在小车 {},已生成通道避让任务", targetChannelId, blockAgvId);
|
||||
}
|
||||
// 触发避让,当前小车等待
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 小车发送点对点任务
|
||||
*/
|
||||
@@ -805,15 +904,51 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
|
||||
//处理地图
|
||||
int[][] emptyMap = roadCacheService.handleMap(arrByRoadSite, deviceSrgv, floor);
|
||||
|
||||
//计算最短路径
|
||||
List<int[]> shortestPath = PathFinder.findShortestPath(emptyMap, arrByRoadSite.get(startSite).getX(), arrByRoadSite.get(startSite).getY(), arrByRoadSite.get(endSite).getX(), arrByRoadSite.get(endSite).getY());
|
||||
|
||||
// TODO 小车避让 目前只针对同层最多两台车 并且点位设置到了050201 判断地图中取的路径 不能直达说明有车阻挡 直接返回-1 用-1判断小车阻挡调离小车
|
||||
if (shortestPath.size() > 0) {
|
||||
if (shortestPath.size() == 1 && shortestPath.get(0)[0] == -1) {
|
||||
|
||||
// ===================== 新增:通道占用避让判断 开始 =====================
|
||||
boolean channelNeedAvoid = handleChannelAvoid(deviceSrgv, floor, shortestPath);
|
||||
if (channelNeedAvoid) {
|
||||
return false;
|
||||
}
|
||||
// ===================== 新增:通道占用避让判断 结束 =====================
|
||||
|
||||
if (shortestPath.size() == 1 && shortestPath.get(0)[0] == -1) {
|
||||
// 如果阻挡了 则找一个出库缓存点 让车先过去
|
||||
// 执行队列不是空的 且在一层 并且车在提升机里面 要去的目标点也是队列的目标点,则直接让车先去缓存出库点
|
||||
if (floor == 1 && "090501".equals(wcsSrgvQueue.getStartSite()) && wcsSrgvQueue.getEndSite().equals(wcsSrgvQueue.getCargoPlaceSite()) && "2".equals(wcsSrgvQueue.getDefault02())) {
|
||||
WcsSrgvMap wcsSrgvMapParam = new WcsSrgvMap();
|
||||
wcsSrgvMapParam.setRemark("outCache");
|
||||
List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMapParam);
|
||||
List<String> cacheSite = wcsSrgvMaps.stream().sorted(Comparator.comparing(WcsSrgvMap::getSiteId)).map(WcsSrgvMap::getSiteId).collect(Collectors.toList());
|
||||
List<String> currentSRgvSite = new ArrayList<>();
|
||||
for (String srgvCode : PlcSrgvRead.deviceSrgvMap.keySet()) {
|
||||
currentSRgvSite.add(PlcSrgvRead.deviceSrgvMap.get(srgvCode).getCurrSite());
|
||||
}
|
||||
cacheSite.removeAll(currentSRgvSite);
|
||||
if (CollUtil.isNotEmpty(cacheSite)) {
|
||||
for (String cache : cacheSite) {
|
||||
WcsSrgvQueue wcsSrgvQueueParam = new WcsSrgvQueue();
|
||||
wcsSrgvQueueParam.setEndSite(cache);
|
||||
|
||||
List<WcsSrgvQueue> wcsSrgvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueueParam);
|
||||
if (CollUtil.isEmpty(wcsSrgvQueues)) {
|
||||
wcsSrgvQueue.setEndSite(cacheSite.get(0));
|
||||
wcsSrgvQueue.setDefault02("7");
|
||||
wcsSagvQueueMapper.updateWcsSrgvQueue(wcsSrgvQueue);
|
||||
shortestPath = null;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// 空车避让
|
||||
String endBlockAgv = null;
|
||||
DeviceSrgv endBlockDevice = null;
|
||||
if (arrByRoadSite != null && !arrByRoadSite.isEmpty()) {
|
||||
@@ -861,6 +996,7 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
WcsSrgvQueue wcsSrgvQueueBR = new WcsSrgvQueue();
|
||||
wcsSrgvQueueBR.setAgvId(endBlockAgv);
|
||||
List<WcsSrgvQueue> wcsSrgvQueueBRS = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueueBR);
|
||||
// 如果车无执行队列,可以直接生成避让执行队列
|
||||
if (endBlockDevice != null && wcsSrgvQueueBRS.isEmpty()) {
|
||||
// 选择当前层最近且可达的缓存点(避让点)
|
||||
ConcurrentHashMap<String, DeviceSrgv> deviceSrgvMap = PlcSrgvRead.deviceSrgvMap;
|
||||
@@ -920,63 +1056,65 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
|
||||
|
||||
//判断是否能规划出最短路径
|
||||
if (shortestPath == null || shortestPath.isEmpty()) {
|
||||
//判断是否是1层 空车取货 或者 满车放货
|
||||
if (floor == 1) {
|
||||
|
||||
if ("2".equals(wcsSrgvQueue.getDefault02()) && "tsj".equals(wcsSrgvQueue.getStartSite()) && wcsSrgvQueue.getEndSite().equals(wcsSrgvQueue.getCargoPlaceSite())) {
|
||||
//1层满车放货
|
||||
//修改终点到出库缓存点
|
||||
WcsSrgvMap wcsSrgvMapParam = new WcsSrgvMap();
|
||||
wcsSrgvMapParam.setRemark("outCache");
|
||||
List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMapParam);
|
||||
List<String> cacheSite = wcsSrgvMaps.stream().map(WcsSrgvMap::getSiteId).collect(Collectors.toList());
|
||||
List<String> currentSRgvSite = new ArrayList<>();
|
||||
for (String srgvCode : PlcSrgvRead.deviceSrgvMap.keySet()) {
|
||||
currentSRgvSite.add(PlcSrgvRead.deviceSrgvMap.get(srgvCode).getCurrSite());
|
||||
}
|
||||
cacheSite.removeAll(currentSRgvSite);
|
||||
if (CollUtil.isNotEmpty(cacheSite)) {
|
||||
for (String cache : cacheSite) {
|
||||
WcsSrgvQueue wcsSrgvQueueParam = new WcsSrgvQueue();
|
||||
wcsSrgvQueueParam.setEndSite(cache);
|
||||
List<WcsSrgvQueue> wcsSrgvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueueParam);
|
||||
if (CollUtil.isEmpty(wcsSrgvQueues)) {
|
||||
wcsSrgvQueue.setEndSite(cacheSite.get(0));
|
||||
wcsSagvQueueMapper.updateWcsSrgvQueue(wcsSrgvQueue);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ("4".equals(wcsSrgvQueue.getDefault02()) && "tsj".equals(wcsSrgvQueue.getStartSite()) && wcsSrgvQueue.getEndSite().equals(wcsSrgvQueue.getCargoPickSite())) {
|
||||
//1层空车取货
|
||||
//修改终点到避让点
|
||||
WcsSrgvMap wcsSrgvMapParam = new WcsSrgvMap();
|
||||
wcsSrgvMapParam.setRemark("cache");
|
||||
List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMapParam);
|
||||
List<String> cacheSite = wcsSrgvMaps.stream().map(WcsSrgvMap::getSiteId).collect(Collectors.toList());
|
||||
List<String> currentSRgvSite = new ArrayList<>();
|
||||
for (String srgvCode : PlcSrgvRead.deviceSrgvMap.keySet()) {
|
||||
currentSRgvSite.add(PlcSrgvRead.deviceSrgvMap.get(srgvCode).getCurrSite());
|
||||
}
|
||||
cacheSite.removeAll(currentSRgvSite);
|
||||
if (CollUtil.isNotEmpty(cacheSite)) {
|
||||
for (String cache : cacheSite) {
|
||||
WcsSrgvQueue wcsSrgvQueueParam = new WcsSrgvQueue();
|
||||
wcsSrgvQueueParam.setEndSite(cache);
|
||||
List<WcsSrgvQueue> wcsSrgvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueueParam);
|
||||
if (CollUtil.isEmpty(wcsSrgvQueues)) {
|
||||
wcsSrgvQueue.setEndSite(cacheSite.get(0));
|
||||
wcsSagvQueueMapper.updateWcsSrgvQueue(wcsSrgvQueue);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
// if (shortestPath == null || shortestPath.isEmpty()) {
|
||||
// //判断是否是1层 空车取货 或者 满车放货
|
||||
// if (floor == 1) {
|
||||
//
|
||||
// if ("2".equals(wcsSrgvQueue.getDefault02()) && "090501".equals(wcsSrgvQueue.getStartSite()) && wcsSrgvQueue.getEndSite().equals(wcsSrgvQueue.getCargoPlaceSite())) {
|
||||
// //1层满车放货
|
||||
// //修改终点到出库缓存点
|
||||
// WcsSrgvMap wcsSrgvMapParam = new WcsSrgvMap();
|
||||
// wcsSrgvMapParam.setRemark("outCache");
|
||||
// List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMapParam);
|
||||
// List<String> cacheSite = wcsSrgvMaps.stream().map(WcsSrgvMap::getSiteId).collect(Collectors.toList());
|
||||
// List<String> currentSRgvSite = new ArrayList<>();
|
||||
// for (String srgvCode : PlcSrgvRead.deviceSrgvMap.keySet()) {
|
||||
// currentSRgvSite.add(PlcSrgvRead.deviceSrgvMap.get(srgvCode).getCurrSite());
|
||||
// }
|
||||
// cacheSite.removeAll(currentSRgvSite);
|
||||
// if (CollUtil.isNotEmpty(cacheSite)) {
|
||||
// for (String cache : cacheSite) {
|
||||
// WcsSrgvQueue wcsSrgvQueueParam = new WcsSrgvQueue();
|
||||
// wcsSrgvQueueParam.setEndSite(cache);
|
||||
//
|
||||
// List<WcsSrgvQueue> wcsSrgvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueueParam);
|
||||
// if (CollUtil.isEmpty(wcsSrgvQueues)) {
|
||||
// wcsSrgvQueue.setEndSite(cacheSite.get(0));
|
||||
// wcsSrgvQueue.setDefault02("7");
|
||||
// wcsSagvQueueMapper.updateWcsSrgvQueue(wcsSrgvQueue);
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// if ("4".equals(wcsSrgvQueue.getDefault02()) && "tsj".equals(wcsSrgvQueue.getStartSite()) && wcsSrgvQueue.getEndSite().equals(wcsSrgvQueue.getCargoPickSite())) {
|
||||
// //1层空车取货
|
||||
// //修改终点到避让点
|
||||
// WcsSrgvMap wcsSrgvMapParam = new WcsSrgvMap();
|
||||
// wcsSrgvMapParam.setRemark("cache");
|
||||
// List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMapParam);
|
||||
// List<String> cacheSite = wcsSrgvMaps.stream().map(WcsSrgvMap::getSiteId).collect(Collectors.toList());
|
||||
// List<String> currentSRgvSite = new ArrayList<>();
|
||||
// for (String srgvCode : PlcSrgvRead.deviceSrgvMap.keySet()) {
|
||||
// currentSRgvSite.add(PlcSrgvRead.deviceSrgvMap.get(srgvCode).getCurrSite());
|
||||
// }
|
||||
// cacheSite.removeAll(currentSRgvSite);
|
||||
// if (CollUtil.isNotEmpty(cacheSite)) {
|
||||
// for (String cache : cacheSite) {
|
||||
// WcsSrgvQueue wcsSrgvQueueParam = new WcsSrgvQueue();
|
||||
// wcsSrgvQueueParam.setEndSite(cache);
|
||||
// List<WcsSrgvQueue> wcsSrgvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueueParam);
|
||||
// if (CollUtil.isEmpty(wcsSrgvQueues)) {
|
||||
// wcsSrgvQueue.setEndSite(cacheSite.get(0));
|
||||
// wcsSagvQueueMapper.updateWcsSrgvQueue(wcsSrgvQueue);
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return false;
|
||||
// }
|
||||
|
||||
|
||||
//获取拐点路径
|
||||
@@ -1118,7 +1256,6 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
}
|
||||
// TODO 这段下发有问题
|
||||
if (wcsSrgvQueue.getDefault08().equals("2") && deviceSrgv.getSpare5().equals("1")) {
|
||||
|
||||
sendDataList = new ArrayList<>();
|
||||
SendData2 path = new SendData2();
|
||||
path.setAddress("4404");//地址
|
||||
@@ -1359,7 +1496,8 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
* @return
|
||||
*/
|
||||
private void finishTaskByQueue(String currSite, WcsSrgvQueue wcsSrgvQueue) {
|
||||
|
||||
//更新小车待机时间
|
||||
deviceSrgvService.updateLastTimeByAgvId(wcsSrgvQueue.getAgvId());
|
||||
String groupCodingNo = basCargoSpaceService.selecGroupCodingBySite(currSite);
|
||||
String siteId = basCargoSpaceService.selectMaxSiteIdByNo(groupCodingNo);
|
||||
List<String> sites = new ArrayList<>();
|
||||
@@ -1377,26 +1515,34 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
String cargoPickSite = wcsSrgvQueue.getCargoPickSite();
|
||||
String cargoPlaceSite = wcsSrgvQueue.getCargoPlaceSite();
|
||||
WcsSrgvMap wcsSrgvMap = new WcsSrgvMap();
|
||||
|
||||
wcsSrgvMap.setRemark("outCache");
|
||||
List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMap);
|
||||
//当前路径地图map中如果存在小车的站点,返回true
|
||||
if (wcsSrgvMaps.stream().anyMatch(wcsSrgvMap1 -> wcsSrgvMap1.getSiteId().equals(currSite))) {
|
||||
//生成小车从避让点到放货/取货位置,如果是空车就到取货位置,如果是满车就到放货位置
|
||||
// wcsSrgvQueue.setExecutionStatus("4");
|
||||
// wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
|
||||
// wcsSrgvQueue.setIssued("0");
|
||||
// wcsSrgvQueue.setExecutionStatus("1");
|
||||
// wcsSrgvQueue.setStartSite(currSite);
|
||||
// if ("1".equals(taskType)) {
|
||||
// wcsSrgvQueue.setEndSite(cargoPickSite);
|
||||
// } else if ("2".equals(taskType)) {
|
||||
// wcsSrgvQueue.setEndSite(cargoPlaceSite);
|
||||
// }
|
||||
// wcsSrgvQueue.setTheFloor("1");
|
||||
// wcsSrgvQueue.setDefault07("1");
|
||||
// wcsSagvQueueMapper.updateWcsSrgvQueue(wcsSrgvQueue);
|
||||
// return;
|
||||
// 处理出库缓存点任务 让070301 的先走 走了之后再执行090301的任务 再070301 走完之前不能执行090301的任务
|
||||
if (wcsSrgvMaps.stream().anyMatch(wcsSrgvMap1 -> wcsSrgvMap1.getSiteId().equals(currSite)) && wcsSrgvQueue.getDefault02().equals("7")) {
|
||||
WcsSrgvQueue wcsSrgvQueue1 = new WcsSrgvQueue();
|
||||
wcsSrgvQueue1.setEndSite("070301");
|
||||
List<WcsSrgvQueue> wcsSrgvQueues = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueue1);
|
||||
|
||||
WcsSrgvQueue wcsSrgvQueue2 = new WcsSrgvQueue();
|
||||
wcsSrgvQueue2.setStartSite("070301");
|
||||
List<WcsSrgvQueue> wcsSrgvQueueOut = wcsSagvQueueMapper.selectWcsSrgvQueueList(wcsSrgvQueue2);
|
||||
// 如果当前站点为090301 判断是否有070301的任务要来 如果要来就等着 等到070301的任务先走了再让小车开始动
|
||||
if (currSite.equals("090301") && CollUtil.isNotEmpty(wcsSrgvQueues) && CollUtil.isNotEmpty(wcsSrgvQueueOut)) {
|
||||
return;
|
||||
}
|
||||
MydoJob mydoJobyk = mydoJobService.selectMydoJobByTaskNo(Long.valueOf(wcsSrgvQueue.getTaskNo()));
|
||||
if (!mydoJobyk.getInOrOut().equals("30")) {
|
||||
wcsSrgvQueue.setEndSite(wcsSrgvQueue.getCargoPlaceSite());
|
||||
wcsSrgvQueue.setDefault02("2");
|
||||
wcsSrgvQueue.setIssued("0");
|
||||
wcsSrgvQueue.setExecutionStatus("1");
|
||||
wcsSrgvQueue.setTaskType("2");
|
||||
wcsSrgvQueue.setStartSite(currSite);
|
||||
wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
|
||||
wcsSagvQueueMapper.updateWcsSrgvQueue(wcsSrgvQueue);
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
//空车任务 且当前车的位置和取货位置相同
|
||||
if ("1".equals(taskType) && (cargoPickSite.equals(currSite) || (wcsSrgvQueue.getDefault06() != null && wcsSrgvQueue.getDefault06().equals(currSite)) || sites.contains(currSite))) {
|
||||
@@ -1450,6 +1596,9 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
//请求wms生成库存 插入回传表
|
||||
MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(Long.valueOf(wcsSrgvQueue.getTaskNo()));
|
||||
if (mydoJob != null) {
|
||||
mydoJob.setFinishTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
||||
mydoJob.setStatus("4");
|
||||
mydoJobService.updateMydoJob(mydoJob);
|
||||
JobCallBack jobCallBack = new JobCallBack();
|
||||
jobCallBack.setType(wcsSrgvQueue.getDefault02());
|
||||
jobCallBack.setMydojobId(mydoJob.getJobId());
|
||||
@@ -1459,13 +1608,19 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
jobCallBackService.insertJobCallBack(jobCallBack);
|
||||
mydoJobService.insertHistory(mydoJob.getJobId());
|
||||
mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId());
|
||||
wcsSrgvQueue.setExecutionStatus("4");
|
||||
wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
|
||||
wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid());
|
||||
}
|
||||
break;
|
||||
|
||||
case "2":
|
||||
MydoJob mydoJobOut = mydoJobService.selectMydoJobByTaskNo(Long.valueOf(wcsSrgvQueue.getTaskNo()));
|
||||
if (mydoJobOut != null && (cargoPlaceSite.equals(currSite))) {
|
||||
log.info("1471 taskNo:[{}],currSite:[{}],cargoPlaceSite:[{}]",wcsSrgvQueue.getTaskNo(),currSite,cargoPlaceSite);
|
||||
mydoJobOut.setFinishTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
||||
mydoJobOut.setStatus("4");
|
||||
mydoJobService.updateMydoJob(mydoJobOut);
|
||||
log.info("1471 taskNo:[{}],currSite:[{}],cargoPlaceSite:[{}]", wcsSrgvQueue.getTaskNo(), currSite, cargoPlaceSite);
|
||||
JobCallBack jobCallBack = new JobCallBack();
|
||||
jobCallBack.setType(wcsSrgvQueue.getDefault02());
|
||||
jobCallBack.setMydojobId(mydoJobOut.getJobId());
|
||||
@@ -1473,12 +1628,63 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
jobCallBack.setTaskNo(Convert.toLong(mydoJobOut.getTaskNo()));
|
||||
jobCallBack.setCreateTime(new Date());
|
||||
jobCallBackService.insertJobCallBack(jobCallBack);
|
||||
mydoJobService.insertHistory(mydoJobOut.getJobId());
|
||||
mydoJobService.deleteMydoJobByJobId(mydoJobOut.getJobId());
|
||||
if (!mydoJobOut.getInOrOut().equals("22")) {
|
||||
mydoJobService.insertHistory(mydoJobOut.getJobId());
|
||||
mydoJobService.deleteMydoJobByJobId(mydoJobOut.getJobId());
|
||||
}
|
||||
//
|
||||
|
||||
wcsSrgvQueue.setExecutionStatus("4");
|
||||
wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
|
||||
wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid());
|
||||
}
|
||||
if (mydoJobOut != null && wcsSrgvQueue.getDefault06() != null && !wcsSrgvQueue.getDefault06().equals("") && siteId != null && !wcsSrgvQueue.getCargoPlaceSite().equals(siteId) && siteId.equals(wcsSrgvQueue.getDefault06())) {
|
||||
String endSite = "";
|
||||
String xfType = "";
|
||||
WcsSrgvMap wcsSrgvMapq = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPickSite);
|
||||
WcsSrgvMap wcsSrgvMapf = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPlaceSite);
|
||||
// 取货点地图和放货点地图不为空
|
||||
if (wcsSrgvMapq != null && wcsSrgvMapf != null) {
|
||||
|
||||
if (Objects.equals(wcsSrgvMapq.getTheLayer(), wcsSrgvMapf.getTheLayer())) {
|
||||
//如果是同层,终点为放货点
|
||||
endSite = cargoPlaceSite;
|
||||
} else {
|
||||
//不同层,终点为提升机
|
||||
endSite = "tsj";
|
||||
}
|
||||
|
||||
|
||||
if ("L1004".equals(wcsSrgvMapq.getRemark()) || "L1005".equals(wcsSrgvMapq.getRemark())) {
|
||||
xfType = "1";//入库
|
||||
} else {
|
||||
if ("L1004".equals(wcsSrgvMapf.getRemark()) || "L1005".equals(wcsSrgvMapf.getRemark())) {
|
||||
xfType = "2";//出库
|
||||
} else {
|
||||
xfType = "7";//移库
|
||||
}
|
||||
}
|
||||
// 更新目标点,修改执行队列
|
||||
wcsSrgvQueue.setEndSite(endSite);
|
||||
wcsSrgvQueue.setDefault02(xfType);
|
||||
wcsSrgvQueue.setTheFloor(wcsSrgvMapq.getTheLayer().toString());
|
||||
wcsSrgvQueue.setDefault07(wcsSrgvMapf.getTheLayer().toString());
|
||||
wcsSrgvQueue.setIssued("0");
|
||||
wcsSrgvQueue.setDefault06(null);
|
||||
wcsSrgvQueue.setExecutionStatus("1");
|
||||
wcsSrgvQueue.setTaskType("2");
|
||||
}
|
||||
wcsSrgvQueue.setStartSite(currSite);
|
||||
wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
|
||||
wcsSagvQueueMapper.updateWcsSrgvQueue(wcsSrgvQueue);
|
||||
}
|
||||
|
||||
case "7"://移库,变动库存
|
||||
MydoJob mydoJobyk = mydoJobService.selectMydoJobByTaskNo(Long.valueOf(wcsSrgvQueue.getTaskNo()));
|
||||
if (mydoJobyk != null) {
|
||||
if (mydoJobyk != null && mydoJobyk.getInOrOut().equals("30")) {
|
||||
mydoJobyk.setFinishTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
|
||||
mydoJobyk.setStatus("4");
|
||||
mydoJobService.updateMydoJob(mydoJobyk);
|
||||
JobCallBack jobCallBack = new JobCallBack();
|
||||
jobCallBack.setType(wcsSrgvQueue.getDefault02());
|
||||
jobCallBack.setMydojobId(mydoJobyk.getJobId());
|
||||
@@ -1488,15 +1694,17 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
jobCallBackService.insertJobCallBack(jobCallBack);
|
||||
mydoJobService.insertHistory(mydoJobyk.getJobId());
|
||||
mydoJobService.deleteMydoJobByJobId(mydoJobyk.getJobId());
|
||||
wcsSrgvQueue.setExecutionStatus("4");
|
||||
wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
|
||||
wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid());
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
//删除队列,插入历史表
|
||||
wcsSrgvQueue.setExecutionStatus("4");
|
||||
wcsSagvQueueMapper.insertHistory(wcsSrgvQueue.getTaskNo());
|
||||
wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid());
|
||||
|
||||
|
||||
// 充电任务 并且小车也是充电任务
|
||||
} else if ("3".equals(taskType) && wcsSrgvQueue.getDefault02().equals("3")) {
|
||||
@@ -1513,16 +1721,16 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
{
|
||||
wcsSagvQueueMapper.deleteWcsSrgvQueueByGuid(wcsSrgvQueue.getGuid());
|
||||
}
|
||||
// 如果是空车且 任务是点到点并且目标点是“070301”
|
||||
}else if ("1".equals(taskType)&&wcsSrgvQueue.getDefault02().equals("4")&&wcsSrgvQueue.getEndSite().equals("070301")){
|
||||
// 如果是空车且 任务是点到点并且目标点是“070301”
|
||||
} else if ("1".equals(taskType) && wcsSrgvQueue.getDefault02().equals("4") && wcsSrgvQueue.getEndSite().equals("070301")) {
|
||||
String endSite = "";
|
||||
String xfType = "";
|
||||
WcsSrgvMap wcsSrgvMapq = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPickSite);
|
||||
WcsSrgvMap wcsSrgvMapf = wcsSrgvMapService.selectWcsSrgvMapBySiteId(cargoPlaceSite);
|
||||
// 取货点地图和放货点地图不为空
|
||||
if (wcsSrgvMapq != null && wcsSrgvMapf != null) {
|
||||
//如果是同层,终点为取货点
|
||||
endSite = cargoPickSite;
|
||||
//如果是同层,终点为取货点
|
||||
endSite = cargoPickSite;
|
||||
// 更新目标点,修改执行队列
|
||||
wcsSrgvQueue.setEndSite(endSite);
|
||||
wcsSrgvQueue.setDefault02("4");
|
||||
@@ -1535,8 +1743,7 @@ public class BaseSRgvThread implements Runnable, SRgvThreadInterface {
|
||||
wcsSagvQueueMapper.updateWcsSrgvQueue(wcsSrgvQueue);
|
||||
}
|
||||
|
||||
//更新小车待机时间
|
||||
// deviceSrgvService.updateLastTimeByAgvId(wcsSrgvQueue.getAgvId());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -46,6 +46,13 @@ public class SsjThread implements Runnable {
|
||||
ssjCodes2.add("L1004");
|
||||
ssjCodes2.add("L1005");
|
||||
ssjCodeList.put("road", ssjCodes2);
|
||||
|
||||
ArrayList<String> ssjCodes4 = new ArrayList<>();
|
||||
ssjCodes4.add("L1006");
|
||||
ssjCodes4.add("L1003");
|
||||
ssjCodeList.put("error", ssjCodes4);
|
||||
|
||||
|
||||
mydoJobService = SpringUtils.getBean(IMydoJobService.class);
|
||||
jobCallBackService = SpringUtils.getBean(IJobCallBackService.class);
|
||||
apiService = SpringUtils.getBean(IApiService.class);
|
||||
@@ -97,28 +104,70 @@ public class SsjThread implements Runnable {
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
case "error":
|
||||
for (String ssjCode : ssjCodeList.get("error")) {
|
||||
try {
|
||||
if (PlcSsjRead.deviceSsjMap.containsKey(ssjCode)) {
|
||||
inDispatchError(PlcSsjRead.deviceSsjMap.get(ssjCode));
|
||||
} else {
|
||||
log.error("设备不存在 ssjCode{}", ssjCode);
|
||||
}
|
||||
} catch (RuntimeException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void inDispatchError(DeviceSsj deviceSsj) {
|
||||
if (deviceSsj.getErrorCode() > 0) {
|
||||
if (deviceSsj.getDeviceCode().equals("L1003")) {
|
||||
String code = "TD1001";
|
||||
String errorCode = String.valueOf(deviceSsj.getErrorCode());
|
||||
HashMap<String, Object> objectObjectHashMap = new HashMap<>();
|
||||
objectObjectHashMap.put("deviceCode", code);
|
||||
objectObjectHashMap.put("errorCode", errorCode);
|
||||
apiService.updateLedError(objectObjectHashMap);
|
||||
}
|
||||
if (deviceSsj.getDeviceCode().equals("L1006")) {
|
||||
String code = "TD1008";
|
||||
String errorCode = String.valueOf(deviceSsj.getErrorCode());
|
||||
HashMap<String, Object> objectObjectHashMap = new HashMap<>();
|
||||
objectObjectHashMap.put("deviceCode", code);
|
||||
objectObjectHashMap.put("errorCode", errorCode);
|
||||
apiService.updateLedError(objectObjectHashMap);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void inDispatch(DeviceSsj deviceSsj) {
|
||||
//出库到位
|
||||
if (deviceSsj.getDw() == 1 && deviceSsj.getTaskNo() > 0) {
|
||||
HashMap<String, Object> objectObjectHashMap = new HashMap<>();
|
||||
objectObjectHashMap.put("deviceCode", deviceSsj.getDeviceCode());
|
||||
objectObjectHashMap.put("taskNo", deviceSsj.getTaskNo());
|
||||
apiService.updateLed(objectObjectHashMap);
|
||||
|
||||
MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(Convert.toLong(deviceSsj.getTaskNo()));
|
||||
if (mydoJob != null) {
|
||||
log.info("设备:{} 位置:{} 任务号:{} 出库到位", "输送线", deviceSsj.getDeviceCode(), mydoJob.getTaskNo());
|
||||
mydoJobService.insertHistory(mydoJob.getJobId());
|
||||
mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId());
|
||||
JobCallBack jobCallBack = new JobCallBack();
|
||||
jobCallBack.setType("2");
|
||||
jobCallBack.setMydojobId(mydoJob.getJobId());
|
||||
jobCallBack.setStatus("0");
|
||||
jobCallBack.setTaskNo(Convert.toLong(mydoJob.getTaskNo()));
|
||||
jobCallBack.setCreateTime(new Date());
|
||||
jobCallBackService.insertJobCallBack(jobCallBack);
|
||||
if (mydoJob != null && mydoJob.getInOrOut().equals("22")) {
|
||||
// 新增agv执行队列,以及调用wms后台任务过账
|
||||
AjaxResult ajaxResult1 = apiService.insertAgvQuene(objectObjectHashMap);
|
||||
if (ajaxResult1.get("code").equals("200")) {
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
map.put("trayCode", mydoJob.getTrayCode());
|
||||
//拉取
|
||||
AjaxResult ajaxResult = apiService.OutMakeSure(map);
|
||||
if (ajaxResult.get("code").equals("200")) {
|
||||
mydoJobService.insertHistory(mydoJob.getJobId());
|
||||
mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -127,14 +176,22 @@ public class SsjThread implements Runnable {
|
||||
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) {
|
||||
getMydoJob.setStatus("3");
|
||||
mydoJobService.updateMydoJob(getMydoJob);
|
||||
log.info(deviceSsj.getDeviceCode() + "输送机下发任务号成功:{}", getMydoJob.getTaskNo());
|
||||
if (getMydoJob == null && deviceSsj.getTaskNo() < 1000) {
|
||||
String exit = "";
|
||||
if (deviceSsj.getDeviceCode().equals("GS1002")) {
|
||||
exit = "L1004";
|
||||
}
|
||||
if (deviceSsj.getDeviceCode().equals("GS1007")) {
|
||||
exit = "L1005";
|
||||
}
|
||||
Integer count = mydoJobService.selectMydoJobExit(exit);
|
||||
if (count > 0) {
|
||||
int i = writeToSsj(deviceSsj.getPlcDbWriteAddress(), "0", 2, 2);
|
||||
if (i == 1) {
|
||||
log.info(deviceSsj.getDeviceCode() + "有相应入口的出库作业,下发退回,去向2 条码" + deviceSsj.getTrayCode());
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//todo 查是否为入库模式,不是退回,是否超重
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
map.put("trayCode", deviceSsj.getTrayCode());
|
||||
@@ -184,27 +241,28 @@ public class SsjThread implements Runnable {
|
||||
if (deviceSsj.getDw() == 1 && deviceSsj.getTaskNo() > 1000) {
|
||||
|
||||
MydoJob mydoJob1 = mydoJobService.selectMydoJobByTaskNo(Long.valueOf(deviceSsj.getTaskNo()));
|
||||
if (mydoJob1.getCargoSpaceId() != null) {
|
||||
if (mydoJob1 != null && 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);
|
||||
if (mydoJob1 != null && Integer.parseInt(mydoJob1.getInOrOut()) < 20) {
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
map.put("taskNo", deviceSsj.getTaskNo());
|
||||
map.put("deviceCode", deviceSsj.getDeviceCode());
|
||||
//拉取
|
||||
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 && cargoSpaceId != null && !cargoSpaceId.equals("")) {
|
||||
mydoJob.setTheFloor(theFloor);
|
||||
mydoJob.setCargoSpaceId(cargoSpaceId);
|
||||
mydoJob.setExecutionPhase("2");
|
||||
mydoJobService.updateMydoJob(mydoJob);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,9 +26,7 @@ import com.ruoyi.schedule.plcRead.tsj.PlcTsjRead;
|
||||
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.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@@ -41,7 +39,7 @@ public class TsjThread implements Runnable {
|
||||
private IWcsSrgvQueueService wcsSrgvQueueService;
|
||||
private IMydoJobService mydoJobService;
|
||||
private IWcsSrgvMapService wcsSrgvMapService;
|
||||
|
||||
public IWcsSrgvQueueService wcsSagvQueueMapper;
|
||||
|
||||
public void init() {
|
||||
tsjDeviceExecutionQueueService = SpringUtils.getBean(ITsjDeviceExecutionQueueService.class);
|
||||
@@ -50,6 +48,7 @@ public class TsjThread implements Runnable {
|
||||
wcsSrgvQueueService = SpringUtils.getBean(IWcsSrgvQueueService.class);
|
||||
wcsSrgvMapService = SpringUtils.getBean(IWcsSrgvMapService.class);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -104,6 +103,10 @@ public class TsjThread implements Runnable {
|
||||
if (czfs == 2 && sbzt == 2 && jdbz == 2 && rwh > 500) {
|
||||
createSRgvQueueTsjQd(rwh, tsj);
|
||||
}
|
||||
// 提升机放货途中 取消当前小车的路径
|
||||
if (czfs == 2 && sbzt == 2 && jdbz == 3 && rwh > 500) {
|
||||
removePathCar(rwh, tsj);
|
||||
}
|
||||
|
||||
/*
|
||||
* 2、任务完成
|
||||
@@ -126,6 +129,15 @@ public class TsjThread implements Runnable {
|
||||
|
||||
}
|
||||
|
||||
private void removePathCar(Long rwh, DeviceTsj tsj) {
|
||||
WcsSrgvQueue wcsSrgvQueue = wcsSrgvQueueService.selectWcsSrgvQueueByTaskNo(String.valueOf(rwh));
|
||||
DeviceSrgv deviceSrgv = PlcSrgvRead.deviceSrgvMap.get(wcsSrgvQueue.getAgvId());
|
||||
if (!deviceSrgv.getCurrSite().equals("07050"+wcsSrgvQueue.getTheFloor()) && tsj.getHczt() == 1 && !wcsSrgvQueue.getPathInfo().isEmpty() && java.util.Arrays.asList(wcsSrgvQueue.getPathInfo().trim().replaceAll(",$", "").split(",")).contains("07050"+wcsSrgvQueue.getTheFloor())&&wcsSrgvQueue.getEndSite().equals("tsj")) {
|
||||
wcsSrgvQueue.setPathInfo("");
|
||||
wcsSrgvQueueService.updateWcsSrgvQueue(wcsSrgvQueue);
|
||||
}
|
||||
}
|
||||
|
||||
// 下发提升机启动
|
||||
private void createSRgvQueueTsjQd(Long rwh, DeviceTsj tsj) {
|
||||
for (String sRgv : PlcSrgvRead.deviceSrgvMap.keySet()) {
|
||||
@@ -186,9 +198,42 @@ public class TsjThread implements Runnable {
|
||||
break;
|
||||
case "2":
|
||||
//出库
|
||||
// startSite="tsj";
|
||||
startSite = "09050" + tsj.getDqcs();
|
||||
endSite = wcsSrgvQueue.getCargoPlaceSite();
|
||||
// 如果提升机当前层等于1 并且是出库任务,更新出库点位为出库缓存点
|
||||
// Integer i = mydoJobService.selectMydoJobCountOut();
|
||||
if (tsj.getDqcs() == 1 && "2".equals(wcsSrgvQueue.getDefault02())) {
|
||||
WcsSrgvMap wcsSrgvMapParam = new WcsSrgvMap();
|
||||
wcsSrgvMapParam.setRemark("outCache");
|
||||
List<WcsSrgvMap> wcsSrgvMaps = wcsSrgvMapService.selectWcsSrgvMapList(wcsSrgvMapParam);
|
||||
List<String> cacheSite = wcsSrgvMaps.stream().sorted(Comparator.comparing(WcsSrgvMap::getSiteId)).map(WcsSrgvMap::getSiteId).collect(Collectors.toList());
|
||||
List<String> currentSRgvSite = new ArrayList<>();
|
||||
// 判断是否有车是在一样的位置
|
||||
for (String srgvCode : PlcSrgvRead.deviceSrgvMap.keySet()) {
|
||||
currentSRgvSite.add(PlcSrgvRead.deviceSrgvMap.get(srgvCode).getCurrSite());
|
||||
}
|
||||
cacheSite.removeAll(currentSRgvSite);
|
||||
if (CollUtil.isNotEmpty(cacheSite)) {
|
||||
for (String cache : cacheSite) {
|
||||
WcsSrgvQueue wcsSrgvQueueParam = new WcsSrgvQueue();
|
||||
wcsSrgvQueueParam.setEndSite(cache);
|
||||
// 判断是否有车要去这个缓存点 没有就更新
|
||||
List<WcsSrgvQueue> wcsSrgvQueues1 = wcsSrgvQueueService.selectWcsSrgvQueueList(wcsSrgvQueueParam);
|
||||
// WcsSrgvQueue wcsSrgvQueueParam1 = new WcsSrgvQueue();
|
||||
// wcsSrgvQueueParam1.setStartSite(cache);
|
||||
// // 并且从缓存点走的
|
||||
// List<WcsSrgvQueue> wcsSrgvQueues2 = wcsSrgvQueueService.selectWcsSrgvQueueList(wcsSrgvQueueParam1);
|
||||
if (CollUtil.isEmpty(wcsSrgvQueues1)) {
|
||||
wcsSrgvQueue.setStartSite(startSite);
|
||||
wcsSrgvQueue.setEndSite(cacheSite.get(0));
|
||||
wcsSrgvQueue.setDefault02("7");
|
||||
wcsSrgvQueueService.updateWcsSrgvQueue(wcsSrgvQueue);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
endSite = wcsSrgvQueue.getCargoPlaceSite();
|
||||
}
|
||||
break;
|
||||
case "3":
|
||||
break;
|
||||
@@ -218,7 +263,7 @@ public class TsjThread implements Runnable {
|
||||
List<DeviceSrgv> collect = PlcSrgvRead.deviceSrgvMap.values().stream().filter(d ->
|
||||
d.getCurrSite().equals(cargoPickSite))
|
||||
.collect(Collectors.toList());
|
||||
if (count > 0 || !collect.isEmpty()) {
|
||||
if ((count > 0 || !collect.isEmpty()) && tsj.getDqcs() == 1) {
|
||||
wcsSrgvQueue.setEndSite("070301");
|
||||
} else {
|
||||
wcsSrgvQueue.setEndSite(cargoPickSite);
|
||||
@@ -267,7 +312,8 @@ public class TsjThread implements Runnable {
|
||||
for (String sRgv : PlcSrgvRead.deviceSrgvMap.keySet()) {
|
||||
DeviceSrgv deviceSrgv = PlcSrgvRead.deviceSrgvMap.get(sRgv);
|
||||
Integer count = tsjDeviceExecutionQueueService.selectCount();
|
||||
if (deviceSrgv.getSpare2().equals("1") && deviceSrgv.getTaskNo() > 0 && count == 0) {
|
||||
WcsSrgvQueue wcsSrgvQueue1 = wcsSrgvQueueService.selectWcsSrgvQueueByTaskNo(String.valueOf(deviceSrgv.getTaskNo()));
|
||||
if (deviceSrgv.getSpare2().equals("1") && deviceSrgv.getTaskNo() > 0 && count == 0 && wcsSrgvQueue1.getEndSite().equals("tsj")) {
|
||||
//请求进入输送机
|
||||
WcsSrgvQueue sRgvQueueParam = new WcsSrgvQueue();
|
||||
sRgvQueueParam.setAgvId(Convert.toStr(deviceSrgv.getDeviceId()));
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
package com.ruoyi.system.controller;
|
||||
|
||||
import java.util.List;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.enums.BusinessType;
|
||||
import com.ruoyi.system.domain.AgvContainerTask;
|
||||
import com.ruoyi.system.service.IAgvContainerTaskService;
|
||||
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* agv料架搬运任务Controller
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-05-15
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/system/task")
|
||||
public class AgvContainerTaskController extends BaseController
|
||||
{
|
||||
@Autowired
|
||||
private IAgvContainerTaskService agvContainerTaskService;
|
||||
|
||||
/**
|
||||
* 查询agv料架搬运任务列表
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('system:task:list')")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(AgvContainerTask agvContainerTask)
|
||||
{
|
||||
startPage();
|
||||
List<AgvContainerTask> list = agvContainerTaskService.selectAgvContainerTaskList(agvContainerTask);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出agv料架搬运任务列表
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('system:task:export')")
|
||||
@Log(title = "agv料架搬运任务", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, AgvContainerTask agvContainerTask)
|
||||
{
|
||||
List<AgvContainerTask> list = agvContainerTaskService.selectAgvContainerTaskList(agvContainerTask);
|
||||
ExcelUtil<AgvContainerTask> util = new ExcelUtil<AgvContainerTask>(AgvContainerTask.class);
|
||||
util.exportExcel(response, list, "agv料架搬运任务数据");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取agv料架搬运任务详细信息
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('system:task:query')")
|
||||
@GetMapping(value = "/{id}")
|
||||
public AjaxResult getInfo(@PathVariable("id") Long id)
|
||||
{
|
||||
return success(agvContainerTaskService.selectAgvContainerTaskById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增agv料架搬运任务
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('system:task:add')")
|
||||
@Log(title = "agv料架搬运任务", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public AjaxResult add(@RequestBody AgvContainerTask agvContainerTask)
|
||||
{
|
||||
return toAjax(agvContainerTaskService.insertAgvContainerTask(agvContainerTask));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改agv料架搬运任务
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('system:task:edit')")
|
||||
@Log(title = "agv料架搬运任务", businessType = BusinessType.UPDATE)
|
||||
@PutMapping
|
||||
public AjaxResult edit(@RequestBody AgvContainerTask agvContainerTask)
|
||||
{
|
||||
return toAjax(agvContainerTaskService.updateAgvContainerTask(agvContainerTask));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除agv料架搬运任务
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('system:task:remove')")
|
||||
@Log(title = "agv料架搬运任务", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public AjaxResult remove(@PathVariable Long[] ids)
|
||||
{
|
||||
return toAjax(agvContainerTaskService.deleteAgvContainerTaskByIds(ids));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,173 @@
|
||||
package com.ruoyi.system.domain;
|
||||
|
||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||
import com.ruoyi.common.annotation.Excel;
|
||||
import com.ruoyi.common.core.domain.BaseEntity;
|
||||
|
||||
/**
|
||||
* agv料架搬运任务对象 agv_container_task
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-05-15
|
||||
*/
|
||||
public class AgvContainerTask extends BaseEntity
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** $column.columnComment */
|
||||
private Long id;
|
||||
|
||||
/** 作业编码 */
|
||||
@Excel(name = "作业编码")
|
||||
private String container;
|
||||
|
||||
/** 起点 */
|
||||
@Excel(name = "起点")
|
||||
private String startPoint;
|
||||
|
||||
/** 终点 */
|
||||
@Excel(name = "终点")
|
||||
private String endPoint;
|
||||
|
||||
/** 开始时间 */
|
||||
@Excel(name = "开始时间")
|
||||
private String startTime;
|
||||
|
||||
/** 结束时间 */
|
||||
@Excel(name = "结束时间")
|
||||
private String finishTime;
|
||||
|
||||
/** 任务号 */
|
||||
@Excel(name = "任务号")
|
||||
private String taskNo;
|
||||
|
||||
/** 任务状态 0-创建 1-执行中 2-完成 */
|
||||
@Excel(name = "任务状态 0-创建 1-执行中 2-完成")
|
||||
private String status;
|
||||
|
||||
/** 任务类型 */
|
||||
@Excel(name = "任务类型")
|
||||
private String spare1;
|
||||
|
||||
/** 托盘码 */
|
||||
@Excel(name = "托盘码")
|
||||
private String spare2;
|
||||
|
||||
public void setId(Long id)
|
||||
{
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Long getId()
|
||||
{
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setContainer(String container)
|
||||
{
|
||||
this.container = container;
|
||||
}
|
||||
|
||||
public String getContainer()
|
||||
{
|
||||
return container;
|
||||
}
|
||||
|
||||
public void setStartPoint(String startPoint)
|
||||
{
|
||||
this.startPoint = startPoint;
|
||||
}
|
||||
|
||||
public String getStartPoint()
|
||||
{
|
||||
return startPoint;
|
||||
}
|
||||
|
||||
public void setEndPoint(String endPoint)
|
||||
{
|
||||
this.endPoint = endPoint;
|
||||
}
|
||||
|
||||
public String getEndPoint()
|
||||
{
|
||||
return endPoint;
|
||||
}
|
||||
|
||||
public void setStartTime(String startTime)
|
||||
{
|
||||
this.startTime = startTime;
|
||||
}
|
||||
|
||||
public String getStartTime()
|
||||
{
|
||||
return startTime;
|
||||
}
|
||||
|
||||
public void setFinishTime(String finishTime)
|
||||
{
|
||||
this.finishTime = finishTime;
|
||||
}
|
||||
|
||||
public String getFinishTime()
|
||||
{
|
||||
return finishTime;
|
||||
}
|
||||
|
||||
public void setTaskNo(String taskNo)
|
||||
{
|
||||
this.taskNo = taskNo;
|
||||
}
|
||||
|
||||
public String getTaskNo()
|
||||
{
|
||||
return taskNo;
|
||||
}
|
||||
|
||||
public void setStatus(String status)
|
||||
{
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public String getStatus()
|
||||
{
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setSpare1(String spare1)
|
||||
{
|
||||
this.spare1 = spare1;
|
||||
}
|
||||
|
||||
public String getSpare1()
|
||||
{
|
||||
return spare1;
|
||||
}
|
||||
|
||||
public void setSpare2(String spare2)
|
||||
{
|
||||
this.spare2 = spare2;
|
||||
}
|
||||
|
||||
public String getSpare2()
|
||||
{
|
||||
return spare2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||
.append("id", getId())
|
||||
.append("container", getContainer())
|
||||
.append("startPoint", getStartPoint())
|
||||
.append("endPoint", getEndPoint())
|
||||
.append("createTime", getCreateTime())
|
||||
.append("startTime", getStartTime())
|
||||
.append("finishTime", getFinishTime())
|
||||
.append("taskNo", getTaskNo())
|
||||
.append("status", getStatus())
|
||||
.append("spare1", getSpare1())
|
||||
.append("spare2", getSpare2())
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
package com.ruoyi.system.mapper;
|
||||
|
||||
import java.util.List;
|
||||
import com.ruoyi.system.domain.AgvContainerTask;
|
||||
|
||||
/**
|
||||
* agv料架搬运任务Mapper接口
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-05-15
|
||||
*/
|
||||
public interface AgvContainerTaskMapper
|
||||
{
|
||||
/**
|
||||
* 查询agv料架搬运任务
|
||||
*
|
||||
* @param id agv料架搬运任务主键
|
||||
* @return agv料架搬运任务
|
||||
*/
|
||||
public AgvContainerTask selectAgvContainerTaskById(Long id);
|
||||
|
||||
/**
|
||||
* 查询agv料架搬运任务列表
|
||||
*
|
||||
* @param agvContainerTask agv料架搬运任务
|
||||
* @return agv料架搬运任务集合
|
||||
*/
|
||||
public List<AgvContainerTask> selectAgvContainerTaskList(AgvContainerTask agvContainerTask);
|
||||
|
||||
/**
|
||||
* 新增agv料架搬运任务
|
||||
*
|
||||
* @param agvContainerTask agv料架搬运任务
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertAgvContainerTask(AgvContainerTask agvContainerTask);
|
||||
|
||||
/**
|
||||
* 修改agv料架搬运任务
|
||||
*
|
||||
* @param agvContainerTask agv料架搬运任务
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateAgvContainerTask(AgvContainerTask agvContainerTask);
|
||||
|
||||
/**
|
||||
* 删除agv料架搬运任务
|
||||
*
|
||||
* @param id agv料架搬运任务主键
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteAgvContainerTaskById(Long id);
|
||||
|
||||
public int deleteAgvContainerTaskByContainer(String orderId);
|
||||
/**
|
||||
* 批量删除agv料架搬运任务
|
||||
*
|
||||
* @param ids 需要删除的数据主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteAgvContainerTaskByIds(Long[] ids);
|
||||
|
||||
void insertAgvContainerTaskFinish(String orderId);
|
||||
|
||||
void updateAgvContainerTaskByOrder(String orderId);
|
||||
|
||||
AgvContainerTask selectAgvContainerFinishOne();
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package com.ruoyi.system.service;
|
||||
|
||||
import java.util.List;
|
||||
import com.ruoyi.system.domain.AgvContainerTask;
|
||||
|
||||
/**
|
||||
* agv料架搬运任务Service接口
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-05-15
|
||||
*/
|
||||
public interface IAgvContainerTaskService
|
||||
{
|
||||
/**
|
||||
* 查询agv料架搬运任务
|
||||
*
|
||||
* @param id agv料架搬运任务主键
|
||||
* @return agv料架搬运任务
|
||||
*/
|
||||
public AgvContainerTask selectAgvContainerTaskById(Long id);
|
||||
|
||||
/**
|
||||
* 查询agv料架搬运任务列表
|
||||
*
|
||||
* @param agvContainerTask agv料架搬运任务
|
||||
* @return agv料架搬运任务集合
|
||||
*/
|
||||
public List<AgvContainerTask> selectAgvContainerTaskList(AgvContainerTask agvContainerTask);
|
||||
|
||||
/**
|
||||
* 新增agv料架搬运任务
|
||||
*
|
||||
* @param agvContainerTask agv料架搬运任务
|
||||
* @return 结果
|
||||
*/
|
||||
public int insertAgvContainerTask(AgvContainerTask agvContainerTask);
|
||||
|
||||
/**
|
||||
* 修改agv料架搬运任务
|
||||
*
|
||||
* @param agvContainerTask agv料架搬运任务
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateAgvContainerTask(AgvContainerTask agvContainerTask);
|
||||
|
||||
/**
|
||||
* 批量删除agv料架搬运任务
|
||||
*
|
||||
* @param ids 需要删除的agv料架搬运任务主键集合
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteAgvContainerTaskByIds(Long[] ids);
|
||||
|
||||
/**
|
||||
* 删除agv料架搬运任务信息
|
||||
*
|
||||
* @param id agv料架搬运任务主键
|
||||
* @return 结果
|
||||
*/
|
||||
public int deleteAgvContainerTaskById(Long id);
|
||||
|
||||
void deleteAgvContainerTaskByOrderId(String container);
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
package com.ruoyi.system.service.impl;
|
||||
|
||||
import java.util.List;
|
||||
import com.ruoyi.common.utils.DateUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.ruoyi.system.mapper.AgvContainerTaskMapper;
|
||||
import com.ruoyi.system.domain.AgvContainerTask;
|
||||
import com.ruoyi.system.service.IAgvContainerTaskService;
|
||||
|
||||
/**
|
||||
* agv料架搬运任务Service业务层处理
|
||||
*
|
||||
* @author ruoyi
|
||||
* @date 2026-05-15
|
||||
*/
|
||||
@Service
|
||||
public class AgvContainerTaskServiceImpl implements IAgvContainerTaskService
|
||||
{
|
||||
@Autowired
|
||||
private AgvContainerTaskMapper agvContainerTaskMapper;
|
||||
|
||||
/**
|
||||
* 查询agv料架搬运任务
|
||||
*
|
||||
* @param id agv料架搬运任务主键
|
||||
* @return agv料架搬运任务
|
||||
*/
|
||||
@Override
|
||||
public AgvContainerTask selectAgvContainerTaskById(Long id)
|
||||
{
|
||||
return agvContainerTaskMapper.selectAgvContainerTaskById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询agv料架搬运任务列表
|
||||
*
|
||||
* @param agvContainerTask agv料架搬运任务
|
||||
* @return agv料架搬运任务
|
||||
*/
|
||||
@Override
|
||||
public List<AgvContainerTask> selectAgvContainerTaskList(AgvContainerTask agvContainerTask)
|
||||
{
|
||||
return agvContainerTaskMapper.selectAgvContainerTaskList(agvContainerTask);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增agv料架搬运任务
|
||||
*
|
||||
* @param agvContainerTask agv料架搬运任务
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int insertAgvContainerTask(AgvContainerTask agvContainerTask)
|
||||
{
|
||||
agvContainerTask.setCreateTime(DateUtils.getNowDate());
|
||||
return agvContainerTaskMapper.insertAgvContainerTask(agvContainerTask);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改agv料架搬运任务
|
||||
*
|
||||
* @param agvContainerTask agv料架搬运任务
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int updateAgvContainerTask(AgvContainerTask agvContainerTask)
|
||||
{
|
||||
return agvContainerTaskMapper.updateAgvContainerTask(agvContainerTask);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除agv料架搬运任务
|
||||
*
|
||||
* @param ids 需要删除的agv料架搬运任务主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteAgvContainerTaskByIds(Long[] ids)
|
||||
{
|
||||
return agvContainerTaskMapper.deleteAgvContainerTaskByIds(ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除agv料架搬运任务信息
|
||||
*
|
||||
* @param id agv料架搬运任务主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int deleteAgvContainerTaskById(Long id)
|
||||
{
|
||||
return agvContainerTaskMapper.deleteAgvContainerTaskById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteAgvContainerTaskByOrderId(String container) {
|
||||
agvContainerTaskMapper.deleteAgvContainerTaskByContainer(container);
|
||||
}
|
||||
}
|
||||
@@ -144,4 +144,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
#{reqCode}
|
||||
</foreach>
|
||||
</delete>
|
||||
<select id="selectKx" parameterType="java.util.Map" statementType="CALLABLE">
|
||||
{call proc_select_kx(#{v_position,mode=IN,jdbcType=VARCHAR},
|
||||
#{v_orderId,mode=IN,jdbcType=VARCHAR},
|
||||
#{v_type,mode=IN,jdbcType=VARCHAR},
|
||||
#{v_result,mode=OUT,jdbcType=INTEGER},
|
||||
#{v_result_msg,mode=OUT,jdbcType=VARCHAR})}
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -182,7 +182,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<trim prefix="SET" suffixOverrides=",">
|
||||
<if test="setFloor != null">set_floor = #{setFloor},</if>
|
||||
<if test="powerTime != null">power_time = #{powerTime},</if>
|
||||
<if test="lastTime != null">last_time = #{lastTime},</if>
|
||||
|
||||
<if test="agvStatus != null">agv_status = #{agvStatus},</if>
|
||||
<if test="taskNo != null">task_no = #{taskNo},</if>
|
||||
<if test="srcSite != null">src_site = #{srcSite},</if>
|
||||
@@ -227,6 +227,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
</delete>
|
||||
|
||||
<update id="updateLastTimeByAgvId" parameterType="String">
|
||||
update device_srgv set last_time =getdate() where agv_id=#{agvId}
|
||||
update device_srgv set last_time =convert(varchar,getdate(),120) where guid=#{agvId}
|
||||
</update>
|
||||
</mapper>
|
||||
|
||||
@@ -47,8 +47,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="priority != null "> and priority = #{priority}</if>
|
||||
<if test="executionPhase != null and executionPhase != ''"> and execution_phase = #{executionPhase}</if>
|
||||
<if test="inOrOut != null and inOrOut != ''"> and in_or_out = #{inOrOut}</if>
|
||||
<if test="startTime != null and startTime != ''"> and start_time = #{startTime}</if>
|
||||
<if test="finishTime != null and finishTime != ''"> and finish_time = #{finishTime}</if>
|
||||
<if test="startTime != null and startTime != ''"> and finish_time >= #{startTime}</if>
|
||||
<if test="finishTime != null and finishTime != ''"> and finish_time <= #{finishTime}</if>
|
||||
<if test="entranceId != null and entranceId != ''"> and entrance_id = #{entranceId}</if>
|
||||
<if test="exitId != null and exitId != ''"> and exit_id = #{exitId}</if>
|
||||
<if test="warehouseId != null and warehouseId != ''"> and warehouse_id = #{warehouseId}</if>
|
||||
@@ -229,8 +229,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="priority != null "> and priority = #{priority}</if>
|
||||
<if test="executionPhase != null and executionPhase != ''"> and execution_phase = #{executionPhase}</if>
|
||||
<if test="inOrOut != null and inOrOut != ''"> and in_or_out = #{inOrOut}</if>
|
||||
<if test="startTime != null and startTime != ''"> and start_time = #{startTime}</if>
|
||||
<if test="finishTime != null and finishTime != ''"> and finish_time = #{finishTime}</if>
|
||||
<if test="startTime != null and startTime != ''"> and finish_time >= #{startTime}</if>
|
||||
<if test="finishTime != null and finishTime != ''"> and finish_time <= #{finishTime}</if>
|
||||
<if test="entranceId != null and entranceId != ''"> and entrance_id = #{entranceId}</if>
|
||||
<if test="exitId != null and exitId != ''"> and exit_id = #{exitId}</if>
|
||||
<if test="warehouseId != null and warehouseId != ''"> and warehouse_id = #{warehouseId}</if>
|
||||
@@ -251,50 +251,40 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
|
||||
<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
|
||||
b.cargo_space_id,
|
||||
b.group_coding_no,
|
||||
b.the_floor,
|
||||
b.group_coding,
|
||||
a.task_no,
|
||||
a.job_id,
|
||||
a.in_or_out,
|
||||
a.target_cargo_space_id,
|
||||
ROW_NUMBER() OVER (
|
||||
PARTITION BY b.the_floor, b.group_coding_no
|
||||
ORDER BY b.group_coding DESC,
|
||||
CASE WHEN a.in_or_out = 30 THEN 0 ELSE 1 END,
|
||||
a.create_time ASC,
|
||||
a.job_id ASC
|
||||
) 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
|
||||
)
|
||||
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;
|
||||
|
||||
cargo_space_id,
|
||||
group_coding_no,
|
||||
the_floor,
|
||||
group_coding,
|
||||
task_no,
|
||||
job_id,
|
||||
in_or_out,
|
||||
target_cargo_space_id
|
||||
FROM floor_group
|
||||
WHERE rn = 1 -- ✅ 每次每层每个通道只取 1 条
|
||||
ORDER BY group_coding DESC;
|
||||
</select>
|
||||
<select id="selectMydoJobByTrayCode" resultMap="MydoJobResult">
|
||||
<include refid="selectMydoJobVo"/>
|
||||
@@ -310,5 +300,37 @@ select count(1) from mydo_job_wcs where in_or_out>=20 and exit_id = #{exitId}
|
||||
select count(1) from mydo_job_wcs
|
||||
|
||||
</select>
|
||||
<select id="selectMydoJobIn" resultType="java.lang.Integer">
|
||||
select count(1) from mydo_job_wcs where in_or_out <20 and cargo_space_id is null and status='3' and execution_phase='1'
|
||||
</select>
|
||||
|
||||
<select id="selectMydoJobCountOut" resultType="java.lang.Integer">
|
||||
select count(1) from mydo_job_wcs where in_or_out>20
|
||||
</select>
|
||||
<select id="selectByJobOut" parameterType="java.lang.Integer" resultType="java.lang.Integer">
|
||||
select count(1)
|
||||
from mydo_job_wcs
|
||||
where in_or_out > 20
|
||||
and status = '1'
|
||||
</select>
|
||||
|
||||
<select id="selectByJobOutIsOne" parameterType="java.lang.Integer" resultType="java.lang.Integer">
|
||||
select count(1) from mydo_job_wcs where in_or_out>20 and status='1' and the_floor=1
|
||||
</select>
|
||||
|
||||
<select id="selectMydoJobExit" parameterType="string" resultType="integer">
|
||||
select count(1) from mydo_job_wcs where in_or_out>20 and exit_id=#{exit}
|
||||
</select>
|
||||
|
||||
<select id="selectTheFloorYk" parameterType="string" resultType="java.lang.Integer">
|
||||
select count(1) from mydo_job_wcs where the_floor=#{theFloor} and in_or_out=30
|
||||
</select>
|
||||
|
||||
<delete id="deleteMydoJobByTaskNos">
|
||||
delete from mydo_job_wcs where task_no in
|
||||
<foreach item="taskNo" collection="taskNos" open="(" separator="," close=")">
|
||||
#{taskNo}
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -227,5 +227,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
<select id="selectTaskNosByGuids" parameterType="String" resultType="string">
|
||||
select task_no from wcs_srgv_queue where guid in
|
||||
<foreach item="guid" collection="array" open="(" separator="," close=")">
|
||||
#{guid}
|
||||
</foreach>
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ruoyi.system.mapper.AgvContainerTaskMapper">
|
||||
|
||||
<resultMap type="AgvContainerTask" id="AgvContainerTaskResult">
|
||||
<result property="id" column="id" />
|
||||
<result property="container" column="container" />
|
||||
<result property="startPoint" column="start_point" />
|
||||
<result property="endPoint" column="end_point" />
|
||||
<result property="createTime" column="create_time" />
|
||||
<result property="startTime" column="start_time" />
|
||||
<result property="finishTime" column="finish_time" />
|
||||
<result property="taskNo" column="task_no" />
|
||||
<result property="status" column="status" />
|
||||
<result property="spare1" column="spare1" />
|
||||
<result property="spare2" column="spare2" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectAgvContainerTaskVo">
|
||||
select id, container, start_point, end_point, create_time, start_time, finish_time, task_no, status, spare1, spare2 from agv_container_task
|
||||
</sql>
|
||||
|
||||
<select id="selectAgvContainerTaskList" parameterType="AgvContainerTask" resultMap="AgvContainerTaskResult">
|
||||
<include refid="selectAgvContainerTaskVo"/>
|
||||
<where>
|
||||
<if test="container != null and container != ''"> and container = #{container}</if>
|
||||
<if test="startPoint != null and startPoint != ''"> and start_point = #{startPoint}</if>
|
||||
<if test="endPoint != null and endPoint != ''"> and end_point = #{endPoint}</if>
|
||||
<if test="startTime != null and startTime != ''"> and start_time = #{startTime}</if>
|
||||
<if test="finishTime != null and finishTime != ''"> and finish_time = #{finishTime}</if>
|
||||
<if test="taskNo != null and taskNo != ''"> and task_no = #{taskNo}</if>
|
||||
<if test="status != null and status != ''"> and status = #{status}</if>
|
||||
<if test="spare1 != null and spare1 != ''"> and spare1 = #{spare1}</if>
|
||||
<if test="spare2 != null and spare2 != ''"> and spare2 = #{spare2}</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<select id="selectAgvContainerTaskById" parameterType="Long" resultMap="AgvContainerTaskResult">
|
||||
<include refid="selectAgvContainerTaskVo"/>
|
||||
where id = #{id}
|
||||
</select>
|
||||
|
||||
<insert id="insertAgvContainerTask" parameterType="AgvContainerTask" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into agv_container_task
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="container != null">container,</if>
|
||||
<if test="startPoint != null">start_point,</if>
|
||||
<if test="endPoint != null">end_point,</if>
|
||||
<if test="createTime != null">create_time,</if>
|
||||
<if test="startTime != null">start_time,</if>
|
||||
<if test="finishTime != null">finish_time,</if>
|
||||
<if test="taskNo != null">task_no,</if>
|
||||
<if test="status != null">status,</if>
|
||||
<if test="spare1 != null">spare1,</if>
|
||||
<if test="spare2 != null">spare2,</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="container != null">#{container},</if>
|
||||
<if test="startPoint != null">#{startPoint},</if>
|
||||
<if test="endPoint != null">#{endPoint},</if>
|
||||
<if test="createTime != null">#{createTime},</if>
|
||||
<if test="startTime != null">#{startTime},</if>
|
||||
<if test="finishTime != null">#{finishTime},</if>
|
||||
<if test="taskNo != null">#{taskNo},</if>
|
||||
<if test="status != null">#{status},</if>
|
||||
<if test="spare1 != null">#{spare1},</if>
|
||||
<if test="spare2 != null">#{spare2},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<update id="updateAgvContainerTask" parameterType="AgvContainerTask">
|
||||
update agv_container_task
|
||||
<trim prefix="SET" suffixOverrides=",">
|
||||
<if test="container != null">container = #{container},</if>
|
||||
<if test="startPoint != null">start_point = #{startPoint},</if>
|
||||
<if test="endPoint != null">end_point = #{endPoint},</if>
|
||||
<if test="createTime != null">create_time = #{createTime},</if>
|
||||
<if test="startTime != null">start_time = #{startTime},</if>
|
||||
<if test="finishTime != null">finish_time = #{finishTime},</if>
|
||||
<if test="taskNo != null">task_no = #{taskNo},</if>
|
||||
<if test="status != null">status = #{status},</if>
|
||||
<if test="spare1 != null">spare1 = #{spare1},</if>
|
||||
<if test="spare2 != null">spare2 = #{spare2},</if>
|
||||
</trim>
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
||||
<delete id="deleteAgvContainerTaskById" parameterType="Long">
|
||||
delete from agv_container_task where id = #{id}
|
||||
</delete>
|
||||
<delete id="deleteAgvContainerTaskByContainer" parameterType="string">
|
||||
delete from agv_container_task where container = #{container}
|
||||
</delete>
|
||||
|
||||
<delete id="deleteAgvContainerTaskByIds" parameterType="String">
|
||||
delete from agv_container_task where id in
|
||||
<foreach item="id" collection="array" open="(" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
<select id="insertAgvContainerTaskFinish" parameterType="string">
|
||||
insert into agv_container_task_finish select * from agv_container_task where container=#{orderId}
|
||||
</select>
|
||||
|
||||
<update id="updateAgvContainerTaskByOrder" parameterType="string">
|
||||
update agv_container_task set status='2' where container=#{orderId}
|
||||
</update>
|
||||
|
||||
<select id="selectAgvContainerFinishOne" resultMap="AgvContainerTaskResult">
|
||||
select top 1 * from agv_container_task where status='2'
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@@ -26,9 +26,7 @@ public class AjaxResult extends HashMap<String, Object>
|
||||
/**
|
||||
* 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。
|
||||
*/
|
||||
public AjaxResult()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 初始化一个新创建的 AjaxResult 对象
|
||||
|
||||
@@ -116,7 +116,7 @@ public class SecurityConfig
|
||||
.antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
|
||||
.antMatchers("/swagger-ui.html", "/changeLanguage", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**", "/pda/**").permitAll()
|
||||
.antMatchers("/device/operation/**").permitAll()
|
||||
.antMatchers("/agv/api/**").permitAll()
|
||||
.antMatchers("/api/agv/**").permitAll()
|
||||
.antMatchers("/device/api/**").permitAll()
|
||||
.antMatchers("/wcs2Wms/api/**").permitAll()
|
||||
.antMatchers("/test/**").permitAll()
|
||||
|
||||
@@ -157,6 +157,7 @@ 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://192.168.188.236:8081' // 后端接口地址(你的后端端口是8081)
|
||||
const baseUrl = 'http://localhost:8081' // 后端接口地址(你的后端端口是8081)
|
||||
|
||||
const port = process.env.port || process.env.npm_config_port || 80 // 前端端口
|
||||
|
||||
|
||||
Reference in New Issue
Block a user