Commit 09c282a7 sunke

感应料架优化

1 个父辈 9cb5f8a9
......@@ -5,8 +5,8 @@ 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.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.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
......@@ -40,7 +40,7 @@ import java.util.*;
@Api(tags = "SHELF: NLP感应料架")
@RestController
@Slf4j
public class NLPShelfHandler extends BaseDeviceHandler{
public class NLPShelfHandler extends BaseDeviceHandler {
@Autowired
private TokenProvider tokenProvider;
......@@ -53,28 +53,27 @@ public class NLPShelfHandler extends BaseDeviceHandler{
@ApiOperation("扫码入库")
@PostMapping("/api/sensorShelf/codeIn")
@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 groupId = mapValues.get("group");
String storageId=mapValues.get("storageId");
String sourceId=mapValues.get("sourceId");
String storageId = mapValues.get("storageId");
String sourceId = mapValues.get("sourceId");
String token = tokenProvider.getToken(request);
if(ObjectUtils.isEmpty(code)){
if (ObjectUtils.isEmpty(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"});
}
if(groupId==null&&storageId!=null){
Storage storage=dataCache.getStorageById(storageId);
if(storage!=null){
groupId=storage.getGroupId();
if (groupId == null && storageId != null) {
Storage storage = dataCache.getStorageById(storageId);
if (storage != null) {
groupId = storage.getGroupId();
}
}
if(groupId!=null&&groupId.equals("-1")){
groupId="";
if (groupId != null && groupId.equals("-1")) {
groupId = "";
}
// WebSocketServer.sendMsg("", new SocketMsg("{0}未找到库位:{1}"+code, MsgType.INFO,"smfclient.nlp.cannotFindPos",new String[]{"消息测试","库位号"}));
......@@ -82,7 +81,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{
Collection<DataLog> queueTasks = taskService.getQueueTasks();
ResultBean resultBean = null;
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)) {
log.info("codeIn [" + code + "][" + groupId + "]入库失败:条码[" + 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{
}
}
CodeValidateParam params = new CodeValidateParam(loginUser,groupId,storageId,code,token);
CodeValidateParam params = new CodeValidateParam(loginUser, groupId, storageId, code, token);
Barcode barcodeSave = smfApi.canPutInBeforeResolve(params);
if(barcodeSave == null){
barcodeSave = codeResolve.resolveOneValideBarcode("=1x1="+code);
if (barcodeSave == null) {
barcodeSave = codeResolve.resolveOneValideBarcode("=1x1=" + code);
}
//从API验证
Barcode verResult = smfApi.canPutInAfterResolve(barcodeSave);
if(verResult !=null){
if (verResult != null) {
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);
if (barcode == null || barcode.getBarcode() == null) {
......@@ -124,7 +123,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{
}
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();
......@@ -168,7 +167,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{
try {
taskService.addTaskToExecute(dataLog);
} 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{
String cid = statusBean.getCid();
List<DataLog> finishedTasks = taskService.getFinishedTasks();
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);
statusBean.addData("close",finishedTask.getPosName());
statusBean.addData("close", finishedTask.getPosName());
}
}
......@@ -209,15 +208,15 @@ public class NLPShelfHandler extends BaseDeviceHandler{
//亮灯
Collection<DataLog> queueTasks = taskService.getQueueTasks(statusBean.getCid());
for (DataLog queueTask : queueTasks) {
if(queueTask.isWait()){
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()){
if (color == null) {
if (queueTask.isPutInTask()) {
color = ORDER_COLOR.DARKGREEN;
}else{
} else {
if (openZhiYin && ObjectUtil.isNotEmpty(queueTask.getSourceId())) {
List<DataLog> dataLogList = outMap.get(queueTask.getSourceId());
if (dataLogList == null) {
......@@ -230,8 +229,8 @@ public class NLPShelfHandler extends BaseDeviceHandler{
}
}
}
statusBean.addData("open",queueTask.getPosName()+"="+color.name());
log.info("库位["+queueTask.getPosName()+"]+亮灯:" + color.name());
statusBean.addData("open", queueTask.getPosName() + "=" + color.name());
log.info("库位[" + queueTask.getPosName() + "]+亮灯:" + color.name());
}
// else if(queueTask.isCancel()){
// if(queueTask.isCheckOutTask()){
......@@ -258,235 +257,226 @@ public class NLPShelfHandler extends BaseDeviceHandler{
@RequestMapping("/service/store/sensorShelf/sensorChange")
@ResponseBody
@AnonymousAccess
public ResultBean sensorChange(HttpServletRequest request, HttpSession httpSession){
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} );
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";
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[]{};
//实际信号有料,数据库无信息
String[] hasReelPosErrorList = request.getParameterValues("hasReelPosErrorList");
//实际信号无料,数据库有信息
String[] noReelPosErrorList = request.getParameterValues("noReelPosErrorList");
if (hasReelPosErrorList == null) {
hasReelPosErrorList = new String[]{};
}
if(noReelPosErrorList==null) {
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");
// }
// }
// }
List<String> usedPosNameList = dataCache.getUsedPosNameList(storage.getCid());
List<String> ngToOk = new ArrayList<>();
//数据库有信息,实际无料
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()){
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");
log.info("sensorChange 客户端上传 noReelPosErrorList 库位[" + pos.getPosName() + "]数据库无信息,放入ngToOk");
}
}
}
List<List<String>> data=new ArrayList<>();
data.add(Arrays.asList(hasReelPosErrorList) );
List<List<String>> data = new ArrayList<>();
data.add(Arrays.asList(hasReelPosErrorList));
data.add(Arrays.asList(noReelPosErrorList));
DevicesStatusUtil.updateDeviceData(cid,data);
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 != null) {
Set<String> disabledPosNameSet = dataCache.getDisabledPosNameSet();
List<String> newList=new ArrayList<>();
for (String posName :
hasReelPosList) {
StoragePos pos = storagePosManager.getByPosName(posName);
if(pos==null) {
log.info("sensorChange 未找到库位 hasReelPosList [" + posName + "]");
for (String posName : hasReelPosList) {
if(disabledPosNameSet.contains(posName)){
log.info(cid + "sensorChange hasReelPosList [" + posName + "]库位被禁用,忽略");
continue;
}
if(!pos.isEnabled()) {
continue;
}
newList.add(posName);
}
hasReelPosList=newList.toArray(new String[newList.size()]);
hasReelPosList = newList.toArray(new String[newList.size()]);
//入库的库位列表
if(hasReelPosList.length > 1){
String msg = "不可同时放入多盘物料:"+ String.join(",",hasReelPosList);
if (hasReelPosList.length > 1) {
String msg = "不可同时放入多盘物料:" + String.join(",", hasReelPosList);
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) {
inNgList.add(posStr);
}
}else if (hasReelPosList.length==1){
} else if (hasReelPosList.length == 1) {
log.info(cid + "开始检测执行入库到库位:["+hasReelPosList[0]+"]");
StoragePos pos = storagePosManager.getByPosName(hasReelPosList[0]);
if(pos == null){
String msg = "未找到库位:"+String.join(",",hasReelPosList) ;
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())){
String msg = "["+storage.getName()+"]未找到库位:"+String.join(",",hasReelPosList) ;
} else if (!pos.getStorageId().equals(storage.getId())) {
String msg = "[" + storage.getName() + "]未找到库位:" + 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[]{storage.getName(),String.join(",",hasReelPosList)}));
}
//如果库位有料,直接结束
else if(pos.getBarcode()!=null) {
else if (pos.getBarcode() != null) {
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();
for (DataLog queueTask : queueTasks) {
boolean isPutInTask=false;
if(ObjectUtil.isNotEmpty(queueTask.getStorageId()) ){
if(queueTask.isPutInTask()&&queueTask.getStorageId().equals(storage.getId())){
isPutInTask=true;
}
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)) {
} else if (queueTask.isPutInTask() && queueTask.getGroupId().equals(groupId)) {
isPutInTask = true;
}
if(isPutInTask) {
queueTask.setCid(cid);
if (isPutInTask) {
queueTask.setCid(storage.getCid());
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]);
log.info(queueTask.getBarcode() + "入库完成,发送入库完成请求");
super.finishedPutIn(storage.getCid(), pos.getPosName());
String msg = queueTask.getBarcode() + "入库到" + pos.getPosName() + "成功";
log.info(msg);
//List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId());
//WebSocketServer.sendMsg(new SocketMsg(notifyUsers, msg, MsgType.INFO,"smfclient.nlp.inputOk",new String[]{queueTask.getBarcode(),pos.getPosName()}));
inResult = true;
break;
} catch (Exception e) {
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()+"]的入库任务");
}
}
log.error("入库出错" + e.getMessage());
}
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()){
continue;
log.warn("未找到["+pos.getPosName()+"]的入库任务");
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())){
String msg = "["+storage.getName()+"]未找到库位:"+String.join(",",hasReelPosList) ;
/**
* 处理客户端发上来的无料库位
*
* @param storage
* @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);
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){
log.info("料架[" + cid + "]出库库位[" + pos.getPosName() + "]已为空 ");
}else{
String outResult = "";
handleResult = true;
} else if (pos.getBarcode() == null) {
log.info("库位: " + noReelPosName + " 数据库中已无物料信息,加入outOkList");
handleResult = true;
} else {
Collection<DataLog> queueTasks = taskService.getQueueTasks();
String outResult = "";
for (DataLog queueTask : queueTasks) {
if(queueTask.isCheckOutTask() && queueTask.getPosName().equals(posName)){
//只有执行中的任务才可以正常出库
if (queueTask.isExecuting() && queueTask.isCheckOutTask() && queueTask.getPosName().equals(noReelPosName)) {
//出库完成
try {
outResult = posName;
super.finishedOutPos(cid,posName);
String msg = queueTask.getBarcode()+ "从"+ posName+"出库成功";
log.error(msg);
List<String> notifyUsers = userManager.findByDeviceGroupId(storage.getGroupId());
WebSocketServer.sendMsg(new SocketMsg(notifyUsers, msg, MsgType.INFO,"smfclient.nlp.outputOk",new String[]{queueTask.getBarcode(),posName}));
outResult = noReelPosName;
super.finishedOutPos(storage.getCid(), noReelPosName);
String msg = queueTask.getBarcode() + "从" + noReelPosName + "出库成功";
log.info(msg);
break;
} catch (Exception e) {
log.error("出库出错"+e.getMessage());
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()});
log.error("库位:" + noReelPosName + "出库出错", e);
break;
}
}
}
if(outResult.isEmpty()){
outNgList.add(posName);
String msg = "未找到["+posName+"]的出库任务";
if (outResult.isEmpty()) {
handleResult = false;
String msg = "未找到[" + noReelPosName + "]的出库任务";
log.error(msg);
//WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.ERROR,"smfclient.nlp.noOutTask",new String[]{posName,storage.getName()}));
}else{
outOkList.add(outResult);
} else {
handleResult = true;
}
}
}
}
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);
return handleResult;
}
......@@ -496,27 +486,32 @@ public class NLPShelfHandler extends BaseDeviceHandler{
@RequestMapping("/service/store/sensorShelf/shelfStatus")
@ResponseBody
@AnonymousAccess
public ResultBean shelfStatus(HttpServletRequest request){
public ResultBean shelfStatus(HttpServletRequest request) {
String cid = request.getParameter("cid");
List<String> posList = dataCache.getUsedPosNameList(cid);
List<String> outTaskPosList = new ArrayList<>();
Collection<DataLog> queueTasks = taskService.getQueueTasks(cid);
for (DataLog task : queueTasks) {
//只发执行中的任务
if(task.isCheckOutTask()&&task.isExecuting()){
if (task.isCheckOutTask() && task.isExecuting()) {
String rgb = task.getLightColor();
ORDER_COLOR color = ORDER_COLOR.fromRgb(rgb);
if(color == null){
if (color == null) {
color = ORDER_COLOR.BLUE;
}
String outTaskPos = task.getPosName()+"="+color.name();
String outTaskPos = task.getPosName() + "=" + color.name();
outTaskPosList.add(outTaskPos);
}
}
Map<String,List<String>> dataMap = new HashMap<>();
dataMap.put("hasReelPosList",posList);
dataMap.put("outTaskList",outTaskPosList);
String hasReelPosColor = "orange";
// if(lightPosCidList.contains(cid)){
// 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+"]库位占用情况返回");
return ResultBean.newOkResult(dataMap);
}
......@@ -527,11 +522,12 @@ public class NLPShelfHandler extends BaseDeviceHandler{
@RequestMapping("/service/store/sensorShelf/hasReelPosList")
@ResponseBody
@AnonymousAccess
public ResultBean checkAll(HttpServletRequest request){
public ResultBean checkAll(HttpServletRequest request) {
String cid = request.getParameter("cid");
List<String> posList = dataCache.getUsedPosNameList(cid);
return ResultBean.newOkResult(posList);
}
@Override
public DeviceType getDeviceType() {
return DeviceType.NLP;
......
......@@ -389,6 +389,7 @@ public class DeviceController {
}
pos.setEnabled(false);
storagePosManager.save(pos);
dataCache.updateDisablePos(pos);
log.info("屏蔽库位:库位号[" + pos.getId() + "][" + pos.getPosName() + "]barcode[" + barcode + "]");
DeviceMessageUtil.addEnabledPosMessage(pos,"");
......
......@@ -94,6 +94,11 @@ public class DataCache {
*/
private static Map<String,List<String>> usedPosNameMap = new ConcurrentHashMap<>();
/**
* 禁用库位名称列表
*/
private static Set<String> disabledPosNameSet;
@PostConstruct
public void initialize() {
settings = getSettings();
......@@ -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 {
}
pos.setEnabled(enabledDto.isEnabled());
storagePosManager.save(pos);
dataCache.updateDisablePos(pos);
log.info("启用禁用库位:库位号[" + pos.getId() + "][" + pos.getPosName() + "]=" + enabledDto.isEnabled());
DeviceMessageUtil.addEnabledPosMessage(pos,SecurityUtils.getCurrentUsername());
......@@ -254,6 +255,7 @@ public class StoragePosController {
String enabledStr="";
if(pos.isEnabled()!= saveDto.isEnabled()){
pos.setEnabled(saveDto.isEnabled());
dataCache.updateDisablePos(pos);
enabledStr=saveDto.isEnabled()?",启用库位":",禁用库位";
DeviceMessageUtil.addEnabledPosMessage(pos,SecurityUtils.getCurrentUsername());
}
......
......@@ -68,4 +68,6 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
List<StoragePos> getSameSizeContinuityEmptyPosList(Storage storage, Barcode barcode) throws ValidateException;
List<StoragePos> findByBarcodesAndPartNums(List<String> storageIds, List<String> partNums, List<String> reelIds);
List<StoragePos> findDisabled();
}
......@@ -598,4 +598,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
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!