1 year ago
parent 6687d850b2
commit aef238a133

@ -63,6 +63,8 @@ namespace Khd.Core.Domain.Dto.agv
public string Speed { get; set; }
[Column("status")]
public string Status { get; set; }
[Column("agvName")]
public string AgvName { get; set; }
[Column("stop")]
public string Stop { get; set; }
[Column("timestamp")]

@ -133,7 +133,14 @@
/// 人工任务
/// </summary>
public const int PersonTask = 99;
/// <summary>
/// 五楼原材料退库
/// </summary>
public const int FiveStockReturnTask = 90;
/// <summary>
/// 三楼原材料退库
/// </summary>
public const int ThirdStockReturnTask = 91;
/// <summary>
/// 获取任务名称
/// </summary>
@ -172,7 +179,9 @@
FiveAccessoryStorage => "五楼辅料盘库",
ThirdTransitToSecond => "三楼接驳位转运空托盘到二楼",
FiveAccessoryRemove => "五楼辅料移库",
PersonTask=>"人工任务",
PersonTask => "人工任务",
FiveStockReturnTask => "五楼原材料退库",
ThirdStockReturnTask => "三楼原材料退库",
_ => "未知任务类型",
};
}

@ -147,6 +147,11 @@ namespace Khd.Core.Domain.Models
/// </summary>
[Column("update_by")]
public string updateBy { get; set; }
/// <summary>
/// 最后更新人
/// </summary>
[Column("tips")]
public string Tips { get; set; }
/// <summary>
/// 最后更新时间

@ -72,6 +72,7 @@ namespace Khd.Core.Wcs
}
}
wmsBaseLocation.locationStatus = "1";
}
/// <summary>

@ -41,13 +41,19 @@ namespace Khd.Core.Wcs.Wcs
//createRemoveThread.Name = "CreateRemoveLogic";
//createRemoveThread.Start();
var stockReturnThread = new Thread(StockReturnLogic);
stockReturnThread.IsBackground = true;
stockReturnThread.Name = "StockReturnLogic";
stockReturnThread.Start();
// PDA移库
var moveThread = new Thread(MoveThreadLogic);
moveThread.IsBackground = true;
moveThread.Name = "MoveThreadLogic";
moveThread.Start();
// 叫空托盘 3-2楼
var createEmtpyThread = new Thread(CreateEmptyLoic);
var createEmtpyThread = new Thread(CreateEmptyLogic);
createEmtpyThread.IsBackground = true;
createEmtpyThread.Name = "CreateEmptyLoic";
createEmtpyThread.Start();
@ -105,6 +111,230 @@ namespace Khd.Core.Wcs.Wcs
_logger.Info("出库任务监听启动成功");
}
/// <summary>
/// 退库
/// </summary>
/// <param name="obj"></param>
private void StockReturnLogic(object? obj)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
BaseEquip thirdAgv = StaticData.BaseEquip.First(t => t.objid == 9);
BaseEquip fiveAgv = StaticData.BaseEquip.First(t => t.objid == 28);
BaseEquip firstLine = StaticData.BaseEquip.First(t => t.objid == 1);
BaseEquip thirdLine = StaticData.BaseEquip.First(t => t.objid == 3);
BaseEquip fiveLine = StaticData.BaseEquip.First(t => t.objid == 5);
while (true)
{
try
{
dbContext.ChangeTracker.Clear();
var rawOutStock = dbContext.WmsRawOutstock
.Where(t => t.executeStatus == "0")
.Where(t => t.outstockAmount > t.realOutstockAmount)
.Where(t => t.taskType == "5")
.Where(t => t.auditStatus == "1")
.ToList();
foreach (var item in rawOutStock)
{
int taskType = 0;
int removeType = 0;
BaseEquip? agvEquip = null;
BaseEquip? EndEquip = null;
if (item.warehouseId == 311)
{
agvEquip = thirdAgv;
removeType = StaticTaskType.ThirdRemove;
taskType = StaticTaskType.ThirdStockReturnTask;
EndEquip = thirdLine;
}
else if (item.warehouseId == 511)
{
agvEquip = fiveAgv;
removeType = StaticTaskType.FiveRemove;
taskType = StaticTaskType.FiveStockReturnTask;
EndEquip = fiveLine;
}
if (agvEquip != null && EndEquip != null)
{
bool hasTask = dbContext.WcsTask.Where(t => t.nextPointId == agvEquip.objid).Where(t => t.useFlag == 1).Any();
if (hasTask)
{
continue;
}
var wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationCode == item.locationCode).FirstOrDefault();
if (wmsBaseLocation != null)
{
if (!string.IsNullOrEmpty(wmsBaseLocation.containerCode) && wmsBaseLocation.locationStatus == "1")
{
// 目标库位处于深库位,判断是否需要移库浅库位
if (wmsBaseLocation.locDeep == 1)
{
int? row = 0;
if (wmsBaseLocation.locRow % 2 == 1)
{
row = wmsBaseLocation.locRow + 1;
}
else
{
row = wmsBaseLocation.locRow - 1;
}
var fromBaseLocation = SystemData.GetLowerLocation(wmsBaseLocation, dbContext);//浅库位
if (fromBaseLocation != null && fromBaseLocation.locationStatus == "1")
{
if (!string.IsNullOrEmpty(fromBaseLocation.containerCode))//有库存
{
#region 找寻移库目标库位
// 寻找移库目的库位
WmsBaseLocation? toLocation = null;
var AllWmsBaseLocations = dbContext.WmsBaseLocation
.Where(t => t.activeFlag == "1")
.Where(t => t.delFlag == "0")
.Where(t => t.locationScrapType == "1")
.Where(t => t.warehouseId == fromBaseLocation.warehouseId)
.Where(t => t.locationStatus == "1").ToList();
var moveLocationList = AllWmsBaseLocations.Where(t => t.warehouseId == fromBaseLocation.warehouseId)
.Where(t => t.warehouseId != fromBaseLocation.locationId)
.Where(t => string.IsNullOrEmpty(t.containerCode)).OrderBy(t => t.locDeep).ToList();
foreach (WmsBaseLocation itemLocation in moveLocationList)
{
if (itemLocation.locDeep == 1)
{
bool hasLocation = AllWmsBaseLocations
.Where(t => t.locRow == (itemLocation.locRow % 2 == 1 ? (itemLocation.locRow + 1) : (itemLocation.locRow - 1)))
.Where(t => t.locColumn == itemLocation.locColumn)
.Where(t => t.locationStatus == "1" && string.IsNullOrEmpty(t.containerCode))
.Any();
if (!hasLocation)
{
Console.WriteLine(DateTime.Now + $":目标库位的浅库位库位状态异常,无法移库");
_logger.Info($"目标库位的浅库位库位状态异常,无法移库");
continue;
}
else
{
// 找到可以移库的目标库位
toLocation = itemLocation;
break;
}
}
else
{
// 找到可以移库的目标库位
toLocation = itemLocation;
break;
}
}
if (toLocation == null)
{
// 找寻下一个可出库库存
continue;
}
var RemoveTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
taskType = removeType,
containerNo = fromBaseLocation.containerCode,
createBy = "WCS",
createTime = DateTime.Now.AddSeconds(-10),
taskStatus = 0,
currPointId = fromBaseLocation.locationId,
currPointNo = fromBaseLocation.locationCode,
nextPointId = agvEquip.objid,
nextPointNo = agvEquip.equipNo,
endPointId = toLocation.locationId,
endPointNo = toLocation.locationCode,
equipmentNo = agvEquip.equipNo,
useFlag = 1,
qty = 1
};
SystemData.LockOutLocation(toLocation, dbContext);
SystemData.LockOutLocation(fromBaseLocation, dbContext);
toLocation.locationStatus = "4";
toLocation.updateBy = "WCS";
toLocation.updateTime = DateTime.Now;
fromBaseLocation.updateBy = "WCS";
fromBaseLocation.updateTime = DateTime.Now;
fromBaseLocation.locationStatus = "4";
dbContext.Update(toLocation);
dbContext.Update(fromBaseLocation);
dbContext.Add(RemoveTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(RemoveTask);
dbContext.Add(wcsTaskLog);
#endregion
}
else//没库存,不需要移库任务
{
}
}
else//库位异常
{
continue;
}
}
}
else//没有库存
{
continue;
}
var task = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
orderId = item.rawOutstockId,
taskType = taskType,
containerNo = wmsBaseLocation.containerCode,
createBy = "WCS",
createTime = DateTime.Now.AddSeconds(-10),
taskStatus = 0,
currPointId = wmsBaseLocation.locationId,
currPointNo = wmsBaseLocation.locationCode,
nextPointId = agvEquip.objid,
nextPointNo = agvEquip.equipNo,
endPointId = EndEquip.objid,
endPointNo = EndEquip.equipNo,
equipmentNo = agvEquip.equipNo,
useFlag = 1,
fromFloorNo = agvEquip.floorNo,
floorNo = 1,
qty = 1
};
SystemData.LockOutLocation(wmsBaseLocation, dbContext);
wmsBaseLocation.locationStatus = "6";
dbContext.Update(wmsBaseLocation);
dbContext.Add(task);
WcsTaskLog taskLog = CoreMapper.Map<WcsTaskLog>(task);
dbContext.Add(taskLog);
//创建出库任务
item.executeStatus = "1";
item.beginTime = DateTime.Now;
dbContext.Update(item);
dbContext.SaveChanges();
}
}
else
{
}
}
}
catch
{
}
Thread.Sleep(3000);
}
}
/// <summary>
/// PDA移库
/// </summary>
/// <param name="obj"></param>
private void MoveThreadLogic(object? obj)
{
using var scope = _host.Services.CreateScope();
@ -211,7 +441,11 @@ namespace Khd.Core.Wcs.Wcs
}
}
private void CreateEmptyLoic(object? obj)
/// <summary>
/// 3楼到2楼托盘转运
/// </summary>
/// <param name="obj"></param>
private void CreateEmptyLogic(object? obj)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
@ -238,7 +472,7 @@ namespace Khd.Core.Wcs.Wcs
{
create = true;
}
if (emptyC <= 1 && emptyCount >= 1 && thirdBTray >= 1)
if (emptyC <= 1 && emptyCount >= 2 && thirdBTray >= 1)
{
create = true;
}
@ -743,7 +977,6 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
bool isCreate = false;
dbContext.ChangeTracker.Clear();
bool canCreate = dbContext.WcsTask.Where(t => t.nextPointId == 9)
.Where(t => t.useFlag == 1)
@ -857,80 +1090,6 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Add(wcsTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
isCreate = true;
}
}
if (!isCreate)
{
var emptyEquip = dbContext.BaseEquip.Where(t => t.equipType == 15).Where(t => t.emptyCount == SystemData.maxTray).ToList();
var secondEmptyEquip = dbContext.BaseEquip.Where(t => t.equipType == 20).Where(t => t.emptyCount == 0).ToList();
if (emptyEquip.Count >= 2 && secondEmptyEquip.Count >= 4)//二楼空库位多余4个三楼空库位大于4个
{
BaseEquip startEquip = emptyEquip.First();
WcsTask wcsTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
serialNo = SystemData.GetSerialNo(dbContext),
taskType = StaticTaskType.ThirdTransitToSecond,
nextPointId = agvEquip.objid,
nextPointNo = agvEquip.equipNo,
currPointId = startEquip.objid,
currPointNo = startEquip.equipNo,
endPointId = secondEmptyEquip.First().objid,
endPointNo = secondEmptyEquip.First().equipNo,
equipmentNo = agvEquip.equipNo,
useFlag = 1,
qty = startEquip.emptyCount,
isEmpty = "1",
taskStatus = 0,
createBy = "WCS",
createTime = DateTime.Now,
floorNo = 2,
fromFloorNo = 3,
masterId = 0,
orderId = 0,
materialId = 0,
};
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
}
else if (emptyEquip.Count == 3 && secondEmptyEquip.Count >= 2)
{
BaseEquip startEquip = emptyEquip.First();
WcsTask wcsTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
serialNo = SystemData.GetSerialNo(dbContext),
taskType = StaticTaskType.ThirdTransitToSecond,
nextPointId = agvEquip.objid,
nextPointNo = agvEquip.equipNo,
currPointId = startEquip.objid,
currPointNo = startEquip.equipNo,
endPointId = secondEmptyEquip.First().objid,
endPointNo = secondEmptyEquip.First().equipNo,
equipmentNo = agvEquip.equipNo,
useFlag = 1,
qty = startEquip.emptyCount,
isEmpty = "1",
taskStatus = 0,
createBy = "WCS",
createTime = DateTime.Now,
floorNo = 2,
fromFloorNo = 3,
masterId = 0,
orderId = 0,
materialId = 0,
};
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
}
else
{
//报警
}
}
}
@ -1233,8 +1392,8 @@ namespace Khd.Core.Wcs.Wcs
{
//目标出库库位对应的浅库位
WmsBaseLocation? fromBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == row)
.Where(t => t.locColumn == wmsBaseLocation.locColumn)
.Where(t => t.warehouseId == wmsBaseLocation.warehouseId).FirstOrDefault();
.Where(t => t.locColumn == wmsBaseLocation.locColumn)
.Where(t => t.warehouseId == wmsBaseLocation.warehouseId).FirstOrDefault();
if (fromBaseLocation != null && !string.IsNullOrEmpty(fromBaseLocation.containerCode) && fromBaseLocation.locationStatus == "1")
{
// 浅库位有库存
@ -1261,8 +1420,8 @@ namespace Khd.Core.Wcs.Wcs
.Any();
if (!hasLocation)
{
Console.WriteLine(DateTime.Now + $":目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库");
_logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库");
Console.WriteLine(DateTime.Now + $":目标库位的浅库位库位状态异常,无法移库");
_logger.Info($"目标库位的浅库位库位状态异常,无法移库");
continue;
}
else
@ -1536,7 +1695,7 @@ namespace Khd.Core.Wcs.Wcs
BaseEquip endEquip = dbContext.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1);
var wmsproStocks = proStock
.Where(t => t.productId == item.productId && t.warehouseId == item.warehouseId)
.Where(t => t.productId == item.productId && t.saleOrderId == (item.saleOrderId == null ? 0 : item.saleOrderId) && t.warehouseId == item.warehouseId)
.Where(t => t.totalAmount > t.frozenAmount)
.Select(t => t.locationCode)
.ToList();
@ -1715,8 +1874,8 @@ namespace Khd.Core.Wcs.Wcs
// .Any();
// if (!hasLocation)
// {
// Console.WriteLine(DateTime.Now + $":目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库");
// _logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库");
// Console.WriteLine(DateTime.Now + $":目标库位的浅库位库位状态异常,无法移库");
// _logger.Info($"目标库位的浅库位库位状态异常,无法移库");
// continue;
// }
// }
@ -1995,8 +2154,8 @@ namespace Khd.Core.Wcs.Wcs
.Any();
if (!hasLocation)
{
Console.WriteLine(DateTime.Now + $":目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库");
_logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库");
Console.WriteLine(DateTime.Now + $":目标库位的浅库位库位状态异常,无法移库");
_logger.Info($"目标库位的浅库位库位状态异常,无法移库");
continue;
}
else
@ -2141,6 +2300,7 @@ namespace Khd.Core.Wcs.Wcs
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
List<string> taskType = new List<string>() { "1", "2", "3" };
while (true)
{
try
@ -2151,6 +2311,7 @@ namespace Khd.Core.Wcs.Wcs
var rawOutStock = dbContext.WmsRawOutstock
.Where(t => t.executeStatus == "0" || t.executeStatus == "1")
.Where(t => t.outstockAmount > t.realOutstockAmount)
.Where(t => taskType.Contains(t.taskType))
.Where(t => t.auditStatus == "1")
.ToList();
List<WcsTaskManual> wcsTaskManuals = dbContext.WcsTaskManual.Where(t => t.nextPointId == 11).OrderBy(t => t.createBy).ToList();
@ -2721,8 +2882,8 @@ namespace Khd.Core.Wcs.Wcs
.Any();
if (!hasLocation)
{
Console.WriteLine(DateTime.Now + $":目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库");
_logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库");
Console.WriteLine(DateTime.Now + $":目标库位的浅库位库位状态异常,无法移库");
_logger.Info($"目标库位的浅库位库位状态异常,无法移库");
continue;
}
else
@ -2944,8 +3105,8 @@ namespace Khd.Core.Wcs.Wcs
.Any();
if (!hasLocation)
{
Console.WriteLine(DateTime.Now + $":目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库");
_logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库");
Console.WriteLine(DateTime.Now + $":目标库位的浅库位库位状态异常,无法移库");
_logger.Info($"目标库位的浅库位库位状态异常,无法移库");
continue;
}
else
@ -3102,7 +3263,6 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
}

@ -157,22 +157,21 @@ namespace Khd.Core.Wcs.Wcs
else
{
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == i);
bool hasCmd = dbContext.WcsCmd.Where(t => t.nextPointId == i || t.currPointId == i).Any();//小车任务
bool hasTask = dbContext.WcsTask.Where(t => (t.currPointId == i || t.endPointId == i) && t.taskStatus >= 1 && t.nextPointId == 6).Any();//提升机任务,有没有正在执行的往这个接驳位送的
if (!hasCmd || !hasTask)
//bool hasCmd = dbContext.WcsCmd.Where(t => t.nextPointId == i || t.currPointId == i).Any();//小车任务
bool hasTask = dbContext.WcsTask.Where(t => (t.endPointId == i) && t.taskStatus >= 1 && t.nextPointId == 6).Any();//提升机任务,有没有正在执行的往这个接驳位送的
bool hascmd = dbContext.WcsTask.Where(t => (t.endPointId == i) && t.taskStatus >= 1 && t.nextPointId != 6).Any();//提升机任务,有没有正在执行的往这个接驳位送的
if (hascmd || hasTask)
{
baseEquip.containerNo = null;
baseEquip.equipStatus = 0;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
baseEquip.equipStatus = 1;
}
else//接驳位改为忙碌状态
{
baseEquip.containerNo = null;
baseEquip.equipStatus = 1;
dbContext.Update(baseEquip);
dbContext.SaveChanges();
baseEquip.equipStatus = 0;
}
dbContext.Update(baseEquip);
dbContext.SaveChanges();
}
}
}
@ -553,8 +552,34 @@ namespace Khd.Core.Wcs.Wcs
}
}
_logger.Info($"当前任务?{wcsTask.ToJsonString()}");
bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == wcsTask.endPointId && t.objid != wcsTask.objid && t.nextPointId != 6).Any();
if (!hasTask)
bool CanExecute = false;
long agvEquip = 0;
List<int> taskType = new();
if (wcsTask.floorNo == 3)
{
agvEquip = 9;
taskType.Add(StaticTaskType.ThirdTransitToLift);
}
else if (wcsTask.floorNo == 5)
{
agvEquip = 28;
taskType.Add(StaticTaskType.FiveProductOut);
}
else if (wcsTask.floorNo == 2)
{
agvEquip = 8;
taskType.Add(StaticTaskType.SecondStorageToLift);
taskType.Add(StaticTaskType.SecondTransitToLift);
}
else
{
CanExecute = true;
}
if (!CanExecute)
{
CanExecute = !dbContext.WcsTask.Where(t => taskType.Contains(t.taskType.Value) && t.nextPointId == agvEquip).Any();
}
if (CanExecute)
{
wcsTask.serialNo ??= SystemData.GetSerialNo(dbContext);
if (wcsTasks.Where(t => t.taskStatus > 0).Where(t => t.objid != wcsTask.objid).Any())
@ -576,7 +601,7 @@ namespace Khd.Core.Wcs.Wcs
BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo);
string? rfid = StaticData.PlcDic[0].ReadRFID(floorPoint.plcpointAddress);
_logger.Info($"{wcsTask.fromFloorNo}楼RFID?{rfid}任务RFID{wcsTask.containerNo}");
if (wcsTask.containerNo == rfid || (string.IsNullOrEmpty(wcsTask.containerNo) && wcsTask.qty > 1))
if (wcsTask.containerNo == rfid || (string.IsNullOrEmpty(wcsTask.containerNo) && wcsTask.qty > 1 || wcsTask.taskType == 99))
{
if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//当前楼层和起始楼层一致
{

@ -130,6 +130,65 @@ namespace Khd.Core.Wcs.Wcs
}
}
else if (item.taskType == StaticTaskType.FiveStockReturnTask)//出库任务
{
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 5);
if (lineEquip.equipStatus == 0)
{
bool canSend = dbContext.WcsTask.Where(t => t.nextPointId == lineEquip.objid && t.taskStatus > 0).Any();
if (lineEquip.equipStatus == 1)
{
_logger.Info("五楼AGV:接驳位有任务,无法下发出库任务");
continue;
}
if (Convert.ToInt32(StaticData.PlcDic[0].Read(LineSignal.plcpointAddress)) == 1 && !canSend)
{
Console.WriteLine($"{DateTime.Now}:5楼接驳位上有货无法下发Agv出库任务");
continue;
}
BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1);
RequestAGVTaskDto agvTask = new()
{
reqCode = StaticData.SnowId.NextId().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=item.currPointNo,
type="00"
},
new ()
{
positionCode=nextEquip.agvPositionCode,
type="00"
}
},
taskTyp = baseDictionary.dicValue,
ctnrTyp = "2"
};
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 == "成功")
{
_logger.Info("五楼Agv下发任务成功" + message);
Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功" + item.currPointNo + "," + 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 });
dbContext.SaveChanges();
}
else
{
_logger.Info("五楼Agv下发任务失败" + item.taskType + result);
}
}
}
else if (item.taskType == StaticTaskType.FiveRawToBack)//原材料到背板安装
{
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 30);
@ -388,7 +447,8 @@ namespace Khd.Core.Wcs.Wcs
else if (item.endPointId == 5)
{
var lineSignalValue = StaticData.PlcDic[0].Read(LineSignal.plcpointAddress);
if (lineSignalValue == null || Convert.ToInt32(lineSignalValue) == 1)
var wcsrun = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == "wcsrun03").plcpointAddress);
if (lineSignalValue == null || Convert.ToInt32(lineSignalValue) == 1 || wcsrun == null || wcsrun.ToString() != "0")
{
Console.WriteLine(DateTime.Now + ":五楼Agv接驳位有货无法送货");
_logger.Info("五楼Agv接驳位有货无法送货");
@ -419,140 +479,113 @@ namespace Khd.Core.Wcs.Wcs
{
Console.WriteLine(DateTime.Now + ":五楼AGV线程完成任务" + item.currPointNo + "," + item.endPointNo);
_logger.Info("五楼Agv完成任务成功" + item.ToJsonString());
using var dbContextTransaction = dbContext.Database.BeginTransaction();
WmsProductStock? wmsProductStock = null;
try
var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.currPointNo).FirstOrDefault();
if (wmsRawStock != null)
{
var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.currPointNo).FirstOrDefault();
if (wmsRawStock != null)
wmsRawStock.locationCode = item.endPointNo;
dbContext.Update(wmsRawStock);
}
else if (wmsRawStock == null)
{
wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == item.currPointNo);
if (wmsProductStock != null)
{
wmsRawStock.locationCode = item.endPointNo;
dbContext.Update(wmsRawStock);
}
else if (wmsRawStock == null)
{
wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == item.currPointNo);
if (wmsProductStock != null)
{
wmsProductStock.locationCode = item.endPointNo;
dbContext.Update(wmsProductStock);
}
else
{
continue;
}
wmsProductStock.locationCode = item.endPointNo;
dbContext.Update(wmsProductStock);
}
else
{
continue;
}
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First();
WmsBaseLocation toLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).First();
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
SystemData.UnLockOutLocation(toLocation, dbContext);
toLocation.returnFlag = wmsBaseLocation.returnFlag;
wmsBaseLocation.returnFlag = "0";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = null;
wmsBaseLocation.updateTime = DateTime.Now;
dbContext.Update(wmsBaseLocation);
dbContext.SaveChanges();
toLocation.locationStatus = "1";
toLocation.containerCode = item.containerNo;
toLocation.updateTime = DateTime.Now;
dbContext.Update(toLocation);
dbContext.SaveChanges();
//dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).Update(t => new WmsBaseLocation
//{
// returnFlag = "0",
// locationStatus = "1",
// containerCode = null,
// updateTime = DateTime.Now
//});
//dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).Update(t => new WmsBaseLocation
//{
// locationStatus = "1",
// returnFlag = wmsBaseLocation.returnFlag,
// containerCode = item.containerNo,
// updateTime = DateTime.Now
//});
dbContext.Remove(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
#region 插入移库记录
var wmsMove = dbContext.WmsMove.Where(t => t.MoveId == item.orderId).FirstOrDefault();
if (wmsMove == null)
{
wmsMove = new WmsMove();
wmsMove.MoveId = StaticData.SnowId.NextId();
wmsMove.TaskCode = StaticData.SnowId.NextId().ToString();
wmsMove.WarehouseId = wmsBaseLocation.warehouseId;
wmsMove.OriLocationCode = wmsBaseLocation.locationCode;
wmsMove.TargetLocationCode = toLocation.locationCode;
wmsMove.InstockBatch = wmsRawStock == null ? wmsProductStock.productBatch : wmsRawStock.instockBatch;
wmsMove.MaterialId = wmsRawStock == null ? wmsProductStock.productId : wmsRawStock.materialId;
wmsMove.PlanAmount = 1;
wmsMove.RealOutstockAmount = 1;
wmsMove.RealInstockAmount = 1;
wmsMove.OperationType = "3";
wmsMove.MoveWay = "2";
wmsMove.MoveType = "1";
wmsMove.AuditStatus = "1";
wmsMove.ExecuteStatus = "2";
wmsMove.UpdateBy = "WCS";
wmsMove.UpdateDate = DateTime.Now;
wmsMove.BeginTime = DateTime.Now;
wmsMove.EndTime = DateTime.Now;
dbContext.WmsMove.Add(wmsMove);
}
else
{
wmsMove.RealOutstockAmount += 1;
wmsMove.EndTime = DateTime.Now;
wmsMove.UpdateDate = DateTime.Now;
wmsMove.UpdateBy = "WCS";
wmsMove.ExecuteStatus = "2";
dbContext.Update(wmsMove);
}
WmsMoveDetail wmsMoveDetail = new WmsMoveDetail();
wmsMoveDetail.MoveId = wmsMove.MoveId;
wmsMoveDetail.MaterialBarcode = wmsMove.InstockBatch;
wmsMoveDetail.InstockBatch = wmsMove.InstockBatch;
wmsMoveDetail.MaterialId = wmsRawStock == null ? (long)wmsProductStock.productId : (long)wmsRawStock.materialId;
wmsMoveDetail.LocationCode = toLocation.locationCode;
wmsMoveDetail.PlanAmount = 1;
wmsMoveDetail.RealInstockAmount = 1;
wmsMoveDetail.RealAmount = 1;
wmsMoveDetail.ExecuteStatus = "2";
wmsMoveDetail.ExecuteTime = DateTime.Now;
wmsMoveDetail.ExecuteEndTime = DateTime.Now;
wmsMoveDetail.ExecutePerson = "WCS";
wmsMoveDetail.UpdateBy = "WCS";
wmsMoveDetail.UpdateDate = DateTime.Now;
dbContext.WmsMoveDetail.Add(wmsMoveDetail);
#endregion
dbContext.SaveChanges();
dbContextTransaction.Commit();
SystemData.SendPlcLocation(wmsBaseLocation);
SystemData.SendPlcLocation(toLocation);
}
catch (Exception ex)
else
{
try
{
dbContextTransaction.Rollback();
}
catch
{
}
_logger.Error(ex.Message + "\n" + ex.StackTrace);
continue;
}
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First();
WmsBaseLocation toLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).First();
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
SystemData.UnLockOutLocation(toLocation, dbContext);
dbContext.WmsBaseLocation.Where(t => t.locationId == wmsBaseLocation.locationId)
.Update(t => new WmsBaseLocation() { containerCode = null, updateTime = DateTime.Now, locationStatus = "1", returnFlag = "0" });
dbContext.WmsBaseLocation.Where(t => t.locationId == toLocation.locationId)
.Update(t => new WmsBaseLocation { containerCode = item.containerNo, updateTime = DateTime.Now, locationStatus = "1", returnFlag = wmsBaseLocation.returnFlag });
//dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).Update(t => new WmsBaseLocation
//{
// returnFlag = "0",
// locationStatus = "1",
// containerCode = null,
// updateTime = DateTime.Now
//});
//dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).Update(t => new WmsBaseLocation
//{
// locationStatus = "1",
// returnFlag = wmsBaseLocation.returnFlag,
// containerCode = item.containerNo,
// updateTime = DateTime.Now
//});
dbContext.Remove(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
#region 插入移库记录
var wmsMove = dbContext.WmsMove.Where(t => t.MoveId == item.orderId).FirstOrDefault();
if (wmsMove == null)
{
wmsMove = new WmsMove();
wmsMove.MoveId = StaticData.SnowId.NextId();
wmsMove.TaskCode = StaticData.SnowId.NextId().ToString();
wmsMove.WarehouseId = wmsBaseLocation.warehouseId;
wmsMove.OriLocationCode = wmsBaseLocation.locationCode;
wmsMove.TargetLocationCode = toLocation.locationCode;
wmsMove.InstockBatch = wmsRawStock == null ? wmsProductStock.productBatch : wmsRawStock.instockBatch;
wmsMove.MaterialId = wmsRawStock == null ? wmsProductStock.productId : wmsRawStock.materialId;
wmsMove.PlanAmount = 1;
wmsMove.RealOutstockAmount = 1;
wmsMove.RealInstockAmount = 1;
wmsMove.OperationType = "3";
wmsMove.MoveWay = "2";
wmsMove.MoveType = "1";
wmsMove.AuditStatus = "1";
wmsMove.ExecuteStatus = "2";
wmsMove.UpdateBy = "WCS";
wmsMove.UpdateDate = DateTime.Now;
wmsMove.BeginTime = DateTime.Now;
wmsMove.EndTime = DateTime.Now;
dbContext.WmsMove.Add(wmsMove);
}
else
{
wmsMove.RealOutstockAmount += 1;
wmsMove.EndTime = DateTime.Now;
wmsMove.UpdateDate = DateTime.Now;
wmsMove.UpdateBy = "WCS";
wmsMove.ExecuteStatus = "2";
dbContext.Update(wmsMove);
}
WmsMoveDetail wmsMoveDetail = new WmsMoveDetail();
wmsMoveDetail.MoveId = wmsMove.MoveId;
wmsMoveDetail.MaterialBarcode = wmsMove.InstockBatch;
wmsMoveDetail.InstockBatch = wmsMove.InstockBatch;
wmsMoveDetail.MaterialId = wmsRawStock == null ? (long)wmsProductStock.productId : (long)wmsRawStock.materialId;
wmsMoveDetail.LocationCode = toLocation.locationCode;
wmsMoveDetail.PlanAmount = 1;
wmsMoveDetail.RealInstockAmount = 1;
wmsMoveDetail.RealAmount = 1;
wmsMoveDetail.ExecuteStatus = "2";
wmsMoveDetail.ExecuteTime = DateTime.Now;
wmsMoveDetail.ExecuteEndTime = DateTime.Now;
wmsMoveDetail.ExecutePerson = "WCS";
wmsMoveDetail.UpdateBy = "WCS";
wmsMoveDetail.UpdateDate = DateTime.Now;
dbContext.WmsMoveDetail.Add(wmsMoveDetail);
#endregion
dbContext.SaveChanges();
SystemData.SendPlcLocation(wmsBaseLocation);
SystemData.SendPlcLocation(toLocation);
}
else if (item.taskType == StaticTaskType.FiveProductOut)//出库
{
@ -595,10 +628,9 @@ namespace Khd.Core.Wcs.Wcs
wmsBaseLocation.containerCode = null;
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS";
dbContext.Update(wmsBaseLocation);
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
dbContext.Update(wmsBaseLocation);
dbContext.WmsProductStock.Where(t => t.locationCode == wmsBaseLocation.locationCode).Delete();
BaseEquip floorLineEquip = StaticData.BaseEquip.First(t => t.equipType == 1 && t.floorNo == 5);
WcsTask newTask = CoreMapper.Map<WcsTask>(item);
@ -632,14 +664,13 @@ namespace Khd.Core.Wcs.Wcs
wmsRawOutstock.endTime = DateTime.Now;
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
wmsBaseLocation.returnFlag = "0";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = null;
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS";
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
dbContext.Update(wmsRawOutstock);
dbContext.Update(wmsBaseLocation);
dbContext.WmsRawStock.Where(t => t.locationCode == wmsBaseLocation.locationCode).Delete();
dbContext.Remove(item);
@ -758,10 +789,10 @@ namespace Khd.Core.Wcs.Wcs
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS";
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
dbContext.Update(wmsBaseLocation);
dbContext.Update(wmsRawOutStock);
dbContext.Add(newWmsRawOutstockDetail);
dbContext.Remove(wmsRawStock);
dbContext.Update(wmsBaseLocation);
dbContext.Remove(item);
dbContext.SaveChanges();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
@ -809,7 +840,7 @@ namespace Khd.Core.Wcs.Wcs
updateDate = DateTime.Now,
warehouseId = 511,
};
var WmsRawInstock = dbContext.WmsRawInstock.FirstOrDefault(t => t.materialBarCode == mesBasePalletInfo.materialBarcode && (t.instockType == "2"|| t.instockType == "4"));
var WmsRawInstock = dbContext.WmsRawInstock.FirstOrDefault(t => t.materialBarCode == mesBasePalletInfo.materialBarcode && (t.instockType == "2" || t.instockType == "4"));
if (WmsRawInstock != null)
{
WmsRawInstock.returnFlag = null;
@ -817,12 +848,12 @@ namespace Khd.Core.Wcs.Wcs
WmsRawInstock.updateDate = DateTime.Now;
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
dbContext.Update(wmsBaseLocation);
dbContext.Update(WmsRawInstock);
dbContext.Add(wmsRawStock);
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
startEquip.emptyCount = 0;
dbContext.Update(startEquip);
dbContext.Update(wmsBaseLocation);
dbContext.Remove(item);
dbContext.SaveChanges();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
@ -930,14 +961,14 @@ namespace Khd.Core.Wcs.Wcs
updateDate = DateTime.Now,
warehouseId = 511,
};
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
wmsBaseLocation.returnFlag = "0";
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
dbContext.Update(wmsBaseLocation);
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 5);
lineEquip.equipStatus = 0;
dbContext.Update(lineEquip);
dbContext.Add(wmsRawStock);
dbContext.Update(wmsBaseLocation);
dbContext.Remove(item);
dbContext.SaveChanges();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
@ -945,6 +976,36 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
else if (item.taskType == StaticTaskType.FiveStockReturnTask)
{
BaseEquip floorLineEquip = StaticData.BaseEquip.First(t => t.objid == 5);
var wmsRawOutstock = dbContext.WmsRawOutstock.Where(t => t.rawOutstockId == item.orderId).FirstOrDefault();
var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.currPointNo).FirstOrDefault();
var wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationCode == item.currPointNo).FirstOrDefault();
if (wmsRawOutstock != null && wmsRawStock != null && wmsBaseLocation != null)
{
wmsRawOutstock.realOutstockAmount += 1;
wmsRawOutstock.executeStatus = "2";
wmsRawOutstock.endTime = DateTime.Now;
dbContext.Remove(wmsRawStock);
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = null;
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS";
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
dbContext.Update(wmsBaseLocation);
dbContext.Update(wmsRawOutstock);
item.createTime = DateTime.Now;
item.nextPointId = floorLineEquip.objid;
item.nextPointNo = floorLineEquip.equipNo;
item.fromFloorNo = 5;
item.floorNo = 1;
item.taskStatus = 6;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6, updateTime = DateTime.Now });
dbContext.SaveChanges();
}
}
}
}
break;

@ -116,6 +116,10 @@ namespace Khd.Core.Wcs.Wcs
foreach (var item in taskList)
{
item.updateTime = DateTime.Now;
if (taskList.Where(t => t.objid != item.objid && t.taskStatus > 0).Any())
{
continue;
}
if (item.taskStatus == 0)//下发任务
{
BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType);
@ -534,7 +538,28 @@ namespace Khd.Core.Wcs.Wcs
if (item.taskStatus == 3)
{
_logger.Info("二楼AGV线程继续任务" + item.objid);
if (item.currPointId == lineEquip.objid)
if (item.taskType == StaticTaskType.SecondStorageToLift || item.taskType == StaticTaskType.SecondTransitToLift)
{
var lineSignal02 = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal02").plcpointAddress);
var wcsrun = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == "wcsrun02").plcpointAddress);
if (lineSignal02 != null && lineSignal02.ToString() == "0" && wcsrun != null && wcsrun.ToString() == "0")
{
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().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 == "成功")
{
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 });
}
}
}
else if (item.currPointId == lineEquip.objid)
{
var lineSignal02 = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal02").plcpointAddress);
if (lineSignal02 != null && lineSignal02.ToString() == "1")
@ -573,9 +598,43 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
else if (item.taskType == StaticTaskType.SecondLineToSmallPackage)
{
// 托盘库叫料信号
var agvPutPoint = StaticData.BasePlcpointList.First(t => t.id == 54);
//2F托盘库产线数据通讯情况
var ConnectStatus2FPoint = StaticData.BasePlcpointList.First(t => t.id == 73);
//2F托盘库入口上料光电
var PalletInIsHas2FPoint = StaticData.BasePlcpointList.First(t => t.id == 74);
var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress);//托盘库叫料信号
var ConnectStatus2F = StaticData.PlcDic[2].Read(ConnectStatus2FPoint.plcpointAddress);//2F托盘库产线数据通讯情况
var PalletInIsHas2F = StaticData.PlcDic[2].Read(PalletInIsHas2FPoint.plcpointAddress);//2F托盘库入口上料光电
if (agvPutValue != null && ConnectStatus2F != null && PalletInIsHas2F != null && Convert.ToInt32(agvPutValue) == 1 && Convert.ToInt32(ConnectStatus2F) == 1 && Convert.ToInt32(PalletInIsHas2F) == 0)
{
// 托盘库叫料信号,并且通讯正常,并且小包入口无料 ,才可放托盘
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().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 == "成功")
{
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 });
}
}
}
else if (item.currPointId == outEquip.objid)
{
if (true)
var agvGetPoint = StaticData.BasePlcpointList.First(t => t.id == 53);
var agvGetValue = StaticData.PlcDic[2].Read(agvGetPoint.plcpointAddress);//小包出口的到位
if (agvGetValue != null && agvGetValue.ToString() == "1")
{
var agvTask = new RequestAGVTaskDto
{
@ -597,9 +656,8 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
else
{
var agvTask = new RequestAGVTaskDto
@ -618,11 +676,31 @@ namespace Khd.Core.Wcs.Wcs
}
}
else if (item.taskStatus == 5)
{
if (item.taskType == StaticTaskType.SecondLineToSmallPackage)
if (item.taskType == StaticTaskType.SecondStorageToLift || item.taskType == StaticTaskType.SecondTransitToLift)
{
var lineSignal02 = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal02").plcpointAddress);
var wcsrun = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == "wcsrun02").plcpointAddress);
if (lineSignal02 != null && lineSignal02.ToString() == "0" && wcsrun != null && wcsrun.ToString() == "0")
{
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().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 == "成功")
{
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 });
}
}
}
else if (item.taskType == StaticTaskType.SecondLineToSmallPackage)
{
// 托盘库叫料信号
var agvPutPoint = StaticData.BasePlcpointList.First(t => t.id == 54);
@ -740,8 +818,8 @@ namespace Khd.Core.Wcs.Wcs
//wmsProductInstock.executeStatus = "2";
//dbContext.Update(wmsProductInstockDetail);
dbContext.Add(wmsProductStock);
dbContext.Update(wmsBaseLocation);
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
dbContext.Update(wmsBaseLocation);
//dbContext.Update(wmsProductInstock);
dbContext.Remove(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
@ -866,107 +944,83 @@ namespace Khd.Core.Wcs.Wcs
}
else if (item.taskType == StaticTaskType.SecondRemove)//移库
{
using var transaction = dbContext.Database.BeginTransaction();
try
var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == item.currPointNo);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First();
WmsBaseLocation toLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).First();
dbContext.WmsBaseLocation.Where(t => t.locationId == wmsBaseLocation.locationId)
.Update(t => new WmsBaseLocation() { containerCode = null, updateTime = DateTime.Now, locationStatus = "1" });
dbContext.WmsBaseLocation.Where(t => t.locationId == toLocation.locationId)
.Update(t => new WmsBaseLocation { containerCode = item.containerNo, updateTime = DateTime.Now, locationStatus = "1" });
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
SystemData.UnLockOutLocation(toLocation, dbContext);
if (wmsProductStock != null)
{
var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == item.currPointNo);
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First();
WmsBaseLocation toLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).First();
wmsBaseLocation.ContainerStatus = null;
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.locationStatus = "1";
dbContext.SaveChanges();
toLocation.locationStatus = "1";
toLocation.containerCode = item.containerNo;
toLocation.updateTime = DateTime.Now;
dbContext.SaveChanges();
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
SystemData.UnLockOutLocation(toLocation, dbContext);
if (wmsProductStock != null)
{
wmsProductStock.locationCode = item.endPointNo;
dbContext.Update(wmsProductStock);
}
dbContext.Remove(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
#region 插入移库记录
var wmsMove = dbContext.WmsMove.Where(t => t.MoveId == item.orderId).FirstOrDefault();
if (wmsMove == null)
{
wmsMove = new WmsMove();
wmsMove.MoveId = StaticData.SnowId.NextId();
wmsMove.TaskCode = StaticData.SnowId.NextId().ToString();
wmsMove.WarehouseId = wmsBaseLocation.warehouseId;
wmsMove.OriLocationCode = wmsBaseLocation.locationCode;
wmsMove.TargetLocationCode = toLocation.locationCode;
wmsMove.InstockBatch = wmsProductStock.productBatch;
wmsMove.MaterialId = wmsProductStock.productId;
wmsMove.PlanAmount = 1;
wmsMove.RealOutstockAmount = 1;
wmsMove.RealInstockAmount = 1;
wmsMove.OperationType = "3";
wmsMove.MoveWay = "2";
wmsMove.MoveType = "1";
wmsMove.AuditStatus = "1";
wmsMove.ExecuteStatus = "2";
wmsMove.UpdateBy = "WCS";
wmsMove.UpdateDate = DateTime.Now;
wmsMove.BeginTime = DateTime.Now;
wmsMove.EndTime = DateTime.Now;
dbContext.WmsMove.Add(wmsMove);
}
else
{
wmsMove.RealOutstockAmount += 1;
wmsMove.EndTime = DateTime.Now;
wmsMove.UpdateDate = DateTime.Now;
wmsMove.UpdateBy = "WCS";
wmsMove.ExecuteStatus = "2";
dbContext.Update(wmsMove);
}
WmsMoveDetail wmsMoveDetail = new WmsMoveDetail();
wmsMoveDetail.MoveId = wmsMove.MoveId;
wmsMoveDetail.MaterialBarcode = wmsMove.InstockBatch;
wmsMoveDetail.InstockBatch = wmsMove.InstockBatch;
wmsMoveDetail.MaterialId = (long)wmsProductStock.productId;
wmsMoveDetail.LocationCode = toLocation.locationCode;
wmsMoveDetail.PlanAmount = 1;
wmsMoveDetail.RealInstockAmount = 1;
wmsMoveDetail.RealAmount = 1;
wmsMoveDetail.ExecuteStatus = "2";
wmsMoveDetail.ExecuteTime = DateTime.Now;
wmsMoveDetail.ExecuteEndTime = DateTime.Now;
wmsMoveDetail.ExecutePerson = "WCS";
wmsMoveDetail.UpdateBy = "WCS";
wmsMoveDetail.UpdateDate = DateTime.Now;
dbContext.WmsMoveDetail.Add(wmsMoveDetail);
#endregion
dbContext.SaveChanges();
transaction.Commit();
SystemData.SendPlcLocation(wmsBaseLocation);
SystemData.SendPlcLocation(toLocation);
_logger.Info("二楼AGV线程完成任务" + item.objid);
wmsProductStock.locationCode = item.endPointNo;
dbContext.Update(wmsProductStock);
}
catch (Exception ex)
dbContext.Remove(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
#region 插入移库记录
var wmsMove = dbContext.WmsMove.Where(t => t.MoveId == item.orderId).FirstOrDefault();
if (wmsMove == null)
{
try
{
transaction.Rollback();
}
catch
{
}
_logger.Error(ex.Message + "\n" + ex.StackTrace);
wmsMove = new WmsMove();
wmsMove.MoveId = StaticData.SnowId.NextId();
wmsMove.TaskCode = StaticData.SnowId.NextId().ToString();
wmsMove.WarehouseId = wmsBaseLocation.warehouseId;
wmsMove.OriLocationCode = wmsBaseLocation.locationCode;
wmsMove.TargetLocationCode = toLocation.locationCode;
wmsMove.InstockBatch = wmsProductStock.productBatch;
wmsMove.MaterialId = wmsProductStock.productId;
wmsMove.PlanAmount = 1;
wmsMove.RealOutstockAmount = 1;
wmsMove.RealInstockAmount = 1;
wmsMove.OperationType = "3";
wmsMove.MoveWay = "2";
wmsMove.MoveType = "1";
wmsMove.AuditStatus = "1";
wmsMove.ExecuteStatus = "2";
wmsMove.UpdateBy = "WCS";
wmsMove.UpdateDate = DateTime.Now;
wmsMove.BeginTime = DateTime.Now;
wmsMove.EndTime = DateTime.Now;
dbContext.WmsMove.Add(wmsMove);
}
else
{
wmsMove.RealOutstockAmount += 1;
wmsMove.EndTime = DateTime.Now;
wmsMove.UpdateDate = DateTime.Now;
wmsMove.UpdateBy = "WCS";
wmsMove.ExecuteStatus = "2";
dbContext.Update(wmsMove);
}
WmsMoveDetail wmsMoveDetail = new WmsMoveDetail();
wmsMoveDetail.MoveId = wmsMove.MoveId;
wmsMoveDetail.MaterialBarcode = wmsMove.InstockBatch;
wmsMoveDetail.InstockBatch = wmsMove.InstockBatch;
wmsMoveDetail.MaterialId = (long)wmsProductStock.productId;
wmsMoveDetail.LocationCode = toLocation.locationCode;
wmsMoveDetail.PlanAmount = 1;
wmsMoveDetail.RealInstockAmount = 1;
wmsMoveDetail.RealAmount = 1;
wmsMoveDetail.ExecuteStatus = "2";
wmsMoveDetail.ExecuteTime = DateTime.Now;
wmsMoveDetail.ExecuteEndTime = DateTime.Now;
wmsMoveDetail.ExecutePerson = "WCS";
wmsMoveDetail.UpdateBy = "WCS";
wmsMoveDetail.UpdateDate = DateTime.Now;
dbContext.WmsMoveDetail.Add(wmsMoveDetail);
#endregion
dbContext.SaveChanges();
SystemData.SendPlcLocation(wmsBaseLocation);
SystemData.SendPlcLocation(toLocation);
_logger.Info("二楼AGV线程完成任务" + item.objid);
}
else if (item.taskType == StaticTaskType.SecondWasteToTransit)//废料区到周转区
{

@ -57,7 +57,7 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
dbContext.ChangeTracker.Clear();
dbContext.ChangeTracker.Clear();
//入库任务
var rfid = StaticData.PlcDic[0].ReadRFID(LineRFID.plcpointAddress);
//2F托盘库产线数据通讯情况
@ -93,7 +93,7 @@ namespace Khd.Core.Wcs.Wcs
bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == inEquip.objid).Any();
if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 1 && !hasTask && Convert.ToInt32(PalletInIsHas2F) == 0 && Convert.ToInt32(ConnectStatus2F) == 1)//小包入口要料
{
dbContext.Remove(wcsTask);//删除原本的任务
dbContext.Remove(wcsTask);//删除原本的任务
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.taskStatus = 0;
newTask.objid = StaticData.SnowId.NextId();
@ -120,7 +120,7 @@ namespace Khd.Core.Wcs.Wcs
BaseEquip? endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.useFlag == 1 && t.equipStatus == 0 && t.emptyCount == 0);//二楼周转位
if (endEquip != null)
{
dbContext.Remove(wcsTask);//删除原本的任务
dbContext.Remove(wcsTask);//删除原本的任务
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.taskStatus = 0;
newTask.objid = StaticData.SnowId.NextId();
@ -149,9 +149,9 @@ namespace Khd.Core.Wcs.Wcs
if (wcsTask.endPointId == 36)//目的地是小包入口
{
bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == inEquip.objid).Any();
if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 1 && !hasTask&& Convert.ToInt32(PalletInIsHas2F) == 0 && Convert.ToInt32(ConnectStatus2F) == 1)//小包入口要料
if (agvPutValue != null && Convert.ToInt32(agvPutValue) == 1 && !hasTask && Convert.ToInt32(PalletInIsHas2F) == 0 && Convert.ToInt32(ConnectStatus2F) == 1)//小包入口要料
{
dbContext.Remove(wcsTask);
dbContext.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.taskStatus = 0;
newTask.objid = StaticData.SnowId.NextId();
@ -175,10 +175,10 @@ namespace Khd.Core.Wcs.Wcs
}
else
{
BaseEquip? endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);
BaseEquip? endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.useFlag == 1 && t.equipStatus == 0 && t.emptyCount == 0);
if (endEquip != null)
{
dbContext.Remove(wcsTask);
dbContext.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.taskStatus = 0;
newTask.objid = StaticData.SnowId.NextId();
@ -207,7 +207,7 @@ namespace Khd.Core.Wcs.Wcs
var endEquip = dbContext.BaseEquip.First(t => t.objid == 38);//废料区
if (endEquip.emptyCount == 0)//废料区没有托盘
{
dbContext.Remove(wcsTask);
dbContext.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.taskStatus = 0;
newTask.objid = StaticData.SnowId.NextId();
@ -229,10 +229,10 @@ namespace Khd.Core.Wcs.Wcs
}
else
{
endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);//周转位
endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.useFlag == 1 && t.equipStatus == 0 && t.emptyCount == 0);//周转位
if (endEquip != null)
{
dbContext.Remove(wcsTask);
dbContext.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.taskStatus = 0;
newTask.objid = StaticData.SnowId.NextId();
@ -263,7 +263,7 @@ namespace Khd.Core.Wcs.Wcs
if (wcsTask.taskType == StaticTaskType.SecondStorageToLift && wcsTask.containerNo == rfid)//50是成品出库
{
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 1);
dbContext.Remove(wcsTask);
dbContext.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.serialNo = SystemData.GetSerialNo(dbContext);
newTask.taskStatus = 0;
@ -291,7 +291,7 @@ namespace Khd.Core.Wcs.Wcs
else//一般情况下是废料的任务
{
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.endPointId);
dbContext.Remove(wcsTask);
dbContext.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.serialNo = SystemData.GetSerialNo(dbContext);
newTask.taskStatus = 0;

@ -78,6 +78,13 @@ namespace Khd.Core.Wcs.Wcs
//};
//AgvAlarmThread.Start();
var trayReadThread = new Thread(TrayReadLogic)
{
Name = "TrayReadThread",
IsBackground = true
};
trayReadThread.Start();
var locationThread = new Thread(LocationLogic)
{
Name = "LocationThread",
@ -88,6 +95,56 @@ namespace Khd.Core.Wcs.Wcs
Console.WriteLine($"{DateTime.Now}: SystemTimer started");
}
private void TrayReadLogic(object? obj)
{
Dictionary<int, int> readCount = new Dictionary<int, int>()
{
{1,0 },
{2,0 },
{3,0 },
{4,0 },
{5,0 },
};
while (true)
{
try
{
foreach (var item in readCount)
{
BasePlcpoint signal = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"linesignal0{item.Key}");
BasePlcpoint rfid = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"RFID00{item.Key}");
BasePlcpoint read = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"Read0{item.Key}");
var signalValue = StaticData.PlcDic[0].Read(signal.plcpointAddress);
var rfidValue = StaticData.PlcDic[0].ReadRFID(rfid.plcpointAddress);
var readValue = StaticData.PlcDic[0].Read(read.plcpointAddress);
if (Convert.ToInt32(signalValue) == 1 && string.IsNullOrEmpty(rfidValue) && item.Value < 10)
{
StaticData.PlcDic[0].WriteToPoint(read.plcpointAddress, true, read.plcpointLength.ToString());
readCount[item.Key] = +1;
Task.Run(() =>
{
Thread.Sleep(2000);
StaticData.PlcDic[0].WriteToPoint(read.plcpointAddress, false, read.plcpointLength.ToString());
});
}
if (Convert.ToInt32(signalValue) == 1 && !string.IsNullOrEmpty(rfidValue) || Convert.ToInt32(signalValue) == 0)
{
readCount[item.Key] = 0;
if (Convert.ToBoolean(readValue))
{
StaticData.PlcDic[0].WriteToPoint(read.plcpointAddress, false, read.plcpointLength.ToString());
}
}
}
}
catch
{
}
Thread.Sleep(3000);
}
}
private void LocationLogic()
{
using var scope = host.Services.CreateScope();
@ -349,6 +406,7 @@ namespace Khd.Core.Wcs.Wcs
{
SystemData.UnLockOutLocation(toBaseLocation, dbContext);
}
dbContext.SaveChanges();
}
else
{
@ -620,10 +678,52 @@ namespace Khd.Core.Wcs.Wcs
UpdatePlcPointValue();
BasePlcPointUpdateLogic();
AgvWaringLogic();
AgvCXLogic();
Thread.Sleep(500);
}
}
private void AgvCXLogic()
{
try
{
using var scope = host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
dbContext.ChangeTracker.Clear();
var wcsAgvStatuses = dbContext.WcsAgvStatus.ToList();
foreach (var item in wcsAgvStatuses)
{
var basePlc = StaticData.basePlcs.FirstOrDefault(t => t.Name == (item.AgvName + "朝向"));
if (basePlc != null && int.TryParse(item.RobotDir, out var dir))
{
int cx = 0;
if (dir >= -180 && dir < -90)
{
cx = 0;
}
else if (dir >= -90 && dir < 0)
{
cx = 1;
}
else if (dir >= 0 && dir < 90)
{
cx = 2;
}
else if (dir >= 90 && dir <= 180)
{
cx = 3;
}
StaticData.PlcDic[2].WriteToPoint(basePlc.Address, cx, basePlc.type);
}
}
}
catch
{
}
}
private void AgvWaringLogic()
{
using var scope = host.Services.CreateScope();

@ -157,6 +157,10 @@ namespace Khd.Core.Wcs.Wcs
var taskList = dbContext.WcsTask.Where(t => t.nextPointId == baseEquip.objid).Where(t => t.useFlag == 1).OrderBy(t => t.createTime).ToList();
foreach (var item in taskList)
{
if (taskList.Where(t => t.objid != item.objid && t.taskStatus > 0).Any())
{
continue;
}
item.updateTime = DateTime.Now;
if (item.taskStatus == 0)
{
@ -202,7 +206,7 @@ namespace Khd.Core.Wcs.Wcs
}
else if (item.taskType == StaticTaskType.ThirdRawIn)//提升机-库位
{
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 3);
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == 3);
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString(),
@ -427,7 +431,6 @@ namespace Khd.Core.Wcs.Wcs
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 3);
if (lineEquip.equipStatus == 0)
{
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString().ToString(),
@ -472,7 +475,7 @@ namespace Khd.Core.Wcs.Wcs
else if (item.taskType == StaticTaskType.ThirdTransitToSecond)//三楼空托盘转运到二楼
{
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 3);
BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId);
BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId);
if (lineEquip.equipStatus == 0)
{
var agvTask = new RequestAGVTaskDto
@ -516,6 +519,52 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
else if (item.taskType == StaticTaskType.ThirdStockReturnTask)
{
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 3);
if (lineEquip.equipStatus == 0)
{
var agvTask = new RequestAGVTaskDto
{
reqCode = StaticData.SnowId.NextId().ToString().ToString(),
positionCodePath = new List<Position>
{
new ()
{
positionCode=item.currPointNo,
type="00"
},
new ()
{
positionCode=item.endPointNo,
type="00"
}
},
taskTyp = baseDictionary.dicValue,
ctnrTyp = "2",
ctnrNum = "1"
};
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 == "成功")
{
_logger.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
{
_logger.Info("三楼Agv下发任务失败" + item.taskType + result);
}
}
}
}
else
{
@ -539,8 +588,21 @@ namespace Khd.Core.Wcs.Wcs
if (item.endPointId == 3)
{
BasePlcpoint lineSignal = StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal03");
var wcsrun = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == "wcsrun03").plcpointAddress);
var lineSignalValue = StaticData.PlcDic[0].Read(lineSignal.plcpointAddress);
if (lineSignalValue == null || Convert.ToInt32(lineSignalValue) == 1)
if (lineSignalValue == null || Convert.ToInt32(lineSignalValue) == 1 || wcsrun == null || wcsrun.ToString() != "0")
{
_logger.Info($"三楼Agv继续任务失败,提升机有货物");
Console.WriteLine($"{DateTime.Now}:三楼Agv继续任务失败,提升机有货物");
Thread.Sleep(1000);
continue;
}
}
if (item.endPointId == 31)//如果终点是翻转机的任务,有东西则跳过
{
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "putTray");
var callMaterial = StaticData.PlcDic[2].Read(basePlcpoint.plcpointAddress);
if (callMaterial == null || !Convert.ToBoolean(callMaterial))
{
_logger.Info($"三楼Agv继续任务失败,提升机有货物");
Console.WriteLine($"{DateTime.Now}:三楼Agv继续任务失败,提升机有货物");
@ -572,108 +634,87 @@ namespace Khd.Core.Wcs.Wcs
}
if (item.taskType == StaticTaskType.ThirdRemove)//移库
{
using var transaction = dbContext.Database.BeginTransaction();
try
var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.currPointNo).FirstOrDefault();
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First();
WmsBaseLocation toLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).First();
dbContext.WmsBaseLocation.Where(t => t.locationId == wmsBaseLocation.locationId)
.Update(t => new WmsBaseLocation() { containerCode = null, updateTime = DateTime.Now, locationStatus = "1" });
dbContext.WmsBaseLocation.Where(t => t.locationId == toLocation.locationId)
.Update(t => new WmsBaseLocation { containerCode = item.containerNo, updateTime = DateTime.Now, locationStatus = "1" });
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
SystemData.UnLockOutLocation(toLocation, dbContext);
if (wmsRawStock != null)
{
var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.currPointNo).FirstOrDefault();
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First();
WmsBaseLocation toLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).First();
wmsBaseLocation.ContainerStatus = null;
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.locationStatus = "1";
dbContext.SaveChanges();
toLocation.locationStatus = "1";
toLocation.containerCode = item.containerNo;
toLocation.updateTime=DateTime.Now;
dbContext.SaveChanges();
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
SystemData.UnLockOutLocation(toLocation, dbContext);
if (wmsRawStock != null)
{
wmsRawStock.locationCode = item.endPointNo;
dbContext.Update(wmsRawStock);
}
dbContext.Remove(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
#region 插入移库记录
var wmsMove = dbContext.WmsMove.Where(t => t.MoveId == item.orderId).FirstOrDefault();
if (wmsMove == null)
{
wmsMove = new WmsMove();
wmsMove.MoveId = StaticData.SnowId.NextId();
wmsMove.TaskCode = StaticData.SnowId.NextId().ToString();
wmsMove.WarehouseId = wmsBaseLocation.warehouseId;
wmsMove.OriLocationCode = wmsBaseLocation.locationCode;
wmsMove.TargetLocationCode = toLocation.locationCode;
wmsMove.InstockBatch = wmsRawStock.instockBatch;
wmsMove.MaterialId = wmsRawStock.materialId;
wmsMove.PlanAmount = 1;
wmsMove.RealOutstockAmount = 1;
wmsMove.RealInstockAmount = 1;
wmsMove.OperationType = "3";
wmsMove.MoveWay = "2";
wmsMove.MoveType = "1";
wmsMove.AuditStatus = "1";
wmsMove.ExecuteStatus = "2";
wmsMove.UpdateBy = "WCS";
wmsMove.UpdateDate = DateTime.Now;
wmsMove.BeginTime = DateTime.Now;
wmsMove.EndTime = DateTime.Now;
dbContext.WmsMove.Add(wmsMove);
}
else
{
wmsMove.RealOutstockAmount += 1;
wmsMove.EndTime = DateTime.Now;
wmsMove.UpdateDate = DateTime.Now;
wmsMove.UpdateBy = "WCS";
wmsMove.ExecuteStatus = "2";
dbContext.Update(wmsMove);
}
WmsMoveDetail wmsMoveDetail = new WmsMoveDetail();
wmsMoveDetail.MoveId = wmsMove.MoveId;
wmsMoveDetail.MaterialBarcode = wmsMove.InstockBatch;
wmsMoveDetail.InstockBatch = wmsMove.InstockBatch;
wmsMoveDetail.MaterialId = (long)wmsRawStock.materialId;
wmsMoveDetail.LocationCode = toLocation.locationCode;
wmsMoveDetail.PlanAmount = 1;
wmsMoveDetail.RealInstockAmount = 1;
wmsMoveDetail.RealAmount = 1;
wmsMoveDetail.ExecuteStatus = "2";
wmsMoveDetail.ExecuteTime = DateTime.Now;
wmsMoveDetail.ExecuteEndTime = DateTime.Now;
wmsMoveDetail.ExecutePerson = "WCS";
wmsMoveDetail.UpdateBy = "WCS";
wmsMoveDetail.UpdateDate = DateTime.Now;
dbContext.WmsMoveDetail.Add(wmsMoveDetail);
#endregion
dbContext.SaveChanges();
transaction.Commit();
SystemData.SendPlcLocation(wmsBaseLocation);
SystemData.SendPlcLocation(toLocation);
wmsRawStock.locationCode = item.endPointNo;
dbContext.Update(wmsRawStock);
}
catch (Exception ex)
dbContext.Remove(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 });
#region 插入移库记录
var wmsMove = dbContext.WmsMove.Where(t => t.MoveId == item.orderId).FirstOrDefault();
if (wmsMove == null)
{
try
{
transaction.Rollback();
}
catch
{
}
_logger.Error(ex.Message + "\n" + ex.StackTrace);
wmsMove = new WmsMove();
wmsMove.MoveId = StaticData.SnowId.NextId();
wmsMove.TaskCode = StaticData.SnowId.NextId().ToString();
wmsMove.WarehouseId = wmsBaseLocation.warehouseId;
wmsMove.OriLocationCode = wmsBaseLocation.locationCode;
wmsMove.TargetLocationCode = toLocation.locationCode;
wmsMove.InstockBatch = wmsRawStock.instockBatch;
wmsMove.MaterialId = wmsRawStock.materialId;
wmsMove.PlanAmount = 1;
wmsMove.RealOutstockAmount = 1;
wmsMove.RealInstockAmount = 1;
wmsMove.OperationType = "3";
wmsMove.MoveWay = "2";
wmsMove.MoveType = "1";
wmsMove.AuditStatus = "1";
wmsMove.ExecuteStatus = "2";
wmsMove.UpdateBy = "WCS";
wmsMove.UpdateDate = DateTime.Now;
wmsMove.BeginTime = DateTime.Now;
wmsMove.EndTime = DateTime.Now;
dbContext.WmsMove.Add(wmsMove);
}
else
{
wmsMove.RealOutstockAmount += 1;
wmsMove.EndTime = DateTime.Now;
wmsMove.UpdateDate = DateTime.Now;
wmsMove.UpdateBy = "WCS";
wmsMove.ExecuteStatus = "2";
dbContext.Update(wmsMove);
}
WmsMoveDetail wmsMoveDetail = new WmsMoveDetail();
wmsMoveDetail.MoveId = wmsMove.MoveId;
wmsMoveDetail.MaterialBarcode = wmsMove.InstockBatch;
wmsMoveDetail.InstockBatch = wmsMove.InstockBatch;
wmsMoveDetail.MaterialId = (long)wmsRawStock.materialId;
wmsMoveDetail.LocationCode = toLocation.locationCode;
wmsMoveDetail.PlanAmount = 1;
wmsMoveDetail.RealInstockAmount = 1;
wmsMoveDetail.RealAmount = 1;
wmsMoveDetail.ExecuteStatus = "2";
wmsMoveDetail.ExecuteTime = DateTime.Now;
wmsMoveDetail.ExecuteEndTime = DateTime.Now;
wmsMoveDetail.ExecutePerson = "WCS";
wmsMoveDetail.UpdateBy = "WCS";
wmsMoveDetail.UpdateDate = DateTime.Now;
dbContext.WmsMoveDetail.Add(wmsMoveDetail);
#endregion
dbContext.SaveChanges();
SystemData.SendPlcLocation(wmsBaseLocation);
SystemData.SendPlcLocation(toLocation);
}
if (item.taskType == StaticTaskType.ThirdRawIn)//入库
else if (item.taskType == StaticTaskType.ThirdRawIn)//入库
{
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation
.First(t => t.locationId == item.endPointId && t.warehouseFloor == 3);
@ -926,6 +967,36 @@ namespace Khd.Core.Wcs.Wcs
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
dbContext.SaveChanges();
}
else if (item.taskType == StaticTaskType.ThirdStockReturnTask)
{
BaseEquip floorLineEquip = StaticData.BaseEquip.First(t => t.objid == 3);
var wmsRawOutstock = dbContext.WmsRawOutstock.Where(t => t.rawOutstockId == item.orderId).FirstOrDefault();
var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.currPointNo).FirstOrDefault();
var wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationCode == item.currPointNo).FirstOrDefault();
if (wmsRawOutstock != null && wmsRawStock != null && wmsBaseLocation != null)
{
wmsRawOutstock.realOutstockAmount += 1;
wmsRawOutstock.executeStatus = "2";
wmsRawOutstock.endTime = DateTime.Now;
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
dbContext.Remove(wmsRawStock);
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = null;
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS";
dbContext.Update(wmsBaseLocation);
dbContext.Update(wmsRawOutstock);
item.createTime = DateTime.Now;
item.nextPointId = floorLineEquip.objid;
item.nextPointNo = floorLineEquip.equipNo;
item.fromFloorNo = 3;
item.floorNo = 1;
item.taskStatus = 6;
dbContext.Update(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6, updateTime = DateTime.Now });
dbContext.SaveChanges();
}
}
}
}
}

@ -202,26 +202,58 @@ namespace Khd.Core.Wcs.Wcs
}
else if (wcsTask.taskStatus == 6)//小车任务是完成状态,说明是出库
{
BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.equipType == 2);//提升机
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo);
dbContext.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.objid = StaticData.SnowId.NextId();
newTask.containerNo = rfid;
newTask.nextPointId = nextEquip.objid;
newTask.nextPointNo = nextEquip.equipNo;
newTask.currPointId = baseEquip.objid;
newTask.currPointNo = baseEquip.equipNo;
newTask.fromFloorNo = FloorNo;
newTask.endPointId= endEquip.objid;
newTask.endPointNo = endEquip.equipNo;
newTask.taskStatus = 0;
newTask.ud1 = 10;
newTask.updateTime = DateTime.Now;
dbContext.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
if (wcsTask.taskType == StaticTaskType.ThirdStockReturnTask)
{
if (string.IsNullOrEmpty(rfid))
{
continue;
}
else if (wcsTask.containerNo == rfid)
{
BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.equipType == 2);//提升机
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo);
dbContext.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.objid = StaticData.SnowId.NextId();
newTask.nextPointId = nextEquip.objid;
newTask.nextPointNo = nextEquip.equipNo;
newTask.currPointId = baseEquip.objid;
newTask.currPointNo = baseEquip.equipNo;
newTask.fromFloorNo = FloorNo;
newTask.endPointId = endEquip.objid;
newTask.endPointNo = endEquip.equipNo;
newTask.taskStatus = 0;
newTask.ud1 = 10;
newTask.updateTime = DateTime.Now;
dbContext.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
}
}
else
{
BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.equipType == 2);//提升机
BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo);
dbContext.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.objid = StaticData.SnowId.NextId();
newTask.containerNo = rfid;
newTask.nextPointId = nextEquip.objid;
newTask.nextPointNo = nextEquip.equipNo;
newTask.currPointId = baseEquip.objid;
newTask.currPointNo = baseEquip.equipNo;
newTask.fromFloorNo = FloorNo;
newTask.endPointId = endEquip.objid;
newTask.endPointNo = endEquip.equipNo;
newTask.taskStatus = 0;
newTask.ud1 = 10;
newTask.updateTime = DateTime.Now;
dbContext.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
}
}
}
}

@ -30,7 +30,15 @@ namespace Khd.Core.Wpf
SystemData.PlcConfigs = configuration.GetSection("PlcConfigs").Get<List<PlcConfig>>();
ConnectionStrings.ConnectionString = configuration["ConnectionStrings:DefaultConnection"].ToString();
SystemData.MenuList=configuration.GetSection("MenuList").Get<List<string>>();
SystemData.MenuList = configuration.GetSection("MenuList").Get<List<string>>();
try
{
SystemData.NeedLogin = bool.Parse(File.ReadAllText("Login.txt"));
}
catch
{
}
LoadVersionMsg();
////配置文件 加载 Thrift 推送端口
//ThriftConfig.ThriftIpAddress = configuration["ThriftConfig:ThriftIpAddress"].ToString();

@ -1346,7 +1346,7 @@ FontSize="25" Width="160" Height="80" VerticalAlignment="Top" HorizontalAlignmen
</StackPanel>
</StackPanel>
<Grid Grid.Row="1" x:Name="LocaltionGrid">
</Grid>
</Grid>
</TabItem>
@ -1717,7 +1717,7 @@ FontSize="25" Width="160" Height="80" VerticalAlignment="Top" HorizontalAlignmen
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<!--<Button Content="清除" Style="{StaticResource ButtonPrimary}" FontSize="25" Width="125" Height="75" Click="clearLocation_Click"/>-->
<Button Content="出库" Style="{StaticResource ButtonPrimary}" FontSize="25" Width="125" Height="75" Click="outLocation_Click"/>
<Button Content="出库" Style="{StaticResource ButtonPrimary}" Visibility="{Binding IsShowOut}" FontSize="25" Width="125" Height="75" Click="outLocation_Click"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
@ -2199,6 +2199,9 @@ FontSize="25" Width="160" Height="80" VerticalAlignment="Top" HorizontalAlignmen
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border BorderBrush="White" BorderThickness="2" Grid.ColumnSpan="2" Grid.Column="4" Grid.RowSpan="2" Margin="20">
<StackPanel Orientation="Vertical" >
@ -2206,7 +2209,7 @@ FontSize="25" Width="160" Height="80" VerticalAlignment="Top" HorizontalAlignmen
<TextBlock x:Name="thisReturnEndStation" Background="Transparent" Grid.ColumnSpan="2" Grid.RowSpan="2" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="0,20,0,0"/>
</StackPanel>
</Border>
<Border BorderBrush="White" BorderThickness="2" Grid.Column="0" Grid.ColumnSpan="6" Grid.Row="5" Grid.RowSpan="2" Margin="20">
<Border BorderBrush="White" BorderThickness="2" Grid.Column="0" Grid.ColumnSpan="6" Grid.Row="8" Grid.RowSpan="2" Margin="20">
<DataGrid Background="Transparent"
CanUserAddRows="False"
AutoGenerateColumns="False"
@ -2287,38 +2290,64 @@ FontSize="25" Width="160" Height="80" VerticalAlignment="Top" HorizontalAlignmen
</DataGrid.ColumnHeaderStyle>
</DataGrid>
</Border>
<TextBlock Text="扫描库" Grid.RowSpan="2" Foreground="White" FontSize="50" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.ColumnSpan="6"/>
<TextBlock Text="扫描退库" Grid.RowSpan="2" Foreground="White" FontSize="50" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.ColumnSpan="6"/>
<TextBlock Text="待执行CTU任务数:" Visibility="Hidden" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" HorizontalAlignment="Right" VerticalAlignment="Center" FontSize="50"/>
<TextBlock x:Name="ReturnTaskCount" Visibility="Hidden" Grid.Row="1" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="75"/>
<Button Content="执行CTU出库任务" Visibility="Hidden" Grid.Row="1" Grid.Column="3" Grid.ColumnSpan="2" Width="500" Height="100" FontSize="50" Background="#346DFF" Foreground="White" Click="ExecuteCtuTask_Click"/>
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Grid.Row="2" Grid.ColumnSpan="6">
<TextBlock Text="扫描料箱号:" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="75"/>
<TextBlock Text="扫描料箱号:" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50"/>
<Grid>
<hc:TextBox hc:InfoElement.ShowClearButton="True" x:Name="txtReturnBox" FontSize="50" LostFocus="txtReturnBox_TextChanged" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="130" Grid.Row="2" Grid.Column="3" Grid.ColumnSpan="3"/>
<Button Click="boxReturnClear_Click" HorizontalAlignment="Right" Height="100" Panel.ZIndex="1" Width="100" Margin="0,0,0,0" Grid.Column="5" Grid.Row="2">
<hc:TextBox hc:InfoElement.ShowClearButton="True" x:Name="txtReturnBox" FontSize="50" LostFocus="txtReturnBox_TextChanged" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="90" Grid.Row="2" Grid.Column="3" Grid.ColumnSpan="3"/>
<Button Click="boxReturnClear_Click" HorizontalAlignment="Right" Height="75" Panel.ZIndex="1" Width="100" Margin="0,0,0,0" Grid.Column="5" Grid.Row="2">
<Image Source="..\Resources\cancel.png"/>
</Button>
</Grid>
<Button Content="选择退库" Background="#346DFF" Grid.ColumnSpan="6" Grid.Row="1" Foreground="White" FontSize="50" Margin="100,0,0,0" Height="100" Width="400" Click="SelectReturnBtn_Click"/>
<Button Content="选择退库" Background="#346DFF" Grid.ColumnSpan="6" Grid.Row="1" Foreground="White" FontSize="50" Margin="100,0,0,0" Height="100" Width="330" Click="SelectReturnBtn_Click"/>
</StackPanel>
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Grid.Row="3" Grid.ColumnSpan="6">
<TextBlock Text="扫描条码号:" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="75"/>
<TextBlock Text="扫描条码号:" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50"/>
<Grid>
<hc:TextBox hc:InfoElement.ShowClearButton="True" x:Name="txtReturnBarCode" FontSize="50" LostFocus="txtReturnBarCode_TextChanged" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="130" Grid.Row="3" Grid.Column="3" Grid.ColumnSpan="3"/>
<Button Click="barReturnClear_Click" HorizontalAlignment="Right" Height="100" Panel.ZIndex="1" Width="100" Margin="0,0,0,0" Grid.Column="5" Grid.Row="3">
<hc:TextBox hc:InfoElement.ShowClearButton="True" x:Name="txtReturnBarCode" FontSize="50" LostFocus="txtReturnBarCode_TextChanged" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="90" Grid.Row="3" Grid.Column="3" Grid.ColumnSpan="3"/>
<Button Click="barReturnClear_Click" HorizontalAlignment="Right" Height="75" Panel.ZIndex="1" Width="100" Margin="0,0,0,0" Grid.Column="5" Grid.Row="3">
<Image Source="..\Resources\cancel.png"/>
</Button>
</Grid>
<Button Content="确认退库" Grid.Column="4" Grid.Row="5" Grid.ColumnSpan="2" Width="400" Height="100" Margin="100,0,0,0" FontSize="35" Background="#346DFF" Foreground="White" Click="ReturnRawBaseLocaltion_Click"/>
</StackPanel>
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Grid.Row="4" Grid.ColumnSpan="6">
<TextBlock Text="出库数量:" Grid.Row="4" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="75"/>
<TextBlock Width="260" Text="物料名称:" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50"/>
<Grid>
<hc:TextBox x:Name="txtReturnScan" Margin="80,0,0,0" IsReadOnly="True" FontSize="50" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="130" Grid.Row="4" Grid.Column="3" Grid.ColumnSpan="3" />
<hc:TextBox hc:InfoElement.ShowClearButton="True" IsReadOnly="True" x:Name="returnMaterialName" FontSize="50" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="90" Grid.Row="2" Grid.Column="3" Grid.ColumnSpan="3"/>
</Grid>
<Button Content="确认退库" Grid.Column="4" Grid.Row="5" Grid.ColumnSpan="2" Width="330" Height="100" Margin="100,0,0,0" FontSize="35" Background="#346DFF" Foreground="White" Click="ReturnRawBaseLocaltion_Click"/>
</StackPanel>
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Grid.Row="5" Grid.ColumnSpan="6">
<TextBlock Text="物料规格:" Width="260" Grid.Row="5" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50"/>
<Grid>
<hc:TextBox hc:InfoElement.ShowClearButton="True" IsReadOnly="True" x:Name="returnGG" FontSize="50" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="80" />
</Grid>
</StackPanel>
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Grid.Row="6" Grid.ColumnSpan="6">
<TextBlock Text="退库数量:" Grid.Row="4" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="313*"/>
<ColumnDefinition Width="467*"/>
</Grid.ColumnDefinitions>
<hc:TextBox x:Name="txtReturnScan" Margin="50,0,0,0" IsReadOnly="True" FontSize="50" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="90" Grid.ColumnSpan="2" />
</Grid>
<Button Content="小车回原点" Grid.Column="4" Grid.Row="6" Grid.ColumnSpan="2" Width="330" Height="100" Margin="100,0,0,0" FontSize="35" Background="#346DFF" Foreground="White" Click="btnBearConfirmBox_Click"/>
</StackPanel>
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Grid.Row="7" Grid.ColumnSpan="6">
<TextBlock Text="提示信息:" Grid.Row="4" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="313*"/>
<ColumnDefinition Width="467*"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="txtReturnbox" Margin="50,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center" Height="90" Grid.ColumnSpan="2" />
</Grid>
<Button Content="背负式小车捡料完成" Grid.Column="4" Grid.Row="6" Grid.ColumnSpan="2" Width="400" Height="100" Margin="100,0,0,0" FontSize="35" Background="#346DFF" Foreground="White" Click="btnBearConfirmBox_Click"/>
</StackPanel>
</Grid>
</StackPanel>
@ -2348,6 +2377,7 @@ FontSize="25" Width="160" Height="80" VerticalAlignment="Top" HorizontalAlignmen
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border BorderBrush="White" BorderThickness="2" Grid.ColumnSpan="1" Width="150" Grid.Column="4" Grid.RowSpan="2" Margin="20 0 0 0">
@ -2374,7 +2404,7 @@ FontSize="25" Width="160" Height="80" VerticalAlignment="Top" HorizontalAlignmen
</StackPanel>
</Border>
<Border BorderBrush="White" BorderThickness="2" Grid.Column="0" Grid.ColumnSpan="6" Grid.Row="6" Grid.RowSpan="2" Margin="20">
<Border BorderBrush="White" BorderThickness="2" Grid.Column="0" Grid.ColumnSpan="6" Grid.Row="7" Grid.RowSpan="2" Margin="20">
<DataGrid Style="{StaticResource DataGridStyle}"
@ -2525,10 +2555,8 @@ FontSize="25" Width="160" Height="80" VerticalAlignment="Top" HorizontalAlignmen
<TextBlock Text="物料规格:" Width="280" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50"/>
<Grid>
<hc:TextBox hc:InfoElement.ShowClearButton="True" IsReadOnly="True" x:Name="outMaterialSpecTxt" FontSize="50" LostFocus="txtOutBarCode_TextChanged" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="80" Grid.Row="3" Grid.Column="3" Grid.ColumnSpan="3"/>
</Grid>
<Button Content="背负式小车捡料完成" Grid.Column="4" Grid.Row="6" Grid.ColumnSpan="2" Width="400" Height="100" Margin="100,0,0,0" FontSize="35" Background="#346DFF" Foreground="White" Click="btnBearConfirmBox_Click"/>
</StackPanel>
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Grid.Row="4" Grid.ColumnSpan="6">
<TextBlock Text="库存:" Grid.Row="4" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50"/>
@ -2545,6 +2573,12 @@ FontSize="25" Width="160" Height="80" VerticalAlignment="Top" HorizontalAlignmen
</StackPanel>
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Grid.Row="5" Grid.ColumnSpan="6">
<TextBlock Text="备注信息:" Width="280" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50"/>
<Grid>
<hc:TextBox hc:InfoElement.ShowClearButton="True" IsReadOnly="True" x:Name="remarks" FontSize="50" LostFocus="txtOutBarCode_TextChanged" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="80" Grid.Row="3" Grid.Column="3" Grid.ColumnSpan="3"/>
</Grid>
</StackPanel>
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal" Grid.Row="6" Grid.ColumnSpan="6">
<TextBlock Text="提示信息:" Width="280" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50"/>
<Grid>
<TextBlock x:Name="scanOutMsg" hc:InfoElement.ShowClearButton="True" FontSize="50" Width="1300" HorizontalAlignment="Left" VerticalAlignment="Center" Height="80" Grid.Row="3" Grid.Column="3" Grid.ColumnSpan="4"/>

@ -127,7 +127,6 @@ namespace Khd.Core.Wpf.Form
/// <param name="e"></param>
private void FormBoard_Loaded(object sender, RoutedEventArgs e)
{
CheckVersion();
InitializeData(1);
this.WareHouseId.ItemsSource = new List<string>
{
@ -135,6 +134,10 @@ namespace Khd.Core.Wpf.Form
};
this.WarehourseId.Items.Refresh();
this.WareHouseId.SelectedIndex = 0;
if (SystemData.NeedLogin)
{
//对MenuList重新赋值
}
foreach (var item in this.TabControl.Items)
{
if (item is TabItem tabItem)
@ -151,6 +154,7 @@ namespace Khd.Core.Wpf.Form
}
}
QueryPositionCombox.SelectedIndex = 0; // 设置默认选择为 "南侧"
try
{
itemsControlItems = new ObservableCollection<SelectItemModel>();
@ -334,13 +338,12 @@ namespace Khd.Core.Wpf.Form
HandyControl.Controls.MessageBox.Error(ex.Message);
}
}
/// <summary>
/// 检查版本
/// </summary>
private void CheckVersion()
public static void CheckVersion()
{
try
{
@ -461,7 +464,7 @@ namespace Khd.Core.Wpf.Form
List<WmsRawReturn> wmsRawReturns = dbContext.WmsRawReturn.Where(t => endStationCodes.Contains(t.endStationCode))
.Where(t => t.auditStatus == "1")
.Where(t => t.executeStatus == "0" || t.executeStatus == "1")
.Where(t => t.returnAmount > t.planAmount)
.Where(t => t.planAmount > t.returnAmount)
.ToList();
List<string> list = wmsRawReturns.Select(t => t.endStationCode).ToList();
List<long?> orderIds = wmsRawReturns.Select(t => t.rawReturnId).ToList();
@ -719,6 +722,7 @@ namespace Khd.Core.Wpf.Form
this.OutTaskNumber.Items.Refresh();
});
}
GetTask();
}
catch
{
@ -821,7 +825,7 @@ namespace Khd.Core.Wpf.Form
this.OneOut.IsEnabled = true;
this.SomeOut.IsEnabled = true;
}
this.EmptyEquip.ItemsSource = SystemData.BaseEquip.Where(t => t.equipType == 20 || t.equipType == 21 || t.equipType == 19).Select(
this.EmptyEquip.ItemsSource = SystemData.BaseEquip.Where(t => t.equipType == 20 || t.equipType == 19).Select(
t => new BaseEquip
{
objid = t.objid,
@ -831,10 +835,11 @@ namespace Khd.Core.Wpf.Form
ud3 = t.ud3 == "0" ? "空" : t.ud3 == "1" ? "托盘" : t.ud3 == "2" ? "废料" : "未知",
equipNo = t.equipNo,
floorNo = t.floorNo,
containerNo = t.containerNo
containerNo = t.containerNo,
}
).OrderBy(t => t.equipNo);
this.EmptyEquip.Items.Refresh();
GetTask();
});
}
}
@ -947,38 +952,37 @@ namespace Khd.Core.Wpf.Form
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var equipCode = lba_ThrifTtitle1.Text;
var palletNo = lba_ThrifTtitle2.Text;
long? nextPointId = 0;
if (this.EquipListSelectDy.SelectedItem is BaseEquip baseEquip)
Dispatcher.Invoke(() =>
{
nextPointId = baseEquip.objid;
}
var data = dbContext.WcsTask
.WhereIf(nextPointId != 0, t => t.nextPointId == nextPointId)
.Where(t => t.IsDelete != 1)
.Where(t => t.containerNo.Contains(palletNo) && t.equipmentNo.Contains(equipCode)).ToList();
List<taskModel> taskModel = CoreMapper.Map<List<taskModel>>(data);
SelectedItem.Clear();
foreach (var item in taskModel)
{
SelectedItem.Add(item.objid, false);
if (item.nextPointId == 6)
var equipCode = lba_ThrifTtitle1.Text;
var palletNo = lba_ThrifTtitle2.Text;
long? nextPointId = 0;
if (this.EquipListSelectDy.SelectedItem is BaseEquip baseEquip)
{
item.isShow = Visibility.Visible;
nextPointId = baseEquip.objid;
}
else
var data = dbContext.WcsTask
.WhereIf(nextPointId != 0, t => t.nextPointId == nextPointId)
.Where(t => t.IsDelete != 1)
.Where(t => t.containerNo.Contains(palletNo) && t.equipmentNo.Contains(equipCode)).ToList();
List<taskModel> taskModel = CoreMapper.Map<List<taskModel>>(data);
SelectedItem.Clear();
foreach (var item in taskModel)
{
item.isShow = Visibility.Collapsed;
SelectedItem.Add(item.objid, false);
if (item.nextPointId == 6)
{
item.isShow = Visibility.Visible;
}
else
{
item.isShow = Visibility.Collapsed;
}
}
}
this.LoadMaterial0.ItemsSource = null;
this.LoadMaterial0.ItemsSource = taskModel;
this.LoadMaterial0.Items.Refresh();
//if (data.Count == 0)
//{
// HandyControl.Controls.MessageBox.Show("未查询到数据");
//}
this.LoadMaterial0.ItemsSource = null;
this.LoadMaterial0.ItemsSource = taskModel;
this.LoadMaterial0.Items.Refresh();
});
}
/// <summary>
/// 删除任务
@ -1488,6 +1492,17 @@ namespace Khd.Core.Wpf.Form
{
if (HandyControl.Controls.MessageBox.Show("是否确认关闭程序", "提示信息", MessageBoxButton.YesNo, MessageBoxImage.Information) == MessageBoxResult.Yes)
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动
p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息
p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息
p.StartInfo.RedirectStandardError = true;//重定向标准错误输出
p.StartInfo.CreateNoWindow = true;//不显示程序窗口
p.Start();//启动程序
//向cmd窗口发送输入信息
p.StandardInput.WriteLine("taskkill /f /im Khd.Core.Wpf" + "&exit");
Application.Current.Shutdown();
System.Environment.Exit(System.Environment.ExitCode);
}
@ -2256,43 +2271,58 @@ namespace Khd.Core.Wpf.Form
{
try
{
if (!string.IsNullOrEmpty(txtInBox.Text) && !string.IsNullOrEmpty(txtInBarCode.Text))
if (!string.IsNullOrEmpty(txtReturnBox.Text) && !string.IsNullOrEmpty(txtReturnBarCode.Text))
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
WmsRawReturn? wmsRawReturn = dbContext.WmsRawReturn.Where(t => t.executeStatus == "1").FirstOrDefault();
if (wmsRawReturn == null)
BaseEquip baseEquip = SystemData.BaseEquip.First(t => t.objid == 10);
WcsTask? task = dbContext.WcsTask.Where(t => t.nextPointId == baseEquip.objid).FirstOrDefault();
if (task == null)
{
HandyControl.Controls.MessageBox.Show("未查询到退库任务!");
txtReturnbox.Text = ("未查询到退库任务!");
return;
}
var material = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == txtInBarCode.Text);
var container = dbContext.WmsBaseLocation.FirstOrDefault(t => t.containerCode == txtInBox.Text && t.warehouseId == 512);
var material = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == txtReturnBarCode.Text);
if (material == null)
{
txtReturnbox.Text=("未查询到该条码内容!");
txtReturnBarCode.Text = string.Empty;
txtReturnBarCode.Focus();
return;
}
WmsRawReturn? wmsRawReturn = dbContext.WmsRawReturn
.Where(t => t.rawReturnId == task.orderId).FirstOrDefault();
if (wmsRawReturn == null)
{
txtReturnbox.Text = ("未查询到退库任务!");
return;
}
var container = dbContext.WmsBaseLocation.FirstOrDefault(t => t.containerCode == txtReturnBox.Text && t.warehouseId == 512);
List<WmsRawStock> wmsRawStocks = dbContext.WmsRawStock
.Where(t => txtInBarCode.Text == t.instockBatch)
.Where(t => txtReturnBarCode.Text == t.instockBatch)
.Where(t => t.warehouseFloor == 5 && t.warehouseId == 512).ToList();
if (wmsRawStocks.Count > 0 && material.batchFlag != "1")
{
HandyControl.Controls.MessageBox.Info($"该条码已入库!料箱号为{wmsRawStocks.First().palletInfoCode},库位号为{wmsRawStocks.First().locationCode}");
txtInBarCode.Text = string.Empty;
txtInScan.Text = string.Empty;
txtReturnbox.Text = ($"该条码已入库!料箱号为{wmsRawStocks.First().palletInfoCode},库位号为{wmsRawStocks.First().locationCode}");
txtReturnBarCode.Text = string.Empty;
txtReturnBox.Text = string.Empty;
return;
}
if (container == null)
{
HandyControl.Controls.MessageBox.Error("未查询到该容器!");
txtInBox.Text = string.Empty;
txtReturnbox.Text = ("未查询到该容器!");
txtReturnBox.Text = string.Empty;
return;
}
if (material == null)
decimal amount = 0;
try
{
HandyControl.Controls.MessageBox.Error("未查询到该条码内容!");
txtInBarCode.Text = string.Empty;
txtInScan.Text = string.Empty;
return;
amount = decimal.Parse(txtReturnScan.Text);
}
catch
{
txtReturnbox.Text = ("请输入正确的数量");
}
decimal amount = decimal.Parse(txtInScan.Text);
wmsRawReturn.returnAmount += amount;
if (wmsRawReturn.returnAmount >= wmsRawReturn.planAmount)
{
@ -2353,20 +2383,20 @@ namespace Khd.Core.Wpf.Form
}
dbContext.SaveChanges();
HandyControl.Controls.MessageBox.Success("入库成功!");
txtInBarCode.Text = string.Empty;
txtInScan.Text = string.Empty;
txtInBarCode.Focus();
txtReturnbox.Text = ("退库成功!");
txtReturnBarCode.Text = string.Empty;
txtReturnBox.Text = string.Empty;
txtReturnBarCode.Focus();
}
else
{
HandyControl.Controls.MessageBox.Info("请先扫描容器号和条码!");
txtReturnbox.Text = ("请先扫描容器号和条码!");
}
}
catch (Exception ex)
{
LogManager.Error(ex);
HandyControl.Controls.MessageBox.Error("入库失败");
txtReturnbox.Text = ("入库失败");
}
}
/// <summary>
@ -2511,6 +2541,7 @@ namespace Khd.Core.Wpf.Form
{
try
{
txtReturnbox.Text = "";
string barCode = txtReturnBarCode.Text;
if (barCode.Length < 19) return;
@ -2533,14 +2564,15 @@ namespace Khd.Core.Wpf.Form
{
txtReturnBarCode.Text = string.Empty;
txtReturnScan.Text = string.Empty;
txtReturnbox.Text = "未查询到该条码绑定的物料信息!";
txtReturnBarCode.Focus();
}
else
{
txtReturnScan.Text = (material.batchFlag == "1") ? "" : "1.00";
this.returnGG.Text = mesBaseMaterialInfo.MaterialSpec;
this.returnMaterialName.Text = mesBaseMaterialInfo.MaterialName;
if (mesBaseMaterialInfo.BatchFlag == "0")
{
txtReturnScan.IsReadOnly = true;
@ -2712,10 +2744,19 @@ namespace Khd.Core.Wpf.Form
var mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == txtOutBarCode.Text);
if (mesBaseBarcodeInfo != null)
{
var list = JsonConvert.DeserializeObject<List<string>>(baseEquip.endStationCode);
var wmsRawOutstocks = dbContext.WmsRawOutstock
.Where(t => t.materialId == mesBaseBarcodeInfo.materialId && t.realOutstockAmount < t.outstockAmount && t.saleOrderId == (mesBaseBarcodeInfo.saleOrderId == null ? 0 : mesBaseBarcodeInfo.saleOrderId) && baseEquip.endStationCode.Contains(t.endStationCode))
.ToList();
var wmsRawOutstocks = new List<WmsRawOutstock>();
List<string> list = new List<string>();
try
{
list = JsonConvert.DeserializeObject<List<string>>(baseEquip.endStationCode);
wmsRawOutstocks = dbContext.WmsRawOutstock
.Where(t => t.materialId == mesBaseBarcodeInfo.materialId && t.realOutstockAmount < t.outstockAmount && t.saleOrderId == (mesBaseBarcodeInfo.saleOrderId == null ? 0 : mesBaseBarcodeInfo.saleOrderId) && baseEquip.endStationCode.Contains(t.endStationCode))
.ToList();
}
catch
{
}
if (wmsRawOutstocks.Count > 0)
{
int index = 0;
@ -2782,7 +2823,8 @@ namespace Khd.Core.Wpf.Form
outstockPerson = "WCS",
outstockTime = DateTime.Now,
outstockWay = "2",
materialProductionDate = mesBaseBarcodeInfo.productionDate
materialProductionDate = mesBaseBarcodeInfo.productionDate,
Tips=this.remarks.Text
};
dbContext.Add(wmsProductOutstockDetail);
dbContext.Update(item);
@ -2874,6 +2916,13 @@ namespace Khd.Core.Wpf.Form
return;
}
}
scanOutMsg.Text = "出库成功!";
txtOutScan.Text = string.Empty;
txtOutBarCode.Text = string.Empty;
outMaterialSpecTxt.Text = string.Empty;
outMaterialNameTxt.Text = string.Empty;
txtOutBox.Text = string.Empty;
txtOutBox.Focus();
}
}
else
@ -4366,7 +4415,7 @@ namespace Khd.Core.Wpf.Form
}
else
{
var endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);
var endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0 && t.useFlag == 1);
if (endEquip == null)
{
HandyControl.Controls.MessageBox.Show("没有空箱库位!");
@ -4420,7 +4469,7 @@ namespace Khd.Core.Wpf.Form
}
else
{
var startEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 1 && t.emptyCount == 1);
var startEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 1 && t.emptyCount == 1 && t.useFlag == 1);
if (startEquip == null)
{
BaseEquip firstEmptyEquip = dbContext.BaseEquip.First(t => t.objid == 40);
@ -5319,6 +5368,9 @@ namespace Khd.Core.Wpf.Form
{
try
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
var baseEquips = dbContext.BaseEquip.Where(t => t.equipType == 20).OrderBy(t => t.agvPositionCode).ToList();
foreach (var item in this.LocaltionGrid.Children)
{
if (item is Grid grid)
@ -5332,6 +5384,15 @@ namespace Khd.Core.Wpf.Form
{
button.Background = string.IsNullOrEmpty(location.containerCode) ? new SolidColorBrush((Color)ColorConverter.ConvertFromString("#4789AE")) : new SolidColorBrush((Color)ColorConverter.ConvertFromString("#75F76D"));
}
else
{
BaseEquip? baseEquip = baseEquips.Where(t => t.agvPositionCode == button.Name).FirstOrDefault();
if (baseEquip != null)
{
button.Content = baseEquip.agvPositionCode + $"({baseEquip.emptyCount})";
button.Background = baseEquip.emptyCount > 0 ? new SolidColorBrush((Color)ColorConverter.ConvertFromString("#75F76D")) : new SolidColorBrush((Color)ColorConverter.ConvertFromString("#4789AE"));
}
}
}
}
}
@ -5386,6 +5447,19 @@ namespace Khd.Core.Wpf.Form
{
return;
}
List<BaseEquip> baseEquips = new List<BaseEquip>();
if (wmsBaseLocations.First().warehouseFloor == 2)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
baseEquips = dbContext.BaseEquip.Where(t => t.equipType == 20).OrderBy(t => t.agvPositionCode).ToList();
}
else if (wmsBaseLocations.First().warehouseFloor == 3)
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
baseEquips = dbContext.BaseEquip.Where(t => t.equipType == 15).OrderBy(t => t.agvPositionCode).ToList();
}
Dispatcher.Invoke(() =>
{
this.LocaltionGrid.Children.Clear();
@ -5393,6 +5467,7 @@ namespace Khd.Core.Wpf.Form
this.LocaltionGrid.ColumnDefinitions.Clear();
List<long> list = wmsBaseLocations.Select(t => t.warehouseId).Distinct().ToList();
int? column = 0;
for (var i = 0; i < list.Count; i++)
{
this.LocaltionGrid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1.0, GridUnitType.Star) });
@ -5400,7 +5475,11 @@ namespace Khd.Core.Wpf.Form
List<WmsBaseLocation> locations = wmsBaseLocations.Where(t => t.warehouseId == list[i]).ToList();
var row = locations.Max(t => t.locRow);
column = locations.Max(t => t.locColumn);
if (list[0] == 231 && i == 0)
{
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1.0, GridUnitType.Star) });
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1.0, GridUnitType.Star) });
}
for (var j = 0; j < row; j++)
{
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1.0, GridUnitType.Star) });
@ -5423,7 +5502,51 @@ namespace Khd.Core.Wpf.Form
};
button.Click += OnLocationButton_Click;
Grid.SetColumn(button, location.locColumn.Value - 1);
Grid.SetRow(button, -(location.locRow.Value - row.Value));
if (list[0] == 231)
{
Grid.SetRow(button, -(location.locRow.Value - row.Value) + 2);
for (var k = 0; k < 8; k++)
{
var button2 = new Button()
{
Content = baseEquips[k].agvPositionCode + $"({baseEquips[k].emptyCount})",
Name = baseEquips[k].agvPositionCode,
Width = 100,
Height = 50,
FontSize = 15,
Margin = new Thickness(2),
Background = baseEquips[k].emptyCount > 0 ? new SolidColorBrush((Color)ColorConverter.ConvertFromString("#75F76D")) : new SolidColorBrush((Color)ColorConverter.ConvertFromString("#4789AE")),
};
Grid.SetColumn(button2, k % 4 * 2 + 1);
Grid.SetRow(button2, -((k / 4) - 1));
Grid.SetColumnSpan(button2, 2);
grid.Children.Add(button2);
}
}
else
{
Grid.SetRow(button, -(location.locRow.Value - row.Value));
if (list[0] == 311)
{
for (var k = 0; k < 3; k++)
{
var button2 = new Button()
{
Content = baseEquips[k].agvPositionCode + $"({baseEquips[k].emptyCount})",
Name = baseEquips[k].agvPositionCode,
Width = 100,
Height = 50,
FontSize = 15,
Margin = new Thickness(2),
Background = baseEquips[k].emptyCount > 0 ? new SolidColorBrush((Color)ColorConverter.ConvertFromString("#75F76D")) : new SolidColorBrush((Color)ColorConverter.ConvertFromString("#4789AE")),
};
Grid.SetColumn(button2, k % 4 *2 +17);
Grid.SetRow(button2, -((k / 4) - 1));
Grid.SetColumnSpan(button2, 2);
grid.Children.Add(button2);
}
}
}
grid.Children.Add(button);
}
Grid.SetRow(grid, i);
@ -5520,6 +5643,7 @@ namespace Khd.Core.Wpf.Form
dbContext.SaveChanges();
}
}
}
}

@ -1,6 +1,8 @@
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Security.Authentication;
using System.Text;
using System.Threading.Tasks;
@ -14,13 +16,54 @@ namespace Khd.Core.Wpf
string retsult = HttpPost("http://" + ip + ":" + port + "/" + url, message, contentType, 30, null);
return retsult;
}
public static string SendHttpsPostMessage(string ip, string url, string message, string contentType = "application/json")
{
string retsult = HttpsPost("https://" + ip + "/" + url, message, contentType, 30, null);
return retsult;
}
public static string SendHttpsGetMessage(string ip, string url)
{
string retsult = HttpGet("http://" + ip + "/" + url);
return retsult;
}
public static string SendGetMessage(string ip, int port, string url)
{
string retsult = HttpGet("http://" + ip + ":" + port + "/" + url);
return retsult;
}
/// <summary>
/// 发起POST同步请求
///
/// </summary>
/// <param name="url"></param>
/// <param name="postData"></param>
/// <param name="contentType">application/xml、application/json、application/text、application/x-www-form-urlencoded</param>
/// <param name="headers">填充消息头</param>
/// <returns></returns>
public static string HttpsPost(string url, string postData = null, string contentType = null, int timeOut = 30, Dictionary<string, string> headers = null)
{
HttpClientHandler clientHandler = new HttpClientHandler();
clientHandler.ServerCertificateCustomValidationCallback += (sender, cert, chain, sslPolicyErrors) => { return true; };
clientHandler.SslProtocols = SslProtocols.None;
postData = postData ?? "";
using (HttpClient client = new HttpClient(clientHandler))
{
if (headers != null)
{
foreach (var header in headers)
client.DefaultRequestHeaders.Add(header.Key, header.Value);
}
using (HttpContent httpContent = new StringContent(postData, Encoding.UTF8))
{
if (contentType != null)
httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType);
HttpResponseMessage response = client.PostAsync(url, httpContent).Result;
return response.Content.ReadAsStringAsync().Result;
}
}
}
/// <summary>
/// 发起POST同步请求
@ -82,7 +125,48 @@ namespace Khd.Core.Wpf
}
}
}
/// <summary>
/// 发起GET同步请求
/// </summary>
/// <param name="url"></param>
/// <param name="headers"></param>
/// <param name="contentType"></param>
/// <returns></returns>
public static string HttpsGet(string url, Dictionary<string, string> headers = null)
{
HttpClientHandler clientHandler = new HttpClientHandler();
clientHandler.ServerCertificateCustomValidationCallback += (sender, cert, chain, sslPolicyErrors) => { return true; };
clientHandler.SslProtocols = SslProtocols.None;
using (HttpClient client = new HttpClient(clientHandler))
{
if (headers != null)
{
foreach (var header in headers)
client.DefaultRequestHeaders.Add(header.Key, header.Value);
}
HttpResponseMessage response = client.GetAsync(url).Result;
return response.Content.ReadAsStringAsync().Result;
}
}
/// <summary>
/// 发起GET同步请求
/// </summary>
/// <param name="url"></param>
/// <param name="headers"></param>
/// <param name="contentType"></param>
/// <returns></returns>
public static string HttpsGet(string url, string token)
{
HttpClientHandler clientHandler = new HttpClientHandler();
clientHandler.ServerCertificateCustomValidationCallback += (sender, cert, chain, sslPolicyErrors) => { return true; };
clientHandler.SslProtocols = SslProtocols.None;
using (HttpClient client = new HttpClient(clientHandler))
{
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
HttpResponseMessage response = client.GetAsync(url).Result;
return response.Content.ReadAsStringAsync().Result;
}
}
/// <summary>
/// 发起GET同步请求
/// </summary>

@ -483,6 +483,9 @@
<None Update="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Login.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<Using Include="Microsoft.EntityFrameworkCore" />

@ -30,10 +30,10 @@
<Grid.RowDefinitions>
<RowDefinition Height="50" />
<RowDefinition Height="20" />
<RowDefinition/>
<RowDefinition Height="50"/>
<RowDefinition />
<RowDefinition Height="100"/>
</Grid.RowDefinitions>
<Label Grid.Row="0" Content="用户登录" Grid.ColumnSpan="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" HorizontalContentAlignment="Center" Background="#1f1c31" VerticalContentAlignment="Center" FontSize="35" FontWeight="Bold" Foreground="White" MouseLeftButtonDown="ShuBiaoShuangJi" />
<Label Grid.Row="0" Content="用户登录" Grid.ColumnSpan="3" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" HorizontalContentAlignment="Center" Background="#1f1c31" VerticalContentAlignment="Center" FontSize="35" FontWeight="Bold" Foreground="White" MouseLeftButtonDown="ShuBiaoShuangJi" Height="50" />
<Grid Grid.Row="2" Grid.Column="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="4*"/>
@ -42,20 +42,11 @@
<Grid.RowDefinitions>
<RowDefinition Height="75" />
<RowDefinition Height="75"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Label Content="员工账号:" Foreground="White" x:Name="lblUserNm" Grid.Row="0" Grid.Column="0" Style="{StaticResource searchLabel}" HorizontalAlignment="Center" Height="36" Width="94" />
<TextBox x:Name="txtUserNm" TabIndex="0" Grid.Row="0" Grid.Column="1" Style="{StaticResource searchText}" Text="" Height="28" />
<Label x:Name="lblPwd" Content="登录密码:" Grid.Column="0" Style="{StaticResource searchLabel}" HorizontalAlignment="Center" Height="33" Width="94" Margin="0" Grid.Row="1" />
<PasswordBox x:Name="txtPwd" Grid.Column="1" Style="{StaticResource searchText}" Password="" Height="24" Margin="0" Grid.Row="1" />
<Grid Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<!--<RadioButton x:Name="rdoUserLogin" Focusable="False" Grid.Row="0" Grid.Column="0" Foreground="White" FontSize="26" Content="账号登陆" HorizontalAlignment="Center" GroupName="LoginGroup" VerticalAlignment="Center" Checked="rdoUserLogin_Checked" BorderThickness="10" IsChecked="True" Visibility="Hidden" />-->
<!--<RadioButton x:Name="rdoCardLogin" Focusable="False" Grid.Row="0" Grid.Column="1" FontSize="26" Foreground="White" Content="打卡登陆" HorizontalAlignment="Center" GroupName="LoginGroup" VerticalAlignment="Center" Checked="rdoCardLogin_Checked" BorderThickness="10" Visibility="Hidden"/>-->
</Grid>
<TextBox x:Name="txtUserNm" TabIndex="0" Grid.Row="0" Grid.Column="1" Style="{StaticResource TextBoxBaseBaseStyle}" Height="40" Text="" FontSize="16"/>
<Label x:Name="lblPwd" Content="登录密码:" Grid.Column="0" Style="{StaticResource searchLabel}" HorizontalAlignment="Center" Width="94" Margin="0" Grid.Row="1" />
<PasswordBox x:Name="txtPwd" Grid.Column="1" Style="{StaticResource PasswordBoxExtendBaseStyle}" Height="40" FontSize="16" Password="" Margin="0" Grid.Row="1" />
</Grid>
<Grid Grid.Row="3" Grid.ColumnSpan="3">
@ -63,8 +54,8 @@
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Grid.Row="0" Grid.Column="0" Focusable="False" Foreground="#FFFFFFFF" x:Name="btnSubmit" TabIndex="0" Content="提交" HorizontalAlignment="Center" VerticalAlignment="Center" Background="#385492" Width="129" Height="40" Click="btnSubmit_Click"/>
<Button Grid.Row="0" Grid.Column="1" Foreground="#FFFFFFFF" Content="取消" HorizontalAlignment="Center" VerticalAlignment="Center" Background="#385492" Width="121" Height="40" Click="Button_Click_1"/>
<Button Grid.Row="0" Grid.Column="0" Focusable="False" Foreground="#FFFFFFFF" x:Name="btnSubmit" TabIndex="0" Content="提交" HorizontalAlignment="Center" VerticalAlignment="Center" Background="#385492" Width="129" Height="40" Click="btnSubmit_Click"/>
<Button Grid.Row="0" Grid.Column="1" Foreground="#FFFFFFFF" Content="取消" HorizontalAlignment="Center" VerticalAlignment="Center" Background="#385492" Width="121" Height="40" Click="Button_Click_1"/>
</Grid>
</Grid>
</Window>

@ -1,14 +1,17 @@
using Khd.Core.EntityFramework;
using Khd.Core.Domain.Auth;
using Khd.Core.EntityFramework;
using Khd.Core.Wpf.Form;
using Khd.Core.Wpf.TaskForm;
using Masuit.Tools.Logging;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using System;
using System.Reflection;
using System.Windows;
using System.Windows.Input;
using MessageBox = HandyControl.Controls.MessageBox;
namespace Khd.Core.Wpf
{
/// <summary>
@ -20,7 +23,7 @@ namespace Khd.Core.Wpf
public LoginPage()
{
InitializeComponent();
this.Hide();
// 通过进程名称查找进程
bool ret;
System.Threading.Mutex mutex = new System.Threading.Mutex(true, $"Khd.Core.Wpf", out ret);
@ -28,8 +31,13 @@ namespace Khd.Core.Wpf
{
IHost host = CreateHostBuilder(null).Build();
_host = host;
FormBoardT mainWindow = new FormBoardT(_host);
mainWindow.Show();
FormBoardT.CheckVersion();
if (!SystemData.NeedLogin)
{
this.Hide();
FormBoardT mainWindow = new FormBoardT(_host);
mainWindow.Show();
}
}
else
{
@ -41,8 +49,15 @@ namespace Khd.Core.Wpf
{
try
{
//FormBoard mainWindow = new FormBoard();
//mainWindow.Show();
if (!SystemData.NeedLogin)
{
FormBoardT mainWindow = new FormBoardT(_host);
mainWindow.Show();
}
else
{
}
}
catch (Exception ex)
{
@ -62,7 +77,7 @@ namespace Khd.Core.Wpf
{
try
{
//Application.Current.Shutdown();
Application.Current.Shutdown();
}
catch (Exception ex)
{
@ -80,7 +95,52 @@ namespace Khd.Core.Wpf
private void btnSubmit_Click(object sender, RoutedEventArgs e)
{
//using var s
try
{
var user = new
{
username = txtUserNm.Text,
password = txtPwd.Password
};
string msg = HttpHelper.SendHttpsPostMessage("172.16.12.100", "prod-api/auth/pdaLogin", JsonConvert.SerializeObject(user));
var message = JsonConvert.DeserializeObject<ReponseMessage<ToeknMessage>>(msg);
if (message.code == "200")
{
this.Hide();
string menuMsg = HttpHelper.HttpsGet("https://172.16.12.100/prod-api/system/menu/getWcsRouters", message.data.access_token);
var menu = JsonConvert.DeserializeObject<ReponseMessage<List<SysMenu>>>(menuMsg);
if (menu.code == "200")
{
List<string> list = menu.data.Select(t => t.MenuName).ToList();
//对list和SystemData.MenuList取交集
SystemData.MenuList = list.Intersect(SystemData.MenuList).ToList();
}
FormBoardT mainWindow = new FormBoardT(_host);
mainWindow.Show();
}
else
{
MessageBox.Show(message.msg);
}
}
catch
{
this.Hide();
FormBoardT mainWindow = new FormBoardT(_host);
mainWindow.Show();
}
}
private class ReponseMessage<T>
{
public string code { get; set; }
public string msg { get; set; }
public T data { get; set; }
}
private class ToeknMessage
{
public string access_token { get; set; }
public long expires_in { get; set; }
}
}
}

@ -84,7 +84,8 @@ namespace Khd.Core.Wpf
public static List<MesBaseMaterialInfo> MesBaseMaterialInfo { get; set; }
public static string ProcessName { get; internal set; }
public static string VerSion { get; internal set; } = "0.0.0.0";
public static List<string> MenuList { get; internal set; }
public static List<string> MenuList { get; internal set; }=new List<string>();
public static bool NeedLogin { get; set; } = false;
public static List<BaseDictionary> BaseDictionary = new List<BaseDictionary>();
public static List<PlcConfig> PlcConfigs = new List<PlcConfig>();
@ -110,7 +111,7 @@ namespace Khd.Core.Wpf
if (wmsBaseLocation.locDeep == 2)
{
WmsBaseLocation? wmsLocation = dbContext.WmsBaseLocation.Where(t => t.locDeep == 1 && t.locRow == wmsBaseLocation.locRow && t.locColumn == (wmsBaseLocation.locColumn % 2 == 0 ? wmsBaseLocation.locColumn - 1 : wmsBaseLocation.locColumn + 1)).FirstOrDefault();
if (wmsLocation != null&&wmsLocation.locationStatus!="3")
if (wmsLocation != null && wmsLocation.locationStatus != "3")
{
wmsLocation.locationStatus = "8";
wmsLocation.ExceptionDesc = "外侧库位异常导致内测库位异常";

@ -96,6 +96,8 @@ namespace Khd.Core.Wpf.TaskForm
if (_isOut == 4)
{
_endStationCodes= endStationCodes;
this.endStationCode.ItemsSource = _endStationCodes;
return;
}
using var scope = _host.Services.CreateScope();
var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();

@ -5,7 +5,7 @@
//khd
"DefaultConnection": "server=172.16.12.100;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khdrkjy2024...;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True"
//"DefaultConnection": "server=175.27.215.92;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khd2024;charset='utf8';persistsecurityinfo=True;SslMode=none;Allow User Variables=True"
// "DefaultConnection": "server=localhost;port=3306;database=jyhb;uid=root;pwd=root;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True"
// "DefaultConnection": "server=localhost;port=3306;database=jyhb;uid=root;pwd=root;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True"
},
"PlcConfigs": [
{
@ -64,7 +64,7 @@
"废料区管理",
"一楼接驳位",
"PLC信息",
"Agv信息",
"Agv信息"
//"权限控制"
]

Loading…
Cancel
Save