Commit ab1e95f6 LN

增加getBoxDoorStatus接口

1 个父辈 ee5cac00
......@@ -73,20 +73,27 @@ public class RobotBoxHandler extends BaseDeviceHandler {
return statusBean;
}
@ApiOperation("机器人料仓查找空的料格")
@ApiOperation("扫码后获取库位号")
@PostMapping(value = "/service/store/robotBox/emptyPosForPutin")
@ResponseBody
@AnonymousAccess
public Map<String, Object> emptyPosForPutin(HttpServletRequest request) {
String code = request.getParameter("code");
String cids = request.getParameter("cids");
String rfid = request.getParameter("rfid");
String rfidLoc = request.getParameter("rfidLoc");
String lastPosId = request.getParameter("lastPosId");
String lastPosId="";
String lineMsg = "";
log.info("流水线[" + cids + "]获取[" + rfid + "][" + code + "]的入库库位");
log.info("流水线[" + cids + "]获取[" + code + "]的入库库位");
Map<String, Object> resultMap = Maps.newHashMap();
//返回值说明:
// =0:获取库位号成功
// result= 99:暂时不能入库,需要重新获取库位。
// result= 100:服务器需要更新,需要重新获取库位
// result=105:查找空库位失败
// result=98:物料已有出库任务,需继续执行出库动作
//
//
if (dataCache.getCache(Constants.CACHE_StopOut)) {
lineMsg = "系统更新中,暂停出入库";
......@@ -98,12 +105,16 @@ public class RobotBoxHandler extends BaseDeviceHandler {
String okMsg = "";
String errorMsg = "";
List<Storage> storageList = Lists.newArrayList();
List<String> cidList=new ArrayList<>();
if (Strings.isNullOrEmpty(cids)) {
resultMap.put("result", "101");
resultMap.put("msg", "未指定料仓 cids ");
//自动获取在线的料仓列表
cidList=dataCache.getAvailableStorageIds(this.getDeviceType());
// resultMap.put("result", "101");
// resultMap.put("msg", "未指定料仓 cids ");
} else {
List<Storage> storageList = Lists.newArrayList();
List<String> cidList = Lists.newArrayList();
cidList = Lists.newArrayList();
}
for (String cid : cids.split(",")) {
String notIntoCids = dataCache.getSettings().getNotIntoCids();
if (notIntoCids != null) {
......@@ -120,7 +131,7 @@ public class RobotBoxHandler extends BaseDeviceHandler {
Collection<DataLog> tasks = taskService.getQueueTasks();
for (DataLog task : tasks) {
if (task.isCheckOutTask() && task.getStorageId().equals(storage.getId())) {
if (task.isExecuting() || task.isBoxdoor() || task.isInRobot()) {
if (task.isExecuting() || task.isBoxdoor() ) {
hasOutTask = true;
break;
}
......@@ -182,7 +193,7 @@ public class RobotBoxHandler extends BaseDeviceHandler {
}
}
StoragePos pos = taskService.findEmptyPosForPutIn(storageList, barcode, rfid, lastPosId);
StoragePos pos = taskService.findEmptyPosForPutIn(storageList, barcode, "", lastPosId);
if (pos != null) {
......@@ -192,14 +203,14 @@ public class RobotBoxHandler extends BaseDeviceHandler {
resultMap.put("msg", "");
okMsg = "[" + rfid + "][" + barcode.getBarcode() + "]锁定库位[" + pos.getPosName() + "]优先级[" + pos.getPriority() + "] 上个库位号[" + lastPosId + "]";
okMsg = "[" + barcode.getBarcode() + "]锁定库位[" + pos.getPosName() + "]优先级[" + pos.getPriority() + "] 上个库位号[" + lastPosId + "]";
ReelLockPosInfo oldLockInfo = ReelLockPosUtil.getLockPosInfoByCode(barcode.getBarcode());
if (oldLockInfo != null) {
if (!oldLockInfo.getBarcode().equals(barcode.getBarcode())) {
String result = "-1";
okMsg = rfid + "[" + rfidLoc + "][" + barcode.getBarcode() + "]锁定库位[" + pos.getPosName() + "],清理旧有锁定信息";
okMsg = "[" + barcode.getBarcode() + "]锁定库位[" + pos.getPosName() + "],清理旧有锁定信息";
resultMap.put("result", result);
resultMap.put("msg", okMsg);
//已经锁定过库位,但不是同一个条码,需要把对应位置的锁定信息清理掉
......@@ -256,7 +267,7 @@ public class RobotBoxHandler extends BaseDeviceHandler {
resultMap.put("msg", errorMsg);
}
}
}
// }
//没入成功
if (!errorMsg.isEmpty()) {
......@@ -281,7 +292,7 @@ public class RobotBoxHandler extends BaseDeviceHandler {
return resultMap;
}
@ApiOperation("机器人料仓更新任务状态")
@ApiOperation("机器人更新任务状态")
@PostMapping(value = "/service/store/robotBox/updateLocInfo")
@ResponseBody
@AnonymousAccess
......@@ -335,29 +346,30 @@ public class RobotBoxHandler extends BaseDeviceHandler {
}
@ApiOperation("机器人定时获取出入库任务")
@ApiOperation("机器人定时获取任务")
@PostMapping(value = "/service/store/robotBox/getRobotTask")
@ResponseBody
@AnonymousAccess
public ResultBean getRobotTask(HttpServletRequest request) {
//TODO 先查找是否有出库任务,在查找入库任务
//TODO 先查找是否有出库任务
Collection<DataLog> datalogs = taskService.getQueueTasks();
//先查找已在机器人的
for (DataLog task : datalogs) {
if (task.isInRobot()) {
//获取任务失败,还有未完成的任务
return ResultBean.newErrorResult(301, "smfcore.task.lastNotEnd", "上个任务未结束{0}{1}", new String[]{task.getPosName(), task.getBarcode()});
return ResultBean.newErrorResult(1, "smfcore.task.lastNotEnd", "上个任务未结束{0}{1}", new String[]{task.getPosName(), task.getBarcode()});
}
}
//查找出库已经到门口的
for (DataLog task : datalogs) {
if (OP.CHECKOUT == task.getType()) {
if (task.isCheckOutTask()) {
if (task.isBoxdoor()) {
Map<String, String> taskMap = new HashMap<>();
taskMap.put("cid", task.getCid());//取料位置
taskMap.put("targetPos", "out");//放料位置
// taskMap.put("targetPos", "out");//放料位置
taskMap.put("type",task.getType()+"");//类型,1=入库,2=出库
taskMap.put("posId", task.getPosName());
Barcode barcode = barcodeManager.findByBarcode(task.getBarcode());
......@@ -381,6 +393,37 @@ public class RobotBoxHandler extends BaseDeviceHandler {
}
@ApiOperation("料仓判断仓门口是否可以放料")
@PostMapping(value = "/service/store/robotBox/getBoxDoorStatus")
@ResponseBody
@AnonymousAccess
public ResultBean getBoxDoorStatus(HttpServletRequest request) {
String cid = request.getParameter("cid");
//判断仓门口状态,0=空闲,返回其他表示仓门口有料或机器人正在取料
Storage storage = dataCache.getStorage(cid);
if (storage == null) {
return ResultBean.newErrorResult(99, "smfcore.robotBox.notFound", "未找到机器人料仓[{0}]", new String[]{cid});
}
if (!storage.isRobotBox()) {
return ResultBean.newErrorResult(99, "smfcore.robotBox.notFound", "未找到机器人料仓[{0}]", new String[]{cid});
}
Collection<DataLog> tasks = taskService.getQueueTasks();
for (DataLog task : tasks) {
if (task.getStorageId().equals(storage.getId())) {
if (task.isBoxdoor()) {
return ResultBean.newErrorResult(-1, "smfcore.robotBox.boxHasTask", "任务[{0}][{1}]类型{2}状态{3}", new String[]{task.getPosName(), task.getBarcode(),task.getType()+"", task.getStatus()});
}
else if(task.isPutInTask()&&task.isInRobot()){
return ResultBean.newErrorResult(-1, "smfcore.robotBox.boxHasTask", "任务[{0}][{1}]类型{2}状态{3}", new String[]{task.getPosName(), task.getBarcode(),task.getType()+"", task.getStatus()});
}
}
}
return ResultBean.newOkResult("");
}
@Override
public DeviceType getDeviceType() {
return DeviceType.ROBOT_BOX;
......
......@@ -11,6 +11,7 @@ import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.common.utils.YmlUpdateUtil;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.inList.util.InListCache;
import com.neotel.smfcore.core.language.service.bean.LanguageInfo;
import com.neotel.smfcore.core.language.service.po.LanguageMsg;
......@@ -29,6 +30,7 @@ import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.system.service.po.CacheItem;
import com.neotel.smfcore.core.system.service.po.Settings;
import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -658,7 +660,23 @@ public class DataCache {
}
return availableStorageIds;
}
public List<String> getAvailableStorageIds(DeviceType deviceType){
List<String> availableStorageIds = new ArrayList<>();
for (Storage storage : getAllStorage().values()) {
if(storage.getType().equals(deviceType.name())) {
StatusBean bean = DevicesStatusUtil.getStatusBean(storage.getCid());
if (bean == null || bean.timeOut()) {
continue;
}
if (bean.getStatus() == 1) {
availableStorageIds.add(storage.getId());
}
}
}
return availableStorageIds;
}
public Storage AutoCreateStorage(String cid) {
//判断cid存在
Storage storage = null;
......
......@@ -325,16 +325,49 @@ public class TaskService {
return false;
}
private DataLog findPutInBoxTask(Storage storage){
private StatusBean findPutInBoxTask(Storage storage, StatusBean statusBean) {
if(storage.isRobotBox()){
DataLog putInTask = null;
//如果是机器人料仓,需要查找入库任务发给料仓
if (storage.isRobotBox()) {
for (DataLog task : taskMap.values()) {
if (OP.PUT_IN == task.getType() && task.getCid().equals(storage.getCid())) {
if(task.isBoxdoor()){
return task;
if (task.isBoxdoor()) {
//仓门口的料需要直接发给料仓入库
putInTask = task;
}
//如果有正在执行中,还未结束的入库,也不能执行出库任务
else if (task.isExecuting() || task.isInRobot()) {
putInTask = task;
}
}
}
}
if (putInTask != null) {
if (putInTask.isInRobot()) {
//发送入库任务到BOX
putInTask.setStatus(OP_STATUS.EXECUTING.name());
taskMap.put(putInTask.getId(), putInTask);
putInTask = dataLogDao.save(putInTask);
String posName = putInTask.getPosName();
Barcode codeObj = barcodeManager.findByBarcode(putInTask.getBarcode());
int plateW = 0;
int plateH = 0;
if (codeObj != null) {
plateW = codeObj.getPlateSize();
plateH = codeObj.getHeight();
} else {
log.warn("入库未找到条码" + storage.getName() + "[" + posName + "],条码[" + putInTask.getBarcode() + "]");
}
statusBean.setOp(OP.PUT_IN);
statusBean.addPosInfo(putInTask.getBarcode(), posName, plateW, plateH, true);
log.info("入库" + storage.getName() + "[" + posName + "]物料[" + putInTask.getBarcode() + "][" + putInTask.getStatus() + "]到 " + storage.getCid());
}
return statusBean;
}
return null;
}
......@@ -408,28 +441,9 @@ public class TaskService {
*/
public StatusBean checkOut(Storage storage, StatusBean statusBean) {
try {
DataLog putInTask=findPutInBoxTask(storage);
if(putInTask!=null){
//发送入库任务到BOX
putInTask.setStatus(OP_STATUS.EXECUTING.name());
taskMap.put(putInTask.getId(), putInTask);
putInTask = dataLogDao.save(putInTask);
String posName = putInTask.getPosName();
Barcode codeObj = barcodeManager.findByBarcode(putInTask.getBarcode());
int plateW = 0;
int plateH = 0;
if (codeObj != null) {
plateW = codeObj.getPlateSize();
plateH = codeObj.getHeight();
} else {
log.warn("入库未找到条码" + storage.getName() + "[" + posName + "],条码["+putInTask.getBarcode()+"]");
}
statusBean.setOp(OP.PUT_IN);
statusBean.addPosInfo(putInTask.getBarcode(), posName, plateW, plateH, true);
log.info("入库" + storage.getName() + "[" + posName + "]物料[" + putInTask.getBarcode() + "]["+putInTask.getStatus()+"]到 " + storage.getCid());
return statusBean;
StatusBean statusBean1=findPutInBoxTask(storage,statusBean);
if(statusBean1!=null){
return statusBean1;
}
//准备更新暂停出入库
......
......@@ -228,3 +228,5 @@ smfcore.linemsg.posLock=[{0}]\u5E93\u4F4D[{1}]\u5DF2\u88AB\u9501\u5B9A,\u6682\u5
smfcore.task.notExist=\u4EFB\u52A1\u4E0D\u5B58\u5728
smfcore.task.hasEnd=\u4EFB\u52A1\u5DF2\u5B8C\u6210
smfcore.task.hasCancel=\u66F4\u65B0\u72B6\u6001\u65F6{0}\u7684\u51FA\u5E93\u4EFB\u52A1[{1}]\u5DF2\u88AB\u53D6\u6D88
smfcore.robotBox.notFound=\u672A\u627E\u5230\u673A\u5668\u4EBA\u6599\u4ED3[{0}]
smfcore.robotBox.boxHasTask=\u4EFB\u52A1[{0}][{1}]\u7C7B\u578B{2}\u72B6\u6001{3}
\ No newline at end of file
......@@ -228,4 +228,6 @@ smfcore.linemsg.posLock=The [{0}] storage space [{1}] has been locked, suspend s
smfcore.task.notExist=Task does not exist
smfcore.task.hasEnd=Mission completed
smfcore.task.hasCancel={0}'s outgoing task [{1}] has been cancelled
smfcore.robotBox.notFound=ROBOT BOX{0} does not exist
smfcore.robotBox.boxHasTask=\u30BF\u30B9\u30AF [{0}][{1}] \u30BF\u30A4\u30D7 {2} \u72B6\u614B {3\uFF5D
......@@ -228,4 +228,6 @@ smfcore.linemsg.posLock=[{0}] \u30B9\u30C8\u30EC\u30FC\u30B8\u30B9\u30DA\u30FC\u
smfcore.task.notExist=\u30DF\u30C3\u30B7\u30E7\u30F3\u304C\u5B58\u5728\u3057\u306A\u3044
smfcore.task.hasEnd=\u30DF\u30C3\u30B7\u30E7\u30F3\u9054\u6210
smfcore.task.hasCancel={0}\u306E\u9001\u4FE1\u30BF\u30B9\u30AF[{1}]\u306F\u30AD\u30E3\u30F3\u30BB\u30EB\u3055\u308C\u307E\u3057\u305F
smfcore.robotBox.notFound=\u30D3\u30F3\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3067\u3057\u305F{0}
smfcore.robotBox.boxHasTask=Task [{0}][{1}] Type {2} Status {3}
......@@ -228,3 +228,5 @@ smfcore.linemsg.posLock=[{0}]\u5E93\u4F4D[{1}]\u5DF2\u88AB\u9501\u5B9A,\u6682\u5
smfcore.task.notExist=\u4EFB\u52A1\u4E0D\u5B58\u5728
smfcore.task.hasEnd=\u4EFB\u52A1\u5DF2\u5B8C\u6210
smfcore.task.hasCancel=\u66F4\u65B0\u72B6\u6001\u65F6{0}\u7684\u51FA\u5E93\u4EFB\u52A1[{1}]\u5DF2\u88AB\u53D6\u6D88
smfcore.robotBox.notFound=\u672A\u627E\u5230\u673A\u5668\u4EBA\u6599\u4ED3[{0}]
smfcore.robotBox.boxHasTask=\u4EFB\u52A1[{0}][{1}]\u7C7B\u578B{2}\u72B6\u6001{3}
......@@ -228,4 +228,6 @@ smfcore.linemsg.posLock=[{0}]\u5EAB\u4F4D[{1}]\u5DF2\u88AB\u9396\u5B9A\uFF0C\u66
smfcore.task.notExist=\u4EFB\u52D9\u4E0D\u5B58\u5728
smfcore.task.hasEnd=\u4EFB\u52D9\u5DF2\u5B8C\u6210
smfcore.task.hasCancel=\u66F4\u65B0\u72C0\u614B\u6642{0}\u7684\u51FA\u5EAB\u4EFB\u52D9[{1}]\u5DF2\u88AB\u53D6\u6D88
smfcore.robotBox.notFound=\u672A\u627E\u5230\u6A5F\u5668\u4EBA\u6599\u5009[{0}]
smfcore.robotBox.boxHasTask=\u4EFB\u52D9[{0}][{1}]\u985E\u578B{2}\u72C0\u614B{3}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!