|
|
|
|
@ -227,6 +227,9 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 背负式Agv退库
|
|
|
|
|
/// </summary>
|
|
|
|
|
private void BackReturnTaskLogic()
|
|
|
|
|
{
|
|
|
|
|
using var scope = _host.Services.CreateScope();
|
|
|
|
|
@ -235,7 +238,7 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
{
|
|
|
|
|
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
|
|
|
|
|
WcsTask? wcsTask = dbContext.WcsTask.Where(t => t.taskType == 28).FirstOrDefault();
|
|
|
|
|
if(wcsTask != null)
|
|
|
|
|
if (wcsTask != null)
|
|
|
|
|
{
|
|
|
|
|
WmsRawInstock? wmsRawInstock = dbContext.WmsRawInstock.Where(t => t.instockType == "2" && t.warehouseId == 511 && t.executeStatus == "0").FirstOrDefault();
|
|
|
|
|
if (wmsRawInstock != null)
|
|
|
|
|
@ -247,15 +250,15 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
WmsRawInstockDetail wmsRawInstockDetail = new WmsRawInstockDetail()
|
|
|
|
|
{
|
|
|
|
|
rawInstockDetailId = StaticData.SnowId.NextId(),
|
|
|
|
|
rawInstockId=wmsRawInstock.rawInstockId,
|
|
|
|
|
rawInstockId = wmsRawInstock.rawInstockId,
|
|
|
|
|
instockWay = "2",
|
|
|
|
|
activeFlag="1",
|
|
|
|
|
activeFlag = "1",
|
|
|
|
|
stackAmount = 1,
|
|
|
|
|
createBy = "WCS",
|
|
|
|
|
createDate = DateTime.Now,
|
|
|
|
|
materialId = wmsRawInstock.materialId,
|
|
|
|
|
instockAmount = 1,
|
|
|
|
|
executeStatus="0",
|
|
|
|
|
executeStatus = "0",
|
|
|
|
|
};
|
|
|
|
|
dbContext.Update(wmsRawInstock);
|
|
|
|
|
dbContext.Update(wcsTask);
|
|
|
|
|
@ -868,7 +871,9 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
{
|
|
|
|
|
var proStock = dbContext.WmsProductStock
|
|
|
|
|
.Where(t => t.warehouseId == 231)
|
|
|
|
|
.Where(t => t.activeFlag == "0").ToList();
|
|
|
|
|
.Where(t => t.activeFlag == "0")
|
|
|
|
|
.Where(t => t.totalAmount > t.frozenAmount)
|
|
|
|
|
.ToList();
|
|
|
|
|
var proOutStock = dbContext.WmsProductOutstock
|
|
|
|
|
.Where(t => t.outstockQty < t.applyQty)
|
|
|
|
|
.Where(t => t.auditStatus == "1")
|
|
|
|
|
@ -878,197 +883,184 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
//获取最早入库时间
|
|
|
|
|
foreach (var item in proOutStock)
|
|
|
|
|
{
|
|
|
|
|
task = dbContext.WcsTask.Where(t => t.nextPointId == 8 && t.taskStatus <= 7).Any();
|
|
|
|
|
if (!task)
|
|
|
|
|
|
|
|
|
|
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.floorNo == 2 && t.equipType == 1);
|
|
|
|
|
var wmsproStocks = proStock
|
|
|
|
|
.Where(t => t.productId == item.productId && t.warehouseId == item.warehouseId)
|
|
|
|
|
.Select(t => t.palletInfoCode)
|
|
|
|
|
.ToList();
|
|
|
|
|
|
|
|
|
|
var wmsBaseLocations = dbContext.WmsBaseLocation
|
|
|
|
|
.Where(t => t.activeFlag == "1")
|
|
|
|
|
.Where(t => t.delFlag == "0")
|
|
|
|
|
.Where(t => t.locationScrapType == "1")
|
|
|
|
|
.Where(t => t.instockFlag == "0")
|
|
|
|
|
.Where(t => t.outstockFlag == "0")
|
|
|
|
|
.Where(t => t.warehouseId == item.warehouseId)
|
|
|
|
|
.Where(t => wmsproStocks.Contains(t.containerCode))
|
|
|
|
|
.ToList();
|
|
|
|
|
|
|
|
|
|
decimal needNumber = Convert.ToDecimal(item.applyQty - item.outstockQty);
|
|
|
|
|
if (needNumber <= 0)
|
|
|
|
|
{
|
|
|
|
|
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.floorNo == 2 && t.equipType == 1);
|
|
|
|
|
var wmsproStocks = proStock
|
|
|
|
|
.Where(t => t.productId == item.productId && t.warehouseId == item.warehouseId)
|
|
|
|
|
.Select(t => t.palletInfoCode)
|
|
|
|
|
.ToList();
|
|
|
|
|
item.executeStatus = "2";
|
|
|
|
|
dbContext.Update(item);
|
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var wmsBaseLocations = dbContext.WmsBaseLocation
|
|
|
|
|
.Where(t => t.activeFlag == "1")
|
|
|
|
|
.Where(t => t.delFlag == "0")
|
|
|
|
|
.Where(t => t.locationScrapType == "1")
|
|
|
|
|
.Where(t => t.instockFlag == "0")
|
|
|
|
|
.Where(t => t.outstockFlag == "0")
|
|
|
|
|
.Where(t => t.warehouseId == item.warehouseId)
|
|
|
|
|
.Where(t => wmsproStocks.Contains(t.containerCode))
|
|
|
|
|
.ToList();
|
|
|
|
|
var bill = from a in wmsBaseLocations
|
|
|
|
|
from b in proStock
|
|
|
|
|
where a.containerCode == b.palletInfoCode
|
|
|
|
|
select new { a, b };
|
|
|
|
|
|
|
|
|
|
decimal needNumber = Convert.ToDecimal(item.applyQty - item.outstockQty);
|
|
|
|
|
if (needNumber <= 0)
|
|
|
|
|
BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8);
|
|
|
|
|
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 2);
|
|
|
|
|
foreach (var b in bill)
|
|
|
|
|
{
|
|
|
|
|
item.executeStatus = "1";
|
|
|
|
|
WmsBaseLocation location = b.a;
|
|
|
|
|
WmsProductStock stock = b.b;
|
|
|
|
|
WcsTask wcsTask;
|
|
|
|
|
int qty = 0;
|
|
|
|
|
if (stock.totalAmount - stock.frozenAmount <= needNumber)
|
|
|
|
|
{
|
|
|
|
|
item.executeStatus = "2";
|
|
|
|
|
dbContext.Update(item);
|
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var bill = from a in wmsBaseLocations
|
|
|
|
|
from b in proStock
|
|
|
|
|
where a.containerCode == b.palletInfoCode
|
|
|
|
|
select new { a, b };
|
|
|
|
|
//如果第一列满足需求,则按第一列排序,否则按最后一列排序
|
|
|
|
|
if (bill.Where(t => t.a.locColumn == 1).Select(t => t.b.totalAmount - t.b.frozenAmount).Sum() > needNumber)
|
|
|
|
|
{
|
|
|
|
|
bill = bill.OrderBy(t => t.a.locColumn).ToList();
|
|
|
|
|
item.outstockQty += stock.totalAmount - stock.frozenAmount;
|
|
|
|
|
qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount);
|
|
|
|
|
stock.updateDate = DateTime.Now;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
bill = bill.OrderByDescending(t => t.a.locColumn).ToList();
|
|
|
|
|
item.outstockQty += needNumber;
|
|
|
|
|
qty = Convert.ToInt32(needNumber);
|
|
|
|
|
stock.updateDate = DateTime.Now;
|
|
|
|
|
}
|
|
|
|
|
//做数量限制
|
|
|
|
|
|
|
|
|
|
BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8);
|
|
|
|
|
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 2);
|
|
|
|
|
foreach (var b in bill)
|
|
|
|
|
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == location.containerCode);
|
|
|
|
|
if (mesBasePalletInfo != null)
|
|
|
|
|
{
|
|
|
|
|
item.executeStatus = "1";
|
|
|
|
|
WmsBaseLocation location = b.a;
|
|
|
|
|
WmsProductStock stock = b.b;
|
|
|
|
|
WcsTask wcsTask;
|
|
|
|
|
int qty = 0;
|
|
|
|
|
if (stock.totalAmount - stock.frozenAmount <= needNumber)//该料箱全部出
|
|
|
|
|
WmsProductOutstockDetail detail = new()
|
|
|
|
|
{
|
|
|
|
|
item.outstockQty += stock.totalAmount - stock.frozenAmount;
|
|
|
|
|
qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount);
|
|
|
|
|
stock.updateDate = DateTime.Now;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
productId = item.productId,
|
|
|
|
|
productOutstockId = item.productOutstockId,
|
|
|
|
|
locationCode = location.locationCode,
|
|
|
|
|
executeStatus = "1",
|
|
|
|
|
beginTime = DateTime.Now,
|
|
|
|
|
warehouseId = item.warehouseId,
|
|
|
|
|
erpAmount = 0,
|
|
|
|
|
confirmAmount = 0,
|
|
|
|
|
outstockAmount = 1,
|
|
|
|
|
planAmount = 1,
|
|
|
|
|
productBatch = item.productBatch,
|
|
|
|
|
productOutstockDetailId = StaticData.SnowId.NextId(),
|
|
|
|
|
productBarcode = mesBasePalletInfo.materialBarcode,
|
|
|
|
|
};
|
|
|
|
|
if (location.locDeep == 1)//如果是深库位
|
|
|
|
|
{
|
|
|
|
|
item.outstockQty += needNumber;
|
|
|
|
|
qty = Convert.ToInt32(needNumber);
|
|
|
|
|
stock.updateDate = DateTime.Now;
|
|
|
|
|
}
|
|
|
|
|
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == location.containerCode);
|
|
|
|
|
if (mesBasePalletInfo != null)
|
|
|
|
|
{
|
|
|
|
|
WmsProductOutstockDetail detail = new()
|
|
|
|
|
int? row = 0;
|
|
|
|
|
if (location.locRow % 2 == 1)
|
|
|
|
|
{
|
|
|
|
|
productId = item.productId,
|
|
|
|
|
productOutstockId = item.productOutstockId,
|
|
|
|
|
locationCode = location.locationCode,
|
|
|
|
|
executeStatus = "1",
|
|
|
|
|
beginTime = DateTime.Now,
|
|
|
|
|
warehouseId = item.warehouseId,
|
|
|
|
|
erpAmount = 0,
|
|
|
|
|
confirmAmount = 0,
|
|
|
|
|
outstockAmount = 1,
|
|
|
|
|
planAmount = 1,
|
|
|
|
|
productBatch = item.productBatch,
|
|
|
|
|
productOutstockDetailId = StaticData.SnowId.NextId(),
|
|
|
|
|
productBarcode = mesBasePalletInfo.materialBarcode
|
|
|
|
|
};
|
|
|
|
|
if (location.locDeep == 1)
|
|
|
|
|
row = location.locRow + 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
int? row = 0;
|
|
|
|
|
if (location.locRow % 2 == 1)
|
|
|
|
|
row = location.locRow - 1;
|
|
|
|
|
}
|
|
|
|
|
WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == row)
|
|
|
|
|
.Where(t => t.locColumn == location.locColumn)
|
|
|
|
|
.Where(t => t.warehouseId == location.warehouseId).FirstOrDefault();
|
|
|
|
|
if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode))
|
|
|
|
|
{
|
|
|
|
|
WmsBaseLocation? toLocation = dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId)
|
|
|
|
|
.Where(t => t.locDeep == 1)
|
|
|
|
|
.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();
|
|
|
|
|
toLocation ??= dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId)
|
|
|
|
|
.Where(t => t.warehouseId != location.locationId)
|
|
|
|
|
.Where(t => string.IsNullOrEmpty(t.containerCode))
|
|
|
|
|
.FirstOrDefault();
|
|
|
|
|
if (toLocation != null)
|
|
|
|
|
{
|
|
|
|
|
row = location.locRow + 1;
|
|
|
|
|
var RemoveTask = new WcsTask()
|
|
|
|
|
{
|
|
|
|
|
objid = StaticData.SnowId.NextId(),
|
|
|
|
|
orderId = item.productOutstockId,
|
|
|
|
|
taskType = 38,
|
|
|
|
|
containerNo = wmsBaseLocation.containerCode,
|
|
|
|
|
createBy = "WCS",
|
|
|
|
|
createTime = DateTime.Now.AddSeconds(-10),
|
|
|
|
|
taskStatus = 0,
|
|
|
|
|
materialId = item.productId,
|
|
|
|
|
currPointId = wmsBaseLocation.locationId,
|
|
|
|
|
currPointNo = wmsBaseLocation.locationCode,
|
|
|
|
|
nextPointId = agvEquip.objid,
|
|
|
|
|
nextPointNo = agvEquip.equipNo,
|
|
|
|
|
endPointId = toLocation.locationId,
|
|
|
|
|
endPointNo = toLocation.locationCode,
|
|
|
|
|
equipmentNo = agvEquip.equipNo,
|
|
|
|
|
useFlag = 1,
|
|
|
|
|
qty = qty
|
|
|
|
|
};
|
|
|
|
|
toLocation.locationStatus = "4";
|
|
|
|
|
toLocation.instockFlag = "1";
|
|
|
|
|
toLocation.updateBy = "WCS";
|
|
|
|
|
toLocation.updateTime = DateTime.Now;
|
|
|
|
|
wmsBaseLocation.updateBy = "WCS";
|
|
|
|
|
wmsBaseLocation.updateTime = DateTime.Now;
|
|
|
|
|
wmsBaseLocation.outstockFlag = "1";
|
|
|
|
|
wmsBaseLocation.locationStatus = "4";
|
|
|
|
|
dbContext.Update(toLocation);
|
|
|
|
|
dbContext.Update(wmsBaseLocation);
|
|
|
|
|
dbContext.Add(RemoveTask);
|
|
|
|
|
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(RemoveTask);
|
|
|
|
|
dbContext.Add(wcsTaskLog);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
row = location.locRow - 1;
|
|
|
|
|
}
|
|
|
|
|
WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == row)
|
|
|
|
|
.Where(t => t.locColumn == location.locColumn)
|
|
|
|
|
.Where(t => t.warehouseId == location.warehouseId).FirstOrDefault();
|
|
|
|
|
if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode))
|
|
|
|
|
{
|
|
|
|
|
WmsBaseLocation? toLocation = dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId)
|
|
|
|
|
.Where(t => t.locDeep == 1)
|
|
|
|
|
.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();
|
|
|
|
|
toLocation ??= dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId)
|
|
|
|
|
.Where(t => t.warehouseId != location.locationId)
|
|
|
|
|
.Where(t => string.IsNullOrEmpty(t.containerCode))
|
|
|
|
|
.FirstOrDefault();
|
|
|
|
|
if (toLocation != null)
|
|
|
|
|
{
|
|
|
|
|
var RemoveTask = new WcsTask()
|
|
|
|
|
{
|
|
|
|
|
objid = StaticData.SnowId.NextId(),
|
|
|
|
|
orderId = item.productOutstockId,
|
|
|
|
|
taskType = 38,
|
|
|
|
|
containerNo = wmsBaseLocation.containerCode,
|
|
|
|
|
createBy = "WCS",
|
|
|
|
|
createTime = DateTime.Now.AddSeconds(-10),
|
|
|
|
|
taskStatus = 0,
|
|
|
|
|
materialId = item.productId,
|
|
|
|
|
currPointId = wmsBaseLocation.locationId,
|
|
|
|
|
currPointNo = wmsBaseLocation.locationCode,
|
|
|
|
|
nextPointId = agvEquip.objid,
|
|
|
|
|
nextPointNo = agvEquip.equipNo,
|
|
|
|
|
endPointId = toLocation.locationId,
|
|
|
|
|
endPointNo = toLocation.locationCode,
|
|
|
|
|
equipmentNo = agvEquip.equipNo,
|
|
|
|
|
useFlag = 1,
|
|
|
|
|
qty = qty
|
|
|
|
|
};
|
|
|
|
|
toLocation.locationStatus = "4";
|
|
|
|
|
toLocation.instockFlag = "1";
|
|
|
|
|
toLocation.updateBy = "WCS";
|
|
|
|
|
toLocation.updateTime = DateTime.Now;
|
|
|
|
|
wmsBaseLocation.updateBy = "WCS";
|
|
|
|
|
wmsBaseLocation.updateTime = DateTime.Now;
|
|
|
|
|
wmsBaseLocation.outstockFlag = "1";
|
|
|
|
|
wmsBaseLocation.locationStatus = "4";
|
|
|
|
|
dbContext.Update(toLocation);
|
|
|
|
|
dbContext.Update(wmsBaseLocation);
|
|
|
|
|
dbContext.Add(RemoveTask);
|
|
|
|
|
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(RemoveTask);
|
|
|
|
|
dbContext.Add(wcsTaskLog);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
wcsTask = new WcsTask()
|
|
|
|
|
{
|
|
|
|
|
objid = StaticData.SnowId.NextId(),
|
|
|
|
|
orderId = item.productOutstockId,
|
|
|
|
|
taskType = 38,
|
|
|
|
|
containerNo = location.containerCode,
|
|
|
|
|
createBy = "WCS",
|
|
|
|
|
createTime = DateTime.Now,
|
|
|
|
|
taskStatus = 0,
|
|
|
|
|
materialId = item.productId,
|
|
|
|
|
currPointId = location.locationId,
|
|
|
|
|
currPointNo = location.locationCode,
|
|
|
|
|
nextPointId = agvEquip.objid,
|
|
|
|
|
nextPointNo = agvEquip.equipNo,
|
|
|
|
|
endPointId = lineEquip.objid,
|
|
|
|
|
endPointNo = lineEquip.equipNo,
|
|
|
|
|
equipmentNo = agvEquip.equipNo,
|
|
|
|
|
useFlag = 1,
|
|
|
|
|
qty = qty
|
|
|
|
|
};
|
|
|
|
|
location.outstockFlag = "1";
|
|
|
|
|
location.locationStatus = "6";
|
|
|
|
|
location.updateBy = "WCS";
|
|
|
|
|
location.updateTime = DateTime.Now;
|
|
|
|
|
dbContext.Add(detail);
|
|
|
|
|
dbContext.Update(location);
|
|
|
|
|
dbContext.Add(wcsTask);
|
|
|
|
|
dbContext.Update(stock);
|
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
|
if (qty >= needNumber)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
wcsTask = new WcsTask()
|
|
|
|
|
{
|
|
|
|
|
objid = StaticData.SnowId.NextId(),
|
|
|
|
|
orderId = item.productOutstockId,
|
|
|
|
|
taskType = 38,
|
|
|
|
|
containerNo = location.containerCode,
|
|
|
|
|
createBy = "WCS",
|
|
|
|
|
createTime = DateTime.Now,
|
|
|
|
|
taskStatus = 0,
|
|
|
|
|
materialId = item.productId,
|
|
|
|
|
currPointId = location.locationId,
|
|
|
|
|
currPointNo = location.locationCode,
|
|
|
|
|
nextPointId = agvEquip.objid,
|
|
|
|
|
nextPointNo = agvEquip.equipNo,
|
|
|
|
|
endPointId = lineEquip.objid,
|
|
|
|
|
endPointNo = lineEquip.equipNo,
|
|
|
|
|
equipmentNo = agvEquip.equipNo,
|
|
|
|
|
useFlag = 1,
|
|
|
|
|
qty = qty
|
|
|
|
|
};
|
|
|
|
|
location.outstockFlag = "1";
|
|
|
|
|
location.locationStatus = "6";
|
|
|
|
|
location.updateBy = "WCS";
|
|
|
|
|
location.updateTime = DateTime.Now;
|
|
|
|
|
dbContext.Add(detail);
|
|
|
|
|
dbContext.Update(location);
|
|
|
|
|
dbContext.Add(wcsTask);
|
|
|
|
|
dbContext.Update(stock);
|
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
|
if (qty >= needNumber)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if (item.beginTime == null)
|
|
|
|
|
{
|
|
|
|
|
item.beginTime = DateTime.Now;
|
|
|
|
|
}
|
|
|
|
|
dbContext.Update(item);
|
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
|
}
|
|
|
|
|
if (item.beginTime == null)
|
|
|
|
|
{
|
|
|
|
|
item.beginTime = DateTime.Now;
|
|
|
|
|
}
|
|
|
|
|
dbContext.Update(item);
|
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|