no message

main
HUOJIN\92525 2025-09-06 16:03:30 +08:00
parent 3b2fbf9385
commit a05914d0f7
2 changed files with 197 additions and 260 deletions

View File

@ -1,243 +0,0 @@
package com.youchain.businessdata.inputJson;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.youchain.basicdata.domain.Point;
import com.youchain.basicdata.service.PointService;
import com.youchain.businessdata.domain.AgvTask;
import com.youchain.utils.BizStatus;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class AgvTaskJsonBuilder {
// 常量定义
private static final String ORG_ID_WMS = "WMS";//组织
private static final String ORG_ID_WCS = "WCS";//组织
private static final String PRIORITY = "1";//优先级
private static final String NODE_POINT = "NODE_POINT";//节点类型
private static final String NODE_SLOT = "NODE_SLOT";//节点类型
private static final String PASS_STRATEGY_AUTO = "AUTO";//移动策略
private static final String PASS_STRATEGY_MANUAL = "MANUAL";//移动策略
private final PointService pointService;
/**
* AGVJSON
*/
private JSONObject createBaseAgvTaskJson(AgvTask agvTask, String orgId, String missionType, String robotType) {
JSONObject jsonObject = new JSONObject(true);
jsonObject.put("orgId", orgId);
jsonObject.put("requestId", String.valueOf(System.currentTimeMillis()));
jsonObject.put("missionCode", agvTask.getId());
jsonObject.put("missionType", missionType);
jsonObject.put("viewBoardType", "");
jsonObject.put("robotType", robotType);
jsonObject.put("priority", PRIORITY);
return jsonObject;
}
/**
* JSON
*/
public String createForkMissionJson(AgvTask agvTask) {
//基础对象
JSONObject jsonObject = createBaseAgvTaskJson(agvTask, ORG_ID_WMS, agvTask.getJobType(), "FORKLIFT");
jsonObject.put("containerCode", agvTask.getStockCode());
jsonObject.put("robotId", "");
//创建json数组
JSONArray missionDataArray = new JSONArray();
//根据任务类型取节点类型
boolean isPickTask = BizStatus.PICK.equals(agvTask.getType());
String startNodeType = isPickTask ? NODE_SLOT : NODE_POINT;
String endNodeType = isPickTask ? NODE_POINT : NODE_SLOT;
//起点
missionDataArray.add(createForkMissionNode(1, agvTask.getStartSlotCode(), startNodeType));
//终点
missionDataArray.add(createForkMissionNode(2, agvTask.getEndSlotCode(), endNodeType));
//添加任务数据
jsonObject.put("missionData", missionDataArray);
return jsonObject.toJSONString();
}
/**
*
*/
private JSONObject createForkMissionNode(int sequence, String position, String nodeType) {
JSONObject node = new JSONObject(true);
node.put("sequence", sequence);
node.put("position", position);
node.put("nodeType", nodeType);
node.put("stackNumber", 0);
node.put("actionConfirm", false);
return node;
}
/**
* JSON
*/
public String createRackMissionJson(AgvTask agvTask) {
//基础对象
JSONObject jsonObject = createBaseAgvTaskJson(agvTask, ORG_ID_WMS, agvTask.getJobType(), "LIFT");
//创建json数组
JSONArray missionDataArray = new JSONArray();
//创建任务数据
missionDataArray.add(createRackMissionNode(agvTask));
//添加任务数据
jsonObject.put("missionData", missionDataArray);
return jsonObject.toJSONString();
}
/**
*
*/
private JSONObject createRackMissionNode(AgvTask agvTask) {
JSONObject node = new JSONObject(true);
node.put("sequence", 1);//序号
node.put("containerCode", agvTask.getStockCode());//容器
node.put("startPosition", agvTask.getStartSlotCode());//点位
node.put("startPositionType", "NODE_POINT");//
node.put("endPosition", agvTask.getEndSlotCode());//点位
node.put("endPositionType", "NODE_POINT");//
return node;
}
/**
* JSON
*/
public String createRollerJson(AgvTask agvTask) {
//基础对象
JSONObject jsonObject = createBaseAgvTaskJson(agvTask, ORG_ID_WMS, agvTask.getJobType(), "ROLLER");
jsonObject.put("lockRobotAfterFinish", false);
//创建json数组
JSONArray missionDataArray = new JSONArray();
//起点
missionDataArray.add(createRollerNode(1, agvTask.getStartSlotCode(), "ROLLER_RECEIVE", agvTask.getStartSlotCode(), true, "AUTO"));
//途径点
missionDataArray.add(createRollerNode(2, "FX001", "", "", false, "MANUAL"));
//终点
missionDataArray.add(createRollerNode(3, agvTask.getEndSlotCode(), "ROLLER_SEND", agvTask.getEndSlotCode(), true, "AUTO"));
//添加任务数据
jsonObject.put("missionData", missionDataArray);
return jsonObject.toJSONString();
}
/**
*
*/
private JSONObject createRollerNode(int sequence, String position, String actionType, String deviceCode, boolean actionConfirm, String passStrategy) {
JSONObject node = new JSONObject(true);
node.put("sequence", sequence);
node.put("position", position);
node.put("type", NODE_POINT);
node.put("actionType", actionType);
node.put("binCode", "");
node.put("rollerLevel", 1);
node.put("deviceCode", deviceCode);
node.put("actionConfirm", actionConfirm);
node.put("passStrategy", passStrategy);
return node;
}
/**
* JSON
*/
public String createTuggerJson(AgvTask agvTask, List<String> tugModels) {
JSONObject jsonObject = createBaseAgvTaskJson(agvTask, ORG_ID_WCS, agvTask.getJobType(), "TUGGER");
jsonObject.put("templateCode", "");
jsonObject.put("lockRobotAfterFinish", false);
jsonObject.put("unlockRobotId", "");
jsonObject.put("unlockMissionCode", "");
// 根据区域调整参数
Point point = pointService.validatePoint(agvTask.getStartSlotCode());
//创建json数组
JSONArray missionDataArray = new JSONArray();
// 起点
missionDataArray.add(createTuggerStartNode(agvTask.getStartSlotCode(), tugModels));
//途径点
List<String> stations = parseStations(agvTask.getEndSlotCode());
for (int i = 0; i < stations.size(); i++) {
missionDataArray.add(createTuggerWayNode(i + 2, stations.get(i)));
}
//终点
missionDataArray.add(createTuggerEndNode(stations.size() + 2, point.getBeatCode()));
jsonObject.put("missionData", missionDataArray);
return jsonObject.toJSONString();
}
/**
*
*/
private JSONObject createTuggerStartNode(String position, List<String> tugModels) {
JSONObject node = new JSONObject(true);
node.put("sequence", 1);
node.put("type", NODE_POINT);
node.put("position", position);
node.put("actionType", "TUGGER_ATTACH");
node.put("tugCount", tugModels.size());
node.put("passStrategy", PASS_STRATEGY_AUTO);
node.put("tugModels", tugModels);
return node;
}
/**
*
*/
private JSONObject createTuggerWayNode(int sequence, String position) {
JSONObject node = new JSONObject(true);
node.put("sequence", sequence);
node.put("type", NODE_POINT);
node.put("position", position);
node.put("passStrategy", PASS_STRATEGY_MANUAL);
return node;
}
/**
*
*/
private JSONObject createTuggerEndNode(int sequence, String position) {
JSONObject node = new JSONObject(true);
node.put("sequence", sequence);
node.put("type", NODE_POINT);
node.put("position", position);
node.put("actionType", "TUGGER_DETACH");
node.put("passStrategy", PASS_STRATEGY_AUTO);
node.put("waitingMillis", 0);
return node;
}
/**
*
*/
private List<String> parseStations(String stationString) {
return Arrays.stream(stationString.split(","))
.map(String::trim)
.filter(s -> !s.isEmpty())
.collect(Collectors.toList());
}
}

View File

@ -1,13 +1,13 @@
package com.youchain.businessdata.service.impl; package com.youchain.businessdata.service.impl;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.youchain.basicdata.domain.Point; import com.youchain.basicdata.domain.Point;
import com.youchain.basicdata.domain.Stock; import com.youchain.basicdata.domain.Stock;
import com.youchain.basicdata.service.PointService; import com.youchain.basicdata.service.PointService;
import com.youchain.basicdata.service.StockService; import com.youchain.basicdata.service.StockService;
import com.youchain.businessdata.domain.AgvTask; import com.youchain.businessdata.domain.AgvTask;
import com.youchain.businessdata.inputJson.AgvTaskJsonBuilder;
import com.youchain.businessdata.inputJson.Dolly; import com.youchain.businessdata.inputJson.Dolly;
import com.youchain.businessdata.inputJson.UpdateTuggerTrailerInfo; import com.youchain.businessdata.inputJson.UpdateTuggerTrailerInfo;
import com.youchain.businessdata.service.*; import com.youchain.businessdata.service.*;
@ -28,12 +28,20 @@ import java.util.stream.Collectors;
@Slf4j @Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
public class KMReServiceImpl implements KMReService { public class KMReServiceImpl implements KMReService {
// 常量定义
private static final String ORG_ID_WMS = "WMS";//组织
private static final String ORG_ID_WCS = "WCS";//组织
private static final String PRIORITY = "1";//优先级
private static final String NODE_POINT = "NODE_POINT";//节点类型
private static final String NODE_SLOT = "NODE_SLOT";//节点类型
private static final String PASS_STRATEGY_AUTO = "AUTO";//移动策略
private static final String PASS_STRATEGY_MANUAL = "MANUAL";//移动策略
private final DictService dictService; private final DictService dictService;
private final StockService stockService; private final StockService stockService;
private final PointService pointService; private final PointService pointService;
private final AgvTaskService agvTaskService; private final AgvTaskService agvTaskService;
private final LesService lesService; private final LesService lesService;
private final AgvTaskJsonBuilder agvTaskJsonBuilder;
/** /**
@ -162,6 +170,20 @@ public class KMReServiceImpl implements KMReService {
} }
/**
* AGVJSON
*/
private JSONObject createBaseAgvTaskJson(AgvTask agvTask, String orgId, String missionType, String robotType) {
JSONObject jsonObject = new JSONObject(true);
jsonObject.put("orgId", orgId);
jsonObject.put("requestId", String.valueOf(System.currentTimeMillis()));
jsonObject.put("missionCode", agvTask.getId());
jsonObject.put("missionType", missionType);
jsonObject.put("viewBoardType", "");
jsonObject.put("robotType", robotType);
jsonObject.put("priority", PRIORITY);
return jsonObject;
}
/** /**
* Json * Json
@ -170,7 +192,42 @@ public class KMReServiceImpl implements KMReService {
*/ */
@Override @Override
public String createForkMissionJson(AgvTask agvTask) { public String createForkMissionJson(AgvTask agvTask) {
return agvTaskJsonBuilder.createForkMissionJson(agvTask); //基础对象
JSONObject jsonObject = createBaseAgvTaskJson(agvTask, ORG_ID_WMS, agvTask.getJobType(), "FORKLIFT");
jsonObject.put("containerCode", agvTask.getStockCode());
jsonObject.put("robotId", "");
//创建json数组
JSONArray missionDataArray = new JSONArray();
//根据任务类型取节点类型
boolean isPickTask = BizStatus.PICK.equals(agvTask.getType());
String startNodeType = isPickTask ? NODE_SLOT : NODE_POINT;
String endNodeType = isPickTask ? NODE_POINT : NODE_SLOT;
//起点
missionDataArray.add(createForkMissionNode(1, agvTask.getStartSlotCode(), startNodeType));
//终点
missionDataArray.add(createForkMissionNode(2, agvTask.getEndSlotCode(), endNodeType));
//添加任务数据
jsonObject.put("missionData", missionDataArray);
return jsonObject.toJSONString();
}
/**
*
*/
private JSONObject createForkMissionNode(int sequence, String position, String nodeType) {
JSONObject node = new JSONObject(true);
node.put("sequence", sequence);
node.put("position", position);
node.put("nodeType", nodeType);
node.put("stackNumber", 0);
node.put("actionConfirm", false);
return node;
} }
/** /**
@ -180,17 +237,150 @@ public class KMReServiceImpl implements KMReService {
*/ */
@Override @Override
public String createRackMissionJson(AgvTask agvTask) { public String createRackMissionJson(AgvTask agvTask) {
return agvTaskJsonBuilder.createRackMissionJson(agvTask); //基础对象
JSONObject jsonObject = createBaseAgvTaskJson(agvTask, ORG_ID_WMS, agvTask.getJobType(), "LIFT");
//创建json数组
JSONArray missionDataArray = new JSONArray();
//创建任务数据
missionDataArray.add(createRackMissionNode(agvTask));
//添加任务数据
jsonObject.put("missionData", missionDataArray);
return jsonObject.toJSONString();
}
/**
*
*/
private JSONObject createRackMissionNode(AgvTask agvTask) {
JSONObject node = new JSONObject(true);
node.put("sequence", 1);//序号
node.put("containerCode", agvTask.getStockCode());//容器
node.put("startPosition", agvTask.getStartSlotCode());//点位
node.put("startPositionType", "NODE_POINT");//
node.put("endPosition", agvTask.getEndSlotCode());//点位
node.put("endPositionType", "NODE_POINT");//
return node;
} }
@Override @Override
public String createRollerJson(AgvTask agvTask) { public String createRollerJson(AgvTask agvTask) {
return agvTaskJsonBuilder.createRollerJson(agvTask); //基础对象
JSONObject jsonObject = createBaseAgvTaskJson(agvTask, ORG_ID_WMS, agvTask.getJobType(), "ROLLER");
jsonObject.put("lockRobotAfterFinish", false);
//创建json数组
JSONArray missionDataArray = new JSONArray();
//起点
missionDataArray.add(createRollerNode(1, agvTask.getStartSlotCode(), "ROLLER_RECEIVE", agvTask.getStartSlotCode(), true, "AUTO"));
//途径点
missionDataArray.add(createRollerNode(2, "FX001", "", "", false, "MANUAL"));
//终点
missionDataArray.add(createRollerNode(3, agvTask.getEndSlotCode(), "ROLLER_SEND", agvTask.getEndSlotCode(), true, "AUTO"));
//添加任务数据
jsonObject.put("missionData", missionDataArray);
return jsonObject.toJSONString();
}
/**
*
*/
private JSONObject createRollerNode(int sequence, String position, String actionType, String deviceCode, boolean actionConfirm, String passStrategy) {
JSONObject node = new JSONObject(true);
node.put("sequence", sequence);
node.put("position", position);
node.put("type", NODE_POINT);
node.put("actionType", actionType);
node.put("binCode", "");
node.put("rollerLevel", 1);
node.put("deviceCode", deviceCode);
node.put("actionConfirm", actionConfirm);
node.put("passStrategy", passStrategy);
return node;
} }
@Override @Override
public String createTuggerJson(AgvTask agvTask, List<String> tugModels) { public String createTuggerJson(AgvTask agvTask, List<String> tugModels) {
return agvTaskJsonBuilder.createTuggerJson(agvTask, tugModels); JSONObject jsonObject = createBaseAgvTaskJson(agvTask, ORG_ID_WCS, agvTask.getJobType(), "TUGGER");
jsonObject.put("templateCode", "");
jsonObject.put("lockRobotAfterFinish", false);
jsonObject.put("unlockRobotId", "");
jsonObject.put("unlockMissionCode", "");
// 根据区域调整参数
Point point = pointService.validatePoint(agvTask.getStartSlotCode());
//创建json数组
JSONArray missionDataArray = new JSONArray();
// 起点
missionDataArray.add(createTuggerStartNode(agvTask.getStartSlotCode(), tugModels));
//途径点
List<String> stations = parseStations(agvTask.getEndSlotCode());
for (int i = 0; i < stations.size(); i++) {
missionDataArray.add(createTuggerWayNode(i + 2, stations.get(i)));
}
//终点
missionDataArray.add(createTuggerEndNode(stations.size() + 2, point.getBeatCode()));
jsonObject.put("missionData", missionDataArray);
return jsonObject.toJSONString();
}
/**
*
*/
private JSONObject createTuggerStartNode(String position, List<String> tugModels) {
JSONObject node = new JSONObject(true);
node.put("sequence", 1);
node.put("type", NODE_POINT);
node.put("position", position);
node.put("actionType", "TUGGER_ATTACH");
node.put("tugCount", tugModels.size());
node.put("passStrategy", PASS_STRATEGY_AUTO);
node.put("tugModels", tugModels);
return node;
}
/**
*
*/
private JSONObject createTuggerWayNode(int sequence, String position) {
JSONObject node = new JSONObject(true);
node.put("sequence", sequence);
node.put("type", NODE_POINT);
node.put("position", position);
node.put("passStrategy", PASS_STRATEGY_MANUAL);
return node;
}
/**
*
*/
private JSONObject createTuggerEndNode(int sequence, String position) {
JSONObject node = new JSONObject(true);
node.put("sequence", sequence);
node.put("type", NODE_POINT);
node.put("position", position);
node.put("actionType", "TUGGER_DETACH");
node.put("passStrategy", PASS_STRATEGY_AUTO);
node.put("waitingMillis", 0);
return node;
}
/**
*
*/
private List<String> parseStations(String stationString) {
return Arrays.stream(stationString.split(",")).map(String::trim).filter(s -> !s.isEmpty()).collect(Collectors.toList());
} }
@Override @Override
@ -381,17 +571,7 @@ public class KMReServiceImpl implements KMReService {
if (bool) { if (bool) {
throw new BadRequestException("任务已重新生成,请勿重复操作! "); throw new BadRequestException("任务已重新生成,请勿重复操作! ");
} }
AgvTask newAgvTask = AgvTask.builder() AgvTask newAgvTask = AgvTask.builder().stockCode(agvTask.getStockCode()).type(agvTask.getType()).jobType(agvTask.getJobType()).jobPriority(1).startSlotCode(agvTask.getStartSlotCode()).endSlotCode(agvTask.getEndSlotCode()).slotCode(agvTask.getSlotCode()).status(BizStatus.OPEN).lineSlotCode(agvTask.getLineSlotCode()).build();
.stockCode(agvTask.getStockCode())
.type(agvTask.getType())
.jobType(agvTask.getJobType())
.jobPriority(1)
.startSlotCode(agvTask.getStartSlotCode())
.endSlotCode(agvTask.getEndSlotCode())
.slotCode(agvTask.getSlotCode())
.status(BizStatus.OPEN)
.lineSlotCode(agvTask.getLineSlotCode())
.build();
agvTaskService.create(newAgvTask); agvTaskService.create(newAgvTask);