Commit eb568c6d LN

1053 麦康尼料仓修改。增加获取条码尺寸接口

1 个父辈 c4a633b0
......@@ -160,7 +160,7 @@ public class BoxStatusBean {
if (ObjectUtil.isNotEmpty(ar)) {
String[] ar2 = ar.split("=");
if (ar2.length == 2) {
caMap.put(ar2[0], Integer.valueOf(ar2[1]));
caMap.put(ar2[0].toUpperCase(), Integer.valueOf(ar2[1]));
}
}
}
......
......@@ -632,7 +632,7 @@ public class BaseDeviceHandler implements IDeviceHandler {
* @param posId
* @param exTime
*/
private void updatePosExecuteTime(String posId, double exTime) {
protected void updatePosExecuteTime(String posId, double exTime) {
if (posId == null || exTime <= 0) {
return;
}
......@@ -653,7 +653,7 @@ public class BaseDeviceHandler implements IDeviceHandler {
/**
* 入仓位完成
*/
private void updatePutInData(DataLog task) throws ValidateException {
protected void updatePutInData(DataLog task) throws ValidateException {
//从队列里面移除操作
taskService.removeQueueTask(task);
......
......@@ -7,7 +7,10 @@ import com.google.common.collect.Maps;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.core.barcode.bean.CodeBean;
import com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.bean.BoxStatusBean;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.enums.BOX_STATUS;
......@@ -26,6 +29,7 @@ import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
......@@ -262,6 +266,10 @@ public class RobotBoxHandler extends BaseDeviceHandler {
try {
Barcode barcode = codeResolve.resolveOneValideBarcode(code);
for (DataLog dataLog : taskService.getQueueTasks()) {
//已取消或已完成的任务不返回
if(dataLog.isFinished()||dataLog.isCancel()){
continue;
}
if (dataLog.getBarcode().equals(barcode.getBarcode())) {
if (dataLog.isPutInTask()) {
//已有入库任务
......@@ -419,7 +427,7 @@ public class RobotBoxHandler extends BaseDeviceHandler {
String barcode = request.getParameter("barcode");
String statusStr = request.getParameter("status");
String locInfo = request.getParameter("locInfo");
log.debug("收到料盘[" + barcode + "]更新位置指令[" + statusStr + "]=" + locInfo);
log.info("收到taskId["+taskId+"],料盘[" + barcode + "]更新位置指令[" + statusStr + "]=" + locInfo);
if (ObjectUtil.isEmpty(locInfo)) {
locInfo = statusStr;
......@@ -427,11 +435,30 @@ public class RobotBoxHandler extends BaseDeviceHandler {
DataLog opTask = null;
List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog task : allTasks) {
if (task.getId().equals(taskId) && task.getBarcode().equals(barcode)) {
if(task.isFinished()){
continue;
}
if(ObjectUtil.isNotEmpty(task)&&task.getId().equals(taskId)) {
opTask = task;
break;
}
else if (ObjectUtil.isNotEmpty(barcode) && task.getBarcode().equals(barcode)) {
opTask = task;
break;
}
}
//如果任务为空,重新查找已完成的任务
if(opTask == null) {
for (DataLog task : allTasks) {
if (ObjectUtil.isNotEmpty(task) && task.getId().equals(taskId)) {
opTask = task;
break;
} else if (ObjectUtil.isNotEmpty(barcode) && task.getBarcode().equals(barcode)) {
opTask = task;
break;
}
}
}
if (opTask == null) {
return ResultBean.newErrorResult(301, "smfcore.task.notExist", "任务不存在");
}
......@@ -470,6 +497,9 @@ public class RobotBoxHandler extends BaseDeviceHandler {
if (opTask.isPutInTask()) {
taskService.updateQueueTask(opTask);
} else {
if(opTask.isFinished()) {
taskService.removeQueueTask(opTask);
}
taskService.updateFinishedTask(opTask);
}
......@@ -545,6 +575,55 @@ public class RobotBoxHandler extends BaseDeviceHandler {
}
@Autowired
private CodeResolve codeResolve;
@ApiOperation("获取条码尺寸")
@PostMapping(value = "/service/store/robotBox/getSize")
@ResponseBody
@AnonymousAccess
public ResultBean getSize(HttpServletRequest request) {
try {
String barcodeStr = request.getParameter("barcode");
log.info(" 获取[" + barcodeStr + "]的尺寸信息");
Collection<CodeBean> codeBeans = codeResolve.resolveCodeStr(barcodeStr, COMPONENT_TYPE.COMPONENT);
;
Barcode barcode = null;
for (CodeBean codeBean : codeBeans) {
if (codeBean.isValid()) {
if (barcode != null) {
String msg = "获取尺寸时找到多个有效条码";
return ResultBean.newErrorResult(105, "smfcore.getSize.error", "获取" + barcodeStr + "尺寸失败:有多个条码");
} else {
barcode = codeBean.getBarcode();
}
}
}
if (barcode == null) {
return ResultBean.newErrorResult(105, "smfcore.getSize.error", "获取" + barcodeStr + "尺寸失败:未找到有效条码");
}
if (barcode.getPlateSize() > 0 && barcode.getHeight() > 0) {
Map<String, String> returnData = new HashMap<>();
returnData.put("barcode", barcode.getBarcode());
returnData.put("plateW", barcode.getPlateSize() + "");
returnData.put("plateH", barcode.getHeight() + "");
return ResultBean.newOkResult(returnData);
} else {
return ResultBean.newErrorResult(105, "smfcore.getSize.error", "获取" + barcodeStr + "尺寸失败:未找到对应尺寸");
}
} catch (ValidateException e) {
log.warn(" 获取尺寸信息出错:" + e.getMessage());
return ResultBean.newErrorResult(105, "smfcore.getSize.error", "获取尺寸信息出错:" + e.getMessage());
} catch (Exception e) {
log.error("获取尺寸信息出错", e);
return ResultBean.newErrorResult(1, "smfcore.getSize.error", "获取尺寸信息出错:" + e.getMessage());
}
}
......
......@@ -3,6 +3,7 @@ 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.common.utils.ReelLockPosUtil;
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;
......@@ -154,15 +155,24 @@ public class ThirdBoxHandler extends BaseDeviceHandler{
int status = boxStatus.getStatus();
String posName = boxStatus.getPosId();
String barcode=boxStatus.getBarcode();
Map<String,Integer> posCapMap= boxStatus.getCapacity();
int executeTime = boxStatus.getExecuteTime();
if ((!Strings.isNullOrEmpty(posName))||(!Strings.isNullOrEmpty(barcode))) {//客户端发一次完成之后,会发空的 posName,不需要处理
if (BOX_STATUS.IN_FINISHED == status) {//入仓完成
finishedPutIn(statusBean.getCid(), posName,barcode, executeTime);
thirdBoxFinishedPutIn(statusBean.getCid(),posCapMap, 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) {//出库完成(放到仓门口
try{
//麦康尼料仓不发OUT_FINISHED,收到OutEnd的时候处理
finishedOutPos(statusBean.getCid(), posName,barcode, executeTime);
}catch (Exception ex){
}
//更改出库状态为OUT_DOOR
List<DataLog> finishedTasks = taskService.getFinishedTasks();
for (DataLog finishedTask : finishedTasks) {
......@@ -207,6 +217,47 @@ public class ThirdBoxHandler extends BaseDeviceHandler{
}
return statusBean;
}
protected void thirdBoxFinishedPutIn(String cid, Map<String,Integer> posCapMap,String posName,String barcode,int executeTime) throws ValidateException {
DataLog task = taskService.findExecutingTask(cid, posName, barcode);
if (task != null && task.isPutInTask()) {
//对比容量,更新库位号
if (executeTime > 0) {
task.setExecuteTime(executeTime);
updatePosExecuteTime(task.getPosName(), executeTime);
}
log.info(task.getBarcode() + "入仓位[" + task.getPosName() + "]完成,执行时间[" + executeTime + "]秒");
ReelLockPosUtil.removeReelLockPosInfo(task.getBarcode());
DataLog cancelTask = taskService.findFinishedPutInTask(cid, task.getPosName(), task.getBarcode());
if (cancelTask != null && cancelTask.isCancel()) {
//将相同库位已经取消的任务从完成队列里删除
taskService.removeFinishedTask(cancelTask);
log.info("从已完成的任务列表中删除之前取消的任务:" + cancelTask.getPosName() + " ReelId:" + cancelTask.getBarcode());
}
updatePutInData(task);
} else {
//从已完成列表中找,如果还找不到就忽略
task = taskService.findFinishedPutInTask(cid, posName, barcode);
if (task != null && task.isPutInTask()) {
if (task.isCancel()) {//被取消的任务,客户端发完成信号过来,修改取消状态为已完成
if (executeTime > 0) {
task.setExecuteTime(executeTime);
updatePosExecuteTime(task.getPosName(), executeTime);
}
log.info(task.getBarcode() + "入仓位[" + task.getPosName() + "]完成,但任务已被取消,修改为完成,执行时间[" + executeTime + "]秒");
updatePutInData(task);
}
} else {
log.error(cid + "入仓位[" + posName + "]ReelId[" + barcode + "]完成时任务不存在");
}
}
}
@Override
public DeviceType getDeviceType() {
return DeviceType.SMDBOX_THIRD;
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!