no message
parent
4bfc48abe0
commit
75d5824fb5
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
/**
|
||||
* 刷新出库单拣货状态
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
||||
|
|
|
|||
|
|
@ -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("无拣货完成的出库单或出库单未叫料,叫料失败!");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -144,7 +144,6 @@ public interface BizStatus {
|
|||
|
||||
/**
|
||||
* 任务类型-叫料反空
|
||||
*
|
||||
*/
|
||||
String CALL_RETURN = "CALL_RETURN";
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
/**
|
||||
* 滚筒任务路线
|
||||
* 下线点 BYDGTO06、BYDGT007、BVDGTO01、BXDGT003、BYDGT005
|
||||
* 上线点 BYDGTO02、BYDGTO04、BYDGTO08
|
||||
* 下线:下线点 BYDGTO06、BYDGT007、BVDGTO01、BXDGT003、BYDGT005
|
||||
* 上线:上线点 BYDGTO02、BYDGTO04、BYDGTO08
|
||||
*/
|
||||
@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) {
|
||||
/**
|
||||
* 通过key获取value
|
||||
*/
|
||||
public String getValueByKey(String key) {
|
||||
return dataMap.get(key);
|
||||
}
|
||||
|
||||
public boolean containsKey(String key) {
|
||||
return dataMap.containsKey(key);
|
||||
/**
|
||||
* 通过value获取key
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue