Commit 48f673de zshaohui

1.提供缓存信息接口给客户端

1 个父辈 102bc5b0
package com.neotel.smfcore.common.utils;
public class Constants {
private Constants() {
// hide me
}
......@@ -213,4 +215,7 @@ public class Constants {
*/
public static final String Cache_AuthDate = "Cache_AuthDate";
public static final String Cache_BoxCacheInfo = "Cache_BoxCacheInfo";
}
......@@ -472,9 +472,9 @@ public class BaseDeviceHandler implements IDeviceHandler {
} else if (BOX_STATUS.IN_FAILED == status) {//入库失败
//暂不处理
} else if (BOX_STATUS.OUT_FINISHED == status) {//出仓完成
finishedOutPos(statusBean.getCid(),posName,barcode,executeTime);
//finishedOutPos(statusBean.getCid(),posName,barcode,executeTime);
} else if (BOX_STATUS.OUT_END == status) {//出库完成(放到仓门口
endOutTask(statusBean.getCid(),posName,barcode);
//endOutTask(statusBean.getCid(),posName,barcode);
}
// else if (BOX_STATUS.REWARM_TAKING_END == status) {
// //回温取料完成, 将库位清空
......
......@@ -598,7 +598,7 @@ public class StoragePosManagerImpl implements IStoragePosManager {
StoragePos pos = storagePosDao.findOne(query);
if ((!ObjectUtil.isNotEmpty(msg) )&& (pos != null)) {
Point targetP = PointUtil.getPosPoint(lastPosId, false);
log.debug(msg + "结果:[" + pos.getPosName() + "][" + targetP.getX() + "," + targetP.getY() + "]");
log.info(msg + "结果:[" + pos.getPosName() + "][" + targetP.getX() + "," + targetP.getY() + "]");
}
return pos;
}
......
......@@ -252,6 +252,7 @@ public class DataLog extends BasePo implements Serializable ,Comparable<DataLog>
//是否关闭
private boolean closed = false;
private boolean outFromPos = false;
public String getBarcode() {
if(barcode == null){
......
......@@ -527,7 +527,8 @@ public class TaskService {
String cid = storage.getCid();
//有入库任务的料仓不分配出库任务
if (!hasExecutingTask(cid, OP.PUT_IN)) {
DataLog task = findCheckoutBoxTask(storage);
//DataLog task = findCheckoutBoxTask(storage);
DataLog task = null;
if (task != null) {
//从等待列表中删除,加入到执行列表中
......@@ -935,7 +936,7 @@ public class TaskService {
}
try {
Collection<String> operatingPosIds = excludePosIds();
log.debug("尝试从[" + storage.getCid() + "]中为[" + barcode.getBarcode() + "]查找空位");
log.info("尝试从[" + storage.getCid() + "]中为[" + barcode.getBarcode() + "]查找空位");
StoragePos pos = storagePosManager.getEmptyPosByStorage(storage, barcode, operatingPosIds, lastPosId);
if (pos != null) {
//判断尺寸是否一致
......@@ -958,7 +959,7 @@ public class TaskService {
for (Storage storage : availbleStorageList) {
try {
Collection<String> operatingPosIds = excludePosIds();
log.debug("尝试从[" + storage.getCid() + "]中为[" + barcode.getBarcode() + "]查找空位");
log.info("尝试从[" + storage.getCid() + "]中为[" + barcode.getBarcode() + "]查找空位");
StoragePos pos = storagePosManager.getEmptyPosByStorage(storage, barcode, operatingPosIds, lastPosId);
if (pos != null) {
if(isSameSize(barcode,pos)){
......@@ -1350,31 +1351,45 @@ public class TaskService {
}
public List<Barcode> barcodeListByCheckOutType(CHECKOUT_TYPE checkoutType, List<Barcode> barcodeList) {
//按时间进行排序
if (CHECKOUT_TYPE.EXPIRE_FIRST.equals(checkoutType)) {//先过期先出
barcodeList = barcodeList.stream().sorted(Comparator.comparing(Barcode::getExpireDate,Comparator.naturalOrder())
.thenComparing(Barcode::getPutInDate,Comparator.naturalOrder())).collect(Collectors.toList());
} else if (CHECKOUT_TYPE.FIFO.equals(checkoutType)) {//严格的先进先出
barcodeList = barcodeList.stream().sorted(Comparator.comparing(Barcode::getPutInDate,Comparator.naturalOrder())
.thenComparing(Barcode::getUsedCount)).collect(Collectors.toList());
} else if (CHECKOUT_TYPE.USED_FIRST.equals(checkoutType)) {//尾料优先
barcodeList = barcodeList.stream().sorted(Comparator.comparing(Barcode::getAmount)
.thenComparing(Barcode::getPutInDate,Comparator.naturalOrder())).collect(Collectors.toList());
// 处理barcodeList为null的情况
if (barcodeList == null) {
return Collections.emptyList();
}
// 使用Comparator.nullsFirst或nullsLast处理可能的null值
Comparator<Barcode> comparator = null;
if (CHECKOUT_TYPE.EXPIRE_FIRST.equals(checkoutType)) {
// 先过期先出
comparator = Comparator.comparing(Barcode::getExpireDate, Comparator.nullsFirst(Comparator.naturalOrder()))
.thenComparing(Barcode::getPutInDate, Comparator.nullsFirst(Comparator.naturalOrder()));
} else if (CHECKOUT_TYPE.FIFO.equals(checkoutType)) {
// 严格的先进先出
comparator = Comparator.comparing(Barcode::getPutInDate, Comparator.nullsFirst(Comparator.naturalOrder()))
.thenComparing(Barcode::getUsedCount);
} else if (CHECKOUT_TYPE.USED_FIRST.equals(checkoutType)) {
// 尾料优先
comparator = Comparator.comparing(Barcode::getAmount, Comparator.nullsFirst(Comparator.naturalOrder()))
.thenComparing(Barcode::getPutInDate, Comparator.nullsFirst(Comparator.naturalOrder()));
} else if (CHECKOUT_TYPE.PRODUCE_DATE.equals(checkoutType)) {
barcodeList = barcodeList.stream().sorted(Comparator.comparing(Barcode::getProduceDate,Comparator.naturalOrder())
.thenComparing(Barcode::getAmount)
.thenComparing(Barcode::getPutInDate,Comparator.naturalOrder())).collect(Collectors.toList());
comparator = Comparator.comparing(Barcode::getProduceDate, Comparator.nullsFirst(Comparator.naturalOrder()))
.thenComparing(Barcode::getAmount, Comparator.nullsFirst(Comparator.naturalOrder()))
.thenComparing(Barcode::getPutInDate, Comparator.nullsFirst(Comparator.naturalOrder()));
} else if (CHECKOUT_TYPE.BATCH_FIRST.equals(checkoutType)) {
barcodeList = barcodeList.stream().sorted(Comparator.comparing(Barcode::getBatch,Comparator.naturalOrder())
.thenComparing(Barcode::getProduceDate,Comparator.naturalOrder())
.thenComparing(Barcode::getAmount)
.thenComparing(Barcode::getPutInDate,Comparator.naturalOrder())).collect(Collectors.toList());
} else {//效率优先
barcodeList = barcodeList.stream().sorted(Comparator.comparing(Barcode::getPutInDate,Comparator.naturalOrder())
.thenComparing(Barcode::getCreateDate))
.collect(Collectors.toList());
}
return barcodeList;
comparator = Comparator.comparing(Barcode::getBatch, Comparator.nullsFirst(Comparator.naturalOrder()))
.thenComparing(Barcode::getProduceDate, Comparator.nullsFirst(Comparator.naturalOrder()))
.thenComparing(Barcode::getAmount, Comparator.nullsFirst(Comparator.naturalOrder()))
.thenComparing(Barcode::getPutInDate, Comparator.nullsFirst(Comparator.naturalOrder()));
} else {
// 效率优先
comparator = Comparator.comparing(Barcode::getPutInDate, Comparator.nullsFirst(Comparator.naturalOrder()))
.thenComparing(Barcode::getCreateDate, Comparator.nullsFirst(Comparator.naturalOrder()));
}
return barcodeList.stream()
.filter(Objects::nonNull) // 过滤掉可能的null元素
.sorted(comparator)
.collect(Collectors.toList());
}
public void moveTaskToFinished(DataLog task) {
......
package com.neotel.smfcore.custom.france1588.bean;
import lombok.Data;
import java.util.Date;
@Data
public class XlcTask {
private String taskId;
private String barcode;
private int type;
private String toloc;
private String posName;
private String status;
private Date createDate;
}
package com.neotel.smfcore.custom.france1588.enums;
public class TaskLoc {
public static final String BOX_TASK_IN = "BOX_TASK_IN";
public static final String BOX_TASK_OUT = "BOX_TASK_OUT";
}
\ No newline at end of file
......@@ -434,4 +434,5 @@ smfcore.virtualOperations=\u865A\u62DF\u4ED3\u64CD\u4F5C
smfcore.equipment.view.ncgroup=Neo Counter
smfcore.virtual.boxInPos=[{0}]\u5DF2\u5728\u5E93\u4F4D[{1}]\u4E2D,\u8BF7\u5148\u53D6\u51FA
smfcore.virtual.quantityError=\u53D6\u51FA\u6570\u91CF\u5E94\u4E3A[{0}]
smfcode.virtual.enter=\u8BF7\u626B\u63CF\u6216\u8F93\u5165\u6761\u7801\u540E\u6309\u56DE\u8F66\u786E\u8BA4
\ No newline at end of file
smfcode.virtual.enter=\u8BF7\u626B\u63CF\u6216\u8F93\u5165\u6761\u7801\u540E\u6309\u56DE\u8F66\u786E\u8BA4
smfcore.box.findFail=\u672A\u627E\u5230\u53EF\u4EE5\u51FA\u5E93\u7684\u6599\u7BB1
\ No newline at end of file
......@@ -424,4 +424,5 @@ smfcore.virtualOperations=Vorg\u00E4nge im virtuellen Lager
smfcore.equipment.view.ncgroup=Neo Counter
smfcore.virtual.boxInPos=[{0}] befindet sich bereits im Lagerplatz [{1}]. Bitte entnehmen Sie es zuerst
smfcore.virtual.quantityError=Die zu entnehmende Menge sollte [{0}] betragen
smfcode.virtual.enter=Bitte scannen Sie den Barcode oder geben Sie ihn ein und best\u00E4tigen Sie mit Enter
\ No newline at end of file
smfcode.virtual.enter=Bitte scannen Sie den Barcode oder geben Sie ihn ein und best\u00E4tigen Sie mit Enter
smfcore.box.findFail=Kein verf\u00FCgbarer Beh\u00E4lter f\u00FCr den Ausgang gefunden
\ No newline at end of file
......@@ -425,4 +425,5 @@ smfcore.virtualOperations=Virtual Storage Op
smfcore.equipment.view.ncgroup=Neo Counter
smfcore.virtual.boxInPos=[{0}] is already in location [{1}]. Please remove it first
smfcore.virtual.quantityError=The quantity to be removed should be [{0}]
smfcode.virtual.enter=Please scan or enter the barcode, then press Enter
\ No newline at end of file
smfcode.virtual.enter=Please scan or enter the barcode, then press Enter
smfcore.box.findFail=No available bin found for outbound
\ No newline at end of file
......@@ -424,4 +424,5 @@ smfcore.virtualOperations=Op\u00E9rations de l'entrep\u00F4t virtuel
smfcore.equipment.view.ncgroup=Neo Counter
smfcore.virtual.boxInPos=[{0}] est d\u00E9j\u00E0 dans l'emplacement [{1}]. Veuillez d'abord le retirer
smfcore.virtual.quantityError=La quantit\u00E9 \u00E0 retirer doit \u00EAtre [{0}]
smfcode.virtual.enter=Veuillez scanner ou saisir le code-barres, puis appuyer sur Entr\u00E9e
\ No newline at end of file
smfcode.virtual.enter=Veuillez scanner ou saisir le code-barres, puis appuyer sur Entr\u00E9e
smfcore.box.findFail=Aucun bac disponible trouv\u00E9 pour la sortie
\ No newline at end of file
......@@ -421,4 +421,5 @@ smfcore.virtualOperations=\u4EEE\u60F3\u5009\u5EAB\u64CD\u4F5C
smfcore.equipment.view.ncgroup=Neo Counter
smfcore.virtual.boxInPos=[{0}] \u306F\u65E2\u306B\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3 [{1}] \u306B\u3042\u308A\u307E\u3059\u3002\u5148\u306B\u53D6\u308A\u51FA\u3057\u3066\u304F\u3060\u3055\u3044
smfcore.virtual.quantityError=\u53D6\u308A\u51FA\u3057\u6570\u91CF\u306F[{0}]\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059
smfcode.virtual.enter=\u30D0\u30FC\u30B3\u30FC\u30C9\u3092\u30B9\u30AD\u30E3\u30F3\u3001\u307E\u305F\u306F\u5165\u529B\u5F8C\u3001Enter\u30AD\u30FC\u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044
\ No newline at end of file
smfcode.virtual.enter=\u30D0\u30FC\u30B3\u30FC\u30C9\u3092\u30B9\u30AD\u30E3\u30F3\u3001\u307E\u305F\u306F\u5165\u529B\u5F8C\u3001Enter\u30AD\u30FC\u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044
smfcore.box.findFail=\u51FA\u5EAB\u53EF\u80FD\u306A\u7BB1\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093
\ No newline at end of file
......@@ -421,4 +421,5 @@ smfcore.virtualOperations=\u865A\u62DF\u4ED3\u64CD\u4F5C
smfcore.equipment.view.ncgroup=Neo Counter
smfcore.virtual.boxInPos=[{0}]\u5DF2\u5728\u5E93\u4F4D[{1}]\u4E2D,\u8BF7\u5148\u53D6\u51FA
smfcore.virtual.quantityError=\u53D6\u51FA\u6570\u91CF\u5E94\u4E3A[{0}]
smfcode.virtual.enter=\u8BF7\u626B\u63CF\u6216\u8F93\u5165\u6761\u7801\u540E\u6309\u56DE\u8F66\u786E\u8BA4
\ No newline at end of file
smfcode.virtual.enter=\u8BF7\u626B\u63CF\u6216\u8F93\u5165\u6761\u7801\u540E\u6309\u56DE\u8F66\u786E\u8BA4
smfcore.box.findFail=\u672A\u627E\u5230\u53EF\u4EE5\u51FA\u5E93\u7684\u6599\u7BB1
\ No newline at end of file
......@@ -421,4 +421,5 @@ smfcore.virtualOperations=\u865B\u64EC\u5009\u64CD\u4F5C
smfcore.equipment.view.ncgroup=Neo Counter
smfcore.virtual.boxInPos=[{0}]\u5DF2\u5728\u5EAB\u4F4D[{1}]\u4E2D,\u8ACB\u5148\u53D6\u51FA
smfcore.virtual.quantityError=\u53D6\u51FA\u6578\u91CF\u61C9\u70BA[{0}]
smfcode.virtual.enter=\u8ACB\u6383\u63CF\u6216\u8F38\u5165\u689D\u78BC\u5F8C\u6309\u56DE\u8ECA\u78BA\u8A8D
\ No newline at end of file
smfcode.virtual.enter=\u8ACB\u6383\u63CF\u6216\u8F38\u5165\u689D\u78BC\u5F8C\u6309\u56DE\u8ECA\u78BA\u8A8D
smfcore.box.findFail=\u672A\u627E\u5230\u53EF\u4EE5\u51FA\u5EAB\u7684\u6599\u7BB1
\ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!