no message
parent
09224ef6ef
commit
48efc8430a
|
|
@ -434,11 +434,11 @@ public class BydAppServiceImpl implements BydAppService {
|
||||||
throw new BadRequestException(dstStockCode + "目标托盘没有在" + areaName);
|
throw new BadRequestException(dstStockCode + "目标托盘没有在" + areaName);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BizStatus.XJ.equals(task.getItemKey().getItem().getGoodType())) {
|
/* if (BizStatus.XJ.equals(task.getItemKey().getItem().getGoodType())) {
|
||||||
if (!dstStockCode.equals(pick.getStock())) {
|
if (!dstStockCode.equals(pick.getStock())) {
|
||||||
throw new BadRequestException(pick.getGdCode() + "工单只能放入同一个货架! 请放入" + pick.getCode() + "货架!");
|
throw new BadRequestException(pick.getGdCode() + "工单只能放入同一个货架! 请放入" + pick.getCode() + "货架!");
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
return dstStock;
|
return dstStock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -128,6 +128,16 @@ public interface AgvTaskService {
|
||||||
*/
|
*/
|
||||||
Boolean findByEndSlotCode(String endSlotCode, String type, String jobType);
|
Boolean findByEndSlotCode(String endSlotCode, String type, String jobType);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据终点查询是否有重复任务
|
||||||
|
*
|
||||||
|
* @param endSlotCode 点位
|
||||||
|
* @param type 任务类型
|
||||||
|
* @param jobType 作业类型
|
||||||
|
*/
|
||||||
|
Boolean isByFxEndSlotCode(String endSlotCode, String type, String jobType);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 叉车任务一个一个下发
|
* 叉车任务一个一个下发
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -166,6 +166,18 @@ public class AgvTaskServiceImpl implements AgvTaskService {
|
||||||
return agvTaskList.isEmpty();
|
return agvTaskList.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean isByFxEndSlotCode(String endSlotCode, String type, String jobType) {
|
||||||
|
String hql = "select COUNT(agv.id) from AgvTask agv " +
|
||||||
|
" where agv.endSlotCode='" + endSlotCode + "' " +
|
||||||
|
" and agv.type='" + type + "' " +
|
||||||
|
" and agv.jobType='" + jobType + "' " +
|
||||||
|
" and agv.status not in ('OPEN','FINISH','CANCEL') ";
|
||||||
|
Query query = entityMapper.createQuery(hql);
|
||||||
|
Long count = (Long) query.getSingleResult();
|
||||||
|
return count<2;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean findByCcEndSlotCode(String endSlotCode, String type, String jobType) {
|
public Boolean findByCcEndSlotCode(String endSlotCode, String type, String jobType) {
|
||||||
String hql = " from AgvTask agv " +
|
String hql = " from AgvTask agv " +
|
||||||
|
|
|
||||||
|
|
@ -773,24 +773,29 @@ public class KMReServiceImpl implements KMReService {
|
||||||
*/
|
*/
|
||||||
private void handleJl(Stock stock, Point endPoint, AgvTask agvTask) {
|
private void handleJl(Stock stock, Point endPoint, AgvTask agvTask) {
|
||||||
|
|
||||||
|
// 查询与当前 AGV 任务关联的任务列表
|
||||||
List<Task> taskList = taskService.findTaskByCallAgvTask(agvTask.getId());
|
List<Task> taskList = taskService.findTaskByCallAgvTask(agvTask.getId());
|
||||||
|
|
||||||
|
// 根据任务中的物料类型,确定对应的区域名称列表
|
||||||
List<String> areaNames = taskList.stream()
|
List<String> areaNames = taskList.stream()
|
||||||
.map(task -> task.getItemKey().getItem())
|
.map(task -> {
|
||||||
.map(item -> BizStatus.XJ.equals(item.getGoodType()) ? AreaNameDic.XJFBCQ : AreaNameDic.DJFBCQ)
|
Item item = task.getItemKey().getItem();
|
||||||
|
return BizStatus.XJ.equals(item.getGoodType()) ? AreaNameDic.XJFBCQ : AreaNameDic.DJFBCQ;
|
||||||
|
})
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
List<Inventory> allInventories = new ArrayList<>();
|
|
||||||
for (String areaName : areaNames) {
|
// 查询所有区域的库存列表
|
||||||
List<Inventory> inventoryList = inventoryRepository.queryInventory(stock.getId(), null, null, areaName, stock.getDept().getId());
|
List<Inventory> allInventories = areaNames.stream()
|
||||||
allInventories.addAll(inventoryList);
|
.flatMap(areaName -> inventoryRepository.queryInventory(stock.getId(), null, null, areaName, stock.getDept().getId()).stream())
|
||||||
}
|
.collect(Collectors.toList());
|
||||||
// 删除所有查询到的库存
|
|
||||||
|
// 如果库存列表不为空,删除所有库存记录
|
||||||
if (!allInventories.isEmpty()) {
|
if (!allInventories.isEmpty()) {
|
||||||
inventoryRepository.deleteAll(allInventories);
|
inventoryRepository.deleteAll(allInventories);
|
||||||
}
|
}
|
||||||
for (Task task : taskList) {
|
|
||||||
//回传MES
|
// 回传 MES
|
||||||
pickService.returnPickByTask(task);
|
taskList.forEach(pickService::returnPickByTask);
|
||||||
}
|
|
||||||
|
|
||||||
//点位占用
|
//点位占用
|
||||||
pointService.usedPoint(endPoint);
|
pointService.usedPoint(endPoint);
|
||||||
|
|
@ -798,26 +803,43 @@ public class KMReServiceImpl implements KMReService {
|
||||||
//容器占用
|
//容器占用
|
||||||
stockService.usedStock(stock, endPoint, BaseStatus.USED);
|
stockService.usedStock(stock, endPoint, BaseStatus.USED);
|
||||||
|
|
||||||
|
// 根据叫料单号查找 Pick 对象
|
||||||
Pick pick = pickService.findByPickCode(agvTask.getLineSlotCode());
|
Pick pick = pickService.findByPickCode(agvTask.getLineSlotCode());
|
||||||
|
|
||||||
|
// 刷新 Pick 对象的状态
|
||||||
pickService.refreshPickStatus(pick);
|
pickService.refreshPickStatus(pick);
|
||||||
|
|
||||||
//清空叫料点,等待下一次叫料
|
//清空叫料点,等待下一次叫料
|
||||||
|
updateCallPoint(pick, endPoint);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新 Pick 对象的叫料点信息
|
||||||
|
*
|
||||||
|
* @param pick Pick 对象
|
||||||
|
* @param endPoint 结束点位
|
||||||
|
*/
|
||||||
|
private void updateCallPoint(Pick pick, Point endPoint) {
|
||||||
|
// 将叫料点字符串拆分为集合
|
||||||
Set<String> endPointList = new HashSet<>(Arrays.asList(pick.getCallPoint().split(",")));
|
Set<String> endPointList = new HashSet<>(Arrays.asList(pick.getCallPoint().split(",")));
|
||||||
|
// 移除结束点位的代码
|
||||||
boolean isRemoved = endPointList.remove(endPoint.getCode());
|
boolean isRemoved = endPointList.remove(endPoint.getCode());
|
||||||
if (isRemoved) {
|
if (isRemoved) {
|
||||||
String result = endPointList.stream().collect(Collectors.joining(", "));
|
// 将剩余的叫料点代码用逗号连接成字符串
|
||||||
|
String result = endPointList.stream().collect(Collectors.joining(","));
|
||||||
if (!result.isEmpty()) {
|
if (!result.isEmpty()) {
|
||||||
|
// 更新叫料点信息,设置为还有叫料
|
||||||
pick.setCallPoint(result);
|
pick.setCallPoint(result);
|
||||||
pick.setIsCall(true);
|
pick.setIsCall(true);
|
||||||
pickService.update(pick);
|
|
||||||
} else {
|
} else {
|
||||||
|
// 清空叫料点信息,设置为无叫料
|
||||||
pick.setCallPoint(null);
|
pick.setCallPoint(null);
|
||||||
pick.setIsCall(false);
|
pick.setIsCall(false);
|
||||||
pickService.update(pick);
|
|
||||||
}
|
}
|
||||||
|
// 更新 Pick 对象
|
||||||
|
pickService.update(pick);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -360,10 +360,6 @@ public class MesServiceImpl implements MesService {
|
||||||
return srcPointCode + "点位不存在,请核实!";
|
return srcPointCode + "点位不存在,请核实!";
|
||||||
}
|
}
|
||||||
|
|
||||||
// 验证终点是否有任务
|
|
||||||
if (!agvTaskService.isEndPointAvailable(dstPointCode, BizStatus.Fx_Off_Line, "ROLLER_MOVE")) {
|
|
||||||
return dstPointCode + "点位有任务,请稍后再试!";
|
|
||||||
}
|
|
||||||
|
|
||||||
// 生成任务
|
// 生成任务
|
||||||
AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Fx_Off_Line, null, srcPointCode, dstPointCode, "ROLLER_MOVE");
|
AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Fx_Off_Line, null, srcPointCode, dstPointCode, "ROLLER_MOVE");
|
||||||
|
|
|
||||||
|
|
@ -279,6 +279,7 @@ public class TaskServiceImpl implements TaskService {
|
||||||
agvTask.setLineSlotCode(pick.getCode());
|
agvTask.setLineSlotCode(pick.getCode());
|
||||||
agvTaskService.update(agvTask);*/
|
agvTaskService.update(agvTask);*/
|
||||||
List<String> endPoints = getValuesFromMap(endPointList, pointMap);
|
List<String> endPoints = getValuesFromMap(endPointList, pointMap);
|
||||||
|
int taskCount = 0;
|
||||||
for (Task task : taskList) {
|
for (Task task : taskList) {
|
||||||
for (String endPointCode : endPoints) {
|
for (String endPointCode : endPoints) {
|
||||||
if (agvTaskService.isEndPointAvailable(endPointCode, BizStatus.CALL_PICK, "RACK_MOVE")) {
|
if (agvTaskService.isEndPointAvailable(endPointCode, BizStatus.CALL_PICK, "RACK_MOVE")) {
|
||||||
|
|
@ -288,9 +289,17 @@ public class TaskServiceImpl implements TaskService {
|
||||||
task.setCallAgvTaskId(agvTask.getId());
|
task.setCallAgvTaskId(agvTask.getId());
|
||||||
taskRepository.save(task);
|
taskRepository.save(task);
|
||||||
}
|
}
|
||||||
|
taskCount++;
|
||||||
|
if (taskCount >= taskList.size()) {
|
||||||
|
break; // 当处理的任务数量达到 taskList 的长度时,跳出内层循环
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (taskCount >= taskList.size()) {
|
||||||
|
break; // 当处理的任务数量达到 taskList 的长度时,跳出外层循环
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<String> getValuesFromMap(Set<String> endPointList, Map<String, Point> map) {
|
public static List<String> getValuesFromMap(Set<String> endPointList, Map<String, Point> map) {
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,11 @@ public class fxTask {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processAgvTask(AgvTask agvTask) {
|
private void processAgvTask(AgvTask agvTask) {
|
||||||
kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskGtJson(agvTask));
|
if(agvTaskService.isByFxEndSlotCode(agvTask.getEndSlotCode(), BizStatus.Fx_Off_Line,"ROLLER_MOVE")){
|
||||||
|
kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskGtJson(agvTask));
|
||||||
|
}else{
|
||||||
|
throw new BadRequestException("任务排队中");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ public class pickTask {
|
||||||
*/
|
*/
|
||||||
public void allocatePick() {
|
public void allocatePick() {
|
||||||
List<String> statuses = Arrays.asList(BizStatus.OPEN, BizStatus.ASSIGN, BizStatus.PICKUP);
|
List<String> statuses = Arrays.asList(BizStatus.OPEN, BizStatus.ASSIGN, BizStatus.PICKUP);
|
||||||
List<Pick> pickList = pickService.findByPickStatus(statuses, null);
|
List<Pick> pickList = pickService.findByPickStatus(statuses, true);
|
||||||
if (pickList.isEmpty()) {
|
if (pickList.isEmpty()) {
|
||||||
throw new BadRequestException("无待分配的成品出库单,分配失败!");
|
throw new BadRequestException("无待分配的成品出库单,分配失败!");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ public class EladminSystemApplicationTests {
|
||||||
// 创建一个 HashSet 实例
|
// 创建一个 HashSet 实例
|
||||||
Set<String> hashSet = new HashSet<>();
|
Set<String> hashSet = new HashSet<>();
|
||||||
// 向集合中添加元素
|
// 向集合中添加元素
|
||||||
hashSet.add("QXJL001");
|
hashSet.add("QXJL002");
|
||||||
hashSet.add("QXJL002");
|
hashSet.add("QXJL002");
|
||||||
|
|
||||||
// 打印原始集合
|
// 打印原始集合
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue