Commit 4f2170f2 LN

NLM料架出库亮灯处理

1 个父辈 aea41fc3
......@@ -5,15 +5,21 @@ import com.google.common.base.Strings;
import com.google.common.collect.Lists;
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.bean.CodeBean;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.api.IOpAuthApi;
import com.neotel.smfcore.core.device.bean.StatusBean;
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.order.service.manager.ILiteOrderManager;
import com.neotel.smfcore.core.order.service.po.LiteOrder;
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.security.TokenProvider;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
......@@ -50,15 +56,77 @@ public class NLMShelfHandler extends BaseDeviceHandler {
handleMsg(statusBean);
statusBean = saveAlarmAndHumidity(statusBean);
if(statusBean != null){
OrderSetting orderSetting = dataCache.getOrderSetting();
boolean openZhiYin = orderSetting.getShelfLightType().equals(1);
Map<String, List<DataLog>> outMap = new HashMap<>();
if (statusBean != null) {
Map<String, String> opMap = DevicesStatusUtil.getAndRemoveOp(statusBean.getCid());
statusBean.addOp(opMap);
}
//亮灯
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());
addMergeData(statusBean, queueTask, "open", color.name());
log.info("库位[" + queueTask.getPosName() + "]+亮灯:" + color.name());
}
}
List<DataLog> dataLogs = getLightGuideTask(outMap);
for (DataLog task :
dataLogs) {
// statusBean.addData("open", task.getPosName() + "=" + ORDER_COLOR.fromRgb(task.getLightColor()).name());
String color = ORDER_COLOR.fromRgb(task.getLightColor()).name();
addMergeData(statusBean, task, "open", color);
}
return statusBean;
}
private StatusBean addMergeData(StatusBean statusBean, DataLog task, String opKey,String color){
StoragePos pos=storagePosManager.getByPosName(task.getPosName());
if(pos!=null){
List<String> relatedPosNames = pos.getMergePosList();
if(relatedPosNames == null || relatedPosNames.isEmpty()){
relatedPosNames = new ArrayList<>();
relatedPosNames.add(pos.getPosName());
// log.info("操作库位["+pos.getPosName()+"]" + opKey);
}else{
// log.info("操作合并库位["+pos.getPosName()+"]" + opKey);
}
for(String posName : relatedPosNames){
statusBean.addData(opKey,posName+"="+color);
}
}
return statusBean;
}
/**
* 操作库位灯(开灯,或关灯),如果有关联的合并库位,一起开关灯
* @param opKey
......@@ -68,45 +136,57 @@ public class NLMShelfHandler extends BaseDeviceHandler {
*/
private void opPosLight(String opKey, Storage storage, StoragePos pos, String colorStr){
List<String> relatedPosNames = pos.getMergePosList();
String str="操作合并库位["+pos.getPosName()+"]" + opKey;
if(relatedPosNames == null || relatedPosNames.isEmpty()){
relatedPosNames = new ArrayList<>();
relatedPosNames.add(pos.getPosName());
log.info("操作库位["+pos.getPosName()+"]" + opKey);
str="操作库位["+pos.getPosName()+"]" + opKey;
// log.info("操作库位["+pos.getPosName()+"]" + opKey);
}else{
log.info("操作合并库位["+pos.getPosName()+"]" + opKey);
// log.info("操作合并库位["+pos.getPosName()+"]" + opKey);
}
String allOpStr="";
for(String posName : relatedPosNames){
String opStr = posName;
if(!Strings.isNullOrEmpty(colorStr)){
opStr =opStr+ "=" + colorStr;
}
DevicesStatusUtil.appendOp(storage.getCid(), opKey , opStr);
log.info(opKey + " : " + opStr);
allOpStr+= opStr+",";
// log.info(opKey + " : " + opStr);
}
log.info(str+":"+allOpStr);
}
/**
* 开灯, 等6秒后关闭
*/
private void openAndCloseLights(final Storage storage, final List<String> posNameList, final long delayCloseTime, String color){
private void openAndCloseLights(final Storage storage, final List<String> posNameList, final long delayCloseTime, String color) {
final String cid = storage.getCid();
if(posNameList == null ){
if (posNameList == null) {
return;
}
String allLightOnStr = "";
for (final String posName : posNameList) {
String lightOnStr = posName + "=" + color;
DevicesStatusUtil.appendOp(cid,"open", lightOnStr);
log.info("点亮库位:" + lightOnStr);
DevicesStatusUtil.appendOp(cid, "open", lightOnStr);
allLightOnStr += lightOnStr + ",";
}
log.info("[" + cid + "]点亮库位:" + allLightOnStr);
//5秒后灭灯
Thread closeTask = new Thread(new Runnable() {
@Override
public void run() {
try {
String allCloseStr = "";
for (final String posName : posNameList) {
Thread.sleep(delayCloseTime);
log.info(storage.getName()+"["+cid+"]库位["+posName+"]灭灯");
DevicesStatusUtil.appendOp(cid,"close", posName);
}catch (Exception e){
// log.info(storage.getName() + "[" + cid + "]库位[" + posName + "]灭灯");
DevicesStatusUtil.appendOp(cid, "close", posName);
allCloseStr += posName + ",";
}
log.info(storage.getName() + "[" + cid + "]库位[" + allCloseStr + "]灭灯");
} catch (Exception e) {
}
}
......@@ -114,8 +194,6 @@ public class NLMShelfHandler extends BaseDeviceHandler {
closeTask.start();
}
}
//上一次入库的库位,用于扫下一条码时灭灯,key=storageId
private static Map<String,StoragePos> lastPutinPosMap = new ConcurrentHashMap<>();
......@@ -128,6 +206,7 @@ public class NLMShelfHandler extends BaseDeviceHandler {
String code = mapValues.get("code").trim();
String groupId = mapValues.get("group");
String storageId = mapValues.get("storageId");
String sourceId=mapValues.get("sourceId");
if (ObjectUtils.isEmpty(code)) {
throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"code"});
}
......@@ -180,6 +259,28 @@ public class NLMShelfHandler extends BaseDeviceHandler {
}
posName = posName.substring(1);
}
//判断是否有出库任务,有的话直接结束任务
String loginUser = SecurityUtils.getLoginUsername();
Collection<DataLog> allTasks = taskService.getQueueTasks();
for (DataLog task : allTasks) {
if (task.isCheckOutTask() && task.getBarcode() != null && task.getBarcode().equals(barcode.getBarcode())) {
if (ObjectUtil.isNotEmpty(sourceId) && !sourceId.equals(task.getSourceId())) {
LiteOrder liteOrder = liteOrderManager.get(sourceId);
if (liteOrder != null) {
return ResultBean.newErrorResult(1, "smfcore.shelf.error.orderError", "任务与指定工单[{0}]不一致", new String[]{liteOrder.getOrderNo()});
} else {
return ResultBean.newErrorResult(1, "smfcore.shelf.error.orderError", "任务与指定工单[{0}]不一致", new String[]{sourceId});
}
}
Storage storage = dataCache.getStorage(task.getCid());
taskService.addTaskToFinished(inPos, null, loginUser);
opPosLight("close", storage, inPos, null);
log.info(barcode.getBarcode() + " 出库完成, 库位[" + inPos.getPosName() + "]灭灯");
return ResultBean.newErrorResult(1, "smfcore.shelf.msg.outConfirm", "出库完成, 库位[{0}]灭灯", new String[]{inPos.getPosName()});
}
}
return ResultBean.newErrorResult(99, "smfcore.shelf.msg.alreadyInPos", "该物料已在库位[" + posName + "]中", new String[]{posName});
}
......@@ -237,18 +338,19 @@ public class NLMShelfHandler extends BaseDeviceHandler {
List<String> mergePosNameList = new ArrayList<>();
String mergePosStr = "";
for (StoragePos storagePos : continuitEmptyPosList) {
log.info("设置库位[" + storagePos.getPosName() + "]使用状态为:true");
// log.info("设置库位[" + storagePos.getPosName() + "]使用状态为:true");
storagePos.setUsed(true);
storagePosManager.save(storagePos);
mergePosNameList.add(storagePos.getPosName());
mergePosStr = mergePosStr + " , " + storagePos.getPosName();
mergePosStr += storagePos.getPosName()+",";
}
log.info("设置合并库位[" + mergePosStr + "]使用状态为:true");
mainPos.setUsed(true);
mainPos.setMergePosList(mergePosNameList);
storagePosManager.save(mainPos);
pos = mainPos;
lastPutinPosMap.put(currentStorage.getCid(), pos);
log.info("合并库位[" + mergePosStr + "]到" + pos.getPosName() + "中");
log.info("合并库位[" + mergePosStr + "]到[" + pos.getPosName() + "]中");
log.info(barcode.getPartNumber() + " [ " + barcode.getBarcode() + " ] " + "入库到:" + currentStorage.getName() + "[" + currentStorage.getCid() + "] " + pos.getPosName());
taskService.addTaskToFinished(pos, barcode, currentStorage.getName() + "-op");
openAndCloseLights(currentStorage, mergePosNameList, delayCloseTime, color);
......
......@@ -192,16 +192,20 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}
@Override
public StoragePos save(StoragePos storagePos) throws ValidateException {
if(!storagePos.isUsed()){
if(!storagePos.isUsed()) {
//出库
List<String> mergePosNames = storagePos.getMergePosList();
List<StoragePos> mergePosList = findPosList(storagePos.getStorageId(), mergePosNames);
String allPos = "";
//解除相关合并库位的占用状态
for(StoragePos mergePos : mergePosList){
for (StoragePos mergePos : mergePosList) {
mergePos.setUsed(false);
mergePos.setMergePosList(null);
storagePosDao.save(mergePos);
log.info("设置合并的关联库位["+mergePos.getPosName()+"]使用状态为:false");
allPos += mergePos.getPosName() + ",";
}
if (ObjectUtil.isNotEmpty(allPos)) {
log.info("设置库位["+storagePos.getPosName()+"]合并的关联库位[ " + allPos + " ]使用状态为:false");
}
storagePos.setMergePosList(null);
}
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!