master
2 years ago
parent 0864cd9cfd
commit c0b8234497

@ -54,91 +54,62 @@ namespace Khd.Core.Application
try
{
_dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var wcscmd = _dbContext.WcsCmd
.Where(t => t.taskCode == agvCallbackDto.taskCode)
.FirstOrDefault();
if (wcscmd != null)
WcsTask wcsTask = _dbContext.WcsTask.FirstOrDefault(t => t.taskCode == agvCallbackDto.taskCode);
if (wcsTask != null)
{
WcsTask wcsTask = _dbContext.WcsTask.FirstOrDefault(t => t.objid == wcscmd.taskId);
if (wcsTask != null)
//start 开始 end结束 continue继续
//待取货
if (agvCallbackDto.method.ToLower() == "start")
{
Console.WriteLine(agvCallbackDto.method.ToLower() + "," + wcscmd.objid + "," + wcscmd.taskCode);
LogManager.Info(agvCallbackDto.method.ToLower() + "," + wcscmd.objid + "," + wcscmd.taskCode);
//start 开始 end结束 continue继续
//待取货
if (agvCallbackDto.method.ToLower() == "start")
wcsTask.taskStatus = 2;
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
if (agvCallbackDto.method.ToLower() == "con")
{
wcsTask.taskStatus = 4;
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
//已取货待放货
if (agvCallbackDto.method.ToLower() == "continue")
{
wcsTask.taskStatus = 3;
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 3 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
//放货完成
if (agvCallbackDto.method.ToLower() == "end")
{
if (wcsTask.nextPointId != 10)
{
wcscmd.cmdStatus = 2;
wcscmd.sendFlag = 1;
wcsTask.taskStatus = 2;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 2 });
wcsTask.taskStatus = 5;
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2 });
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 5 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
if (agvCallbackDto.method.ToLower() == "con")
else
{
wcscmd.sendFlag = 1;
wcscmd.cmdStatus = 4;
wcsTask.taskStatus = 4;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 4 });
wcsTask.taskStatus = 6;
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4 });
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
//已取货待放货
if (agvCallbackDto.method.ToLower() == "continue")
{
wcscmd.sendFlag = 1;
wcscmd.cmdStatus = 3;
wcsTask.taskStatus = 3;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 3 });
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 3 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
//放货完成
if (agvCallbackDto.method.ToLower() == "end")
{
if (wcsTask.nextPointId != 10)
{
wcscmd.cmdStatus = 5;
wcscmd.sendFlag = 1;
wcsTask.taskStatus = 5;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 5 });
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 5 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
else
{
wcscmd.cmdStatus = 6;
wcscmd.sendFlag = 1;
wcsTask.taskStatus = 6;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 6 });
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
}
}
}
else
@ -191,44 +162,29 @@ namespace Khd.Core.Application
BaseEquip baseEquip = _dbContext.BaseEquip.FirstOrDefault(t => t.equipNo == agvCompeletedRequest.endStationCode);
if (baseEquip != null)
{
var wcsCmd = _dbContext.WcsCmd
.Where(t => t.cmdType == 32 || t.cmdType == 48)
var wcsTask = _dbContext.WcsTask
.Where(t => t.taskType == 32 || t.taskType == 48)
.Where(t => t.nextPointId == baseEquip.objid || t.currPointId == baseEquip.objid)
.FirstOrDefault();
if (wcsCmd != null)
if (wcsTask != null)
{
WcsTask wcsTask = _dbContext.WcsTask.FirstOrDefault(t => t.objid == wcsCmd.taskId);
if (wcsTask != null)
if (wcsTask.taskType != 48)
{
if (wcsTask.taskType != 48)
{
wcsCmd.cmdStatus = 7;
wcsTask.taskStatus = 7;
_dbContext.WcsCmd.Update(wcsCmd);
_dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(a => new WcsCmdLog { cmdStatus = 7 });
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 });
_dbContext.SaveChanges();
agvCompeletedResponse.code = "0";
agvCompeletedResponse.message = "成功";
}
else
{
wcsCmd.cmdStatus = 4;
wcsTask.taskStatus = 4;
_dbContext.WcsCmd.Update(wcsCmd);
_dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(a => new WcsCmdLog { cmdStatus = 7 });
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 });
_dbContext.SaveChanges();
agvCompeletedResponse.code = "0";
agvCompeletedResponse.message = "成功";
}
wcsTask.taskStatus = 7;
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 });
_dbContext.SaveChanges();
agvCompeletedResponse.code = "0";
agvCompeletedResponse.message = "成功";
}
else
{
agvCompeletedResponse.code = "1";
agvCompeletedResponse.message = "未找到当前任务";
wcsTask.taskStatus = 4;
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 });
_dbContext.SaveChanges();
agvCompeletedResponse.code = "0";
agvCompeletedResponse.message = "成功";
}
}
else
@ -336,93 +292,64 @@ namespace Khd.Core.Application
try
{
_dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var wcscmd = _dbContext.WcsCmd
.Where(t => t.taskCode == agvCallbackDto.taskCode)
.FirstOrDefault();
if (wcscmd != null)
WcsTask wcsTask = _dbContext.WcsTask.FirstOrDefault(t => t.taskCode == agvCallbackDto.taskCode);
if (wcsTask != null)
{
WcsTask wcsTask = _dbContext.WcsTask.FirstOrDefault(t => t.objid == wcscmd.taskId);
if (wcsTask != null)
//start 开始 end结束 continue继续
//待取货
if (agvCallbackDto.method.ToLower() == "start")
{
//start 开始 end结束 continue继续
//待取货
if (agvCallbackDto.method.ToLower() == "start")
wcsTask.taskStatus = 2;
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
if (agvCallbackDto.method.ToLower() == "con")
{
wcsTask.taskStatus = 4;
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
//已取货待放货
if (agvCallbackDto.method.ToLower() == "continue")
{
if (wcsTask.taskStatus > 3)
{
wcscmd.cmdStatus = 2;
wcscmd.sendFlag = 1;
wcsTask.taskStatus = 2;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 2 });
wcsTask.taskStatus = 5;
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2 });
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 5 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
if (agvCallbackDto.method.ToLower() == "con")
else
{
wcscmd.sendFlag = 1;
wcscmd.cmdStatus = 4;
wcsTask.taskStatus = 4;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 4 });
wcsTask.taskStatus = 3;
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
//已取货待放货
if (agvCallbackDto.method.ToLower() == "continue")
{
if (wcscmd.cmdStatus > 3)
{
wcscmd.sendFlag = 1;
wcscmd.cmdStatus = 5;
wcsTask.taskStatus = 5;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 5 });
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 5 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
else
{
wcscmd.sendFlag = 1;
wcscmd.cmdStatus = 3;
wcsTask.taskStatus = 3;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 3 });
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 3 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
}
//放货完成
if (agvCallbackDto.method.ToLower() == "end")
{
wcscmd.cmdStatus = 7;
wcscmd.sendFlag = 1;
wcsTask.taskStatus = 7;
_dbContext.WcsCmd.Update(wcscmd);
_dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 7 });
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 });
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 3 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
}
//放货完成
if (agvCallbackDto.method.ToLower() == "end")
{
wcsTask.taskStatus = 7;
_dbContext.WcsTask.Update(wcsTask);
_dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 });
_dbContext.SaveChanges();
reponseagvCallbackDto.code = "0";
reponseagvCallbackDto.message = "成功";
}
}
else
{
reponseagvCallbackDto.code = "1";
reponseagvCallbackDto.message = "未找到当前任务";
}
}
catch (Exception ex)
{

@ -17,7 +17,8 @@ namespace Khd.Core.Domain.Models
[Table("wcs_task")]
public class WcsTask
{
[Column("taskCode")]
public string taskCode { get; set; }
[Column("from_floor_no")]
public int? fromFloorNo { get; set; }

@ -96,17 +96,17 @@ namespace Khd.Core.Domain.Models
[Column("qty_limit")]
public decimal? qtyLimit { get; set; }
/// <summary>
/// 入库过度库位标识(1:是,0:否)
/// </summary>
[Column("instock_flag")]
public string instockFlag { get; set; }
///// <summary>
///// 入库过度库位标识(1:是,0:否)
///// </summary>
//[Column("instock_flag")]
//public string instockFlag { get; set; }
/// <summary>
/// 出库过度库位标识(1:是,0:否)
/// </summary>
[Column("outstock_flag")]
public string outstockFlag { get; set; }
///// <summary>
///// 出库过度库位标识(1:是,0:否)
///// </summary>
//[Column("outstock_flag")]
//public string outstockFlag { get; set; }
/// <summary>
/// 库位状态(1:正常,2:自动锁定,3:人工锁定,4:移库锁定5:合库锁定 6出库锁定);在正常时,库位可以使用,如果是自动锁定则需要自动解锁变成正常,如果是人工锁定需要人工解锁变成正常

@ -45,16 +45,15 @@ namespace Khd.Core.Plc
return null;
}
string res = Encoding.UTF8.GetString(result).Replace("\0", "").Replace("$", "").Replace("\\u", "").Trim();
if (res.Contains("JYHB"))
{
return res[res.IndexOf('J')..];
}
else if (res.Contains('C'))
else if(res.Contains('C'))
{
return res[res.IndexOf('C')..];
}
else
}else
{
return "";
}

@ -1,4 +1,5 @@
using Khd.Core.EntityFramework;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Wcs.Global;
using Khd.Core.Wcs.Wcs;
using Masuit.Tools.Logging;
@ -40,7 +41,7 @@ namespace Khd.Core.Wcs
StaticData.basePlcs = dbContext.BasePlc.ToList();//陈工Agv和设备信息推送
StaticData.BaseEquip = dbContext.BaseEquip.ToList();//设备信息
StaticData.BaseDictionary = dbContext.BaseDictionary.ToList();//字典表Agv任务模板
foreach (var plcConfig in StaticData.PlcConfigs)
{
if (!StaticData.PlcDic.Any(t => t.Key == plcConfig.Code))

@ -164,7 +164,7 @@ namespace Khd.Core.Wcs.Wcs
}
/// <summary>
/// 3楼托盘库
/// 3楼托盘库出库任务
/// </summary>
/// <param name="obj"></param>
private void CreateEmptyTrayLogic()
@ -252,9 +252,9 @@ namespace Khd.Core.Wcs.Wcs
// }
//}
//else
if (baseEquip.emptyCount == SystemData.maxTray)
if (baseEquip.emptyCount == SystemData.maxTray)//达到最大值
{
var endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 15 && t.equipStatus == 0 && t.emptyCount == 0);
var endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 15 && t.equipStatus == 0 && t.emptyCount == 0);//找周转区
if (endEquip != null)
{
var wcsTask = new WcsTask()
@ -370,8 +370,6 @@ namespace Khd.Core.Wcs.Wcs
var wmsBaseLocation = dbContext.WmsBaseLocation
.Where(t => t.warehouseId == 521)
.Where(t => t.activeFlag == "1")
.Where(t => t.instockFlag == "0")
.Where(t => t.outstockFlag == "0")
.Where(t => t.locationStatus == "1")
.Where(t => t.containerCode == null)
.OrderByDescending(t => t.locColumn)
@ -422,7 +420,6 @@ namespace Khd.Core.Wcs.Wcs
};
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
wmsProductInstock.executeStatus = "1";
wmsBaseLocation.instockFlag = "1";
wmsBaseLocation.locationStatus = "4";
dbContext.Add(wmsProductInstockDetail);
dbContext.Update(wmsProductInstock);
@ -431,6 +428,10 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
}
else
{
//报警
}
}
}
}
@ -467,7 +468,7 @@ namespace Khd.Core.Wcs.Wcs
WcsTask? wcsTask = dbContext.WcsTask.FirstOrDefault(t => t.endPointId == endEquip.objid);
if (wcsTask == null)
{
WcsTaskManual? wcsTaskManual = dbContext.WcsTaskManual.Where(t => t.taskType == 999).FirstOrDefault();
WcsTaskManual? wcsTaskManual = dbContext.WcsTaskManual.Where(t => t.taskType == 999).FirstOrDefault();//调接口生成的任务
if (wcsTaskManual != null)
{
var wmsRawOutstock = dbContext.WmsRawOutstock.FirstOrDefault(t => t.rawOutstockId == wcsTaskManual.orderId);
@ -482,11 +483,7 @@ namespace Khd.Core.Wcs.Wcs
.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 == 311)
.OrderByDescending(t => t.locRow)
.ThenByDescending(t => t.locColumn)
.ToList();
var bill = from a in wmsBaseLocations
from b in wmsRawStocks
@ -494,7 +491,7 @@ namespace Khd.Core.Wcs.Wcs
select new { a, b };
WmsBaseLocation? wmsBaseLocation = null;
WmsRawStock? wmsRawStock = null;
bill = bill.OrderBy(t => t.b.instockDate);
bill = bill.OrderBy(t => t.b.instockDate.Value.Date);//按某个时间段
var fistbill = bill.FirstOrDefault();
if (fistbill != null)
{
@ -517,7 +514,6 @@ namespace Khd.Core.Wcs.Wcs
{
if (lastbill.b.instockDate != null && fistbill.b.instockDate != null)
{
if (wmsBaseLocation.locDeep == 1)
{
int? row = 0;
@ -581,12 +577,10 @@ namespace Khd.Core.Wcs.Wcs
qty = 1
};
toLocation.locationStatus = "4";
toLocation.instockFlag = "1";
toLocation.updateBy = "WCS";
toLocation.updateTime = DateTime.Now;
fromBaseLocation.updateBy = "WCS";
fromBaseLocation.updateTime = DateTime.Now;
fromBaseLocation.outstockFlag = "1";
fromBaseLocation.locationStatus = "4";
dbContext.Update(toLocation);
dbContext.Update(fromBaseLocation);
@ -660,7 +654,6 @@ namespace Khd.Core.Wcs.Wcs
useFlag = 1,
qty = 1
};
wmsBaseLocation.outstockFlag = "1";
wmsBaseLocation.locationStatus = "6";
dbContext.Update(wmsBaseLocation);
dbContext.Add(wmsRawOutstockDetail);
@ -803,8 +796,6 @@ namespace Khd.Core.Wcs.Wcs
.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.locationStatus == "1")
.Where(t => t.warehouseId == item.warehouseId)
.Where(t => wmsproStocks.Contains(t.locationCode))
@ -893,12 +884,10 @@ namespace Khd.Core.Wcs.Wcs
qty = 1
};
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);
@ -955,7 +944,6 @@ namespace Khd.Core.Wcs.Wcs
useFlag = 1,
qty = 1
};
location.outstockFlag = "1";
location.locationStatus = "6";
location.updateBy = "WCS";
location.updateTime = DateTime.Now;
@ -1029,9 +1017,7 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.activeFlag == "1")
.Where(t => t.delFlag == "0")
.Where(t => t.locationScrapType == "1")
.Where(t => t.instockFlag == "0")
.Where(t => t.locationStatus == "1")
.Where(t => t.outstockFlag == "0")
.Where(t => t.warehouseId == item.warehouseId)
.Where(t => wmsproStocks.Contains(t.containerCode))
.ToList();
@ -1111,9 +1097,9 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.activeFlag == "1")
.Where(t => t.delFlag == "0")
.Where(t => t.locationScrapType == "1")
.Where(t => t.instockFlag == "0")
.Where(t => t.locationStatus == "1")
.Where(t => t.outstockFlag == "0")
.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();
toLocation ??= AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId)
.Where(t => t.warehouseId != location.locationId)
@ -1142,12 +1128,10 @@ namespace Khd.Core.Wcs.Wcs
qty = 1
};
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);
@ -1187,7 +1171,6 @@ namespace Khd.Core.Wcs.Wcs
useFlag = 1,
qty = 1
};
location.outstockFlag = "1";
location.locationStatus = "6";
location.updateBy = "WCS";
location.updateTime = DateTime.Now;
@ -1287,8 +1270,8 @@ namespace Khd.Core.Wcs.Wcs
// .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.ContainerStatus == "1")
// .Where(t => t.warehouseId == item.warehouseId)
// .Where(t => wmsRawStocks.Contains(t.locationCode))
@ -1421,13 +1404,15 @@ namespace Khd.Core.Wcs.Wcs
List<long?> canOut = orderList.Select(t => t.saleOrderId).ToList();
rawStock = rawStock.Where(t => canOut.Contains(t.saleOrderId)).OrderByDescending(t => t.saleOrderId).ToList();
//对物料和数量进行分组
var list = orderList.GroupBy(t => t.materialId).Select(t => new
var list = orderList.GroupBy(t => new { t.materialId, t.saleOrderId }).Select(t => new
{
MaterialId = t.Key,
MaterialId = t.Key.materialId,
SaleOrderId = t.Key.saleOrderId,
TotalAmount = t.Sum(x => x.outstockAmount),
realOutstockAmount = t.Sum(x => x.realOutstockAmount)
}
).ToList();
int? index = 1;
foreach (var order in list)
{
if (tasks.Count >= 6)
@ -1435,7 +1420,7 @@ namespace Khd.Core.Wcs.Wcs
break;
}
var wmsRawStocks = rawStock
.Where(t => t.materialId == order.MaterialId && t.warehouseId == 512)
.Where(t => t.materialId == order.MaterialId && t.saleOrderId == order.SaleOrderId && t.warehouseId == 512)
.Select(t => t.palletInfoCode)
.ToList();
var AllWmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseId == 512).ToList();
@ -1443,36 +1428,65 @@ namespace Khd.Core.Wcs.Wcs
.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.locationStatus == "1")
.Where(t => t.warehouseId == 512)
.Where(t => t.ContainerStatus == "1")
.Where(t => wmsRawStocks.Contains(t.containerCode))
.ToList();
decimal? needNumber = order.TotalAmount - order.realOutstockAmount;
decimal? needNumber = order.TotalAmount - order.realOutstockAmount;
foreach (var task in tasks)
{
WmsRawStock wmsRawStock = rawStock.Where(t => t.palletInfoCode == task.containerNo).First();
needNumber -= wmsRawStock.totalAmount - wmsRawStock.frozenAmount;
WmsBaseLocation wmsBaseLocation = AllWmsBaseLocations.Where(t => t.locationCode == wmsRawStock.locationCode).First();
index = wmsBaseLocation.locRow;
}
if (needNumber <= 0)
{
continue;
}
var bill = from a in wmsBaseLocations
from b in rawStock
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)
if (bill.Where(t => t.a.locRow == index).Select(t => t.b.totalAmount - t.b.frozenAmount).Sum() >= needNumber)
{
bill = bill.OrderBy(t => t.a.locColumn).ToList();
if (index == 1)
{
bill = bill.OrderBy(t => t.a.locRow).ThenBy(t => t.a.locColumn).ToList();
index = 2;
}
else
{
bill = bill.OrderByDescending(t => t.a.locRow).ThenBy(t => t.a.locColumn).ToList();
index = 1;
}
}
else
{
bill = bill.OrderByDescending(t => t.a.locColumn).ToList();
bill = bill.OrderByDescending(t => t.a.locRow).ThenBy(t => t.a.locColumn).ToList();
if (index == 1)
{
bill = bill.OrderByDescending(t => t.a.locRow).ThenBy(t => t.a.locColumn).ToList();
index = 2;
}
else
{
bill = bill.OrderBy(t => t.a.locRow).ThenBy(t => t.a.locColumn).ToList();
index = 1;
}
}
BaseEquip ctuEquip = StaticData.BaseEquip.First(t => t.objid == 11);
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 20);
foreach (var b in bill)
{
if (needNumber <= 0)
if (needNumber <= 0 || tasks.Count >= 6)
{
break;
}
if (tasks.Where(t => t.containerNo == b.a.containerCode).Any() || tasks.Count >= 6)
if (tasks.Where(t => t.containerNo == b.a.containerCode).Any())//判读当前料箱是否存在出库任务
{
continue;
}
@ -1518,7 +1532,6 @@ namespace Khd.Core.Wcs.Wcs
qty = qty
};
tasks.Add(wcsTask);
location.outstockFlag = "1";
location.locationStatus = "6";
location.updateBy = "WCS";
location.ContainerStatus = "2";
@ -1586,7 +1599,6 @@ namespace Khd.Core.Wcs.Wcs
dbContext.UpdateRange(orderList);
dbContext.Update(item);
}
endStationCodeEquip.endStationCode = null;
dbContext.Update(endStationCodeEquip);
if (tasks.Count > 0)
{
@ -1597,7 +1609,7 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
if (endEquip.equipType == 12 || endEquip.equipType == 13)//原材料到柜体验收区
if (endEquip.equipType == 12 || endEquip.equipType == 13)//原材料到柜体验收区,背板安装
{
bool hasTask = dbContext.WcsTask.Where(t => t.nextPointId == 28 && t.useFlag == 1 && t.taskStatus <= 5).Any();
if (!hasTask)
@ -1617,25 +1629,16 @@ namespace Khd.Core.Wcs.Wcs
.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.locationStatus == "1")
.Where(t => t.warehouseId == item.warehouseId)
.Where(t => wmsRawStocks.Contains(t.containerCode))
.ToList();
decimal? needNumber = item.outstockAmount - item.realOutstockAmount;
if (needNumber <= 0)
{
item.executeStatus = "2";
dbContext.Update(item);
dbContext.SaveChanges();
continue;
}
var bill = from a in wmsBaseLocations
from b in rawStock
where a.containerCode == b.palletInfoCode
where a.locationCode == b.locationCode
select new { a, b };
@ -1720,12 +1723,10 @@ namespace Khd.Core.Wcs.Wcs
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);
@ -1786,8 +1787,11 @@ namespace Khd.Core.Wcs.Wcs
outstockWay = "2",
materialProductionDate = mesBaseBarcodeInfo.productionDate
};
if (item.beginTime == null)
{
item.beginTime = DateTime.Now;
}
dbContext.Add(wmsProductOutstockDetail);
location.outstockFlag = "1";
location.locationStatus = "6";
location.updateBy = "WCS";
location.updateTime = DateTime.Now;
@ -1795,15 +1799,11 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(endEquip);
dbContext.Update(location);
dbContext.Add(wcsTask);
dbContext.Update(item);
dbContext.Update(stock);
dbContext.SaveChanges();
}
if (item.beginTime == null)
{
item.beginTime = DateTime.Now;
}
dbContext.Update(item);
dbContext.SaveChanges();
break;
}
}

@ -289,6 +289,7 @@ namespace Khd.Core.Wcs.Wcs
/// </summary>
private void FirstFloorLine()
{
List<string> BigContainerCodes = new() { "JYHB01020001", "JYHB01020002", "JYHB01020003", "JYHB01020004" };
List<int?> Outtpyes = new() { 2, 4, 8, 6 };
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
@ -306,133 +307,163 @@ namespace Khd.Core.Wcs.Wcs
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 1);
if (Convert.ToInt32(linesignal01Value) == 1)
{
//判断task表里没有该rfid的未完成的入库
//信息,未下发去向
var task = dbContext.WcsTask.Where(t => t.nextPointId == 1).OrderBy(t => t.createTime).FirstOrDefault();
if (task == null)
{
//根据托盘号获取物料码
var material = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value).FirstOrDefault();
WcsTaskLog? taskLog = dbContext.WcsTaskLog.Where(t => t.containerNo == RFID001Value).OrderByDescending(t => t.createTime).FirstOrDefault();
if (material != null)
//判断task表里没有该rfid的未完成的入库
//信息,未下发去向
var task = dbContext.WcsTask.Where(t => t.nextPointId == 1).OrderBy(t => t.createTime).FirstOrDefault();
if (task == null)
{
if (taskLog != null)
if (BigContainerCodes.Contains(RFID001Value))
{
if (taskLog.materialBarcode == material.materialBarcode)
var newTask = new WcsTask()
{
if (baseEquip.containerNo == "0")
{
baseEquip.containerNo = null;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
LogManager.Info("一楼接驳位线程:托盘" + RFID001Value + "解绑信息更新成功");
}
else if (baseEquip.containerNo != RFID001Value)
{
baseEquip.containerNo = RFID001Value;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
LogManager.Info("一楼接驳位线程:托盘" + RFID001Value + "绑定信息更新成功");
Console.WriteLine(DateTime.Now + ":一楼接驳位线程:托盘" + RFID001Value + "绑定信息更新成功");
Thread.Sleep(3000);
continue;
}
else
{
Thread.Sleep(3000);
continue;
}
}
objid = StaticData.SnowId.NextId(),
serialNo = SystemData.GetSerialNo(dbContext),
equipmentNo = "F01",
taskType = 5,
taskStatus = 0,
containerNo = RFID001Value,
currPointId = F01,
currPointNo = "TSJ_01",
nextPointId = T01,
nextPointNo = "TSJ_01",
fromFloorNo = 1,
floorNo = 4,
useFlag = 1,
createBy = "一楼接驳位",
createTime = DateTime.Now,
remark = "一楼创建入库任务"
};
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog);
dbContext.Add(newTask);
dbContext.SaveChanges();
}
var warehouseId = dbContext.WmsWarehouseMaterial.Where(t => t.storageType == "1" && t.storageId == material.materialId).FirstOrDefault()?.warehouseId;
if (warehouseId != null)
else
{
var TargetFloor = dbContext.WmsBaseWarehouse.Where(t => t.warehouseId == warehouseId).FirstOrDefault();
if (TargetFloor != null)
{
//插入task表
//根据托盘号获取物料码
var material = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value).FirstOrDefault();
WcsTaskLog? taskLog = dbContext.WcsTaskLog.Where(t => t.containerNo == RFID001Value).OrderByDescending(t => t.createTime).FirstOrDefault();
var dic = StaticData.BaseDictionary.Where(t => t.dicKey == "TaskType" && t.agvType == "I" && t.dicField == TargetFloor.warehouseInstockType).FirstOrDefault();
if (dic != null)
if (material != null)
{
if (taskLog != null)
{
var newTask = new WcsTask()
if (taskLog.materialBarcode == material.materialBarcode)
{
objid = StaticData.SnowId.NextId(),
serialNo = SystemData.GetSerialNo(dbContext),
equipmentNo = "F01",
taskType = Convert.ToInt32(dic.dicValue),
taskStatus = 0,
containerNo = RFID001Value,
materialBarcode = material.materialBarcode,
materialId = material.materialId,
qty = Convert.ToInt32(material.bindAmount),
currPointId = F01,
currPointNo = "TSJ_01",
nextPointId = T01,
nextPointNo = "TSJ_01",
endPointId = warehouseId,
fromFloorNo = 1,
floorNo = TargetFloor.warehouseFloor,
useFlag = 1,
createBy = "一楼接驳位",
createTime = DateTime.Now,
remark = "一楼创建入库任务"
};
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog);
dbContext.Add(newTask);
dbContext.SaveChanges();
if (baseEquip.containerNo == "0")
{
baseEquip.containerNo = null;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
LogManager.Info("一楼接驳位线程:托盘" + RFID001Value + "解绑信息更新成功");
}
else if (baseEquip.containerNo != RFID001Value)
{
baseEquip.containerNo = RFID001Value;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
LogManager.Info("一楼接驳位线程:托盘" + RFID001Value + "绑定信息更新成功");
Console.WriteLine(DateTime.Now + ":一楼接驳位线程:托盘" + RFID001Value + "绑定信息更新成功");
Thread.Sleep(3000);
continue;
}
else
{
Thread.Sleep(3000);
continue;
}
}
}
}
}
}
}
else
{
if (string.IsNullOrEmpty(task.containerNo))//人工调出
{
if (task.useFlag == 1)
{
if (task.qty > 1)//多个托盘
{
if (task.endPointId != 1)
var warehouseId = dbContext.WmsWarehouseMaterial.Where(t => t.storageType == "1" && t.storageId == material.materialId).FirstOrDefault()?.warehouseId;
if (warehouseId != null)
{
task.nextPointId = 6;
dbContext.SaveChanges();
}
}
else if (task.qty == 1)
{
if (task.endPointId != 1)
{
task.nextPointId = 6;
task.containerNo = RFID001Value;
dbContext.SaveChanges();
var TargetFloor = dbContext.WmsBaseWarehouse.Where(t => t.warehouseId == warehouseId).FirstOrDefault();
if (TargetFloor != null)
{
//插入task表
var dic = StaticData.BaseDictionary.Where(t => t.dicKey == "TaskType" && t.agvType == "I" && t.dicField == TargetFloor.warehouseInstockType).FirstOrDefault();
if (dic != null)
{
var newTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
serialNo = SystemData.GetSerialNo(dbContext),
equipmentNo = "F01",
taskType = Convert.ToInt32(dic.dicValue),
taskStatus = 0,
containerNo = RFID001Value,
materialBarcode = material.materialBarcode,
materialId = material.materialId,
qty = Convert.ToInt32(material.bindAmount),
currPointId = F01,
currPointNo = "TSJ_01",
nextPointId = T01,
nextPointNo = "TSJ_01",
endPointId = warehouseId,
fromFloorNo = 1,
floorNo = TargetFloor.warehouseFloor,
useFlag = 1,
createBy = "一楼接驳位",
createTime = DateTime.Now,
remark = "一楼创建入库任务"
};
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog);
dbContext.Add(newTask);
dbContext.SaveChanges();
}
}
}
}
}
}
else
{
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == RFID001Value);
if (mesBasePalletInfo != null)
if (string.IsNullOrEmpty(task.containerNo))//人工调出
{
mesBasePalletInfo.bindAmount = null;
mesBasePalletInfo.createBy = null;
mesBasePalletInfo.bindAmount = null;
mesBasePalletInfo.createTime = null;
mesBasePalletInfo.materialBarcode = null;
mesBasePalletInfo.materialCode = null;
mesBasePalletInfo.materialId = null;
mesBasePalletInfo.materialName = null;
mesBasePalletInfo.updateBy = "WCS";
mesBasePalletInfo.updateTime = DateTime.Now;
dbContext.Update(mesBasePalletInfo);
dbContext.Remove(task);
dbContext.WcsTaskLog.Where(t => t.objid == task.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
dbContext.SaveChanges();
if (task.useFlag == 1)
{
if (task.qty > 1)//多个托盘
{
if (task.endPointId != 1)
{
task.nextPointId = 6;
dbContext.SaveChanges();
}
}
else if (task.qty == 1)
{
if (task.endPointId != 1)
{
task.nextPointId = 6;
task.containerNo = RFID001Value;
dbContext.SaveChanges();
}
}
}
}
else
{
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == RFID001Value);
if (mesBasePalletInfo != null)
{
mesBasePalletInfo.bindAmount = null;
mesBasePalletInfo.bindAmount = null;
mesBasePalletInfo.materialBarcode = null;
mesBasePalletInfo.materialCode = null;
mesBasePalletInfo.materialId = null;
mesBasePalletInfo.materialName = null;
mesBasePalletInfo.updateBy = "WCS";
mesBasePalletInfo.updateTime = DateTime.Now;
dbContext.Update(mesBasePalletInfo);
dbContext.Remove(task);
dbContext.WcsTaskLog.Where(t => t.objid == task.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
dbContext.SaveChanges();
}
}
}
}

@ -6,9 +6,11 @@ using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using System.Transactions;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
@ -82,34 +84,19 @@ namespace Khd.Core.Wcs.Wcs
}
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1);
WcsCmd wcsCmd = new()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = wmsBaseLocation.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = nextEquip.agvPositionCode,
};
RequestAGVTaskDto agvTask = new()
{
reqCode = wcsCmd.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode=wmsBaseLocation.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode=nextEquip.agvPositionCode,
type="00"
}
},
@ -123,17 +110,13 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("五楼Agv下发任务成功" + message);
Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功" + wcsCmd.currPointNo + "," + wcsCmd.nextPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功" + wmsBaseLocation.agvPositionCode + "," + nextEquip.agvPositionCode);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
lineEquip.equipStatus = 1;
dbContext.Update(lineEquip);
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -147,34 +130,19 @@ namespace Khd.Core.Wcs.Wcs
{
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 30);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
WcsCmd wcsCmd = new()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = wmsBaseLocation.agvPositionCode,
nextPointId = endEquip.objid,
nextPointNo = endEquip.agvPositionCode,
};
RequestAGVTaskDto agvTask = new()
{
reqCode = wcsCmd.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode=wmsBaseLocation.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode= endEquip.agvPositionCode,
type="00"
}
},
@ -187,15 +155,11 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("五楼Agv下发任务成功" + message);
Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功" + wcsCmd.currPointNo + "," + wcsCmd.nextPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功" + wmsBaseLocation.agvPositionCode + "," + endEquip.agvPositionCode);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -207,34 +171,19 @@ namespace Khd.Core.Wcs.Wcs
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
BaseEquip currentEquip = StaticData.BaseEquip.First(t => t.objid == 30);
WcsCmd wcsCmd = new()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = currentEquip.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = wmsBaseLocation.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode=currentEquip.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode=wmsBaseLocation.agvPositionCode,
type="00"
}
},
@ -247,15 +196,11 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("五楼Agv下发任务成功" + message);
Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功" + wcsCmd.currPointNo + "," + wcsCmd.nextPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功" + currentEquip.agvPositionCode + "," + wmsBaseLocation.agvPositionCode);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -267,34 +212,19 @@ namespace Khd.Core.Wcs.Wcs
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
BaseEquip currentEquip = StaticData.BaseEquip.First(t => t.objid == 29);
WcsCmd wcsCmd = new()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = wmsBaseLocation.agvPositionCode,
nextPointId = 29,
nextPointNo = currentEquip.agvPositionCode,
};
RequestAGVTaskDto agvTask = new()
{
reqCode = wcsCmd.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode=wmsBaseLocation.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode=currentEquip.agvPositionCode,
type="00"
}
},
@ -307,15 +237,11 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("五楼Agv下发任务成功" + message);
Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功" + wcsCmd.currPointNo + "," + wcsCmd.nextPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功" + wmsBaseLocation.agvPositionCode + "," + currentEquip.agvPositionCode);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -327,34 +253,19 @@ namespace Khd.Core.Wcs.Wcs
{
BaseEquip currentEquip = StaticData.BaseEquip.First(t => t.objid == 29);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
WcsCmd wcsCmd = new()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = currentEquip.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = wmsBaseLocation.agvPositionCode,
};
RequestAGVTaskDto agvTask = new()
{
reqCode = wcsCmd.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new()
{
positionCode = wcsCmd.currPointNo,
positionCode = currentEquip.agvPositionCode,
type = "00"
},
new()
{
positionCode = wcsCmd.nextPointNo,
positionCode = wmsBaseLocation.agvPositionCode,
type = "00"
}
},
@ -368,15 +279,11 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("五楼Agv下发任务成功" + message);
Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功" + wcsCmd.currPointNo + "," + wcsCmd.nextPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功" + currentEquip.agvPositionCode + "," + wmsBaseLocation.agvPositionCode);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -388,34 +295,19 @@ namespace Khd.Core.Wcs.Wcs
{
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 5);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
WcsCmd wcsCmd = new WcsCmd
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = startEquip.objid,
currPointNo = startEquip.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = wmsBaseLocation.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode= startEquip.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode=wmsBaseLocation.agvPositionCode,
type="00"
}
},
@ -428,15 +320,11 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("五楼Agv下发任务成功" + message);
Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功" + wcsCmd.currPointNo + "," + wcsCmd.nextPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功" + startEquip.agvPositionCode + "," + wmsBaseLocation.agvPositionCode);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -448,34 +336,19 @@ namespace Khd.Core.Wcs.Wcs
{
WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
WmsBaseLocation toBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
WcsCmd wcsCmd = new()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = fromBaseLocation.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = toBaseLocation.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode=fromBaseLocation.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode=toBaseLocation.agvPositionCode,
type="00"
}
},
@ -488,15 +361,11 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("五楼Agv下发任务成功" + message);
Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功" + wcsCmd.currPointNo + "," + wcsCmd.nextPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功" + fromBaseLocation.agvPositionCode + "," + toBaseLocation.agvPositionCode);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -507,10 +376,8 @@ namespace Khd.Core.Wcs.Wcs
}
else
{
WcsCmd? wcsCmd = dbContext.WcsCmd.FirstOrDefault(t => t.taskId == item.objid);
if (wcsCmd != null)
{
if (wcsCmd.cmdStatus == 3)
if (item.taskStatus == 3)
{
if (item.currPointId == 5)
{
@ -535,7 +402,7 @@ namespace Khd.Core.Wcs.Wcs
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode
taskCode = item.taskCode
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message);
@ -543,25 +410,23 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("五楼Agv下发继续任务成功" + message);
Console.WriteLine(DateTime.Now + ":五楼Agv继续任务" + wcsCmd.currPointNo + "," + wcsCmd.nextPointNo);
wcsCmd.cmdStatus = 4;
Console.WriteLine(DateTime.Now + ":五楼Agv继续任务" + item.currPointNo + "," + item.endPointNo);
item.taskStatus = 4;
dbContext.Update(wcsCmd);
dbContext.Update(item);
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 4 });
dbContext.SaveChanges();
}
}
else if (wcsCmd.cmdStatus == 5)
else if (item.taskStatus == 5)
{
Console.WriteLine(DateTime.Now + ":五楼AGV线程完成任务" + wcsCmd.currPointNo + "," + wcsCmd.nextPointNo);
LogManager.Info("五楼Agv完成任务成功" + wcsCmd.ToJsonString());
Console.WriteLine(DateTime.Now + ":五楼AGV线程完成任务" + item.currPointNo + "," + item.endPointNo);
LogManager.Info("五楼Agv完成任务成功" + item.ToJsonString());
if (item.taskType == 66)//移库
{
using var dbContextTransaction = dbContext.Database.BeginTransaction();
try
{
var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.endPointNo).FirstOrDefault();
var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.currPointNo).FirstOrDefault();
if (wmsRawStock != null)
{
wmsRawStock.locationCode = item.endPointNo;
@ -578,38 +443,36 @@ namespace Khd.Core.Wcs.Wcs
}
dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).Update(t => new WmsBaseLocation
{
outstockFlag = "0",
locationStatus = "1",
containerCode = null,
updateTime = DateTime.Now
});
dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).Update(t => new WmsBaseLocation
{
instockFlag = "0",
locationStatus = "1",
containerCode = item.containerNo,
updateTime = DateTime.Now
});
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.SaveChanges();
dbContextTransaction.Commit();
}
catch (Exception ex)
{
dbContextTransaction.Rollback();
LogManager.Error(ex);
}
}
else if (item.taskType == 38)//出库
{
var wmsProductOutstockDetails = dbContext.WmsProductOutstockDetail.Where(t => t.productOutstockId == item.orderId);
var wmsProductOutstockDetail = wmsProductOutstockDetails.FirstOrDefault(t => 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)
{
wmsProductOutstockDetail.executeStatus = "2";
dbContext.Update(wmsProductOutstockDetail);
wmsProductOutstock.outstockQty += 1;
if (wmsProductOutstock.applyQty <= wmsProductOutstock.outstockQty)
{
wmsProductOutstock.endTime = DateTime.Now;
@ -617,7 +480,6 @@ namespace Khd.Core.Wcs.Wcs
}
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
.First(t => t.locationId == item.currPointId && t.warehouseFloor == 5);
wmsBaseLocation.outstockFlag = "0";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = null;
wmsBaseLocation.updateTime = DateTime.Now;
@ -637,10 +499,8 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog);
dbContext.WcsCmd.Remove(wcsCmd);
dbContext.SaveChanges();
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 });
}
}
else if (item.taskType == 33)//原材料到背板安装
@ -655,19 +515,16 @@ namespace Khd.Core.Wcs.Wcs
wmsRawOutstock.executeStatus = "2";
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.outstockFlag = "0";
wmsBaseLocation.containerCode = "";
wmsBaseLocation.containerCode = null;
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS";
dbContext.Update(wmsRawOutstock);
dbContext.Update(wmsRawOutstockDetail);
dbContext.Update(wmsBaseLocation);
dbContext.WmsRawStock.Where(t => t.locationCode == wmsBaseLocation.locationCode).Delete();
dbContext.WcsCmd.Remove(wcsCmd);
dbContext.WcsTask.Remove(item);
dbContext.SaveChanges();
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 });
}
}
}
@ -675,7 +532,6 @@ namespace Khd.Core.Wcs.Wcs
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.instockFlag = "0";
wmsBaseLocation.containerCode = item.containerNo;
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS";
@ -722,10 +578,8 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(startEquip);
dbContext.Add(wmsProductStock);
dbContext.Update(wmsBaseLocation);
dbContext.WcsCmd.Remove(wcsCmd);
dbContext.WcsTask.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.SaveChanges();
}
@ -742,8 +596,6 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(wmsRawOutStock);
dbContext.Update(wmsRawOutstockDetail);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
wmsBaseLocation.outstockFlag = "0";
wmsBaseLocation.instockFlag = "1";
wmsBaseLocation.locationStatus = "2";
wmsBaseLocation.containerCode = null;
wmsBaseLocation.updateTime = DateTime.Now;
@ -773,7 +625,6 @@ namespace Khd.Core.Wcs.Wcs
.FirstOrDefault();
if (deepWmsLocation != null)
{
deepWmsLocation.instockFlag = "1";
deepWmsLocation.locationStatus = "2";
dbContext.Update(deepWmsLocation);
}
@ -791,23 +642,18 @@ namespace Khd.Core.Wcs.Wcs
newTask.taskStatus = 0;
newTask.useFlag = 0;
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
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 });
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 });
}
}
}
else if (item.taskType == 28)//柜体拆分到原材料
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.instockFlag = "0";
wmsBaseLocation.containerCode = item.containerNo;
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS";
@ -840,22 +686,18 @@ namespace Khd.Core.Wcs.Wcs
.FirstOrDefault();
if (deepWmsLocation != null)
{
deepWmsLocation.instockFlag = "0";
deepWmsLocation.locationStatus = "1";
dbContext.Update(deepWmsLocation);
}
}
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.SaveChanges();
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 });
}
}
else if (item.taskType == 47)
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
wmsBaseLocation.instockFlag = "0";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = item.containerNo;
var mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo);
@ -895,9 +737,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Add(wmsRawStock);
dbContext.Update(wmsBaseLocation);
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.SaveChanges();
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
}
}

@ -63,21 +63,6 @@ namespace Khd.Core.Wcs.Wcs
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
BaseDictionary baseDictionary = dbContext.BaseDictionary.First(t => t.objid == item.taskType);
WcsCmd wcsCmd = new()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = startEquip.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = endEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
@ -85,12 +70,12 @@ namespace Khd.Core.Wcs.Wcs
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode=startEquip.agvPositionCode,
type=baseDictionary.agvType
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode=endEquip.agvPositionCode,
type=baseDictionary.agvType
}
},
@ -103,15 +88,11 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.code == "0")
{
LogManager.Info("五楼背负式AGV线程下发任务" + agvTask.ToJsonString());
Console.WriteLine(DateTime.Now + ":五楼背负式AGV线程下发任务" + wcsCmd.currPointNo + "," + wcsCmd.nextPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
Console.WriteLine(DateTime.Now + ":五楼背负式AGV线程下发任务" + startEquip.agvPositionCode + "," + endEquip.agvPositionCode);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -121,42 +102,37 @@ namespace Khd.Core.Wcs.Wcs
}
else
{
if (item.useFlag == 1)//接料位-工位默认为1工位到接料位需Mes通知
//if (item.useFlag == 1)//接料位-工位默认为1工位到接料位需Mes通知
{
WcsCmd? wcsCmd = dbContext.WcsCmd.FirstOrDefault(t => t.taskId == item.objid);
if (wcsCmd != null)
{
if (wcsCmd.cmdStatus == 4)
if (item.taskStatus == 4)//通知捡料完成
{
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode
taskCode = item.taskCode
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message);
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("五楼背负式AGV线程完成任务" + wcsCmd.objid);
Console.WriteLine(DateTime.Now + ":五楼背负式AGV线程完成任务" + wcsCmd.objid);
LogManager.Info("五楼背负式AGV线程完成任务" + item.objid);
Console.WriteLine(DateTime.Now + ":五楼背负式AGV线程完成任务" + item.currPointNo + "," + item.endPointNo);
item.taskStatus = 5;
wcsCmd.cmdStatus = 5;
dbContext.Update(item);
dbContext.Update(wcsCmd);
dbContext.SaveChanges();
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 5 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 5 });
}
}
else if (wcsCmd.cmdStatus == 7)
else if (item.taskStatus == 7)//通知拿料完成
{
LogManager.Info("五楼背负式AGV线程完成任务" + wcsCmd.objid);
Console.WriteLine(DateTime.Now + ":五楼背负式AGV线程完成任务" + wcsCmd.objid);
LogManager.Info("五楼背负式AGV线程完成任务" + item.objid);
Console.WriteLine(DateTime.Now + ":五楼背负式AGV线程完成任务" + item.currPointNo + "," + item.endPointNo);
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode
taskCode = item.taskCode
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message);
@ -172,10 +148,8 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(wmsRawReturn);
}
}
dbContext.Remove(wcsCmd);
dbContext.Remove(item);
dbContext.SaveChanges();
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
}
}

@ -138,7 +138,6 @@ namespace Khd.Core.Wcs.Wcs
createBy = FloorNo + "楼CTU",
createTime = DateTime.Now,
};
wmsBaseLocation.instockFlag = "1";
wmsBaseLocation.locationStatus = "2";
wmsBaseLocation.updateTime = DateTime.Now;
dbContext.Update(wmsBaseLocation);
@ -180,7 +179,6 @@ namespace Khd.Core.Wcs.Wcs
createBy = FloorNo + "楼CTU",
createTime = DateTime.Now,
};
wmsBaseLocation.instockFlag = "1";
wmsBaseLocation.locationStatus = "2";
wmsBaseLocation.updateTime = DateTime.Now;
dbContext.Update(wmsBaseLocation);
@ -220,7 +218,6 @@ namespace Khd.Core.Wcs.Wcs
createBy = FloorNo + "楼CTU",
createTime = DateTime.Now,
};
wmsBaseLocation.instockFlag = "1";
wmsBaseLocation.locationStatus = "2";
wmsBaseLocation.updateTime = DateTime.Now;
dbContext.Update(wmsBaseLocation);
@ -393,22 +390,6 @@ namespace Khd.Core.Wcs.Wcs
{
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
var wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼CTU",
currPointId = wmsBaseLocation.locationId,
currPointNo = wmsBaseLocation.agvPositionCode,
nextPointId = endEquip.objid,
nextPointNo = endEquip.agvPositionCode,
taskCode = null
};
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
@ -416,12 +397,12 @@ namespace Khd.Core.Wcs.Wcs
{
new()
{
positionCode = wcsCmd.currPointNo,
positionCode =wmsBaseLocation.agvPositionCode,
type = "05"//05库位
},
new()
{
positionCode = wcsCmd.nextPointNo,
positionCode = endEquip.agvPositionCode,
type = "00"//设备
},
},
@ -433,14 +414,12 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.code == "0")
{
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
LogManager.Info("五楼CTU线程开始任务" + item.objid);
Console.WriteLine(DateTime.Now + ":五楼CTU线程开始任务" + item.currPointNo + "," + item.endPointNo);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.WcsCmd.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -455,22 +434,6 @@ namespace Khd.Core.Wcs.Wcs
{
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
var wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼CTU",
nextPointId = wmsBaseLocation.locationId,
nextPointNo = wmsBaseLocation.agvPositionCode,
currPointId = startEquip.objid,
currPointNo = startEquip.agvPositionCode,
};
var agvTask = new
{
reqCode = StaticData.SnowId.NextId().ToString(),
@ -478,12 +441,12 @@ namespace Khd.Core.Wcs.Wcs
{
new()
{
positionCode = wcsCmd.currPointNo,
positionCode = wmsBaseLocation.agvPositionCode,
type = "05"//设备
},
new()
{
positionCode = wcsCmd.nextPointNo,
positionCode = startEquip.agvPositionCode,
type = "05"//库位
},
},
@ -495,14 +458,12 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.code == "0")
{
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
LogManager.Info("五楼CTU线程开始任务" + item.objid);
Console.WriteLine(DateTime.Now + ":五楼CTU线程开始任务" + item.currPointNo + "," + item.endPointNo);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Update(item);
dbContext.Add(wcsCmd);
int ctuTaskCount = dbContext.WcsTask.Where(t => t.taskType == 29).Count();
lock (SystemData.outStockLock)
{
@ -513,7 +474,6 @@ namespace Khd.Core.Wcs.Wcs
wcsOutstockLock.qty = 0;
wcsOutstockLock.boxStatus = 0;
dbContext.Update(wcsOutstockLock);
//isWait = false;
}
}
dbContext.SaveChanges();
@ -528,22 +488,6 @@ namespace Khd.Core.Wcs.Wcs
{
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
var wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼CTU",
currPointId = wmsBaseLocation.locationId,
currPointNo = wmsBaseLocation.agvPositionCode,
nextPointId = endEquip.objid,
nextPointNo = endEquip.agvPositionCode,
taskCode = null
};
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
@ -551,12 +495,12 @@ namespace Khd.Core.Wcs.Wcs
{
new()
{
positionCode = wcsCmd.currPointNo,
positionCode =wmsBaseLocation.agvPositionCode,
type = "05"
},
new()
{
positionCode = wcsCmd.nextPointNo,
positionCode =endEquip.agvPositionCode,
type = "00"
},
},
@ -568,14 +512,10 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.code == "0")
{
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.WcsCmd.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -586,10 +526,8 @@ namespace Khd.Core.Wcs.Wcs
}
else
{
WcsCmd? wcsCmd = dbContext.WcsCmd.FirstOrDefault(t => t.taskId == item.objid);
if (wcsCmd != null)
{
if (wcsCmd.cmdStatus == 3)
if (item.taskStatus == 3)
{
if (item.taskType == 30 || item.taskType == 100)
{
@ -599,7 +537,7 @@ namespace Khd.Core.Wcs.Wcs
var agvTask = new
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode,
taskCode = item.taskCode,
type = 2
};
string message = JsonConvert.SerializeObject(agvTask);
@ -609,11 +547,8 @@ namespace Khd.Core.Wcs.Wcs
{
LogManager.Info("五楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":五楼CTU线程继续任务" + item.currPointId + "," + item.endPointNo);
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 });
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 4 });
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 4 });
dbContext.SaveChanges();
}
else
{
@ -626,7 +561,7 @@ namespace Khd.Core.Wcs.Wcs
var agvTask = new
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode,
taskCode = item.taskCode,
type = 1
};
string message = JsonConvert.SerializeObject(agvTask);
@ -636,8 +571,6 @@ namespace Khd.Core.Wcs.Wcs
{
LogManager.Info("五楼CTU线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":五楼CTU线程下发任务" + item.currPointId + "," + item.endPointNo);
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 });
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 4 });
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 4 });
dbContext.SaveChanges();
@ -648,10 +581,10 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
else if (wcsCmd.cmdStatus == 5)
else if (item.taskStatus == 5)
{
LogManager.Info("五楼CTU线程完成任务" + wcsCmd.objid);
Console.WriteLine(DateTime.Now + ":五楼CTU线程完成任务" + wcsCmd.objid);
LogManager.Info("五楼CTU线程完成任务" + item.objid);
Console.WriteLine(DateTime.Now + ":五楼CTU线程完成任务" + item.currPointNo + "," + item.endPointNo);
if (item.taskType == 30)//出库任务
{
WmsRawOutstockDetail? wmsRawOutstockDetail = dbContext.WmsRawOutstockDetail.FirstOrDefault(t => t.taskCode == item.objid.ToString());
@ -664,16 +597,13 @@ namespace Khd.Core.Wcs.Wcs
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
.First(t => t.locationId == item.currPointId && t.warehouseFloor == 5);
wmsBaseLocation.outstockFlag = "0";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.locationStatus = "2";
wmsBaseLocation.ContainerStatus = "2";
dbContext.Update(wmsBaseLocation);
dbContext.WmsRawOutstockDetail.Where(t => t.locationCode == wmsBaseLocation.locationCode).Update(t => new WmsRawOutstockDetail { executeStatus = "2" });
dbContext.Remove(wcsCmd);
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 6 });
dbContext.SaveChanges();
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 });
dbContext.WcsTaskLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
dbContext.WmsRawOutstockDetail.Where(t => t.locationCode == wmsBaseLocation.locationCode).Update(t => new WmsRawOutstockDetail { executeStatus = "2" });
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 6 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
int wcsTaskCount = dbContext.WcsTask.Where(t => t.taskType == 30 && t.taskStatus != 6).Count();
if (wcsTaskCount == 0)
{
@ -684,16 +614,12 @@ namespace Khd.Core.Wcs.Wcs
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
.First(t => t.locationId == item.endPointId && t.warehouseFloor == 5);
wmsBaseLocation.instockFlag = "0";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.ContainerStatus = "1";
dbContext.Update(wmsBaseLocation);
dbContext.Remove(wcsCmd);
dbContext.Remove(item);
dbContext.SaveChanges();
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 });
dbContext.WcsTaskLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
lock (SystemData.outStockLock)
{
WcsOutstockLock wcsOutstockLock = dbContext.WcsOutstockLock.Where(t => t.warehouseId == 512).First();
@ -707,15 +633,12 @@ namespace Khd.Core.Wcs.Wcs
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
.First(t => t.locationId == item.currPointId && t.warehouseFloor == 5);
wmsBaseLocation.outstockFlag = "0";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.locationStatus = "2";
wmsBaseLocation.ContainerStatus = "2";
dbContext.Update(wmsBaseLocation);
dbContext.Remove(wcsCmd);
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 6 });
dbContext.SaveChanges();
dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 });
dbContext.WcsTaskLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
int wcsTaskCount = dbContext.WcsTask.Where(t => (t.taskType == 30 || t.taskType == 100) && t.taskStatus != 6).Count();
if (wcsTaskCount == 0)
{

@ -64,7 +64,7 @@ namespace Khd.Core.Wcs.Wcs
continue;
}
//正常读到输送线信息 有到位信号,并且有托盘,获取条码信息
if (Convert.ToInt32(isSignal) == 1)
if (Convert.ToInt32(isSignal) == 1)//五楼接驳位
{
//获取条码信息
BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.equipType == 1 && t.floorNo == FloorNo);
@ -78,8 +78,6 @@ namespace Khd.Core.Wcs.Wcs
.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 == 511)
.Where(t => t.locationStatus == "1")
.ToList();
@ -103,8 +101,6 @@ namespace Khd.Core.Wcs.Wcs
&& b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow + 1 : a.b.locRow - 1)
&& a.b.locColumn == b.locColumn
&& b.locationStatus == "1"
&& b.outstockFlag == "0"
&& b.instockFlag == "0"
&& string.IsNullOrEmpty(b.containerCode)
select new { a.b };//在上面的基础上获取对应托盘的外侧库位的空库位信息
@ -114,7 +110,7 @@ namespace Khd.Core.Wcs.Wcs
wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位
//深浅库位问题?库位入库优先级等
var AgvEquip = StaticData.BaseEquip.First(t => t.objid == 28);//
var AgvEquip = StaticData.BaseEquip.First(t => t.objid == 28);//5楼叉车
if (wmsBaseLocations.Count > 0 && wmsBaseLocation != null)
{
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
@ -129,7 +125,7 @@ namespace Khd.Core.Wcs.Wcs
newTask.objid = StaticData.SnowId.NextId();
newTask.createTime = DateTime.Now;
newTask.taskType = 47;
if (newTask.fromFloorNo != 1)
if (newTask.fromFloorNo != 1)//如果不是一楼来的,需要通过接口确认入库(质检通过后,点击继续入库)
{
newTask.useFlag = 0;
}
@ -137,7 +133,6 @@ namespace Khd.Core.Wcs.Wcs
{
newTask.useFlag = 1;
}
wmsBaseLocation.instockFlag = "1";
wmsBaseLocation.locationStatus = "2";
dbContext.Update(wmsBaseLocation);
dbContext.Remove(wcsTask);
@ -157,35 +152,35 @@ namespace Khd.Core.Wcs.Wcs
}
else if (wcsTask.taskStatus == 6) //出库任务,小车任务是完成状态
{
int? floor = 1;
var wmsProductOutstock = dbContext.WmsProductOutstock.FirstOrDefault(t => t.productOutstockId == wcsTask.orderId);
if (wmsProductOutstock != null)
{
var endEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipNo == wmsProductOutstock.endStationCode);
if (endEquip != null)
{
floor = endEquip.floorNo;
}
}
else
{
var wmsRawOutstock = dbContext.WmsRawOutstock.FirstOrDefault(t => t.rawOutstockId == wcsTask.orderId);
if (wmsRawOutstock != null)
{
var endEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipNo == wmsRawOutstock.endStationCode);
if (endEquip != null)
{
floor = endEquip.floorNo;
}
}
}
if (floor == 0)
{
Console.WriteLine($"{DateTime.Now}:5楼接驳位未找到目的地楼层");
LogManager.Info("5楼接驳位未找到目的地楼层");
Thread.Sleep(1000);
continue;
}
//int? floor = 1;
//var wmsProductOutstock = dbContext.WmsProductOutstock.FirstOrDefault(t => t.productOutstockId == wcsTask.orderId);
//if (wmsProductOutstock != null)
//{
// var endEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipNo == wmsProductOutstock.endStationCode);
// if (endEquip != null)
// {
// floor = endEquip.floorNo;
// }
//}
//else
//{
// var wmsRawOutstock = dbContext.WmsRawOutstock.FirstOrDefault(t => t.rawOutstockId == wcsTask.orderId);
// if (wmsRawOutstock != null)
// {
// var endEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipNo == wmsRawOutstock.endStationCode);
// if (endEquip != null)
// {
// floor = endEquip.floorNo;
// }
// }
//}
//if (floor == 0)
//{
// Console.WriteLine($"{DateTime.Now}:5楼接驳位未找到目的地楼层");
// LogManager.Info("5楼接驳位未找到目的地楼层");
// Thread.Sleep(1000);
// continue;
//}
BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.equipType == 2);//提升机
dbContext.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
@ -197,7 +192,7 @@ namespace Khd.Core.Wcs.Wcs
newTask.currPointNo = baseEquip.equipNo;
newTask.fromFloorNo = FloorNo;
newTask.taskType = 6;//成品出库
newTask.floorNo = floor;//出库楼层
newTask.floorNo = 1;//出库楼层
newTask.taskStatus = 0;
newTask.createTime = DateTime.Now;
dbContext.Add(newTask);

@ -66,34 +66,19 @@ namespace Khd.Core.Wcs.Wcs
BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType);
if (item.taskType == 51)//输送线-小包入口
{
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = lineEquip.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = inEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode= lineEquip.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode=inEquip.agvPositionCode,
type="00"
}
},
@ -106,15 +91,11 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -125,34 +106,19 @@ namespace Khd.Core.Wcs.Wcs
else if (item.taskType == 56)//废料工位-库位
{
var endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = wasteEquip.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = endEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode=wasteEquip.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode= endEquip.agvPositionCode,
type="00"
}
},
@ -166,15 +132,11 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -186,34 +148,19 @@ namespace Khd.Core.Wcs.Wcs
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = startEquip.objid,
currPointNo = startEquip.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = wmsBaseLocation.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode=startEquip.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode=wmsBaseLocation.agvPositionCode,
type="00"
}
},
@ -226,15 +173,11 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -245,34 +188,19 @@ namespace Khd.Core.Wcs.Wcs
else if (item.taskType == 57)//周转位-小包入口
{
var startPoint = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = startPoint.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = lineEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode=startPoint.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode=lineEquip.agvPositionCode,
type="00"
}
},
@ -285,15 +213,11 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -307,34 +231,19 @@ namespace Khd.Core.Wcs.Wcs
lineEquip = dbContext.BaseEquip.First(t => t.objid == 2);
if (lineEquip.equipStatus == 0)
{
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = startPoint.agvPositionCode,
nextPointId = lineEquip.objid,
nextPointNo = lineEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode=startPoint.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode= lineEquip.agvPositionCode,
type="00"
}
},
@ -346,18 +255,14 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + wcsCmd.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
lineEquip.equipStatus = 1;
dbContext.Update(lineEquip);
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -370,34 +275,19 @@ namespace Khd.Core.Wcs.Wcs
{
WmsBaseLocation fromWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
WmsBaseLocation toWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = fromWmsBaseLocation.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = toWmsBaseLocation.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new()
{
positionCode = wcsCmd.currPointNo,
positionCode = fromWmsBaseLocation.agvPositionCode,
type = "00"
},
new()
{
positionCode = wcsCmd.nextPointNo,
positionCode = toWmsBaseLocation.agvPositionCode,
type = "00"
}
@ -411,15 +301,11 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -429,34 +315,19 @@ namespace Khd.Core.Wcs.Wcs
}
else if (item.taskType == 53)//提升机-废料工位
{
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = lineEquip.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = wasteEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode=lineEquip.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode=wasteEquip.agvPositionCode,
type="00"
}
},
@ -469,15 +340,11 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -490,34 +357,19 @@ namespace Khd.Core.Wcs.Wcs
var wasteEquipLocation = StaticData.BaseEquip.FirstOrDefault(t => t.objid == item.currPointId);
if (wasteEquipLocation != null)
{
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = wasteEquipLocation.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = wasteEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode=wasteEquipLocation.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode=wasteEquip.agvPositionCode,
type="00"
}
},
@ -530,15 +382,11 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -550,34 +398,19 @@ namespace Khd.Core.Wcs.Wcs
else if (item.taskType == 58)//提升机到周转位
{
var endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = lineEquip.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = endEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode=lineEquip.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode=endEquip.agvPositionCode,
type="00"
}
},
@ -590,15 +423,11 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -610,34 +439,20 @@ namespace Khd.Core.Wcs.Wcs
{
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = startEquip.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = endEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode=startEquip.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode=endEquip.agvPositionCode,
type="00"
}
},
@ -650,15 +465,11 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -669,13 +480,11 @@ namespace Khd.Core.Wcs.Wcs
}
else
{
WcsCmd? wcsCmd = dbContext.WcsCmd.FirstOrDefault(t => t.taskId == item.objid);
if (wcsCmd != null)
{
LogManager.Info("二楼AGV线程完成任务" + item.objid);
if (wcsCmd.cmdStatus == 3)
if (item.taskStatus == 3)
{
if (wcsCmd.currPointId == lineEquip.objid)
if (item.currPointId == lineEquip.objid)
{
var lineSignal02 = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal02").plcpointAddress);
var rfid = StaticData.PlcDic[0].ReadRFID(StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID002").plcpointAddress);
@ -684,65 +493,53 @@ namespace Khd.Core.Wcs.Wcs
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode
taskCode = item.taskCode
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message);
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.cmdStatus = 4;
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 });
dbContext.Update(wcsCmd);
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 4 });
dbContext.SaveChanges();
}
}
}
else if (wcsCmd.currPointId == wasteEquip.objid)
else if (item.currPointId == wasteEquip.objid)
{
if (true)
{
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode
taskCode = item.taskCode
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message);
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.cmdStatus = 4;
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 });
dbContext.Update(wcsCmd);
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 4 });
dbContext.SaveChanges();
}
}
}
else if (wcsCmd.currPointId == outEquip.objid)
else if (item.currPointId == outEquip.objid)
{
if (true)
{
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode
taskCode = item.taskCode
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message);
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.cmdStatus = 4;
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 });
dbContext.Update(wcsCmd);
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 4 });
dbContext.SaveChanges();
}
}
}
@ -751,24 +548,19 @@ namespace Khd.Core.Wcs.Wcs
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode
taskCode = item.taskCode
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message);
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.cmdStatus = 4;
item.taskStatus = 4;
dbContext.Update(wcsCmd);
dbContext.Update(item);
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 4 });
dbContext.SaveChanges();
}
}
}
else if (wcsCmd.cmdStatus == 5)
else if (item.taskStatus == 5)
{
if (item.taskType == 51)
{
@ -777,20 +569,15 @@ namespace Khd.Core.Wcs.Wcs
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode
taskCode = item.taskCode
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message);
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.cmdStatus = 6;
item.taskStatus = 6;
dbContext.Update(item);
dbContext.Update(wcsCmd);
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 6 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
dbContext.SaveChanges();
}
}
}
@ -818,7 +605,6 @@ namespace Khd.Core.Wcs.Wcs
if (mesBaseBarcodeInfo != null)
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
wmsBaseLocation.instockFlag = "0";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = item.containerNo;
WmsProductStock wmsProductStock = new WmsProductStock()
@ -854,9 +640,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(wmsBaseLocation);
//dbContext.Update(wmsProductInstock);
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.SaveChanges();
}
// }
@ -881,7 +665,6 @@ namespace Khd.Core.Wcs.Wcs
}
wmsProductOutstockDetail.executeStatus = "2";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.outstockFlag = "0";
wmsBaseLocation.containerCode = null;
item.nextPointId = 2;
item.taskStatus = 8;
@ -890,27 +673,23 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(wmsProductOutstockDetail);
dbContext.Update(wmsProductOutstock);
dbContext.Update(item);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.SaveChanges();
}
}
}
else if (item.taskType == 58)
else if (item.taskType == 58)//空托盘入周转位
{
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId);
endEquip.equipStatus = 1;
endEquip.emptyCount = item.qty;
dbContext.Update(endEquip);
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.SaveChanges();
}
else if (item.taskType == 53)
else if (item.taskType == 53)//提升机到废料口
{
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
startEquip.equipStatus = 0;
@ -921,23 +700,19 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(endEquip);
dbContext.Update(startEquip);
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.SaveChanges();
}
else if (item.taskType == 51)
else if (item.taskType == 51)//输送线到小包入口
{
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
startEquip.equipStatus = 0;
dbContext.Update(startEquip);
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.SaveChanges();
}
else if (item.taskType == 54)
else if (item.taskType == 54)//周转位到废料口
{
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
startEquip.equipStatus = 0;
@ -950,49 +725,34 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(startEquip);
dbContext.Update(endEquip);
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.SaveChanges();
}
else if (item.taskType == 55)
else if (item.taskType == 55)//移库
{
using var transaction = dbContext.Database.BeginTransaction();
try
{
var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.endPointNo).FirstOrDefault();
if (wmsRawStock != null)
var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == item.currPointNo);
if (wmsProductStock != null)
{
wmsRawStock.locationCode = item.endPointNo;
dbContext.Update(wmsRawStock);
}
else
{
var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == item.currPointNo);
if (wmsProductStock != null)
{
wmsProductStock.locationCode = item.currPointNo;
dbContext.Update(wmsProductStock);
}
wmsProductStock.locationCode = item.endPointNo;
dbContext.Update(wmsProductStock);
}
dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).Update(t => new WmsBaseLocation
{
outstockFlag = "0",
locationStatus = "1",
containerCode = null,
updateTime = DateTime.Now
});
dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).Update(t => new WmsBaseLocation
{
instockFlag = "0",
locationStatus = "1",
containerCode = item.containerNo,
updateTime = DateTime.Now
});
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
transaction.Commit();
dbContext.SaveChanges();
}
@ -1002,7 +762,7 @@ namespace Khd.Core.Wcs.Wcs
LogManager.Error(ex);
}
}
else if (item.taskType == 56)
else if (item.taskType == 56)//废料区到周转区
{
wasteEquip.emptyCount = 0;
wasteEquip.equipStatus = 0;
@ -1012,26 +772,23 @@ namespace Khd.Core.Wcs.Wcs
endEquip.containerNo = item.containerNo;
dbContext.Remove(item);
dbContext.Update(wasteEquip);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.SaveChanges();
}
else if (item.taskType == 57)
else if (item.taskType == 57)//周转位-提升机
{
BaseEquip emptyEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
emptyEquip.emptyCount = 0;
emptyEquip.equipStatus = 0;
emptyEquip.containerNo = null;
item.nextPointId = 2;
item.taskStatus = 8;
dbContext.Update(item);
dbContext.Update(emptyEquip);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 });
dbContext.SaveChanges();
}
else if (item.taskType == 59)
else if (item.taskType == 59)//周转区-小包入口
{
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
startEquip.equipStatus = 0;
@ -1039,9 +796,7 @@ namespace Khd.Core.Wcs.Wcs
startEquip.containerNo = null;
dbContext.Update(startEquip);
dbContext.Remove(item);
dbContext.Remove(wcsCmd);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 });
dbContext.SaveChanges();
}
}

@ -1,4 +1,5 @@
using Khd.Core.Domain.Models;
using Azure.Identity;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library.Mapper;
using Khd.Core.Plc.S7;
@ -11,7 +12,7 @@ using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
{
/// <summary>
/// 二楼码垛输送线调度
/// 二楼小包出入口
/// </summary>
public class SecondFloorLine
{
@ -49,27 +50,28 @@ namespace Khd.Core.Wcs.Wcs
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
var agvGetValue = StaticData.PlcDic[2].Read(agvGetPoint.plcpointAddress);
var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress);
var rfidValue = StaticData.PlcDic[2].ReadRFID(rfidPoint.plcpointAddress);
if (agvGetValue != null && agvPutValue != null && rfidValue != null)
var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress);//小包入口叫料
var agvGetValue = StaticData.PlcDic[2].Read(agvGetPoint.plcpointAddress);//小包出口的到位
var rfidValue = StaticData.PlcDic[2].ReadRFID(rfidPoint.plcpointAddress);//小包出口的RFID
if (agvGetValue != null && agvPutValue != null && rfidValue != null)//读Plc
{
if (Convert.ToInt32(agvPutValue) == 0)
if (Convert.ToInt32(agvPutValue) == 0)//小包入口叫料
{
bool canCreate = dbContext.WcsTask.Where(t => t.endPointId == 36 || t.nextPointId == 8 || t.endPointId == endEquip.objid).Any();
if (!canCreate)
bool canCreate = dbContext.WcsTask.Where(t => t.nextPointId == 8 || t.endPointId == endEquip.objid).Any();//有没有生成任务
//36 是小包入口的设备信息8是二楼Agv设备
if (!canCreate)//没有任务
{
BaseEquip? baseEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.emptyCount > 1);
if (baseEquip != null)
BaseEquip? baseEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.emptyCount >= 1);//二楼周转区是否存在一个空托盘以上的
if (baseEquip != null)//二楼周转区有可以去小包入口的库位
{
var wcsTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
endPointId = endEquip.objid,
endPointId = endEquip.objid,//小包入口
endPointNo = endEquip.equipNo,
nextPointId = agvEquip.objid,
nextPointId = agvEquip.objid,//二楼叉车
nextPointNo = agvEquip.equipNo,
currPointId = baseEquip.objid,
currPointId = baseEquip.objid,//周转区库位
currPointNo = baseEquip.equipNo,
taskStatus = 0,
useFlag = 1,
@ -79,8 +81,8 @@ namespace Khd.Core.Wcs.Wcs
floorNo = 2,
fromFloorNo = 2,
isEmpty = "1",
qty = baseEquip.emptyCount,
taskType = 59,
qty = baseEquip.emptyCount,//托盘的数量
taskType = 59,//任务类型
};
dbContext.Add(wcsTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
@ -89,14 +91,14 @@ namespace Khd.Core.Wcs.Wcs
Console.WriteLine(DateTime.Now + ":二楼码垛输送线生成请求空托盘任务成功:" + wcsTask.objid);
LogManager.Info("二楼码垛输送线生成请求空托盘任务成功:" + wcsTask.objid);
}
else
else//二楼周转区没有空托盘
{
baseEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 15 && t.emptyCount == SystemData.maxTray && t.equipStatus == 1);
if (baseEquip != null)
baseEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 15 && t.emptyCount == SystemData.maxTray && t.equipStatus == 1);//三楼三个周转区是否存在空托盘
if (baseEquip != null)//如果三楼有空托盘
{
BaseEquip ThirdLineEquip = StaticData.BaseEquip.First(t => t.objid == 3);
BaseEquip ThirdAgvEquip = StaticData.BaseEquip.First(t => t.objid == 9);
if (ThirdLineEquip.equipStatus == 0)
BaseEquip ThirdLineEquip = dbContext.BaseEquip.First(t => t.objid == 3);//三楼接驳位
BaseEquip ThirdAgvEquip = StaticData.BaseEquip.First(t => t.objid == 9);//三楼叉车
if (ThirdLineEquip.equipStatus == 0)//三楼接驳位空闲
{
//生成3楼Agv出库任务
WcsTask wcsTask = new WcsTask()
@ -129,18 +131,18 @@ namespace Khd.Core.Wcs.Wcs
}
else
{
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == 40);
if (startEquip.emptyCount > 1)
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == 40);//一楼的托盘库
if (startEquip.emptyCount > 1 && startEquip.emptyCount <= SystemData.maxTray)
{
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "someOut");
BasePlcpoint linesignal01 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal01");
BasePlcpoint equipstate06 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "equipstate06");
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 1);
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "someOut");//多个出
BasePlcpoint linesignal01 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal01");//一楼接驳位到位
BasePlcpoint equipstate06 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "equipstate06");//提升机状态
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 1);//一楼接驳位
var lineSignal01Value = StaticData.PlcDic[0].Read(linesignal01.plcpointAddress);
var equipstate06Value = StaticData.PlcDic[0].Read(equipstate06.plcpointAddress);
if (FirstFloor.ReadEmptyLocation() && Convert.ToInt32(lineSignal01Value) == 0 && Convert.ToInt32(equipstate06Value) == 0)
{
StaticData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());
StaticData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());//托盘库多个出
WcsTask wcsTaskManual = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
@ -169,88 +171,137 @@ namespace Khd.Core.Wcs.Wcs
LogManager.Info("二楼码垛输送线生成手动托盘任务成功:" + wcsTaskManual.objid);
}
}
else if (startEquip.emptyCount > SystemData.maxTray)//如果托盘库大于五个,出一个
{
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "oneOut");//多个出
BasePlcpoint linesignal01 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal01");//一楼接驳位到位
BasePlcpoint equipstate06 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "equipstate06");//提升机状态
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 1);//一楼接驳位
var lineSignal01Value = StaticData.PlcDic[0].Read(linesignal01.plcpointAddress);
var equipstate06Value = StaticData.PlcDic[0].Read(equipstate06.plcpointAddress);
if (FirstFloor.ReadEmptyLocation() && Convert.ToInt32(lineSignal01Value) == 0 && Convert.ToInt32(equipstate06Value) == 0)
{
StaticData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString());//托盘库多个出
WcsTask wcsTaskManual = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
endPointId = endEquip.objid,
endPointNo = endEquip.equipNo,
nextPointId = lineEquip.objid,
nextPointNo = lineEquip.equipNo,
currPointId = lineEquip.objid,
currPointNo = lineEquip.equipNo,
taskStatus = 0,
useFlag = 1,
containerNo = null,
createBy = "WCS",
createTime = DateTime.Now,
floorNo = endEquip.floorNo,
fromFloorNo = 1,
isEmpty = "1",
qty = 1,
taskType = 53,
};
dbContext.Add(wcsTaskManual);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTaskManual);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
Console.WriteLine(DateTime.Now + ":二楼码垛输送线生成手动托盘任务成功:" + wcsTaskManual.objid);
LogManager.Info("二楼码垛输送线生成手动托盘任务成功:" + wcsTaskManual.objid);
}
}
else
{
//todo:没有空托盘
Console.WriteLine(DateTime.Now + ":二楼码垛输送线没有空托盘");
LogManager.Info("二楼码垛输送线没有空托盘");
}
}
}
}
}
if (Convert.ToInt32(agvGetValue) == 1 && !string.IsNullOrEmpty(rfidValue))
if (Convert.ToInt32(agvGetValue) == 1 && !string.IsNullOrEmpty(rfidValue))//小包出口成品入口
{
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == rfidValue);
if (mesBasePalletInfo != null)
{
var wmsBaseLocations = dbContext.WmsBaseLocation
.Where(t => t.warehouseFloor == FloorNo)
.Where(t => t.activeFlag == "1")
.Where(t => t.delFlag == "0")
.Where(t => t.locationScrapType == "1")
.Where(t => t.locationStatus == "1")
.Where(t => t.instockFlag == "0")
.Where(t => t.outstockFlag == "0")
.Where(t => t.warehouseId == 231)
.ToList();
var wmsProductStocks = dbContext.WmsProductStock
.Where(t => t.warehouseId == 231)
.ToList();
WmsBaseLocation? wmsBaseLocation = null;
if (wmsBaseLocations.Count > 0)
MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode);
if (mesBaseBarcodeInfo != null)
{
List<string> containerCodes = wmsBaseLocations
.Where(t => t.locDeep == 1)
.Select(t => t.containerCode).ToList();//深库位的托盘
List<MesBasePalletInfo> mesBasePalletInfos = dbContext.MesBasePalletInfo
.Where(t => t.materialId == mesBasePalletInfo.materialId)
.Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料
//wmsBaseLocations.Where(t=>t.locDeep==2&&string.IsNullOrEmpty()).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 a.b.layerNum == b.layerNum
&& 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"
&& b.outstockFlag == "0"
&& b.instockFlag == "0"
&& string.IsNullOrEmpty(b.containerCode)
select new { a.b };//在上面的基础上获取对应托盘的外侧库位的空库位信息
wmsBaseLocation ??= outBill.FirstOrDefault()?.b;//先找相同物料的外侧库位
wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 2);//找不到再找深库位
wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位
if (wmsBaseLocation != null)
var wmsBaseLocations = dbContext.WmsBaseLocation
.Where(t => t.warehouseFloor == FloorNo)
.Where(t => t.activeFlag == "1")
.Where(t => t.delFlag == "0")
.Where(t => t.locationScrapType == "1")
.Where(t => t.locationStatus == "1")
.Where(t => t.warehouseId == 231)
.ToList();//所有可用库位
var wmsProductStocks = dbContext.WmsProductStock
.Where(t => t.warehouseId == 231)
.ToList();//仓库的库存
WmsBaseLocation? wmsBaseLocation = null;
if (wmsBaseLocations.Count > 0)
{
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 37);
var wcsTask = new WcsTask()
List<string> containerCodes = wmsBaseLocations
.Where(t => t.locDeep == 1)
.Select(t => t.containerCode).ToList();//深库位的有托盘
List<MesBaseBarcodeInfo> mesBasePalletInfos = dbContext.MesBaseBarcodeInfo
.Where(t => t.saleOrderId == mesBaseBarcodeInfo.saleOrderId)//销售订单
.Where(t => t.materialId == mesBasePalletInfo.materialId)//物料Id
.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 a.b.layerNum == b.layerNum//层数相同
&& 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.FirstOrDefault()?.b;//先找相同物料的外侧库位
wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 2);//找不到再找深库位
wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位
if (wmsBaseLocation != null)//如果找到库位,生成入库任务
{
objid = StaticData.SnowId.NextId(),
currPointId = startEquip.objid,
currPointNo = startEquip.equipNo,
nextPointId = agvEquip.objid,
nextPointNo = agvEquip.equipNo,
endPointId = wmsBaseLocation.locationId,
endPointNo = wmsBaseLocation.locationCode,
taskStatus = 0,
useFlag = 1,
containerNo = rfidValue,
createBy = "WCS",
createTime = DateTime.Now,
floorNo = 2,
fromFloorNo = 2,
isEmpty = "0",
taskType = 49,
qty = 1,
};
dbContext.Add(wcsTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
Console.WriteLine(DateTime.Now + ":二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid);
LogManager.Info("二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid);
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 37);
var wcsTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
currPointId = startEquip.objid,
currPointNo = startEquip.equipNo,
nextPointId = agvEquip.objid,
nextPointNo = agvEquip.equipNo,
endPointId = wmsBaseLocation.locationId,
endPointNo = wmsBaseLocation.locationCode,
taskStatus = 0,
useFlag = 1,
containerNo = rfidValue,
createBy = "WCS",
createTime = DateTime.Now,
floorNo = 2,
fromFloorNo = 2,
isEmpty = "0",
taskType = 49,
qty = 1,
};
dbContext.Add(wcsTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
Console.WriteLine(DateTime.Now + ":二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid);
LogManager.Info("二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid);
}
else
{
//报警
}
}
}
}

@ -236,11 +236,11 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
else if (wcsTask.taskStatus == 8)
else if (wcsTask.taskStatus == 8)//小车任务完成
{
if (wcsTask.taskType == 50 && wcsTask.containerNo == rfid)
if (wcsTask.taskType == 50 && wcsTask.containerNo == rfid)//50是成品出库
{
BaseEquip? endEquip = StaticData.BaseEquip.First(t => t.objid == 1);
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 1);
dbContext.WcsTask.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.serialNo = SystemData.GetSerialNo(dbContext);
@ -265,9 +265,9 @@ namespace Khd.Core.Wcs.Wcs
LogManager.Info("二楼接驳位生成任务出库成功,托盘号:" + rfid);
Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务出库成功,托盘号:" + rfid);
}
else
else//一般情况下是废料的任务
{
BaseEquip? endEquip = StaticData.BaseEquip.First(t => t.objid == 1);
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.endPointId);
dbContext.WcsTask.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.serialNo = SystemData.GetSerialNo(dbContext);

@ -85,7 +85,7 @@ namespace Khd.Core.Wcs.Wcs
}
catch
{
//报警
}
}
LogManager.Error(ex);

@ -4,6 +4,7 @@ using Khd.Core.EntityFramework;
using Khd.Core.Library.Mapper;
using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global;
using Masuit.Tools;
using Masuit.Tools.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
@ -54,10 +55,10 @@ namespace Khd.Core.Wcs.Wcs
try
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
//var getTrayValue = this._plc.Read(getTrayPoint.plcpointAddress);
//if (getTrayValue != null && Convert.ToInt32(getTrayValue) == 1)
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 31);
if (baseEquip.emptyCount == 1)
var getTrayValue = StaticData.PlcDic[2].Read(getTrayPoint.plcpointAddress);
if (getTrayValue != null && Convert.ToInt32(getTrayValue) == 1)
//BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 31);
//if (baseEquip.emptyCount == 1)
{
var task = dbContext.WcsTask.Where(t => t.taskType == 42 && t.useFlag == 0).FirstOrDefault();
if (task != null)
@ -66,7 +67,7 @@ namespace Khd.Core.Wcs.Wcs
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 31);
BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 9);
//if (endEquip.emptyCount != (SystemData.maxTray / 2) && endEquip.emptyCount != SystemData.maxTray)
if (endEquip.emptyCount != SystemData.maxTray)
if (endEquip.emptyCount < SystemData.maxTray)
{
task.taskType = 42;
task.useFlag = 1;
@ -136,34 +137,19 @@ namespace Khd.Core.Wcs.Wcs
{
WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
WmsBaseLocation toBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
WcsCmd wcsCmd = new()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = fromBaseLocation.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = toBaseLocation.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = wcsCmd.objid.ToString(),
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode=fromBaseLocation.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode=toBaseLocation.agvPositionCode,
type="00"
}
},
@ -175,15 +161,12 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("五楼Agv下发任务成功" + message);
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
LogManager.Info("三楼楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":三楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -195,21 +178,6 @@ namespace Khd.Core.Wcs.Wcs
{
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 3);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = startEquip.objid,
currPointNo = startEquip.agvPositionCode,
nextPointId = item.endPointId,
nextPointNo = wmsBaseLocation.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
@ -217,12 +185,12 @@ namespace Khd.Core.Wcs.Wcs
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode=startEquip.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode=wmsBaseLocation.agvPositionCode,
type="00"
}
},
@ -234,14 +202,12 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
LogManager.Info("三楼楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":三楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -258,34 +224,20 @@ namespace Khd.Core.Wcs.Wcs
wmsRawOutstockDetail.outstockTime = DateTime.Now;
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 31);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = wmsBaseLocation.agvPositionCode,
nextPointId = endEquip.objid,
nextPointNo = endEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
reqCode =StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode=wmsBaseLocation.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode=endEquip.agvPositionCode,
type="00"
}
},
@ -297,15 +249,13 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
LogManager.Info("三楼楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":三楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(wmsRawOutstockDetail);
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -318,34 +268,19 @@ namespace Khd.Core.Wcs.Wcs
{
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == item.endPointId);
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = startEquip.objid,
currPointNo = startEquip.agvPositionCode,
nextPointId = endEquip.objid,
nextPointNo = endEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
reqCode = StaticData.SnowId.NextId().ToString().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode= startEquip.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode=endEquip.agvPositionCode,
type="00"
}
},
@ -358,14 +293,12 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
LogManager.Info("三楼楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":三楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -375,37 +308,21 @@ namespace Khd.Core.Wcs.Wcs
}
else if (item.taskType == 42)//翻转机-收集架
{
//var startEquip = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == item.endPointId);
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = startEquip.agvPositionCode,
nextPointId = endEquip.objid,
nextPointNo = endEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
reqCode = StaticData.SnowId.NextId().ToString().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode=startEquip.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode=endEquip.agvPositionCode,
type="00"
}
},
@ -418,14 +335,12 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
LogManager.Info("三楼楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":三楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -437,34 +352,20 @@ namespace Khd.Core.Wcs.Wcs
{
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == item.endPointId);
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = item.currPointId,
currPointNo = startEquip.agvPositionCode,
nextPointId = endEquip.objid,
nextPointNo = endEquip.agvPositionCode,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
reqCode = StaticData.SnowId.NextId().ToString().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=wcsCmd.currPointNo,
positionCode=startEquip.agvPositionCode,
type="00"
},
new ()
{
positionCode=wcsCmd.nextPointNo,
positionCode=endEquip.agvPositionCode,
type="00"
}
},
@ -477,14 +378,12 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
LogManager.Info("三楼楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":三楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -498,98 +397,20 @@ namespace Khd.Core.Wcs.Wcs
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 3);
if (lineEquip.equipStatus == 0)
{
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = startEquip.objid,
currPointNo = startEquip.agvPositionCode,
nextPointId = lineEquip.objid,
nextPointNo = lineEquip.equipNo,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new()
{
positionCode = wcsCmd.currPointNo,
type = "00"
},
new()
{
positionCode = wcsCmd.nextPointNo,
type = "00"
}
},
taskTyp = baseDictionary.dicValue,
ctnrTyp = "2",
ctnrNum = startEquip.emptyCount.ToString()
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
item.taskStatus = 1;
lineEquip.equipStatus = 1;
dbContext.Update(lineEquip);
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
{
LogManager.Info("三楼Agv下发任务失败" + item.taskType + message);
}
}
}
else if (item.taskType == 101)
{
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 3);
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
if (lineEquip.equipStatus == 0)
{
WcsCmd wcsCmd = new WcsCmd()
{
objid = StaticData.SnowId.NextId(),
cmdStatus = 0,
taskId = item.objid,
useFlag = 1,
cmdType = item.taskType,
containerNo = item.containerNo,
createTime = DateTime.Now,
createBy = FloorNo + "楼AGV",
currPointId = startEquip.objid,
currPointNo = startEquip.agvPositionCode,
nextPointId = lineEquip.objid,
nextPointNo = lineEquip.equipNo,
};
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
reqCode = StaticData.SnowId.NextId().ToString().ToString(),
positionCodePath = new List<Position>
{
new()
{
positionCode = wcsCmd.currPointNo,
positionCode =startEquip.agvPositionCode,
type = "00"
},
new()
{
positionCode = wcsCmd.nextPointNo,
positionCode = lineEquip.equipNo,
type = "00"
}
},
@ -602,16 +423,61 @@ namespace Khd.Core.Wcs.Wcs
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.taskCode = reponseMessage.data;
wcsCmd.cmdStatus = 1;
LogManager.Info("三楼楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":三楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
lineEquip.equipStatus = 1;
dbContext.Update(lineEquip);
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
dbContext.SaveChanges();
}
else
{
LogManager.Info("三楼Agv下发任务失败" + item.taskType + message);
}
}
}
else if (item.taskType == 101)//三楼空托盘转运到二楼
{
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 3);
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
if (lineEquip.equipStatus == 0)
{
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString().ToString(),
positionCodePath = new List<Position>
{
new()
{
positionCode = startEquip.agvPositionCode,
type = "00"
},
new()
{
positionCode = lineEquip.equipNo,
type = "00"
}
},
taskTyp = baseDictionary.dicValue,
ctnrTyp = "2",
ctnrNum = startEquip.emptyCount.ToString()
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message);
var reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
LogManager.Info("三楼楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message);
Console.WriteLine(DateTime.Now + ":三楼AGV线程下发任务" + item.currPointNo + "," + item.endPointNo);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
lineEquip.equipStatus = 1;
dbContext.Update(lineEquip);
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 });
WcsCmdLog wcsCmdLog = CoreMapper.Map<WcsCmdLog>(wcsCmd);
dbContext.Add(wcsCmdLog);
dbContext.Add(wcsCmd);
dbContext.SaveChanges();
}
else
@ -623,8 +489,7 @@ namespace Khd.Core.Wcs.Wcs
}
else
{
WcsCmd? wcsCmd = dbContext.WcsCmd.FirstOrDefault(t => t.taskId == item.objid);
if (wcsCmd != null)
{
if (item.taskStatus == 3)
{
@ -656,32 +521,27 @@ namespace Khd.Core.Wcs.Wcs
}
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
taskCode = wcsCmd.taskCode
reqCode = StaticData.SnowId.NextId().ToString().ToString(),
taskCode = item.taskCode
};
string message = JsonConvert.SerializeObject(agvTask);
string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/continueTask", message);
ReponseMessage? reponseMessage = JsonConvert.DeserializeObject<ReponseMessage>(result);
if (reponseMessage != null && reponseMessage.message == "成功")
{
wcsCmd.cmdStatus = 4;
dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 });
dbContext.Update(wcsCmd);
dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 });
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 4 });
dbContext.SaveChanges();
}
}
else if (item.taskStatus == 5)
else if (item.taskStatus == 5)//任务完成
{
if (item.currPointId == 3)
if (item.currPointId == 3)//从接驳位出发
{
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 3);
lineEquip.equipStatus = 0;
dbContext.Update(lineEquip);
}
if (item.taskType == 67)
if (item.taskType == 67)//移库
{
using var transaction = dbContext.Database.BeginTransaction();
try
@ -692,35 +552,22 @@ namespace Khd.Core.Wcs.Wcs
wmsRawStock.locationCode = item.endPointNo;
dbContext.Update(wmsRawStock);
}
else
{
var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == item.currPointNo);
if (wmsProductStock != null)
{
wmsProductStock.locationCode = item.currPointNo;
dbContext.Update(wmsProductStock);
}
}
dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).Update(t => new WmsBaseLocation
{
outstockFlag = "0",
locationStatus = "1",
containerCode = null,
updateTime = DateTime.Now
});
dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).Update(t => new WmsBaseLocation
{
instockFlag = "0",
locationStatus = "1",
containerCode = item.containerNo,
updateTime = DateTime.Now
});
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 });
transaction.Commit();
dbContext.SaveChanges();
transaction.Commit();
}
catch (Exception ex)
{
@ -728,12 +575,11 @@ namespace Khd.Core.Wcs.Wcs
LogManager.Error(ex);
}
}
if (item.taskType == 39)
if (item.taskType == 39)//入库
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
.First(t => t.locationId == item.endPointId && t.warehouseFloor == 3);
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.instockFlag = "0";
wmsBaseLocation.containerCode = item.containerNo;
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS";
@ -747,7 +593,7 @@ namespace Khd.Core.Wcs.Wcs
{
rawStockId = StaticData.SnowId.NextId(),
activeFlag = "1",
saleOrderId = mesBaseBarcodeInfo.saleOrderId == null ? 0 : mesBaseBarcodeInfo.saleOrderId,
saleOrderId = mesBaseBarcodeInfo.saleOrderId==null?0:mesBaseBarcodeInfo.saleOrderId,
stockType = "1",
supplierId = mesBaseBarcodeInfo.manufacturerId,
qualityStatus = "1",
@ -768,15 +614,13 @@ namespace Khd.Core.Wcs.Wcs
};
dbContext.Add(wmsRawStock);
dbContext.Update(wmsBaseLocation);
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.SaveChanges();
}
}
}
else if (item.taskType == 40)
else if (item.taskType == 40)//周转区-收集架,暂不使用
{
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == item.endPointId);
@ -790,17 +634,14 @@ namespace Khd.Core.Wcs.Wcs
endEquip.updateBy = "WCS";
dbContext.Update(startEquip);
dbContext.Update(endEquip);
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.SaveChanges();
}
else if (item.taskType == 41)
else if (item.taskType == 41)//原材料出库
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
.First(t => t.locationId == item.currPointId);
wmsBaseLocation.outstockFlag = "0";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = null;
wmsBaseLocation.updateTime = DateTime.Now;
@ -819,7 +660,7 @@ namespace Khd.Core.Wcs.Wcs
{
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == 31);
endEquip.emptyCount = 1;
if (wmsRawOutstock.realOutstockAmount == wmsRawOutstock.outstockAmount)
if (wmsRawOutstock.realOutstockAmount >= wmsRawOutstock.outstockAmount)
{
wmsRawOutstock.endTime = DateTime.Now;
wmsRawOutstock.executeStatus = "2";
@ -828,7 +669,6 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(wmsRawOutstock);
dbContext.Remove(wmsRawStock);
dbContext.Update(wmsBaseLocation);
dbContext.Remove(wcsCmd);
WcsTask wcsTask = CoreMapper.Map<WcsTask>(item);
wcsTask.objid = StaticData.SnowId.NextId();
wcsTask.taskStatus = 0;
@ -839,21 +679,17 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Remove(item);
dbContext.Add(wcsTask);
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.SaveChanges();
}
}
}
}
else if (item.taskType == 42)
else if (item.taskType == 42)//翻转机就到收集架
{
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo);
if (mesBasePalletInfo != null)
{
mesBasePalletInfo.bindAmount = null;
mesBasePalletInfo.createBy = null;
mesBasePalletInfo.bindAmount = null;
mesBasePalletInfo.createTime = null;
mesBasePalletInfo.materialBarcode = null;
mesBasePalletInfo.materialCode = null;
mesBasePalletInfo.materialId = null;
@ -870,33 +706,29 @@ namespace Khd.Core.Wcs.Wcs
emptyEquip.updateTime = DateTime.Now;
emptyEquip.updateBy = "WCS";
dbContext.Update(emptyEquip);
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.SaveChanges();
}
}
else if (item.taskType == 43)
else if (item.taskType == 43)//收集架-周转区
{
BaseEquip emptyEquip = dbContext.BaseEquip.First(t => t.objid == 35);
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == item.endPointId);
emptyEquip.emptyCount = 0;
emptyEquip.updateTime = DateTime.Now;
emptyEquip.updateBy = "WCS";
endEquip.emptyCount += item.qty;
endEquip.emptyCount = item.qty;
endEquip.equipStatus = 1;
endEquip.updateTime = DateTime.Now;
endEquip.updateBy = "WCS";
dbContext.Update(endEquip);
dbContext.Update(emptyEquip);
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.SaveChanges();
}
else if (item.taskType == 44 || item.taskType == 101)
else if (item.taskType == 44 || item.taskType == 101)//周转区-提升机
{
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 3);
@ -912,9 +744,7 @@ namespace Khd.Core.Wcs.Wcs
item.floorNo = endEquip.floorNo;
item.taskStatus = 6;
dbContext.Update(item);
dbContext.Remove(wcsCmd);
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.SaveChanges();
}
}
@ -940,7 +770,7 @@ namespace Khd.Core.Wcs.Wcs
}
catch
{
}
}
LogManager.Error(ex);

@ -67,8 +67,6 @@ namespace Khd.Core.Wcs.Wcs
.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.locationStatus == "1")
.OrderByDescending(t => t.locRow)
.ThenByDescending(t => t.locColumn)
@ -92,12 +90,9 @@ namespace Khd.Core.Wcs.Wcs
&& b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1)
&& a.b.locColumn == b.locColumn
&& b.locationStatus == "1"
&& b.outstockFlag == "0"
&& b.instockFlag == "0"
&& string.IsNullOrEmpty(b.containerCode)
select new { b };//在上面的基础上获取对应托盘的外侧库位的空库位信息
WmsBaseLocation? wmsBaseLocation = null;
wmsBaseLocation ??= outBill.FirstOrDefault()?.b;//先找相同物料的外侧库位
WmsBaseLocation? 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();//找不到再找任意库位
@ -116,7 +111,6 @@ namespace Khd.Core.Wcs.Wcs
newTask.endPointNo = wmsBaseLocation.locationCode;
newTask.taskType = 39;
newTask.useFlag = 1;
wmsBaseLocation.instockFlag = "1";
wmsBaseLocation.locationStatus = "2";
dbContext.Update(wmsBaseLocation);
dbContext.Add(newTask);

@ -1916,8 +1916,6 @@ namespace Khd.Core.Wpf.Form
var wmsBaseLocations = dbContext.WmsBaseLocation
.Where(t => t.ContainerStatus == "1")
.Where(t => t.locationStatus == "1")
.Where(t => t.instockFlag == "0")
.Where(t => t.outstockFlag == "0")
.Where(t => t.activeFlag == "1")
.OrderBy(t => t.locRow)
.ThenBy(t => t.locColumn)
@ -1942,7 +1940,6 @@ namespace Khd.Core.Wpf.Form
foreach (var item in outLocation)
{
WmsBaseLocation startBaseLocation = item.a;
startBaseLocation.outstockFlag = "1";
startBaseLocation.locationStatus = "6";
startBaseLocation.ContainerStatus = "2";
addList.Add(new WcsTaskManual()
@ -1972,7 +1969,6 @@ namespace Khd.Core.Wpf.Form
WmsBaseLocation? startBaseLocation = wmsBaseLocations.Where(t => !list.Contains(t.locationId)).FirstOrDefault();
if (startBaseLocation != null)
{
startBaseLocation.outstockFlag = "1";
startBaseLocation.locationStatus = "6";
startBaseLocation.ContainerStatus = "2";
addList.Add(new WcsTaskManual()
@ -2078,8 +2074,6 @@ namespace Khd.Core.Wpf.Form
//}
var wmsBaseLocation = dbContext.WmsBaseLocation
.Where(t => t.locationStatus == "1")
.Where(t => t.instockFlag == "0")
.Where(t => t.outstockFlag == "0")
.Where(t => t.warehouseId == 512 && t.ContainerStatus == "1").ToList();
var wmsRawStock = dbContext.WmsRawStock.Where(t => t.warehouseId == 512).ToList();
List<string> palletInfoCodes = wmsRawStock.Select(t => t.palletInfoCode).ToList();
@ -2090,7 +2084,6 @@ namespace Khd.Core.Wpf.Form
for (int i = 0; i < EmptyCountForm.EmptyTaskCount; i++)
{
WmsBaseLocation startBaseLocation = wmsBaseLocation[i];
startBaseLocation.outstockFlag = "1";
startBaseLocation.locationStatus = "6";
startBaseLocation.ContainerStatus = "2";
addList.Add(new WcsTaskManual()
@ -2192,7 +2185,6 @@ namespace Khd.Core.Wpf.Form
fromFloorNo = 5,
useFlag = 1
});
item.outstockFlag = "1";
item.ContainerStatus = "2";
item.locationStatus = "6";
dbContext.Update(item);
@ -2902,7 +2894,7 @@ namespace Khd.Core.Wpf.Form
private void SelectOutBtn_Click(object sender, RoutedEventArgs e)
{
SelectOutRawForm selectOutRawForm = new SelectOutRawForm(this._host);
SelectOutRawForm selectOutRawForm=new SelectOutRawForm(this._host);
selectOutRawForm.ShowDialog();
}
}

Loading…
Cancel
Save