diff --git a/src/Khd.Core.Application/WcsTaskApplication.cs b/src/Khd.Core.Application/WcsTaskApplication.cs index 3ec2355..eb34f6a 100644 --- a/src/Khd.Core.Application/WcsTaskApplication.cs +++ b/src/Khd.Core.Application/WcsTaskApplication.cs @@ -5,6 +5,7 @@ using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Masuit.Tools; using Masuit.Tools.Logging; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json; using System; @@ -55,7 +56,7 @@ namespace Khd.Core.Application ReponseagvCallbackDto reponseagvCallbackDto = new ReponseagvCallbackDto(); try { - _dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + _dbContext.ChangeTracker.Clear(); WcsTask wcsTask = _dbContext.WcsTask.FirstOrDefault(t => t.taskCode == agvCallbackDto.taskCode); if (wcsTask != null) { @@ -64,7 +65,7 @@ namespace Khd.Core.Application if (agvCallbackDto.method.ToLower() == "start") { wcsTask.taskStatus = 2; - _dbContext.WcsTask.Update(wcsTask); + _dbContext.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2 }); _dbContext.SaveChanges(); reponseagvCallbackDto.code = "0"; @@ -73,7 +74,7 @@ namespace Khd.Core.Application if (agvCallbackDto.method.ToLower() == "con") { wcsTask.taskStatus = 4; - _dbContext.WcsTask.Update(wcsTask); + _dbContext.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4 }); _dbContext.SaveChanges(); reponseagvCallbackDto.code = "0"; @@ -84,7 +85,7 @@ namespace Khd.Core.Application { wcsTask.taskStatus = 3; - _dbContext.WcsTask.Update(wcsTask); + _dbContext.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 3 }); _dbContext.SaveChanges(); reponseagvCallbackDto.code = "0"; @@ -97,7 +98,7 @@ namespace Khd.Core.Application { wcsTask.taskStatus = 5; - _dbContext.WcsTask.Update(wcsTask); + _dbContext.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 5 }); _dbContext.SaveChanges(); reponseagvCallbackDto.code = "0"; @@ -106,7 +107,7 @@ namespace Khd.Core.Application else { wcsTask.taskStatus = 6; - _dbContext.WcsTask.Update(wcsTask); + _dbContext.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 6 }); _dbContext.SaveChanges(); reponseagvCallbackDto.code = "0"; @@ -160,7 +161,7 @@ namespace Khd.Core.Application AgvCompeletedResponse agvCompeletedResponse = new AgvCompeletedResponse(); try { - _dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + _dbContext.ChangeTracker.Clear(); BaseEquip baseEquip = _dbContext.BaseEquip.FirstOrDefault(t => t.equipNo == agvCompeletedRequest.endStationCode); if (baseEquip != null) { @@ -174,7 +175,7 @@ namespace Khd.Core.Application if (wcsTask.taskType != 48 && wcsTask.taskStatus != 0) { wcsTask.taskStatus = 7; - _dbContext.WcsTask.Update(wcsTask); + _dbContext.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 }); _dbContext.SaveChanges(); agvCompeletedResponse.code = "0"; @@ -184,7 +185,7 @@ namespace Khd.Core.Application else if (wcsTask.taskStatus != 0) { wcsTask.taskStatus = 4; - _dbContext.WcsTask.Update(wcsTask); + _dbContext.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 }); _dbContext.SaveChanges(); agvCompeletedResponse.code = "0"; @@ -227,7 +228,7 @@ namespace Khd.Core.Application AgvCompeletedResponse compeletedResponse = new AgvCompeletedResponse(); try { - _dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + _dbContext.ChangeTracker.Clear(); var wcsTask = _dbContext.WcsTask .Where(t => t.taskType == 47) .Where(t => t.materialId == taskContinue.materialId) @@ -235,7 +236,7 @@ namespace Khd.Core.Application if (wcsTask != null) { wcsTask.useFlag = 1; - _dbContext.WcsTask.Update(wcsTask); + _dbContext.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(a => new WcsTaskLog { useFlag = 1 }); _dbContext.SaveChanges(); compeletedResponse.code = "0"; @@ -266,7 +267,7 @@ namespace Khd.Core.Application AgvCompeletedResponse compeletedResponse = new AgvCompeletedResponse(); try { - _dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + _dbContext.ChangeTracker.Clear(); WcsTask wcsTask = _dbContext.WcsTask .Where(t => t.taskType == 28) .Where(t => t.endPointNo == taskReturn.endStationCode) @@ -274,7 +275,7 @@ namespace Khd.Core.Application if (wcsTask != null) { wcsTask.useFlag = 1; - _dbContext.WcsTask.Update(wcsTask); + _dbContext.Update(wcsTask); _dbContext.WcsTask.Where(t => t.objid == wcsTask.objid).Update(a => new WcsTask { useFlag = 1 }); _dbContext.SaveChanges(); compeletedResponse.code = "0"; @@ -300,8 +301,7 @@ namespace Khd.Core.Application ReponseagvCallbackDto reponseagvCallbackDto = new ReponseagvCallbackDto(); try { - _dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); - + _dbContext.ChangeTracker.Clear(); WcsTask wcsTask = _dbContext.WcsTask.FirstOrDefault(t => t.taskCode == agvCallbackDto.taskCode); if (wcsTask != null) { @@ -310,7 +310,7 @@ namespace Khd.Core.Application if (agvCallbackDto.method.ToLower() == "start") { wcsTask.taskStatus = 2; - _dbContext.WcsTask.Update(wcsTask); + _dbContext.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2 }); _dbContext.SaveChanges(); reponseagvCallbackDto.code = "0"; @@ -319,7 +319,7 @@ namespace Khd.Core.Application if (agvCallbackDto.method.ToLower() == "con") { wcsTask.taskStatus = 4; - _dbContext.WcsTask.Update(wcsTask); + _dbContext.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4 }); _dbContext.SaveChanges(); reponseagvCallbackDto.code = "0"; @@ -331,7 +331,7 @@ namespace Khd.Core.Application if (wcsTask.taskStatus > 3) { wcsTask.taskStatus = 5; - _dbContext.WcsTask.Update(wcsTask); + _dbContext.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 5 }); _dbContext.SaveChanges(); reponseagvCallbackDto.code = "0"; @@ -340,7 +340,7 @@ namespace Khd.Core.Application else { wcsTask.taskStatus = 3; - _dbContext.WcsTask.Update(wcsTask); + _dbContext.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 3 }); _dbContext.SaveChanges(); reponseagvCallbackDto.code = "0"; @@ -351,7 +351,7 @@ namespace Khd.Core.Application if (agvCallbackDto.method.ToLower() == "end") { wcsTask.taskStatus = 7; - _dbContext.WcsTask.Update(wcsTask); + _dbContext.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 }); _dbContext.SaveChanges(); reponseagvCallbackDto.code = "0"; @@ -376,7 +376,7 @@ namespace Khd.Core.Application ReponseMessage reponseMessage = new ReponseMessage(); try { - _dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + _dbContext.ChangeTracker.Clear(); WmsRawOutstock wmsRawOutstock = _dbContext.WmsRawOutstock.FirstOrDefault(t => t.rawOutstockId == Convert.ToInt64(callMaterial.rawOutstockId)); if (wmsRawOutstock != null) { @@ -434,7 +434,7 @@ namespace Khd.Core.Application ReponseMessage reponseMessage = new ReponseMessage(); try { - _dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + _dbContext.ChangeTracker.Clear(); bool hasTask = _dbContext.WcsTask.Where(t => t.taskType == 41).Any(); if (!hasTask) { @@ -504,7 +504,7 @@ namespace Khd.Core.Application { try { - _dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + _dbContext.ChangeTracker.Clear(); var baseEquip = _dbContext.BaseEquip.FirstOrDefault(x => x.objid == 11); var executeTask = new { diff --git a/src/Khd.Core.Wcs/Khd.Core.Wcs.csproj b/src/Khd.Core.Wcs/Khd.Core.Wcs.csproj index 8fa2dec..b588c47 100644 --- a/src/Khd.Core.Wcs/Khd.Core.Wcs.csproj +++ b/src/Khd.Core.Wcs/Khd.Core.Wcs.csproj @@ -44,6 +44,7 @@ + diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs index 0490385..4759f26 100644 --- a/src/Khd.Core.Wcs/MainCentralControl.cs +++ b/src/Khd.Core.Wcs/MainCentralControl.cs @@ -46,7 +46,6 @@ namespace Khd.Core.Wcs StaticData.BaseEquip = dbContext.BaseEquip.ToList();//设备信息 StaticData.BaseDictionary = dbContext.BaseDictionary.ToList();//字典表,Agv任务模板 StaticData.DmsBaseAlarmRuleList = dbContext.DmsBaseAlarmRule.ToList(); - foreach (var plcConfig in StaticData.PlcConfigs) { if (!StaticData.PlcDic.Any(t => t.Key == plcConfig.Code)) @@ -122,6 +121,6 @@ namespace Khd.Core.Wcs logger.Error(ex.Message + "\n" + ex.StackTrace); } } - + } } diff --git a/src/Khd.Core.Wcs/Program.cs b/src/Khd.Core.Wcs/Program.cs index b00d3c4..444d5e7 100644 --- a/src/Khd.Core.Wcs/Program.cs +++ b/src/Khd.Core.Wcs/Program.cs @@ -98,6 +98,6 @@ internal class Program .ConfigureServices((_, services) => { services.AddDbContext(options => - options.UseMySql(ConnectionStrings.ConnectionString, new MySqlServerVersion(new Version(8, 0, 31))), ServiceLifetime.Transient); + options.UseMySql(ConnectionStrings.ConnectionString, new MySqlServerVersion(new Version(8, 0, 31))), ServiceLifetime.Scoped); }); } diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs index 4547abf..cac3ba6 100644 --- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs +++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs @@ -40,6 +40,11 @@ namespace Khd.Core.Wcs.Wcs //createRemoveThread.Name = "CreateRemoveLogic"; //createRemoveThread.Start(); + var moveThread = new Thread(MoveThreadLogic); + moveThread.IsBackground = true; + moveThread.Name = "MoveThreadLogic"; + moveThread.Start(); + // 叫空托盘 3-2楼 var createEmtpyThread = new Thread(CreateEmptyLoic); createEmtpyThread.IsBackground = true; @@ -99,6 +104,91 @@ namespace Khd.Core.Wcs.Wcs _logger.Info("出库任务监听启动成功"); } + private void MoveThreadLogic(object? obj) + { + using var scope = _host.Services.CreateScope(); + using var dbContext = scope.ServiceProvider.GetRequiredService(); + BaseEquip secondAgv = StaticData.BaseEquip.First(t => t.objid == 8); + BaseEquip thirdAgv = StaticData.BaseEquip.First(t => t.objid == 9); + BaseEquip fiveAgv = StaticData.BaseEquip.First(t => t.objid == 28); + List wareHouseIds = new List + { + 231,311,511,531 + }; + while (true) + { + try + { + dbContext.ChangeTracker.Clear(); + List wmsMoves = dbContext.WmsMove.Where(t => t.AuditStatus == "1" && t.ExecuteStatus == "0") + .Where(t => t.OperationType == "1").Where(t => wareHouseIds.Contains(t.WarehouseId)).ToList(); + foreach (var item in wmsMoves) + { + BaseEquip agvEquip; + int staticTask; + if (item.WarehouseId == 231) + { + agvEquip = secondAgv; + staticTask = StaticTaskType.SecondRemove; + } + else if (item.WarehouseId == 311) + { + agvEquip = thirdAgv; + staticTask = StaticTaskType.ThirdRemove; + } + else + { + agvEquip = fiveAgv; + staticTask = StaticTaskType.FiveRemove; + } + bool hasTask = dbContext.WcsTask.Where(t => t.useFlag == 1 && t.nextPointId == agvEquip.objid).Any(); + if (!hasTask) + { + WmsBaseLocation? wmslocation = dbContext.WmsBaseLocation.FirstOrDefault(t => t.locationCode == item.OriLocationCode); + WmsBaseLocation? toLocation = dbContext.WmsBaseLocation.FirstOrDefault(t => t.locationCode == item.TargetLocationCode); + if (wmslocation != null && toLocation != null) + { + var RemoveTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.MoveId, + taskType = staticTask, + containerNo = wmslocation.containerCode, + createBy = "WCS", + createTime = DateTime.Now.AddSeconds(-10), + taskStatus = 0, + currPointId = wmslocation.locationId, + currPointNo = wmslocation.locationCode, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = toLocation.locationId, + endPointNo = toLocation.locationCode, + equipmentNo = agvEquip.equipNo, + useFlag = 1, + qty = 1 + }; + WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); + SystemData.LockOutLocation(toLocation, dbContext); + SystemData.LockOutLocation(wmslocation, dbContext); + dbContext.Add(RemoveTask); + dbContext.Add(wcsTaskLog); + item.ExecuteStatus = "1"; + item.BeginTime = DateTime.Now; + dbContext.Update(item); + dbContext.SaveChanges(); + Console.WriteLine(DateTime.Now + $":创建移库任务成功:{item.OriLocationCode}--{item.TargetLocationCode}"); + } + } + } + } + catch + { + + } + Thread.Sleep(5000); + } + } + private void CreateEmptyLoic(object? obj) { using var scope = _host.Services.CreateScope(); @@ -109,28 +199,24 @@ namespace Khd.Core.Wcs.Wcs try { bool create = false; - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); var ids = dbContext.BaseEquip.Where(t => t.equipType == 20).Select(t => t.objid).ToList(); bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == 2 || t.endPointId == 36 || ids.Contains(t.currPointId.Value)).Any(); if (!hasTask) { - int thirdTray = dbContext.BaseEquip - .Where(t => t.equipType == 15) - .Where(t => t.useFlag == 1) - .Where(t => t.emptyCount == SystemData.maxTray).Count(); int thirdBTray = dbContext.BaseEquip .Where(t => t.equipType == 15) .Where(t => t.emptyCount > 0).Count(); List baseEquips = dbContext.BaseEquip.Where(t => t.useFlag == 1).Where(t => t.equipType == 20).ToList(); int emptyCount = baseEquips.Where(t => t.emptyCount == 0).Count(); - int maxCount = baseEquips.Where(t => t.emptyCount == SystemData.maxTray).Count(); - if (thirdTray > 0) + int emptyC = baseEquips.Where(t => t.emptyCount > 1).Count(); + if (thirdBTray > 0) { - if (emptyCount > 2 && thirdTray >= 2) + if (emptyCount > 2 && thirdBTray >= 2) { create = true; } - if (emptyCount > 6 && thirdBTray >= 1) + if (emptyC <= 1 && emptyCount >= 1 && thirdBTray >= 1) { create = true; } @@ -197,7 +283,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); var CanRemoveWmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.locationStatus == "7").ToList(); List locationCodes = CanRemoveWmsBaseLocations.Select(t => t.locationCode).ToList(); List CanRemoveWmsProductStocks = dbContext.WmsProductStock.Where(t => locationCodes.Contains(t.locationCode)).ToList(); @@ -447,8 +533,8 @@ namespace Khd.Core.Wcs.Wcs { lock (SystemData.FiveTaskLock) { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); - BaseEquip baseEquip = dbContext.BaseEquip.AsNoTracking().First(t => t.objid == 29); + dbContext.ChangeTracker.Clear(); + BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 29); if (baseEquip.emptyCount == 1) { WcsTask? wcsTask = dbContext.WcsTask.Where(t => t.nextPointId == 28).FirstOrDefault(); @@ -593,7 +679,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); bool hasTask = dbContext.WcsTask.Where(t => t.nextPointId == 9).Where(t => t.useFlag == 1).Any(); if (!hasTask) { @@ -636,7 +722,7 @@ namespace Khd.Core.Wcs.Wcs try { bool isCreate = false; - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); bool canCreate = dbContext.WcsTask.Where(t => t.nextPointId == 9) .Where(t => t.useFlag == 1) .Where(t => t.taskStatus <= 6).Any(); @@ -846,7 +932,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 10); if (baseEquip.IsOut == 2 && !string.IsNullOrEmpty(baseEquip.endStationCode)) { @@ -911,7 +997,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); bool task = dbContext.WcsTask.Where(t => t.nextPointId == 28 && t.useFlag == 1 && t.taskStatus <= 5).Any(); if (!task) { @@ -1017,7 +1103,7 @@ namespace Khd.Core.Wcs.Wcs { lock (SystemData.ThirdTaskLock) { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); bool task = dbContext.WcsTask.Where(t => t.nextPointId == 9 && t.taskStatus <= 5).Any(); if (!task) { @@ -1325,7 +1411,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 10); if (!string.IsNullOrEmpty(baseEquip.endStationCode) && baseEquip.ud3 == "1") @@ -1401,7 +1487,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 5); if (lineEquip.equipStatus == 0) { @@ -1742,7 +1828,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 2); if (lineEquip.equipStatus == 0) { @@ -2023,7 +2109,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); //原材料出库记录 var rawOutStock = dbContext.WmsRawOutstock diff --git a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs index 9ec9bf7..453f72b 100644 --- a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs +++ b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs @@ -7,6 +7,7 @@ using Khd.Core.Library.Mapper; using Khd.Core.Plc.S7; using Khd.Core.Wcs.Global; using Masuit.Tools; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Z.EntityFramework.Plus; @@ -187,7 +188,7 @@ namespace Khd.Core.Wcs.Wcs _logger.Error(ex.Message + "\n" + ex.StackTrace); } } - + Thread.Sleep(1000); } } @@ -202,7 +203,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); var linesignal = StaticData.PlcDic[0].Read(this.linesignal01.plcpointAddress); int taskCount = dbContext.WcsTask.Where(t => t.nextPointId == 6 && t.taskStatus > 0 && t.endPointId == 1).Count(); int firstFloorCount = dbContext.WcsTask.Where(t => t.currPointId == 1).Count(); @@ -285,7 +286,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());//上次查出1,不加这行,数据库实际2,查出1 + dbContext.ChangeTracker.Clear();//上次查出1,不加这行,数据库实际2,查出1 var RFID001Value = StaticData.PlcDic[0].ReadRFID(this.RFID001.plcpointAddress); //一楼RFID 读 var linesignal01Value = StaticData.PlcDic[0].Read(this.linesignal01.plcpointAddress); //到位信号 读 //正常读到plc值 @@ -523,7 +524,6 @@ namespace Khd.Core.Wcs.Wcs var targetfloor06Value = StaticData.PlcDic[0].Read(this.targetfloor06.plcpointAddress); //提升机目的楼层 写 var hoisterStatusValue = StaticData.PlcDic[0].Read(this.hoisterStatus.plcpointAddress); //提升机目的楼层 写 var reserialno06 = StaticData.PlcDic[0].Read(this.reserialno06.plcpointAddress); //反馈流水号 - _logger.Info($"MES开启?{mesCloseValue},提升机自动状态?{hoisterStatusValue},提升机流水号?{serialno06Value},提升机状态?{equipstate06Value},提升机货物到位状态?{hoisterTrayIn06Value},提升机当前楼层?{currentfloor06Value},提升机目的楼层?{targetfloor06Value},反馈流水号?{reserialno06}"); if (mesCloseValue != null && hoisterStatusValue != null && Convert.ToInt32(hoisterStatusValue) == 1 && Convert.ToInt32(mesCloseValue) == 0) { //正常读到plc值 @@ -532,7 +532,7 @@ namespace Khd.Core.Wcs.Wcs //提升机空闲 if (Convert.ToInt32(equipstate06Value) == 0) { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); var wcsTasks = dbContext.WcsTask.Where(t => t.nextPointId == T01 && t.taskStatus < 5) .OrderBy(t => t.ud1).OrderBy(t => t.createTime).ToList(); foreach (var wcsTask in wcsTasks) diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs index 1d8ccf6..37d9566 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs @@ -9,6 +9,7 @@ using Khd.Core.Plc.S7; using Khd.Core.Wcs.Global; using Masuit.Tools; using Microsoft.AspNetCore.Razor.Language; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Newtonsoft.Json; @@ -54,7 +55,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); var taskList = dbContext.WcsTask .Where(t => t.useFlag == 1) .Where(t => t.IsDelete == 0 || t.IsDelete == null) @@ -419,6 +420,7 @@ 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(); @@ -429,7 +431,7 @@ namespace Khd.Core.Wcs.Wcs } else if (wmsRawStock == null) { - var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == item.currPointNo); + wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == item.currPointNo); if (wmsProductStock != null) { wmsProductStock.locationCode = item.endPointNo; @@ -466,32 +468,45 @@ namespace Khd.Core.Wcs.Wcs dbContext.Remove(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 }); #region 插入移库记录 - WmsMove 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; - + 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 = (long)wmsRawStock.materialId; + wmsMoveDetail.MaterialId = wmsRawStock == null ? (long)wmsProductStock.productId : (long)wmsRawStock.materialId; wmsMoveDetail.LocationCode = toLocation.locationCode; wmsMoveDetail.PlanAmount = 1; wmsMoveDetail.RealInstockAmount = 1; @@ -503,7 +518,6 @@ namespace Khd.Core.Wcs.Wcs wmsMoveDetail.UpdateBy = "WCS"; wmsMoveDetail.UpdateDate = DateTime.Now; - dbContext.WmsMove.Add(wmsMove); dbContext.WmsMoveDetail.Add(wmsMoveDetail); #endregion @@ -613,7 +627,7 @@ namespace Khd.Core.Wcs.Wcs dbContext.Update(wmsBaseLocation); dbContext.WmsRawStock.Where(t => t.locationCode == wmsBaseLocation.locationCode).Delete(); - dbContext.WcsTask.Remove(item); + dbContext.Remove(item); dbContext.SaveChanges(); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 }); SystemData.SendPlcLocation(wmsBaseLocation); @@ -673,7 +687,7 @@ namespace Khd.Core.Wcs.Wcs dbContext.Update(startEquip); dbContext.Add(wmsProductStock); dbContext.Update(wmsBaseLocation); - dbContext.WcsTask.Remove(item); + dbContext.Remove(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 }); dbContext.SaveChanges(); //} @@ -847,7 +861,7 @@ namespace Khd.Core.Wcs.Wcs // } // if (wmsRawInstocks.Count > 0) // { - // dbContext.WmsRawInstock.AddRange(wmsRawInstocks); + // dbContext.AddRange(wmsRawInstocks); // } //} //else diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs index edcf08e..0116820 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs @@ -49,7 +49,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); var taskList = dbContext.WcsTask .Where(t => t.IsDelete == 0 || t.IsDelete == null) .Where(t => t.nextPointId == agvID) diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs index ef6650d..92e3937 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs @@ -92,7 +92,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); var rfid = StaticData.PlcDic[1].ReadRFID(LineRFID.plcpointAddress); var isArrive = StaticData.PlcDic[1].Read(isarrive.plcpointAddress); var receiveMaterial = StaticData.PlcDic[1].Read(ReceiveMaterial.plcpointAddress); @@ -366,7 +366,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); var taskList = dbContext.WcsTask .Where(t => t.useFlag == 1) .Where(t => t.IsDelete == 0 || t.IsDelete == null) diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs index 62cf2e1..a489512 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs @@ -6,6 +6,7 @@ using Khd.Core.Library.Mapper; using Khd.Core.Plc.S7; using Khd.Core.Wcs.Global; using Masuit.Tools; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Z.EntityFramework.Plus; @@ -56,7 +57,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); //入库任务 var rfid = StaticData.PlcDic[0].ReadRFID(LineRFID.plcpointAddress); var isSignal = StaticData.PlcDic[0].Read(LineSignal.plcpointAddress); diff --git a/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs index ef560e5..c411f0f 100644 --- a/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs @@ -46,7 +46,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); //入库任务 var rfid = StaticData.PlcDic[0].ReadRFID(LineRFID.plcpointAddress); var isSignal = StaticData.PlcDic[0].Read(LineSignal.plcpointAddress); diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs index 9b899af..2325b59 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs @@ -6,6 +6,7 @@ using Khd.Core.Library; using Khd.Core.Plc.S7; using Khd.Core.Wcs.Global; using Masuit.Tools; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Newtonsoft.Json; @@ -68,7 +69,7 @@ namespace Khd.Core.Wcs.Wcs if (agvGetValue != null && Convert.ToInt32(agvGetValue) == 0) { // 信号消失,20s后执行相关操作 - Thread.Sleep(1000*20); + Thread.Sleep(1000 * 20); // 取托盘确认信号DB4.DBX310.1写true BasePlcpoint secondOutGetOverPoint = StaticData.BasePlcpointList.First(t => t.id == 71); @@ -106,7 +107,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); //获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv var taskList = dbContext.WcsTask .Where(t => t.useFlag == 1) @@ -591,13 +592,13 @@ namespace Khd.Core.Wcs.Wcs // 开启线程监听2分钟小包出口光电信号,如果小包出口到位信号消失,即取托盘完成,发送信号通知线体 ListenForSignal(2); - + } } - - + + } else { @@ -616,7 +617,7 @@ namespace Khd.Core.Wcs.Wcs } } - + } else if (item.taskStatus == 5) @@ -634,8 +635,8 @@ namespace Khd.Core.Wcs.Wcs 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) + + if (agvPutValue != null && ConnectStatus2F != null && PalletInIsHas2F != null && Convert.ToInt32(agvPutValue) == 1 && Convert.ToInt32(ConnectStatus2F) == 1 && Convert.ToInt32(PalletInIsHas2F) == 0) { // 托盘库叫料信号,并且通讯正常,并且小包入口无料 ,才可放托盘 var agvTask = new RequestAGVTaskDto @@ -653,7 +654,7 @@ namespace Khd.Core.Wcs.Wcs } } } - + } else if (item.taskStatus == 7) { @@ -682,7 +683,7 @@ namespace Khd.Core.Wcs.Wcs wmsBaseLocation.containerCode = item.containerNo; WmsProductStock wmsProductStock = new WmsProductStock() { - + productId = mesBasePalletInfo.materialId, activeFlag = "1", frozenAmount = 0, @@ -757,7 +758,7 @@ namespace Khd.Core.Wcs.Wcs WmsProductOutstock? wmsProductOutstock = dbContext.WmsProductOutstock.FirstOrDefault(t => t.productOutstockId == item.orderId); if (wmsProductOutstock != null) { - + var wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First(); WmsProductStock wmsProductStock = dbContext.WmsProductStock.First(t => t.locationCode == wmsBaseLocation.locationCode); @@ -783,7 +784,7 @@ namespace Khd.Core.Wcs.Wcs newWmsProductOutstockDetail.beginTime = DateTime.Now; newWmsProductOutstockDetail.endTime = DateTime.Now; - + wmsBaseLocation.locationStatus = "1"; wmsBaseLocation.containerCode = null; item.nextPointId = 2; @@ -894,27 +895,40 @@ namespace Khd.Core.Wcs.Wcs dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); #region 插入移库记录 - WmsMove 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; - + 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; @@ -931,7 +945,6 @@ namespace Khd.Core.Wcs.Wcs wmsMoveDetail.UpdateBy = "WCS"; wmsMoveDetail.UpdateDate = DateTime.Now; - dbContext.WmsMove.Add(wmsMove); dbContext.WmsMoveDetail.Add(wmsMoveDetail); #endregion diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs index 56942e6..b6f82b1 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs @@ -7,6 +7,7 @@ using Khd.Core.Library.Mapper; using Khd.Core.Plc.S7; using Khd.Core.Wcs.Global; using Masuit.Tools; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; @@ -60,7 +61,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); 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托盘库入口上料光电 diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs index 1b1cb5c..912d6c5 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs @@ -57,7 +57,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + 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.WcsTask.Remove(wcsTask);//删除原本的任务 + dbContext.Remove(wcsTask);//删除原本的任务 WcsTask newTask = CoreMapper.Map(wcsTask); newTask.taskStatus = 0; newTask.objid = StaticData.SnowId.NextId(); @@ -108,7 +108,7 @@ namespace Khd.Core.Wcs.Wcs newTask.endPointNo = inEquip.equipNo; newTask.taskType = StaticTaskType.SecondLineToSmallPackage;//提升机到小包入口的任务类型 newTask.useFlag = 1; - dbContext.WcsTask.Add(newTask); + dbContext.Add(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); dbContext.Add(wcsTaskLog); dbContext.SaveChanges(); @@ -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.WcsTask.Remove(wcsTask);//删除原本的任务 + dbContext.Remove(wcsTask);//删除原本的任务 WcsTask newTask = CoreMapper.Map(wcsTask); newTask.taskStatus = 0; newTask.objid = StaticData.SnowId.NextId(); @@ -135,7 +135,7 @@ namespace Khd.Core.Wcs.Wcs newTask.endPointNo = endEquip.equipNo; newTask.taskType = StaticTaskType.SecondLiftToTransit;//提升机到周转位的任务类型 newTask.useFlag = 1; - dbContext.WcsTask.Add(newTask); + dbContext.Add(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); dbContext.Add(wcsTaskLog); dbContext.SaveChanges(); @@ -151,7 +151,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.WcsTask.Remove(wcsTask); + dbContext.Remove(wcsTask); WcsTask newTask = CoreMapper.Map(wcsTask); newTask.taskStatus = 0; newTask.objid = StaticData.SnowId.NextId(); @@ -166,7 +166,7 @@ namespace Khd.Core.Wcs.Wcs newTask.endPointNo = inEquip.equipNo; newTask.taskType = StaticTaskType.SecondLineToSmallPackage;//到小包入口 newTask.useFlag = 1; - dbContext.WcsTask.Add(newTask); + dbContext.Add(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); dbContext.Add(wcsTaskLog); dbContext.SaveChanges(); @@ -178,7 +178,7 @@ namespace Khd.Core.Wcs.Wcs BaseEquip? endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0); if (endEquip != null) { - dbContext.WcsTask.Remove(wcsTask); + dbContext.Remove(wcsTask); WcsTask newTask = CoreMapper.Map(wcsTask); newTask.taskStatus = 0; newTask.objid = StaticData.SnowId.NextId(); @@ -193,7 +193,7 @@ namespace Khd.Core.Wcs.Wcs newTask.endPointNo = endEquip.equipNo; newTask.taskType = StaticTaskType.SecondLiftToTransit;//到周转位 newTask.useFlag = 1; - dbContext.WcsTask.Add(newTask); + dbContext.Add(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); dbContext.Add(wcsTaskLog); dbContext.SaveChanges(); @@ -207,7 +207,7 @@ namespace Khd.Core.Wcs.Wcs var endEquip = dbContext.BaseEquip.First(t => t.objid == 38);//废料区 if (endEquip.emptyCount == 0)//废料区没有托盘 { - dbContext.WcsTask.Remove(wcsTask); + dbContext.Remove(wcsTask); WcsTask newTask = CoreMapper.Map(wcsTask); newTask.taskStatus = 0; newTask.objid = StaticData.SnowId.NextId(); @@ -220,7 +220,7 @@ namespace Khd.Core.Wcs.Wcs newTask.currPointNo = lineEquip.equipNo; newTask.taskType = StaticTaskType.SecondLiftToWaste; newTask.useFlag = 1; - dbContext.WcsTask.Add(newTask); + dbContext.Add(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); dbContext.Add(wcsTaskLog); dbContext.SaveChanges(); @@ -232,7 +232,7 @@ namespace Khd.Core.Wcs.Wcs endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0);//周转位 if (endEquip != null) { - dbContext.WcsTask.Remove(wcsTask); + dbContext.Remove(wcsTask); WcsTask newTask = CoreMapper.Map(wcsTask); newTask.taskStatus = 0; newTask.objid = StaticData.SnowId.NextId(); @@ -247,7 +247,7 @@ namespace Khd.Core.Wcs.Wcs newTask.endPointNo = endEquip.equipNo; newTask.taskType = StaticTaskType.SecondLiftToTransit; newTask.useFlag = 1; - dbContext.WcsTask.Add(newTask); + dbContext.Add(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); dbContext.Add(wcsTaskLog); dbContext.SaveChanges(); @@ -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.WcsTask.Remove(wcsTask); + dbContext.Remove(wcsTask); WcsTask newTask = CoreMapper.Map(wcsTask); newTask.serialNo = SystemData.GetSerialNo(dbContext); newTask.taskStatus = 0; @@ -281,7 +281,7 @@ namespace Khd.Core.Wcs.Wcs newTask.useFlag = 1; newTask.fromFloorNo = 2; newTask.floorNo = endEquip.floorNo; - dbContext.WcsTask.Add(newTask); + dbContext.Add(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); dbContext.Add(wcsTaskLog); dbContext.SaveChanges(); @@ -291,7 +291,7 @@ namespace Khd.Core.Wcs.Wcs else//一般情况下是废料的任务 { BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.endPointId); - dbContext.WcsTask.Remove(wcsTask); + dbContext.Remove(wcsTask); WcsTask newTask = CoreMapper.Map(wcsTask); newTask.serialNo = SystemData.GetSerialNo(dbContext); newTask.taskStatus = 0; @@ -309,7 +309,7 @@ namespace Khd.Core.Wcs.Wcs newTask.useFlag = 1; newTask.fromFloorNo = 2; newTask.floorNo = endEquip.floorNo; - dbContext.WcsTask.Add(newTask); + dbContext.Add(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); dbContext.Add(wcsTaskLog); dbContext.SaveChanges(); diff --git a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs index f25a46b..506e17b 100644 --- a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs +++ b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs @@ -163,7 +163,7 @@ namespace Khd.Core.Wcs.Wcs using var transaction = dbContext.Database.BeginTransaction(); try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); var dmsBaseDeviceLedgers = dbContext.DmsBaseDeviceLedger.ToList(); var wcsAgvStatuses = dbContext.WcsAgvStatus.ToList(); var agvStatus = from a in dmsBaseDeviceLedgers @@ -285,7 +285,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); List wcsTasks = dbContext.WcsTask.Where(t => t.IsDelete == 1).ToList(); foreach (var item in wcsTasks) { @@ -294,7 +294,7 @@ namespace Khd.Core.Wcs.Wcs { if (item.endPointId == 11) { - dbContext.WcsTask.Remove(item); + dbContext.Remove(item); if (item.taskStatus == 6) { dbContext.SaveChanges(); @@ -321,7 +321,7 @@ namespace Khd.Core.Wcs.Wcs } else { - dbContext.WcsTask.Remove(item); + dbContext.Remove(item); var cancelTask = new { reqCode = StaticData.SnowId.NextId().ToString(), @@ -339,10 +339,20 @@ namespace Khd.Core.Wcs.Wcs _logger.Error($"任务{item.taskCode}删除失败,原因:{result?.message}"); } } + WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.FirstOrDefault(t => t.locationCode == item.currPointNo); + WmsBaseLocation? toBaseLocation = dbContext.WmsBaseLocation.FirstOrDefault(t => t.locationCode == item.endPointNo); + if (wmsBaseLocation != null) + { + SystemData.UnLockOutLocation(wmsBaseLocation, dbContext); + } + if (toBaseLocation != null) + { + SystemData.UnLockOutLocation(toBaseLocation, dbContext); + } } else { - dbContext.WcsTask.Remove(item); + dbContext.Remove(item); dbContext.SaveChanges(); _logger.Info($"任务{item.objid}已删除"); } @@ -373,7 +383,7 @@ namespace Khd.Core.Wcs.Wcs if (errorCount > 3) { _logger.Error($"Plc220短线重连失败超过{errorCount}次"); - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); SystemData.InsertWaringLog(dbContext, WaringType.设备Plc通讯异常, $"Plc220短线重连失败超过{errorCount}次"); //var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 15).FirstOrDefault(); //if (dmsRecordAlarmTime == null) @@ -397,7 +407,7 @@ namespace Khd.Core.Wcs.Wcs //} } StaticData.PlcDic[2].Read(HeartBeat30.plcpointAddress); - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); SystemData.DeleteWaringLog(dbContext, WaringType.设备Plc通讯异常); } @@ -438,7 +448,7 @@ namespace Khd.Core.Wcs.Wcs if (errorCount > 3) { _logger.Error($"Plc30短线重连失败超过{errorCount}次"); - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); SystemData.InsertWaringLog(dbContext, WaringType.提升机Plc通讯异常, $"Plc30短线重连失败超过{errorCount}次"); //var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 13).FirstOrDefault(); //if (dmsRecordAlarmTime == null) @@ -464,7 +474,7 @@ namespace Khd.Core.Wcs.Wcs } heartBeatCount = !heartBeatCount; StaticData.PlcDic[0].WriteToPoint(HeartBeat30.plcpointAddress, heartBeatCount, HeartBeat30.plcpointLength?.ToString()); - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); SystemData.DeleteWaringLog(dbContext, WaringType.提升机Plc通讯异常); } catch @@ -504,7 +514,8 @@ namespace Khd.Core.Wcs.Wcs if (errorCount > 3) { _logger.Error($"Plc31短线重连失败超过{errorCount}次"); - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); + SystemData.InsertWaringLog(dbContext, WaringType.U型线Plc通讯异常, $"Plc31短线重连失败超过{errorCount}次"); //var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 14).FirstOrDefault(); //if (dmsRecordAlarmTime == null) @@ -529,7 +540,7 @@ namespace Khd.Core.Wcs.Wcs } heartBeatCount = !heartBeatCount; StaticData.PlcDic[1].WriteToPoint(HeartBeat31.plcpointAddress, heartBeatCount, HeartBeat31.plcpointLength?.ToString()); - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); SystemData.DeleteWaringLog(dbContext, WaringType.U型线Plc通讯异常); } catch (Exception ex) @@ -569,14 +580,14 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); List updateEquips = dbContext.BaseEquip.Where(t => t.remark == "99").ToList(); if (updateEquips.Count > 0) { foreach (var equip in updateEquips) { equip.remark = "0"; - dbContext.BaseEquip.Update(equip); + dbContext.Update(equip); dbContext.SaveChanges(); } StaticData.BaseEquip = dbContext.BaseEquip.ToList(); @@ -620,7 +631,7 @@ namespace Khd.Core.Wcs.Wcs try { dbContext.Database.BeginTransaction(); - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); var dmsBaseAlarmRules = StaticData.DmsBaseAlarmRuleList.Where(t => t.DeviceId == -1).ToList(); var wcsAgvStatuses = dbContext.WcsAgvStatus.ToList(); var robotCodes = wcsAgvStatuses.Select(t => long.Parse(t.RobotCode)).ToList(); @@ -634,7 +645,7 @@ namespace Khd.Core.Wcs.Wcs { if (dmsRecordAlarmTime == null) { - dmsRecordAlarmTime=new DmsRecordAlarmTime + dmsRecordAlarmTime = new DmsRecordAlarmTime { DeviceId = int.Parse(agvStatus.RobotCode), AlarmBeginTime = DateTime.Now, @@ -845,7 +856,7 @@ namespace Khd.Core.Wcs.Wcs using var scope = host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); var baseEquip = StaticData.BaseEquip.First(t => t.objid == 9); - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); var basePlcs = StaticData.basePlcs.Where(t => t.Station == "3楼AGV").ToList(); var data = new { @@ -908,7 +919,7 @@ namespace Khd.Core.Wcs.Wcs { using var scope = host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); var baseEquip = StaticData.BaseEquip.First(t => t.objid == 8); var basePlcs = StaticData.basePlcs.Where(t => t.Station == "2楼AGV").ToList(); var data = new @@ -980,7 +991,7 @@ namespace Khd.Core.Wcs.Wcs using var scope = host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); var baseEquip = StaticData.BaseEquip.First(t => t.objid == 28); - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); var basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼AGV").ToList(); var wcsCmds = dbContext.WcsTask.Where(t => t.nextPointId == 28).ToList(); if (wcsCmds.Count > 0) @@ -1018,7 +1029,7 @@ namespace Khd.Core.Wcs.Wcs var XPlc = basePlcs.First(t => t.Name.Contains('X')); var Ylc = basePlcs.First(t => t.Name.Contains('Y')); var status = basePlcs.First(t => t.Name.Contains("Status")); - if(cardStatus.Online.ToLower()== "true") + if (cardStatus.Online.ToLower() == "true") { StaticData.PlcDic[2].WriteToPoint(status.Address, cardStatus.Status, status.type); } @@ -1083,7 +1094,7 @@ namespace Khd.Core.Wcs.Wcs { using var scope = host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); var basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼背负式").ToList(); var wcsCmds = dbContext.WcsTask.Where(t => t.nextPointId == 10).ToList(); if (wcsCmds.Count > 0) @@ -1123,7 +1134,7 @@ namespace Khd.Core.Wcs.Wcs using var scope = host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); var baseEquip = StaticData.BaseEquip.First(t => t.objid == 11); - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); var basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼CTU").ToList(); var wcsCmds = dbContext.WcsTask.Where(t => t.nextPointId == 11).ToList(); if (wcsCmds.Count > 0) diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs index c3f4cdf..139b727 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs @@ -94,7 +94,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); var getTrayValue = StaticData.PlcDic[2].Read(getTrayPoint.plcpointAddress); if (getTrayValue != null && Convert.ToBoolean(getTrayValue)) { @@ -152,7 +152,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); //获取条码号,如果该条码任务存在就继续任务,如果条码不存在,创建入库任务并调度agv 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) @@ -575,7 +575,7 @@ namespace Khd.Core.Wcs.Wcs using var transaction = dbContext.Database.BeginTransaction(); try { - var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.endPointNo).FirstOrDefault(); + var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.currPointNo).FirstOrDefault(); 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); @@ -601,27 +601,40 @@ namespace Khd.Core.Wcs.Wcs dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 }); #region 插入移库记录 - WmsMove 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; - + 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; @@ -638,7 +651,6 @@ namespace Khd.Core.Wcs.Wcs wmsMoveDetail.UpdateBy = "WCS"; wmsMoveDetail.UpdateDate = DateTime.Now; - dbContext.WmsMove.Add(wmsMove); dbContext.WmsMoveDetail.Add(wmsMoveDetail); #endregion @@ -775,24 +787,24 @@ namespace Khd.Core.Wcs.Wcs wmsRawOutstock.endTime = DateTime.Now; wmsRawOutstock.executeStatus = "2"; } - + } else { wmsRawOutstock = new WmsRawOutstock() { - rawOutstockId=StaticData.SnowId.NextId(), - warehouseId=311, - taskCode="", - outstockAmount=1, - realOutstockAmount=1, - operationType="3", - taskType="1", - auditStatus="0", - executeStatus="2", - saleOrderId= mesBaseBarcodeInfo!= null ? mesBaseBarcodeInfo.saleOrderId : 0, + rawOutstockId = StaticData.SnowId.NextId(), + warehouseId = 311, + taskCode = "", + outstockAmount = 1, + realOutstockAmount = 1, + operationType = "3", + taskType = "1", + auditStatus = "0", + executeStatus = "2", + saleOrderId = mesBaseBarcodeInfo != null ? mesBaseBarcodeInfo.saleOrderId : 0, }; - + } newWmsRawOutstockDetail.rawOutstockId = wmsRawOutstock.rawOutstockId; newWmsRawOutstockDetail.taskCode = wmsRawOutstock.taskCode; @@ -820,7 +832,7 @@ namespace Khd.Core.Wcs.Wcs BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == 31); endEquip.emptyCount = 1; - + SystemData.UnLockOutLocation(wmsBaseLocation, dbContext); dbContext.Update(endEquip); dbContext.Remove(wmsRawStock); diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs index 27afe74..d8e617e 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs @@ -54,7 +54,7 @@ namespace Khd.Core.Wcs.Wcs { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); //入库任务 var rfid = StaticData.PlcDic[0].ReadRFID(LineRFID.plcpointAddress); var isSignal = StaticData.PlcDic[0].Read(LineSignal.plcpointAddress); diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml b/src/Khd.Core.Wpf/Form/FormBoardT.xaml index 450749e..a3efaba 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml @@ -2351,8 +2351,17 @@ FontSize="25" Width="160" Height="80" VerticalAlignment="Top" HorizontalAlignmen - + + + + + + + + + + diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs index 2f885fa..22c15f7 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs @@ -264,7 +264,7 @@ namespace Khd.Core.Wpf.Form { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); int waitCtuCount = dbContext.WcsTask.Where(t => t.taskType == 30).Where(t => t.useFlag == 0).Where(t => t.taskStatus == 0).Count(); Dispatcher.Invoke(() => { @@ -456,7 +456,7 @@ namespace Khd.Core.Wpf.Form { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); List wmsRawReturns = dbContext.WmsRawReturn.Where(t => endStationCodes.Contains(t.endStationCode)) .Where(t => t.auditStatus == "1") .Where(t => t.executeStatus == "0" || t.executeStatus == "1") @@ -537,7 +537,7 @@ namespace Khd.Core.Wpf.Form { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 10); List wmsRawOutstocks = dbContext.WmsRawOutstock .Where(t => endStationCodes.Contains(t.endStationCode)) @@ -548,7 +548,14 @@ namespace Khd.Core.Wpf.Form List list = wmsRawOutstocks.Select(t => t.endStationCode).ToList(); Dispatcher.Invoke(() => { - this.OutOrder.Text = "待出库单:\n" + list.Distinct().Join("\n"); + this.OutEndStations.ItemsSource = null; + this.OutEndStations.Items.Clear(); + this.OutEndStations.ItemsSource = list.Distinct().Select(t => new + { + EndStationName = t, + ForeColor = baseEquip.endStationCode == null ? Brushes.Black : baseEquip.endStationCode.Contains(t) ? Brushes.Green : Brushes.Black + }); + this.OutEndStations.Items.Refresh(); }); wmsRawOutstocks = wmsRawOutstocks .Where(t => baseEquip.endStationCode.Contains(t.endStationCode)) @@ -556,28 +563,28 @@ namespace Khd.Core.Wpf.Form List orderIds = wmsRawOutstocks.Select(t => t.rawOutstockId).ToList(); var endStations = wmsRawOutstocks.Select(t => new { - orderId=t.saleOrderId, + orderId = t.saleOrderId, t.materialId, t.endStationCode }); string nowStationCode = baseEquip.endStationCode; - if (!string.IsNullOrEmpty(nowStationCode)) - { - Dispatcher.Invoke(() => - { - SelectOutButton.Content = "当前:" + nowStationCode; - //SelectOutButton.IsEnabled = false; - }); - } - else - { - Dispatcher.Invoke(() => - { - SelectOutButton.Content = "选择出库"; - //SelectOutButton.IsEnabled = true; - }); - } - + //if (!string.IsNullOrEmpty(nowStationCode)) + //{ + // Dispatcher.Invoke(() => + // { + // SelectOutButton.Content = "当前:" + nowStationCode; + // //SelectOutButton.IsEnabled = false; + // }); + //} + //else + //{ + // Dispatcher.Invoke(() => + // { + // SelectOutButton.Content = "选择出库"; + // //SelectOutButton.IsEnabled = true; + // }); + //} + if (!string.IsNullOrEmpty(baseEquip.endStationCode)) @@ -631,7 +638,7 @@ namespace Khd.Core.Wpf.Form .Where(pallet => pallet.MaterialId == order.materialId) .Select(pallet => $"托盘{pallet.PalletInfoCode}数量{string.Format("{0:0.00}", pallet.canUseAmount)}") ), - EndStationCodes =string.Join(",",endStations.Where(t => t.materialId == order.materialId && t.orderId == order.saleOrderId).Select(t => t.endStationCode).ToList()) + EndStationCodes = string.Join(",", endStations.Where(t => t.materialId == order.materialId && t.orderId == order.saleOrderId).Select(t => t.endStationCode).ToList()) }).ToList(); List materialIds = RawOutstocks.Select(t => t.materialId).ToList(); @@ -650,7 +657,7 @@ namespace Khd.Core.Wpf.Form realOutstockAmount = string.Format("{0:0.00}", r.RealOutstockAmount), isSendOver = r.RequestedAmount <= r.RealOutstockAmount ? "已出完" : "未出完", thisOutAmount = r.PalletDetails, - EndStationCodes=r.EndStationCodes + EndStationCodes = r.EndStationCodes }; #endregion @@ -736,7 +743,7 @@ namespace Khd.Core.Wpf.Form { try { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); var wcsAgvStatuses = dbContext.WcsAgvStatus.ToList(); var list = wcsAgvStatuses.Select( t => new @@ -784,7 +791,7 @@ namespace Khd.Core.Wpf.Form { lock (updateLock) { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + dbContext.ChangeTracker.Clear(); SystemData.BaseEquip = dbContext.BaseEquip.ToList(); BaseEquip baseEquip = SystemData.BaseEquip.First(t => t.objid == 40); Dispatcher.Invoke(() => @@ -1032,7 +1039,7 @@ namespace Khd.Core.Wpf.Form using var scope = _host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); Currentselected.taskStatus = 5; - dbContext.WcsTask.Update(Currentselected); + dbContext.Update(Currentselected); dbContext.SaveChanges(); GetTask(); } @@ -1564,7 +1571,7 @@ namespace Khd.Core.Wpf.Form { BaseEquip baseEquip = dbContext.BaseEquip.Where(t => t.objid == 10).First(); List? list = JsonConvert.DeserializeObject>(baseEquip.endStationCode); - new SelectOutRawForm(_host,"",3,list).ShowDialog(); + new SelectOutRawForm(_host, "", 3, list).ShowDialog(); if (string.IsNullOrEmpty(SelectOutRawForm.StationCode)) { return; @@ -1860,18 +1867,18 @@ namespace Khd.Core.Wpf.Form TextBlock? textBlock = null; Dispatcher.Invoke(() => { - foreach(var ch in this.UXX.Children) + foreach (var ch in this.UXX.Children) { - if(ch is TextBlock tb) + if (ch is TextBlock tb) { - if(tb.Name == item.plcpointNo) + if (tb.Name == item.plcpointNo) { textBlock = tb; break; } } } - if(textBlock == null) + if (textBlock == null) { foreach (var ch in this.TSJ.Children) { @@ -2002,7 +2009,7 @@ namespace Khd.Core.Wpf.Form else { wcsTask.CTUExecute = "1"; - dbContext.WcsTask.Update(wcsTask); + dbContext.Update(wcsTask); dbContext.SaveChanges(); HandyControl.Controls.MessageBox.Info("CTU入库任务确认完成成功!"); } @@ -2135,7 +2142,7 @@ namespace Khd.Core.Wpf.Form warehouseId = 512 }; - dbContext.WmsRawInstock.Add(wmsRawInstock); + dbContext.Add(wmsRawInstock); dbContext.SaveChanges(); totalMessage = wmsRawStock.totalAmount; } @@ -2188,7 +2195,7 @@ namespace Khd.Core.Wpf.Form poNo = mesBaseBarcodeInfo.poNo, warehouseId = 512 }; - dbContext.WmsRawInstock.Add(wmsRawInstock); + dbContext.Add(wmsRawInstock); dbContext.SaveChanges(); totalMessage = newRawStock.totalAmount; } @@ -3245,6 +3252,8 @@ namespace Khd.Core.Wpf.Form if (InventoryCheck.CheckStatus != "2") { InventoryCheck.CheckStatus = "2"; + InventoryCheck.InventoriedAmount+= InventoryCheck.InventoryingAmount; + InventoryCheck.InventoryingAmount = 0; InventoryCheck.EndTime = DateTime.Now; } dbContext.WmsInventoryCheck.Update(InventoryCheck); @@ -3305,7 +3314,7 @@ namespace Khd.Core.Wpf.Form MessageBoxResult isContinueCreateResult = HandyControl.Controls.MessageBox.Show(stringContainers.ToString(), "提示", MessageBoxButton.YesNo); if (isContinueCreateResult == MessageBoxResult.Yes) { - dbContext.WcsTask.RemoveRange(removeList); + dbContext.RemoveRange(removeList); } else { @@ -3425,7 +3434,7 @@ namespace Khd.Core.Wpf.Form MessageBoxResult isContinueCreateResult = HandyControl.Controls.MessageBox.Show(stringContainers.ToString(), "提示", MessageBoxButton.YesNo); if (isContinueCreateResult == MessageBoxResult.Yes) { - dbContext.WcsTask.RemoveRange(removeList); + dbContext.RemoveRange(removeList); } else { @@ -5115,14 +5124,14 @@ namespace Khd.Core.Wpf.Form { foreach (var item in this.LocaltionGrid.Children) { - if(item is Grid grid) + if (item is Grid grid) { - foreach(var btn in grid.Children) + foreach (var btn in grid.Children) { - if(btn is Button button) + if (btn is Button button) { var location = wmsBaseLocations.Where(t => t.locationCode == button.Name.Replace("Location", "")).FirstOrDefault(); - if(location != null) + if (location != null) { button.Background = string.IsNullOrEmpty(location.containerCode) ? new SolidColorBrush((Color)ColorConverter.ConvertFromString("#4789AE")) : new SolidColorBrush((Color)ColorConverter.ConvertFromString("#75F76D")); } diff --git a/src/Khd.Core.Wpf/Khd.Core.Wpf.csproj b/src/Khd.Core.Wpf/Khd.Core.Wpf.csproj index 5d191f6..7e35cd8 100644 --- a/src/Khd.Core.Wpf/Khd.Core.Wpf.csproj +++ b/src/Khd.Core.Wpf/Khd.Core.Wpf.csproj @@ -5,6 +5,7 @@ net6.0-windows enable true + enable @@ -483,5 +484,8 @@ Always + + + diff --git a/src/Khd.Core.Wpf/TaskForm/Inventory/AddNewStockForm.xaml.cs b/src/Khd.Core.Wpf/TaskForm/Inventory/AddNewStockForm.xaml.cs index e6ec36a..a8391b2 100644 --- a/src/Khd.Core.Wpf/TaskForm/Inventory/AddNewStockForm.xaml.cs +++ b/src/Khd.Core.Wpf/TaskForm/Inventory/AddNewStockForm.xaml.cs @@ -146,7 +146,7 @@ namespace Khd.Core.Wpf.TaskForm warehouseId = 512 }; - dbContext.WmsRawInstock.Add(wmsRawInstock); + dbContext.Add(wmsRawInstock); dbContext.SaveChanges(); totalMessage = wmsRawStock.totalAmount; } @@ -199,7 +199,7 @@ namespace Khd.Core.Wpf.TaskForm poNo = mesBaseBarcodeInfo.poNo, warehouseId = 512 }; - dbContext.WmsRawInstock.Add(wmsRawInstock); + dbContext.Add(wmsRawInstock); #region 添加盘点明细 WmsInventoryCheck wmsInventoryCheck = dbContext.WmsInventoryCheck.Where(x => x.CheckStatus == "1").FirstOrDefault(); diff --git a/src/Khd.Core.Wpf/TaskForm/Inventory/UpdateAmountWindow.xaml.cs b/src/Khd.Core.Wpf/TaskForm/Inventory/UpdateAmountWindow.xaml.cs index e68f83a..e7ed8f3 100644 --- a/src/Khd.Core.Wpf/TaskForm/Inventory/UpdateAmountWindow.xaml.cs +++ b/src/Khd.Core.Wpf/TaskForm/Inventory/UpdateAmountWindow.xaml.cs @@ -73,7 +73,14 @@ namespace Khd.Core.Wpf.TaskForm if (wmsRawStock != null) { wmsRawStock.totalAmount = stockAmountValue; - dbContext.Update(wmsRawStock); + if (wmsRawStock.totalAmount == 0) + { + dbContext.Remove(wmsRawStock); + } + else + { + dbContext.Update(wmsRawStock); + } // 修改盘库明细 WmsInventoryCheckDetail wmsInventoryDetail = dbContext.WmsInventoryCheckDetail.Where(x => x.LocationCode == locationCode && x.MaterialBatch == barcodeInfo && x.CheckStatus=="1").OrderByDescending(X=>X.CreateTime).FirstOrDefault(); if(wmsInventoryDetail != null) diff --git a/src/Khd.Core.Wpf/TaskForm/SelectOutRawForm.xaml.cs b/src/Khd.Core.Wpf/TaskForm/SelectOutRawForm.xaml.cs index 907291a..39661f0 100644 --- a/src/Khd.Core.Wpf/TaskForm/SelectOutRawForm.xaml.cs +++ b/src/Khd.Core.Wpf/TaskForm/SelectOutRawForm.xaml.cs @@ -62,7 +62,7 @@ namespace Khd.Core.Wpf.TaskForm } baseEquip.ud3 = _ud3; baseEquip.IsOut = _isOut; - dbContext.BaseEquip.Update(baseEquip); + dbContext.Update(baseEquip); dbContext.SaveChanges(); this.Close(); }