Commit a8bc1204 zshaohui

1.移库优先找里侧的库位

2.其他功能优化
1 个父辈 65d01ef4
......@@ -220,7 +220,7 @@ public class XLRBoxHandler extends BaseDeviceHandler {
checkoutSize++;
if (checkoutSize >= 2) {
//log.error("cid["+cid + "]的BOX["+ boxId+"]的出库任务已经超过2个,不再分配!");
//return null;
return null;
}
}
}
......
......@@ -886,7 +886,14 @@ public class DeviceController {
if(loopCount>=10 ){
log.info(barcode.getBarcode()+"已循环查找10次 直接跳出循环");
}
pos = taskService.findEmptyPosForMoveIn(storageList, barcode, "", "",needMovePosName);
//优先找B结束的,如果没有再找F的
String endStr = "B";
pos = taskService.findEmptyPosForMoveIn(storageList, barcode, "", "",needMovePosName,endStr);
if (pos == null){
endStr = "F";
pos = taskService.findEmptyPosForMoveIn(storageList, barcode, "", "",needMovePosName,endStr);
break;
}
if (pos == null){
break;
}
......@@ -1052,6 +1059,10 @@ public class DeviceController {
dataCache.updateInventory(needMovePos, barcode);
//重新设置barcode的库位
barcode.setPosName(targetPos.getPosName());
barcodeManager.save(barcode);
//生成一条入库任务
DataLog targetPosTask = new DataLog(storage, barcode, targetPos);
targetPosTask.setOperator("admin-move");
......
......@@ -50,5 +50,10 @@ public enum EquipmentType {
/**
* 韩华
*/
HANWHA()
HANWHA(),
/**
* 线体流水线
*/
OUTLINE()
}
......@@ -227,6 +227,9 @@ public class BoxKanbanController {
dtos.add(boxTaskMapper.toDto(datalog));
}
}
if (dtos != null && !dtos.isEmpty()){
dtos = dtos.stream().sorted(Comparator.comparing(BoxTaskDto :: getUpdateDate)).collect(Collectors.toList());
}
return new PageData<>(dtos, dtos.size());
}
......
......@@ -97,4 +97,7 @@ public class BoxTaskDto {
private Date createDate = new Date();
@ApiModelProperty("更新时间")
private Date updateDate=new Date();
@ApiModelProperty("出料口")
private String export = "";
}
......@@ -760,7 +760,7 @@ public class LiteOrderCache {
if (task.isCheckOutTask()) {
String posId = task.getPosId();
if (!Strings.isNullOrEmpty(posId)) {
log.info("需要排除的库位为:" + task.getPosName() + ",barcode为:" + task.getBarcode() + ",任务状态为:" + task.getStatus() + ",上一次修改时间为:" + task.getUpdateDate()+",物料编号为:"+task.getPartNumber());
//log.info("需要排除的库位为:" + task.getPosName() + ",barcode为:" + task.getBarcode() + ",任务状态为:" + task.getStatus() + ",上一次修改时间为:" + task.getUpdateDate()+",物料编号为:"+task.getPartNumber());
operatingPosIds.add(task.getPosId());
}
}
......
......@@ -49,7 +49,7 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
StoragePos getEmptyPosByStorage(Storage storage, Barcode barcode, Collection<String> excludePosIds, String lastPosId) throws ValidateException;
StoragePos getEmptyPosByStorage(Storage storage, Barcode barcode, Collection<String> excludePosIds, String lastPosId,String needMovePosName) throws ValidateException;
StoragePos getEmptyPosByStorage(Storage storage, Barcode barcode, Collection<String> excludePosIds, String lastPosId,String needMovePosName,String endStr) throws ValidateException;
StoragePos getEmptyPosByStorage(Storage storage, int size, int height, Collection<String> excludePosIds) throws ValidateException;
......
......@@ -465,11 +465,11 @@ public class StoragePosManagerImpl implements IStoragePosManager {
@Override
public StoragePos getEmptyPosByStorage(Storage storage, Barcode barcode, Collection<String> excludePosIds,String lastPosId) throws ValidateException {
return getEmptyPosByStorage(storage,barcode,excludePosIds,lastPosId,"");
return getEmptyPosByStorage(storage,barcode,excludePosIds,lastPosId,"","");
}
@Override
public StoragePos getEmptyPosByStorage(Storage storage, Barcode barcode, Collection<String> excludePosIds,String lastPosId,String needMovePosName) throws ValidateException {
public StoragePos getEmptyPosByStorage(Storage storage, Barcode barcode, Collection<String> excludePosIds,String lastPosId,String needMovePosName,String endStr) throws ValidateException {
Criteria c = Criteria.where("storageId").is(storage.getId());
......@@ -491,8 +491,12 @@ public class StoragePosManagerImpl implements IStoragePosManager {
if (excludePosIds != null && !excludePosIds.isEmpty()) {
c = c.and("id").nin(excludePosIds);
}
if (StringUtils.isNotEmpty(needMovePosName)){
c.and("posName").nin(needMovePosName);
if (StringUtils.isNotEmpty(needMovePosName) && StringUtils.isNotEmpty(endStr)) {
Criteria posNameCriteria = new Criteria();
String regex = ""+endStr+"$";
posNameCriteria.andOperator(Criteria.where("posName").ne(needMovePosName), Criteria.where("posName").regex(Pattern.compile(regex)));
c.andOperator(posNameCriteria);
}
......
......@@ -822,7 +822,7 @@ public class TaskService {
* @param barcode
* @return
*/
public StoragePos findEmptyPosForMoveIn(List<Storage> storageList, Barcode barcode, String inRFID, String lastPosId,String needMovePosName) throws ValidateException {
public StoragePos findEmptyPosForMoveIn(List<Storage> storageList, Barcode barcode, String inRFID, String lastPosId,String needMovePosName,String endStr) throws ValidateException {
Collection<DataLog> queueTasks = getQueueTasks();
List<DataLog> allTasksa = getFinishedTasks();
if (!queueTasks.isEmpty()) {
......@@ -928,14 +928,14 @@ public class TaskService {
}
});
return findEmptyPosInStorages(barcode, availbleStorageList, hasOutTaskStorageIds, lastPosId,needMovePosName);
return findEmptyPosInStorages(barcode, availbleStorageList, hasOutTaskStorageIds, lastPosId,needMovePosName,endStr);
}
private synchronized StoragePos findEmptyPosInStorages(Barcode barcode, List<Storage> availbleStorageList, final Set<String> hasOutTaskStorageIds, String lastPosId){
return findEmptyPosInStorages(barcode,availbleStorageList,hasOutTaskStorageIds,lastPosId,"");
return findEmptyPosInStorages(barcode,availbleStorageList,hasOutTaskStorageIds,lastPosId,"","");
}
private synchronized StoragePos findEmptyPosInStorages(Barcode barcode, List<Storage> availbleStorageList, final Set<String> hasOutTaskStorageIds, String lastPosId,String needMovePosName) {
private synchronized StoragePos findEmptyPosInStorages(Barcode barcode, List<Storage> availbleStorageList, final Set<String> hasOutTaskStorageIds, String lastPosId,String needMovePosName,String endStr) {
//第一遍查找,先不查找有出库任务的料仓
for (Storage storage : availbleStorageList) {
......@@ -947,7 +947,7 @@ public class TaskService {
try {
Collection<String> operatingPosIds = excludePosIds();
log.debug("尝试从[" + storage.getCid() + "]中为[" + barcode.getBarcode() + "]查找空位");
StoragePos pos = storagePosManager.getEmptyPosByStorage(storage, barcode, operatingPosIds, lastPosId,needMovePosName);
StoragePos pos = storagePosManager.getEmptyPosByStorage(storage, barcode, operatingPosIds, lastPosId,needMovePosName,endStr);
if (pos != null) {
return pos;
}
......@@ -960,7 +960,7 @@ public class TaskService {
try {
Collection<String> operatingPosIds = excludePosIds();
log.debug("尝试从[" + storage.getCid() + "]中为[" + barcode.getBarcode() + "]查找空位");
StoragePos pos = storagePosManager.getEmptyPosByStorage(storage, barcode, operatingPosIds, lastPosId,needMovePosName);
StoragePos pos = storagePosManager.getEmptyPosByStorage(storage, barcode, operatingPosIds, lastPosId,needMovePosName,endStr);
if (pos != null) {
return pos;
}
......
......@@ -3,6 +3,7 @@ package com.neotel.smfcore.custom.Jkem21481.bean.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.bean.BetweenData;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
......@@ -12,6 +13,7 @@ public class ReturnStorageQueryCondition {
@QueryCondition(blurry = "orderNo,pn,returnBarcode,feederInfo")
private String blurry;
@QueryCondition(type = QueryCondition.Type.BETWEEN)
@QueryCondition(type = QueryCondition.Type.BETWEEN, propName = "createDate")
@DateTimeFormat(pattern = "yyyy-MM-dd HH")
private BetweenData<Date> createDate;
}
......@@ -367,9 +367,8 @@ public class JkemController {
Map<String, Object> resultMap = new HashMap<>();
String barcodeStr = paramMap.get("barcode");
log.info(barcodeStr + "获取目的地信息");
CodeBean codeBean = codeResolve.resolveSingleCode(barcodeStr);
Barcode barcode = codeBean.getBarcode();
if(barcode == null){
Barcode barcode = codeResolve.resolveOneValideBarcode(barcodeStr);
/*if(barcode == null){
if (barcodeStr.endsWith("##")){
barcodeStr=barcodeStr.substring(0,barcodeStr.length()-2);
codeBean=codeResolve.resolveSingleCode(barcodeStr);
......@@ -378,7 +377,7 @@ public class JkemController {
}
if (barcode == null) {
barcode = codeResolve.resolveOneValideBarcode(barcodeStr);
}
}*/
if (barcode != null) {
log.info("解析到的条码信息为:"+barcode.getBarcode());
......@@ -437,9 +436,8 @@ public class JkemController {
String x = request.getParameter("x");
String y = request.getParameter("y");
log.info("IA 出库更新任务状态--barcode:{},status:{},loc:{},hSerial:{},outlet:{},boxSide:{},cid:{},outlet:{},x:{},y:{}", code, status, loc, hSerial, outlet, boxSide, cid, outlet, x, y);
CodeBean codeBean = codeResolve.resolveSingleCode(code);
Barcode barcode = codeBean.getBarcode();
if(barcode == null){
Barcode barcode = codeResolve.resolveOneValideBarcode(code);
/*if(barcode == null){
if (code.endsWith("##")){
code=code.substring(0,code.length()-2);
codeBean=codeResolve.resolveSingleCode(code);
......@@ -448,7 +446,7 @@ public class JkemController {
}
if (barcode == null){
barcode = codeResolve.resolveOneValideBarcode(code);
}
}*/
if (barcode == null) {
return ResultBean.newErrorResult(-1,"smfcore.error.barcode.invalid","{0}不是有效的条码",new String[]{code});
......
......@@ -80,8 +80,8 @@ public class StackerController {
@ApiOperation("根据料串信息,获取可用的料仓")
@RequestMapping("/getAvailableStorageByStacker")
@AnonymousAccess
public ResultBean getAvailableStorageByStacker(String stacker) {
log.info("获取可用料仓[{}]信息", stacker);
public ResultBean getAvailableStorageByStacker(String stacker,String storageCid) {
log.info("获取可用料仓[{}]信息,排除的cid为{}", stacker,storageCid);
if (StringUtils.isEmpty(stacker)) {
return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"stacker"});
}
......@@ -89,13 +89,13 @@ public class StackerController {
if (!bindStacker) {
return ResultBean.newErrorResult(-1, "smfcore.valueNotFind", "未找到{0}[{1}]", new String[]{"stacker", stacker});
}
List<String> availableStorageList = getAvailableStorage(stacker);
List<String> availableStorageList = getAvailableStorage(stacker,storageCid);
return ResultBean.newOkResult(availableStorageList);
}
private static final List<String> msdCidList = Arrays.asList("XLR4A","XLR4B","XLR5A","XLR5B","XLR6A","XLR6B");
private List<String> getAvailableStorage(String stacker) {
private List<String> getAvailableStorage(String stacker,String storageCid) {
List<StackerCache> stackerCacheList = StackerUtil.getDetailByStacker(stacker);
//Msd和非Msd列表
List<StackerCache> msdList = new ArrayList<>();
......@@ -105,12 +105,25 @@ public class StackerController {
}
}
if (msdList != null && !msdList.isEmpty()) {
log.info("料串[{}]的msd不为空,信息为[{}],直接返回Msd列表", stacker, JSON.toJSONString(msdList));
return msdCidList;
List<String> resultList = new ArrayList<>();
for (String msdCid : msdCidList) {
if (StringUtils.isNotEmpty(storageCid)){
if (storageCid.equals(msdCid));
continue;
}
resultList.add(msdCid);
}
log.info("料串[{}]的msd不为空,信息为[{}],直接返回Msd列表", stacker, JSON.toJSONString(resultList));
return resultList;
}
//不是msd的料仓
List<Storage> noMsdStorageList = new ArrayList<>();
for (Storage storage : dataCache.getAllStorage().values()) {
if (StringUtils.isNotEmpty(storageCid)){
if (storageCid.equals(storage.getCid()));
continue;
}
if (!msdCidList.contains(storage.getCid())) {
noMsdStorageList.add(storage);
}
......@@ -122,6 +135,10 @@ public class StackerController {
//msd的料仓
List<Storage> msdStorageList = new ArrayList<>();
for (Storage storage : dataCache.getAllStorage().values()) {
if (StringUtils.isNotEmpty(storageCid)){
if (storageCid.equals(storage.getCid()));
continue;
}
if (msdCidList.contains(storage.getCid())) {
msdStorageList.add(storage);
}
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!