Commit 59765f11 zshaohui
2 个父辈 6ae91781 c4a633b0
package com.neotel.smfcore.core.device.bean; package com.neotel.smfcore.core.device.bean;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.core.device.enums.BOX_STATUS; import com.neotel.smfcore.core.device.enums.BOX_STATUS;
import java.util.HashMap; import java.util.HashMap;
...@@ -148,6 +149,30 @@ public class BoxStatusBean { ...@@ -148,6 +149,30 @@ public class BoxStatusBean {
return data.get("barcode"); return data.get("barcode");
} }
public Map<String,Integer> getCapacity() {
String capacity = data.get("capacity");
Map<String, Integer> caMap = new HashMap<>();
try {
if (ObjectUtil.isNotEmpty(capacity)) {
String[] arr = capacity.split(";");
for (String ar :
arr) {
if (ObjectUtil.isNotEmpty(ar)) {
String[] ar2 = ar.split("=");
if (ar2.length == 2) {
caMap.put(ar2[0], Integer.valueOf(ar2[1]));
}
}
}
}
} catch (Exception ex) {
}
return caMap;
// boxStatus.data.Add("capacity", "7X8=1000;7X12=345;13X32=100;");
}
/** /**
* 从data中获取值 * 从data中获取值
*/ */
......
...@@ -228,9 +228,9 @@ public class RobotBoxHandler extends BaseDeviceHandler { ...@@ -228,9 +228,9 @@ public class RobotBoxHandler extends BaseDeviceHandler {
String code = request.getParameter("code"); String code = request.getParameter("code");
String cids = request.getParameter("cids"); String cids = request.getParameter("cids");
String lastPosId = ""; String lastPosId = "";
String lineMsg = ""; String lineMsg = "";
log.info("流水线[" + cids + "]获取[" + code + "]的入库库位"); log.info("流水线[" + cids + "]获取[" + code + "]的入库库位");
String[] cidArray= cids.split(",");
Map<String, Object> resultMap = Maps.newHashMap(); Map<String, Object> resultMap = Maps.newHashMap();
String okMsg = ""; String okMsg = "";
String errorMsg = ""; String errorMsg = "";
...@@ -238,7 +238,9 @@ public class RobotBoxHandler extends BaseDeviceHandler { ...@@ -238,7 +238,9 @@ public class RobotBoxHandler extends BaseDeviceHandler {
List<String> cidList = dataCache.getAvailableStorageIds(this.getDeviceType()); List<String> cidList = dataCache.getAvailableStorageIds(this.getDeviceType());
List<String> thirdList=dataCache.getAvailableStorageIds(DeviceType.SMDBOX_THIRD); List<String> thirdList=dataCache.getAvailableStorageIds(DeviceType.SMDBOX_THIRD);
cidList.addAll(thirdList); cidList.addAll(thirdList);
for (String cid : cidList) { // for (String cid : cidList) {
for(String cid:cidArray) {
if (cidList.contains(cid)) {
String notIntoCids = dataCache.getSettings().getNotIntoCids(); String notIntoCids = dataCache.getSettings().getNotIntoCids();
if (notIntoCids != null) { if (notIntoCids != null) {
if (notIntoCids.contains(cid)) { if (notIntoCids.contains(cid)) {
...@@ -251,6 +253,7 @@ public class RobotBoxHandler extends BaseDeviceHandler { ...@@ -251,6 +253,7 @@ public class RobotBoxHandler extends BaseDeviceHandler {
storageList.add(storage); storageList.add(storage);
} }
} }
}
if (storageList.isEmpty()) { if (storageList.isEmpty()) {
resultMap.put("result", "99"); resultMap.put("result", "99");
errorMsg = "无可用的料仓"; errorMsg = "无可用的料仓";
...@@ -305,7 +308,36 @@ public class RobotBoxHandler extends BaseDeviceHandler { ...@@ -305,7 +308,36 @@ public class RobotBoxHandler extends BaseDeviceHandler {
return resultMap; return resultMap;
}*/ }*/
StoragePos pos = taskService.findEmptyPosForPutIn(storageList, barcode, "", lastPosId); //根据尺寸获取指定的料仓
// 13*44,13*56,13*72这三个料入到我们的料仓,其他的13寸,15寸都入迈康尼的料仓
int inStorageType=0;//0=所有料仓都可以,1=只能入我们料仓。2=只能入麦康尼料仓
if(barcode.getPlateSize()==13){
if(barcode.getHeight()==44||barcode.getHeight()==56||barcode.getHeight()==72){
//只能入robot
inStorageType=1;
}else {
inStorageType=2;
}
}else if(barcode.getPlateSize()==15){
inStorageType=2;
}
List<Storage> storages=new ArrayList<>();
for (Storage storage :storageList) {
if(inStorageType==1){
if( storage.isRobotBox()) {
storages.add(storage);
}
}else if(inStorageType==2){
if(storage.isTHIRDBox()){
storages.add(storage);
}
}else {
storages.add(storage);
}
}
StoragePos pos = taskService.findEmptyPosForPutIn(storages, barcode, "", lastPosId);
if (pos != null) { if (pos != null) {
Storage storage = dataCache.getStorageById(pos.getStorageId()); Storage storage = dataCache.getStorageById(pos.getStorageId());
......
package com.neotel.smfcore.core.device.handler.impl; package com.neotel.smfcore.core.device.handler.impl;
import com.google.common.base.Strings;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.bean.BoxStatusBean;
import com.neotel.smfcore.core.device.bean.StatusBean; import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.enums.BOX_STATUS;
import com.neotel.smfcore.core.device.enums.OP; import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.message.util.DeviceMessageUtil;
import com.neotel.smfcore.core.storage.enums.DeviceType; import com.neotel.smfcore.core.storage.enums.DeviceType;
import com.neotel.smfcore.core.storage.service.po.Storage; import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil; import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map; import java.util.Map;
@Service @Service
@Slf4j @Slf4j
public class ThirdBoxHandler extends BaseDeviceHandler{ public class ThirdBoxHandler extends BaseDeviceHandler{
@Override @Override
public StatusBean handleClientRequest(StatusBean statusBean, HttpServletRequest request) { public StatusBean handleClientRequest(StatusBean statusBean, HttpServletRequest request) {
statusBean.setClientIp(request.getRemoteHost());
String cid = statusBean.getCid(); String cid = statusBean.getCid();
Storage storage = dataCache.getStorage(cid); Storage storage = dataCache.getStorage(cid);
if (storage == null) { if (storage == null) {
log.error("料仓cid: [" + cid + "]不存在"); log.error("料仓cid: [" + cid + "]不存在");
return null; return null;
} }
statusBean.setClientIp(request.getRemoteHost());
handleMsg(statusBean); handleMsg(statusBean);
statusBean = saveAlarmAndHumidity(statusBean); statusBean = saveAlarmAndHumidity(statusBean);
statusBean = handleInOutFinished(statusBean); statusBean = handleFinished(statusBean);
StatusBean humidityResult = handleHumidity(statusBean); StatusBean humidityResult = handleHumidity(statusBean);
if (humidityResult != null) { if (humidityResult != null) {
return humidityResult; return humidityResult;
...@@ -33,15 +48,163 @@ public class ThirdBoxHandler extends BaseDeviceHandler{ ...@@ -33,15 +48,163 @@ public class ThirdBoxHandler extends BaseDeviceHandler{
if (statusBean.getOp() == OP.PUT_IN) { if (statusBean.getOp() == OP.PUT_IN) {
log.debug("入库:" + statusBean.toString()); log.debug("入库:" + statusBean.toString());
statusBean = putInLine(storage, statusBean); //判断是否有放在门口状态的入库任务
Collection<DataLog> queueTasks = taskService.getQueueTasks();
for (DataLog queueTask : queueTasks) {
if (queueTask.getCid().equals(statusBean.getCid()) && queueTask.isPutInTask() && queueTask.isBoxdoor()) {
String posId = queueTask.getPosName();
String reelId = queueTask.getBarcode();
Barcode barcode = barcodeManager.findByBarcode(reelId);
int plateW = barcode.getPlateSize();
int plateH = barcode.getHeight();
statusBean.addPosInfo(reelId, posId, plateW, plateH, false);
log.info(reelId + "[" + plateW + "x" + plateH + "]开始入库到" + storage.getCid() + "[" + posId + "]");
return statusBean;
}
}
//statusBean = putInLine(storage, statusBean);
} else { } else {
//查看是否有要出库的操作 //查看是否有要出库的操作
statusBean =taskService.checkOut(storage, statusBean); statusBean = findCheckOutTask(storage, statusBean);
}
return statusBean;
}
/**
* 出库处理
*/
public StatusBean findCheckOutTask(Storage storage, StatusBean statusBean) {
try {
//准备更新暂停出入库
if (dataCache.getCache(Constants.CACHE_StopOut)) {
return statusBean;
}
String cid = statusBean.getCid();
Collection<DataLog> queueTasks = taskService.getQueueTasks();
int executingOutTaskSize = 0;
DataLog outTask = null;
for (DataLog queueTask : queueTasks) {
if (queueTask.getCid().equals(cid)) {
//有入库任务不分配出库任务
if (queueTask.isPutInTask()) {
return statusBean;
} else {
if (queueTask.isExecuting()) {
executingOutTaskSize++;
//已经有出库任务正在执行,超过60秒仍未完成的出库再次发送到客户端
if (queueTask.needReSendToClient()) {
outTask = queueTask;
log.error("cid[" + cid + "]的出库任务[" + queueTask.getPosName() + "]超过60秒仍未完成,重新发送到客户端!");
queueTask.setUpdateDate(new Date());
break;
}
} else if (queueTask.isWait()) {
if (executingOutTaskSize >= 2) {
//log.error("cid["+cid + "]的BOX["+ boxId+"]的出库任务已经超过2个,不再分配!");
outTask = null;
break;
}
outTask = queueTask;
if (queueTask.isUrgentReel()) {
break;
}
}
}
}
}
if (outTask != null) {
log.info("分配出库任务" + outTask.getBarcode() + "[" + outTask.getPosName() + "]到 " + cid);
outTask.setStatus(OP_STATUS.EXECUTING.name());
taskService.updateQueueTask(outTask);
statusBean.setOp(OP.CHECKOUT);
String posName = outTask.getPosName();
Barcode codeObj = barcodeManager.findByBarcode(outTask.getBarcode());
int plateW = 0;
int plateH = 0;
if (codeObj != null) {
plateW = codeObj.getPlateSize();
plateH = codeObj.getHeight();
} else {
log.warn("出库无料仓位" + storage.getName() + "[" + posName + "]");
}
statusBean.addPosInfo(outTask.getBarcode(), posName, plateW, plateH, false);
log.info("出库" + storage.getName() + "[" + posName + "]物料[" + outTask.getBarcode() + "] 发送到客户端" + cid);
}
} catch (Exception e) {
log.error("出库出错", e);
}
return statusBean;
}
protected StatusBean handleFinished(StatusBean statusBean) {
Map<String, BoxStatusBean> statusOfBoxes = statusBean.getBoxStatus();
if (statusOfBoxes != null) {
for (BoxStatusBean boxStatus : statusOfBoxes.values()) {
try {
//出库入库完成处理
int status = boxStatus.getStatus();
String posName = boxStatus.getPosId();
String barcode=boxStatus.getBarcode();
int executeTime = boxStatus.getExecuteTime();
if ((!Strings.isNullOrEmpty(posName))||(!Strings.isNullOrEmpty(barcode))) {//客户端发一次完成之后,会发空的 posName,不需要处理
if (BOX_STATUS.IN_FINISHED == status) {//入仓完成
finishedPutIn(statusBean.getCid(), posName,barcode, executeTime);
} else if (BOX_STATUS.IN_FAILED == status) {//入库失败
//暂不处理
} else if (BOX_STATUS.OUT_FINISHED == status) {//出仓完成
finishedOutPos(statusBean.getCid(), posName,barcode, executeTime);
} else if (BOX_STATUS.OUT_END == status) {//出库完成(放到仓门口
//更改出库状态为OUT_DOOR
List<DataLog> finishedTasks = taskService.getFinishedTasks();
for (DataLog finishedTask : finishedTasks) {
if (finishedTask.getCid().equals(statusBean.getCid()) && finishedTask.isCheckOutTask() && finishedTask.isOutBox()) {
if (posName.equals(finishedTask.getPosName())) {
//已出仓但未放到门口,更改状态
finishedTask.setStatus(OP_STATUS.BOXDOOR.name());
taskService.updateFinishedTask(finishedTask);
log.info("物料" + finishedTask.getBarcode() + "已从库位" + finishedTask.getPosName() + "取出放到门口");
return statusBean;
}
}
}
log.error(posName + "出库放到门口时,未找到对应的出库任务");
} else if (BOX_STATUS.OUT_FAILED == status) {
//更改出库状态为OUT_DOOR
List<DataLog> finishedTasks = taskService.getFinishedTasks();
for (DataLog finishedTask : finishedTasks) {
if (finishedTask.getCid().equals(statusBean.getCid()) && finishedTask.isCheckOutTask() && finishedTask.isOutBox()) {
if (posName.equals(finishedTask.getPosName())) {
//已出仓但未放到门口,更改状态
finishedTask.setStatus(OP_STATUS.BOXDOOR_NOREEL.name());
log.info("物料" + finishedTask.getBarcode() + "已从库位" + finishedTask.getPosName() + "取出放到门口,但未感应到料盘,屏蔽库位");
StoragePos pos = storagePosManager.getByPosName(finishedTask.getPosName());
if (pos != null) {
pos.setEnabled(false);
storagePosManager.save(pos);
DeviceMessageUtil.addEnabledPosMessage(pos, "SYSTEM");
}
taskService.updateFinishedTask(finishedTask);
return statusBean;
}
}
}
} }
//获取操作 }
Map<String, String> opMap = DevicesStatusUtil.getAndRemoveOp(cid); } catch (ValidateException e) {
statusBean.putOp(opMap); log.error("更新状态时出错" + e.getMessage());
}
}
}
return statusBean; return statusBean;
} }
@Override @Override
......
...@@ -312,4 +312,7 @@ public class Storage extends BasePo implements Serializable { ...@@ -312,4 +312,7 @@ public class Storage extends BasePo implements Serializable {
public boolean isRobotBox() { public boolean isRobotBox() {
return DeviceType.ROBOT_BOX.name().equals(type); return DeviceType.ROBOT_BOX.name().equals(type);
} }
public boolean isTHIRDBox() {
return DeviceType.SMDBOX_THIRD.name().equals(type);
}
} }
...@@ -33,11 +33,11 @@ public class MicronML5Controller { ...@@ -33,11 +33,11 @@ public class MicronML5Controller {
@GetMapping("/status") @GetMapping("/status")
@AnonymousAccess @AnonymousAccess
public ML5StatusDto ml5Status( ) { public ML5StatusDto ml5Status( ) {
ML5StatusDto dto=new ML5StatusDto(); ML5StatusDto dto = new ML5StatusDto();
MicronEquipStatus r1=MicronDataCache.getStatus(MicronEquipName.ML5_R1.getName()); MicronEquipStatus r1 = MicronDataCache.getStatus(MicronEquipName.ML5_R1.getName());
MicronEquipStatus r2=MicronDataCache.getStatus(MicronEquipName.ML5_R2.getName()); MicronEquipStatus r2 = MicronDataCache.getStatus(MicronEquipName.ML5_R2.getName());
MicronEquipStatus l1=MicronDataCache.getStatus(MicronEquipName.ML5_L1.getName()); MicronEquipStatus l1 = MicronDataCache.getStatus(MicronEquipName.ML5_L1.getName());
MicronEquipStatus l2=MicronDataCache.getStatus(MicronEquipName.ML5_L2.getName()); MicronEquipStatus l2 = MicronDataCache.getStatus(MicronEquipName.ML5_L2.getName());
dto.setL1Status(l1.getStatus()); dto.setL1Status(l1.getStatus());
dto.setL2Status(l2.getStatus()); dto.setL2Status(l2.getStatus());
...@@ -46,27 +46,37 @@ public class MicronML5Controller { ...@@ -46,27 +46,37 @@ public class MicronML5Controller {
dto.setNg1Count(l1.getNgCount()); dto.setNg1Count(l1.getNgCount());
dto.setNg2Count(r1.getNgCount()); dto.setNg2Count(r1.getNgCount());
List<EquipMsg> msgs=new ArrayList<>(); List<EquipMsg> msgs = new ArrayList<>();
if (r1.getMsgList() != null && r1.getMsgList().size() > 0) {
msgs.addAll(r1.getMsgList()); msgs.addAll(r1.getMsgList());
}
if (r2.getMsgList() != null && r2.getMsgList().size() > 0) {
msgs.addAll(r2.getMsgList()); msgs.addAll(r2.getMsgList());
}
if (l1.getMsgList() != null && l1.getMsgList().size() > 0) {
msgs.addAll(l1.getMsgList()); msgs.addAll(l1.getMsgList());
}
if (l2.getMsgList() != null && l2.getMsgList().size() > 0) {
msgs.addAll(l2.getMsgList()); msgs.addAll(l2.getMsgList());
}
if (msgs.size() > 0) {
dto.setMsgList(msgs); dto.setMsgList(msgs);
}
Map<String,Integer> needShelfs=new HashMap<>(); Map<String, Integer> needShelfs = new HashMap<>();
List<DataLog> dataLogs= taskService.getAllTasks(); List<DataLog> dataLogs = taskService.getAllTasks();
for (DataLog task :dataLogs for (DataLog task : dataLogs
) { ) {
String taskType=MicronDataCache.GetMaterialType(task); String taskType = MicronDataCache.GetMaterialType(task);
String shelf=MicronDataCache.getShelfType(taskType); String shelf = MicronDataCache.getShelfType(taskType);
if(needShelfs.containsKey(shelf)){ if (needShelfs.containsKey(shelf)) {
int newCount=needShelfs.get(shelf)+1; int newCount = needShelfs.get(shelf) + 1;
needShelfs.put(shelf,newCount); needShelfs.put(shelf, newCount);
}else{ } else {
needShelfs.put(shelf,1); needShelfs.put(shelf, 1);
} }
} }
if(needShelfs.size()>0){ if (needShelfs.size() > 0) {
dto.setNeedShelfs(needShelfs); dto.setNeedShelfs(needShelfs);
} }
......
...@@ -94,7 +94,7 @@ public class MicronDataCache { ...@@ -94,7 +94,7 @@ public class MicronDataCache {
}else if(materialType.equals(TRAY)){ }else if(materialType.equals(TRAY)){
return "M03"; return "M03";
} }
return ""; return "S007";
} }
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!