master
1 year ago
parent 13343b38e0
commit 702649c670

@ -93,5 +93,11 @@ namespace Khd.Core.Api.Controllers
LogManager.Info($"CallMaterial 接口收到消息: {callMaterial}");
return _application.CallMaterial(callMaterial);
}
[HttpPost("AgvTaskComplete")]
public ReponseMessage AGVTaskComplete()
{
return _application.AGVTaskComplete();
}
}
}

@ -31,5 +31,6 @@ namespace Khd.Core.Application.Interface
AgvCompeletedResponse TaskReturn(TaskReturn taskReturn);
ReponseagvCallbackDto AgvCallback2(agvCallbackDto agvCallbackDto);
ReponseMessage CallMaterial(CallMaterial callMaterial);
ReponseMessage AGVTaskComplete();
}
}

@ -28,6 +28,7 @@ namespace Khd.Core.Application
.FirstOrDefault();
return entity;
}
public WcsTask Add(WcsTask model)
{
var entity = _dbContext.Add(model);
@ -35,11 +36,13 @@ namespace Khd.Core.Application
return entity.Entity;
}
public WcsTask Update(WcsTask model)
{
var list = _dbContext.WcsTask.Where(t => t.objid == model.objid).Update(a => model);
return model;
}
/// <summary>
/// 接收agv接收任务通知接口
/// </summary>
@ -153,6 +156,7 @@ namespace Khd.Core.Application
return reponseagvCallbackDto;
}
/// <summary>
/// 入库完成
/// </summary>
@ -161,6 +165,7 @@ namespace Khd.Core.Application
{
return "";
}
/// <summary>
/// 出库完成
/// </summary>
@ -184,7 +189,10 @@ namespace Khd.Core.Application
BaseEquip baseEquip = _dbContext.BaseEquip.FirstOrDefault(t => t.equipNo == agvCompeletedRequest.endStationCode);
if (baseEquip != null)
{
var wcsCmd = _dbContext.WcsCmd.Where(t => t.nextPointId == baseEquip.objid).Where(t => t.cmdStatus == 5).FirstOrDefault();
var wcsCmd = _dbContext.WcsCmd
.Where(t => t.cmdType == 32 || t.cmdType == 48)
.Where(t => t.nextPointId == baseEquip.objid || t.currPointId == baseEquip.objid)
.FirstOrDefault();
if (wcsCmd != null)
{
WcsTask wcsTask = _dbContext.WcsTask.FirstOrDefault(t => t.objid == wcsCmd.taskId);
@ -192,7 +200,6 @@ namespace Khd.Core.Application
{
if (wcsTask.taskType != 48)
{
wcsCmd.cmdStatus = 7;
wcsTask.taskStatus = 7;
_dbContext.WcsCmd.Update(wcsCmd);
@ -205,7 +212,6 @@ namespace Khd.Core.Application
}
else
{
wcsCmd.cmdStatus = 4;
wcsTask.taskStatus = 4;
_dbContext.WcsCmd.Update(wcsCmd);
@ -217,6 +223,11 @@ namespace Khd.Core.Application
agvCompeletedResponse.message = "成功";
}
}
else
{
agvCompeletedResponse.code = "1";
agvCompeletedResponse.message = "未找到当前任务";
}
}
else
{
@ -227,7 +238,7 @@ namespace Khd.Core.Application
else
{
agvCompeletedResponse.code = "1";
agvCompeletedResponse.message = "未找到当前设备";
agvCompeletedResponse.message = "未找到当前工位";
}
}
catch (Exception ex)
@ -277,6 +288,7 @@ namespace Khd.Core.Application
}
return compeletedResponse;
}
/// <summary>
/// 柜体拆分区通知返库
/// </summary>
@ -465,5 +477,32 @@ namespace Khd.Core.Application
}
return reponseMessage;
}
public ReponseMessage AGVTaskComplete()
{
ReponseMessage reponseMessage = new ReponseMessage();
try
{
_dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
bool hasTask = _dbContext.WcsTask.Where(t => t.taskType == 41).Any();
if (hasTask)
{
reponseMessage.code = "0";
reponseMessage.message = "成功";
}
else
{
reponseMessage.code = "1";
reponseMessage.message = "当前无任务";
}
}
catch (Exception ex)
{
reponseMessage.code = "1";
reponseMessage.message = ex.Message;
LogManager.Error(ex);
}
return reponseMessage;
}
}
}

@ -68,8 +68,8 @@ namespace Khd.Core.Wcs
StaticData.PlcDic.TryAdd(plcConfig.Code, plc);
}
}
SystemTimer systemTimer = new SystemTimer(_host);
systemTimer.Start();
//SystemTimer systemTimer = new SystemTimer(_host);
//systemTimer.Start();
////创建任务
//CreateTaskByRecord createTaskByRecord = new(_host);
//createTaskByRecord.StartPoint();

@ -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();
}
}
}

@ -92,7 +92,7 @@ namespace Khd.Core.Wcs.Wcs
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
bool IsStart = false;
//bool IsStart = false;
while (true)
{
try

@ -207,6 +207,7 @@ namespace Khd.Core.Wcs.Wcs
FiveBearAgvLogic(dbContext);
CtuCmdLogic(dbContext);
SecondAgvLogic(dbContext);
SendTrayMessage(dbContext);
UpdatePlcPointValue(dbContext);
}
catch (Exception ex)
@ -230,10 +231,40 @@ namespace Khd.Core.Wcs.Wcs
}
}
Thread.Sleep(5000);
Thread.Sleep(1000);
}
}
private void SendTrayMessage(DefaultDbContext dbContext)
{
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 40);
BasePlcpoint oneInPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "oneIn");
BasePlcpoint oneOutPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "oneOut");
BasePlcpoint someOutPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "someOut");
BasePlcpoint someInPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "someIn");
BasePlc basePlc = StaticData.basePlcs.First(t => t.Name == "托盘库去向");
BasePlc basePlc2 = StaticData.basePlcs.First(t => t.Name == "托盘库数量");
string? value = "0";
if (StaticData.PlcDic[0].Read(oneInPoint.plcpointAddress)?.ToString() == "1")
{
value = "1";
}
else if (StaticData.PlcDic[0].Read(oneOutPoint.plcpointAddress)?.ToString() == "1")
{
value = "2";
}
else if (StaticData.PlcDic[0].Read(someOutPoint.plcpointAddress)?.ToString() == "1")
{
value = "3";
}
else if (StaticData.PlcDic[0].Read(someInPoint.plcpointAddress)?.ToString() == "1")
{
value = "4";
}
StaticData.PlcDic[2].WriteToPoint(basePlc.Address, value, basePlc.type);
StaticData.PlcDic[2].WriteToPoint(basePlc2.Address, baseEquip.emptyCount.ToString(), basePlc2.type);
}
private void UpdatePlcPointValue(DefaultDbContext dbContext)
{
try
@ -364,7 +395,7 @@ namespace Khd.Core.Wcs.Wcs
this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
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.DateNow = DateTime.Now;
quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));

@ -579,10 +579,10 @@ namespace Khd.Core.Wcs.Wcs
};
dbContext.Add(wmsRawStock);
dbContext.Update(wmsBaseLocation);
dbContext.WcsTask.Where(t => t.objid == item.objid).Delete();
dbContext.Remove(wcsCmd);
dbContext.Remove(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 });
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete();
dbContext.SaveChanges();
}
}

Loading…
Cancel
Save