no message

main
HUOJIN\92525 2024-12-11 13:24:04 +08:00
parent 4bfc48abe0
commit 75d5824fb5
9 changed files with 136 additions and 56 deletions

View File

@ -30,8 +30,8 @@ import java.util.List;
**/
public interface PickRepository extends JpaRepository<Pick, Long>, JpaSpecificationExecutor<Pick> {
@Query(value = " FROM Pick p WHERE p.status in :status and p.isCall=:isCall order by p.createTime,p.lineNo ")
List<Pick> findByPickStatus(List<String> status,Boolean isCall);
@Query(value = " FROM Pick p WHERE p.status in :status and p.isCall=:isCall and (:orderType is null or p.orderType = :orderType) order by p.createTime,p.lineNo ")
List<Pick> findByPickStatus(List<String> status,Boolean isCall,String orderType);
@Query(value = " FROM Pick p WHERE p.gdCode=:gdNo and p.cpCodeOrDpCode=:completeCode and p.station=:station ")
Pick findByPick(String gdNo, String completeCode, String station);

View File

@ -59,7 +59,7 @@ public interface PickService {
* @param id ID
* @return PickDto
*/
PickDto findById(Long id);
Pick findById(Long id);
/**
*
@ -102,8 +102,9 @@ public interface PickService {
*
* @param statuses
* @param isCall
* @param orderType
*/
List<Pick> findByPickStatus(List<String> statuses, boolean isCall);
List<Pick> findByPickStatus(List<String> statuses, boolean isCall,String orderType);
/**
*

View File

@ -306,7 +306,7 @@ public class KMReServiceImpl implements KMReService {
missionDataMap3.put("sequence", 3);//序号
missionDataMap3.put("position", agvTask.getEndSlotCode());//终点
missionDataMap3.put("type", "NODE_POINT");//
missionDataMap3.put("actionType", "ROLLER_RECEIVE");//
missionDataMap3.put("actionType", "ROLLER_SEND");//
missionDataMap3.put("binCode", "");//容器
missionDataMap3.put("rollerLevel", 1);//
missionDataMap3.put("deviceCode", agvTask.getEndSlotCode());//终点
@ -482,7 +482,7 @@ public class KMReServiceImpl implements KMReService {
handleCpOffLine(endPoint, stock);//成品下线完成
break;
case BizStatus.Fx_Off_Line:
handleFxOffLine(agvTask);//返修下线完成
handleFxOffLine(agvTask);//返修
break;
}

View File

@ -159,8 +159,10 @@ public class MesServiceImpl implements MesService {
moveCpOffLine(transTask);//送满货架
break;
case BizStatus.Fx_Off_Line:
moveFxOffLine(transTask);//滚筒
moveFxOffLine(transTask);//返修呼叫空托盘、返修下线
break;
default:
throw new BadRequestException("任务类型错误!");
}
}
@ -338,22 +340,34 @@ public class MesServiceImpl implements MesService {
}
private void moveFxOffLine(TransTask transTask) {
if (!gtLineMap.containsKey(transTask.getPointCode())) {
throw new BadRequestException(transTask.getPointCode() + "点位不是下线点,请核实!");
}
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) + "点位有任务,请稍后再试!");
//返修上线起点
String srcPointCode = transTask.getPointCode();
//终点
String dstPointCode;
//验证点位是否为上线点
if (gtLineMap.isOnlinePoint(srcPointCode)) {
if ("BYDGT002".equals(srcPointCode)) {
dstPointCode = "BYDGT006";
} else {
dstPointCode = gtLineMap.getKeyByValue(srcPointCode);
}
} else if (gtLineMap.isOfflinePoint(srcPointCode)) {
dstPointCode = gtLineMap.getValueByKey(srcPointCode);
} else {
throw new BadRequestException(srcPointCode + "点位不存在,请核实");
}
//生成任务
AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Fx_Off_Line, null, transTask.getPointCode(), points.get(1), "ROLLER_MOVE");
agvTaskService.update(agvTask);
//下发任务
// 验证终点是否有任务
if (!agvTaskService.findByEndSlotCode(dstPointCode, BizStatus.Fx_Off_Line, "ROLLER_MOVE")) {
throw new BadRequestException(dstPointCode + "点位有任务,请稍后再试!");
}
// 生成任务
AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Fx_Off_Line, null, srcPointCode, dstPointCode, "ROLLER_MOVE");
// 下发任务
kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskGtJson(agvTask));
}
}

View File

@ -71,10 +71,8 @@ public class PickServiceImpl implements PickService {
@Override
@Transactional
public PickDto findById(Long id) {
Pick pick = pickRepository.findById(id).orElseGet(Pick::new);
ValidationUtil.isNull(pick.getId(), "Pick", "id", id);
return pickMapper.toDto(pick);
public Pick findById(Long id) {
return pickRepository.findById(id).orElseGet(Pick::new);
}
@Override
@ -123,8 +121,8 @@ public class PickServiceImpl implements PickService {
}
@Override
public List<Pick> findByPickStatus(List<String> statuses, boolean isCall) {
return pickRepository.findByPickStatus(statuses, isCall);
public List<Pick> findByPickStatus(List<String> statuses, boolean isCall,String orderType) {
return pickRepository.findByPickStatus(statuses, isCall, orderType);
}

View File

@ -190,15 +190,19 @@ public class TaskServiceImpl implements TaskService {
for (PickDetail pickDetail : pickDetails) {
msgList.add(this.allocate(pickDetail.getId(), pickDetail.getOrderQty(), endPoint));
}
//绑定点位
pick.setPoint(endPoint);
pickService.update(pick);
/* 更新出库单状态*/
pickService.refreshPickStatus(pick);
//占用点位
pointService.usedPoint(endPoint);
if (BizStatus.ALLOCATE.equals(pick.getStatus()) || BizStatus.ASSIGN.equals(pick.getStatus())) {
//绑定点位
pick.setPoint(endPoint);
pickService.update(pick);
//占用点位
pointService.usedPoint(endPoint);
}
//保存日志
logService.saveLogInfo(pick.getCode(), pick.getCode(), "/pick/allocatePick", msgList.toString(), "出库单分配", 200, "info");
@ -211,7 +215,7 @@ public class TaskServiceImpl implements TaskService {
List<Task> taskList = this.findByPickNotAllTask(pick.getId());
for (Task task : taskList) {
/*生成搬运任务*/
List<AgvTask> agvTaskList = agvTaskService.findRepeat(task.getSrcStockCode(),task.getSrcPointCode(),task.getDstPointCode());
List<AgvTask> agvTaskList = agvTaskService.findRepeat(task.getSrcStockCode(), task.getSrcPointCode(), task.getDstPointCode());
if (agvTaskList.isEmpty()) {
//创建任务
agvTask = agvTaskService.createAgvTask(BizStatus.PICK, task.getSrcStock(), task.getSrcPoint().getCode(), task.getDstPoint().getCode(), "FORKLIFT_MOVE");
@ -259,13 +263,12 @@ public class TaskServiceImpl implements TaskService {
Point endPoint = pointList.get(0);
//有任务则直接返回
List<AgvTask> agvTaskList = agvTaskService.findRepeat(stock.getCode(),srcPoint.getCode(),endPoint.getCode());
List<AgvTask> agvTaskList = agvTaskService.findRepeat(stock.getCode(), srcPoint.getCode(), endPoint.getCode());
if (!agvTaskList.isEmpty()) {
return;
}
//创建任务
agvTaskService.createAgvTask(BizStatus.CALL_RETURN, stock, srcPoint.getCode(), endPoint.getCode(), "RACK_MOVE");

View File

@ -7,6 +7,7 @@ import com.youchain.businessdata.service.AgvTaskService;
import com.youchain.businessdata.service.KMReService;
import com.youchain.businessdata.service.PickService;
import com.youchain.businessdata.service.TaskService;
import com.youchain.businessdata.service.dto.PickDto;
import com.youchain.exception.BadRequestException;
import com.youchain.utils.*;
import lombok.extern.slf4j.Slf4j;
@ -37,13 +38,29 @@ public class pickTask {
public KMReService kmReService;
/**
*
*
*/
public void allocatePick() {
public void allocateCpPick() {
List<String> statuses = Arrays.asList(BizStatus.OPEN, BizStatus.ASSIGN);
List<Pick> pickList = pickService.findByPickStatus(statuses, false);
List<Pick> pickList = pickService.findByPickStatus(statuses, false,BaseStatus.GD_TYPE_CT);
if (pickList.isEmpty()) {
throw new BadRequestException("无待分配的出库单,分配失败!");
throw new BadRequestException("无待分配的成品出库单,分配失败!");
}
for (Pick pick : pickList) {
taskService.allocatePick(pick);
}
}
/***
*
*/
public void allocateDpPick() {
List<String> statuses = Arrays.asList(BizStatus.OPEN, BizStatus.ASSIGN);
List<Pick> pickList = pickService.findByPickStatus(statuses, false, BaseStatus.GD_TYPE_DP);
if (pickList.isEmpty()) {
throw new BadRequestException("无待分配的单品出库单,分配失败!");
}
for (Pick pick : pickList) {
taskService.allocatePick(pick);
@ -54,12 +71,11 @@ public class pickTask {
/**
*
*
*/
public void pickAgvTask() {
/*查询分配完成的出库单*/
List<String> statuses = Arrays.asList(BizStatus.ALLOCATE);
List<Pick> pickList = pickService.findByPickStatus(statuses, false);
List<Pick> pickList = pickService.findByPickStatus(statuses, false,null);
if (pickList.isEmpty()) {
throw new BadRequestException("无已分配的出库单,下发任务失败!");
}
@ -75,7 +91,7 @@ public class pickTask {
public void callJlTask() {
/*查询拣货完成完成的出库单*/
List<String> statuses = Arrays.asList(BizStatus.PICK_ALL);
List<Pick> pickList = pickService.findByPickStatus(statuses, true);
List<Pick> pickList = pickService.findByPickStatus(statuses, true,null);
if (pickList.isEmpty()) {
throw new BadRequestException("无拣货完成的出库单或出库单未叫料,叫料失败!");
}

View File

@ -144,7 +144,6 @@ public interface BizStatus {
/**
* -
*
*/
String CALL_RETURN = "CALL_RETURN";

View File

@ -2,35 +2,84 @@ package com.youchain.utils;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/**
* 线
* 线BYDGTO06BYDGT007BVDGTO01BXDGT003BYDGT005
* 线BYDGTO02BYDGTO04BYDGTO08
* 线线BYDGTO06BYDGT007BVDGTO01BXDGT003BYDGT005
* 线线BYDGTO02BYDGTO04BYDGTO08
*/
@Component
public class GtLineMap {
public static final Map<String, List<String>> dataMap;
/**
*
*/
public static final Map<String, String> dataMap;
/**
* 线
*/
private static final Set<String> ONLINE_POINTS;
/**
* 线
*/
private static final Set<String> OFFLINE_POINTS;
static {
dataMap = new ConcurrentHashMap<>();
// 初始化Map
dataMap.put("BYDGT006", Arrays.asList("FX001", "BYDGT002"));
dataMap.put("BYDGT007", Arrays.asList("FX001", "BYDGT002"));
dataMap.put("BYDGT001", Arrays.asList("FX001", "BYDGT002"));
dataMap.put("BYDGT003", Arrays.asList("FX001", "BYDGT004"));
dataMap.put("BYDGT005", Arrays.asList("FX001", "BYDGT008"));
dataMap.put("BYDGT006", "BYDGT002");
dataMap.put("BYDGT007", "BYDGT002");
dataMap.put("BYDGT001", "BYDGT002");
dataMap.put("BYDGT003", "BYDGT004");
dataMap.put("BYDGT005", "BYDGT008");
// 初始化上线点
ONLINE_POINTS = new HashSet<>(Arrays.asList(
"BYDGT002", "BYDGT004", "BYDGT008"
));
// 初始化下线点
OFFLINE_POINTS = new HashSet<>(Arrays.asList(
"BYDGT001", "BYDGT003", "BYDGT005", "BYDGT006", "BYDGT007"
));
}
public List<String> getData(String key) {
/**
* keyvalue
*/
public String getValueByKey(String key) {
return dataMap.get(key);
}
public boolean containsKey(String key) {
return dataMap.containsKey(key);
/**
* valuekey
*/
public String getKeyByValue(String value) {
return dataMap.entrySet().stream()
.filter(entry -> value.equals(entry.getValue()))
.map(Map.Entry::getKey)
.findFirst()
.orElse(null);
}
/**
* 线
*/
public boolean isOnlinePoint(String point) {
return ONLINE_POINTS.contains(point);
}
/**
* 线
*/
public boolean isOfflinePoint(String point) {
return OFFLINE_POINTS.contains(point);
}
}