Commit 07b04f6e zshaohui

1.取消任务代码优化

2.人工喂料增加禁用信息
3.外仓呼叫空箱优化
1 个父辈 33a60f6c
...@@ -873,6 +873,9 @@ public class LiteOrderCache { ...@@ -873,6 +873,9 @@ public class LiteOrderCache {
List<String> partNumberList = cacheOrder.getOrderItems().stream().map(item -> item.getPn()).collect(Collectors.toList()); List<String> partNumberList = cacheOrder.getOrderItems().stream().map(item -> item.getPn()).collect(Collectors.toList());
List<StoragePos> allStoragePosList = storagePosManager.findStoragePosByPartNumber(partNumberList); List<StoragePos> allStoragePosList = storagePosManager.findStoragePosByPartNumber(partNumberList);
//已经校验过的料箱信息
List<String> alreadyCheckBox = new ArrayList<>();
List<StoragePos> needOutPoss = new ArrayList<>(); List<StoragePos> needOutPoss = new ArrayList<>();
int orderTaskReelCount = 0; int orderTaskReelCount = 0;
//开始循环处理工单详情 //开始循环处理工单详情
...@@ -941,7 +944,22 @@ public class LiteOrderCache { ...@@ -941,7 +944,22 @@ public class LiteOrderCache {
//调用批量禁用料接口 //调用批量禁用料接口
List<String> batchCheckList = new ArrayList<>(); List<String> batchCheckList = new ArrayList<>();
try { try {
batchCheckList = lizhenApi.batchCheck(subCodeList); if (alreadyCheckBox != null && !alreadyCheckBox.isEmpty()){
if (alreadyCheckBox.contains(barcode.getBarcode())){
} else {
log.info("当前料箱已经校验过:" + barcode.getBarcode());
batchCheckList = lizhenApi.batchCheck(subCodeList);
if (batchCheckList == null || batchCheckList.isEmpty()){
alreadyCheckBox.add(barcode.getBarcode());
}
}
} else {
batchCheckList = lizhenApi.batchCheck(subCodeList);
if (batchCheckList == null || batchCheckList.isEmpty()){
alreadyCheckBox.add(barcode.getBarcode());
}
}
}catch (Exception e){ }catch (Exception e){
e.printStackTrace(); e.printStackTrace();
} }
......
...@@ -274,45 +274,51 @@ public class TaskService { ...@@ -274,45 +274,51 @@ public class TaskService {
return tasks; return tasks;
} }
private boolean cancelTask(DataLog task) { private synchronized boolean cancelTask(DataLog task) {
if (task != null) { if (task != null) {
//从正在执行和等待列表中移除 //进行库位屏蔽
removeQueueTask(task); if (!task.isFinished()) {
task.setStatus(OP_STATUS.CANCEL.name());
task.setUpdateDate(new Date());
updateFinishedTask(task);
log.info("任务[" + task.getId() + "] posName[" + task.getPosName() + "] Reel Id[" + task.getBarcode() + "]取消成功");
//同时进行库位屏蔽
if (/*task.isPutInTask() &&*/ !task.isFinished()){
String posName = task.getPosName(); String posName = task.getPosName();
if (StringUtils.isNotBlank(posName)){ if (StringUtils.isNotBlank(posName)) {
StoragePos pos = storagePosManager.getByPosName(posName); StoragePos pos = storagePosManager.getByPosName(posName);
if (pos != null){ if (pos != null) {
//排查料架 String storageId = pos.getStorageId();
Storage storage = dataCache.getStorageById(pos.getStorageId()); Storage storage = dataCache.getStorageById(storageId);
if (!storage.isNLShelf() && !storage.isNLMShelf() && !storage.isNLPShelf() && !storage.isShelf()) { //1.排除料架
if (!storage.isNLShelf() && !storage.isNLMShelf() && !storage.isShelf() && !storage.isNLPShelf()){
pos.setEnabled(false); pos.setEnabled(false);
pos.setMsg("任务取消,屏蔽库位"); pos.setMsg("任务取消,屏蔽库位");
//2.判断库位中barcode是否为空
if (task.isCheckOutTask()){
Barcode barcode = pos.getBarcode();
if (barcode != null){
barcode = clearOut(barcode);
pos.setBarcode(barcode);
} else {
Barcode oriBarcode = barcodeManager.findByBarcode(task.getBarcode());
if (oriBarcode != null){
clearOut(oriBarcode);
}
}
}
storagePosManager.save(pos); storagePosManager.save(pos);
log.info("任务取消,屏蔽库位:库位号[" + pos.getId() + "][" + pos.getPosName() + "]barcode[" + task.getBarcode() + "]"); log.info("任务取消,屏蔽库位:库位号[" + pos.getId() + "][" + pos.getPosName() + "]barcode[" + task.getBarcode() + "]");
DeviceMessageUtil.addEnabledPosMessage(pos, SecurityUtils.getCurrentUsername());
}
//清除标记
Barcode barcode = clearOut(pos.getBarcode());
//如果是出库任务,同时更新库位信息
if (task.isCheckOutTask()) {
if (pos.getBarcode() != null) {
pos.setBarcode(barcode);
storagePosManager.save(pos);
}
} }
} }
} }
//从正在执行和等待列表中移除
removeQueueTask(task);
task.setStatus(OP_STATUS.CANCEL.name());
task.setUpdateDate(new Date());
updateFinishedTask(task);
log.info("任务[" + task.getId() + "] posName[" + task.getPosName() + "] Reel Id[" + task.getBarcode() + "]取消成功");
//解除绑定 //解除绑定
ReelLockPosUtil.removeReelLockPosInfo(task.getBarcode()); ReelLockPosUtil.removeReelLockPosInfo(task.getBarcode());
return true;
} }
return true;
} }
return false; return false;
} }
......
...@@ -1351,37 +1351,15 @@ public class WarehouseController { ...@@ -1351,37 +1351,15 @@ public class WarehouseController {
private synchronized DataLog getCallEmptyBoxTask(String platsize, String name) { private synchronized DataLog getCallEmptyBoxTask(String platsize, String name) {
//获取料箱id
String storageId = "";
Collection<Storage> storages = dataCache.getAllStorage().values();
for (Storage storage : storages) {
if (storage.isType(new DeviceType[]{DeviceType.AGV_BOX})) {
storageId = storage.getId();
}
}
Criteria c = Criteria.where("barcode").exists(true).and("enabled").is(true);//可用
//排除掉正在使用的仓位
Collection<String> excludePosIds = taskService.excludePosIds();
if (excludePosIds != null && !excludePosIds.isEmpty()) {
c.and("id").nin(excludePosIds);
}
//料仓id
if (StringUtils.isNotBlank(storageId)) {
c.and("storageId").is(storageId);
}
//料盘数量小于70盘
c.and("barcode.reelAmount").lte(70);
//进行排序方式
Query q = new Query(c).with(Sort.by(Sort.Direction.ASC, "barcode.amount"));
StoragePos pos = null; StoragePos pos = null;
List<StoragePos> poss = new ArrayList<>(); List<StoragePos> poss = new ArrayList<>();
if ("15".equals(platsize)) { if ("15".equals(platsize)) {
poss = storagePosManager.findByQuery(q.addCriteria(Criteria.where("barcode.partNumber").regex(Pattern.compile(QueryHelp.escapeExprSpecialWord("CM"), Pattern.CASE_INSENSITIVE)))); poss = storagePosManager.findByQuery(getCallEmptyBox("CM"));
} else { } else {
poss = storagePosManager.findByQuery(q.addCriteria(Criteria.where("barcode.partNumber").regex(Pattern.compile(QueryHelp.escapeExprSpecialWord("CS"), Pattern.CASE_INSENSITIVE)))); poss = storagePosManager.findByQuery(getCallEmptyBox("CS"));
if (poss == null || poss.isEmpty()) { if (poss == null || poss.isEmpty()) {
poss = storagePosManager.findByQuery(q.addCriteria(Criteria.where("barcode.partNumber").regex(Pattern.compile(QueryHelp.escapeExprSpecialWord("CB"), Pattern.CASE_INSENSITIVE)))); poss = storagePosManager.findByQuery(getCallEmptyBox("CB"));
} }
} }
//找隔口中 没有物料的箱子 //找隔口中 没有物料的箱子
...@@ -1432,6 +1410,42 @@ public class WarehouseController { ...@@ -1432,6 +1410,42 @@ public class WarehouseController {
} }
private Query getCallEmptyBox(String partNUmber) {
//获取料箱id
String storageId = "";
Collection<Storage> storages = dataCache.getAllStorage().values();
for (Storage storage : storages) {
if (storage.isType(new DeviceType[]{DeviceType.AGV_BOX})) {
storageId = storage.getId();
}
}
Criteria c = Criteria.where("barcode").exists(true).and("enabled").is(true);//可用
//排除掉正在使用的仓位
Collection<String> excludePosIds = taskService.excludePosIds();
if (excludePosIds != null && !excludePosIds.isEmpty()) {
c.and("id").nin(excludePosIds);
}
//料仓id
if (StringUtils.isNotBlank(storageId)) {
c.and("storageId").is(storageId);
}
//料盘数量小于70盘
c.and("barcode.reelAmount").lte(70);
//匹配料箱
c.and("barcode.partNumber").regex(Pattern.compile(QueryHelp.escapeExprSpecialWord(partNUmber), Pattern.CASE_INSENSITIVE));
//进行排序方式
Query q = new Query(c);
q.with(Sort.by(Sort.Direction.ASC, "barcode.amount"));
//包含哪些字段
q.fields().include("id","storageId","posName","barcode.partNumber","barcode.barcode","barcode.amount","barcode.memo","barcode.putInDate","barcode.putInTime","barcode.describe","barcode.subCodeList.posName");
return q;
}
/** /**
* 获取正在执行的任务 * 获取正在执行的任务
* *
......
...@@ -6,6 +6,7 @@ import com.neotel.smfcore.common.utils.JsonUtil; ...@@ -6,6 +6,7 @@ import com.neotel.smfcore.common.utils.JsonUtil;
import com.neotel.smfcore.common.utils.QueryHelp; import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.ReelLockPosUtil; import com.neotel.smfcore.common.utils.ReelLockPosUtil;
import com.neotel.smfcore.common.utils.StringUtils; import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.api.SmfApi;
import com.neotel.smfcore.core.barcode.bean.CodeBean; import com.neotel.smfcore.core.barcode.bean.CodeBean;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager; import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
...@@ -84,6 +85,9 @@ public class InnerBoxRestController { ...@@ -84,6 +85,9 @@ public class InnerBoxRestController {
@Autowired @Autowired
private IDataLogManager dataLogManager; private IDataLogManager dataLogManager;
@Autowired
private SmfApi smfApi;
//料架缓存id //料架缓存id
private static Map<String,String> labelOrderItemMap = new ConcurrentHashMap<>(); private static Map<String,String> labelOrderItemMap = new ConcurrentHashMap<>();
...@@ -511,6 +515,15 @@ public class InnerBoxRestController { ...@@ -511,6 +515,15 @@ public class InnerBoxRestController {
if (barcode == null) { if (barcode == null) {
return ResultBean.newErrorResult(-1, "smfcore.error.barcode.invalid", "{0}不是有效的条码", new String[]{barcodestr}); return ResultBean.newErrorResult(-1, "smfcore.error.barcode.invalid", "{0}不是有效的条码", new String[]{barcodestr});
} }
//手动喂料时,增加判断是不是禁用料
try {
smfApi.canPutInAfterResolve(barcode);
} catch (ValidateException e) {
e.printStackTrace();
return ResultBean.newErrorResult(-1, "", e.getMessage());
}
//不在仓中,不允许出库 //不在仓中,不允许出库
StoragePos storagePos = storagePosManager.getByBarcode(barcode.getBarcode()); StoragePos storagePos = storagePosManager.getByBarcode(barcode.getBarcode());
if (storagePos == null){ if (storagePos == null){
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!