Commit 07b3795c 张少辉

1.电子仓CTU出库逻辑修改

1 个父辈 2f39a58c
......@@ -153,6 +153,12 @@ public class BarcodeDto implements Serializable {
private String pidBarcode;
//出库增加的参数
private String stockoutNo; //出库单号
private String stockoutNoLine; //出库对应的行数
private String lastStockOutNum; //上一次出库的数量
private int needStockNum;
/**
* 关联条码,夹具时关联相关的物料,用于入库完成时插入相关物料
*/
......
......@@ -544,4 +544,17 @@ public class Barcode extends BasePo implements Serializable {
}
}
}
public Barcode getSubCodeByBarcode(String barcodeStr) {
if (subCodeList == null) {
return null;
}
for (Barcode barcode : subCodeList
) {
if (barcode.getBarcode().equals(barcodeStr)) {
return barcode;
}
}
return null;
}
}
......@@ -108,4 +108,6 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
StoragePos dualPosNameGetEmptyPosByStorage(Storage storage, Barcode barcode, Collection<String> operatingPosIds, String lastPosId, String needMovePosName, String endStr, List<String> needExcludePosName);
StoragePos getBySubBarcode(String container);
List<StoragePos> findPosListByPartNumber(List<String> availableStorageIds, String partNumber, Collection<String> excludePosIds, CHECKOUT_TYPE checkoutType, Map<String, String> appendDate);
}
......@@ -517,6 +517,29 @@ public class StoragePosManagerImpl implements IStoragePosManager {
}
@Override
public List<StoragePos> findPosListByPartNumber(List<String> storageIdList, String pn, Collection<String> excludePosIds, CHECKOUT_TYPE checkOutType,Map<String,String> appendData) {
Criteria c = Criteria.where("id").nin(excludePosIds)
.and("enabled").is(true)//可用
.and("barcode.lockId").is(null);//没有被锁定的仓位;
if (storageIdList != null) {
c = c.and("storageId").in(storageIdList);
}
if (appendData != null) {
c = addAppendData(c, appendData);
}
List<Criteria> orCriterialList = Lists.newArrayList();
orCriterialList.add(Criteria.where("barcode.partNumber").is(pn));
orCriterialList.add(Criteria.where("barcode.subCodeList.partNumber").is(pn));
c.orOperator(orCriterialList);
Query q = new Query(c);
Sort sort = getSortByCheckOutType(checkOutType);
q.with(sort);
return storagePosDao.findByQuery(q);
}
@Override
public PageData<StoragePos> findByPage(Query query, Pageable pageable) {
int totalCount = storagePosDao.countByQuery(query);
List<StoragePos> list = storagePosDao.findByQuery(query, pageable);
......
......@@ -35,6 +35,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* Created by sunke on 2021/7/13.
......@@ -1572,4 +1573,46 @@ public class TaskService {
return dualPosNameFindEmptyPosInStorages(barcode, availbleStorageList, hasOutTaskStorageIds, lastPosId,needMovePosName,endStr);
}
public List<Barcode> barcodeListByCheckOutType(CHECKOUT_TYPE checkoutType, List<Barcode> barcodeList) {
// 处理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)) {
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)) {
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());
}
}
......@@ -75,7 +75,6 @@ public class AgvElecDeviceController {
if (StringUtils.isNotEmpty(barcode.getPosName())) {
return ResultBean.newErrorResult(-1, "smfcore.materialBox.inPos", "物料已在库位{0}中", new String[]{barcode.getBarcode()});
}
//判断出库任务有没有结束
List<DataLog> dataLogList = taskService.getAllTasks();
for (DataLog dataLog : dataLogList) {
......@@ -223,10 +222,10 @@ public class AgvElecDeviceController {
opTask.setOutFromPos(true);
}
taskService.updateFinishedTask(opTask);
if (!opTask.isNotifyMomo()) {
/*if (!opTask.isNotifyMomo()) {
opTask.setNotifyMomo(true);
taskService.updateFinishedTask(opTask);
}
}*/
if (OP_STATUS.FINISHED.name().equals(statusStr)) {
//已完成,从完成缓存中清除
taskService.removeFinishedTask(opTask);
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!