Commit 146bc1dc LN

1053:1.除reel外,同时只能出两种料架的料。2.工单上传修改。bug修改

1 个父辈 c8c51f1f
...@@ -46,7 +46,7 @@ public class MainTimer { ...@@ -46,7 +46,7 @@ public class MainTimer {
log.info("开始加载未完成的任务..."); log.info("开始加载未完成的任务...");
List<DataLog> unExecuteTasks = dataLogManager.findUnFinishedTasks(); List<DataLog> unExecuteTasks = dataLogManager.findUnFinishedTasks();
for (DataLog unExecuteTask : unExecuteTasks) { for (DataLog unExecuteTask : unExecuteTasks) {
if (unExecuteTask.isExecuting() || unExecuteTask.isWait()) { if (unExecuteTask.isExecuting() || unExecuteTask.isWait()||unExecuteTask.isOutBox()||unExecuteTask.isInLine()|| unExecuteTask.isInRobot()||unExecuteTask.isBoxdoor()) {
try { try {
taskService.addTaskToExecute(unExecuteTask); taskService.addTaskToExecute(unExecuteTask);
}catch (Exception e){ }catch (Exception e){
......
...@@ -274,6 +274,12 @@ public class StatusBean { ...@@ -274,6 +274,12 @@ public class StatusBean {
addPosInfo(barcode,posId,plateW,plateH,isSingleOut,0); addPosInfo(barcode,posId,plateW,plateH,isSingleOut,0);
} }
/** /**
* 获取客户端发送上来的条码信息
*/
public String getBarcode(){
return data.get("barcode");
}
/**
* 入库时添加仓位及料盘大小信息(posId库位编号,plateW:料盘宽度,plateH:料盘高度,singleOut:是否出库到料仓门口) * 入库时添加仓位及料盘大小信息(posId库位编号,plateW:料盘宽度,plateH:料盘高度,singleOut:是否出库到料仓门口)
*/ */
public void addPosInfo(String barcode, String posId, int plateW, int plateH, boolean isSingleOut,int usedCount){ public void addPosInfo(String barcode, String posId, int plateW, int plateH, boolean isSingleOut,int usedCount){
......
...@@ -97,6 +97,13 @@ public class RobotBoxHandler extends BaseDeviceHandler { ...@@ -97,6 +97,13 @@ public class RobotBoxHandler extends BaseDeviceHandler {
if (dataCache.getCache(Constants.CACHE_StopOut)) { if (dataCache.getCache(Constants.CACHE_StopOut)) {
return statusBean; return statusBean;
} }
//如果当前有barcode,暂时不发出库任务
String sBarcode=statusBean.getBarcode();
if (ObjectUtil.isNotEmpty(sBarcode)) {
return statusBean;
}
String cid = statusBean.getCid(); String cid = statusBean.getCid();
// 任务根据时间排序。查找当前正在出的工单和料架 (入库任务不计算) // 任务根据时间排序。查找当前正在出的工单和料架 (入库任务不计算)
List<DataLog> allTasks=taskService.getAllTasks(); List<DataLog> allTasks=taskService.getAllTasks();
...@@ -113,7 +120,10 @@ public class RobotBoxHandler extends BaseDeviceHandler { ...@@ -113,7 +120,10 @@ public class RobotBoxHandler extends BaseDeviceHandler {
continue; continue;
} }
String shelf= MicronDataCache.getShelfType(task); String shelf= MicronDataCache.getShelfType(task);
if(!shelfType.contains(shelf)){ if(shelfType.equals("S007")){
//reel料盘一直可以出库
}
else if(!shelfType.contains(shelf)) {
shelfType.add(shelf); shelfType.add(shelf);
} }
if(ObjectUtil.isNotEmpty(task.getSourceId())&&(!sourceIds.contains(task.getSourceId()))){ if(ObjectUtil.isNotEmpty(task.getSourceId())&&(!sourceIds.contains(task.getSourceId()))){
...@@ -155,11 +165,12 @@ public class RobotBoxHandler extends BaseDeviceHandler { ...@@ -155,11 +165,12 @@ public class RobotBoxHandler extends BaseDeviceHandler {
} }
//reel可以一直出,不需要判断
//如果料架>=2,当前任务的料架在已出料架中,可以直接出 //如果料架>=2,当前任务的料架在已出料架中,可以直接出
//如果料架<2,且当前任务属于已出工单,可以直接出 //如果料架<2,且当前任务属于已出工单,可以直接出
//循环查找,当前任务不满足时查找下一个任务 //循环查找,当前任务不满足时查找下一个任务
String shelf = MicronDataCache.getShelfType(queueTask); String shelf = MicronDataCache.getShelfType(queueTask);
if (shelfType.size() < 2 || shelfType.contains(shelf)) { if (shelfType.equals("S007")||shelfType.size() < 2 || shelfType.contains(shelf)) {
//料架正确,工单为空,返回 //料架正确,工单为空,返回
if (ObjectUtil.isEmpty(queueTask.getSourceId())) { if (ObjectUtil.isEmpty(queueTask.getSourceId())) {
outTask = queueTask; outTask = queueTask;
......
...@@ -82,6 +82,12 @@ public class ThirdBoxHandler extends BaseDeviceHandler{ ...@@ -82,6 +82,12 @@ public class ThirdBoxHandler extends BaseDeviceHandler{
if (dataCache.getCache(Constants.CACHE_StopOut)) { if (dataCache.getCache(Constants.CACHE_StopOut)) {
return statusBean; return statusBean;
} }
//如果当前有barcode,暂时不发出库任务
String sBarcode=statusBean.getBarcode();
if (ObjectUtil.isNotEmpty(sBarcode)) {
return statusBean;
}
String cid = statusBean.getCid(); String cid = statusBean.getCid();
// 任务根据时间排序。查找当前正在出的工单和料架 (入库任务不计算) // 任务根据时间排序。查找当前正在出的工单和料架 (入库任务不计算)
List<DataLog> allTasks=taskService.getAllTasks(); List<DataLog> allTasks=taskService.getAllTasks();
...@@ -97,8 +103,11 @@ public class ThirdBoxHandler extends BaseDeviceHandler{ ...@@ -97,8 +103,11 @@ public class ThirdBoxHandler extends BaseDeviceHandler{
if(task.isCheckOutTask()&&task.isWait()){ if(task.isCheckOutTask()&&task.isWait()){
continue; continue;
} }
String shelf= MicronDataCache.getShelfType(task); String shelf= MicronDataCache.getShelfType(task);
if(!shelfType.contains(shelf)){ if(shelfType.equals("S007")){
//reel料盘一直可以出库
}
else if(!shelfType.contains(shelf)){
shelfType.add(shelf); shelfType.add(shelf);
} }
if(ObjectUtil.isNotEmpty(task.getSourceId())&&(!sourceIds.contains(task.getSourceId()))){ if(ObjectUtil.isNotEmpty(task.getSourceId())&&(!sourceIds.contains(task.getSourceId()))){
...@@ -140,11 +149,12 @@ public class ThirdBoxHandler extends BaseDeviceHandler{ ...@@ -140,11 +149,12 @@ public class ThirdBoxHandler extends BaseDeviceHandler{
} }
//如果料架>=2,当前任务的料架在已出料架中,可以直接出 //reel可以一直出,不需要判断
// 如果料架>=2,当前任务的料架在已出料架中,可以直接出
//如果料架<2,且当前任务属于已出工单,可以直接出 //如果料架<2,且当前任务属于已出工单,可以直接出
//循环查找,当前任务不满足时查找下一个任务 //循环查找,当前任务不满足时查找下一个任务
String shelf = MicronDataCache.getShelfType(queueTask); String shelf = MicronDataCache.getShelfType(queueTask);
if (shelfType.size() < 2 || shelfType.contains(shelf)) { if (shelfType.equals("S007")||shelfType.size() < 2 || shelfType.contains(shelf)) {
//料架正确,工单为空,返回 //料架正确,工单为空,返回
if (ObjectUtil.isEmpty(queueTask.getSourceId())) { if (ObjectUtil.isEmpty(queueTask.getSourceId())) {
outTask = queueTask; outTask = queueTask;
......
...@@ -214,54 +214,63 @@ public class DefaultOrderFileListener implements IOrderFileListener { ...@@ -214,54 +214,63 @@ public class DefaultOrderFileListener implements IOrderFileListener {
List<Map<Integer, String>> data= ExcelReader.noModelRead(fileURL,headRowNumber); List<Map<Integer, String>> data= ExcelReader.noModelRead(fileURL,headRowNumber);
if(data!=null&&data.size()>=2){ if(data!=null&&data.size()>=2) {
Map<Integer, String> headerData=data.get(0); Map<Integer, String> headerData = data.get(0);
Map<String,Integer> headerMap=new HashMap<>(); Map<String, Integer> headerMap = new HashMap<>();
for (Integer key : for (Integer key :
headerData.keySet()) { headerData.keySet()) {
if(ObjectUtil.isEmpty(key)){ if (ObjectUtil.isEmpty(key)) {
continue; continue;
} }
String v=headerData.get(key); String v = headerData.get(key);
headerMap.put(v,key); headerMap.put(v, key);
} }
OrderSetting orderSetting = dataCache.getOrderSetting(); OrderSetting orderSetting = dataCache.getOrderSetting();
int partNumberIndex = headerMap.getOrDefault( orderSetting.getPn(),-1); int partNumberIndex = headerMap.getOrDefault(orderSetting.getPn(), -1);
int riIndex = headerMap.getOrDefault( orderSetting.getRi(),-1); int riIndex = headerMap.getOrDefault(orderSetting.getRi(), -1);
if(partNumberIndex==-1&&riIndex==-1){ int mpnIndex = headerMap.getOrDefault(orderSetting.getMpn(), -1);
if(headRowNumber<=1){ if (partNumberIndex == -1 && riIndex == -1 && mpnIndex == -1) {
log.error("文件["+fileName+"],未找到列PN或RI,当前headRowNumber=["+headRowNumber+"],设置headRowNumber=3重新读取"); if (headRowNumber <= 1) {
return readExcelFile(fileName,fileURL,3); log.error("文件[" + fileName + "],未找到列PN或RI或MPN,当前headRowNumber=[" + headRowNumber + "],设置headRowNumber=3重新读取");
} return readExcelFile(fileName, fileURL, 3);
else { } else {
log.error("文件["+fileName+"],未找到列PN或RI,当前headRowNumber=["+headRowNumber+"],读取文件失败,返回null"); log.error("文件[" + fileName + "],未找到列PN或RI或MPN,当前headRowNumber=[" + headRowNumber + "],读取文件失败,返回null");
return null;
} }
} }
int qtyIndex = headerMap.getOrDefault( orderSetting.getQty(),-1); int qtyIndex = headerMap.getOrDefault(orderSetting.getQty(), -1);
int feederIndex = headerMap.getOrDefault( orderSetting.getFeeder(),-1); int feederIndex = headerMap.getOrDefault(orderSetting.getFeeder(), -1);
int soIndex = headerMap.getOrDefault( orderSetting.getSo(),-1); int soIndex = headerMap.getOrDefault(orderSetting.getSo(), -1);
int numIndex = headerMap.getOrDefault( orderSetting.getNum(),-1); int numIndex = headerMap.getOrDefault(orderSetting.getNum(), -1);
int mpnIndex = headerMap.getOrDefault( orderSetting.getMpn(),-1);
for (int i = 1; i < data.size(); i++) {
for(int i=1;i<data.size();i++){ Map<Integer, String> lineValues = data.get(i);
Map<Integer, String> lineValues = data.get(i);
String partNumber = lineValues.get(partNumberIndex); String partNumber = lineValues.get(partNumberIndex);
String ri=""; String ri = "";
String mpn=""; String mpn = "";
if(riIndex!=-1){ if (riIndex != -1) {
ri=lineValues.get(riIndex); ri = lineValues.get(riIndex);
} }
if (mpnIndex!=-1){ if (mpnIndex != -1) {
mpn=lineValues.get(mpnIndex); mpn = lineValues.get(mpnIndex);
} }
if (partNumber.isEmpty()&&ri.isEmpty()&&mpn.isEmpty()) { if (partNumber == null) {
partNumber = "";
}
if (ri == null) {
ri = "";
}
if (mpn == null) {
mpn = "";
}
if (ObjectUtil.isEmpty(partNumber) && ObjectUtil.isEmpty(ri) && ObjectUtil.isEmpty(mpn)) {
log.warn("行[partNumber=" + partNumber + "]中PN和RI,MPN都 为空,此行忽略"); log.warn("行[partNumber=" + partNumber + "]中PN和RI,MPN都 为空,此行忽略");
} else { } else {
int num = 1; int num = 1;
if (qtyIndex != -1) { if (qtyIndex != -1) {
String numStr = lineValues.get(qtyIndex) ; String numStr = lineValues.get(qtyIndex);
if (Strings.isNotBlank(numStr)) { if (Strings.isNotBlank(numStr)) {
try { try {
num = Integer.valueOf(numStr); num = Integer.valueOf(numStr);
...@@ -274,19 +283,19 @@ public class DefaultOrderFileListener implements IOrderFileListener { ...@@ -274,19 +283,19 @@ public class DefaultOrderFileListener implements IOrderFileListener {
if (feederIndex != -1) { if (feederIndex != -1) {
feeder = lineValues.get(feederIndex); feeder = lineValues.get(feederIndex);
} }
String so=fileName; String so = fileName;
if(soIndex!=-1){ if (soIndex != -1) {
so=lineValues.get(soIndex); so = lineValues.get(soIndex);
} }
if(!ObjectUtil.isNotEmpty(so)){ if (!ObjectUtil.isNotEmpty(so)) {
so=fileName; so = fileName;
} }
int count=1; int count = 1;
if (numIndex != -1){ if (numIndex != -1) {
String countStr = lineValues.get(numIndex); String countStr = lineValues.get(numIndex);
if (StringUtils.isNotBlank(countStr)){ if (StringUtils.isNotBlank(countStr)) {
try { try {
count = Integer.valueOf(countStr); count = Integer.valueOf(countStr);
} catch (Exception e) { } catch (Exception e) {
...@@ -297,7 +306,7 @@ public class DefaultOrderFileListener implements IOrderFileListener { ...@@ -297,7 +306,7 @@ public class DefaultOrderFileListener implements IOrderFileListener {
LiteOrderItem item = new LiteOrderItem(); LiteOrderItem item = new LiteOrderItem();
item.setPn(partNumber); item.setPn(partNumber);
item.setNeedReelCount(count); item.setNeedReelCount(count);
if(partNumber.isEmpty()){ if (partNumber.isEmpty()) {
item.setNeedReelCount(1); item.setNeedReelCount(1);
} }
item.setNeedNum(num); item.setNeedNum(num);
...@@ -305,8 +314,8 @@ public class DefaultOrderFileListener implements IOrderFileListener { ...@@ -305,8 +314,8 @@ public class DefaultOrderFileListener implements IOrderFileListener {
item.setFeederInfo(feeder); item.setFeederInfo(feeder);
item.setRi(ri); item.setRi(ri);
item.setMpn(mpn); item.setMpn(mpn);
if(!itemMap.containsKey(so)){ if (!itemMap.containsKey(so)) {
itemMap.put(so,new ArrayList<LiteOrderItem>()); itemMap.put(so, new ArrayList<LiteOrderItem>());
} }
itemMap.get(so).add(item); itemMap.get(so).add(item);
} }
...@@ -316,7 +325,7 @@ public class DefaultOrderFileListener implements IOrderFileListener { ...@@ -316,7 +325,7 @@ public class DefaultOrderFileListener implements IOrderFileListener {
return itemMap; return itemMap;
} catch (Exception ex) { } catch (Exception ex) {
log.error("解析上传的工单出错:" + ex.toString()); log.error("解析上传的工单出错:" + ex.getMessage());
} finally { } finally {
} }
......
...@@ -59,7 +59,7 @@ public class DataLogManagerImpl implements IDataLogManager { ...@@ -59,7 +59,7 @@ public class DataLogManagerImpl implements IDataLogManager {
@Override @Override
public List<DataLog> findUnFinishedTasks( ) { public List<DataLog> findUnFinishedTasks( ) {
Criteria c = Criteria.where("status").nin(OP_STATUS.FINISHED.name(),OP_STATUS.CANCEL.name()); Criteria c = Criteria.where("status").nin(OP_STATUS.FINISHED.name(),OP_STATUS.CANCEL.name());
//只查找近12个小时未完成的任务 //只查找近48个小时未完成的任务
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY,-48); calendar.add(Calendar.HOUR_OF_DAY,-48);
c.and("updateDate").gte(calendar.getTime()); c.and("updateDate").gte(calendar.getTime());
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!