Commit a4eca56d 孙克

获取料仓下一个出库任务逻辑整理修改

1 个父辈 b0a3ac6e
......@@ -102,11 +102,11 @@ public class TaskService {
*/
public static Map<String, String> exportMap = Maps.newConcurrentMap();
// public TaskService(List<ITaskListener> listenerList){
// for (ITaskListener taskListener: listenerList) {
// taskListenerList.add(taskListener);
// }
// }
/**
* 某个料仓上一盘任务的所属工单
*/
private static Map<String,String> sourceIdMap = Maps.newConcurrentMap();
/**
* 条码入库,加入要执行的任务
......@@ -552,7 +552,7 @@ public class TaskService {
if (outTask != null) {
log.info(outTask.getSourceName()+"barcode为:"+outTask.getBarcode()+"面别为:"+outTask.getSide());
log.info(outTask.getSourceName()+" barcode为:"+outTask.getBarcode()+"面别为:"+outTask.getSide());
if(StringUtils.isNotBlank(outTask.getSide())) {
exportMap.put(cid, outTask.getExport());
......@@ -613,6 +613,137 @@ public class TaskService {
}
/**
* 获取料仓的下一个出库任务(与上一个工单号不同,先找大盘,再找小盘)
* @param cid
* @return
*/
public DataLog getNextTaskInStorage(String cid){
DataLog needOutTask = null;
String sourceId = sourceIdMap.get(cid);
List<String> taskSourceIds = getTaskSourceIds(cid);
int startSourceIdIndex = 0;
if(sourceId != null && taskSourceIds.contains(sourceId)){
startSourceIdIndex = taskSourceIds.indexOf(sourceId) + 1;
//如果要优先出最早的工单,去掉这里的注释
//if(startSourceIdIndex > 1){
// startSourceIdIndex = 0;
//}
}
for (int i = startSourceIdIndex; i < taskSourceIds.size(); i++) {
String needOutSourceId = taskSourceIds.get(i);
needOutTask = findBigReelTask(cid,needOutSourceId);
if(needOutTask == null){
needOutTask = findSmallReelTask(cid,needOutSourceId);
}
if(needOutTask != null){
sourceIdMap.put(cid, needOutSourceId);
log.info("当前料仓所有工单为: " + String.join(",",taskSourceIds) + ", 上一盘工单ID为:" + sourceId +" 找到出库物料["+needOutTask.getBarcode()+"]工单["+needOutTask.getSourceName()+"]ID为:" + needOutSourceId);
return needOutTask;
}
}
if(needOutTask == null){
//如果没找到, 从第一个工单重新找
for (String needOutSourceId : taskSourceIds) {
needOutTask = findBigReelTask(cid,needOutSourceId);
if(needOutTask == null){
needOutTask = findSmallReelTask(cid,needOutSourceId);
}
if(needOutTask != null){
sourceIdMap.put(cid, needOutSourceId);
log.info("当前料仓所有工单为: " + String.join(",",taskSourceIds) + ", 上一盘工单ID为:" + sourceId +" 第二轮找到出库物料["+needOutTask.getBarcode()+"]工单["+needOutTask.getSourceName()+"]ID为:" + needOutSourceId);
return needOutTask;
}
}
}
return needOutTask;
}
/**
* 获取料仓指定工单的大盘任务
* @param cid
* @param sourceId
* @return
*/
private DataLog findBigReelTask(String cid, String sourceId){
List<DataLog> allTasks = getAllTasks();
for (DataLog task : allTasks) {
if (cid.equals(task.getCid()) && task.isCheckOutTask() && task.isWait()) {
if(task.getPlateSize() > 7){
String taskSourceId = task.getSourceId();
if(taskSourceId == null){
taskSourceId = "";
}
if(taskSourceId.equals(sourceId)){
return task;
}
}
}
}
return null;
}
/**
* 获取料仓的所有未执行任务的工单ID(按时间排序)
* @param cid
* @return
*/
private List<String> getTaskSourceIds(String cid){
List<DataLog> allTasks = getAllTasks();
allTasks.sort(new Comparator<DataLog>() {
@Override
public int compare(DataLog o1, DataLog o2) {
return o1.getCreateDate().compareTo(o2.getCreateDate());
}
});
List<String> sourceIds = new ArrayList<>();
for (DataLog task : allTasks) {
if (cid.equals(task.getCid()) && task.isCheckOutTask() && task.isWait()) {
String sourceId = task.getSourceId();
if(!Strings.isNullOrEmpty(sourceId) && !sourceIds.contains(sourceId)){
sourceIds.add(sourceId);
}
}
}
return sourceIds;
}
/**
* 查找料仓指定工单的小盘任务(如果其他料仓有大料盘未出,优先出)
* @param cid
* @param sourceId
* @return
*/
private DataLog findSmallReelTask(String cid, String sourceId){
List<DataLog> allTasks = getAllTasks();
boolean otherStorageHasBigReel = otherStorageHasBigReel(allTasks, sourceId);
String limitSide = "";
if(otherStorageHasBigReel){
//其他仓有大料盘未出,限制T面出库(即出B面的小盘)
limitSide = "T";
}
for (DataLog task : allTasks) {
if (cid.equals(task.getCid()) && task.isCheckOutTask() && task.isWait()) {
if(task.getPlateSize() <= 7){
String taskSourceId = task.getSourceId();
if(taskSourceId == null){
taskSourceId = "";
}
String side = task.getSide();
if(side == null){
side = "";
}
if(taskSourceId.equals(sourceId) && !limitSide.equals(side)){
return task;
}
}
}
}
return null;
}
public DataLog getNeedOutTask(Collection<DataLog> allTasks, String exportStr, String cid, boolean hasExport) {
DataLog outTask = null;
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!