master
2 years ago
parent 4a2fea030a
commit 86225850dd

@ -32,10 +32,10 @@ namespace Khd.Core.Wcs.Wcs
/// </summary> /// </summary>
public void StartPoint() public void StartPoint()
{ {
var createRemoveThread = new Thread(CreateRemoveLogic); //var createRemoveThread = new Thread(CreateRemoveLogic);
createRemoveThread.IsBackground = true; //createRemoveThread.IsBackground = true;
createRemoveThread.Name = "CreateRemoveLogic"; //createRemoveThread.Name = "CreateRemoveLogic";
createRemoveThread.Start(); //createRemoveThread.Start();
//背负式Agv返库任务 //背负式Agv返库任务
var createBearAgvReturnThread = new Thread(CreateBearAgvReturnLogic); var createBearAgvReturnThread = new Thread(CreateBearAgvReturnLogic);
@ -99,7 +99,7 @@ namespace Khd.Core.Wcs.Wcs
{ {
using var scope = _host.Services.CreateScope(); using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>(); using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
List<string> cannotIn=new List<string>(); List<string> cannotIn = new List<string>();
while (true) while (true)
{ {
try try
@ -155,14 +155,13 @@ namespace Khd.Core.Wcs.Wcs
var outBill = from a in bill//深库位托盘和当前任务绑定物料一致的托盘库位 var outBill = from a in bill//深库位托盘和当前任务绑定物料一致的托盘库位
from b in wmsBaseLocations//所有库位 from b in wmsBaseLocations//所有库位
where a.b.layerNum == b.layerNum//层数相同 where b.locDeep == 2//浅库位
&& b.locDeep == 2//浅库位
&& b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1) && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1)
//如果是4则找3如果是1则找2 //如果是4则找3如果是1则找2
&& a.b.locColumn == b.locColumn//列数相同 && a.b.locColumn == b.locColumn//列数相同
&& string.IsNullOrEmpty(b.containerCode) && string.IsNullOrEmpty(b.containerCode)
select new { a,b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 select new { a, b };//在上面的基础上获取对应托盘的外侧库位的空库位信息
wmsBaseLocation ??= outBill.Where(t=> !cannotIn.Contains(t.b.locationCode)).FirstOrDefault()?.b;//先找相同物料的外侧库位 wmsBaseLocation ??= outBill.Where(t => !cannotIn.Contains(t.b.locationCode)).FirstOrDefault()?.b;//先找相同物料的外侧库位
wmsBaseLocation ??= wmsBaseLocations.Where(t => !cannotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 1);//找不到再找深库位 wmsBaseLocation ??= wmsBaseLocations.Where(t => !cannotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 1);//找不到再找深库位
wmsBaseLocation ??= wmsBaseLocations.Where(t => !cannotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 wmsBaseLocation ??= wmsBaseLocations.Where(t => !cannotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位
if (wmsBaseLocation != null)//如果找到库位,生成入库任务 if (wmsBaseLocation != null)//如果找到库位,生成入库任务
@ -270,8 +269,7 @@ namespace Khd.Core.Wcs.Wcs
var outBill = from a in bill//深库位托盘和当前任务绑定物料一致的托盘库位 var outBill = from a in bill//深库位托盘和当前任务绑定物料一致的托盘库位
from b in wmsBaseLocations//所有库位 from b in wmsBaseLocations//所有库位
where a.b.layerNum == b.layerNum//层数相同 where b.locDeep == 2//浅库位
&& b.locDeep == 2//浅库位
&& b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1) && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1)
//如果是4则找3如果是1则找2 //如果是4则找3如果是1则找2
&& a.b.locColumn == b.locColumn//列数相同 && a.b.locColumn == b.locColumn//列数相同
@ -354,49 +352,122 @@ namespace Khd.Core.Wcs.Wcs
try try
{ {
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
WcsTask? wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == 28 && t.useFlag == 0 && t.currPointId == 29).FirstOrDefault(); BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 29);
if (wcsTask != null) if (baseEquip.emptyCount == 1)
{ {
WmsRawInstock? wmsRawInstock = dbContext.WmsRawInstock.Where(t => t.warehouseId == 511 && t.instockType == "2" && t.executeStatus == "0").FirstOrDefault(); WcsTask? wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == 28).FirstOrDefault();
if (wmsRawInstock != null) if (wcsTask == null)
{ {
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == wcsTask.containerNo); WmsRawInstock? wmsRawInstock = dbContext.WmsRawInstock.Where(t => t.warehouseId == 511 && t.instockType == "2" && t.executeStatus == "0").FirstOrDefault();
if (mesBasePalletInfo != null) if (wmsRawInstock != null)
{ {
MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode); MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == wmsRawInstock.palletInfoCode);
if (mesBaseBarcodeInfo != null) if (mesBasePalletInfo != null)
{ {
WmsRawInstockDetail wmsRawInstockDetail = new WmsRawInstockDetail MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode);
if (mesBaseBarcodeInfo != null)
{ {
rawInstockDetailId = StaticData.SnowId.NextId(), var wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseFloor == 5)
stackAmount = 1, .Where(t => t.activeFlag == "1")
erpStatus = "0", .Where(t => t.delFlag == "0")
executeStatus = "1", .Where(t => t.locationScrapType == "1")
qualityStatus = "0", .Where(t => t.warehouseId == 511)
activeFlag = "1", .Where(t => t.locationStatus == "1")
createBy = "WCS", .OrderByDescending(t => t.locColumn)
createDate = DateTime.Now, .ToList();
erpAmount = 0,
instockAmount = 1, List<string> containerCodes = wmsBaseLocations
instockBatch = mesBasePalletInfo.materialBarcode, .Where(t => t.locDeep == 1)
instockTime = DateTime.Now, .Select(t => t.containerCode).ToList();//深库位的托盘
instockWay = "2", containerCodes.RemoveAll(t => string.IsNullOrEmpty(t));
locationCode = wcsTask.endPointNo, List<MesBaseBarcodeInfo> mesBasePalletInfos = dbContext.MesBaseBarcodeInfo
machineName = mesBaseBarcodeInfo.machineName, .Where(t => t.materialId == mesBasePalletInfo.materialId)
materialBarcode = mesBasePalletInfo.materialBarcode, .Where(t => t.saleOrderId == mesBaseBarcodeInfo.saleOrderId)
materialId = mesBaseBarcodeInfo.materialId, .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料
materialProductionDate = mesBaseBarcodeInfo.productionDate,
planAmount = 1, var bill = from a in mesBasePalletInfos
poNo = mesBaseBarcodeInfo.poNo, join b in wmsBaseLocations.Where(t => t.locDeep == 1) on a.palletInfoCode equals b.containerCode
rawInstockId = wmsRawInstock.rawInstockId, select new { b };//等于当前任务的物料的托盘的库位信息
taskCode = wmsRawInstock.taskCode,
}; var outBill = from a in bill
dbContext.Add(wmsRawInstockDetail); from b in wmsBaseLocations
wmsRawInstock.executeStatus = "1"; where b.locDeep == 2
wcsTask.useFlag = 1; && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1)
dbContext.Update(wmsRawInstock); && a.b.locColumn == b.locColumn
dbContext.Update(wcsTask); && b.locationStatus == "1"
dbContext.SaveChanges(); && string.IsNullOrEmpty(b.containerCode)
select new { a, b };//在上面的基础上获取对应托盘的外侧库位的空库位信息
WmsBaseLocation? wmsBaseLocation = null;
wmsBaseLocation ??= outBill.FirstOrDefault()?.b;//先找相同物料的外侧库位
wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 1);//找不到再找深库位
wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位
//深浅库位问题?库位入库优先级等
var AgvEquip = StaticData.BaseEquip.First(t => t.objid == 28);//5楼叉车
if (wmsBaseLocation != null)
{
if (wmsBaseLocation.locDeep == 1)
{
bool hasLocation = wmsBaseLocations
.Where(t => t.locRow == (wmsBaseLocation.locRow % 2 == 1 ? (wmsBaseLocation.locRow + 1) : (wmsBaseLocation.locRow - 1)))
.Where(t => t.locColumn == wmsBaseLocation.locColumn).Any();
if (!hasLocation)
{
Console.WriteLine(DateTime.Now + $":目标库位{wmsBaseLocation.locationCode}的浅库位库位状态异常,无法入库");
_logger.Info($"目标库位{wmsBaseLocation.locationCode}的浅库位库位状态异常,无法入库");
continue;
}
}
WcsTask newTask = new WcsTask();
newTask.taskStatus = 0;//创建状态
newTask.updateTime = DateTime.Now;
newTask.currPointId = baseEquip.objid;
newTask.currPointNo = baseEquip.equipNo;
newTask.nextPointId = AgvEquip.objid;
newTask.nextPointNo = AgvEquip.equipNo;
newTask.endPointId = wmsBaseLocation.locationId;
newTask.endPointNo = wmsBaseLocation.locationCode;
newTask.containerNo = mesBasePalletInfo.palletInfoCode;
newTask.materialId = mesBasePalletInfo.materialId;
newTask.objid = StaticData.SnowId.NextId();
newTask.createTime = DateTime.Now;
newTask.taskType = 28;
newTask.useFlag = 1;
wmsBaseLocation.locationStatus = "2";
WmsRawInstockDetail wmsRawInstockDetail = new WmsRawInstockDetail
{
rawInstockDetailId = StaticData.SnowId.NextId(),
stackAmount = 1,
erpStatus = "0",
executeStatus = "1",
qualityStatus = "0",
activeFlag = "1",
createBy = "WCS",
createDate = DateTime.Now,
erpAmount = 0,
instockAmount = 1,
instockBatch = mesBasePalletInfo.materialBarcode,
instockTime = DateTime.Now,
instockWay = "2",
locationCode = newTask.endPointNo,
machineName = mesBaseBarcodeInfo.machineName,
materialBarcode = mesBasePalletInfo.materialBarcode,
materialId = mesBaseBarcodeInfo.materialId,
materialProductionDate = mesBaseBarcodeInfo.productionDate,
planAmount = 1,
poNo = mesBaseBarcodeInfo.poNo,
rawInstockId = wmsRawInstock.rawInstockId,
taskCode = wmsRawInstock.taskCode,
};
dbContext.Add(wmsRawInstockDetail);
dbContext.Update(wmsBaseLocation);
dbContext.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
}
}
} }
} }
} }
@ -661,6 +732,7 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.locationScrapType == "1") .Where(t => t.locationScrapType == "1")
.Where(t => t.locationStatus == "1") .Where(t => t.locationStatus == "1")
.Where(t => t.containerCode == null) .Where(t => t.containerCode == null)
.Where(t=>t.warehouseId==521)
.OrderByDescending(t => t.locColumn) .OrderByDescending(t => t.locColumn)
.FirstOrDefault(); .FirstOrDefault();
if (wmsBaseLocation != null) if (wmsBaseLocation != null)
@ -1167,7 +1239,7 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.warehouseId != location.locationId) .Where(t => t.warehouseId != location.locationId)
.Where(t => string.IsNullOrEmpty(t.containerCode)) .Where(t => string.IsNullOrEmpty(t.containerCode))
.FirstOrDefault(); .FirstOrDefault();
if (toLocation != null) if (toLocation != null)
{ {
if (toLocation.locDeep == 1) if (toLocation.locDeep == 1)
@ -2025,7 +2097,7 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.locRow == row) .Where(t => t.locRow == row)
.Where(t => t.locColumn == location.locColumn) .Where(t => t.locColumn == location.locColumn)
.Where(t => t.warehouseId == location.warehouseId).FirstOrDefault(); .Where(t => t.warehouseId == location.warehouseId).FirstOrDefault();
if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode)&&wmsBaseLocation.locationStatus=="1") if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode) && wmsBaseLocation.locationStatus == "1")
{ {
WmsRawStock? wmsRawStock = dbContext.WmsRawStock.FirstOrDefault(t => t.locationCode == wmsBaseLocation.locationCode); WmsRawStock? wmsRawStock = dbContext.WmsRawStock.FirstOrDefault(t => t.locationCode == wmsBaseLocation.locationCode);
if (wmsRawStock != null) if (wmsRawStock != null)

@ -37,7 +37,6 @@ namespace Khd.Core.Wcs.Wcs
/// </summary> /// </summary>
public void StartPoint() public void StartPoint()
{ {
Thread FlowPointThread = new(MonitorInLocatorPoint); Thread FlowPointThread = new(MonitorInLocatorPoint);
FlowPointThread.IsBackground = true; FlowPointThread.IsBackground = true;
FlowPointThread.Name = "FiveFloorAGV"; FlowPointThread.Name = "FiveFloorAGV";
@ -59,7 +58,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var taskList = dbContext.WcsTask var taskList = dbContext.WcsTask
.Where(t => t.useFlag == 1) .Where(t => t.useFlag == 1)
.Where(t=>t.IsDelete==0||t.IsDelete==null) .Where(t => t.IsDelete == 0 || t.IsDelete == null)
.Where(t => t.nextPointId == agvID).OrderBy(t => t.createTime).ToList(); .Where(t => t.nextPointId == agvID).OrderBy(t => t.createTime).ToList();
foreach (var item in taskList) foreach (var item in taskList)
{ {
@ -68,6 +67,7 @@ namespace Khd.Core.Wcs.Wcs
_logger.Info($"5楼AGV线程有其他任务正在执行跳过当前任务{item.objid}"); _logger.Info($"5楼AGV线程有其他任务正在执行跳过当前任务{item.objid}");
continue; continue;
} }
item.updateTime = DateTime.Now;
if (item.taskStatus == 0)//下发任务 if (item.taskStatus == 0)//下发任务
{ {
BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType); BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType);
@ -88,7 +88,7 @@ namespace Khd.Core.Wcs.Wcs
continue; continue;
} }
BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1); BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1);
RequestAGVTaskDto agvTask = new () RequestAGVTaskDto agvTask = new()
{ {
reqCode = StaticData.SnowId.NextId().ToString(), reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position> positionCodePath = new List<Position>
@ -416,7 +416,7 @@ namespace Khd.Core.Wcs.Wcs
} }
else if (item.taskStatus == 5) else if (item.taskStatus == 5)
{ {
if (item.taskType == 66)//移库 if (item.taskType == 66)//移库
{ {
Console.WriteLine(DateTime.Now + ":五楼AGV线程完成任务" + item.currPointNo + "," + item.endPointNo); Console.WriteLine(DateTime.Now + ":五楼AGV线程完成任务" + item.currPointNo + "," + item.endPointNo);
@ -466,7 +466,7 @@ namespace Khd.Core.Wcs.Wcs
{ {
Console.WriteLine(DateTime.Now + ":五楼AGV线程完成任务" + item.currPointNo + "," + item.endPointNo); Console.WriteLine(DateTime.Now + ":五楼AGV线程完成任务" + item.currPointNo + "," + item.endPointNo);
_logger.Info("五楼Agv完成任务成功" + item.ToJsonString()); _logger.Info("五楼Agv完成任务成功" + item.ToJsonString());
var wmsProductOutstockDetail = dbContext.WmsProductOutstockDetail.FirstOrDefault(t => t.productOutstockId == item.orderId&&t.executeStatus == "1" && t.locationCode == item.currPointNo); var wmsProductOutstockDetail = dbContext.WmsProductOutstockDetail.FirstOrDefault(t => t.productOutstockId == item.orderId && t.executeStatus == "1" && t.locationCode == item.currPointNo);
var wmsProductOutstock = dbContext.WmsProductOutstock.FirstOrDefault(t => t.productOutstockId == item.orderId); var wmsProductOutstock = dbContext.WmsProductOutstock.FirstOrDefault(t => t.productOutstockId == item.orderId);
if (wmsProductOutstockDetail != null && wmsProductOutstock != null) if (wmsProductOutstockDetail != null && wmsProductOutstock != null)
{ {
@ -519,6 +519,7 @@ namespace Khd.Core.Wcs.Wcs
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
wmsBaseLocation.locationStatus = "1"; wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = null; wmsBaseLocation.containerCode = null;
wmsBaseLocation.returnFlag = "0";
wmsBaseLocation.updateTime = DateTime.Now; wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS"; wmsBaseLocation.updateBy = "WCS";
dbContext.Update(wmsRawOutstock); dbContext.Update(wmsRawOutstock);
@ -590,7 +591,7 @@ namespace Khd.Core.Wcs.Wcs
} }
} }
else if (item.taskType == 46)//该任务结束后立刻生成一个新的返库任务但是是否使用标志未0等待mes通知 else if (item.taskType == 46)//原材料到柜体拆分
{ {
Console.WriteLine(DateTime.Now + ":五楼AGV线程完成任务" + item.currPointNo + "," + item.endPointNo); Console.WriteLine(DateTime.Now + ":五楼AGV线程完成任务" + item.currPointNo + "," + item.endPointNo);
_logger.Info("五楼Agv完成任务成功" + item.ToJsonString()); _logger.Info("五楼Agv完成任务成功" + item.ToJsonString());
@ -604,55 +605,16 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(wmsRawOutStock); dbContext.Update(wmsRawOutStock);
dbContext.Update(wmsRawOutstockDetail); dbContext.Update(wmsRawOutstockDetail);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
wmsBaseLocation.locationStatus = "2"; wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = null; wmsBaseLocation.containerCode = null;
wmsBaseLocation.updateTime = DateTime.Now; wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS"; wmsBaseLocation.updateBy = "WCS";
WmsRawStock? wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == wmsBaseLocation.locationCode).FirstOrDefault(); WmsRawStock? wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == wmsBaseLocation.locationCode).FirstOrDefault();
if (wmsRawStock != null) if (wmsRawStock != null)
{ {
wmsRawStock.completeFlag = "0"; dbContext.Remove(wmsRawStock);
wmsRawStock.updateDate = DateTime.Now;
wmsRawStock.updateBy = "WCS";
dbContext.Update(wmsRawStock);
dbContext.Update(wmsBaseLocation); dbContext.Update(wmsBaseLocation);
if (wmsBaseLocation.locDeep == 1)
{
int? locRow = 0;
if (wmsBaseLocation.locRow % 2 == 1)
{
locRow = wmsBaseLocation.locRow + 1;
}
else
{
locRow = wmsBaseLocation.locRow - 1;
}
WmsBaseLocation? deepWmsLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == locRow)
.Where(t => t.locColumn == wmsBaseLocation.locColumn)
.Where(t => t.warehouseId == wmsBaseLocation.warehouseId)
.FirstOrDefault();
if (deepWmsLocation != null)
{
deepWmsLocation.locationStatus = "2";
dbContext.Update(deepWmsLocation);
}
}
WcsTask newTask = CoreMapper.Map<WcsTask>(item);
newTask.objid = StaticData.SnowId.NextId();
var currPointId = item.currPointId;
var currPointNo = item.currPointNo;
newTask.currPointId = item.endPointId;
newTask.currPointNo = item.endPointNo;
newTask.endPointId = item.currPointId;
newTask.endPointNo = item.currPointNo;
newTask.createTime = DateTime.Now;
newTask.taskType = 28;
newTask.taskStatus = 0;
newTask.useFlag = 0;
dbContext.Remove(item); dbContext.Remove(item);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(newTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges(); dbContext.SaveChanges();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 }); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
} }
@ -668,42 +630,48 @@ namespace Khd.Core.Wcs.Wcs
wmsBaseLocation.updateTime = DateTime.Now; wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS"; wmsBaseLocation.updateBy = "WCS";
wmsBaseLocation.returnFlag = "1"; wmsBaseLocation.returnFlag = "1";
var wmsRawStock = dbContext.WmsRawStock.FirstOrDefault(t => t.locationCode == wmsBaseLocation.locationCode); MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo);
if (wmsRawStock != null) if (mesBasePalletInfo != null)
{ {
wmsRawStock.completeFlag = "0"; MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode);
wmsRawStock.updateDate = DateTime.Now; if (mesBaseBarcodeInfo != null)
wmsRawStock.updateBy = "WCS";
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
startEquip.emptyCount = 0;
dbContext.Update(startEquip);
dbContext.Update(wmsRawStock);
dbContext.Update(wmsBaseLocation);
if (wmsBaseLocation.locDeep == 1)
{ {
int? locRow = 0; WmsRawStock wmsRawStock = new()
if (wmsBaseLocation.locRow % 2 == 1)
{ {
locRow = wmsBaseLocation.locRow + 1; palletInfoCode = mesBasePalletInfo.palletInfoCode,
} activeFlag = "1",
else createBy = "WCS",
{ createDate = DateTime.Now,
locRow = wmsBaseLocation.locRow - 1; frozenAmount = 0,
} instockDate = DateTime.Now,
WmsBaseLocation? deepWmsLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == locRow) locationCode = wmsBaseLocation.locationCode,
.Where(t => t.locColumn == wmsBaseLocation.locColumn) occupyAmount = 0,
.Where(t => t.warehouseId == wmsBaseLocation.warehouseId) warehouseFloor = 5,
.FirstOrDefault(); stockType = "1",
if (deepWmsLocation != null) totalAmount = 1,
{ saleOrderId = mesBaseBarcodeInfo.saleOrderId == null ? 0 : mesBaseBarcodeInfo.saleOrderId,
deepWmsLocation.locationStatus = "1"; safeFlag = mesBaseBarcodeInfo.safeFlag,
dbContext.Update(deepWmsLocation); supplierId = mesBaseBarcodeInfo.manufacturerId,
} materialId = mesBasePalletInfo.materialId,
qualityStatus = "0",
rawStockId = StaticData.SnowId.NextId(),
completeFlag = "0",
instockBatch = mesBaseBarcodeInfo.barcodeInfo,
updateBy = "WCS",
updateDate = DateTime.Now,
warehouseId = 511,
};
dbContext.Add(wmsRawStock);
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
startEquip.emptyCount = 0;
dbContext.Update(startEquip);
dbContext.Update(wmsBaseLocation);
dbContext.Remove(item);
dbContext.SaveChanges();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
} }
dbContext.Remove(item);
dbContext.SaveChanges();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
} }
} }
else if (item.taskType == 47) else if (item.taskType == 47)
{ {
@ -764,7 +732,7 @@ namespace Khd.Core.Wcs.Wcs
{ {
if (ex is PlcException) if (ex is PlcException)
{ {
} }
else else
{ {

@ -59,6 +59,7 @@ namespace Khd.Core.Wcs.Wcs
foreach (var item in taskList)//出库 foreach (var item in taskList)//出库
{ {
item.updateTime = DateTime.Now;
if (item.taskStatus == 0)//下发任务 if (item.taskStatus == 0)//下发任务
{ {
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);

@ -367,6 +367,7 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.nextPointId == CTUID).OrderByDescending(t => t.ud1).ToList(); .Where(t => t.nextPointId == CTUID).OrderByDescending(t => t.ud1).ToList();
foreach (var item in taskList) foreach (var item in taskList)
{ {
item.updateTime = DateTime.Now;
if (item.taskStatus == 0)//CTU会同时生成多个任务生成就下发 if (item.taskStatus == 0)//CTU会同时生成多个任务生成就下发
{ {
if (item.taskType == 30)//出库任务 if (item.taskType == 30)//出库任务

@ -106,8 +106,7 @@ namespace Khd.Core.Wcs.Wcs
var outBill = from a in bill var outBill = from a in bill
from b in wmsBaseLocations from b in wmsBaseLocations
where a.b.layerNum == b.layerNum where b.locDeep == 2
&& b.locDeep == 2
&& b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1) && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1)
&& a.b.locColumn == b.locColumn && a.b.locColumn == b.locColumn
&& b.locationStatus == "1" && b.locationStatus == "1"

@ -65,6 +65,7 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.nextPointId == EquipID).OrderBy(t => t.createTime).ToList(); .Where(t => t.nextPointId == EquipID).OrderBy(t => t.createTime).ToList();
foreach (var item in taskList) foreach (var item in taskList)
{ {
item.updateTime = DateTime.Now;
if (item.taskStatus == 0)//下发任务 if (item.taskStatus == 0)//下发任务
{ {
BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType); BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType);

@ -261,8 +261,7 @@ namespace Khd.Core.Wcs.Wcs
var outBill = from a in bill//深库位托盘和当前任务绑定物料一致的托盘库位 var outBill = from a in bill//深库位托盘和当前任务绑定物料一致的托盘库位
from b in wmsBaseLocations//所有库位 from b in wmsBaseLocations//所有库位
where a.b.layerNum == b.layerNum//层数相同 where b.locDeep == 2//浅库位
&& b.locDeep == 2//浅库位
&& b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1) && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1)
//如果是4则找3如果是1则找2 //如果是4则找3如果是1则找2
&& a.b.locColumn == b.locColumn//列数相同 && a.b.locColumn == b.locColumn//列数相同
@ -276,10 +275,9 @@ namespace Khd.Core.Wcs.Wcs
{ {
if (wmsBaseLocation.locDeep == 1) if (wmsBaseLocation.locDeep == 1)
{ {
bool hasLocation = wmsBaseLocations var hasLocation = wmsBaseLocations
.Where(t => t.locRow == (wmsBaseLocation.locRow % 2 == 1 ? (wmsBaseLocation.locRow + 1) : (wmsBaseLocation.locRow - 1))) .Where(t => t.locRow == (wmsBaseLocation.locRow % 2 == 1 ? (wmsBaseLocation.locRow + 1) : (wmsBaseLocation.locRow - 1)))
.Where(t => t.locColumn == wmsBaseLocation.locColumn) .Where(t => t.locColumn == wmsBaseLocation.locColumn).Any();
.Any();
if (!hasLocation) if (!hasLocation)
{ {
Console.WriteLine(DateTime.Now + $":目标库位{wmsBaseLocation.locationCode}的浅库位库位状态异常,无法入库"); Console.WriteLine(DateTime.Now + $":目标库位{wmsBaseLocation.locationCode}的浅库位库位状态异常,无法入库");

@ -6,6 +6,7 @@ using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global; using Khd.Core.Wcs.Global;
using Masuit.Tools; using Masuit.Tools;
using Masuit.Tools.Logging; using Masuit.Tools.Logging;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Tokens;
@ -252,14 +253,15 @@ namespace Khd.Core.Wcs.Wcs
{ {
try try
{ {
FiveAgvStatusLogic();
SecondAgvLogic();
ThirdAgvLogic();
SendTrayMessage();
HositerLogic(); HositerLogic();
CtuLineLogic(); CtuLineLogic();
ThirdAgvLogic();
FiveAgvLogic(); FiveAgvLogic();
FiveBearAgvLogic(); FiveBearAgvLogic();
CtuCmdLogic(); CtuCmdLogic();
SecondAgvLogic();
SendTrayMessage();
UpdatePlcPointValue(); UpdatePlcPointValue();
} }
catch (Exception ex) catch (Exception ex)
@ -277,6 +279,40 @@ namespace Khd.Core.Wcs.Wcs
} }
} }
private void FiveAgvStatusLogic()
{
try
{
using var scope = host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var baseEquip = StaticData.BaseEquip.First(t => t.objid == 10);
var data = new
{
reqCode = StaticData.SnowId.NextId(),
mapCode = "EE"
};
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms-dps/rest/queryAgvStatus", data.ToJsonString());
var reponse = JsonConvert.DeserializeObject<AgvStatusDto>(result);
if (reponse != null && reponse.code == "0")
{
var AgvCardStatus = reponse.data.First(t => t.RobotCode == "2034");
AgvCardStatus.DateNow = DateTime.Now;
dbContext.Update(AgvCardStatus);
var BearCardStatus = reponse.data.First(t => t.RobotCode == "6011");
BearCardStatus.DateNow = DateTime.Now;
dbContext.Update(BearCardStatus);
var CtuCardStatus = reponse.data.First(t => t.RobotCode == "8161");
CtuCardStatus.DateNow = DateTime.Now;
dbContext.Update(CtuCardStatus);
dbContext.SaveChanges();
}
}
catch
{
}
}
private void SendTrayMessage() private void SendTrayMessage()
{ {
using var scope = host.Services.CreateScope(); using var scope = host.Services.CreateScope();
@ -334,30 +370,37 @@ namespace Khd.Core.Wcs.Wcs
/// <param name="dbContext"></param> /// <param name="dbContext"></param>
private void ThirdAgvLogic() private void ThirdAgvLogic()
{ {
using var scope = host.Services.CreateScope(); try
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var baseEquip = StaticData.BaseEquip.First(t => t.objid == 9);
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var basePlcs = StaticData.basePlcs.Where(t => t.Station == "3楼AGV").ToList();
var data = new
{ {
reqCode = StaticData.SnowId.NextId(), using var scope = host.Services.CreateScope();
mapCode = "BB" using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
}; var baseEquip = StaticData.BaseEquip.First(t => t.objid == 9);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms-dps/rest/queryAgvStatus", data.ToJsonString()); dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var reponse = JsonConvert.DeserializeObject<AgvStatusDto>(result); var basePlcs = StaticData.basePlcs.Where(t => t.Station == "3楼AGV").ToList();
if (reponse != null && reponse.code == "0") var data = new
{
reqCode = StaticData.SnowId.NextId(),
mapCode = "BB"
};
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms-dps/rest/queryAgvStatus", data.ToJsonString());
var reponse = JsonConvert.DeserializeObject<AgvStatusDto>(result);
if (reponse != null && reponse.code == "0")
{
var cardStatus = reponse.data.First(t => t.RobotCode == "2032");
cardStatus.DateNow = DateTime.Now;
dbContext.Update(cardStatus);
dbContext.SaveChanges();
var quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
var XPlc = basePlcs.First(t => t.Name.Contains('X'));
var Ylc = basePlcs.First(t => t.Name.Contains('Y'));
this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosY.ToString(), XPlc.type);
this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
}
}
catch
{ {
var cardStatus = reponse.data.First(t => t.RobotCode == "2032");
cardStatus.DateNow = DateTime.Now;
dbContext.Update(cardStatus);
dbContext.SaveChanges();
var quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
var XPlc = basePlcs.First(t => t.Name.Contains('X'));
var Ylc = basePlcs.First(t => t.Name.Contains('Y'));
this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosY.ToString(), XPlc.type);
this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
} }
} }
@ -367,30 +410,37 @@ namespace Khd.Core.Wcs.Wcs
/// <param name="dbContext"></param> /// <param name="dbContext"></param>
private void SecondAgvLogic() private void SecondAgvLogic()
{ {
using var scope = host.Services.CreateScope(); try
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var baseEquip = StaticData.BaseEquip.First(t => t.objid == 8);
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var basePlcs = StaticData.basePlcs.Where(t => t.Station == "2楼AGV").ToList();
var data = new
{ {
reqCode = StaticData.SnowId.NextId(), using var scope = host.Services.CreateScope();
mapCode = "CC" using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
}; var baseEquip = StaticData.BaseEquip.First(t => t.objid == 8);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms-dps/rest/queryAgvStatus", data.ToJsonString()); dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var reponse = JsonConvert.DeserializeObject<AgvStatusDto>(result); var basePlcs = StaticData.basePlcs.Where(t => t.Station == "2楼AGV").ToList();
if (reponse != null && reponse.code == "0") var data = new
{
reqCode = StaticData.SnowId.NextId(),
mapCode = "CC"
};
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms-dps/rest/queryAgvStatus", data.ToJsonString());
var reponse = JsonConvert.DeserializeObject<AgvStatusDto>(result);
if (reponse != null && reponse.code == "0")
{
var cardStatus = reponse.data.First(t => t.RobotCode == "2033");
cardStatus.DateNow = DateTime.Now;
dbContext.Update(cardStatus);
dbContext.SaveChanges();
var quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
var XPlc = basePlcs.First(t => t.Name.Contains('X'));
var Ylc = basePlcs.First(t => t.Name.Contains('Y'));
this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
}
}
catch
{ {
var cardStatus = reponse.data.First(t => t.RobotCode == "2033");
cardStatus.DateNow = DateTime.Now;
dbContext.Update(cardStatus);
dbContext.SaveChanges();
var quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
var XPlc = basePlcs.First(t => t.Name.Contains('X'));
var Ylc = basePlcs.First(t => t.Name.Contains('Y'));
this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
} }
} }
@ -437,8 +487,6 @@ namespace Khd.Core.Wcs.Wcs
if (reponse != null && reponse.code == "0") if (reponse != null && reponse.code == "0")
{ {
var cardStatus = reponse.data.First(t => t.RobotCode == "2034"); var cardStatus = reponse.data.First(t => t.RobotCode == "2034");
cardStatus.DateNow = DateTime.Now;
dbContext.Update(cardStatus);
var quantityPlc = basePlcs.First(t => t.Name.Contains("电量")); var quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type); this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
var XPlc = basePlcs.First(t => t.Name.Contains('X')); var XPlc = basePlcs.First(t => t.Name.Contains('X'));
@ -449,27 +497,22 @@ namespace Khd.Core.Wcs.Wcs
basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼背负式").ToList(); basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼背负式").ToList();
cardStatus = reponse.data.First(t => t.RobotCode == "6011"); cardStatus = reponse.data.First(t => t.RobotCode == "6011");
cardStatus.DateNow = DateTime.Now;
quantityPlc = basePlcs.First(t => t.Name.Contains("电量")); quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type); this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
XPlc = basePlcs.First(t => t.Name.Contains('X')); XPlc = basePlcs.First(t => t.Name.Contains('X'));
Ylc = basePlcs.First(t => t.Name.Contains('Y')); Ylc = basePlcs.First(t => t.Name.Contains('Y'));
this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type); this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type); this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
dbContext.Update(cardStatus);
basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼CTU").ToList(); basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼CTU").ToList();
cardStatus = reponse.data.First(t => t.RobotCode == "8161"); cardStatus = reponse.data.First(t => t.RobotCode == "8161");
cardStatus.DateNow = DateTime.Now;
quantityPlc = basePlcs.First(t => t.Name.Contains("电量")); quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type); this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
XPlc = basePlcs.First(t => t.Name.Contains("X")); XPlc = basePlcs.First(t => t.Name.Contains("X"));
Ylc = basePlcs.First(t => t.Name.Contains("Y")); Ylc = basePlcs.First(t => t.Name.Contains("Y"));
this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type); this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type); this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
dbContext.Update(cardStatus);
dbContext.SaveChanges();
} }
} }

@ -123,6 +123,7 @@ namespace Khd.Core.Wcs.Wcs
var taskList = dbContext.WcsTask.Where(t => t.nextPointId == baseEquip.objid).Where(t => t.useFlag == 1).OrderBy(t => t.createTime).ToList(); var taskList = dbContext.WcsTask.Where(t => t.nextPointId == baseEquip.objid).Where(t => t.useFlag == 1).OrderBy(t => t.createTime).ToList();
foreach (var item in taskList) foreach (var item in taskList)
{ {
item.updateTime = DateTime.Now;
if (item.taskStatus == 0) if (item.taskStatus == 0)
{ {
BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType); BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType);

@ -96,8 +96,7 @@ namespace Khd.Core.Wcs.Wcs
var outBill = from b in wmsBaseLocations var outBill = from b in wmsBaseLocations
from a in bill from a in bill
where a.b.layerNum == b.layerNum where b.locDeep == 2
&& b.locDeep == 2
&& b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1) && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1)
&& a.b.locColumn == b.locColumn && a.b.locColumn == b.locColumn
&& b.locationStatus == "1" && b.locationStatus == "1"

@ -1981,8 +1981,8 @@
x:Name="OutTaskNumber"> x:Name="OutTaskNumber">
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTextColumn <DataGridTextColumn
Header="物料批次" Header="物料描述"
Binding="{Binding materialBatch}" Binding="{Binding materialSpec}"
ElementStyle="{StaticResource dgCell}" ElementStyle="{StaticResource dgCell}"
Width="5*" Width="5*"
/> />
@ -1990,7 +1990,7 @@
Header="销售订单" Header="销售订单"
Binding="{Binding saleOrderId}" Binding="{Binding saleOrderId}"
ElementStyle="{StaticResource dgCell}" ElementStyle="{StaticResource dgCell}"
Width="*" Width="2*"
/> />
<DataGridTextColumn <DataGridTextColumn
Header="箱体携带数量" Header="箱体携带数量"

@ -301,6 +301,8 @@ namespace Khd.Core.Wpf.Form
thisOutAmount = t.Sum(x => x.totalAmount) - t.Sum(x => x.frozenAmount) thisOutAmount = t.Sum(x => x.totalAmount) - t.Sum(x => x.frozenAmount)
}); });
List<WmsRawOutstock> endStationCodeOutRaw = wmsRawOutstocks.Where(t => t.endStationCode == baseEquip.endStationCode).ToList(); List<WmsRawOutstock> endStationCodeOutRaw = wmsRawOutstocks.Where(t => t.endStationCode == baseEquip.endStationCode).ToList();
List<long?> materialIds = endStationCodeOutRaw.Select(t => t.materialId).ToList();
List<MesBaseMaterialInfo> mesBaseMaterialInfos = dbContext.MesBaseMaterialInfo.Where(t => materialIds.Contains(t.MaterialId)).ToList();
var bill = endStationCodeOutRaw.GroupBy(t => new { t.materialId, t.materialBatch, t.saleOrderId }) var bill = endStationCodeOutRaw.GroupBy(t => new { t.materialId, t.materialBatch, t.saleOrderId })
.Select(t => new .Select(t => new
{ {
@ -312,28 +314,30 @@ namespace Khd.Core.Wpf.Form
}); });
var orderNumber = from a in bill var orderNumber = from a in bill
from b in thisOutList from b in thisOutList
from c in mesBaseMaterialInfos
where a.materialId == b.materialId && a.saleOrderId == b.saleOrderId where a.materialId == b.materialId && a.saleOrderId == b.saleOrderId
select new select new
{ {
materialBatch = a.materialBatch, materialBatch = a.materialBatch,
saleOrderId = b.saleOrderId, saleOrderId = b.saleOrderId,
outstockAmount = a.outstockAmount, outstockAmount = a.outstockAmount,
materialSpec = c.MaterialSpec,
realOutstockAmount = a.realOutstockAmount, realOutstockAmount = a.realOutstockAmount,
thisOutAmount = b.thisOutAmount, thisOutAmount = b.thisOutAmount,
isSendOver = outstockAmount <= (realOutstockAmount + thisOutAmount) ? "已出完" : "未出完" isSendOver = a.outstockAmount <= (a.realOutstockAmount + b.thisOutAmount) ? "已出完" : "未出完"
}; };
Dispatcher.Invoke(() => Dispatcher.Invoke(() =>
{ {
OutTaskNumber.ItemsSource = orderNumber; this.OutTaskNumber.ItemsSource = orderNumber;
OutTaskNumber.Items.Refresh(); this.OutTaskNumber.Items.Refresh();
}); });
} }
else else
{ {
Dispatcher.Invoke(() => Dispatcher.Invoke(() =>
{ {
OutTaskNumber.ItemsSource = null; this.OutTaskNumber.ItemsSource = null;
OutTaskNumber.Items.Refresh(); this.OutTaskNumber.Items.Refresh();
}); });
} }
} }

Loading…
Cancel
Save