master
2 years ago
parent 4a2fea030a
commit 86225850dd

@ -32,10 +32,10 @@ namespace Khd.Core.Wcs.Wcs
/// </summary>
public void StartPoint()
{
var createRemoveThread = new Thread(CreateRemoveLogic);
createRemoveThread.IsBackground = true;
createRemoveThread.Name = "CreateRemoveLogic";
createRemoveThread.Start();
//var createRemoveThread = new Thread(CreateRemoveLogic);
//createRemoveThread.IsBackground = true;
//createRemoveThread.Name = "CreateRemoveLogic";
//createRemoveThread.Start();
//背负式Agv返库任务
var createBearAgvReturnThread = new Thread(CreateBearAgvReturnLogic);
@ -99,7 +99,7 @@ namespace Khd.Core.Wcs.Wcs
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
List<string> cannotIn=new List<string>();
List<string> cannotIn = new List<string>();
while (true)
{
try
@ -155,14 +155,13 @@ namespace Khd.Core.Wcs.Wcs
var outBill = from a in bill//深库位托盘和当前任务绑定物料一致的托盘库位
from b in wmsBaseLocations//所有库位
where a.b.layerNum == b.layerNum//层数相同
&& b.locDeep == 2//浅库位
where b.locDeep == 2//浅库位
&& b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1)
//如果是4则找3如果是1则找2
&& a.b.locColumn == b.locColumn//列数相同
&& string.IsNullOrEmpty(b.containerCode)
select new { a,b };//在上面的基础上获取对应托盘的外侧库位的空库位信息
wmsBaseLocation ??= outBill.Where(t=> !cannotIn.Contains(t.b.locationCode)).FirstOrDefault()?.b;//先找相同物料的外侧库位
select new { a, 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();//找不到再找任意库位
if (wmsBaseLocation != null)//如果找到库位,生成入库任务
@ -270,8 +269,7 @@ namespace Khd.Core.Wcs.Wcs
var outBill = from a in bill//深库位托盘和当前任务绑定物料一致的托盘库位
from b in wmsBaseLocations//所有库位
where a.b.layerNum == b.layerNum//层数相同
&& b.locDeep == 2//浅库位
where b.locDeep == 2//浅库位
&& b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1)
//如果是4则找3如果是1则找2
&& a.b.locColumn == b.locColumn//列数相同
@ -354,18 +352,89 @@ namespace Khd.Core.Wcs.Wcs
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
WcsTask? wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == 28 && t.useFlag == 0 && t.currPointId == 29).FirstOrDefault();
if (wcsTask != null)
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 29);
if (baseEquip.emptyCount == 1)
{
WcsTask? wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == 28).FirstOrDefault();
if (wcsTask == null)
{
WmsRawInstock? wmsRawInstock = dbContext.WmsRawInstock.Where(t => t.warehouseId == 511 && t.instockType == "2" && t.executeStatus == "0").FirstOrDefault();
if (wmsRawInstock != null)
{
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == wcsTask.containerNo);
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == wmsRawInstock.palletInfoCode);
if (mesBasePalletInfo != null)
{
MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode);
if (mesBaseBarcodeInfo != null)
{
var wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseFloor == 5)
.Where(t => t.activeFlag == "1")
.Where(t => t.delFlag == "0")
.Where(t => t.locationScrapType == "1")
.Where(t => t.warehouseId == 511)
.Where(t => t.locationStatus == "1")
.OrderByDescending(t => t.locColumn)
.ToList();
List<string> containerCodes = wmsBaseLocations
.Where(t => t.locDeep == 1)
.Select(t => t.containerCode).ToList();//深库位的托盘
containerCodes.RemoveAll(t => string.IsNullOrEmpty(t));
List<MesBaseBarcodeInfo> mesBasePalletInfos = dbContext.MesBaseBarcodeInfo
.Where(t => t.materialId == mesBasePalletInfo.materialId)
.Where(t => t.saleOrderId == mesBaseBarcodeInfo.saleOrderId)
.Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料
var bill = from a in mesBasePalletInfos
join b in wmsBaseLocations.Where(t => t.locDeep == 1) on a.palletInfoCode equals b.containerCode
select new { b };//等于当前任务的物料的托盘的库位信息
var outBill = from a in bill
from b in wmsBaseLocations
where b.locDeep == 2
&& b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1)
&& a.b.locColumn == b.locColumn
&& b.locationStatus == "1"
&& 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(),
@ -381,7 +450,7 @@ namespace Khd.Core.Wcs.Wcs
instockBatch = mesBasePalletInfo.materialBarcode,
instockTime = DateTime.Now,
instockWay = "2",
locationCode = wcsTask.endPointNo,
locationCode = newTask.endPointNo,
machineName = mesBaseBarcodeInfo.machineName,
materialBarcode = mesBasePalletInfo.materialBarcode,
materialId = mesBaseBarcodeInfo.materialId,
@ -392,16 +461,18 @@ namespace Khd.Core.Wcs.Wcs
taskCode = wmsRawInstock.taskCode,
};
dbContext.Add(wmsRawInstockDetail);
wmsRawInstock.executeStatus = "1";
wcsTask.useFlag = 1;
dbContext.Update(wmsRawInstock);
dbContext.Update(wcsTask);
dbContext.Update(wmsBaseLocation);
dbContext.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
}
}
}
}
}
}
}
catch (Exception ex)
{
_logger.Error(ex.Message + "\n" + ex.StackTrace);
@ -661,6 +732,7 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.locationScrapType == "1")
.Where(t => t.locationStatus == "1")
.Where(t => t.containerCode == null)
.Where(t=>t.warehouseId==521)
.OrderByDescending(t => t.locColumn)
.FirstOrDefault();
if (wmsBaseLocation != null)
@ -2025,7 +2097,7 @@ namespace Khd.Core.Wcs.Wcs
.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.locationStatus=="1")
if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode) && wmsBaseLocation.locationStatus == "1")
{
WmsRawStock? wmsRawStock = dbContext.WmsRawStock.FirstOrDefault(t => t.locationCode == wmsBaseLocation.locationCode);
if (wmsRawStock != null)

@ -37,7 +37,6 @@ namespace Khd.Core.Wcs.Wcs
/// </summary>
public void StartPoint()
{
Thread FlowPointThread = new(MonitorInLocatorPoint);
FlowPointThread.IsBackground = true;
FlowPointThread.Name = "FiveFloorAGV";
@ -59,7 +58,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var taskList = dbContext.WcsTask
.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();
foreach (var item in taskList)
{
@ -68,6 +67,7 @@ namespace Khd.Core.Wcs.Wcs
_logger.Info($"5楼AGV线程有其他任务正在执行跳过当前任务{item.objid}");
continue;
}
item.updateTime = DateTime.Now;
if (item.taskStatus == 0)//下发任务
{
BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType);
@ -88,7 +88,7 @@ namespace Khd.Core.Wcs.Wcs
continue;
}
BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1);
RequestAGVTaskDto agvTask = new ()
RequestAGVTaskDto agvTask = new()
{
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
@ -466,7 +466,7 @@ namespace Khd.Core.Wcs.Wcs
{
Console.WriteLine(DateTime.Now + ":五楼AGV线程完成任务" + item.currPointNo + "," + item.endPointNo);
_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);
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.locationStatus = "1";
wmsBaseLocation.containerCode = null;
wmsBaseLocation.returnFlag = "0";
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS";
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);
_logger.Info("五楼Agv完成任务成功" + item.ToJsonString());
@ -604,55 +605,16 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(wmsRawOutStock);
dbContext.Update(wmsRawOutstockDetail);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
wmsBaseLocation.locationStatus = "2";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = null;
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS";
WmsRawStock? wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == wmsBaseLocation.locationCode).FirstOrDefault();
if (wmsRawStock != null)
{
wmsRawStock.completeFlag = "0";
wmsRawStock.updateDate = DateTime.Now;
wmsRawStock.updateBy = "WCS";
dbContext.Update(wmsRawStock);
dbContext.Remove(wmsRawStock);
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);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(newTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
}
@ -668,43 +630,49 @@ namespace Khd.Core.Wcs.Wcs
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS";
wmsBaseLocation.returnFlag = "1";
var wmsRawStock = dbContext.WmsRawStock.FirstOrDefault(t => t.locationCode == wmsBaseLocation.locationCode);
if (wmsRawStock != null)
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo);
if (mesBasePalletInfo != null)
{
wmsRawStock.completeFlag = "0";
wmsRawStock.updateDate = DateTime.Now;
wmsRawStock.updateBy = "WCS";
MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode);
if (mesBaseBarcodeInfo != null)
{
WmsRawStock wmsRawStock = new()
{
palletInfoCode = mesBasePalletInfo.palletInfoCode,
activeFlag = "1",
createBy = "WCS",
createDate = DateTime.Now,
frozenAmount = 0,
instockDate = DateTime.Now,
locationCode = wmsBaseLocation.locationCode,
occupyAmount = 0,
warehouseFloor = 5,
stockType = "1",
totalAmount = 1,
saleOrderId = mesBaseBarcodeInfo.saleOrderId == null ? 0 : mesBaseBarcodeInfo.saleOrderId,
safeFlag = mesBaseBarcodeInfo.safeFlag,
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(wmsRawStock);
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 = "1";
dbContext.Update(deepWmsLocation);
}
}
dbContext.Remove(item);
dbContext.SaveChanges();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
}
}
}
else if (item.taskType == 47)
{
Console.WriteLine(DateTime.Now + ":五楼AGV线程完成任务" + item.currPointNo + "," + item.endPointNo);

@ -59,6 +59,7 @@ namespace Khd.Core.Wcs.Wcs
foreach (var item in taskList)//出库
{
item.updateTime = DateTime.Now;
if (item.taskStatus == 0)//下发任务
{
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();
foreach (var item in taskList)
{
item.updateTime = DateTime.Now;
if (item.taskStatus == 0)//CTU会同时生成多个任务生成就下发
{
if (item.taskType == 30)//出库任务

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

@ -65,6 +65,7 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.nextPointId == EquipID).OrderBy(t => t.createTime).ToList();
foreach (var item in taskList)
{
item.updateTime = DateTime.Now;
if (item.taskStatus == 0)//下发任务
{
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//深库位托盘和当前任务绑定物料一致的托盘库位
from b in wmsBaseLocations//所有库位
where a.b.layerNum == b.layerNum//层数相同
&& b.locDeep == 2//浅库位
where b.locDeep == 2//浅库位
&& b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1)
//如果是4则找3如果是1则找2
&& a.b.locColumn == b.locColumn//列数相同
@ -276,10 +275,9 @@ namespace Khd.Core.Wcs.Wcs
{
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.locColumn == wmsBaseLocation.locColumn)
.Any();
.Where(t => t.locColumn == wmsBaseLocation.locColumn).Any();
if (!hasLocation)
{
Console.WriteLine(DateTime.Now + $":目标库位{wmsBaseLocation.locationCode}的浅库位库位状态异常,无法入库");

@ -6,6 +6,7 @@ using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.IdentityModel.Tokens;
@ -252,14 +253,15 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
FiveAgvStatusLogic();
SecondAgvLogic();
ThirdAgvLogic();
SendTrayMessage();
HositerLogic();
CtuLineLogic();
ThirdAgvLogic();
FiveAgvLogic();
FiveBearAgvLogic();
CtuCmdLogic();
SecondAgvLogic();
SendTrayMessage();
UpdatePlcPointValue();
}
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()
{
using var scope = host.Services.CreateScope();
@ -333,6 +369,8 @@ namespace Khd.Core.Wcs.Wcs
/// </summary>
/// <param name="dbContext"></param>
private void ThirdAgvLogic()
{
try
{
using var scope = host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
@ -360,12 +398,19 @@ namespace Khd.Core.Wcs.Wcs
this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
}
}
catch
{
}
}
/// <summary>
/// 定时更新二楼AGV信息
/// </summary>
/// <param name="dbContext"></param>
private void SecondAgvLogic()
{
try
{
using var scope = host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
@ -393,6 +438,11 @@ namespace Khd.Core.Wcs.Wcs
this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
}
}
catch
{
}
}
/// <summary>
/// 定时更新五楼AGV信息
@ -437,8 +487,6 @@ namespace Khd.Core.Wcs.Wcs
if (reponse != null && reponse.code == "0")
{
var cardStatus = reponse.data.First(t => t.RobotCode == "2034");
cardStatus.DateNow = DateTime.Now;
dbContext.Update(cardStatus);
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'));
@ -449,27 +497,22 @@ namespace Khd.Core.Wcs.Wcs
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("电量"));
this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
XPlc = basePlcs.First(t => t.Name.Contains('X'));
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);
dbContext.Update(cardStatus);
basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼CTU").ToList();
cardStatus = reponse.data.First(t => t.RobotCode == "8161");
cardStatus.DateNow = DateTime.Now;
quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
XPlc = basePlcs.First(t => t.Name.Contains("X"));
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);
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();
foreach (var item in taskList)
{
item.updateTime = DateTime.Now;
if (item.taskStatus == 0)
{
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
from a in bill
where a.b.layerNum == b.layerNum
&& b.locDeep == 2
where b.locDeep == 2
&& b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1)
&& a.b.locColumn == b.locColumn
&& b.locationStatus == "1"

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

@ -301,6 +301,8 @@ namespace Khd.Core.Wpf.Form
thisOutAmount = t.Sum(x => x.totalAmount) - t.Sum(x => x.frozenAmount)
});
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 })
.Select(t => new
{
@ -312,28 +314,30 @@ namespace Khd.Core.Wpf.Form
});
var orderNumber = from a in bill
from b in thisOutList
from c in mesBaseMaterialInfos
where a.materialId == b.materialId && a.saleOrderId == b.saleOrderId
select new
{
materialBatch = a.materialBatch,
saleOrderId = b.saleOrderId,
outstockAmount = a.outstockAmount,
materialSpec = c.MaterialSpec,
realOutstockAmount = a.realOutstockAmount,
thisOutAmount = b.thisOutAmount,
isSendOver = outstockAmount <= (realOutstockAmount + thisOutAmount) ? "已出完" : "未出完"
isSendOver = a.outstockAmount <= (a.realOutstockAmount + b.thisOutAmount) ? "已出完" : "未出完"
};
Dispatcher.Invoke(() =>
{
OutTaskNumber.ItemsSource = orderNumber;
OutTaskNumber.Items.Refresh();
this.OutTaskNumber.ItemsSource = orderNumber;
this.OutTaskNumber.Items.Refresh();
});
}
else
{
Dispatcher.Invoke(() =>
{
OutTaskNumber.ItemsSource = null;
OutTaskNumber.Items.Refresh();
this.OutTaskNumber.ItemsSource = null;
this.OutTaskNumber.Items.Refresh();
});
}
}

Loading…
Cancel
Save