返修下线调整

main
HUOJIN\92525 2024-12-10 11:47:18 +08:00
parent d22b015d6c
commit 3009854769
7 changed files with 94 additions and 49 deletions

View File

@ -102,7 +102,7 @@ public class BydAppServiceImpl implements BydAppService {
Point endPoint = pointList.get(0);
//创建下发任务
AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.ASN, stock, srcPoint, endPoint, "FORKLIFT_MOVE");
AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.ASN, stock, srcPoint.getCode(), endPoint.getCode(), "FORKLIFT_MOVE");
//创建ASN明细和ItemKey和Task任务
createAsnDetailsAndItemKeysAndTasks(barCodeVos, item, stock, srcPoint, endPoint, agvTask);

View File

@ -94,28 +94,32 @@ public interface AgvTaskService {
/**
* agvTask
* @param bizStatus
* @param stock
* @param srcPoint
* @param endPoint
* @param jobType
*
* @param bizStatus
* @param stock
* @param srcPointCode
* @param endPointCode
* @param jobType
*/
AgvTask createAgvTask(String bizStatus, Stock stock, Point srcPoint, Point endPoint, String jobType);
AgvTask createAgvTask(String bizStatus, Stock stock, String srcPointCode, String endPointCode, String jobType);
/**
*
*
* @param stockCode
*/
List<AgvTask> findRepeat(String stockCode, String srcPointCode, String endPointCode);
/**
*
* @param stockCode
*
* @param endSlotCode
* @param type
* @param jobType
*/
Boolean findByEndSlotCode(String endSlotCode, String type, String jobType);
/**
*
*/
@ -123,13 +127,13 @@ public interface AgvTaskService {
/**
* ()
* @param agvTaskId ID
*
* @param agvTaskId ID
* @param srcPointCode
*/
int existsBySrcPoint(Long agvTaskId, String srcPointCode);
/**
*
*
*/
Map<String, Object> queryWeeklyTaskCounts();

View File

@ -125,12 +125,12 @@ public class AgvTaskServiceImpl implements AgvTaskService {
@Override
@Transactional(rollbackFor = Exception.class)
public AgvTask createAgvTask(String bizStatus, Stock stock, Point srcPoint, Point endPoint, String jobType) {
public AgvTask createAgvTask(String bizStatus, Stock stock, String srcPointCode, String endPointCode, String jobType) {
AgvTask agvTask = new AgvTask();
agvTask.setType(bizStatus);
agvTask.setStockCode(stock == null ? null : stock.getCode());
agvTask.setStartSlotCode(srcPoint.getCode());
agvTask.setEndSlotCode(endPoint.getCode());
agvTask.setStartSlotCode(srcPointCode);
agvTask.setEndSlotCode(endPointCode);
agvTask.setStatus(BizStatus.OPEN);
agvTask.setJobType(jobType);
agvTaskRepository.save(agvTask);

View File

@ -262,11 +262,10 @@ public class KMReServiceImpl implements KMReService {
@Override
public synchronized String sendAgvTaskGtJson(AgvTask agvTask) {
JSONObject jsonObject = new JSONObject(new LinkedHashMap<>());
String agvCode = TimeNumberUtils.getGTTaskCode();
Map<String, Object> objMap = new LinkedHashMap<>();
objMap.put("orgId", agvCode);//库存组织 ID(或工厂代码,供应商代码)
objMap.put("requestId", agvCode);//请求 id
objMap.put("missionCode", agvCode);//任务编号
objMap.put("orgId", agvTask.getId());//库存组织 ID(或工厂代码,供应商代码)
objMap.put("requestId", agvTask.getId());//请求 id
objMap.put("missionCode", agvTask.getId());//任务编号
objMap.put("missionType", "ROLLER_MOVE");//任务类型 :滚筒
objMap.put("viewBoardType", "");//上视识别类型:
objMap.put("robotType", "ROLLER");
@ -280,9 +279,9 @@ public class KMReServiceImpl implements KMReService {
missionDataMap.put("position", agvTask.getStartSlotCode());//起点
missionDataMap.put("type", "NODE_POINT");//
missionDataMap.put("actionType", "ROLLER_RECEIVE");//
missionDataMap.put("binCode", agvTask.getStockCode());//容器
missionDataMap.put("binCode", "");//容器
missionDataMap.put("rollerLevel", 1);//
missionDataMap.put("deviceCode", agvTask.getSlotCode());//设备编号
missionDataMap.put("deviceCode", agvTask.getStartSlotCode());//设备编号
missionDataMap.put("actionConfirm", true);//
missionDataMap.put("passStrategy", "AUTO");//
missionDataObj.putAll(missionDataMap);
@ -291,10 +290,10 @@ public class KMReServiceImpl implements KMReService {
JSONObject missionDataObj2 = new JSONObject(new LinkedHashMap<>());
Map<String, Object> missionDataMap2 = new LinkedHashMap<>();
missionDataMap2.put("sequence", 2);//序号
missionDataMap2.put("position", agvTask.getEndSlotCode());//起
missionDataMap2.put("position", "FX001");//中转
missionDataMap2.put("type", "NODE_POINT");//
missionDataMap2.put("actionType", "");//
missionDataMap2.put("binCode", agvTask.getStockCode());//容器
missionDataMap2.put("binCode", "");//容器
missionDataMap2.put("rollerLevel", 1);//
missionDataMap2.put("deviceCode", "");//
missionDataMap2.put("actionConfirm", false);//
@ -305,12 +304,12 @@ public class KMReServiceImpl implements KMReService {
JSONObject missionDataObj3 = new JSONObject(new LinkedHashMap<>());
Map<String, Object> missionDataMap3 = new LinkedHashMap<>();
missionDataMap3.put("sequence", 3);//序号
missionDataMap3.put("position", agvTask.getStartSlotCode());//起
missionDataMap3.put("position", agvTask.getEndSlotCode());//终
missionDataMap3.put("type", "NODE_POINT");//
missionDataMap3.put("actionType", "ROLLER_RECEIVE");//
missionDataMap3.put("binCode", agvTask.getStockCode());//容器
missionDataMap3.put("binCode", "");//容器
missionDataMap3.put("rollerLevel", 1);//
missionDataMap3.put("deviceCode", agvTask.getSlotCode());//
missionDataMap3.put("deviceCode", agvTask.getEndSlotCode());//终点
missionDataMap3.put("actionConfirm", true);//
missionDataMap3.put("passStrategy", "AUTO");//
missionDataObj3.putAll(missionDataMap3);
@ -355,9 +354,6 @@ public class KMReServiceImpl implements KMReService {
@Transactional(rollbackFor = Exception.class)
public void missionStateCallback(AgvTask agvTask, String status, String containerCode) {
Stock stock = stockService.findByCode(containerCode);
if (stock == null) {
throw new BadRequestException(containerCode + "容器不存在或已失效");
}
//顶升的是起点;其它终点;
Point point;
String pointCode;
@ -405,7 +401,7 @@ public class KMReServiceImpl implements KMReService {
Point endPoint = endPointList.get(0);
//创建任务
AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.FB_RETURN, stock, srcPoint, endPoint, "FORKLIFT_MOVE");
AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.FB_RETURN, stock, srcPoint.getCode(), endPoint.getCode(), "FORKLIFT_MOVE");
//点位占用
pointService.usedPoint(endPoint);
@ -439,7 +435,7 @@ public class KMReServiceImpl implements KMReService {
pointService.freePoint(startPoint);
}
agvTask.setStockCode(stock.getCode());
agvTask.setStockCode(stock == null ? null : stock.getCode());
agvTask.setStatus(BizStatus.UP_CONTAINER);
agvTaskService.update(agvTask);
@ -489,6 +485,9 @@ public class KMReServiceImpl implements KMReService {
case BizStatus.Cp_Off_Line:
handleCpOffLine(endPoint, stock);//成品下线完成
break;
case BizStatus.Fx_Off_Line:
handleFxOffLine(agvTask);//返修下线完成
break;
}
//更新任务状态
@ -520,7 +519,7 @@ public class KMReServiceImpl implements KMReService {
* @param agvTask
*/
private synchronized void handleResendTask(AgvTask agvTask) {
List<AgvTask> repeatList = agvTaskService.findRepeat(agvTask.getStockCode(),agvTask.getStartSlotCode(),agvTask.getEndSlotCode());
List<AgvTask> repeatList = agvTaskService.findRepeat(agvTask.getStockCode(), agvTask.getStartSlotCode(), agvTask.getEndSlotCode());
if (!repeatList.isEmpty()) {
throw new BadRequestException("任务已重新生成,请勿重复操作! ");
}
@ -687,6 +686,10 @@ public class KMReServiceImpl implements KMReService {
stockService.usedStock(stock, endPoint, BaseStatus.USED);
}
private void handleFxOffLine(AgvTask agvTask) {
this.updateAgvTaskStatus(agvTask, null, BizStatus.FINISH);
}
/**
*
*
@ -770,7 +773,7 @@ public class KMReServiceImpl implements KMReService {
* @param status
*/
private void updateAgvTaskStatus(AgvTask agvTask, Stock stock, String status) {
agvTask.setStockCode(stock.getCode());
agvTask.setStockCode(stock == null ? null : stock.getCode());
agvTask.setStatus(status);
agvTask.setEndTime(new Timestamp(new Date().getTime()));
agvTaskService.update(agvTask);

View File

@ -18,10 +18,7 @@ import com.youchain.businessdata.service.AgvTaskService;
import com.youchain.businessdata.service.MesService;
import com.youchain.exception.BadRequestException;
import com.youchain.modules.system.service.DeptService;
import com.youchain.utils.AreaNameDic;
import com.youchain.utils.BaseStatus;
import com.youchain.utils.BizStatus;
import com.youchain.utils.StringUtils;
import com.youchain.utils.*;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -47,6 +44,7 @@ public class MesServiceImpl implements MesService {
private final AgvTaskService agvTaskService;
private final KMReServiceImpl kmReService;
private final DeptService deptService;
private final GtLineMap gtLineMap;
@Override
@Transactional(rollbackFor = Exception.class)
@ -274,7 +272,7 @@ public class MesServiceImpl implements MesService {
throw new BadRequestException(endPoint.getCode() + "点位有任务,请稍后再试!");
}
//创建Agv任务
AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Up, emptyStock, srcPoint, endPoint, "RACK_MOVE");
AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Up, emptyStock, srcPoint.getCode(), endPoint.getCode(), "RACK_MOVE");
// 更新点位状态
pointService.usedPoint(endPoint);
//下发任务
@ -296,7 +294,7 @@ public class MesServiceImpl implements MesService {
//验证终点是否有任务
if (agvTaskService.findByEndSlotCode(endPoint.getCode(), BizStatus.Cp_Off_Line, "RACK_MOVE")) {
//创建Agv任务
AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Line, fullStock, srcPoint, endPoint, "RACK_MOVE");
AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Line, fullStock, srcPoint.getCode(), endPoint.getCode(), "RACK_MOVE");
// 更新点位状态
pointService.usedPoint(endPoint);
//占用容器
@ -330,7 +328,7 @@ public class MesServiceImpl implements MesService {
}
//创建Agv任务
AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Line, stock, srcPoint, endPoint, "RACK_MOVE");
AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Cp_Off_Line, stock, srcPoint.getCode(), endPoint.getCode(), "RACK_MOVE");
// 更新点位状态
pointService.usedPoint(endPoint);
//占用容器
@ -340,15 +338,19 @@ public class MesServiceImpl implements MesService {
}
private void moveFxOffLine(TransTask transTask) {
Point srcPoint = pointService.validatePoint(transTask.getPointCode());//起点
List<Point> pointList = pointService.queryPoints(null, BaseStatus.FREE, BaseStatus.BOX, AreaNameDic.FXSXQ);
if (pointList.isEmpty()) {
throw new BadRequestException("返修上线区没有空闲点位!");
if (!gtLineMap.containsKey(transTask.getPointCode())) {
throw new BadRequestException(transTask.getPointCode() + "点位不存在,请核实!");
}
Point endPoint = pointList.get(0);
List<String> points = gtLineMap.getData(transTask.getPointCode());
//验证终点是否有任务
if (!agvTaskService.findByEndSlotCode(points.get(1), BizStatus.Fx_Off_Line, "ROLLER_MOVE")) {
// 直接在条件判断为false时抛出异常表示该点位有任务
throw new BadRequestException(points.get(1) + "点位有任务,请稍后再试!");
}
//生成任务
AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Fx_Off_Line, null, srcPoint, endPoint, "ROLLER_MOVE");
agvTask.setSlotCode(srcPoint.getName());
AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Fx_Off_Line, null, transTask.getPointCode(), points.get(1), "ROLLER_MOVE");
agvTaskService.update(agvTask);
//下发任务

View File

@ -214,7 +214,7 @@ public class TaskServiceImpl implements TaskService {
List<AgvTask> agvTaskList = agvTaskService.findRepeat(task.getSrcStockCode(),task.getSrcPointCode(),task.getDstPointCode());
if (agvTaskList.isEmpty()) {
//创建任务
agvTask = agvTaskService.createAgvTask(BizStatus.PICK, task.getSrcStock(), task.getSrcPoint(), task.getDstPoint(), "FORKLIFT_MOVE");
agvTask = agvTaskService.createAgvTask(BizStatus.PICK, task.getSrcStock(), task.getSrcPoint().getCode(), task.getDstPoint().getCode(), "FORKLIFT_MOVE");
//终点占用
pointService.usedPoint(task.getDstPoint());
@ -267,7 +267,7 @@ public class TaskServiceImpl implements TaskService {
//创建任务
agvTaskService.createAgvTask(BizStatus.CALL_RETURN, stock, srcPoint, endPoint, "RACK_MOVE");
agvTaskService.createAgvTask(BizStatus.CALL_RETURN, stock, srcPoint.getCode(), endPoint.getCode(), "RACK_MOVE");
//终点占用
pointService.usedPoint(endPoint);
@ -295,7 +295,7 @@ public class TaskServiceImpl implements TaskService {
Stock stock = pick.getStock();
//创建任务
AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.CALL_PICK, stock, srcPoint, endPoint, "RACK_MOVE");
AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.CALL_PICK, stock, srcPoint.getCode(), endPoint.getCode(), "RACK_MOVE");
agvTask.setLineSlotCode(pick.getCode());
agvTaskService.update(agvTask);

View File

@ -0,0 +1,36 @@
package com.youchain.utils;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 线
* 线 BYDGTO06BYDGT007BVDGTO01BXDGT003BYDGT005
* 线 BYDGTO02BYDGTO04BYDGTO08
*/
@Component
public class GtLineMap {
public static final Map<String, List<String>> dataMap;
static {
dataMap = new ConcurrentHashMap<>();
// 初始化Map
dataMap.put("BYDGT006", Arrays.asList("FX001", "BYDGT002"));
dataMap.put("BYDGT007", Arrays.asList("FX001", "BYDGT002"));
dataMap.put("BVDGT001", Arrays.asList("FX001", "BYDGT002"));
dataMap.put("BXDGT003", Arrays.asList("FX001", "BYDGT004"));
dataMap.put("BYDGT005", Arrays.asList("FX001", "BYDGT008"));
}
public List<String> getData(String key) {
return dataMap.get(key);
}
public boolean containsKey(String key) {
return dataMap.containsKey(key);
}
}