no message
parent
4bfc48abe0
commit
75d5824fb5
|
|
@ -30,8 +30,8 @@ import java.util.List;
|
||||||
**/
|
**/
|
||||||
public interface PickRepository extends JpaRepository<Pick, Long>, JpaSpecificationExecutor<Pick> {
|
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 ")
|
@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);
|
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 ")
|
@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);
|
Pick findByPick(String gdNo, String completeCode, String station);
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ public interface PickService {
|
||||||
* @param id ID
|
* @param id ID
|
||||||
* @return PickDto
|
* @return PickDto
|
||||||
*/
|
*/
|
||||||
PickDto findById(Long id);
|
Pick findById(Long id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建
|
* 创建
|
||||||
|
|
@ -102,8 +102,9 @@ public interface PickService {
|
||||||
* 根据状态查询、是否叫料出库单
|
* 根据状态查询、是否叫料出库单
|
||||||
* @param statuses 状态集合
|
* @param statuses 状态集合
|
||||||
* @param isCall 是否叫料
|
* @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("sequence", 3);//序号
|
||||||
missionDataMap3.put("position", agvTask.getEndSlotCode());//终点
|
missionDataMap3.put("position", agvTask.getEndSlotCode());//终点
|
||||||
missionDataMap3.put("type", "NODE_POINT");//
|
missionDataMap3.put("type", "NODE_POINT");//
|
||||||
missionDataMap3.put("actionType", "ROLLER_RECEIVE");//
|
missionDataMap3.put("actionType", "ROLLER_SEND");//
|
||||||
missionDataMap3.put("binCode", "");//容器
|
missionDataMap3.put("binCode", "");//容器
|
||||||
missionDataMap3.put("rollerLevel", 1);//
|
missionDataMap3.put("rollerLevel", 1);//
|
||||||
missionDataMap3.put("deviceCode", agvTask.getEndSlotCode());//终点
|
missionDataMap3.put("deviceCode", agvTask.getEndSlotCode());//终点
|
||||||
|
|
@ -482,7 +482,7 @@ public class KMReServiceImpl implements KMReService {
|
||||||
handleCpOffLine(endPoint, stock);//成品下线完成
|
handleCpOffLine(endPoint, stock);//成品下线完成
|
||||||
break;
|
break;
|
||||||
case BizStatus.Fx_Off_Line:
|
case BizStatus.Fx_Off_Line:
|
||||||
handleFxOffLine(agvTask);//返修下线完成
|
handleFxOffLine(agvTask);//返修
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -159,8 +159,10 @@ public class MesServiceImpl implements MesService {
|
||||||
moveCpOffLine(transTask);//送满货架
|
moveCpOffLine(transTask);//送满货架
|
||||||
break;
|
break;
|
||||||
case BizStatus.Fx_Off_Line:
|
case BizStatus.Fx_Off_Line:
|
||||||
moveFxOffLine(transTask);//滚筒
|
moveFxOffLine(transTask);//返修呼叫空托盘、返修下线
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
throw new BadRequestException("任务类型错误!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -338,22 +340,34 @@ public class MesServiceImpl implements MesService {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void moveFxOffLine(TransTask transTask) {
|
private void moveFxOffLine(TransTask transTask) {
|
||||||
if (!gtLineMap.containsKey(transTask.getPointCode())) {
|
//返修上线起点
|
||||||
throw new BadRequestException(transTask.getPointCode() + "点位不是下线点,请核实!");
|
String srcPointCode = transTask.getPointCode();
|
||||||
|
//终点
|
||||||
|
String dstPointCode;
|
||||||
|
//验证点位是否为上线点
|
||||||
|
if (gtLineMap.isOnlinePoint(srcPointCode)) {
|
||||||
|
if ("BYDGT002".equals(srcPointCode)) {
|
||||||
|
dstPointCode = "BYDGT006";
|
||||||
|
} else {
|
||||||
|
dstPointCode = gtLineMap.getKeyByValue(srcPointCode);
|
||||||
}
|
}
|
||||||
List<String> points = gtLineMap.getData(transTask.getPointCode());
|
} else if (gtLineMap.isOfflinePoint(srcPointCode)) {
|
||||||
|
dstPointCode = gtLineMap.getValueByKey(srcPointCode);
|
||||||
|
} else {
|
||||||
|
throw new BadRequestException(srcPointCode + "点位不存在,请核实");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 验证终点是否有任务
|
// 验证终点是否有任务
|
||||||
if (!agvTaskService.findByEndSlotCode(points.get(1), BizStatus.Fx_Off_Line, "ROLLER_MOVE")) {
|
if (!agvTaskService.findByEndSlotCode(dstPointCode, BizStatus.Fx_Off_Line, "ROLLER_MOVE")) {
|
||||||
// 直接在条件判断为false时抛出异常,表示该点位有任务
|
throw new BadRequestException(dstPointCode + "点位有任务,请稍后再试!");
|
||||||
throw new BadRequestException(points.get(1) + "点位有任务,请稍后再试!");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 生成任务
|
// 生成任务
|
||||||
AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Fx_Off_Line, null, transTask.getPointCode(), points.get(1), "ROLLER_MOVE");
|
AgvTask agvTask = agvTaskService.createAgvTask(BizStatus.Fx_Off_Line, null, srcPointCode, dstPointCode, "ROLLER_MOVE");
|
||||||
agvTaskService.update(agvTask);
|
|
||||||
|
|
||||||
// 下发任务
|
// 下发任务
|
||||||
kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskGtJson(agvTask));
|
kmReService.sendAgvTask(agvTask, kmReService.sendAgvTaskGtJson(agvTask));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -71,10 +71,8 @@ public class PickServiceImpl implements PickService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public PickDto findById(Long id) {
|
public Pick findById(Long id) {
|
||||||
Pick pick = pickRepository.findById(id).orElseGet(Pick::new);
|
return pickRepository.findById(id).orElseGet(Pick::new);
|
||||||
ValidationUtil.isNull(pick.getId(), "Pick", "id", id);
|
|
||||||
return pickMapper.toDto(pick);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -123,8 +121,8 @@ public class PickServiceImpl implements PickService {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Pick> findByPickStatus(List<String> statuses, boolean isCall) {
|
public List<Pick> findByPickStatus(List<String> statuses, boolean isCall,String orderType) {
|
||||||
return pickRepository.findByPickStatus(statuses, isCall);
|
return pickRepository.findByPickStatus(statuses, isCall, orderType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -190,15 +190,19 @@ public class TaskServiceImpl implements TaskService {
|
||||||
for (PickDetail pickDetail : pickDetails) {
|
for (PickDetail pickDetail : pickDetails) {
|
||||||
msgList.add(this.allocate(pickDetail.getId(), pickDetail.getOrderQty(), endPoint));
|
msgList.add(this.allocate(pickDetail.getId(), pickDetail.getOrderQty(), endPoint));
|
||||||
}
|
}
|
||||||
//绑定点位
|
|
||||||
pick.setPoint(endPoint);
|
|
||||||
pickService.update(pick);
|
|
||||||
|
|
||||||
/* 更新出库单状态*/
|
/* 更新出库单状态*/
|
||||||
pickService.refreshPickStatus(pick);
|
pickService.refreshPickStatus(pick);
|
||||||
|
|
||||||
|
if (BizStatus.ALLOCATE.equals(pick.getStatus()) || BizStatus.ASSIGN.equals(pick.getStatus())) {
|
||||||
|
//绑定点位
|
||||||
|
pick.setPoint(endPoint);
|
||||||
|
pickService.update(pick);
|
||||||
|
|
||||||
//占用点位
|
//占用点位
|
||||||
pointService.usedPoint(endPoint);
|
pointService.usedPoint(endPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//保存日志
|
//保存日志
|
||||||
logService.saveLogInfo(pick.getCode(), pick.getCode(), "/pick/allocatePick", msgList.toString(), "出库单分配", 200, "info");
|
logService.saveLogInfo(pick.getCode(), pick.getCode(), "/pick/allocatePick", msgList.toString(), "出库单分配", 200, "info");
|
||||||
|
|
@ -265,7 +269,6 @@ public class TaskServiceImpl implements TaskService {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//创建任务
|
//创建任务
|
||||||
agvTaskService.createAgvTask(BizStatus.CALL_RETURN, stock, srcPoint.getCode(), endPoint.getCode(), "RACK_MOVE");
|
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.KMReService;
|
||||||
import com.youchain.businessdata.service.PickService;
|
import com.youchain.businessdata.service.PickService;
|
||||||
import com.youchain.businessdata.service.TaskService;
|
import com.youchain.businessdata.service.TaskService;
|
||||||
|
import com.youchain.businessdata.service.dto.PickDto;
|
||||||
import com.youchain.exception.BadRequestException;
|
import com.youchain.exception.BadRequestException;
|
||||||
import com.youchain.utils.*;
|
import com.youchain.utils.*;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
@ -37,13 +38,29 @@ public class pickTask {
|
||||||
public KMReService kmReService;
|
public KMReService kmReService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 轮询打开和分配中的出库单,分配库存
|
* 轮询打开和分配中的成品出库单,分配库存
|
||||||
*/
|
*/
|
||||||
public void allocatePick() {
|
public void allocateCpPick() {
|
||||||
List<String> statuses = Arrays.asList(BizStatus.OPEN, BizStatus.ASSIGN);
|
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()) {
|
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) {
|
for (Pick pick : pickList) {
|
||||||
taskService.allocatePick(pick);
|
taskService.allocatePick(pick);
|
||||||
|
|
@ -54,12 +71,11 @@ public class pickTask {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 轮询已分配的出库单,生成备料任务
|
* 轮询已分配的出库单,生成备料任务
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public void pickAgvTask() {
|
public void pickAgvTask() {
|
||||||
/*查询分配完成的出库单*/
|
/*查询分配完成的出库单*/
|
||||||
List<String> statuses = Arrays.asList(BizStatus.ALLOCATE);
|
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()) {
|
if (pickList.isEmpty()) {
|
||||||
throw new BadRequestException("无已分配的出库单,下发任务失败!");
|
throw new BadRequestException("无已分配的出库单,下发任务失败!");
|
||||||
}
|
}
|
||||||
|
|
@ -75,7 +91,7 @@ public class pickTask {
|
||||||
public void callJlTask() {
|
public void callJlTask() {
|
||||||
/*查询拣货完成完成的出库单*/
|
/*查询拣货完成完成的出库单*/
|
||||||
List<String> statuses = Arrays.asList(BizStatus.PICK_ALL);
|
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()) {
|
if (pickList.isEmpty()) {
|
||||||
throw new BadRequestException("无拣货完成的出库单或出库单未叫料,叫料失败!");
|
throw new BadRequestException("无拣货完成的出库单或出库单未叫料,叫料失败!");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -144,7 +144,6 @@ public interface BizStatus {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 任务类型-叫料反空
|
* 任务类型-叫料反空
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
String CALL_RETURN = "CALL_RETURN";
|
String CALL_RETURN = "CALL_RETURN";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,35 +2,84 @@ package com.youchain.utils;
|
||||||
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 滚筒任务路线
|
* 滚筒任务路线
|
||||||
* 下线点 BYDGTO06、BYDGT007、BVDGTO01、BXDGT003、BYDGT005
|
* 下线:下线点 BYDGTO06、BYDGT007、BVDGTO01、BXDGT003、BYDGT005
|
||||||
* 上线点 BYDGTO02、BYDGTO04、BYDGTO08
|
* 上线:上线点 BYDGTO02、BYDGTO04、BYDGTO08
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class GtLineMap {
|
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 {
|
static {
|
||||||
dataMap = new ConcurrentHashMap<>();
|
dataMap = new ConcurrentHashMap<>();
|
||||||
// 初始化Map
|
// 初始化Map
|
||||||
dataMap.put("BYDGT006", Arrays.asList("FX001", "BYDGT002"));
|
dataMap.put("BYDGT006", "BYDGT002");
|
||||||
dataMap.put("BYDGT007", Arrays.asList("FX001", "BYDGT002"));
|
dataMap.put("BYDGT007", "BYDGT002");
|
||||||
dataMap.put("BYDGT001", Arrays.asList("FX001", "BYDGT002"));
|
dataMap.put("BYDGT001", "BYDGT002");
|
||||||
dataMap.put("BYDGT003", Arrays.asList("FX001", "BYDGT004"));
|
dataMap.put("BYDGT003", "BYDGT004");
|
||||||
dataMap.put("BYDGT005", Arrays.asList("FX001", "BYDGT008"));
|
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);
|
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