Commit a824869c LN

料架类型CODESHELF改为NLP

1 个父辈 b3407e28
package com.neotel.smfcore.core.device.handler.impl;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.base.Strings;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.api.CodeValidateParam;
import com.neotel.smfcore.core.device.api.IOpAuthApi;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.inList.util.InListCache;
import com.neotel.smfcore.core.order.enums.ORDER_COLOR;
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.StoragePos;
import com.neotel.smfcore.core.system.bean.OrderSetting;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.core.system.websocket.MsgType;
import com.neotel.smfcore.core.system.websocket.SocketMsg;
import com.neotel.smfcore.core.system.websocket.WebSocketServer;
import com.neotel.smfcore.security.TokenProvider;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.*;
@Api(tags = "SHELF: NLP感应料架")
@RestController
@Slf4j
public class NLPShelfHandler extends BaseDeviceHandler{
@Autowired
private TokenProvider tokenProvider;
public NLPShelfHandler(List<IOpAuthApi> apiList) {
super(apiList);
}
/**
* 扫码
*/
@ApiOperation("扫码入库")
@PostMapping("/api/sensorShelf/codeIn")
@PreAuthorize("@el.check('sensorShelf:putIn')")
public ResultBean codeIn( @RequestBody Map<String, String> mapValues,HttpServletRequest request) {
String code = mapValues.get("code");
String groupId = mapValues.get("group");
String storageId=mapValues.get("storageId");
String sourceId=mapValues.get("sourceId");
String token = tokenProvider.getToken(request);
if(ObjectUtils.isEmpty(code)){
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"code"});
}
if(groupId==null&&storageId==null){
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"group"});
}
if(groupId==null&&storageId!=null){
Storage storage=dataCache.getStorageById(storageId);
if(storage!=null){
groupId=storage.getGroupId();
}
}
if(groupId!=null&&groupId.equals("-1")){
groupId="";
}
// WebSocketServer.sendMsg("", new SocketMsg("这是一个webSocket消息:"+code, MsgType.INFO));
String loginUser = SecurityUtils.getLoginUsername();
Collection<DataLog> queueTasks = taskService.getQueueTasks();
ResultBean resultBean = null;
for (DataLog queueTask : queueTasks) {
if (queueTask.isPutInTask() && queueTask.isWait()) {
if (!Strings.isNullOrEmpty(groupId) && queueTask.getGroupId().equals(groupId)) {
log.info("codeIn [" + code + "][" + groupId + "]入库失败:条码[" + queueTask.getBarcode() + "]的任务还未结束 ");
throw new ValidateException("smfcore.unfinished", "the task of [{0}] is unfinished", new String[]{queueTask.getBarcode()});
}
if (!Strings.isNullOrEmpty(storageId) && queueTask.getStorageId().equals(storageId)) {
log.info("codeIn [" + code + "][" + storageId + "]入库失败:条码[" + queueTask.getBarcode() + "]的任务还未结束 ");
throw new ValidateException("smfcore.unfinished", "the task of [{0}] is unfinished", new String[]{queueTask.getBarcode()});
}
}
}
Barcode barcodeSave = resolveBarcodeFromApiForShelf(new CodeValidateParam( loginUser,groupId,storageId,code,token));
if(barcodeSave == null){
barcodeSave = codeResolve.resolveOneValideBarcode("=1x1="+code);
}
Date expireDate = barcodeSave.getExpireDate();
if (expireDate != null) {
if (System.currentTimeMillis() > expireDate.getTime()) {
throw new ValidateException("smfcore.error.barcode.expired", "物料已过期,无法入库.");
}
}
//从API验证
Barcode verResult = verifyPutInFromApi(barcodeSave);
if(verResult==null){
return testPutIn(loginUser,groupId,storageId, barcodeSave,token);
}
// resultBean = hellaServiceHandler.checkMaterial(loginUser, groupId, code);
return ResultBean.newOkResult("");
}
private ResultBean testPutIn(String loginUser, String groupId,String storageId,Barcode barcode,String token) {
// CodeBean codeBean = codeResolve.resolveSingleCode(codeStr);
if (barcode == null || barcode.getBarcode() == null) {
return ResultBean.newErrorResult(1, "smfcore.error.barcode.invalid", "条码无效");
}
String pn = barcode.getPartNumber();
String reelId = barcode.getBarcode();
String num = barcode.getAmount() + "";
Integer qty = barcode.getAmount();
String msl = barcode.getMsl();
try {
//需要模拟一个库位
DataLog dataLog = new DataLog();
dataLog.setBarcode(reelId);
dataLog.setPartNumber(pn);
dataLog.setType(OP.PUT_IN);
barcode.setPutInTime(System.currentTimeMillis());
barcodeManager.saveBarcode(barcode);
dataLog.setNum(barcode.getAmount());
dataLog.setStatus(OP_STATUS.WAIT.name());
dataLog.setGroupId(groupId);
dataLog.setStorageId(storageId);
dataLog.setMemo(barcode.getMemo());
dataLog.setOperator(loginUser);
if (ObjectUtil.isNotEmpty(storageId)) {
Storage storage = dataCache.getStorageById(storageId);
if (storage != null) {
dataLog.setCid(storage.getCid());
dataLog.setStorageName(storage.getName());
}
}
try {
taskService.addTaskToExecute(dataLog);
} catch (Exception e) {
WebSocketServer.sendMsg(token, new SocketMsg(e.getMessage(), MsgType.INFO));
}
} catch (ValidateException e) {
log.error(e.toString());
return ResultBean.newErrorResult(1, e.getMsgKey(), e.getDefaultMsg());
}
return ResultBean.newOkResult("");
}
/**
* 从API接口解析条码,通常料架使用(其他设备会有尺寸信息且会有多个条码所以不适用此方法)
*/
protected Barcode resolveBarcodeFromApiForShelf(CodeValidateParam param) throws ValidateException{
for (IOpAuthApi opAuthApi : opAuthApiList) {
Barcode responseBarcode = opAuthApi.resolveBarcode(param);
if(responseBarcode != null){
return responseBarcode;
}
}
return null;
}
@Override
public StatusBean handleClientRequest(StatusBean statusBean, HttpServletRequest request) {
handleMsg(statusBean);
statusBean = saveAlarmAndHumidity(statusBean);
OrderSetting orderSetting = dataCache.getOrderSetting();
boolean openZhiYin = orderSetting.getShelfLightType().equals(1);
Map<String, List<DataLog>> outMap = new HashMap<>();
//亮灯
Collection<DataLog> queueTasks = taskService.getQueueTasks(statusBean.getCid());
for (DataLog queueTask : queueTasks) {
if(queueTask.isWait()){
queueTask.setStatus(OP_STATUS.EXECUTING.name());
taskService.updateQueueTask(queueTask);
String rgb = queueTask.getLightColor();
ORDER_COLOR color = ORDER_COLOR.fromRgb(rgb);
if(color == null){
if(queueTask.isPutInTask()){
color = ORDER_COLOR.DARKGREEN;
}else{
if (openZhiYin && ObjectUtil.isNotEmpty(queueTask.getSourceId())) {
List<DataLog> dataLogList = outMap.get(queueTask.getSourceId());
if (dataLogList == null) {
dataLogList = new ArrayList<>();
}
dataLogList.add(queueTask);
outMap.put(queueTask.getSourceId(), dataLogList);
} else {
color = ORDER_COLOR.BLUE;
}
}
}
statusBean.addData("open",queueTask.getPosName()+"="+color.name());
log.info("库位["+queueTask.getPosName()+"]+亮灯:" + color.name());
}
// else if(queueTask.isCancel()){
// if(queueTask.isCheckOutTask()){
//
// statusBean.addData("open",queueTask.getPosName()+"="+"orange" );
// log.info("库位["+queueTask.getPosName()+"]+取消:open=orange" );
// //从任务列表中删除
// taskService.removeFinishedTask(queueTask);
// }
// }
}
List<DataLog> dataLogs = getLightGuideTask(outMap);
for (DataLog task :
dataLogs) {
statusBean.addData("open", task.getPosName() + "=" + ORDER_COLOR.fromRgb(task.getLightColor()).name());
}
return statusBean;
}
/**
* 客户端sensor变化
*/
@RequestMapping("/service/store/sensorShelf/sensorChange")
@ResponseBody
@AnonymousAccess
public ResultBean sensorChange(HttpServletRequest request, HttpSession httpSession){
String cid = request.getParameter("cid");
Storage storage = dataCache.getStorage(cid);
if(storage == null){
return ResultBean.newErrorResult(-1,"smfcore.shelfNotExist", "{0}对应的料架不存在",new String[]{cid} );
}
String groupId = storage.getGroupId();
// String groupName = "";
// Group group = groupManager.get(groupId);
// if(group != null){
// groupName = group.getGroupName();
// }
if(groupId.equals("")){
groupId="-1";
}
String[] hasReelPosList = request.getParameterValues("hasReelPosList");
String[] noReelPosList = request.getParameterValues("noReelPosList");
String[] hasReelPosErrorList = request.getParameterValues("hasReelPosErrorList");//实际信号有料,数据库无信息
String[] noReelPosErrorList = request.getParameterValues("noReelPosErrorList");//实际信号无料,数据库有信息
if(hasReelPosErrorList==null){
hasReelPosErrorList=new String[]{};
}
if(noReelPosErrorList==null) {
noReelPosErrorList = new String[]{};
}
List<String> ngToOk=new ArrayList<>();
// //数据库无信息,实际有料
// if(hasReelPosErrorList.length>0){
// Query query=new Query(Criteria.where("posName").in(hasReelPosErrorList));
// List<StoragePos> posList= storagePosManager.findByQuery(query);
// for (StoragePos pos:posList
// ) {
// if(pos.isUsed()){
// ngToOk.add(pos.getPosName());
// log.info("sensorChange 客户端上传 hasReelPosErrorList 库位["+pos.getPosName()+"]数据库有信息,放入ngToOk");
// }
// }
// }
//数据库有信息,实际无料
if(noReelPosErrorList.length>0){
Query query=new Query(Criteria.where("posName").in(noReelPosErrorList ));
List<StoragePos> posList= storagePosManager.findByQuery(query);
for (StoragePos pos:posList
) {
if(!pos.isUsed()){
ngToOk.add(pos.getPosName());
log.info("sensorChange 客户端上传 noReelPosErrorList 库位["+pos.getPosName()+"]数据库无信息,放入ngToOk");
}
}
}
List<List<String>> data=new ArrayList<>();
data.add(Arrays.asList(hasReelPosErrorList) );
data.add(Arrays.asList(noReelPosErrorList));
DevicesStatusUtil.updateDeviceData(cid,data);
List<String> inOkList = new ArrayList<>();
List<String> inNgList = new ArrayList<>();
List<String> outOkList = new ArrayList<>();
List<String> outNgList = new ArrayList<>();
if(hasReelPosList != null){
//入库的库位列表
if(hasReelPosList.length > 1){
String msg = "不可同时放入多盘物料:"+ String.join(",",hasReelPosList);
log.error(msg);
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR));
for (String posStr : hasReelPosList) {
inNgList.add(posStr);
}
}else{
StoragePos pos = storagePosManager.getByPosName(hasReelPosList[0]);
if(pos == null){
String msg = "未找到库位:"+String.join(",",hasReelPosList) ;
log.error(msg);
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR));
}
else if(!pos.getStorageId().equals(storage.getId())){
String msg = "["+storage.getName()+"]未找到库位:"+String.join(",",hasReelPosList) ;
log.error(msg);
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR));
}
//如果库位有料,直接结束
else if(pos.getBarcode()!=null) {
log.info("料架[" + cid + "]入库库位[" + pos.getPosName() + "]已有料: [" + pos.getBarcode().getBarcode() + "]");
}
else{
Collection<DataLog> queueTasks = taskService.getQueueTasks();
for (DataLog queueTask : queueTasks) {
boolean isPutInTask=false;
if(ObjectUtil.isNotEmpty(queueTask.getStorageId()) ){
if(queueTask.isPutInTask()&&queueTask.getStorageId().equals(storage.getId())){
isPutInTask=true;
}
}
else if(queueTask.isPutInTask() && queueTask.getGroupId().equals(groupId)) {
isPutInTask = true;
}
if(isPutInTask) {
queueTask.setCid(cid);
queueTask.setPosId(pos.getId());
queueTask.setPosName(pos.getPosName());
queueTask.setStorageId(storage.getId());
queueTask.setStorageName(storage.getName());
try {
//入库完成,发送入库完成请求
super.finishedPutIn(cid, pos.getPosName());
inOkList.add(hasReelPosList[0]);
String msg = queueTask.getBarcode() + "入库到" + pos.getPosName() + "成功";
log.error(msg);
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.INFO));
break;
} catch (Exception e) {
log.error("入库出错", e);
return ResultBean.newErrorResult(-1, "smfcore.inputError", "入库出错:{0}", new String[]{e.getMessage()});
}
}
}
if(inOkList.size() == 0){
inNgList.add(hasReelPosList[0]);
log.error("未找到["+pos.getPosName()+"]的入库任务");
}
}
}
}
if(noReelPosList != null){
//出库
for (String posName : noReelPosList) {
StoragePos pos = storagePosManager.getByPosName(posName);
if(pos == null){
String msg = "未找到库位:"+String.join(",",hasReelPosList) ;
log.error(msg);
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR));
}
else if(!pos.getStorageId().equals(storage.getId())){
String msg = "["+storage.getName()+"]未找到库位:"+String.join(",",hasReelPosList) ;
log.error(msg);
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR));
}else if(pos.getBarcode()==null){
log.info("料架[" + cid + "]出库库位[" + pos.getPosName() + "]已为空 ");
}else{
String outResult = "";
Collection<DataLog> queueTasks = taskService.getQueueTasks();
for (DataLog queueTask : queueTasks) {
if(queueTask.isCheckOutTask() && queueTask.getPosName().equals(posName)){
//出库完成
try {
outResult = posName;
super.finishedOutPos(cid,posName);
String msg = queueTask.getBarcode()+ "从"+ posName+"出库成功";
log.error(msg);
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.INFO));
break;
} catch (Exception e) {
log.error("出库出错",e);
return ResultBean.newErrorResult(-1,"smfcore.checkoutError","出库出错:{0}" ,new String[]{ e.getMessage()});
}
}
}
if(outResult.isEmpty()){
outNgList.add(posName);
String msg = "未找到["+posName+"]的出库任务";
log.error(msg);
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR));
}else{
outOkList.add(outResult);
}
}
}
}
Map<String,List<String>> dataMap = new HashMap<>();
dataMap.put("inOkList",inOkList);
dataMap.put("inNgList",inNgList);
dataMap.put("outOkList",outOkList);
dataMap.put("outNgList",outNgList);
dataMap.put("ngToOk",ngToOk);
return ResultBean.newOkResult(dataMap);
}
/**
* 获取料架的库位占用及出库任务
*/
@RequestMapping("/service/store/sensorShelf/shelfStatus")
@ResponseBody
@AnonymousAccess
public ResultBean shelfStatus(HttpServletRequest request){
String cid = request.getParameter("cid");
Storage storage = dataCache.getStorage(cid);
List<StoragePos> allPos = storagePosManager.findNotEmptyByStorageId(storage.getId());
List<String> posList = new ArrayList<>();
for (StoragePos pos : allPos) {
posList.add(pos.getPosName());
}
List<String> outTaskPosList = new ArrayList<>();
Collection<DataLog> queueTasks = taskService.getQueueTasks(cid);
for (DataLog task : queueTasks) {
if(task.isCheckOutTask()){
String rgb = task.getLightColor();
ORDER_COLOR color = ORDER_COLOR.fromRgb(rgb);
if(color == null){
color = ORDER_COLOR.BLUE;
}
String outTaskPos = task.getPosName()+"="+color.name();
outTaskPosList.add(outTaskPos);
}
}
Map<String,List<String>> dataMap = new HashMap<>();
dataMap.put("hasReelPosList",posList);
dataMap.put("outTaskList",outTaskPosList);
return ResultBean.newOkResult(dataMap);
}
/**
* 获取料架的库位占用情况
*/
@RequestMapping("/service/store/sensorShelf/hasReelPosList")
@ResponseBody
@AnonymousAccess
public ResultBean checkAll(HttpServletRequest request){
String cid = request.getParameter("cid");
Storage storage = dataCache.getStorage(cid);
List<StoragePos> allPos = storagePosManager.findNotEmptyByStorageId(storage.getId());
List<String> posList = new ArrayList<>();
for (StoragePos pos : allPos) {
posList.add(pos.getPosName());
}
return ResultBean.newOkResult(posList);
}
@Override
public DeviceType getDeviceType() {
return DeviceType.NLP;
}
}
...@@ -64,437 +64,437 @@ public class SensorShelfHandler extends BaseDeviceHandler { ...@@ -64,437 +64,437 @@ public class SensorShelfHandler extends BaseDeviceHandler {
super(apiList); super(apiList);
} }
/** // /**
* 扫码 // * 扫码
*/ // */
@ApiOperation("扫码入库") // @ApiOperation("扫码入库")
@PostMapping("/api/sensorShelf/codeIn") // @PostMapping("/api/sensorShelf/codeIn")
@PreAuthorize("@el.check('sensorShelf:putIn')") // @PreAuthorize("@el.check('sensorShelf:putIn')")
public ResultBean codeIn( @RequestBody Map<String, String> mapValues,HttpServletRequest request) { // public ResultBean codeIn( @RequestBody Map<String, String> mapValues,HttpServletRequest request) {
String code = mapValues.get("code"); // String code = mapValues.get("code");
String groupId = mapValues.get("group"); // String groupId = mapValues.get("group");
String storageId=mapValues.get("storageId"); // String storageId=mapValues.get("storageId");
String sourceId=mapValues.get("sourceId"); // String sourceId=mapValues.get("sourceId");
String token = tokenProvider.getToken(request); // String token = tokenProvider.getToken(request);
if(ObjectUtils.isEmpty(code)){ // if(ObjectUtils.isEmpty(code)){
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"code"}); // throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"code"});
} // }
if(groupId==null&&storageId==null){ // if(groupId==null&&storageId==null){
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"group"}); // throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"group"});
} // }
if(groupId==null&&storageId!=null){ // if(groupId==null&&storageId!=null){
Storage storage=dataCache.getStorageById(storageId); // Storage storage=dataCache.getStorageById(storageId);
if(storage!=null){ // if(storage!=null){
groupId=storage.getGroupId(); // groupId=storage.getGroupId();
} // }
} // }
if(groupId!=null&&groupId.equals("-1")){ // if(groupId!=null&&groupId.equals("-1")){
groupId=""; // groupId="";
} // }
// WebSocketServer.sendMsg("", new SocketMsg("这是一个webSocket消息:"+code, MsgType.INFO)); //// WebSocketServer.sendMsg("", new SocketMsg("这是一个webSocket消息:"+code, MsgType.INFO));
String loginUser = SecurityUtils.getLoginUsername(); // String loginUser = SecurityUtils.getLoginUsername();
Collection<DataLog> queueTasks = taskService.getQueueTasks(); // Collection<DataLog> queueTasks = taskService.getQueueTasks();
ResultBean resultBean = null; // ResultBean resultBean = null;
for (DataLog queueTask : queueTasks) { // for (DataLog queueTask : queueTasks) {
if (queueTask.isPutInTask() && queueTask.isWait()) { // if (queueTask.isPutInTask() && queueTask.isWait()) {
if (!Strings.isNullOrEmpty(groupId) && queueTask.getGroupId().equals(groupId)) { // if (!Strings.isNullOrEmpty(groupId) && queueTask.getGroupId().equals(groupId)) {
log.info("codeIn [" + code + "][" + groupId + "]入库失败:条码[" + queueTask.getBarcode() + "]的任务还未结束 "); // log.info("codeIn [" + code + "][" + groupId + "]入库失败:条码[" + queueTask.getBarcode() + "]的任务还未结束 ");
throw new ValidateException("smfcore.unfinished", "the task of [{0}] is unfinished", new String[]{queueTask.getBarcode()}); // throw new ValidateException("smfcore.unfinished", "the task of [{0}] is unfinished", new String[]{queueTask.getBarcode()});
} // }
if (!Strings.isNullOrEmpty(storageId) && queueTask.getStorageId().equals(storageId)) { // if (!Strings.isNullOrEmpty(storageId) && queueTask.getStorageId().equals(storageId)) {
log.info("codeIn [" + code + "][" + storageId + "]入库失败:条码[" + queueTask.getBarcode() + "]的任务还未结束 "); // log.info("codeIn [" + code + "][" + storageId + "]入库失败:条码[" + queueTask.getBarcode() + "]的任务还未结束 ");
throw new ValidateException("smfcore.unfinished", "the task of [{0}] is unfinished", new String[]{queueTask.getBarcode()}); // throw new ValidateException("smfcore.unfinished", "the task of [{0}] is unfinished", new String[]{queueTask.getBarcode()});
} // }
} // }
} // }
Barcode barcodeSave = resolveBarcodeFromApiForShelf(new CodeValidateParam( loginUser,groupId,storageId,code,token));
if(barcodeSave == null){
barcodeSave = codeResolve.resolveOneValideBarcode("=1x1="+code);
}
Date expireDate = barcodeSave.getExpireDate();
if (expireDate != null) {
if (System.currentTimeMillis() > expireDate.getTime()) {
throw new ValidateException("smfcore.error.barcode.expired", "物料已过期,无法入库.");
}
}
//从API验证
Barcode verResult = verifyPutInFromApi(barcodeSave);
if(verResult==null){
return testPutIn(loginUser,groupId,storageId, barcodeSave,token);
}
// resultBean = hellaServiceHandler.checkMaterial(loginUser, groupId, code);
return ResultBean.newOkResult("");
}
private ResultBean testPutIn(String loginUser, String groupId,String storageId,Barcode barcode,String token) {
// CodeBean codeBean = codeResolve.resolveSingleCode(codeStr);
if (barcode == null || barcode.getBarcode() == null) {
return ResultBean.newErrorResult(1, "smfcore.error.barcode.invalid", "条码无效");
}
String pn = barcode.getPartNumber();
String reelId = barcode.getBarcode();
String num = barcode.getAmount() + "";
Integer qty = barcode.getAmount();
String msl = barcode.getMsl();
try {
//需要模拟一个库位
DataLog dataLog = new DataLog();
dataLog.setBarcode(reelId);
dataLog.setPartNumber(pn);
dataLog.setType(OP.PUT_IN);
barcode.setPutInTime(System.currentTimeMillis());
barcodeManager.saveBarcode(barcode);
dataLog.setNum(barcode.getAmount());
dataLog.setStatus(OP_STATUS.WAIT.name());
dataLog.setGroupId(groupId);
dataLog.setStorageId(storageId);
dataLog.setMemo(barcode.getMemo());
dataLog.setOperator(loginUser);
if (ObjectUtil.isNotEmpty(storageId)) {
Storage storage = dataCache.getStorageById(storageId);
if (storage != null) {
dataLog.setCid(storage.getCid());
dataLog.setStorageName(storage.getName());
}
}
try {
taskService.addTaskToExecute(dataLog);
} catch (Exception e) {
WebSocketServer.sendMsg(token, new SocketMsg(e.getMessage(), MsgType.INFO));
}
} catch (ValidateException e) {
log.error(e.toString());
return ResultBean.newErrorResult(1, e.getMsgKey(), e.getDefaultMsg());
}
return ResultBean.newOkResult("");
}
/**
* 从API接口解析条码,通常料架使用(其他设备会有尺寸信息且会有多个条码所以不适用此方法)
*/
protected Barcode resolveBarcodeFromApiForShelf(CodeValidateParam param) throws ValidateException{
for (IOpAuthApi opAuthApi : opAuthApiList) {
Barcode responseBarcode = opAuthApi.resolveBarcode(param);
if(responseBarcode != null){
return responseBarcode;
}
}
return null;
}
@Override
public StatusBean handleClientRequest(StatusBean statusBean, HttpServletRequest request) {
handleMsg(statusBean);
statusBean = saveAlarmAndHumidity(statusBean);
OrderSetting orderSetting = dataCache.getOrderSetting();
boolean openZhiYin = orderSetting.getShelfLightType().equals(1);
Map<String, List<DataLog>> outMap = new HashMap<>();
//亮灯
Collection<DataLog> queueTasks = taskService.getQueueTasks(statusBean.getCid());
for (DataLog queueTask : queueTasks) {
if(queueTask.isWait()){
queueTask.setStatus(OP_STATUS.EXECUTING.name());
taskService.updateQueueTask(queueTask);
String rgb = queueTask.getLightColor();
ORDER_COLOR color = ORDER_COLOR.fromRgb(rgb);
if(color == null){
if(queueTask.isPutInTask()){
color = ORDER_COLOR.DARKGREEN;
}else{
if (openZhiYin && ObjectUtil.isNotEmpty(queueTask.getSourceId())) {
List<DataLog> dataLogList = outMap.get(queueTask.getSourceId());
if (dataLogList == null) {
dataLogList = new ArrayList<>();
}
dataLogList.add(queueTask);
outMap.put(queueTask.getSourceId(), dataLogList);
} else {
color = ORDER_COLOR.BLUE;
}
}
}
statusBean.addData("open",queueTask.getPosName()+"="+color.name());
log.info("库位["+queueTask.getPosName()+"]+亮灯:" + color.name());
}
// else if(queueTask.isCancel()){
// if(queueTask.isCheckOutTask()){
// //
// statusBean.addData("open",queueTask.getPosName()+"="+"orange" ); // Barcode barcodeSave = resolveBarcodeFromApiForShelf(new CodeValidateParam( loginUser,groupId,storageId,code,token));
// log.info("库位["+queueTask.getPosName()+"]+取消:open=orange" ); // if(barcodeSave == null){
// //从任务列表中删除 // barcodeSave = codeResolve.resolveOneValideBarcode("=1x1="+code);
// taskService.removeFinishedTask(queueTask);
// } // }
//
// Date expireDate = barcodeSave.getExpireDate();
// if (expireDate != null) {
// if (System.currentTimeMillis() > expireDate.getTime()) {
// throw new ValidateException("smfcore.error.barcode.expired", "物料已过期,无法入库.");
// } // }
} // }
//
List<DataLog> dataLogs = getLightGuideTask(outMap); // //从API验证
for (DataLog task : // Barcode verResult = verifyPutInFromApi(barcodeSave);
dataLogs) { //
statusBean.addData("open", task.getPosName() + "=" + ORDER_COLOR.fromRgb(task.getLightColor()).name()); // if(verResult==null){
} // return testPutIn(loginUser,groupId,storageId, barcodeSave,token);
// }
return statusBean; //// resultBean = hellaServiceHandler.checkMaterial(loginUser, groupId, code);
} // return ResultBean.newOkResult("");
// }
/** //
* 客户端sensor变化 // private ResultBean testPutIn(String loginUser, String groupId,String storageId,Barcode barcode,String token) {
*/ //
@RequestMapping("/service/store/sensorShelf/sensorChange") //// CodeBean codeBean = codeResolve.resolveSingleCode(codeStr);
@ResponseBody // if (barcode == null || barcode.getBarcode() == null) {
@AnonymousAccess // return ResultBean.newErrorResult(1, "smfcore.error.barcode.invalid", "条码无效");
public ResultBean sensorChange(HttpServletRequest request, HttpSession httpSession){ // }
String cid = request.getParameter("cid"); //
Storage storage = dataCache.getStorage(cid); // String pn = barcode.getPartNumber();
if(storage == null){ // String reelId = barcode.getBarcode();
return ResultBean.newErrorResult(-1,"smfcore.shelfNotExist", "{0}对应的料架不存在",new String[]{cid} ); // String num = barcode.getAmount() + "";
} // Integer qty = barcode.getAmount();
String groupId = storage.getGroupId(); // String msl = barcode.getMsl();
// String groupName = ""; // try {
// Group group = groupManager.get(groupId); //
// if(group != null){ // //需要模拟一个库位
// groupName = group.getGroupName(); //
// } // DataLog dataLog = new DataLog();
if(groupId.equals("")){ // dataLog.setBarcode(reelId);
groupId="-1"; // dataLog.setPartNumber(pn);
} // dataLog.setType(OP.PUT_IN);
String[] hasReelPosList = request.getParameterValues("hasReelPosList"); //
String[] noReelPosList = request.getParameterValues("noReelPosList"); // barcode.setPutInTime(System.currentTimeMillis());
// barcodeManager.saveBarcode(barcode);
//
String[] hasReelPosErrorList = request.getParameterValues("hasReelPosErrorList");//实际信号有料,数据库无信息 // dataLog.setNum(barcode.getAmount());
String[] noReelPosErrorList = request.getParameterValues("noReelPosErrorList");//实际信号无料,数据库有信息 // dataLog.setStatus(OP_STATUS.WAIT.name());
if(hasReelPosErrorList==null){ // dataLog.setGroupId(groupId);
hasReelPosErrorList=new String[]{}; // dataLog.setStorageId(storageId);
} // dataLog.setMemo(barcode.getMemo());
if(noReelPosErrorList==null) { // dataLog.setOperator(loginUser);
noReelPosErrorList = new String[]{}; // if (ObjectUtil.isNotEmpty(storageId)) {
} // Storage storage = dataCache.getStorageById(storageId);
List<String> ngToOk=new ArrayList<>(); // if (storage != null) {
// dataLog.setCid(storage.getCid());
// //数据库无信息,实际有料 // dataLog.setStorageName(storage.getName());
// if(hasReelPosErrorList.length>0){ // }
// Query query=new Query(Criteria.where("posName").in(hasReelPosErrorList)); // }
// try {
// taskService.addTaskToExecute(dataLog);
// } catch (Exception e) {
// WebSocketServer.sendMsg(token, new SocketMsg(e.getMessage(), MsgType.INFO));
// }
//
//
// } catch (ValidateException e) {
// log.error(e.toString());
// return ResultBean.newErrorResult(1, e.getMsgKey(), e.getDefaultMsg());
// }
// return ResultBean.newOkResult("");
// }
//
// /**
// * 从API接口解析条码,通常料架使用(其他设备会有尺寸信息且会有多个条码所以不适用此方法)
// */
// protected Barcode resolveBarcodeFromApiForShelf(CodeValidateParam param) throws ValidateException{
// for (IOpAuthApi opAuthApi : opAuthApiList) {
// Barcode responseBarcode = opAuthApi.resolveBarcode(param);
// if(responseBarcode != null){
// return responseBarcode;
// }
// }
// return null;
// }
//
//
// @Override
// public StatusBean handleClientRequest(StatusBean statusBean, HttpServletRequest request) {
// handleMsg(statusBean);
// statusBean = saveAlarmAndHumidity(statusBean);
//
// OrderSetting orderSetting = dataCache.getOrderSetting();
// boolean openZhiYin = orderSetting.getShelfLightType().equals(1);
// Map<String, List<DataLog>> outMap = new HashMap<>();
//
// //亮灯
// Collection<DataLog> queueTasks = taskService.getQueueTasks(statusBean.getCid());
// for (DataLog queueTask : queueTasks) {
// if(queueTask.isWait()){
// queueTask.setStatus(OP_STATUS.EXECUTING.name());
// taskService.updateQueueTask(queueTask);
// String rgb = queueTask.getLightColor();
// ORDER_COLOR color = ORDER_COLOR.fromRgb(rgb);
// if(color == null){
// if(queueTask.isPutInTask()){
// color = ORDER_COLOR.DARKGREEN;
// }else{
// if (openZhiYin && ObjectUtil.isNotEmpty(queueTask.getSourceId())) {
// List<DataLog> dataLogList = outMap.get(queueTask.getSourceId());
// if (dataLogList == null) {
// dataLogList = new ArrayList<>();
// }
// dataLogList.add(queueTask);
// outMap.put(queueTask.getSourceId(), dataLogList);
// } else {
// color = ORDER_COLOR.BLUE;
// }
// }
// }
// statusBean.addData("open",queueTask.getPosName()+"="+color.name());
// log.info("库位["+queueTask.getPosName()+"]+亮灯:" + color.name());
// }
//// else if(queueTask.isCancel()){
//// if(queueTask.isCheckOutTask()){
////
//// statusBean.addData("open",queueTask.getPosName()+"="+"orange" );
//// log.info("库位["+queueTask.getPosName()+"]+取消:open=orange" );
//// //从任务列表中删除
//// taskService.removeFinishedTask(queueTask);
//// }
//// }
// }
//
// List<DataLog> dataLogs = getLightGuideTask(outMap);
// for (DataLog task :
// dataLogs) {
// statusBean.addData("open", task.getPosName() + "=" + ORDER_COLOR.fromRgb(task.getLightColor()).name());
// }
//
// return statusBean;
// }
//
// /**
// * 客户端sensor变化
// */
// @RequestMapping("/service/store/sensorShelf/sensorChange")
// @ResponseBody
// @AnonymousAccess
// public ResultBean sensorChange(HttpServletRequest request, HttpSession httpSession){
// String cid = request.getParameter("cid");
// Storage storage = dataCache.getStorage(cid);
// if(storage == null){
// return ResultBean.newErrorResult(-1,"smfcore.shelfNotExist", "{0}对应的料架不存在",new String[]{cid} );
// }
// String groupId = storage.getGroupId();
//// String groupName = "";
//// Group group = groupManager.get(groupId);
//// if(group != null){
//// groupName = group.getGroupName();
//// }
// if(groupId.equals("")){
// groupId="-1";
// }
// String[] hasReelPosList = request.getParameterValues("hasReelPosList");
// String[] noReelPosList = request.getParameterValues("noReelPosList");
//
//
// String[] hasReelPosErrorList = request.getParameterValues("hasReelPosErrorList");//实际信号有料,数据库无信息
// String[] noReelPosErrorList = request.getParameterValues("noReelPosErrorList");//实际信号无料,数据库有信息
// if(hasReelPosErrorList==null){
// hasReelPosErrorList=new String[]{};
// }
// if(noReelPosErrorList==null) {
// noReelPosErrorList = new String[]{};
// }
// List<String> ngToOk=new ArrayList<>();
//
//// //数据库无信息,实际有料
//// if(hasReelPosErrorList.length>0){
//// Query query=new Query(Criteria.where("posName").in(hasReelPosErrorList));
//// List<StoragePos> posList= storagePosManager.findByQuery(query);
//// for (StoragePos pos:posList
//// ) {
//// if(pos.isUsed()){
//// ngToOk.add(pos.getPosName());
//// log.info("sensorChange 客户端上传 hasReelPosErrorList 库位["+pos.getPosName()+"]数据库有信息,放入ngToOk");
//// }
//// }
//// }
// //数据库有信息,实际无料
// if(noReelPosErrorList.length>0){
// Query query=new Query(Criteria.where("posName").in(noReelPosErrorList ));
// List<StoragePos> posList= storagePosManager.findByQuery(query); // List<StoragePos> posList= storagePosManager.findByQuery(query);
// for (StoragePos pos:posList // for (StoragePos pos:posList
// ) { // ) {
// if(pos.isUsed()){ // if(!pos.isUsed()){
// ngToOk.add(pos.getPosName()); // ngToOk.add(pos.getPosName());
// log.info("sensorChange 客户端上传 hasReelPosErrorList 库位["+pos.getPosName()+"]数据库有信息,放入ngToOk"); // log.info("sensorChange 客户端上传 noReelPosErrorList 库位["+pos.getPosName()+"]数据库无信息,放入ngToOk");
// } // }
// } // }
// } // }
//数据库有信息,实际无料 //
if(noReelPosErrorList.length>0){ // List<List<String>> data=new ArrayList<>();
Query query=new Query(Criteria.where("posName").in(noReelPosErrorList )); // data.add(Arrays.asList(hasReelPosErrorList) );
List<StoragePos> posList= storagePosManager.findByQuery(query); // data.add(Arrays.asList(noReelPosErrorList));
for (StoragePos pos:posList // DevicesStatusUtil.updateDeviceData(cid,data);
) { //
if(!pos.isUsed()){ // List<String> inOkList = new ArrayList<>();
ngToOk.add(pos.getPosName()); // List<String> inNgList = new ArrayList<>();
log.info("sensorChange 客户端上传 noReelPosErrorList 库位["+pos.getPosName()+"]数据库无信息,放入ngToOk"); // List<String> outOkList = new ArrayList<>();
} // List<String> outNgList = new ArrayList<>();
} //
} // if(hasReelPosList != null){
// //入库的库位列表
List<List<String>> data=new ArrayList<>(); // if(hasReelPosList.length > 1){
data.add(Arrays.asList(hasReelPosErrorList) ); // String msg = "不可同时放入多盘物料:"+ String.join(",",hasReelPosList);
data.add(Arrays.asList(noReelPosErrorList)); // log.error(msg);
DevicesStatusUtil.updateDeviceData(cid,data); // WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR));
// for (String posStr : hasReelPosList) {
List<String> inOkList = new ArrayList<>(); // inNgList.add(posStr);
List<String> inNgList = new ArrayList<>(); // }
List<String> outOkList = new ArrayList<>(); // }else{
List<String> outNgList = new ArrayList<>(); // StoragePos pos = storagePosManager.getByPosName(hasReelPosList[0]);
// if(pos == null){
if(hasReelPosList != null){ // String msg = "未找到库位:"+String.join(",",hasReelPosList) ;
//入库的库位列表 // log.error(msg);
if(hasReelPosList.length > 1){ // WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR));
String msg = "不可同时放入多盘物料:"+ String.join(",",hasReelPosList); // }
log.error(msg); // else if(!pos.getStorageId().equals(storage.getId())){
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR)); // String msg = "["+storage.getName()+"]未找到库位:"+String.join(",",hasReelPosList) ;
for (String posStr : hasReelPosList) { // log.error(msg);
inNgList.add(posStr); // WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR));
} // }
}else{ // //如果库位有料,直接结束
StoragePos pos = storagePosManager.getByPosName(hasReelPosList[0]); // else if(pos.getBarcode()!=null) {
if(pos == null){ // log.info("料架[" + cid + "]入库库位[" + pos.getPosName() + "]已有料: [" + pos.getBarcode().getBarcode() + "]");
String msg = "未找到库位:"+String.join(",",hasReelPosList) ; // }
log.error(msg); // else{
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR)); // Collection<DataLog> queueTasks = taskService.getQueueTasks();
} // for (DataLog queueTask : queueTasks) {
else if(!pos.getStorageId().equals(storage.getId())){ // boolean isPutInTask=false;
String msg = "["+storage.getName()+"]未找到库位:"+String.join(",",hasReelPosList) ; // if(ObjectUtil.isNotEmpty(queueTask.getStorageId()) ){
log.error(msg); // if(queueTask.isPutInTask()&&queueTask.getStorageId().equals(storage.getId())){
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR)); // isPutInTask=true;
} // }
//如果库位有料,直接结束 // }
else if(pos.getBarcode()!=null) { // else if(queueTask.isPutInTask() && queueTask.getGroupId().equals(groupId)) {
log.info("料架[" + cid + "]入库库位[" + pos.getPosName() + "]已有料: [" + pos.getBarcode().getBarcode() + "]"); // isPutInTask = true;
} // }
else{ // if(isPutInTask) {
Collection<DataLog> queueTasks = taskService.getQueueTasks(); // queueTask.setCid(cid);
for (DataLog queueTask : queueTasks) { // queueTask.setPosId(pos.getId());
boolean isPutInTask=false; // queueTask.setPosName(pos.getPosName());
if(ObjectUtil.isNotEmpty(queueTask.getStorageId()) ){ // queueTask.setStorageId(storage.getId());
if(queueTask.isPutInTask()&&queueTask.getStorageId().equals(storage.getId())){ // queueTask.setStorageName(storage.getName());
isPutInTask=true; // try {
} // //入库完成,发送入库完成请求
} // super.finishedPutIn(cid, pos.getPosName());
else if(queueTask.isPutInTask() && queueTask.getGroupId().equals(groupId)) { // inOkList.add(hasReelPosList[0]);
isPutInTask = true; // String msg = queueTask.getBarcode() + "入库到" + pos.getPosName() + "成功";
} // log.error(msg);
if(isPutInTask) { // WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.INFO));
queueTask.setCid(cid); // break;
queueTask.setPosId(pos.getId()); // } catch (Exception e) {
queueTask.setPosName(pos.getPosName()); // log.error("入库出错", e);
queueTask.setStorageId(storage.getId()); // return ResultBean.newErrorResult(-1, "smfcore.inputError", "入库出错:{0}", new String[]{e.getMessage()});
queueTask.setStorageName(storage.getName()); // }
try { // }
//入库完成,发送入库完成请求 // }
super.finishedPutIn(cid, pos.getPosName()); // if(inOkList.size() == 0){
inOkList.add(hasReelPosList[0]); // inNgList.add(hasReelPosList[0]);
String msg = queueTask.getBarcode() + "入库到" + pos.getPosName() + "成功"; // log.error("未找到["+pos.getPosName()+"]的入库任务");
log.error(msg); // }
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.INFO)); // }
break; //
} catch (Exception e) { //
log.error("入库出错", e); // }
return ResultBean.newErrorResult(-1, "smfcore.inputError", "入库出错:{0}", new String[]{e.getMessage()}); // }
} // if(noReelPosList != null){
} // //出库
} // for (String posName : noReelPosList) {
if(inOkList.size() == 0){ // StoragePos pos = storagePosManager.getByPosName(posName);
inNgList.add(hasReelPosList[0]); // if(pos == null){
log.error("未找到["+pos.getPosName()+"]的入库任务"); // String msg = "未找到库位:"+String.join(",",hasReelPosList) ;
} // log.error(msg);
} // WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR));
// }
// else if(!pos.getStorageId().equals(storage.getId())){
} // String msg = "["+storage.getName()+"]未找到库位:"+String.join(",",hasReelPosList) ;
} // log.error(msg);
if(noReelPosList != null){ // WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR));
//出库 // }else if(pos.getBarcode()==null){
for (String posName : noReelPosList) { // log.info("料架[" + cid + "]出库库位[" + pos.getPosName() + "]已为空 ");
StoragePos pos = storagePosManager.getByPosName(posName); // }else{
if(pos == null){ // String outResult = "";
String msg = "未找到库位:"+String.join(",",hasReelPosList) ; // Collection<DataLog> queueTasks = taskService.getQueueTasks();
log.error(msg); // for (DataLog queueTask : queueTasks) {
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR)); // if(queueTask.isCheckOutTask() && queueTask.getPosName().equals(posName)){
} // //出库完成
else if(!pos.getStorageId().equals(storage.getId())){ // try {
String msg = "["+storage.getName()+"]未找到库位:"+String.join(",",hasReelPosList) ; // outResult = posName;
log.error(msg); // super.finishedOutPos(cid,posName);
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR)); // String msg = queueTask.getBarcode()+ "从"+ posName+"出库成功";
}else if(pos.getBarcode()==null){ // log.error(msg);
log.info("料架[" + cid + "]出库库位[" + pos.getPosName() + "]已为空 "); // WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.INFO));
}else{ // break;
String outResult = ""; // } catch (Exception e) {
Collection<DataLog> queueTasks = taskService.getQueueTasks(); // log.error("出库出错",e);
for (DataLog queueTask : queueTasks) { // return ResultBean.newErrorResult(-1,"smfcore.checkoutError","出库出错:{0}" ,new String[]{ e.getMessage()});
if(queueTask.isCheckOutTask() && queueTask.getPosName().equals(posName)){ // }
//出库完成 // }
try { // }
outResult = posName; // if(outResult.isEmpty()){
super.finishedOutPos(cid,posName); // outNgList.add(posName);
String msg = queueTask.getBarcode()+ "从"+ posName+"出库成功"; // String msg = "未找到["+posName+"]的出库任务";
log.error(msg); // log.error(msg);
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.INFO)); // WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR));
break; // }else{
} catch (Exception e) { // outOkList.add(outResult);
log.error("出库出错",e); // }
return ResultBean.newErrorResult(-1,"smfcore.checkoutError","出库出错:{0}" ,new String[]{ e.getMessage()}); // }
} //
} // }
} // }
if(outResult.isEmpty()){ //
outNgList.add(posName); // Map<String,List<String>> dataMap = new HashMap<>();
String msg = "未找到["+posName+"]的出库任务"; // dataMap.put("inOkList",inOkList);
log.error(msg); // dataMap.put("inNgList",inNgList);
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR)); // dataMap.put("outOkList",outOkList);
}else{ // dataMap.put("outNgList",outNgList);
outOkList.add(outResult); // dataMap.put("ngToOk",ngToOk);
} // return ResultBean.newOkResult(dataMap);
} // }
//
} //
} // /**
// * 获取料架的库位占用及出库任务
Map<String,List<String>> dataMap = new HashMap<>(); // */
dataMap.put("inOkList",inOkList); // @RequestMapping("/service/store/sensorShelf/shelfStatus")
dataMap.put("inNgList",inNgList); // @ResponseBody
dataMap.put("outOkList",outOkList); // @AnonymousAccess
dataMap.put("outNgList",outNgList); // public ResultBean shelfStatus(HttpServletRequest request){
dataMap.put("ngToOk",ngToOk); // String cid = request.getParameter("cid");
return ResultBean.newOkResult(dataMap); // Storage storage = dataCache.getStorage(cid);
} // List<StoragePos> allPos = storagePosManager.findNotEmptyByStorageId(storage.getId());
// List<String> posList = new ArrayList<>();
// for (StoragePos pos : allPos) {
/** // posList.add(pos.getPosName());
* 获取料架的库位占用及出库任务 // }
*/ //
@RequestMapping("/service/store/sensorShelf/shelfStatus") // List<String> outTaskPosList = new ArrayList<>();
@ResponseBody // Collection<DataLog> queueTasks = taskService.getQueueTasks(cid);
@AnonymousAccess // for (DataLog task : queueTasks) {
public ResultBean shelfStatus(HttpServletRequest request){ // if(task.isCheckOutTask()){
String cid = request.getParameter("cid"); // String rgb = task.getLightColor();
Storage storage = dataCache.getStorage(cid); // ORDER_COLOR color = ORDER_COLOR.fromRgb(rgb);
List<StoragePos> allPos = storagePosManager.findNotEmptyByStorageId(storage.getId()); // if(color == null){
List<String> posList = new ArrayList<>(); // color = ORDER_COLOR.BLUE;
for (StoragePos pos : allPos) { // }
posList.add(pos.getPosName()); // String outTaskPos = task.getPosName()+"="+color.name();
} // outTaskPosList.add(outTaskPos);
// }
List<String> outTaskPosList = new ArrayList<>(); // }
Collection<DataLog> queueTasks = taskService.getQueueTasks(cid); //
for (DataLog task : queueTasks) { // Map<String,List<String>> dataMap = new HashMap<>();
if(task.isCheckOutTask()){ // dataMap.put("hasReelPosList",posList);
String rgb = task.getLightColor(); // dataMap.put("outTaskList",outTaskPosList);
ORDER_COLOR color = ORDER_COLOR.fromRgb(rgb); // return ResultBean.newOkResult(dataMap);
if(color == null){ // }
color = ORDER_COLOR.BLUE; //
} // /**
String outTaskPos = task.getPosName()+"="+color.name(); // * 获取料架的库位占用情况
outTaskPosList.add(outTaskPos); // */
} // @RequestMapping("/service/store/sensorShelf/hasReelPosList")
} // @ResponseBody
// @AnonymousAccess
Map<String,List<String>> dataMap = new HashMap<>(); // public ResultBean checkAll(HttpServletRequest request){
dataMap.put("hasReelPosList",posList); // String cid = request.getParameter("cid");
dataMap.put("outTaskList",outTaskPosList); // Storage storage = dataCache.getStorage(cid);
return ResultBean.newOkResult(dataMap); // List<StoragePos> allPos = storagePosManager.findNotEmptyByStorageId(storage.getId());
} // List<String> posList = new ArrayList<>();
// for (StoragePos pos : allPos) {
/** // posList.add(pos.getPosName());
* 获取料架的库位占用情况 // }
*/ // return ResultBean.newOkResult(posList);
@RequestMapping("/service/store/sensorShelf/hasReelPosList") // }
@ResponseBody
@AnonymousAccess
public ResultBean checkAll(HttpServletRequest request){
String cid = request.getParameter("cid");
Storage storage = dataCache.getStorage(cid);
List<StoragePos> allPos = storagePosManager.findNotEmptyByStorageId(storage.getId());
List<String> posList = new ArrayList<>();
for (StoragePos pos : allPos) {
posList.add(pos.getPosName());
}
return ResultBean.newOkResult(posList);
}
@Override @Override
public DeviceType getDeviceType() { public DeviceType getDeviceType() {
......
...@@ -107,7 +107,7 @@ public class BoxKanbanController { ...@@ -107,7 +107,7 @@ public class BoxKanbanController {
continue; continue;
} }
boxStatusDtos.add(getBoxDto(storage,allTasks)); boxStatusDtos.add(getBoxDto(storage,allTasks));
if(storage.getType().equals(DeviceType.ACCSHELF.name())||storage.getType().equals(DeviceType.CODESHELF.name())){ if(storage.isNLPShelf()){
groupType=1; groupType=1;
} }
} }
......
...@@ -10,6 +10,7 @@ import com.neotel.smfcore.common.utils.PointUtil; ...@@ -10,6 +10,7 @@ import com.neotel.smfcore.common.utils.PointUtil;
import com.neotel.smfcore.common.utils.QueryHelp; import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.SecurityUtils; import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.storage.enums.DeviceType;
import com.neotel.smfcore.core.storage.rest.dto.StorageDto; import com.neotel.smfcore.core.storage.rest.dto.StorageDto;
import com.neotel.smfcore.core.storage.rest.dto.StorageSearchDto; import com.neotel.smfcore.core.storage.rest.dto.StorageSearchDto;
import com.neotel.smfcore.core.storage.rest.mapstruct.StorageMapper; import com.neotel.smfcore.core.storage.rest.mapstruct.StorageMapper;
...@@ -128,6 +129,18 @@ public class StorageController { ...@@ -128,6 +129,18 @@ public class StorageController {
return storageSearchDtos; return storageSearchDtos;
} }
@ApiOperation("返回所有料仓类型")
@GetMapping(value = "/typeList")
public List<String> typeList() {
List<DeviceType> availableTypeList= DeviceType.availableTypeList();
List<String> allList=new ArrayList<>();
for (DeviceType type :
availableTypeList) {
allList.add(type.getName());
}
return allList;
}
@ApiOperation("新增料仓") @ApiOperation("新增料仓")
@PostMapping @PostMapping
@PreAuthorize("@el.check('storage:add')") @PreAuthorize("@el.check('storage:add')")
......
...@@ -67,13 +67,13 @@ public class Storage extends BasePo implements Serializable { ...@@ -67,13 +67,13 @@ public class Storage extends BasePo implements Serializable {
private String inListName=""; private String inListName="";
/** // /**
* 是否是上下层的在线料仓 // * 是否是上下层的在线料仓
* @return // * @return
*/ // */
public boolean isOnlineStorage(){ // public boolean isOnlineStorage(){
return DeviceType.ONLINE.name().equals(type); // return DeviceType.ONLINE.name().equals(type);
} // }
/** /**
* 是否是指上下料的料仓 * 是否是指上下料的料仓
...@@ -107,24 +107,24 @@ public class Storage extends BasePo implements Serializable { ...@@ -107,24 +107,24 @@ public class Storage extends BasePo implements Serializable {
} }
/** /**
* 是否是智能料架 * 是否是料架
*/ */
public boolean isShelf() { public boolean isShelf() {
return DeviceType.SHELF.name().equals(type); return DeviceType.SHELF.name().equals(type);
} }
/** // /**
* 是否是ACC智能料架 // * 是否是ACC智能料架
*/ // */
public boolean isAccShelf() { // public boolean isAccShelf() {
return DeviceType.ACCSHELF.name().equals(type); // return DeviceType.ACCSHELF.name().equals(type);
} // }
//
/** // /**
* 是否是扫码料架 // * 是否是扫码料架
*/ // */
public boolean isCodeShelf() { // public boolean isCodeShelf() {
return DeviceType.CODESHELF.name().equals(type); // return DeviceType.CODESHELF.name().equals(type);
} // }
/** /**
* 是否是普通料架 * 是否是普通料架
*/ */
...@@ -132,6 +132,12 @@ public class Storage extends BasePo implements Serializable { ...@@ -132,6 +132,12 @@ public class Storage extends BasePo implements Serializable {
return DeviceType.NL.name().equals(type); return DeviceType.NL.name().equals(type);
} }
/** /**
* 是否是感应料架
*/
public boolean isNLPShelf() {
return DeviceType.NLP.name().equals(type);
}
/**
* 是否是垂直货柜 * 是否是垂直货柜
*/ */
public boolean isVerticalBox(){ public boolean isVerticalBox(){
...@@ -173,6 +179,16 @@ public class Storage extends BasePo implements Serializable { ...@@ -173,6 +179,16 @@ public class Storage extends BasePo implements Serializable {
return DeviceType.SMD_XLC.name().equals(type); return DeviceType.SMD_XLC.name().equals(type);
} }
public boolean isType(DeviceType[] types){
for (DeviceType str :
types) {
if(str.name().equals(type)){
return true;
}
}
return false;
}
public boolean canPutInPos(int w, int h, int PosW, int posH){ public boolean canPutInPos(int w, int h, int PosW, int posH){
if(compatibleType == COMPATIBLE_TYPE.EXACT_MATCH){//完全匹配 if(compatibleType == COMPATIBLE_TYPE.EXACT_MATCH){//完全匹配
......
...@@ -10,6 +10,7 @@ import com.neotel.smfcore.common.utils.QueryHelp; ...@@ -10,6 +10,7 @@ import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.language.service.bean.LanguageInfo; import com.neotel.smfcore.core.language.service.bean.LanguageInfo;
import com.neotel.smfcore.core.language.service.po.LanguageMsg; import com.neotel.smfcore.core.language.service.po.LanguageMsg;
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.system.bean.OrderSetting; import com.neotel.smfcore.core.system.bean.OrderSetting;
import com.neotel.smfcore.core.system.rest.bean.dto.SettingsDto; import com.neotel.smfcore.core.system.rest.bean.dto.SettingsDto;
...@@ -113,7 +114,7 @@ public class SettingsController { ...@@ -113,7 +114,7 @@ public class SettingsController {
List<Storage> storages = new ArrayList<>(dataCache.getAllStorage().values()); List<Storage> storages = new ArrayList<>(dataCache.getAllStorage().values());
for (Storage storage : storages for (Storage storage : storages
) { ) {
if (storage.isShelf() || storage.isNLShelf() || storage.isAccShelf() || storage.isCodeShelf()) { if (storage.isType(new DeviceType[]{DeviceType.NLP,DeviceType.NL})) {
orderSetting.setShowLightType(true); orderSetting.setShowLightType(true);
break; break;
} }
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!