Commit 09c282a7 sunke

感应料架优化

1 个父辈 9cb5f8a9
...@@ -5,8 +5,8 @@ import com.google.common.base.Strings; ...@@ -5,8 +5,8 @@ import com.google.common.base.Strings;
import com.neotel.smfcore.common.bean.ResultBean; import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.SecurityUtils; import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.api.bean.CodeValidateParam; import com.neotel.smfcore.core.api.bean.CodeValidateParam;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.bean.StatusBean; import com.neotel.smfcore.core.device.bean.StatusBean;
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.device.enums.OP_STATUS;
...@@ -40,7 +40,7 @@ import java.util.*; ...@@ -40,7 +40,7 @@ import java.util.*;
@Api(tags = "SHELF: NLP感应料架") @Api(tags = "SHELF: NLP感应料架")
@RestController @RestController
@Slf4j @Slf4j
public class NLPShelfHandler extends BaseDeviceHandler{ public class NLPShelfHandler extends BaseDeviceHandler {
@Autowired @Autowired
private TokenProvider tokenProvider; private TokenProvider tokenProvider;
...@@ -53,28 +53,27 @@ public class NLPShelfHandler extends BaseDeviceHandler{ ...@@ -53,28 +53,27 @@ public class NLPShelfHandler extends BaseDeviceHandler{
@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("{0}未找到库位:{1}"+code, MsgType.INFO,"smfclient.nlp.cannotFindPos",new String[]{"消息测试","库位号"})); // WebSocketServer.sendMsg("", new SocketMsg("{0}未找到库位:{1}"+code, MsgType.INFO,"smfclient.nlp.cannotFindPos",new String[]{"消息测试","库位号"}));
...@@ -82,7 +81,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{ ...@@ -82,7 +81,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{
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()||queueTask.isExecuting()) ) { if (queueTask.isPutInTask() && (queueTask.isWait() || queueTask.isExecuting())) {
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()});
...@@ -94,23 +93,23 @@ public class NLPShelfHandler extends BaseDeviceHandler{ ...@@ -94,23 +93,23 @@ public class NLPShelfHandler extends BaseDeviceHandler{
} }
} }
CodeValidateParam params = new CodeValidateParam(loginUser,groupId,storageId,code,token); CodeValidateParam params = new CodeValidateParam(loginUser, groupId, storageId, code, token);
Barcode barcodeSave = smfApi.canPutInBeforeResolve(params); Barcode barcodeSave = smfApi.canPutInBeforeResolve(params);
if(barcodeSave == null){ if (barcodeSave == null) {
barcodeSave = codeResolve.resolveOneValideBarcode("=1x1="+code); barcodeSave = codeResolve.resolveOneValideBarcode("=1x1=" + code);
} }
//从API验证 //从API验证
Barcode verResult = smfApi.canPutInAfterResolve(barcodeSave); Barcode verResult = smfApi.canPutInAfterResolve(barcodeSave);
if(verResult !=null){ if (verResult != null) {
barcodeSave = verResult; barcodeSave = verResult;
} }
return putIn(loginUser,groupId,storageId, barcodeSave,token); return putIn(loginUser, groupId, storageId, barcodeSave, token);
} }
protected ResultBean putIn(String loginUser, String groupId,String storageId,Barcode barcode,String token) { protected ResultBean putIn(String loginUser, String groupId, String storageId, Barcode barcode, String token) {
// CodeBean codeBean = codeResolve.resolveSingleCode(codeStr); // CodeBean codeBean = codeResolve.resolveSingleCode(codeStr);
if (barcode == null || barcode.getBarcode() == null) { if (barcode == null || barcode.getBarcode() == null) {
...@@ -124,7 +123,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{ ...@@ -124,7 +123,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{
} }
if (barcode.getAmount() <= 0) { if (barcode.getAmount() <= 0) {
throw new ValidateException("smfcore.error.barcode.wrongQty", "条码[{0}]对应的数量<=0为: {1}" , new String[]{barcode.getBarcode(), barcode.getAmount() + ""}); throw new ValidateException("smfcore.error.barcode.wrongQty", "条码[{0}]对应的数量<=0为: {1}", new String[]{barcode.getBarcode(), barcode.getAmount() + ""});
} }
Date expireDate = barcode.getExpireDate(); Date expireDate = barcode.getExpireDate();
...@@ -168,7 +167,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{ ...@@ -168,7 +167,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{
try { try {
taskService.addTaskToExecute(dataLog); taskService.addTaskToExecute(dataLog);
} catch (Exception e) { } catch (Exception e) {
return ResultBean.newErrorResult(-1,"smfclient.nlp.error","入库失败:"+e.getMessage(),new String[]{e.getMessage()}); return ResultBean.newErrorResult(-1, "smfclient.nlp.error", "入库失败:" + e.getMessage(), new String[]{e.getMessage()});
} }
...@@ -190,10 +189,10 @@ public class NLPShelfHandler extends BaseDeviceHandler{ ...@@ -190,10 +189,10 @@ public class NLPShelfHandler extends BaseDeviceHandler{
String cid = statusBean.getCid(); String cid = statusBean.getCid();
List<DataLog> finishedTasks = taskService.getFinishedTasks(); List<DataLog> finishedTasks = taskService.getFinishedTasks();
for (DataLog finishedTask : finishedTasks) { for (DataLog finishedTask : finishedTasks) {
if(finishedTask.getCid().equals(cid) && finishedTask.isCheckOutTask() && finishedTask.isCancel()){ if (finishedTask.getCid().equals(cid) && finishedTask.isCheckOutTask() && finishedTask.isCancel()) {
//取消的任务,需要关灯 //取消的任务,需要关灯
taskService.removeFinishedTask(finishedTask); taskService.removeFinishedTask(finishedTask);
statusBean.addData("close",finishedTask.getPosName()); statusBean.addData("close", finishedTask.getPosName());
} }
} }
...@@ -209,15 +208,15 @@ public class NLPShelfHandler extends BaseDeviceHandler{ ...@@ -209,15 +208,15 @@ public class NLPShelfHandler extends BaseDeviceHandler{
//亮灯 //亮灯
Collection<DataLog> queueTasks = taskService.getQueueTasks(statusBean.getCid()); Collection<DataLog> queueTasks = taskService.getQueueTasks(statusBean.getCid());
for (DataLog queueTask : queueTasks) { for (DataLog queueTask : queueTasks) {
if(queueTask.isWait()){ if (queueTask.isWait()) {
queueTask.setStatus(OP_STATUS.EXECUTING.name()); queueTask.setStatus(OP_STATUS.EXECUTING.name());
taskService.updateQueueTask(queueTask); taskService.updateQueueTask(queueTask);
String rgb = queueTask.getLightColor(); String rgb = queueTask.getLightColor();
ORDER_COLOR color = ORDER_COLOR.fromRgb(rgb); ORDER_COLOR color = ORDER_COLOR.fromRgb(rgb);
if(color == null){ if (color == null) {
if(queueTask.isPutInTask()){ if (queueTask.isPutInTask()) {
color = ORDER_COLOR.DARKGREEN; color = ORDER_COLOR.DARKGREEN;
}else{ } else {
if (openZhiYin && ObjectUtil.isNotEmpty(queueTask.getSourceId())) { if (openZhiYin && ObjectUtil.isNotEmpty(queueTask.getSourceId())) {
List<DataLog> dataLogList = outMap.get(queueTask.getSourceId()); List<DataLog> dataLogList = outMap.get(queueTask.getSourceId());
if (dataLogList == null) { if (dataLogList == null) {
...@@ -230,8 +229,8 @@ public class NLPShelfHandler extends BaseDeviceHandler{ ...@@ -230,8 +229,8 @@ public class NLPShelfHandler extends BaseDeviceHandler{
} }
} }
} }
statusBean.addData("open",queueTask.getPosName()+"="+color.name()); statusBean.addData("open", queueTask.getPosName() + "=" + color.name());
log.info("库位["+queueTask.getPosName()+"]+亮灯:" + color.name()); log.info("库位[" + queueTask.getPosName() + "]+亮灯:" + color.name());
} }
// else if(queueTask.isCancel()){ // else if(queueTask.isCancel()){
// if(queueTask.isCheckOutTask()){ // if(queueTask.isCheckOutTask()){
...@@ -258,235 +257,226 @@ public class NLPShelfHandler extends BaseDeviceHandler{ ...@@ -258,235 +257,226 @@ public class NLPShelfHandler extends BaseDeviceHandler{
@RequestMapping("/service/store/sensorShelf/sensorChange") @RequestMapping("/service/store/sensorShelf/sensorChange")
@ResponseBody @ResponseBody
@AnonymousAccess @AnonymousAccess
public ResultBean sensorChange(HttpServletRequest request, HttpSession httpSession){ public ResultBean sensorChange(HttpServletRequest request, HttpSession httpSession) {
String cid = request.getParameter("cid"); String cid = request.getParameter("cid");
Storage storage = dataCache.getStorage(cid); Storage storage = dataCache.getStorage(cid);
if(storage == null){ if (storage == null) {
return ResultBean.newErrorResult(-1,"smfcore.shelfNotExist", "{0}对应的料架不存在",new String[]{cid} ); return ResultBean.newErrorResult(-1, "smfcore.shelfNotExist", "{0}对应的料架不存在", new String[]{cid});
} }
String groupId = storage.getGroupId(); String groupId = storage.getGroupId();
// String groupName = ""; if (groupId.equals("")) {
// Group group = groupManager.get(groupId); groupId = "-1";
// if(group != null){
// groupName = group.getGroupName();
// }
if(groupId.equals("")){
groupId="-1";
} }
String[] hasReelPosList = request.getParameterValues("hasReelPosList"); String[] hasReelPosList = request.getParameterValues("hasReelPosList");
String[] noReelPosList = request.getParameterValues("noReelPosList"); String[] noReelPosList = request.getParameterValues("noReelPosList");
//实际信号有料,数据库无信息
String[] hasReelPosErrorList = request.getParameterValues("hasReelPosErrorList");//实际信号有料,数据库无信息 String[] hasReelPosErrorList = request.getParameterValues("hasReelPosErrorList");
String[] noReelPosErrorList = request.getParameterValues("noReelPosErrorList");//实际信号无料,数据库有信息 //实际信号无料,数据库有信息
if(hasReelPosErrorList==null){ String[] noReelPosErrorList = request.getParameterValues("noReelPosErrorList");
hasReelPosErrorList=new String[]{}; if (hasReelPosErrorList == null) {
hasReelPosErrorList = new String[]{};
} }
if(noReelPosErrorList==null) { if (noReelPosErrorList == null) {
noReelPosErrorList = new String[]{}; noReelPosErrorList = new String[]{};
} }
List<String> ngToOk=new ArrayList<>();
List<String> usedPosNameList = dataCache.getUsedPosNameList(storage.getCid());
// //数据库无信息,实际有料 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){ if (noReelPosErrorList.length > 0) {
Query query=new Query(Criteria.where("posName").in(noReelPosErrorList )); 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 客户端上传 noReelPosErrorList 库位["+pos.getPosName()+"]数据库无信息,放入ngToOk"); log.info("sensorChange 客户端上传 noReelPosErrorList 库位[" + pos.getPosName() + "]数据库无信息,放入ngToOk");
} }
} }
} }
List<List<String>> data=new ArrayList<>(); List<List<String>> data = new ArrayList<>();
data.add(Arrays.asList(hasReelPosErrorList) ); data.add(Arrays.asList(hasReelPosErrorList));
data.add(Arrays.asList(noReelPosErrorList)); data.add(Arrays.asList(noReelPosErrorList));
DevicesStatusUtil.updateDeviceData(cid,data); DevicesStatusUtil.updateDeviceData(cid, data);
List<String> inOkList = new ArrayList<>(); List<String> inOkList = new ArrayList<>();
List<String> inNgList = new ArrayList<>(); List<String> inNgList = new ArrayList<>();
List<String> outOkList = new ArrayList<>(); List<String> outOkList = new ArrayList<>();
List<String> outNgList = new ArrayList<>(); List<String> outNgList = new ArrayList<>();
if(hasReelPosList != null){ if (hasReelPosList != null) {
Set<String> disabledPosNameSet = dataCache.getDisabledPosNameSet();
List<String> newList=new ArrayList<>(); List<String> newList=new ArrayList<>();
for (String posName : for (String posName : hasReelPosList) {
hasReelPosList) { if(disabledPosNameSet.contains(posName)){
StoragePos pos = storagePosManager.getByPosName(posName); log.info(cid + "sensorChange hasReelPosList [" + posName + "]库位被禁用,忽略");
if(pos==null) {
log.info("sensorChange 未找到库位 hasReelPosList [" + posName + "]");
continue; continue;
} }
if(!pos.isEnabled()) {
continue;
}
newList.add(posName); newList.add(posName);
} }
hasReelPosList=newList.toArray(new String[newList.size()]); hasReelPosList = newList.toArray(new String[newList.size()]);
//入库的库位列表 //入库的库位列表
if(hasReelPosList.length > 1){ if (hasReelPosList.length > 1) {
String msg = "不可同时放入多盘物料:"+ String.join(",",hasReelPosList); String msg = "不可同时放入多盘物料:" + String.join(",", hasReelPosList);
log.error(msg); log.error(msg);
List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId());
SocketMsg socketMsg = new SocketMsg(notifyUsers, msg, MsgType.ERROR,"smfclient.nlp.onlyOneTray",new String[]{String.join(",",hasReelPosList)});
WebSocketServer.sendMsg(socketMsg);
for (String posStr : hasReelPosList) { for (String posStr : hasReelPosList) {
inNgList.add(posStr); inNgList.add(posStr);
} }
}else if (hasReelPosList.length==1){ } else if (hasReelPosList.length == 1) {
log.info(cid + "开始检测执行入库到库位:["+hasReelPosList[0]+"]");
StoragePos pos = storagePosManager.getByPosName(hasReelPosList[0]); StoragePos pos = storagePosManager.getByPosName(hasReelPosList[0]);
if(pos == null){ if (pos == null) {
String msg = "未找到库位:"+String.join(",",hasReelPosList) ; String msg = "未找到库位:" + String.join(",", hasReelPosList);
log.error(msg); log.error(msg);
List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId()); } else if (!pos.getStorageId().equals(storage.getId())) {
WebSocketServer.sendMsg(new SocketMsg(notifyUsers,msg, MsgType.ERROR,"smfclient.nlp.cannotFindPos",new String[]{"",String.join(",",hasReelPosList)})); String msg = "[" + storage.getName() + "]未找到库位:" + String.join(",", hasReelPosList);
}
else if(!pos.getStorageId().equals(storage.getId())){
String msg = "["+storage.getName()+"]未找到库位:"+String.join(",",hasReelPosList) ;
log.error(msg); log.error(msg);
List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId());
WebSocketServer.sendMsg(new SocketMsg(notifyUsers, msg, MsgType.ERROR,"smfclient.nlp.cannotFindPos",new String[]{storage.getName(),String.join(",",hasReelPosList)}));
} }
//如果库位有料,直接结束 //如果库位有料,直接结束
else if(pos.getBarcode()!=null) { else if (pos.getBarcode() != null) {
log.info("料架[" + cid + "]入库库位[" + pos.getPosName() + "]已有料: [" + pos.getBarcode().getBarcode() + "]"); log.info("料架[" + cid + "]入库库位[" + pos.getPosName() + "]已有料: [" + pos.getBarcode().getBarcode() + "]");
} else {
log.info(cid + "处理有料库位:["+pos.getPosName()+"]");
boolean posInResult = handlePosIn(groupId,storage,pos);
log.info(cid + "处理有料库位:["+pos.getPosName()+"]完成,结果:" + posInResult);
if(posInResult){
inOkList.add(pos.getPosName());
}else{
inNgList.add(pos.getPosName());
}
}
}
}
if (noReelPosList != null) {
//出库
for (String noReelPosName : noReelPosList) {
log.info(cid + "处理无料库位:[" + noReelPosName + "]");
boolean handleNoReelPosResult = handleNoReelPos(storage, usedPosNameList, noReelPosName);
log.info(cid + "处理无料库位:[" + noReelPosName + "]完成,结果:" + handleNoReelPosResult);
if (handleNoReelPosResult) {
outOkList.add(noReelPosName);
} else {
outNgList.add(noReelPosName);
} }
else{ }
}
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);
}
/**
* 处理库位入库
* @param storage
* @param pos
* @return
*/
private boolean handlePosIn(String groupId, Storage storage, StoragePos pos){
boolean inResult = false;
Collection<DataLog> queueTasks = taskService.getQueueTasks(); Collection<DataLog> queueTasks = taskService.getQueueTasks();
for (DataLog queueTask : queueTasks) { for (DataLog queueTask : queueTasks) {
boolean isPutInTask=false; boolean isPutInTask = false;
if(ObjectUtil.isNotEmpty(queueTask.getStorageId()) ){ if (ObjectUtil.isNotEmpty(queueTask.getStorageId())) {
if(queueTask.isPutInTask()&&queueTask.getStorageId().equals(storage.getId())){ if (queueTask.isPutInTask() && queueTask.getStorageId().equals(storage.getId())) {
isPutInTask=true; isPutInTask = true;
}
} }
else if(queueTask.isPutInTask() && queueTask.getGroupId().equals(groupId)) { } else if (queueTask.isPutInTask() && queueTask.getGroupId().equals(groupId)) {
isPutInTask = true; isPutInTask = true;
} }
if(isPutInTask) { if (isPutInTask) {
queueTask.setCid(cid); queueTask.setCid(storage.getCid());
queueTask.setPosId(pos.getId()); queueTask.setPosId(pos.getId());
queueTask.setPosName(pos.getPosName()); queueTask.setPosName(pos.getPosName());
queueTask.setStorageId(storage.getId()); queueTask.setStorageId(storage.getId());
queueTask.setStorageName(storage.getName()); queueTask.setStorageName(storage.getName());
try { try {
//入库完成,发送入库完成请求 //入库完成,发送入库完成请求
super.finishedPutIn(cid, pos.getPosName()); log.info(queueTask.getBarcode() + "入库完成,发送入库完成请求");
inOkList.add(hasReelPosList[0]); super.finishedPutIn(storage.getCid(), pos.getPosName());
String msg = queueTask.getBarcode() + "入库到" + pos.getPosName() + "成功"; String msg = queueTask.getBarcode() + "入库到" + pos.getPosName() + "成功";
log.info(msg); log.info(msg);
inResult = true;
//List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId());
//WebSocketServer.sendMsg(new SocketMsg(notifyUsers, msg, MsgType.INFO,"smfclient.nlp.inputOk",new String[]{queueTask.getBarcode(),pos.getPosName()}));
break; break;
} catch (Exception e) { } catch (Exception e) {
log.error("入库出错"+e.getMessage()); log.error("入库出错" + e.getMessage());
List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId());
WebSocketServer.sendMsg(new SocketMsg(notifyUsers,"入库出错:"+e.getMessage(), MsgType.ERROR,"smfclient.nlp.inputError",new String[]{e.getMessage()}));
return ResultBean.newErrorResult(-1, "smfcore.inputError", "入库出错:{0}", new String[]{e.getMessage()});
}
}
}
if(inOkList.size() == 0){
inNgList.add(hasReelPosList[0]);
log.error("未找到["+pos.getPosName()+"]的入库任务");
}
}
} }
return inResult;
} }
if(noReelPosList != null){
//出库
for (String posName : noReelPosList) {
StoragePos pos = storagePosManager.getByPosName(posName);
if(pos==null){
log.info("sensorChange 未找到库位 noReelPosList ["+posName+"]");
continue;
} }
if(!pos.isEnabled()){ log.warn("未找到["+pos.getPosName()+"]的入库任务");
continue; return inResult;
} }
if(pos == null){
String msg = "未找到库位:"+String.join(",",hasReelPosList) ;
log.error(msg);
List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId()); /**
WebSocketServer.sendMsg(new SocketMsg(notifyUsers, msg, MsgType.ERROR,"smfclient.nlp.cannotFindPos",new String[]{"",String.join(",",hasReelPosList)})); * 处理客户端发上来的无料库位
} *
else if(!pos.getStorageId().equals(storage.getId())){ * @param storage
String msg = "["+storage.getName()+"]未找到库位:"+String.join(",",hasReelPosList) ; * @param usedPosNameList
* @param noReelPosName
* @return
*/
private boolean handleNoReelPos(Storage storage, List<String> usedPosNameList, String noReelPosName) {
boolean handleResult = false;
if (!usedPosNameList.contains(noReelPosName)) {
log.info("库位: " + noReelPosName + " 中数据库中已无物料信息,加入outOkList");
handleResult = true;
} else {
StoragePos pos = storagePosManager.getByPosName(noReelPosName);
if (pos == null) {
log.error("sensorChange 未找到库位 noReelPosList [" + noReelPosName + "],加入outOkList");
handleResult = true;
} else {
if (!pos.isEnabled()) {
log.error("sensorChange noReelPosList [" + noReelPosName + "]已禁用,加入outOkList");
handleResult = true;
} else if (!pos.getStorageId().equals(storage.getId())) {
String msg = "[" + storage.getName() + "]未找到库位:" + noReelPosName + ",加入outOkList";
log.error(msg); log.error(msg);
handleResult = true;
List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId()); } else if (pos.getBarcode() == null) {
WebSocketServer.sendMsg(new SocketMsg(notifyUsers, msg, MsgType.ERROR,"smfclient.nlp.cannotFindPos",new String[]{storage.getName(),String.join(",",hasReelPosList)})); log.info("库位: " + noReelPosName + " 数据库中已无物料信息,加入outOkList");
}else if(pos.getBarcode()==null){ handleResult = true;
log.info("料架[" + cid + "]出库库位[" + pos.getPosName() + "]已为空 "); } else {
}else{
String outResult = "";
Collection<DataLog> queueTasks = taskService.getQueueTasks(); Collection<DataLog> queueTasks = taskService.getQueueTasks();
String outResult = "";
for (DataLog queueTask : queueTasks) { for (DataLog queueTask : queueTasks) {
if(queueTask.isCheckOutTask() && queueTask.getPosName().equals(posName)){ //只有执行中的任务才可以正常出库
if (queueTask.isExecuting() && queueTask.isCheckOutTask() && queueTask.getPosName().equals(noReelPosName)) {
//出库完成 //出库完成
try { try {
outResult = posName; outResult = noReelPosName;
super.finishedOutPos(cid,posName); super.finishedOutPos(storage.getCid(), noReelPosName);
String msg = queueTask.getBarcode()+ "从"+ posName+"出库成功"; String msg = queueTask.getBarcode() + "从" + noReelPosName + "出库成功";
log.error(msg); log.info(msg);
List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId());
WebSocketServer.sendMsg(new SocketMsg(notifyUsers, msg, MsgType.INFO,"smfclient.nlp.outputOk",new String[]{queueTask.getBarcode(),posName}));
break; break;
} catch (Exception e) { } catch (Exception e) {
log.error("出库出错"+e.getMessage()); log.error("库位:" + noReelPosName + "出库出错", e);
break;
List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId());
WebSocketServer.sendMsg(new SocketMsg(notifyUsers, "出库出错:"+e.getMessage(), MsgType.ERROR,"smfclient.nlp.outputError",new String[]{e.getMessage()}));
return ResultBean.newErrorResult(-1,"smfcore.checkoutError","出库出错:{0}" ,new String[]{ e.getMessage()});
} }
} }
} }
if(outResult.isEmpty()){ if (outResult.isEmpty()) {
outNgList.add(posName); handleResult = false;
String msg = "未找到["+posName+"]的出库任务"; String msg = "未找到[" + noReelPosName + "]的出库任务";
log.error(msg); log.error(msg);
//WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR,"smfclient.nlp.noOutTask",new String[]{posName,storage.getName()})); //WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR,"smfclient.nlp.noOutTask",new String[]{posName,storage.getName()}));
}else{ } else {
outOkList.add(outResult); handleResult = true;
} }
} }
} }
} }
return handleResult;
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);
} }
...@@ -496,27 +486,32 @@ public class NLPShelfHandler extends BaseDeviceHandler{ ...@@ -496,27 +486,32 @@ public class NLPShelfHandler extends BaseDeviceHandler{
@RequestMapping("/service/store/sensorShelf/shelfStatus") @RequestMapping("/service/store/sensorShelf/shelfStatus")
@ResponseBody @ResponseBody
@AnonymousAccess @AnonymousAccess
public ResultBean shelfStatus(HttpServletRequest request){ public ResultBean shelfStatus(HttpServletRequest request) {
String cid = request.getParameter("cid"); String cid = request.getParameter("cid");
List<String> posList = dataCache.getUsedPosNameList(cid); List<String> posList = dataCache.getUsedPosNameList(cid);
List<String> outTaskPosList = new ArrayList<>(); List<String> outTaskPosList = new ArrayList<>();
Collection<DataLog> queueTasks = taskService.getQueueTasks(cid); Collection<DataLog> queueTasks = taskService.getQueueTasks(cid);
for (DataLog task : queueTasks) { for (DataLog task : queueTasks) {
//只发执行中的任务 //只发执行中的任务
if(task.isCheckOutTask()&&task.isExecuting()){ if (task.isCheckOutTask() && task.isExecuting()) {
String rgb = task.getLightColor(); String rgb = task.getLightColor();
ORDER_COLOR color = ORDER_COLOR.fromRgb(rgb); ORDER_COLOR color = ORDER_COLOR.fromRgb(rgb);
if(color == null){ if (color == null) {
color = ORDER_COLOR.BLUE; color = ORDER_COLOR.BLUE;
} }
String outTaskPos = task.getPosName()+"="+color.name(); String outTaskPos = task.getPosName() + "=" + color.name();
outTaskPosList.add(outTaskPos); outTaskPosList.add(outTaskPos);
} }
} }
Map<String,List<String>> dataMap = new HashMap<>(); String hasReelPosColor = "orange";
dataMap.put("hasReelPosList",posList); // if(lightPosCidList.contains(cid)){
dataMap.put("outTaskList",outTaskPosList); // hasReelPosColor = ORDER_COLOR.LIGHTBLUE.name();
// }
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("hasReelPosList", posList);
dataMap.put("hasReelPosColor", hasReelPosColor);
dataMap.put("outTaskList", outTaskPosList);
//log.info("客户端获取["+cid+"]库位占用情况返回"); //log.info("客户端获取["+cid+"]库位占用情况返回");
return ResultBean.newOkResult(dataMap); return ResultBean.newOkResult(dataMap);
} }
...@@ -527,11 +522,12 @@ public class NLPShelfHandler extends BaseDeviceHandler{ ...@@ -527,11 +522,12 @@ public class NLPShelfHandler extends BaseDeviceHandler{
@RequestMapping("/service/store/sensorShelf/hasReelPosList") @RequestMapping("/service/store/sensorShelf/hasReelPosList")
@ResponseBody @ResponseBody
@AnonymousAccess @AnonymousAccess
public ResultBean checkAll(HttpServletRequest request){ public ResultBean checkAll(HttpServletRequest request) {
String cid = request.getParameter("cid"); String cid = request.getParameter("cid");
List<String> posList = dataCache.getUsedPosNameList(cid); List<String> posList = dataCache.getUsedPosNameList(cid);
return ResultBean.newOkResult(posList); return ResultBean.newOkResult(posList);
} }
@Override @Override
public DeviceType getDeviceType() { public DeviceType getDeviceType() {
return DeviceType.NLP; return DeviceType.NLP;
......
...@@ -389,6 +389,7 @@ public class DeviceController { ...@@ -389,6 +389,7 @@ public class DeviceController {
} }
pos.setEnabled(false); pos.setEnabled(false);
storagePosManager.save(pos); storagePosManager.save(pos);
dataCache.updateDisablePos(pos);
log.info("屏蔽库位:库位号[" + pos.getId() + "][" + pos.getPosName() + "]barcode[" + barcode + "]"); log.info("屏蔽库位:库位号[" + pos.getId() + "][" + pos.getPosName() + "]barcode[" + barcode + "]");
DeviceMessageUtil.addEnabledPosMessage(pos,""); DeviceMessageUtil.addEnabledPosMessage(pos,"");
......
...@@ -94,6 +94,11 @@ public class DataCache { ...@@ -94,6 +94,11 @@ public class DataCache {
*/ */
private static Map<String,List<String>> usedPosNameMap = new ConcurrentHashMap<>(); private static Map<String,List<String>> usedPosNameMap = new ConcurrentHashMap<>();
/**
* 禁用库位名称列表
*/
private static Set<String> disabledPosNameSet;
@PostConstruct @PostConstruct
public void initialize() { public void initialize() {
settings = getSettings(); settings = getSettings();
...@@ -382,6 +387,39 @@ public class DataCache { ...@@ -382,6 +387,39 @@ public class DataCache {
} }
} }
/**
* 获取禁用库位缓存
*/
public Set<String> getDisabledPosNameSet(){
initDisabledPosNameSet();
return disabledPosNameSet;
}
/**
* 初始化禁用库位缓存
*/
private synchronized void initDisabledPosNameSet(){
if(disabledPosNameSet == null){
disabledPosNameSet = new HashSet<>();
List<StoragePos> disabledPosList = storagePosManager.findDisabled();
for (StoragePos disabledPos : disabledPosList) {
disabledPosNameSet.add(disabledPos.getPosName());
}
log.info("加载禁用库位缓存,共" + disabledPosNameSet.size() + "个");
}
}
/**
* 更新禁用库位缓存
*/
public void updateDisablePos(StoragePos pos){
initDisabledPosNameSet();
if(pos.isEnabled()){
disabledPosNameSet.remove(pos.getPosName());
}else{
disabledPosNameSet.add(pos.getPosName());
}
}
/** /**
* 出库时清除使用库位列表 * 出库时清除使用库位列表
......
...@@ -225,6 +225,7 @@ public class StoragePosController { ...@@ -225,6 +225,7 @@ public class StoragePosController {
} }
pos.setEnabled(enabledDto.isEnabled()); pos.setEnabled(enabledDto.isEnabled());
storagePosManager.save(pos); storagePosManager.save(pos);
dataCache.updateDisablePos(pos);
log.info("启用禁用库位:库位号[" + pos.getId() + "][" + pos.getPosName() + "]=" + enabledDto.isEnabled()); log.info("启用禁用库位:库位号[" + pos.getId() + "][" + pos.getPosName() + "]=" + enabledDto.isEnabled());
DeviceMessageUtil.addEnabledPosMessage(pos,SecurityUtils.getCurrentUsername()); DeviceMessageUtil.addEnabledPosMessage(pos,SecurityUtils.getCurrentUsername());
...@@ -254,6 +255,7 @@ public class StoragePosController { ...@@ -254,6 +255,7 @@ public class StoragePosController {
String enabledStr=""; String enabledStr="";
if(pos.isEnabled()!= saveDto.isEnabled()){ if(pos.isEnabled()!= saveDto.isEnabled()){
pos.setEnabled(saveDto.isEnabled()); pos.setEnabled(saveDto.isEnabled());
dataCache.updateDisablePos(pos);
enabledStr=saveDto.isEnabled()?",启用库位":",禁用库位"; enabledStr=saveDto.isEnabled()?",启用库位":",禁用库位";
DeviceMessageUtil.addEnabledPosMessage(pos,SecurityUtils.getCurrentUsername()); DeviceMessageUtil.addEnabledPosMessage(pos,SecurityUtils.getCurrentUsername());
} }
......
...@@ -68,4 +68,6 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> { ...@@ -68,4 +68,6 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
List<StoragePos> getSameSizeContinuityEmptyPosList(Storage storage, Barcode barcode) throws ValidateException; List<StoragePos> getSameSizeContinuityEmptyPosList(Storage storage, Barcode barcode) throws ValidateException;
List<StoragePos> findByBarcodesAndPartNums(List<String> storageIds, List<String> partNums, List<String> reelIds); List<StoragePos> findByBarcodesAndPartNums(List<String> storageIds, List<String> partNums, List<String> reelIds);
List<StoragePos> findDisabled();
} }
...@@ -598,4 +598,11 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -598,4 +598,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
return storagePosDao.findByQuery(query); return storagePosDao.findByQuery(query);
} }
@Override
public List<StoragePos> findDisabled(){
Criteria c = Criteria.where("enabled").is(false);//不可用;
Query query = new Query(c);
return storagePosDao.findByQuery(query);
}
} }
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!