Commit 07b04f6e zshaohui

1.取消任务代码优化

2.人工喂料增加禁用信息
3.外仓呼叫空箱优化
1 个父辈 33a60f6c
......@@ -873,6 +873,9 @@ public class LiteOrderCache {
List<String> partNumberList = cacheOrder.getOrderItems().stream().map(item -> item.getPn()).collect(Collectors.toList());
List<StoragePos> allStoragePosList = storagePosManager.findStoragePosByPartNumber(partNumberList);
//已经校验过的料箱信息
List<String> alreadyCheckBox = new ArrayList<>();
List<StoragePos> needOutPoss = new ArrayList<>();
int orderTaskReelCount = 0;
//开始循环处理工单详情
......@@ -941,7 +944,22 @@ public class LiteOrderCache {
//调用批量禁用料接口
List<String> batchCheckList = new ArrayList<>();
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){
e.printStackTrace();
}
......
......@@ -274,45 +274,51 @@ public class TaskService {
return tasks;
}
private boolean cancelTask(DataLog task) {
private synchronized boolean cancelTask(DataLog task) {
if (task != null) {
//从正在执行和等待列表中移除
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() + "]取消成功");
//同时进行库位屏蔽
if (/*task.isPutInTask() &&*/ !task.isFinished()){
//进行库位屏蔽
if (!task.isFinished()) {
String posName = task.getPosName();
if (StringUtils.isNotBlank(posName)){
if (StringUtils.isNotBlank(posName)) {
StoragePos pos = storagePosManager.getByPosName(posName);
if (pos != null){
//排查料架
Storage storage = dataCache.getStorageById(pos.getStorageId());
if (!storage.isNLShelf() && !storage.isNLMShelf() && !storage.isNLPShelf() && !storage.isShelf()) {
if (pos != null) {
String storageId = pos.getStorageId();
Storage storage = dataCache.getStorageById(storageId);
//1.排除料架
if (!storage.isNLShelf() && !storage.isNLMShelf() && !storage.isShelf() && !storage.isNLPShelf()){
pos.setEnabled(false);
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);
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());
return true;
}
return true;
}
return false;
}
......
......@@ -1351,37 +1351,15 @@ public class WarehouseController {
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;
List<StoragePos> poss = new ArrayList<>();
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 {
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()) {
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 {
}
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;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.ReelLockPosUtil;
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.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
......@@ -84,6 +85,9 @@ public class InnerBoxRestController {
@Autowired
private IDataLogManager dataLogManager;
@Autowired
private SmfApi smfApi;
//料架缓存id
private static Map<String,String> labelOrderItemMap = new ConcurrentHashMap<>();
......@@ -511,6 +515,15 @@ public class InnerBoxRestController {
if (barcode == null) {
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());
if (storagePos == null){
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!