From 4d23f57e7c96004c1bb4c2375fdb4602b22f8e8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=83?= <15095123350@163.com> Date: Mon, 15 Jul 2024 09:41:59 +0800 Subject: [PATCH] 20240715 --- .../Controllers/RecieveRcsController.cs | 16 +- .../Interface/IWcsTaskApplication.cs | 1 + .../Khd.Core.Application.csproj | 1 + .../WcsTaskApplication.cs | 52 +- src/Khd.Core.Domain/Auth/SysMenu.cs | 20 + src/Khd.Core.Domain/Auth/SysRole.cs | 19 + src/Khd.Core.Domain/Auth/SysUser.cs | 32 + src/Khd.Core.Domain/Dto/agv/WcsAgvStatus.cs | 50 + .../Dto/webapi/AgvCompeleted.cs | 8 +- .../Dto/webapi/AgvStatusDto.cs | 6 +- .../Dto/webapi/CallMaterial.cs | 8 + .../Dto/webapi/genAgvSchedulingTask.cs | 2 +- src/Khd.Core.Domain/Models/BaseEquip.cs | 3 + src/Khd.Core.Domain/Models/BasePlc.cs | 8 +- .../Models/MesBaseMaterialInfo.cs | 5 - src/Khd.Core.Domain/Models/PlcPoint.cs | 7 +- src/Khd.Core.Domain/Models/WcsTask.cs | 23 +- src/Khd.Core.Domain/Models/WcsTaskLog.cs | 2 +- src/Khd.Core.Domain/Models/WcsTaskManual.cs | 8 +- src/Khd.Core.Domain/Models/WmsBaseLocation.cs | 2 +- .../DefaultDbContext.cs | 6 +- src/Khd.Core.Library/Mapper/CoreMapper.cs | 6 +- src/Khd.Core.Plc/S7/PLCHelpers.cs | 2 +- src/Khd.Core.Plc/StaticPlcHelper.cs | 6 +- src/Khd.Core.Wcs/Global/HttpHelper.cs | 2 +- src/Khd.Core.Wcs/Global/StaticData.cs | 6 +- src/Khd.Core.Wcs/MainCentralControl.cs | 34 +- src/Khd.Core.Wcs/SystemData.cs | 7 +- src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs | 1621 +++++++++++------ src/Khd.Core.Wcs/Wcs/FirstFloor.cs | 402 ++-- src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs | 153 +- src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs | 30 +- src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs | 38 +- src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs | 13 +- src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs | 8 - src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs | 178 +- src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs | 170 +- src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs | 221 ++- src/Khd.Core.Wcs/Wcs/SystemTimer.cs | 2 +- src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs | 355 +++- src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs | 84 +- src/Khd.Core.Wcs/Wcs/WcsToWms.cs | 7 +- src/Khd.Core.Wpf/App.xaml.cs | 9 +- src/Khd.Core.Wpf/CSS/DataGridClass.xaml | 8 +- src/Khd.Core.Wpf/Form/FormBoard.xaml.cs | 1 - src/Khd.Core.Wpf/Form/FormBoardT.xaml | 651 +++++-- src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs | 516 +++++- src/Khd.Core.Wpf/HttpHelper.cs | 2 +- src/Khd.Core.Wpf/Scan/SerialPortHelper.cs | 11 +- src/Khd.Core.Wpf/SystemData.cs | 12 +- src/Khd.Core.Wpf/TaskForm/AddTask.xaml.cs | 51 +- src/Khd.Core.Wpf/TaskForm/EmptyCountForm.xaml | 2 +- .../TaskForm/EmptyCountForm.xaml.cs | 14 +- src/Khd.Core.Wpf/TaskForm/FloorForm.xaml | 32 + src/Khd.Core.Wpf/TaskForm/FloorForm.xaml.cs | 32 + src/Khd.Core.Wpf/TaskForm/MenuList.xaml | 113 ++ src/Khd.Core.Wpf/TaskForm/MenuList.xaml.cs | 101 + src/Khd.Core.Wpf/TaskForm/RawMessageShow.xaml | 51 + .../TaskForm/RawMessageShow.xaml.cs | 45 + src/Khd.Core.Wpf/dto/taskModel.cs | 70 + .../myConverter/AgvTaskStatusConverter.cs | 8 +- .../myConverter/CtuTaskStatusConverter.cs | 10 +- .../myConverter/EquipConverter.cs | 3 - .../myConverter/HoisterTaskStatusConverter.cs | 3 - .../myConverter/TypeDataConverter.cs | 3 - 65 files changed, 3779 insertions(+), 1593 deletions(-) create mode 100644 src/Khd.Core.Domain/Auth/SysMenu.cs create mode 100644 src/Khd.Core.Domain/Auth/SysRole.cs create mode 100644 src/Khd.Core.Domain/Auth/SysUser.cs create mode 100644 src/Khd.Core.Domain/Dto/agv/WcsAgvStatus.cs create mode 100644 src/Khd.Core.Domain/Dto/webapi/CallMaterial.cs create mode 100644 src/Khd.Core.Wpf/TaskForm/FloorForm.xaml create mode 100644 src/Khd.Core.Wpf/TaskForm/FloorForm.xaml.cs create mode 100644 src/Khd.Core.Wpf/TaskForm/MenuList.xaml create mode 100644 src/Khd.Core.Wpf/TaskForm/MenuList.xaml.cs create mode 100644 src/Khd.Core.Wpf/TaskForm/RawMessageShow.xaml create mode 100644 src/Khd.Core.Wpf/TaskForm/RawMessageShow.xaml.cs create mode 100644 src/Khd.Core.Wpf/dto/taskModel.cs diff --git a/src/Khd.Core.Api/Controllers/RecieveRcsController.cs b/src/Khd.Core.Api/Controllers/RecieveRcsController.cs index 733568e..c84fffb 100644 --- a/src/Khd.Core.Api/Controllers/RecieveRcsController.cs +++ b/src/Khd.Core.Api/Controllers/RecieveRcsController.cs @@ -12,6 +12,7 @@ namespace Khd.Core.Api.Controllers public class RecieveRcsController : ControllerBase { private readonly IWcsTaskApplication _application; + public RecieveRcsController(IWcsTaskApplication application) { _application = application; @@ -20,7 +21,7 @@ namespace Khd.Core.Api.Controllers /// /// 接收agv接收任务通知接口 /// - /// + /// /// [HttpPost("agvCallback")] public ReponseagvCallbackDto agvCallback(agvCallbackDto agvCallbackDto) @@ -34,7 +35,7 @@ namespace Khd.Core.Api.Controllers /// /// 接收agv接收任务通知接口 /// - /// + /// /// [HttpPost("agvCallback2")] public ReponseagvCallbackDto agvCallback2(agvCallbackDto agvCallbackDto) @@ -81,5 +82,16 @@ namespace Khd.Core.Api.Controllers return _application.TaskReturn(taskReturn); } + /// + /// 通知去翻转机的任务 + /// + /// + /// + [HttpPost("callMaterial")] + public ReponseMessage CallMaterial(CallMaterial callMaterial) + { + LogManager.Info($"CallMaterial 接口收到消息: {callMaterial}"); + return _application.CallMaterial(callMaterial); + } } } \ No newline at end of file diff --git a/src/Khd.Core.Application/Interface/IWcsTaskApplication.cs b/src/Khd.Core.Application/Interface/IWcsTaskApplication.cs index 79bd085..0420acd 100644 --- a/src/Khd.Core.Application/Interface/IWcsTaskApplication.cs +++ b/src/Khd.Core.Application/Interface/IWcsTaskApplication.cs @@ -30,5 +30,6 @@ namespace Khd.Core.Application.Interface AgvCompeletedResponse TaskReturn(TaskReturn taskReturn); ReponseagvCallbackDto AgvCallback2(agvCallbackDto agvCallbackDto); + ReponseMessage CallMaterial(CallMaterial callMaterial); } } \ No newline at end of file diff --git a/src/Khd.Core.Application/Khd.Core.Application.csproj b/src/Khd.Core.Application/Khd.Core.Application.csproj index c9369a2..103eb07 100644 --- a/src/Khd.Core.Application/Khd.Core.Application.csproj +++ b/src/Khd.Core.Application/Khd.Core.Application.csproj @@ -5,6 +5,7 @@ + diff --git a/src/Khd.Core.Application/WcsTaskApplication.cs b/src/Khd.Core.Application/WcsTaskApplication.cs index 3cde9e5..c15c180 100644 --- a/src/Khd.Core.Application/WcsTaskApplication.cs +++ b/src/Khd.Core.Application/WcsTaskApplication.cs @@ -1,9 +1,9 @@ -using Khd.Core.Application.Interface; +using Jc.SnowId; +using Khd.Core.Application.Interface; using Khd.Core.Domain.Dto.webapi; using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Masuit.Tools.Logging; -using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using System; using System.Linq; @@ -14,6 +14,7 @@ namespace Khd.Core.Application public class WcsTaskApplication : IWcsTaskApplication { private readonly DefaultDbContext _dbContext; + private readonly static JcSnowId _snowId = new JcSnowId(); public WcsTaskApplication(IServiceProvider serviceProvider) { @@ -394,7 +395,7 @@ namespace Khd.Core.Application wcscmd.sendFlag = 1; wcsTask.taskStatus = 7; _dbContext.WcsCmd.Update(wcscmd); - _dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 7}); + _dbContext.WcsCmdLog.Where(t => t.objid == wcscmd.objid).Update(a => new WcsCmdLog { cmdStatus = 7 }); _dbContext.WcsTask.Update(wcsTask); _dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 7 }); _dbContext.SaveChanges(); @@ -419,5 +420,50 @@ namespace Khd.Core.Application reponseagvCallbackDto.reqCode = reponseagvCallbackDto.reqCode; return reponseagvCallbackDto; } + + public ReponseMessage CallMaterial(CallMaterial callMaterial) + { + ReponseMessage reponseMessage = new ReponseMessage(); + try + { + _dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + WmsRawOutstock wmsRawOutstock = _dbContext.WmsRawOutstock.FirstOrDefault(t => t.rawOutstockId == Convert.ToInt64(callMaterial.rawOutstockId)); + if (wmsRawOutstock != null) + { + bool hasTask = _dbContext.WcsTask.Where(t => t.endPointId == 31 || t.currPointId == 31).Any(); + bool hasTaskManual = _dbContext.WcsTaskManual.Where(t => t.endPointId == 31 || t.currPointId == 31 || t.taskType == 999).Any(); + if (hasTask || hasTaskManual) + { + reponseMessage.code = "1"; + reponseMessage.message = "当前有任务,请等待任务完成后再申请"; + } + else + { + BaseEquip endEquip = _dbContext.BaseEquip.First(t => t.objid == 31); + BaseEquip baseEquip = _dbContext.BaseEquip.First(t => t.objid == 9); + WcsTaskManual wcsTaskManual = new WcsTaskManual(); + wcsTaskManual.taskType = 999; + wcsTaskManual.objid = _snowId.NextId(); + wcsTaskManual.orderId = Convert.ToInt64(callMaterial.rawOutstockId); + _dbContext.Add(wcsTaskManual); + _dbContext.SaveChanges(); + reponseMessage.code = "0"; + reponseMessage.message = "成功"; + } + } + else + { + reponseMessage.code = "1"; + reponseMessage.message = "未找到当前申请单的任务"; + } + } + catch (Exception ex) + { + reponseMessage.code = "1"; + reponseMessage.message = ex.Message; + LogManager.Error(ex); + } + return reponseMessage; + } } } \ No newline at end of file diff --git a/src/Khd.Core.Domain/Auth/SysMenu.cs b/src/Khd.Core.Domain/Auth/SysMenu.cs new file mode 100644 index 0000000..4daa278 --- /dev/null +++ b/src/Khd.Core.Domain/Auth/SysMenu.cs @@ -0,0 +1,20 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Khd.Core.Domain.Auth +{ + [Table("wcs_sys_menu")] + public class SysMenu + { + [Key] + [Column("OBJID")] + public long? OBJID { get; set; } + + [Column("MENU_NAME")] + public string MenuName { get; set; } + + [Column("MENU_VISIBLE")] + public int MenuVisble { get; set; } + + } +} diff --git a/src/Khd.Core.Domain/Auth/SysRole.cs b/src/Khd.Core.Domain/Auth/SysRole.cs new file mode 100644 index 0000000..6a7e794 --- /dev/null +++ b/src/Khd.Core.Domain/Auth/SysRole.cs @@ -0,0 +1,19 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Khd.Core.Domain.Auth +{ + [Table("wcs_sys_user_role")] + public class SysRole + { + [Key] + [Column("OBJID")] + public long? OBJID { get; set; } + + [Column("USER_ID")] + public long? UserId { get; set; } + + [Column("ROLE_ID")] + public long? RoleId { get; set; } + } +} diff --git a/src/Khd.Core.Domain/Auth/SysUser.cs b/src/Khd.Core.Domain/Auth/SysUser.cs new file mode 100644 index 0000000..d52b85d --- /dev/null +++ b/src/Khd.Core.Domain/Auth/SysUser.cs @@ -0,0 +1,32 @@ +using System; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Khd.Core.Domain.Auth +{ + [Table("wcs_sys_user")] + public class SysUser + { + [Key] + [Column("OBJID")] + public long? OBJID { get; set; } + + [Column("USER_NAME")] + public string UserName { get; set; } + + [Column("NICK_NAME")] + public string NickName { get; set; } + + [Column("STATUS")] + public int Status { get; set; } + + [Column("USER_PWD")] + public string Password { get; set; } + + [Column("create_by")] + public string createBy { get; set; } + + [Column("create_time")] + public DateTime? createTime { get; set; } + } +} diff --git a/src/Khd.Core.Domain/Dto/agv/WcsAgvStatus.cs b/src/Khd.Core.Domain/Dto/agv/WcsAgvStatus.cs new file mode 100644 index 0000000..01825f8 --- /dev/null +++ b/src/Khd.Core.Domain/Dto/agv/WcsAgvStatus.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Khd.Core.Domain.Dto.agv +{ + [Table("wcs_agv_status")] + public class WcsAgvStatus + { + [Column("id")] + public int Id { get; set; } + [Column("battery")] + public string Battery { get; set; } + [Column("exclType")] + public string ExclType { get; set; } + [Column("mapCode")] + public string MapCode { get; set; } + [Column("online")] + public string Online { get; set; } + [Column("path")] + public string Path { get; set; } + [Column("podCode")] + public string PodCode { get; set; } + [Column("podDir")] + public string PodDir { get; set; } + [Column("posX")] + public string PosX { get; set; } + [Column("posY")] + public string PosY { get; set; } + [Key] + [Column("robotCode")] + public string RobotCode { get; set; } + [Column("robotDir")] + public string RobotDir { get; set; } + [Column("robotIp")] + public string robotIp { get; set; } + [Column("speed")] + public string Speed { get; set; } + [Column("status")] + public string Status { get; set; } + [Column("stop")] + public string Stop { get; set; } + [Column("timestamp")] + public DateTime Timestamp { get; set; } + } +} diff --git a/src/Khd.Core.Domain/Dto/webapi/AgvCompeleted.cs b/src/Khd.Core.Domain/Dto/webapi/AgvCompeleted.cs index c0917c7..ebc7c2c 100644 --- a/src/Khd.Core.Domain/Dto/webapi/AgvCompeleted.cs +++ b/src/Khd.Core.Domain/Dto/webapi/AgvCompeleted.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Khd.Core.Domain.Dto.webapi +namespace Khd.Core.Domain.Dto.webapi { public class AgvCompeleted { diff --git a/src/Khd.Core.Domain/Dto/webapi/AgvStatusDto.cs b/src/Khd.Core.Domain/Dto/webapi/AgvStatusDto.cs index b328bb2..29efb21 100644 --- a/src/Khd.Core.Domain/Dto/webapi/AgvStatusDto.cs +++ b/src/Khd.Core.Domain/Dto/webapi/AgvStatusDto.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Collections.Generic; namespace Khd.Core.Domain.Dto.webapi { diff --git a/src/Khd.Core.Domain/Dto/webapi/CallMaterial.cs b/src/Khd.Core.Domain/Dto/webapi/CallMaterial.cs new file mode 100644 index 0000000..71d34d0 --- /dev/null +++ b/src/Khd.Core.Domain/Dto/webapi/CallMaterial.cs @@ -0,0 +1,8 @@ +namespace Khd.Core.Domain.Dto.webapi +{ + public class CallMaterial + { + public string rawOutstockId { get; set; } + public string method { get; set; } + } +} diff --git a/src/Khd.Core.Domain/Dto/webapi/genAgvSchedulingTask.cs b/src/Khd.Core.Domain/Dto/webapi/genAgvSchedulingTask.cs index 009e5d9..af3021e 100644 --- a/src/Khd.Core.Domain/Dto/webapi/genAgvSchedulingTask.cs +++ b/src/Khd.Core.Domain/Dto/webapi/genAgvSchedulingTask.cs @@ -67,7 +67,7 @@ namespace Khd.Core.Domain.Dto.webapi /// /// “180”,”0”,”90”,”-90” 分别对应地图的”左”,”右”,”上”,”下” ,不指定方向可以为空 /// - public string podDir { get; set; } + public string podDir { get; set; } /// /// “180”,”0”,”90”,”-90” 分别对应地图的”左”,”右”,”上”,”下” ,不指定方向可以为空 /// diff --git a/src/Khd.Core.Domain/Models/BaseEquip.cs b/src/Khd.Core.Domain/Models/BaseEquip.cs index b878674..d158ec9 100644 --- a/src/Khd.Core.Domain/Models/BaseEquip.cs +++ b/src/Khd.Core.Domain/Models/BaseEquip.cs @@ -17,6 +17,9 @@ namespace Khd.Core.Domain.Models [Table("wcs_base_equip")] public class BaseEquip { + [Column("container_no")] + public string containerNo { get; set; } + [Column("empty_count")] public int? emptyCount { get; set; } diff --git a/src/Khd.Core.Domain/Models/BasePlc.cs b/src/Khd.Core.Domain/Models/BasePlc.cs index 08f49ea..80a3ca7 100644 --- a/src/Khd.Core.Domain/Models/BasePlc.cs +++ b/src/Khd.Core.Domain/Models/BasePlc.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations.Schema; -using System.Linq; -using System.Runtime.InteropServices; -using System.Text; -using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations.Schema; namespace Khd.Core.Domain.Models { diff --git a/src/Khd.Core.Domain/Models/MesBaseMaterialInfo.cs b/src/Khd.Core.Domain/Models/MesBaseMaterialInfo.cs index 2687ece..4345dc0 100644 --- a/src/Khd.Core.Domain/Models/MesBaseMaterialInfo.cs +++ b/src/Khd.Core.Domain/Models/MesBaseMaterialInfo.cs @@ -1,11 +1,6 @@ using System; -using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; namespace Khd.Core.Domain.Models { diff --git a/src/Khd.Core.Domain/Models/PlcPoint.cs b/src/Khd.Core.Domain/Models/PlcPoint.cs index 43c4104..7b0eb74 100644 --- a/src/Khd.Core.Domain/Models/PlcPoint.cs +++ b/src/Khd.Core.Domain/Models/PlcPoint.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations.Schema; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations.Schema; namespace Khd.Core.Domain.Models { diff --git a/src/Khd.Core.Domain/Models/WcsTask.cs b/src/Khd.Core.Domain/Models/WcsTask.cs index a62f9b8..933d412 100644 --- a/src/Khd.Core.Domain/Models/WcsTask.cs +++ b/src/Khd.Core.Domain/Models/WcsTask.cs @@ -17,6 +17,7 @@ namespace Khd.Core.Domain.Models [Table("wcs_task")] public class WcsTask { + [Column("from_floor_no")] public int? fromFloorNo { get; set; } @@ -91,7 +92,7 @@ namespace Khd.Core.Domain.Models /// 物料号 /// [Column("material_no")] - public string? materialNo { get; set; } + public string? materialBarcode { get; set; } /// /// 数量 @@ -99,17 +100,17 @@ namespace Khd.Core.Domain.Models [Column("qty")] public int? qty { get; set; } - /// - /// 起始点编号 - /// - [Column("start_point_no")] - public string startPointNo { get; set; } + ///// + ///// 起始点编号 + ///// + //[Column("start_point_no")] + //public string startPointNo { get; set; } - /// - /// 起始点id - /// - [Column("start_point_id")] - public long? startPointId { get; set; } + ///// + ///// 起始点id + ///// + //[Column("start_point_id")] + //public long? startPointId { get; set; } /// /// 当前点编号 diff --git a/src/Khd.Core.Domain/Models/WcsTaskLog.cs b/src/Khd.Core.Domain/Models/WcsTaskLog.cs index 8d6fa56..5ee9f1b 100644 --- a/src/Khd.Core.Domain/Models/WcsTaskLog.cs +++ b/src/Khd.Core.Domain/Models/WcsTaskLog.cs @@ -91,7 +91,7 @@ namespace Khd.Core.Domain.Models /// 物料号 /// [Column("material_no")] - public string? materialNo { get; set; } + public string? materialBarcode { get; set; } /// /// 数量 diff --git a/src/Khd.Core.Domain/Models/WcsTaskManual.cs b/src/Khd.Core.Domain/Models/WcsTaskManual.cs index 862d1fc..5d67039 100644 --- a/src/Khd.Core.Domain/Models/WcsTaskManual.cs +++ b/src/Khd.Core.Domain/Models/WcsTaskManual.cs @@ -1,10 +1,6 @@ using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations.Schema; namespace Khd.Core.Domain.Models { @@ -85,7 +81,7 @@ namespace Khd.Core.Domain.Models /// 物料号 /// [Column("material_no")] - public string? materialNo { get; set; } + public string? materialBarcode { get; set; } /// /// 数量 diff --git a/src/Khd.Core.Domain/Models/WmsBaseLocation.cs b/src/Khd.Core.Domain/Models/WmsBaseLocation.cs index 5f8587c..b798228 100644 --- a/src/Khd.Core.Domain/Models/WmsBaseLocation.cs +++ b/src/Khd.Core.Domain/Models/WmsBaseLocation.cs @@ -67,7 +67,7 @@ namespace Khd.Core.Domain.Models public int? locColumn { get; set; } /// - /// 深位 + /// 深位1 浅位2 /// [Column("loc_deep")] public int? locDeep { get; set; } diff --git a/src/Khd.Core.EntityFramework/DefaultDbContext.cs b/src/Khd.Core.EntityFramework/DefaultDbContext.cs index 5047a3e..5a9e706 100644 --- a/src/Khd.Core.EntityFramework/DefaultDbContext.cs +++ b/src/Khd.Core.EntityFramework/DefaultDbContext.cs @@ -1,4 +1,4 @@ -using Khd.Core.Domain.Dto.wcs; +using Khd.Core.Domain.Auth; using Khd.Core.Domain.Models; using Microsoft.EntityFrameworkCore; @@ -9,6 +9,10 @@ namespace Khd.Core.EntityFramework public DefaultDbContext(DbContextOptions options) : base(options) { } + public DbSet SysUser { get; set; } + public DbSet SysRole { get; set; } + public DbSet SysMenu { get; set; } + public DbSet MesBaseMaterialInfo { get; set; } public DbSet WmsRawReturn { get; set; } public DbSet WcsTaskManual { get; set; } diff --git a/src/Khd.Core.Library/Mapper/CoreMapper.cs b/src/Khd.Core.Library/Mapper/CoreMapper.cs index ec36e1f..6c65e7e 100644 --- a/src/Khd.Core.Library/Mapper/CoreMapper.cs +++ b/src/Khd.Core.Library/Mapper/CoreMapper.cs @@ -1,9 +1,5 @@ using Mapster; using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Khd.Core.Library.Mapper { @@ -18,7 +14,7 @@ namespace Khd.Core.Library.Mapper /// Thrown when source is null. public static TDestination Map(object source) { - if(source == null) + if (source == null) throw new ArgumentNullException("Map Error : source is null"); TypeAdapterConfig config = new TypeAdapterConfig(); diff --git a/src/Khd.Core.Plc/S7/PLCHelpers.cs b/src/Khd.Core.Plc/S7/PLCHelpers.cs index 380d211..4592ffe 100644 --- a/src/Khd.Core.Plc/S7/PLCHelpers.cs +++ b/src/Khd.Core.Plc/S7/PLCHelpers.cs @@ -261,6 +261,6 @@ namespace Khd.Core.Plc.S7 return package.ToArray(); } - + } } diff --git a/src/Khd.Core.Plc/StaticPlcHelper.cs b/src/Khd.Core.Plc/StaticPlcHelper.cs index b42b890..c521eb7 100644 --- a/src/Khd.Core.Plc/StaticPlcHelper.cs +++ b/src/Khd.Core.Plc/StaticPlcHelper.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Text; namespace Khd.Core.Plc { diff --git a/src/Khd.Core.Wcs/Global/HttpHelper.cs b/src/Khd.Core.Wcs/Global/HttpHelper.cs index 7a1bfd8..6ad9465 100644 --- a/src/Khd.Core.Wcs/Global/HttpHelper.cs +++ b/src/Khd.Core.Wcs/Global/HttpHelper.cs @@ -5,7 +5,7 @@ namespace Khd.Core.Wcs public class HttpHelper { - public static string SendPostMessage(string ip, int port, string url, string message,string contentType="application/Text") + public static string SendPostMessage(string ip, int port, string url, string message, string contentType = "application/Text") { string retsult = HttpPost("http://" + ip + ":" + port + "/" + url, message, contentType, 30, null); return retsult; diff --git a/src/Khd.Core.Wcs/Global/StaticData.cs b/src/Khd.Core.Wcs/Global/StaticData.cs index 0beeb16..ca5a8f8 100644 --- a/src/Khd.Core.Wcs/Global/StaticData.cs +++ b/src/Khd.Core.Wcs/Global/StaticData.cs @@ -38,7 +38,7 @@ namespace Khd.Core.Wcs.Global public static List BaseDictionary = new List(); private static object baseEquipLock = new object(); - private static List _baseEquip= new List(); + private static List _baseEquip = new List(); public static List BaseEquip { get @@ -62,8 +62,8 @@ namespace Khd.Core.Wcs.Global public static List WcsInWareOrder = new List(); public static List WcsOutWareOrder = new List(); public static List basePlcs = new List(); - public static List PlcConfigs { get; set; } - public static Dictionary> PlcPoints = new Dictionary>(); + public static List PlcConfigs { get; set; } + public static Dictionary> PlcPoints = new Dictionary>(); public static Dictionary PlcDic = new Dictionary(); public static JcSnowId SnowId = new JcSnowId(); } diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs index e0f9745..4e6c9e7 100644 --- a/src/Khd.Core.Wcs/MainCentralControl.cs +++ b/src/Khd.Core.Wcs/MainCentralControl.cs @@ -1,15 +1,10 @@ -using Khd.Core.Domain.Models; -using Khd.Core.EntityFramework; -using Khd.Core.Plc; -using Khd.Core.Plc.S7; +using Khd.Core.EntityFramework; using Khd.Core.Wcs.Global; using Khd.Core.Wcs.Wcs; using Masuit.Tools.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using System.Data; -using System.Net.Http.Headers; -using System.Text; using Z.EntityFramework.Plus; namespace Khd.Core.Wcs @@ -37,7 +32,7 @@ namespace Khd.Core.Wcs public void Start() { - + try { using var scope = _host.Services.CreateScope(); @@ -51,9 +46,8 @@ namespace Khd.Core.Wcs WcsMoRenQuXiang = StaticPlcHelper.GetValue("2", "1"); StaticData.BasePlcpointList = dbContext.BasePlcpoint.Where(t => t.isDelete == 0).ToList(); StaticData.BaseEquip = dbContext.BaseEquip.ToList(); - //StaticData.basePlcs = dbContext.BasePlc.ToList(); StaticData.BaseDictionary = dbContext.BaseDictionary.ToList(); - + foreach (var plcConfig in StaticData.PlcConfigs) { if (!StaticData.PlcDic.Any(t => t.Key == plcConfig.Code)) @@ -72,10 +66,10 @@ namespace Khd.Core.Wcs StaticData.PlcDic.TryAdd(plcConfig.Code, plc); } } - //SystemTimer systemTimer = new SystemTimer(_host); - //systemTimer.Start(); + SystemTimer systemTimer = new SystemTimer(_host); + systemTimer.Start(); //创建任务 - CreateTaskByRecord createTaskByRecord = new(_host, ""); + CreateTaskByRecord createTaskByRecord = new(_host); createTaskByRecord.StartPoint(); ////一楼提升机以及接驳位 @@ -87,10 +81,10 @@ namespace Khd.Core.Wcs //SecondFloorPoint secondFloorPoint = new(_host, StaticData.PlcDic[0], SecondBaseFloorEquip.floorNo.Value, SecondBaseFloorEquip.equipNo); //secondFloorPoint.StartPoint(); - //二层AGV - var SecondFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 4).First(); - SecondFloorAGV secondFloorAGV = new(_host, StaticData.PlcDic[0], SecondFloorAgvEquip.floorNo.Value, SecondFloorAgvEquip.equipNo); - secondFloorAGV.StartPoint(); + ////二层AGV + //var SecondFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 4).First(); + //SecondFloorAGV secondFloorAGV = new(_host, StaticData.PlcDic[0], SecondFloorAgvEquip.floorNo.Value, SecondFloorAgvEquip.equipNo); + //secondFloorAGV.StartPoint(); ////二楼线体 //var SecondFloorLineEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 3).First(); @@ -102,10 +96,10 @@ namespace Khd.Core.Wcs //ThirdFloorPoint thirdFloorPoint = new(_host, StaticData.PlcDic[0], ThirdBaseFloorEquip.floorNo.Value, ThirdBaseFloorEquip.equipNo); //thirdFloorPoint.StartPoint(); - ////三层AGV - //var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First(); - //ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[0], ThirdFloorAgvEquip.floorNo.Value, ThirdFloorAgvEquip.equipNo); - //thirdFloorAGV.StartPoint(); + //三层AGV + var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First(); + ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[0], ThirdFloorAgvEquip.floorNo.Value, ThirdFloorAgvEquip.equipNo); + thirdFloorAGV.StartPoint(); ////五层接驳位 //var FifthBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 1).First(); diff --git a/src/Khd.Core.Wcs/SystemData.cs b/src/Khd.Core.Wcs/SystemData.cs index 98c1f9e..d23b7e9 100644 --- a/src/Khd.Core.Wcs/SystemData.cs +++ b/src/Khd.Core.Wcs/SystemData.cs @@ -1,14 +1,11 @@ using Khd.Core.EntityFramework; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Khd.Core.Wcs { public class SystemData { + public readonly static int maxTray = 10; + private static long _serialNo { get; set; } = 1; private static object serialLock = new object(); diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs index b3d43e8..f1298d6 100644 --- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs +++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs @@ -1,5 +1,4 @@ -using Khd.Core.Domain.Dto.wcs; -using Khd.Core.Domain.Models; +using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Library.Mapper; using Khd.Core.Wcs.Global; @@ -10,8 +9,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using SixLabors.ImageSharp; using System.Data; -using System.Security.Cryptography; -using System.Threading.Tasks.Dataflow; using Z.EntityFramework.Plus; namespace Khd.Core.Wcs.Wcs @@ -22,41 +19,11 @@ namespace Khd.Core.Wcs.Wcs public class CreateTaskByRecord { private readonly IHost _host; - List ScanPoint { get; set; }//点位信息 - private BaseSitenode? sitenode { get; set; }//站台信息 - - private NodeSetting? NodeSettingCarNo { get; set; } - private NodeSetting? NodeSettingCarState { get; set; } - private NodeSetting? NodeSettingCarRun { get; set; } - private NodeSetting? NodeSettingWcsState { get; set; } - private NodeSetting? NodeSettingWcsSend { get; set; } - private NodeSetting? NodeSettingWcsSendMaterial { get; set; } - private NodeSetting? NodeSettingPLCSendSendMaterialstate { get; set; } - public CreateTaskByRecord(IHost host, string siteNo) + public CreateTaskByRecord(IHost host) { this._host = host; - this.ScanPoint = StaticData.BasePlcpointList.ToList();//加载当前站点所对应的点位 - this.sitenode = StaticData.SiteNodeList.FirstOrDefault(t => t.siteNo == siteNo);//获取当前站台信息 - //this.NodeSettingCarNo = this.ScanPoint.FirstOrDefault(t => t.plcpointNo.Contains("carno")); - //this.NodeSettingCarState = this.ScanPoint.FirstOrDefault(t => t.plcpointNo.Contains("carstate")); - //this.NodeSettingCarRun = this.ScanPoint.FirstOrDefault(t => t.plcpointNo.Contains("carrun")); - //this.NodeSettingWcsState = this.ScanPoint.FirstOrDefault(t => t.plcpointNo.Contains("plcsendK")); - //this.NodeSettingWcsSend = this.ScanPoint.FirstOrDefault(t => t.plcpointNo.Contains("wcsend")); - //this.NodeSettingWcsSendMaterial = this.ScanPoint.FirstOrDefault(t => t.plcpointNo.Contains("wcssendmessage")); - //this.NodeSettingPLCSendSendMaterialstate = this.ScanPoint.FirstOrDefault(t => t.plcpointNo.Contains("plcsendmessage")); - try - { - //默认启动,清理plc的上位机写入点位值 - //this._plc.Write(NodeSettingCarRun.plcpointAddress, MainCentralControl.QingKongDianWei); - //this._plc.Write(NodeSettingWcsSend.plcpointAddress, MainCentralControl.QingKongDianWei); - //this._plc.Write(NodeSettingWcsSendMaterial.plcpointAddress, MainCentralControl.QingKongDianWei); - } - catch (Exception ex) - { - Console.WriteLine("站点" + siteNo + " 初始化数据异常" + ex.Message); - LogManager.Error(ex); - } } + /// /// 启动上件扫描监听 /// @@ -65,9 +32,6 @@ namespace Khd.Core.Wcs.Wcs var createBearAgvReturnThread = new Thread(CreateBearAgvReturnLogic); createBearAgvReturnThread.Start(); - //var createRawInWareTaskThread = new Thread(CreateRawInWareTaskLogic); - //createRawInWareTaskThread.Start(); - var createFiveProductInTaskThread = new Thread(CreateFiveProductInTaskLogic); createFiveProductInTaskThread.Start(); @@ -77,18 +41,197 @@ namespace Khd.Core.Wcs.Wcs var createRawTaskThread = new Thread(CreateRawTaskLogic); createRawTaskThread.Start(); - //var createThirdOutTaskThread = new Thread(CreateThirdOutTaskLogic); - //createThirdOutTaskThread.Start(); + var createThirdOutTaskThread = new Thread(CreateThirdOutTaskLogic); + createThirdOutTaskThread.Start(); + + var CreateSecondProductTaskThread = new Thread(CreateSecondProductTaskLogic); + CreateSecondProductTaskThread.Start(); + + var createEmptyTrayThread = new Thread(CreateEmptyTrayLogic); + createEmptyTrayThread.Start(); + + var createThirdWasterTaskThread = new Thread(CreateThirdWasterTaskLogic); + createThirdWasterTaskThread.Start(); Console.WriteLine(DateTime.Now + ":出库任务监听启动成功"); LogManager.Info("出库任务监听启动成功"); } + /// + /// 根据人工任务生成可执行任务 + /// + /// + private void CreateThirdWasterTaskLogic() + { + using var scope = _host.Services.CreateScope(); + using var dbContext = scope.ServiceProvider.GetRequiredService(); + while (true) + { + try + { + dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + bool hasTask = dbContext.WcsTask.Where(t => t.nextPointId == 9).Any(); + if (!hasTask) + { + WcsTaskManual? wcsTaskManual = dbContext.WcsTaskManual.Where(t => t.nextPointId == 9).OrderBy(t => t.createBy).FirstOrDefault(); + if (wcsTaskManual != null) + { + WcsTask wcsTask = CoreMapper.Map(wcsTaskManual); + wcsTask.createTime = DateTime.Now; + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + dbContext.Add(wcsTask); + dbContext.Add(wcsTaskLog); + dbContext.Remove(wcsTaskManual); + dbContext.SaveChanges(); + } + } + } + catch (Exception ex) + { + LogManager.Error(ex); + } + Thread.Sleep(5000); + } + } + + /// + /// 3楼托盘库 + /// + /// + private void CreateEmptyTrayLogic() + { + using var scope = _host.Services.CreateScope(); + using var dbContext = scope.ServiceProvider.GetRequiredService(); + BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 9); + while (true) + { + try + { + dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + bool canCreate = dbContext.WcsTask.Where(t => t.nextPointId == 9).Any(); + if (!canCreate) + { + BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 35); + if (baseEquip.emptyCount == (SystemData.maxTray / 2)) + { + var endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 15 && t.equipStatus == 1 && t.emptyCount == 5); + if (endEquip != null) + { + var wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + serialNo = SystemData.GetSerialNo(dbContext), + taskType = 40, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = baseEquip.objid, + endPointNo = baseEquip.equipNo, + currPointId = endEquip.objid, + currPointNo = endEquip.equipNo, + equipmentNo = agvEquip.equipNo, + useFlag = 1, + qty = 5, + isEmpty = "1", + taskStatus = 0, + createBy = "WCS", + createTime = DateTime.Now, + floorNo = 3, + fromFloorNo = 3, + masterId = 0, + orderId = 0, + materialId = 0, + }; + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + dbContext.Add(wcsTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + } + else + { + endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 15 && t.equipStatus == 0 && t.emptyCount == 0); + if (endEquip != null) + { + var wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + serialNo = SystemData.GetSerialNo(dbContext), + taskType = 43, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = endEquip.objid, + endPointNo = endEquip.equipNo, + currPointId = baseEquip.objid, + currPointNo = baseEquip.equipNo, + equipmentNo = agvEquip.equipNo, + useFlag = 1, + qty = 5, + isEmpty = "1", + taskStatus = 0, + createBy = "WCS", + createTime = DateTime.Now, + floorNo = 3, + fromFloorNo = 3, + masterId = 0, + orderId = 0, + materialId = 0, + }; + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + dbContext.Add(wcsTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + } + } + } + else if (baseEquip.emptyCount == SystemData.maxTray) + { + var endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 15 && t.equipStatus == 0 && t.emptyCount == 0); + if (endEquip != null) + { + var wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + serialNo = SystemData.GetSerialNo(dbContext), + taskType = 43, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = endEquip.objid, + endPointNo = endEquip.equipNo, + currPointId = baseEquip.objid, + currPointNo = baseEquip.equipNo, + equipmentNo = agvEquip.equipNo, + useFlag = 1, + qty = 10, + isEmpty = "1", + taskStatus = 0, + createBy = "WCS", + createTime = DateTime.Now, + floorNo = 3, + fromFloorNo = 3, + masterId = 0, + orderId = 0, + materialId = 0, + }; + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + dbContext.Add(wcsTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + } + } + } + } + catch (Exception ex) + { + LogManager.Error(ex); + } + Thread.Sleep(5000); + } + } + /// /// 半成品入库 /// /// - private void CreateFiveProductInTaskLogic(object? obj) + private void CreateFiveProductInTaskLogic() { using var scope = _host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); @@ -99,75 +242,78 @@ namespace Khd.Core.Wcs.Wcs try { dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); - var wmsProductInstock = dbContext.WmsProductInstock + bool task = dbContext.WcsTask.Where(t => t.nextPointId == 28 && t.taskStatus <= 5).Any(); + if (!task) + { + var wmsProductInstock = dbContext.WmsProductInstock .Where(t => t.productType == "2") .Where(t => t.auditStatus == "1") .Where(t => t.warehouseId == 521) .FirstOrDefault(); - if (wmsProductInstock != null && wmsProductInstock.executeStatus == "0") - { - var wmsBaseLocation = dbContext.WmsBaseLocation - .Where(t => t.warehouseId == 521) - .Where(t => t.activeFlag == "1") - .Where(t => t.instockFlag == "0") - .Where(t => t.outstockFlag == "0") - .Where(t => t.locationStatus == "1") - .Where(t => t.containerCode == null || t.containerCode == "").FirstOrDefault(); - if (wmsBaseLocation != null) + if (wmsProductInstock != null && wmsProductInstock.executeStatus == "0") { - var wcsTask = new WcsTask() + var wmsBaseLocation = dbContext.WmsBaseLocation + .Where(t => t.warehouseId == 521) + .Where(t => t.activeFlag == "1") + .Where(t => t.instockFlag == "0") + .Where(t => t.outstockFlag == "0") + .Where(t => t.locationStatus == "1") + .Where(t => t.containerCode == null || t.containerCode == "").FirstOrDefault(); + if (wmsBaseLocation != null) { - objid = StaticData.SnowId.NextId(), - serialNo = SystemData.GetSerialNo(dbContext), - taskType = 34, - startPointId = wmsBaseLocation.locationId, - startPointNo = wmsBaseLocation.locationCode, - endPointId = endEquip.objid, - endPointNo = endEquip.equipNo, - currPointId = wmsBaseLocation.locationId, - currPointNo = wmsBaseLocation.locationCode, - equipmentNo = agvEquip.equipNo, - useFlag = 1, - qty = 1, - containerNo = wmsProductInstock.palletInfoCode, - taskStatus = 0, - createBy = "WCS", - createTime = DateTime.Now, - floorNo = 5, - fromFloorNo = 5, - isEmpty = "0", - masterId = wmsProductInstock.productId, - orderId = wmsProductInstock.productInstockId, - materialId = wmsProductInstock.productId, - nextPointId = agvEquip.objid, - nextPointNo = agvEquip.equipNo, - }; - WmsProductInstockDetail wmsProductInstockDetail = new WmsProductInstockDetail() - { - erpAmount = 0, - productId = wmsProductInstock.productId, - executeStatus = "1", - productInstockDetailId = StaticData.SnowId.NextId(), - instockAmount = 1, - instockBy = "WCS", - instockDate = DateTime.Now, - instockWay = "2", - locationCode = wmsBaseLocation.locationCode, - planAmount = 1, - productBarcode = wmsProductInstock.productBatch, - productBatch = wmsProductInstock.productBatch, - productInstockId = wmsProductInstock.productInstockId, - }; - WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); - wmsProductInstock.executeStatus = "1"; - wmsBaseLocation.instockFlag = "1"; - wmsBaseLocation.locationStatus = "4"; - dbContext.Add(wmsProductInstock); - dbContext.Update(wmsProductInstock); - dbContext.Update(wmsBaseLocation); - dbContext.Add(wcsTask); - dbContext.Add(wcsTaskLog); - dbContext.SaveChanges(); + var wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + serialNo = SystemData.GetSerialNo(dbContext), + taskType = 34, + endPointId = endEquip.objid, + endPointNo = endEquip.equipNo, + currPointId = wmsBaseLocation.locationId, + currPointNo = wmsBaseLocation.locationCode, + equipmentNo = agvEquip.equipNo, + useFlag = 1, + qty = 1, + containerNo = wmsProductInstock.palletInfoCode, + taskStatus = 0, + createBy = "WCS", + createTime = DateTime.Now, + floorNo = 5, + fromFloorNo = 5, + isEmpty = "0", + masterId = wmsProductInstock.productId, + orderId = wmsProductInstock.productInstockId, + materialId = wmsProductInstock.productId, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + materialBarcode = wmsProductInstock.productBatch, + }; + WmsProductInstockDetail wmsProductInstockDetail = new WmsProductInstockDetail() + { + erpAmount = 0, + productId = wmsProductInstock.productId, + executeStatus = "1", + productInstockDetailId = StaticData.SnowId.NextId(), + instockAmount = 1, + instockBy = "WCS", + instockDate = DateTime.Now, + instockWay = "2", + locationCode = wmsBaseLocation.locationCode, + planAmount = 1, + productBarcode = wmsProductInstock.productBatch, + productBatch = wmsProductInstock.productBatch, + productInstockId = wmsProductInstock.productInstockId, + }; + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + wmsProductInstock.executeStatus = "1"; + wmsBaseLocation.instockFlag = "1"; + wmsBaseLocation.locationStatus = "4"; + dbContext.Add(wmsProductInstock); + dbContext.Update(wmsProductInstock); + dbContext.Update(wmsBaseLocation); + dbContext.Add(wcsTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + } } } } @@ -175,7 +321,7 @@ namespace Khd.Core.Wcs.Wcs { LogManager.Error(ex); } - Thread.Sleep(1000); + Thread.Sleep(5000); } } @@ -184,7 +330,7 @@ namespace Khd.Core.Wcs.Wcs /// /// /// - private void CreateThirdOutTaskLogic(object? obj) + private void CreateThirdOutTaskLogic() { BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 31); BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.objid == 9); @@ -195,138 +341,166 @@ namespace Khd.Core.Wcs.Wcs try { dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); - WcsTask? wcsTask = dbContext.WcsTask.FirstOrDefault(t => t.endPointId == endEquip.objid); - if (wcsTask == null) + bool task = dbContext.WcsTask.Where(t => t.nextPointId == 9 && t.taskStatus <= 5).Any(); + if (!task) { - var wmsRawOutstock = dbContext.WmsRawOutstock - .Where(t => t.endStationCode == endEquip.equipNo) - .Where(t => t.executeStatus == "0") - .OrderBy(t => t.auditStatus == "1") - .FirstOrDefault(); - if (wmsRawOutstock != null) + WcsTask? wcsTask = dbContext.WcsTask.FirstOrDefault(t => t.endPointId == endEquip.objid); + if (wcsTask == null) { - var wmsRawStocks = dbContext.WmsRawStock - .Where(t => t.materialId == wmsRawOutstock.materialId) - .Where(t => t.instockBatch == wmsRawOutstock.materialBatch) - .Where(t => t.warehouseId == 311) - .ToList(); - var wmsBaseLocations = dbContext.WmsBaseLocation - .Where(t => t.activeFlag == "1") - .Where(t => t.delFlag == "0") - .Where(t => t.locationScrapType == "1") - .Where(t => t.instockFlag == "0") - .Where(t => t.outstockFlag == "0") - .Where(t => t.ContainerStatus == "1") - .Where(t => t.warehouseId == 311).ToList(); - var bill = from a in wmsBaseLocations - from b in wmsRawStocks - where a.locationCode == b.locationCode - select new { a, b }; - WmsBaseLocation? wmsBaseLocation = null; - bill = bill.OrderBy(t => t.b.instockDate); - var fistbill = bill.FirstOrDefault(); - if (fistbill != null) + WcsTaskManual? wcsTaskManual = dbContext.WcsTaskManual.Where(t => t.taskType == 999).FirstOrDefault(); + if (wcsTaskManual != null) { - int? locRow = 0; - if (fistbill.a.locRow % 2 == 1) + var wmsRawOutstock = dbContext.WmsRawOutstock.FirstOrDefault(t => t.rawOutstockId == wcsTaskManual.orderId); + if (wmsRawOutstock != null) { - locRow = fistbill.a.locRow + 1; - } - else - { - locRow = fistbill.a.locRow - 1; - } - var lastbill = bill.Where(t => t.a.locRow == locRow) - .Where(t => t.a.locColumn == fistbill.a.locColumn) - .Where(t => t.a.locDeep == 2) - .Where(t => t.b.materialId == wmsRawOutstock.materialId) - .Where(t => t.b.instockBatch == wmsRawOutstock.materialBatch) - .FirstOrDefault(); - if (lastbill != null) - { - if (lastbill.b.instockDate != null && fistbill.b.instockDate != null) + var wmsRawStocks = dbContext.WmsRawStock + .Where(t => t.materialId == wmsRawOutstock.materialId) + .Where(t => t.warehouseId == 311) + .ToList(); + var wmsBaseLocations = dbContext.WmsBaseLocation + .Where(t => t.activeFlag == "1") + .Where(t => t.delFlag == "0") + .Where(t => t.locationScrapType == "1") + .Where(t => t.instockFlag == "0") + .Where(t => t.outstockFlag == "0") + .Where(t => t.ContainerStatus == "1") + .Where(t => t.warehouseId == 311).ToList(); + var bill = from a in wmsBaseLocations + from b in wmsRawStocks + where a.locationCode == b.locationCode + select new { a, b }; + WmsBaseLocation? wmsBaseLocation = null; + bill = bill.OrderBy(t => t.b.instockDate); + var fistbill = bill.FirstOrDefault(); + if (fistbill != null) { - wmsBaseLocation = fistbill.a; - if (lastbill.b.instockDate.Value.Date == fistbill.b.instockDate.Value.Date) + int? locRow = 0; + if (fistbill.a.locRow % 2 == 1) { - wmsBaseLocation = lastbill.a; + locRow = fistbill.a.locRow + 1; } - else//移库 + else { - var formWmsBaseLocation = lastbill.a; - //先找深库位 - List list = wmsRawStocks.Select(t => t.locationCode).ToList(); - var deepLocation = wmsBaseLocations - .Where(t => t.locDeep == 1) - .Where(t => !list.Contains(t.locationCode)) - .ToList(); - if (deepLocation.Count > 0) + locRow = fistbill.a.locRow - 1; + } + var lastbill = bill.Where(t => t.a.locRow == locRow) + .Where(t => t.a.locColumn == fistbill.a.locColumn) + .Where(t => t.a.locDeep == 2) + .Where(t => t.b.materialId == wmsRawOutstock.materialId) + .FirstOrDefault(); + if (lastbill != null) + { + if (lastbill.b.instockDate != null && fistbill.b.instockDate != null) { - var toWmsBaseLocation = deepLocation.First(); - var EKWcsTask = new WcsTask() + wmsBaseLocation = fistbill.a; + if (lastbill.b.instockDate.Value.Date == fistbill.b.instockDate.Value.Date) { - objid = StaticData.SnowId.NextId(), - orderId = wmsRawOutstock.orderId, - taskType = 49, - containerNo = wmsBaseLocation.containerCode, - createBy = "WCS", - createTime = DateTime.Now, - taskStatus = 0, - materialId = wmsRawOutstock.materialId, - currPointId = formWmsBaseLocation.locationId, - currPointNo = formWmsBaseLocation.locationCode, - startPointId = formWmsBaseLocation.locationId, - startPointNo = formWmsBaseLocation.locationCode, - nextPointId = baseEquip.objid, - nextPointNo = baseEquip.equipNo, - endPointId = toWmsBaseLocation.locationId, - endPointNo = toWmsBaseLocation.locationCode, - equipmentNo = baseEquip.equipNo, - useFlag = 1, - qty = 1 - }; - formWmsBaseLocation.outstockFlag = "1"; - formWmsBaseLocation.locationStatus = "4"; - toWmsBaseLocation.instockFlag = "1"; - toWmsBaseLocation.locationStatus = "4"; - dbContext.Add(EKWcsTask); - dbContext.SaveChanges(); - Thread.Sleep(2000); + wmsBaseLocation = lastbill.a; + } + else//移库 + { + var formWmsBaseLocation = lastbill.a; + //先找深库位 + List list = wmsRawStocks.Select(t => t.locationCode).ToList(); + var deepLocation = wmsBaseLocations + .Where(t => t.locDeep == 1) + .Where(t => !list.Contains(t.locationCode)) + .ToList(); + if (deepLocation.Count > 0) + { + var toWmsBaseLocation = deepLocation.First(); + var EKWcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = wmsRawOutstock.rawOutstockId, + taskType = 49, + containerNo = wmsBaseLocation.containerCode, + createBy = "WCS", + createTime = DateTime.Now.AddSeconds(-10), + taskStatus = 0, + materialId = wmsRawOutstock.materialId, + currPointId = formWmsBaseLocation.locationId, + currPointNo = formWmsBaseLocation.locationCode, + nextPointId = baseEquip.objid, + nextPointNo = baseEquip.equipNo, + endPointId = toWmsBaseLocation.locationId, + endPointNo = toWmsBaseLocation.locationCode, + equipmentNo = baseEquip.equipNo, + useFlag = 1, + qty = 1 + }; + formWmsBaseLocation.outstockFlag = "1"; + formWmsBaseLocation.locationStatus = "4"; + toWmsBaseLocation.instockFlag = "1"; + toWmsBaseLocation.locationStatus = "4"; + dbContext.Add(EKWcsTask); + } + } + if (wmsBaseLocation != null) + { + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == wmsBaseLocation.containerCode); + if (mesBasePalletInfo != null) + { + MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode); + if (mesBaseBarcodeInfo != null) + { + WmsRawOutstockDetail wmsRawOutstockDetail = new WmsRawOutstockDetail() + { + rawOutstockDetailId = StaticData.SnowId.NextId(), + createBy = "WCS", + createDate = DateTime.Now, + executeStatus = "0", + erpAmount = 0, + erpStatus = "0", + instockBatch = mesBaseBarcodeInfo.batchCode, + stackAmount = 1, + locationCode = wmsBaseLocation.locationCode, + rawOutstockId = wmsRawOutstock.rawOutstockId, + planAmount = 1, + outstockWay = "2", + outstockPerson = "WCS", + outstockTime = DateTime.Now, + materialProductionDate = mesBaseBarcodeInfo.productionDate, + materialBarcode = mesBasePalletInfo.materialBarcode, + materialId = wmsRawOutstock.materialId, + machineName = mesBaseBarcodeInfo.machineName, + outstockAmount = 1, + taskCode = wmsRawOutstock.taskCode + }; + wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = wmsRawOutstock.rawOutstockId, + taskType = 41, + containerNo = wmsBaseLocation.containerCode, + createBy = "WCS", + createTime = DateTime.Now, + taskStatus = 0, + materialId = wmsRawOutstock.materialId, + currPointId = wmsBaseLocation.locationId, + currPointNo = wmsBaseLocation.locationCode, + nextPointId = baseEquip.objid, + nextPointNo = baseEquip.equipNo, + endPointId = endEquip.objid, + endPointNo = endEquip.equipNo, + equipmentNo = endEquip.equipNo, + useFlag = 1, + qty = 1 + }; + dbContext.Add(wmsRawOutstockDetail); + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + dbContext.Remove(wcsTaskManual); + dbContext.Add(wcsTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + } + } + } } } - if (wmsBaseLocation != null) - { - wcsTask = new WcsTask() - { - objid = StaticData.SnowId.NextId(), - orderId = wmsRawOutstock.orderId, - taskType = 41, - containerNo = wmsBaseLocation.containerCode, - createBy = "WCS", - createTime = DateTime.Now, - taskStatus = 0, - materialId = wmsRawOutstock.materialId, - currPointId = wmsBaseLocation.locationId, - currPointNo = wmsBaseLocation.locationCode, - startPointId = wmsBaseLocation.locationId, - startPointNo = wmsBaseLocation.locationCode, - nextPointId = baseEquip.objid, - nextPointNo = baseEquip.equipNo, - endPointId = endEquip.objid, - endPointNo = endEquip.equipNo, - equipmentNo = endEquip.equipNo, - useFlag = 1, - qty = 1 - }; - WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); - dbContext.Add(wcsTask); - dbContext.Add(wcsTaskLog); - dbContext.SaveChanges(); - } } } } - } } } @@ -367,8 +541,6 @@ namespace Khd.Core.Wcs.Wcs orderId = wmsRawReturn.rawReturnId, taskType = 48, containerNo = "", - startPointId = startEquip.objid, - startPointNo = startEquip.equipNo, currPointId = startEquip.objid, currPointNo = startEquip.equipNo, nextPointId = baseEquip.objid, @@ -402,32 +574,8 @@ namespace Khd.Core.Wcs.Wcs { LogManager.Error(ex); } - Thread.Sleep(1000); - } - } - - /// - /// 背板安装区到半成品入库 - /// - private void CreateRawInWareTaskLogic() - { - using var scope = _host.Services.CreateScope(); - using var dbContext = scope.ServiceProvider.GetRequiredService(); - while (true) - { - try - { - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); - - } - catch (Exception ex) - { - Console.WriteLine(ex.Message + ex.StackTrace); - LogManager.Error(ex); - } Thread.Sleep(5000); } - } /// @@ -442,144 +590,214 @@ namespace Khd.Core.Wcs.Wcs try { dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); - var proStock = dbContext.WmsProductStock + bool task = dbContext.WcsTask.Where(t => t.nextPointId == 28 && t.taskStatus <= 5).Any(); + if (!task) + { + var proStock = dbContext.WmsProductStock .Where(t => t.warehouseId == 531) .Where(t => t.activeFlag == "0").ToList(); - var proOutStock = dbContext.WmsProductOutstock - .Where(t => t.outstockQty < t.applyQty) - .Where(t => t.auditStatus == "1") - .Where(t => t.warehouseId == 531) - .Where(t => t.productType == "3") - .Where(t => t.executeStatus == "0" || t.executeStatus == "1").ToList(); - //获取最早入库时间 - foreach (var item in proOutStock) - { - 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) - .Select(t => t.palletInfoCode) - .ToList(); - - var wmsBaseLocations = dbContext.WmsBaseLocation - .Where(t => t.activeFlag == "1") - .Where(t => t.delFlag == "0") - .Where(t => t.locationScrapType == "1") - .Where(t => t.instockFlag == "0") - .Where(t => t.outstockFlag == "0") - .Where(t => t.warehouseId == item.warehouseId) - .Where(t => wmsproStocks.Contains(t.containerCode)) - .ToList(); - - decimal needNumber = Convert.ToDecimal(item.applyQty - item.outstockQty); - if (needNumber <= 0) + var proOutStock = dbContext.WmsProductOutstock + .Where(t => t.outstockQty < t.applyQty) + .Where(t => t.auditStatus == "1") + .Where(t => t.warehouseId == 531) + .Where(t => t.productType == "3") + .Where(t => t.executeStatus == "0" || t.executeStatus == "1").ToList(); + //获取最早入库时间 + foreach (var item in proOutStock) { - item.executeStatus = "2"; - dbContext.Update(item); - dbContext.SaveChanges(); - continue; - } - - var bill = from a in wmsBaseLocations - from b in proStock - where a.containerCode == b.palletInfoCode - select new { a, b }; - //如果第一列满足需求,则按第一列排序,否则按最后一列排序 - if (bill.Where(t => t.a.locColumn == 1).Select(t => t.b.totalAmount - t.b.occupyAmount - t.b.frozenAmount).Sum() > needNumber) - { - bill = bill.OrderBy(t => t.a.locColumn).ToList(); - } - else - { - bill = bill.OrderByDescending(t => t.a.locColumn).ToList(); - } - //做数量限制 - - BaseEquip ctuEquip = StaticData.BaseEquip.First(t => t.objid == 28); - BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 5); - foreach (var b in bill) - { - item.executeStatus = "1"; - WmsBaseLocation location = b.a; - WmsProductStock stock = b.b; - WcsTask wcsTask; - int qty = 0; - if (stock.totalAmount - stock.occupyAmount - stock.frozenAmount <= needNumber)//该料箱全部出 + task = dbContext.WcsTask.Where(t => t.nextPointId == 28 && t.taskStatus <= 5).Any(); + if (!task) { - item.outstockQty += stock.totalAmount - stock.occupyAmount - stock.frozenAmount; - qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount); - stock.occupyAmount += qty; - stock.updateDate = DateTime.Now; - } - else - { - item.outstockQty += needNumber; - stock.occupyAmount += needNumber; - qty = Convert.ToInt32(needNumber); - stock.updateDate = DateTime.Now; - } - MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == location.containerCode); - if (mesBasePalletInfo != null) - { - WmsProductOutstockDetail detail = new() + 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) + .Select(t => t.palletInfoCode) + .ToList(); + + var wmsBaseLocations = dbContext.WmsBaseLocation + .Where(t => t.activeFlag == "1") + .Where(t => t.delFlag == "0") + .Where(t => t.locationScrapType == "1") + .Where(t => t.instockFlag == "0") + .Where(t => t.outstockFlag == "0") + .Where(t => t.warehouseId == item.warehouseId) + .Where(t => wmsproStocks.Contains(t.containerCode)) + .ToList(); + + decimal needNumber = Convert.ToDecimal(item.applyQty - item.outstockQty); + if (needNumber <= 0) { - productId = item.productId, - productOutstockId = item.productOutstockId, - locationCode = location.locationCode, - executeStatus = "1", - beginTime = DateTime.Now, - warehouseId = item.warehouseId, - erpAmount = 0, - confirmAmount = 0, - outstockAmount = 1, - planAmount = 1, - productBatch = item.productBatch, - productOutstockDetailId = StaticData.SnowId.NextId(), - productBarcode = mesBasePalletInfo.materialBarcode - }; - wcsTask = new WcsTask() + item.executeStatus = "2"; + dbContext.Update(item); + dbContext.SaveChanges(); + continue; + } + + var bill = from a in wmsBaseLocations + from b in proStock + where a.containerCode == b.palletInfoCode + select new { a, b }; + //如果第一列满足需求,则按第一列排序,否则按最后一列排序 + if (bill.Where(t => t.a.locColumn == 1).Select(t => t.b.totalAmount - t.b.frozenAmount).Sum() > needNumber) { - objid = StaticData.SnowId.NextId(), - orderId = item.productOutstockId, - taskType = 38, - containerNo = location.containerCode, - createBy = "WCS", - createTime = DateTime.Now, - taskStatus = 0, - materialId = item.productId, - currPointId = location.locationId, - currPointNo = location.locationCode, - startPointId = location.locationId, - startPointNo = location.locationCode, - nextPointId = ctuEquip.objid, - nextPointNo = ctuEquip.equipNo, - endPointId = lineEquip.objid, - endPointNo = lineEquip.equipNo, - equipmentNo = ctuEquip.equipNo, - useFlag = 1, - qty = qty - }; - location.outstockFlag = "1"; - location.locationStatus = "6"; - location.updateBy = "WCS"; - location.updateTime = DateTime.Now; - dbContext.Add(detail); - dbContext.Update(location); - dbContext.Add(wcsTask); - dbContext.Update(stock); - dbContext.SaveChanges(); - if (qty >= needNumber) + bill = bill.OrderBy(t => t.a.locColumn).ToList(); + } + else { + bill = bill.OrderByDescending(t => t.a.locColumn).ToList(); + } + //做数量限制 + + BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 28); + BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 5); + foreach (var b in bill) + { + item.executeStatus = "1"; + WmsBaseLocation location = b.a; + WmsProductStock stock = b.b; + WcsTask wcsTask; + int qty = 0; + if (stock.totalAmount - stock.frozenAmount <= needNumber) + { + item.outstockQty += stock.totalAmount - stock.frozenAmount; + qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount); + stock.updateDate = DateTime.Now; + } + else + { + item.outstockQty += needNumber; + qty = Convert.ToInt32(needNumber); + stock.updateDate = DateTime.Now; + } + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == location.containerCode); + if (mesBasePalletInfo != null) + { + WmsProductOutstockDetail detail = new() + { + productId = item.productId, + productOutstockId = item.productOutstockId, + locationCode = location.locationCode, + executeStatus = "1", + beginTime = DateTime.Now, + warehouseId = item.warehouseId, + erpAmount = 0, + confirmAmount = 0, + outstockAmount = 1, + planAmount = 1, + productBatch = item.productBatch, + productOutstockDetailId = StaticData.SnowId.NextId(), + productBarcode = mesBasePalletInfo.materialBarcode + }; + if (location.locDeep == 1) + { + int? column = 0; + if (location.locColumn % 2 == 1) + { + column = location.locColumn + 1; + } + else + { + column = location.locColumn - 1; + } + WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locColumn == column) + .Where(t => t.locRow == location.locRow) + .Where(t => t.warehouseId == location.warehouseId).FirstOrDefault(); + if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode)) + { + WmsBaseLocation? toLocation = dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId) + .Where(t => t.locDeep == 1) + .Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(); + toLocation ??= dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId) + .Where(t => t.warehouseId != location.locationId) + .Where(t => string.IsNullOrEmpty(t.containerCode)) + .FirstOrDefault(); + if (toLocation != null) + { + var RemoveTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.productOutstockId, + taskType = 38, + containerNo = wmsBaseLocation.containerCode, + createBy = "WCS", + createTime = DateTime.Now.AddSeconds(-10), + taskStatus = 0, + materialId = item.productId, + currPointId = wmsBaseLocation.locationId, + currPointNo = wmsBaseLocation.locationCode, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = toLocation.locationId, + endPointNo = toLocation.locationCode, + equipmentNo = agvEquip.equipNo, + useFlag = 1, + qty = qty + }; + toLocation.locationStatus = "4"; + toLocation.instockFlag = "1"; + toLocation.updateBy = "WCS"; + toLocation.updateTime = DateTime.Now; + wmsBaseLocation.updateBy = "WCS"; + wmsBaseLocation.updateTime = DateTime.Now; + wmsBaseLocation.outstockFlag = "1"; + wmsBaseLocation.locationStatus = "4"; + dbContext.Update(toLocation); + dbContext.Update(wmsBaseLocation); + dbContext.Add(RemoveTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); + dbContext.Add(wcsTaskLog); + } + else + { + continue; + } + } + } + wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.productOutstockId, + taskType = 38, + containerNo = location.containerCode, + createBy = "WCS", + createTime = DateTime.Now, + taskStatus = 0, + materialId = item.productId, + currPointId = location.locationId, + currPointNo = location.locationCode, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = lineEquip.objid, + endPointNo = lineEquip.equipNo, + equipmentNo = agvEquip.equipNo, + useFlag = 1, + qty = qty + }; + location.outstockFlag = "1"; + location.locationStatus = "6"; + location.updateBy = "WCS"; + location.updateTime = DateTime.Now; + dbContext.Add(detail); + dbContext.Update(location); + dbContext.Add(wcsTask); + dbContext.Update(stock); + dbContext.SaveChanges(); + if (qty >= needNumber) + { + break; + } + } break; } + if (item.beginTime == null) + { + item.beginTime = DateTime.Now; + } + dbContext.Update(item); + dbContext.SaveChanges(); } } - if (item.beginTime == null) - { - item.beginTime = DateTime.Now; - } - dbContext.Update(item); - dbContext.SaveChanges(); } } catch (Exception ex) @@ -587,6 +805,237 @@ namespace Khd.Core.Wcs.Wcs Console.WriteLine(ex.Message + ex.StackTrace); LogManager.Error(ex); } + Thread.Sleep(5000); + } + } + + /// + /// 成品出库 + /// + private void CreateSecondProductTaskLogic() + { + using var scope = _host.Services.CreateScope(); + using var dbContext = scope.ServiceProvider.GetRequiredService(); + while (true) + { + try + { + dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + bool task = dbContext.WcsTask.Where(t => t.nextPointId == 8 && t.taskStatus <= 7).Any(); + if (!task) + { + var proStock = dbContext.WmsProductStock + .Where(t => t.warehouseId == 231) + .Where(t => t.activeFlag == "0").ToList(); + var proOutStock = dbContext.WmsProductOutstock + .Where(t => t.outstockQty < t.applyQty) + .Where(t => t.auditStatus == "1") + .Where(t => t.warehouseId == 231) + .Where(t => t.productType == "3") + .Where(t => t.executeStatus == "0" || t.executeStatus == "1").ToList(); + //获取最早入库时间 + foreach (var item in proOutStock) + { + task = dbContext.WcsTask.Where(t => t.nextPointId == 8 && t.taskStatus <= 7).Any(); + if (!task) + { + BaseEquip endEquip = dbContext.BaseEquip.First(t => t.floorNo == 2 && t.equipType == 1); + var wmsproStocks = proStock + .Where(t => t.productId == item.productId && t.warehouseId == item.warehouseId) + .Select(t => t.palletInfoCode) + .ToList(); + + var wmsBaseLocations = dbContext.WmsBaseLocation + .Where(t => t.activeFlag == "1") + .Where(t => t.delFlag == "0") + .Where(t => t.locationScrapType == "1") + .Where(t => t.instockFlag == "0") + .Where(t => t.outstockFlag == "0") + .Where(t => t.warehouseId == item.warehouseId) + .Where(t => wmsproStocks.Contains(t.containerCode)) + .ToList(); + + decimal needNumber = Convert.ToDecimal(item.applyQty - item.outstockQty); + if (needNumber <= 0) + { + item.executeStatus = "2"; + dbContext.Update(item); + dbContext.SaveChanges(); + continue; + } + + var bill = from a in wmsBaseLocations + from b in proStock + where a.containerCode == b.palletInfoCode + select new { a, b }; + //如果第一列满足需求,则按第一列排序,否则按最后一列排序 + if (bill.Where(t => t.a.locColumn == 1).Select(t => t.b.totalAmount - t.b.frozenAmount).Sum() > needNumber) + { + bill = bill.OrderBy(t => t.a.locColumn).ToList(); + } + else + { + bill = bill.OrderByDescending(t => t.a.locColumn).ToList(); + } + //做数量限制 + + BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8); + BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 2); + foreach (var b in bill) + { + item.executeStatus = "1"; + WmsBaseLocation location = b.a; + WmsProductStock stock = b.b; + WcsTask wcsTask; + int qty = 0; + if (stock.totalAmount - stock.frozenAmount <= needNumber)//该料箱全部出 + { + item.outstockQty += stock.totalAmount - stock.frozenAmount; + qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount); + stock.updateDate = DateTime.Now; + } + else + { + item.outstockQty += needNumber; + qty = Convert.ToInt32(needNumber); + stock.updateDate = DateTime.Now; + } + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == location.containerCode); + if (mesBasePalletInfo != null) + { + WmsProductOutstockDetail detail = new() + { + productId = item.productId, + productOutstockId = item.productOutstockId, + locationCode = location.locationCode, + executeStatus = "1", + beginTime = DateTime.Now, + warehouseId = item.warehouseId, + erpAmount = 0, + confirmAmount = 0, + outstockAmount = 1, + planAmount = 1, + productBatch = item.productBatch, + productOutstockDetailId = StaticData.SnowId.NextId(), + productBarcode = mesBasePalletInfo.materialBarcode + }; + if (location.locDeep == 1) + { + int? column = 0; + if (location.locColumn % 2 == 1) + { + column = location.locColumn + 1; + } + else + { + column = location.locColumn - 1; + } + WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locColumn == column) + .Where(t => t.locRow == location.locRow) + .Where(t => t.warehouseId == location.warehouseId).FirstOrDefault(); + if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode)) + { + WmsBaseLocation? toLocation = dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId) + .Where(t => t.locDeep == 1) + .Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(); + toLocation ??= dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId) + .Where(t => t.warehouseId != location.locationId) + .Where(t => string.IsNullOrEmpty(t.containerCode)) + .FirstOrDefault(); + if (toLocation != null) + { + var RemoveTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.productOutstockId, + taskType = 38, + containerNo = wmsBaseLocation.containerCode, + createBy = "WCS", + createTime = DateTime.Now.AddSeconds(-10), + taskStatus = 0, + materialId = item.productId, + currPointId = wmsBaseLocation.locationId, + currPointNo = wmsBaseLocation.locationCode, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = toLocation.locationId, + endPointNo = toLocation.locationCode, + equipmentNo = agvEquip.equipNo, + useFlag = 1, + qty = qty + }; + toLocation.locationStatus = "4"; + toLocation.instockFlag = "1"; + toLocation.updateBy = "WCS"; + toLocation.updateTime = DateTime.Now; + wmsBaseLocation.updateBy = "WCS"; + wmsBaseLocation.updateTime = DateTime.Now; + wmsBaseLocation.outstockFlag = "1"; + wmsBaseLocation.locationStatus = "4"; + dbContext.Update(toLocation); + dbContext.Update(wmsBaseLocation); + dbContext.Add(RemoveTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); + dbContext.Add(wcsTaskLog); + } + else + { + continue; + } + } + } + wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.productOutstockId, + taskType = 38, + containerNo = location.containerCode, + createBy = "WCS", + createTime = DateTime.Now, + taskStatus = 0, + materialId = item.productId, + currPointId = location.locationId, + currPointNo = location.locationCode, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = lineEquip.objid, + endPointNo = lineEquip.equipNo, + equipmentNo = agvEquip.equipNo, + useFlag = 1, + qty = qty + }; + location.outstockFlag = "1"; + location.locationStatus = "6"; + location.updateBy = "WCS"; + location.updateTime = DateTime.Now; + dbContext.Add(detail); + dbContext.Update(location); + dbContext.Add(wcsTask); + dbContext.Update(stock); + dbContext.SaveChanges(); + if (qty >= needNumber) + { + break; + } + break; + } + } + if (item.beginTime == null) + { + item.beginTime = DateTime.Now; + } + dbContext.Update(item); + dbContext.SaveChanges(); + } + } + } + } + catch (Exception ex) + { + Console.WriteLine(ex.Message + ex.StackTrace); + LogManager.Error(ex); + } + Thread.Sleep(5000); } } @@ -610,7 +1059,7 @@ namespace Khd.Core.Wcs.Wcs .Where(t => t.outstockAmount > t.realOutstockAmount) .Where(t => t.auditStatus == "1") .ToList(); - List wcsTaskManuals = dbContext.WcsTaskManual.Where(t=>t.nextPointId== 11).OrderBy(t => t.createBy).ToList(); + List wcsTaskManuals = dbContext.WcsTaskManual.Where(t => t.nextPointId == 11).OrderBy(t => t.createBy).ToList(); if (wcsTaskManuals.Count > 0) { WcsOutstockLock wcsOutstockLock = dbContext.WcsOutstockLock.Where(t => t.warehouseId == 512).First(); @@ -669,7 +1118,7 @@ namespace Khd.Core.Wcs.Wcs where a.locationCode == b.locationCode select new { a, b }; //如果第一列满足需求,则按第一列排序,否则按最后一列排序 - if (bill.Where(t => t.a.locColumn == 1).Select(t => t.b.totalAmount - t.b.occupyAmount - t.b.frozenAmount).Sum() > needNumber) + if (bill.Where(t => t.a.locColumn == 1).Select(t => t.b.totalAmount - t.b.frozenAmount).Sum() > needNumber) { bill = bill.OrderBy(t => t.a.locColumn).ToList(); } @@ -692,17 +1141,15 @@ namespace Khd.Core.Wcs.Wcs WcsTask wcsTask; int qty = 0; int outNumber = 0; - if (stock.totalAmount - stock.occupyAmount - stock.frozenAmount <= needNumber)//该料箱全部出 + if (stock.totalAmount - stock.frozenAmount <= needNumber)//该料箱全部出 { - RealOutNumber += stock.totalAmount - stock.occupyAmount - stock.frozenAmount; - outNumber = Convert.ToInt32(stock.totalAmount - stock.occupyAmount - stock.frozenAmount); + RealOutNumber += stock.totalAmount - stock.frozenAmount; qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount); stock.updateDate = DateTime.Now; } else { RealOutNumber += needNumber; - outNumber = Convert.ToInt32(needNumber); qty = Convert.ToInt32(needNumber); stock.updateDate = DateTime.Now; } @@ -718,8 +1165,6 @@ namespace Khd.Core.Wcs.Wcs materialId = item.materialId, currPointId = location.locationId, currPointNo = location.locationCode, - startPointId = location.locationId, - startPointNo = location.locationCode, nextPointId = ctuEquip.objid, nextPointNo = ctuEquip.equipNo, endPointId = lineEquip.objid, @@ -727,7 +1172,7 @@ namespace Khd.Core.Wcs.Wcs equipmentNo = ctuEquip.equipNo, ud1 = location.locColumn, useFlag = 1, - qty = outNumber + qty = qty }; MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.barcodeInfo == stock.instockBatch).FirstOrDefault(); if (mesBaseBarcodeInfo != null) @@ -753,16 +1198,15 @@ namespace Khd.Core.Wcs.Wcs outstockWay = "2", materialProductionDate = mesBaseBarcodeInfo.productionDate }; - dbContext.Add(wmsProductOutstockDetail); location.outstockFlag = "1"; location.locationStatus = "6"; location.updateBy = "WCS"; location.updateTime = DateTime.Now; wcsOutstockLock.boxStatus = 1; + dbContext.Add(wmsProductOutstockDetail); dbContext.Update(location); dbContext.Add(wcsTask); dbContext.Update(stock); - dbContext.SaveChanges(); if (qty >= needNumber) { break; @@ -789,7 +1233,6 @@ namespace Khd.Core.Wcs.Wcs var orderList = rawOutStock.Where(t => t.endStationCode == item.endStationCode).ToList(); foreach (var order in orderList) { - decimal? RealOutNummber = order.realOutstockAmount; WcsTask? task = dbContext.WcsTask.FirstOrDefault(t => t.taskType == 32); if (task == null) { @@ -808,14 +1251,14 @@ namespace Khd.Core.Wcs.Wcs .Where(t => wmsRawStocks.Contains(t.containerCode)) .ToList(); - decimal? needNumber = order.outstockAmount - RealOutNummber; + decimal? needNumber = order.outstockAmount - RealOutNumber; var bill = from a in wmsBaseLocations from b in rawStock where a.containerCode == b.palletInfoCode select new { a, b }; //如果第一列满足需求,则按第一列排序,否则按最后一列排序 - if (bill.Where(t => t.a.locColumn == 1).Select(t => t.b.totalAmount - t.b.occupyAmount - t.b.frozenAmount).Sum() > needNumber) + if (bill.Where(t => t.a.locColumn == 1).Select(t => t.b.totalAmount - t.b.frozenAmount).Sum() > needNumber) { bill = bill.OrderBy(t => t.a.locColumn).ToList(); } @@ -835,17 +1278,15 @@ namespace Khd.Core.Wcs.Wcs WmsRawStock stock = b.b; WcsTask wcsTask; int qty = 0; - if (stock.totalAmount - stock.occupyAmount - stock.frozenAmount <= needNumber)//该料箱全部出 + if (stock.totalAmount - stock.frozenAmount <= needNumber)//该料箱全部出 { - RealOutNummber += stock.totalAmount - stock.occupyAmount - stock.frozenAmount; + RealOutNumber += stock.totalAmount - stock.frozenAmount; qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount); - stock.occupyAmount += qty; stock.updateDate = DateTime.Now; } else { - RealOutNummber += needNumber; - stock.occupyAmount += needNumber; + RealOutNumber += needNumber; qty = Convert.ToInt32(needNumber); stock.updateDate = DateTime.Now; } @@ -861,8 +1302,6 @@ namespace Khd.Core.Wcs.Wcs materialId = item.materialId, currPointId = location.locationId, currPointNo = location.locationCode, - startPointId = location.locationId, - startPointNo = location.locationCode, nextPointId = ctuEquip.objid, nextPointNo = ctuEquip.equipNo, endPointId = lineEquip.objid, @@ -907,7 +1346,6 @@ namespace Khd.Core.Wcs.Wcs dbContext.Update(location); dbContext.Add(wcsTask); dbContext.Update(stock); - dbContext.SaveChanges(); CreateSuccess = true; if (qty >= needNumber) { @@ -915,46 +1353,43 @@ namespace Khd.Core.Wcs.Wcs } } } - } - if (CreateSuccess) - { - BaseEquip startStationEquip = StaticData.BaseEquip.First(t => t.objid == 21); - BaseEquip bearAgvEquip = StaticData.BaseEquip.First(t => t.objid == 10); - BaseEquip endStationEquip = StaticData.BaseEquip.First(t => t.equipNo == item.endStationCode); - WcsTask bearAgvTask = new() + if (CreateSuccess) { - objid = StaticData.SnowId.NextId(), - orderId = item.orderId, - taskType = 32, - containerNo = "", - startPointId = startStationEquip.objid, - startPointNo = startStationEquip.equipNo, - currPointId = startStationEquip.objid, - currPointNo = startStationEquip.equipNo, - nextPointId = bearAgvEquip.objid, - nextPointNo = bearAgvEquip.equipNo, - endPointId = endStationEquip.objid, - endPointNo = endStationEquip.equipNo, - serialNo = SystemData.GetSerialNo(dbContext), - taskStatus = 0, - createTime = DateTime.Now, - createBy = "WCS", - materialId = item.materialId, - qty = 1, - useFlag = 1, - equipmentNo = startStationEquip.equipNo, - remark = "组装出库", - floorNo = 5, - masterId = item.materialId, - fromFloorNo = 5, - materialNo = item.materialBatch, - }; - if (item.beginTime == null) - { - item.beginTime = DateTime.Now; + BaseEquip startStationEquip = StaticData.BaseEquip.First(t => t.objid == 21); + BaseEquip bearAgvEquip = StaticData.BaseEquip.First(t => t.objid == 10); + BaseEquip endStationEquip = StaticData.BaseEquip.First(t => t.equipNo == item.endStationCode); + WcsTask bearAgvTask = new() + { + objid = StaticData.SnowId.NextId(), + orderId = item.orderId, + taskType = 32, + containerNo = "", + currPointId = startStationEquip.objid, + currPointNo = startStationEquip.equipNo, + nextPointId = bearAgvEquip.objid, + nextPointNo = bearAgvEquip.equipNo, + endPointId = endStationEquip.objid, + endPointNo = endStationEquip.equipNo, + serialNo = SystemData.GetSerialNo(dbContext), + taskStatus = 0, + createTime = DateTime.Now, + createBy = "WCS", + materialId = item.materialId, + qty = 1, + useFlag = 1, + equipmentNo = startStationEquip.equipNo, + remark = "组装出库", + floorNo = 5, + masterId = item.materialId, + fromFloorNo = 5, + }; + if (item.beginTime == null) + { + item.beginTime = DateTime.Now; + } + dbContext.Add(bearAgvTask); + dbContext.Update(item); } - dbContext.Add(bearAgvTask); - dbContext.Update(item); dbContext.SaveChanges(); } } @@ -963,149 +1398,215 @@ namespace Khd.Core.Wcs.Wcs } if (endEquip.equipType == 12 || endEquip.equipType == 13)//原材料到柜体验收区 { - if (endEquip.emptyCount == 0) + bool hasTask = dbContext.WcsTask.Where(t => t.nextPointId == 28 && t.taskStatus <= 5).Any(); + if (hasTask) { - var wmsRawStocks = rawStock - .Where(t => t.materialId == item.materialId && t.warehouseId == item.warehouseId) - .WhereIf(endEquip.equipType == 13, t => t.completeFlag == "0") - .WhereIf(endEquip.equipType == 12, t => t.completeFlag == "1") - .Where(t => t.totalAmount > t.occupyAmount + t.frozenAmount) - .Select(t => t.palletInfoCode) - .ToList(); - - var wmsBaseLocations = dbContext.WmsBaseLocation - .Where(t => t.activeFlag == "1") - .Where(t => t.delFlag == "0") - .Where(t => t.locationScrapType == "1") - .Where(t => t.instockFlag == "0") - .Where(t => t.outstockFlag == "0") - .Where(t => t.warehouseId == item.warehouseId) - .Where(t => wmsRawStocks.Contains(t.containerCode)) - .ToList(); - - decimal? needNumber = item.outstockAmount - item.realOutstockAmount; - if (needNumber <= 0) + if (endEquip.emptyCount == 0) { - item.executeStatus = "2"; - dbContext.Update(item); - dbContext.SaveChanges(); - continue; - } + var wmsRawStocks = rawStock + .Where(t => t.materialId == item.materialId && t.warehouseId == item.warehouseId) + .WhereIf(endEquip.equipType == 13, t => t.completeFlag == "0") + .WhereIf(endEquip.equipType == 12, t => t.completeFlag == "1") + .Where(t => t.totalAmount > t.frozenAmount) + .Select(t => t.palletInfoCode) + .ToList(); - var bill = from a in wmsBaseLocations - from b in rawStock - where a.containerCode == b.palletInfoCode - select new { a, b }; - //如果第一列满足需求,则按第一列排序,否则按最后一列排序 - if (bill.Where(t => t.a.locColumn == 1).Select(t => t.b.totalAmount - t.b.occupyAmount - t.b.frozenAmount).Sum() > needNumber) - { - bill = bill.OrderBy(t => t.a.locColumn).Take(1).ToList(); - } - else - { - bill = bill.OrderByDescending(t => t.a.locColumn).Take(1).ToList(); - } + var wmsBaseLocations = dbContext.WmsBaseLocation + .Where(t => t.activeFlag == "1") + .Where(t => t.delFlag == "0") + .Where(t => t.locationScrapType == "1") + .Where(t => t.instockFlag == "0") + .Where(t => t.outstockFlag == "0") + .Where(t => t.warehouseId == item.warehouseId) + .Where(t => wmsRawStocks.Contains(t.containerCode)) + .ToList(); - BaseEquip bearAgvEquip = StaticData.BaseEquip.First(t => t.objid == 28); - BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.equipNo == item.endStationCode); - foreach (var b in bill) - { - item.executeStatus = "1"; - WmsBaseLocation location = b.a; - WmsRawStock stock = b.b; - WcsTask wcsTask; - int qty = 0; - if (stock.totalAmount - stock.occupyAmount - stock.frozenAmount <= needNumber)//该料箱全部出 + decimal? needNumber = item.outstockAmount - item.realOutstockAmount; + if (needNumber <= 0) { - item.realOutstockAmount += stock.totalAmount - stock.occupyAmount - stock.frozenAmount; - qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount); - stock.occupyAmount += qty; - stock.updateDate = DateTime.Now; + item.executeStatus = "2"; + dbContext.Update(item); + dbContext.SaveChanges(); + continue; + } + + var bill = from a in wmsBaseLocations + from b in rawStock + where a.containerCode == b.palletInfoCode + select new { a, b }; + //如果第一列满足需求,则按第一列排序,否则按最后一列排序 + if (bill.Where(t => t.a.locColumn == 1).Select(t => t.b.totalAmount - t.b.frozenAmount).Sum() > needNumber) + { + bill = bill.OrderBy(t => t.a.locColumn).Take(1).ToList(); } else { - item.realOutstockAmount += needNumber; - stock.occupyAmount += needNumber; - qty = Convert.ToInt32(needNumber); - stock.updateDate = DateTime.Now; + bill = bill.OrderByDescending(t => t.a.locColumn).Take(1).ToList(); } - MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.barcodeInfo == stock.instockBatch).FirstOrDefault(); - if (mesBaseBarcodeInfo != null) + + BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 28); + BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.equipNo == item.endStationCode); + foreach (var b in bill) { - wcsTask = new WcsTask() + item.executeStatus = "1"; + WmsBaseLocation location = b.a; + WmsRawStock stock = b.b; + WcsTask wcsTask; + int qty = 0; + if (stock.totalAmount - stock.frozenAmount <= needNumber)//该料箱全部出 { - objid = StaticData.SnowId.NextId(), - orderId = item.rawOutstockId, - taskType = endEquip.equipType == 12 ? 46 : 33,//如果是12那么就是原材料到柜体验收区,如果是13那么就是原材料到背板安装区 - containerNo = location.containerCode, - createBy = "WCS", - createTime = DateTime.Now, - taskStatus = 0, - materialId = item.materialId, - currPointId = location.locationId, - currPointNo = location.locationCode, - startPointId = location.locationId, - startPointNo = location.locationCode, - nextPointId = bearAgvEquip.objid, - nextPointNo = bearAgvEquip.equipNo, - endPointId = lineEquip.objid, - endPointNo = lineEquip.equipNo, - equipmentNo = bearAgvEquip.equipNo, - useFlag = 1, - qty = qty - }; - WmsRawOutstockDetail wmsProductOutstockDetail = new WmsRawOutstockDetail() - { - rawOutstockDetailId = StaticData.SnowId.NextId(), - rawOutstockId = item.rawOutstockId, - materialId = item.materialId, - createDate = DateTime.Now, - createBy = "WCS", - taskCode = wcsTask.objid.ToString(), - executeStatus = "1", - locationCode = location.locationCode, - outstockAmount = qty, - planAmount = item.outstockAmount, - warehouseId = item.warehouseId, - materialBarcode = mesBaseBarcodeInfo.barcodeInfo, - instockBatch = mesBaseBarcodeInfo.batchCode, - stackAmount = qty, - outstockPerson = "WCS", - outstockTime = DateTime.Now, - outstockWay = "2", - materialProductionDate = mesBaseBarcodeInfo.productionDate - }; - dbContext.Add(wmsProductOutstockDetail); - location.outstockFlag = "1"; - location.locationStatus = "6"; - location.updateBy = "WCS"; - location.updateTime = DateTime.Now; - endEquip.emptyCount = 1; - dbContext.Update(endEquip); - dbContext.Update(location); - dbContext.Add(wcsTask); - dbContext.Update(stock); - dbContext.SaveChanges(); - if (qty >= needNumber) - { - break; + item.realOutstockAmount += stock.totalAmount - stock.frozenAmount; + qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount); + stock.updateDate = DateTime.Now; } + else + { + item.realOutstockAmount += needNumber; + qty = Convert.ToInt32(needNumber); + stock.updateDate = DateTime.Now; + } + MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.barcodeInfo == stock.instockBatch).FirstOrDefault(); + if (mesBaseBarcodeInfo != null) + { + if (location.locDeep == 1) + { + int? column = 0; + if (location.locColumn % 2 == 1) + { + column = location.locColumn + 1; + } + else + { + column = location.locColumn - 1; + } + WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locColumn == column) + .Where(t => t.locRow == location.locRow) + .Where(t => t.warehouseId == location.warehouseId).FirstOrDefault(); + if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode)) + { + WmsBaseLocation? toLocation = dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId) + .Where(t => t.locDeep == 1) + .Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(); + toLocation ??= dbContext.WmsBaseLocation.Where(t => t.warehouseId == location.warehouseId) + .Where(t => t.warehouseId != location.locationId) + .Where(t => string.IsNullOrEmpty(t.containerCode)) + .FirstOrDefault(); + if (toLocation != null) + { + var RemoveTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.rawOutstockId, + taskType = 38, + containerNo = wmsBaseLocation.containerCode, + createBy = "WCS", + createTime = DateTime.Now.AddSeconds(-10), + taskStatus = 0, + materialId = item.materialId, + currPointId = wmsBaseLocation.locationId, + currPointNo = wmsBaseLocation.locationCode, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = toLocation.locationId, + endPointNo = toLocation.locationCode, + equipmentNo = agvEquip.equipNo, + useFlag = 1, + qty = qty + }; + toLocation.locationStatus = "4"; + toLocation.instockFlag = "1"; + toLocation.updateBy = "WCS"; + toLocation.updateTime = DateTime.Now; + wmsBaseLocation.updateBy = "WCS"; + wmsBaseLocation.updateTime = DateTime.Now; + wmsBaseLocation.outstockFlag = "1"; + wmsBaseLocation.locationStatus = "4"; + dbContext.Update(toLocation); + dbContext.Update(wmsBaseLocation); + dbContext.Add(RemoveTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); + dbContext.Add(wcsTaskLog); + } + else + { + continue; + } + } + } + wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.rawOutstockId, + taskType = endEquip.equipType == 12 ? 46 : 33,//如果是12那么就是原材料到柜体验收区,如果是13那么就是原材料到背板安装区 + containerNo = location.containerCode, + createBy = "WCS", + createTime = DateTime.Now, + taskStatus = 0, + materialId = item.materialId, + currPointId = location.locationId, + currPointNo = location.locationCode, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = lineEquip.objid, + endPointNo = lineEquip.equipNo, + equipmentNo = agvEquip.equipNo, + useFlag = 1, + qty = qty + }; + WmsRawOutstockDetail wmsProductOutstockDetail = new WmsRawOutstockDetail() + { + rawOutstockDetailId = StaticData.SnowId.NextId(), + rawOutstockId = item.rawOutstockId, + materialId = item.materialId, + createDate = DateTime.Now, + createBy = "WCS", + taskCode = wcsTask.objid.ToString(), + executeStatus = "1", + locationCode = location.locationCode, + outstockAmount = qty, + planAmount = item.outstockAmount, + warehouseId = item.warehouseId, + materialBarcode = mesBaseBarcodeInfo.barcodeInfo, + instockBatch = mesBaseBarcodeInfo.batchCode, + stackAmount = qty, + outstockPerson = "WCS", + outstockTime = DateTime.Now, + outstockWay = "2", + materialProductionDate = mesBaseBarcodeInfo.productionDate + }; + dbContext.Add(wmsProductOutstockDetail); + location.outstockFlag = "1"; + location.locationStatus = "6"; + location.updateBy = "WCS"; + location.updateTime = DateTime.Now; + endEquip.emptyCount = 1; + dbContext.Update(endEquip); + dbContext.Update(location); + dbContext.Add(wcsTask); + dbContext.Update(stock); + dbContext.SaveChanges(); + if (qty >= needNumber) + { + break; + } + } + if (item.beginTime == null) + { + item.beginTime = DateTime.Now; + } + dbContext.Update(item); + dbContext.SaveChanges(); + break; } - if (item.beginTime == null) - { - item.beginTime = DateTime.Now; - } - dbContext.Update(item); - dbContext.SaveChanges(); } } } } } } - catch + catch (Exception ex) { - + LogManager.Error(ex); } Thread.Sleep(1000); } diff --git a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs index d212567..d9d3a71 100644 --- a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs +++ b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs @@ -1,15 +1,11 @@ -using Khd.Core.Application; -using Khd.Core.Application.Interface; -using Khd.Core.Domain.Models; +using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Library.Mapper; -using Khd.Core.Plc; using Khd.Core.Plc.S7; using Khd.Core.Wcs.Global; using Masuit.Tools.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; -using System.Diagnostics; using Z.EntityFramework.Plus; namespace Khd.Core.Wcs.Wcs @@ -56,6 +52,7 @@ namespace Khd.Core.Wcs.Wcs /// 提升机反馈流水号 /// private readonly BasePlcpoint reserialno06; + private readonly BasePlcpoint mesClose; @@ -72,6 +69,7 @@ namespace Khd.Core.Wcs.Wcs //一楼提升机流水号 读 this.serialno06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("serialno06")); + this.mesClose = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("mesclose")); this.automatic = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("automatic")); //一楼提升机状态 读 this.equipstate06 = StaticData.BasePlcpointList.First(t => t.equipmentNo.Contains("Hoister") && t.plcpointNo.Contains("equipstate06")); @@ -132,50 +130,32 @@ namespace Khd.Core.Wcs.Wcs int firstFloorCount = dbContext.WcsTask.Where(t => t.currPointId == 1).Count(); if (Convert.ToInt32(linesignal) == 0 && taskCount == 0 && firstFloorCount == 0) { - WcsTaskManual? wcsTaskManual = dbContext.WcsTaskManual.Where(t => t.nextPointId == 40).FirstOrDefault(); - if (wcsTaskManual != null) + bool canSend = dbContext.WcsTask.Where(t => t.floorNo == 1).Where(t => t.taskStatus > 0).Any(); + if (!canSend) { - if (wcsTaskManual.taskType == 58) + WcsTaskManual? wcsTaskManual = dbContext.WcsTaskManual.Where(t => t.nextPointId == 40).FirstOrDefault(); + if (wcsTaskManual != null) { - this._plc.WriteToPoint(oneOutPoint.plcpointAddress, "1", oneOutPoint.plcpointLength.ToString()); - WcsTask wcsTask = CoreMapper.Map(wcsTaskManual); - wcsTask.createTime = DateTime.Now; - wcsTask.createBy = "一楼接驳位线程"; - wcsTask.taskStatus = 0; - wcsTask.useFlag = 0; - wcsTask.isEmpty = "1"; - wcsTask.remark = "一楼创建入库任务"; - WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); - mdjEquip.emptyCount -= 1; - if (mdjEquip.emptyCount <= 0) + if (wcsTaskManual.taskType == 53) { + this._plc.WriteToPoint(someOutPoint.plcpointAddress, "1", someOutPoint.plcpointLength.ToString()); + WcsTask wcsTask = CoreMapper.Map(wcsTaskManual); + wcsTask.createTime = DateTime.Now; + wcsTask.createBy = "一楼接驳位线程"; + wcsTask.taskStatus = 0; + wcsTask.useFlag = 1; + wcsTask.isEmpty = "1"; + wcsTask.qty = mdjEquip.emptyCount; + wcsTask.remark = "一楼创建入库任务"; + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); mdjEquip.emptyCount = 0; + dbContext.Update(mdjEquip); + dbContext.Add(wcsTaskLog); + dbContext.Add(wcsTask); + dbContext.SaveChanges(); + LogManager.Info("一楼接驳位线程:空托盘任务下发成功"); + Console.WriteLine(DateTime.Now + ":一楼接驳位线程:空托盘任务下发成功"); } - dbContext.Update(mdjEquip); - dbContext.Add(wcsTaskLog); - dbContext.Add(wcsTask); - dbContext.SaveChanges(); - LogManager.Info("一楼接驳位线程:空托盘任务下发成功"); - Console.WriteLine(DateTime.Now + ":一楼接驳位线程:空托盘任务下发成功"); - } - else if (wcsTaskManual.taskType == 61) - { - this._plc.WriteToPoint(someOutPoint.plcpointAddress, "1", someOutPoint.plcpointLength.ToString()); - WcsTask wcsTask = CoreMapper.Map(wcsTaskManual); - wcsTask.createTime = DateTime.Now; - wcsTask.createBy = "一楼接驳位线程"; - wcsTask.taskStatus = 0; - wcsTask.useFlag = 1; - wcsTask.isEmpty = mdjEquip.emptyCount.ToString(); - wcsTask.remark = "一楼创建入库任务"; - WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); - mdjEquip.emptyCount = 0; - dbContext.Update(mdjEquip); - dbContext.Add(wcsTaskLog); - dbContext.Add(wcsTask); - dbContext.SaveChanges(); - LogManager.Info("一楼接驳位线程:空托盘任务下发成功"); - Console.WriteLine(DateTime.Now + ":一楼接驳位线程:空托盘任务下发成功"); } } } @@ -188,12 +168,32 @@ namespace Khd.Core.Wcs.Wcs } } + private bool ReadEmptyLocation() + { + var oneOutPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "oneOut"); + var someOutPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "someOut"); + var oneInPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "oneIn"); + var someInPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "someIn"); + var oneOutValue = this._plc.Read(oneOutPoint.plcpointAddress); + var someOutValue = this._plc.Read(someOutPoint.plcpointAddress); + var oneInValue = this._plc.Read(oneInPoint.plcpointAddress); + var someInValue = this._plc.Read(someInPoint.plcpointAddress); + if (oneOutValue != null && someOutValue != null && oneInValue != null && someInValue != null) + { + if (Convert.ToInt32(oneOutValue) == 0 && Convert.ToInt32(someOutValue) == 0 && Convert.ToInt32(oneInValue) == 0 && Convert.ToInt32(someInValue) == 0) + { + return true; + } + } + return false; + } + /// /// 启动一楼接驳位线程 /// private void FirstFloorLine() { - List Itpyes = new() { 1, 3, 5, 7 }; + List Outtpyes = new() { 2, 4, 8, 6 }; using var scope = _host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); while (true) @@ -207,6 +207,7 @@ namespace Khd.Core.Wcs.Wcs if (linesignal01Value != null && RFID001Value != null) { //正常托盘到位 + BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 1); if (Convert.ToInt32(linesignal01Value) == 1) { //判断task表里没有该rfid的未完成的入库 @@ -216,24 +217,39 @@ namespace Khd.Core.Wcs.Wcs { //根据托盘号获取物料码 var material = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value).FirstOrDefault(); + WcsTaskLog? taskLog = dbContext.WcsTaskLog.Where(t => t.containerNo == RFID001Value).OrderByDescending(t => t.createTime).FirstOrDefault(); + if (material != null) { - var lastTask = dbContext.WcsTaskLog.Where(t => t.containerNo == RFID001Value).OrderByDescending(t => t.createTime).FirstOrDefault(); - if (lastTask != null) - + if (taskLog != null) { - if (lastTask.materialId == material.materialId && lastTask.ud3 != "10") + if (taskLog.materialBarcode == material.materialBarcode) { - lastTask.ud2 = "1"; - lastTask.ud3 = "1"; - dbContext.Update(lastTask); - dbContext.SaveChanges(); - LogManager.Info("一楼接驳位线程:托盘" + RFID001Value + "绑定信息未更新,请人工确认是否再次入库"); - Console.WriteLine(DateTime.Now + ":一楼接驳位线程:托盘" + RFID001Value + "绑定信息未更新,请人工确认是否再次入库"); - Thread.Sleep(3000); - continue; + if (baseEquip.containerNo == "0") + { + baseEquip.containerNo = null; + dbContext.Update(baseEquip); + dbContext.SaveChanges(); + LogManager.Info("一楼接驳位线程:托盘" + RFID001Value + "解绑信息更新成功"); + } + else if (baseEquip.containerNo != RFID001Value) + { + baseEquip.containerNo = RFID001Value; + dbContext.Update(baseEquip); + dbContext.SaveChanges(); + LogManager.Info("一楼接驳位线程:托盘" + RFID001Value + "绑定信息更新成功"); + Console.WriteLine(DateTime.Now + ":一楼接驳位线程:托盘" + RFID001Value + "绑定信息更新成功"); + Thread.Sleep(3000); + continue; + } + else + { + Thread.Sleep(3000); + continue; + } } } + var warehouseId = dbContext.WmsWarehouseMaterial.Where(t => t.storageType == "1" && t.storageId == material.materialId).FirstOrDefault()?.warehouseId; if (warehouseId != null) { @@ -253,11 +269,9 @@ namespace Khd.Core.Wcs.Wcs taskType = Convert.ToInt32(dic.dicValue), taskStatus = 0, containerNo = RFID001Value, - materialNo = material.materialCode, + materialBarcode = material.materialBarcode, materialId = material.materialId, qty = Convert.ToInt32(material.bindAmount), - startPointId = F01, - startPointNo = "TSJ_01", currPointId = F01, currPointNo = "TSJ_01", nextPointId = T01, @@ -279,15 +293,20 @@ namespace Khd.Core.Wcs.Wcs } } } - else if (Itpyes.Contains(task.taskType))//按照正常任务下发 + else if (string.IsNullOrEmpty(task.containerNo))//按照正常任务下发 { if (task.nextPointId != T01) { + task.containerNo = RFID001Value; task.currPointId = F01; task.currPointNo = "TSJ_01"; task.nextPointId = T01; task.nextPointNo = "TSJ_01"; task.taskStatus = 0; + if (task.createBy == "wpf") + { + task.useFlag = 0; + } task.updateBy = "一楼接驳位线程"; task.updateTime = DateTime.Now; task.remark = "一楼创建入库任务"; @@ -298,43 +317,19 @@ namespace Khd.Core.Wcs.Wcs } } //出库 - else + else if (Outtpyes.Contains(task.taskType)) { - dbContext.WcsTask.Where(t => t.objid == task.objid).Delete(); - dbContext.WcsTaskLog.Where(t => t.objid == task.objid).Update(t => new WcsTaskLog { taskStatus = 4 }); - //没有绑定信息 - - //WmsProductOutstock? wmsProductOutstock = dbContext.WmsProductOutstock.FirstOrDefault(t => t.palletInfoCode == RFID001Value&& t.executeStatus =="1"); - //WmsRawOutstock? wmsRawOutstock = dbContext.WmsRawOutstock.FirstOrDefault(t => t.palletInfoCode == RFID001Value && t.executeStatus == "1"); - //if (wmsProductOutstock != null || wmsRawOutstock != null) - //{ - // //清空托盘绑定 - // var material = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value).FirstOrDefault(); - // if (material != null) - // { - // material.bindAmount = 0; - // material.materialBarcode = null; - // material.materialCode = null; - // material.materialId = null; - // material.materialName = null; - // material.updateBy = "WCS"; - // material.updateTime = DateTime.Now; - // dbContext.Update(material); - // if (wmsRawOutstock != null) - // { - // wmsRawOutstock.executeStatus = "2"; - // dbContext.Update(wmsRawOutstock); - // } - // else if(wmsProductOutstock != null) - // { - // wmsProductOutstock.executeStatus = "2"; - // dbContext.Update(wmsProductOutstock); - // } - // //dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == RFID001Value).Delete(); - // dbContext.SaveChanges(); - - // } - //} + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == task.containerNo); + if (mesBasePalletInfo != null) + { + dbContext.WcsTask.Where(t => t.objid == task.objid).Delete(); + dbContext.WcsTaskLog.Where(t => t.objid == task.objid).Update(t => new WcsTaskLog { taskStatus = 4, materialBarcode = mesBasePalletInfo.materialBarcode }); + } + else + { + dbContext.WcsTask.Where(t => t.objid == task.objid).Delete(); + dbContext.WcsTaskLog.Where(t => t.objid == task.objid).Update(t => new WcsTaskLog { taskStatus = 4 }); + } } } } @@ -363,142 +358,171 @@ namespace Khd.Core.Wcs.Wcs /// private void FirstFloorHoister() { - + using var scope = _host.Services.CreateScope(); + using var dbContext = scope.ServiceProvider.GetRequiredService(); while (true) { try { - using var scope = _host.Services.CreateScope(); - using var dbContext = scope.ServiceProvider.GetRequiredService(); + var mesCloseValue = this._plc.Read(this.mesClose.plcpointAddress); //MES关闭状态 读 var serialno06Value = this._plc.Read(this.serialno06.plcpointAddress); //提升机流水号 读 var equipstate06Value = this._plc.Read(this.equipstate06.plcpointAddress); //提升机状态 读 var hoisterTrayIn06Value = this._plc.Read(this.hoistertrayin06.plcpointAddress); //提升机货物到位状态 读 var currentfloor06Value = this._plc.Read(this.currentfloor06.plcpointAddress); //提升机当前楼层 读 var targetfloor06Value = this._plc.Read(this.targetfloor06.plcpointAddress); //提升机目的楼层 写 var reserialno06 = this._plc.Read(this.reserialno06.plcpointAddress); //反馈流水号 - - //正常读到plc值 - if (targetfloor06Value != null && serialno06Value != null && equipstate06Value != null && currentfloor06Value != null && reserialno06 != null && hoisterTrayIn06Value != null) + if (mesCloseValue != null && Convert.ToInt32(mesCloseValue) == 0) { - //提升机空闲 - if (Convert.ToInt32(equipstate06Value) == 0) + //正常读到plc值 + if (targetfloor06Value != null && serialno06Value != null && equipstate06Value != null && currentfloor06Value != null && reserialno06 != null && hoisterTrayIn06Value != null) { - var wcsTasks = dbContext.WcsTask.Where(t => t.nextPointId == T01).OrderBy(t => t.createTime).ToList(); - foreach (var wcsTask in wcsTasks) + //提升机空闲 + if (Convert.ToInt32(equipstate06Value) == 0) { - if (wcsTasks.Where(t => t.taskStatus > 0).Where(t => t.objid != wcsTask.objid).Any()) + dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); + var wcsTasks = dbContext.WcsTask.Where(t => t.nextPointId == T01).OrderBy(t => t.createTime).ToList(); + foreach (var wcsTask in wcsTasks) { - LogManager.Info("提升机线程:有其他任务正在执行,跳过当前任务"); - continue; - } - BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo); - if (wcsTask.taskStatus == 0 && Convert.ToInt32(hoisterTrayIn06Value) == 0)//创建状态,并且里面没有货物 - { - if (lineEquip.equipStatus == 1) + if (wcsTasks.Where(t => t.taskStatus > 0).Where(t => t.objid != wcsTask.objid).Any()) { - LogManager.Info("提升机线程:" + wcsTask.floorNo + "楼接驳位有AGV任务,跳过当前任务"); + LogManager.Info("提升机线程:有其他任务正在执行,跳过当前任务"); continue; } - BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo); - if (wcsTask.containerNo == this._plc.ReadRFID(floorPoint.plcpointAddress)) + BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo); + if (wcsTask.taskStatus == 0 && Convert.ToInt32(hoisterTrayIn06Value) == 0)//创建状态,并且里面没有货物 { - if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo) + if (lineEquip.equipStatus == 1) { - wcsTask.taskStatus = 2; + LogManager.Info("提升机线程:" + wcsTask.floorNo + "楼接驳位有AGV任务,跳过当前任务"); + continue; + } + BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo); + if (wcsTask.containerNo == this._plc.ReadRFID(floorPoint.plcpointAddress)) + { + if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo) + { + wcsTask.taskStatus = 2; + wcsTask.updateBy = "提升机线程"; + wcsTask.updateTime = DateTime.Now; + wcsTask.remark = "提升机任务执行中"; + BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun")); + this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString()); + this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString()); + dbContext.Update(wcsTask); + dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" }); + lineEquip.equipStatus = 1; + dbContext.Update(lineEquip); + dbContext.SaveChanges(); + } + else + { + wcsTask.taskStatus = 1; + wcsTask.updateBy = "提升机线程"; + wcsTask.updateTime = DateTime.Now; + wcsTask.remark = "提升机任务执行中"; + this._plc.WriteToPoint(this.targetfloor06.plcpointAddress, wcsTask.fromFloorNo.ToString(), this.targetfloor06.plcpointLength.ToString());//目的地楼层 + this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString()); + dbContext.Update(wcsTask); + dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 1, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" }); + lineEquip.equipStatus = 1; + dbContext.Update(lineEquip); + dbContext.SaveChanges(); + } + } + } + if (wcsTask.taskStatus == 1 && Convert.ToInt32(reserialno06) == wcsTask.serialNo) + { + BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo); + if (wcsTask.containerNo == this._plc.ReadRFID(floorPoint.plcpointAddress)) + { + if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//提升机当前楼层为初始地楼层 + { + wcsTask.taskStatus = 2; + wcsTask.updateBy = "提升机线程"; + wcsTask.updateTime = DateTime.Now; + wcsTask.remark = "提升机任务执行中"; + BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun")); + this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString()); + this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString()); + dbContext.Update(wcsTask); + dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" }); + dbContext.SaveChanges(); + } + } + } + if (wcsTask.taskStatus == 2 && Convert.ToInt32(reserialno06) == wcsTask.serialNo) + { + if (Convert.ToInt32(hoisterTrayIn06Value) == 1)//托盘已经进提升机 + { + wcsTask.taskStatus = 3; wcsTask.updateBy = "提升机线程"; wcsTask.updateTime = DateTime.Now; - wcsTask.remark = "提升机任务执行中"; - BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun")); - this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString()); - this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString()); + wcsTask.remark = "提升机任务执行完成"; + this._plc.WriteToPoint(this.targetfloor06.plcpointAddress, wcsTask.floorNo.ToString(), this.targetfloor06.plcpointLength.ToString());//目的地楼层 dbContext.Update(wcsTask); - dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" }); - lineEquip.equipStatus = 1; - dbContext.Update(lineEquip); + dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 3, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" }); dbContext.SaveChanges(); } + } + if (wcsTask.taskStatus == 3 && Convert.ToInt32(currentfloor06Value) == wcsTask.floorNo && Convert.ToInt32(reserialno06) == wcsTask.serialNo)//任务状态为3,且当前楼层为任务的目的楼层 + { + if (wcsTask.floorNo == 1) + { + if (ReadEmptyLocation()) + { + wcsTask.taskStatus = 4; + wcsTask.updateBy = "提升机线程"; + wcsTask.updateTime = DateTime.Now; + wcsTask.remark = "提升机任务执行完成"; + BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun")); + this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "2", basePlcpoint.plcpointLength.ToString());//去向为2,表示提升机已到达目的地,让货出去 + dbContext.Update(wcsTask); + dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" }); + dbContext.SaveChanges(); + } + } else { - wcsTask.taskStatus = 1; + wcsTask.taskStatus = 4; wcsTask.updateBy = "提升机线程"; wcsTask.updateTime = DateTime.Now; - wcsTask.remark = "提升机任务执行中"; - this._plc.WriteToPoint(this.targetfloor06.plcpointAddress, wcsTask.fromFloorNo.ToString(), this.targetfloor06.plcpointLength.ToString());//目的地楼层 - this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString()); - dbContext.Update(wcsTask); - dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 1, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" }); - lineEquip.equipStatus = 1; - dbContext.Update(lineEquip); - dbContext.SaveChanges(); - } - } - } - if (wcsTask.taskStatus == 1 && Convert.ToInt32(reserialno06) == wcsTask.serialNo) - { - BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo); - if (wcsTask.containerNo == this._plc.ReadRFID(floorPoint.plcpointAddress)) - { - if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//提升机当前楼层为初始地楼层 - { - wcsTask.taskStatus = 2; - wcsTask.updateBy = "提升机线程"; - wcsTask.updateTime = DateTime.Now; - wcsTask.remark = "提升机任务执行中"; + wcsTask.remark = "提升机任务执行完成"; BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun")); - this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString()); - this._plc.WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString()); + this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "2", basePlcpoint.plcpointLength.ToString());//去向为2,表示提升机已到达目的地,让货出去 dbContext.Update(wcsTask); - dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" }); + dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" }); dbContext.SaveChanges(); } } - } - if (wcsTask.taskStatus == 2 && Convert.ToInt32(reserialno06) == wcsTask.serialNo) - { - if (Convert.ToInt32(hoisterTrayIn06Value) == 1)//托盘已经进提升机 + else if (wcsTask.taskStatus == 4) { - wcsTask.taskStatus = 3; + BaseEquip floorEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo); + wcsTask.nextPointId = floorEquip.objid; + wcsTask.nextPointNo = floorEquip.equipNo; + wcsTask.taskStatus = 5; wcsTask.updateBy = "提升机线程"; wcsTask.updateTime = DateTime.Now; wcsTask.remark = "提升机任务执行完成"; - this._plc.WriteToPoint(this.targetfloor06.plcpointAddress, wcsTask.floorNo.ToString(), this.targetfloor06.plcpointLength.ToString());//目的地楼层 + lineEquip.equipStatus = 0; + dbContext.Update(lineEquip); + dbContext.SaveChanges(); dbContext.Update(wcsTask); - dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 3, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" }); + dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 5, nextPointId = floorEquip.objid, nextPointNo = floorEquip.equipNo, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" }); dbContext.SaveChanges(); } + break; } - if (wcsTask.taskStatus == 3 && Convert.ToInt32(currentfloor06Value) == wcsTask.floorNo && Convert.ToInt32(reserialno06) == wcsTask.serialNo)//任务状态为3,且当前楼层为任务的目的楼层 - { - wcsTask.taskStatus = 4; - wcsTask.updateBy = "提升机线程"; - wcsTask.updateTime = DateTime.Now; - wcsTask.remark = "提升机任务执行完成"; - BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun")); - this._plc.WriteToPoint(basePlcpoint.plcpointAddress, "2", basePlcpoint.plcpointLength.ToString());//去向为2,表示提升机已到达目的地,让货出去 - dbContext.Update(wcsTask); - dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" }); - dbContext.SaveChanges(); - } - else if (wcsTask.taskStatus == 4) - { - BaseEquip floorEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo); - wcsTask.nextPointId = floorEquip.objid; - wcsTask.nextPointNo = floorEquip.equipNo; - wcsTask.taskStatus = 5; - wcsTask.updateBy = "提升机线程"; - wcsTask.updateTime = DateTime.Now; - wcsTask.remark = "提升机任务执行完成"; - lineEquip.equipStatus = 0; - dbContext.Update(lineEquip); - dbContext.SaveChanges(); - dbContext.Update(wcsTask); - dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 5, nextPointId = floorEquip.objid, nextPointNo = floorEquip.equipNo, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" }); - dbContext.SaveChanges(); - } - break; } } } + else + { + if (currentfloor06Value != null && targetfloor06Value != null) + { + this._plc.WriteToPoint(this.targetfloor06.plcpointAddress, Convert.ToString(currentfloor06Value), this.targetfloor06.plcpointLength.ToString()); + continue; + } + } } catch (Exception ex) { diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs index ee9c260..97e40ca 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs @@ -1,5 +1,4 @@ -using Jc.SnowId; -using Khd.Core.Domain.Dto.webapi; +using Khd.Core.Domain.Dto.webapi; using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Library.Mapper; @@ -9,8 +8,6 @@ using Masuit.Tools.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Newtonsoft.Json; -using System.Diagnostics; -using Thrift.Protocol; using Z.EntityFramework.Plus; namespace Khd.Core.Wcs.Wcs @@ -77,7 +74,6 @@ namespace Khd.Core.Wcs.Wcs var taskList = dbContext.WcsTask .Where(t => t.useFlag == 1) .Where(t => t.nextPointId == agvID).OrderBy(t => t.createTime).ToList(); - dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); foreach (var item in taskList) { if (taskList.Where(t => t.taskStatus > 0).Where(t => t.objid != item.objid).Any()) @@ -90,62 +86,62 @@ namespace Khd.Core.Wcs.Wcs BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType); if (item.taskType == 37)//入库任务 { - WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); - BaseEquip currentEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1); - WcsCmd wcsCmd = new() - { - objid = StaticData.SnowId.NextId(), - cmdStatus = 0, - taskId = item.objid, - useFlag = 1, - cmdType = item.taskType, - containerNo = item.containerNo, - createTime = DateTime.Now, - createBy = FloorNo + "楼AGV", - currPointId = item.currPointId, - currPointNo = currentEquip.agvPositionCode, - nextPointId = item.endPointId, - nextPointNo = wmsBaseLocation.agvPositionCode, - }; - var agvTask = new RequestAGVTaskDto - { - reqCode = wcsCmd.objid.ToString(), - positionCodePath = new List - { - new () - { - positionCode=wcsCmd.currPointNo, - type="00" - }, - new () - { - positionCode=wcsCmd.nextPointNo, - 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(result); - if (reponseMessage != null && reponseMessage.message == "成功") - { - LogManager.Info("五楼Agv下发任务成功:" + message); - wcsCmd.taskCode = reponseMessage.data; - wcsCmd.cmdStatus = 1; - item.taskStatus = 1; - dbContext.Update(item); - dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); - WcsCmdLog wcsCmdLog = CoreMapper.Map(wcsCmd); - dbContext.Add(wcsCmdLog); - dbContext.Add(wcsCmd); - dbContext.SaveChanges(); - } - else - { - LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); - } + //WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); + //BaseEquip currentEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1); + //WcsCmd wcsCmd = new() + //{ + // objid = StaticData.SnowId.NextId(), + // cmdStatus = 0, + // taskId = item.objid, + // useFlag = 1, + // cmdType = item.taskType, + // containerNo = item.containerNo, + // createTime = DateTime.Now, + // createBy = FloorNo + "楼AGV", + // currPointId = item.currPointId, + // currPointNo = currentEquip.agvPositionCode, + // nextPointId = item.endPointId, + // nextPointNo = wmsBaseLocation.agvPositionCode, + //}; + //var agvTask = new RequestAGVTaskDto + //{ + // reqCode = wcsCmd.objid.ToString(), + // positionCodePath = new List + // { + // new () + // { + // positionCode=wcsCmd.currPointNo, + // type="00" + // }, + // new () + // { + // positionCode=wcsCmd.nextPointNo, + // 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(result); + //if (reponseMessage != null && reponseMessage.message == "成功") + //{ + // LogManager.Info("五楼Agv下发任务成功:" + message); + // wcsCmd.taskCode = reponseMessage.data; + // wcsCmd.cmdStatus = 1; + // item.taskStatus = 1; + // dbContext.Update(item); + // dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); + // WcsCmdLog wcsCmdLog = CoreMapper.Map(wcsCmd); + // dbContext.Add(wcsCmdLog); + // dbContext.Add(wcsCmd); + // dbContext.SaveChanges(); + //} + //else + //{ + // LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); + //} } else if (item.taskType == 38)//出库任务 { @@ -161,7 +157,7 @@ namespace Khd.Core.Wcs.Wcs Console.WriteLine($"{DateTime.Now}:5楼接驳位上有货,无法下发Agv出库任务"); continue; } - WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId); + WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1); WcsCmd wcsCmd = new() { @@ -223,7 +219,7 @@ namespace Khd.Core.Wcs.Wcs else if (item.taskType == 33)//原材料到背板安装 { BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 30); - WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId); + WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); WcsCmd wcsCmd = new() { objid = StaticData.SnowId.NextId(), @@ -340,7 +336,7 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskType == 46)//原材料到拆分区 { - WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId); + WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); BaseEquip currentEquip = StaticData.BaseEquip.First(t => t.objid == 29); WcsCmd wcsCmd = new() { @@ -516,7 +512,7 @@ namespace Khd.Core.Wcs.Wcs LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); } } - else if (item.taskType == 49)//移库 + else if (item.taskType == 66)//移库 { WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); WmsBaseLocation toBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); @@ -581,7 +577,7 @@ namespace Khd.Core.Wcs.Wcs WcsCmd? wcsCmd = dbContext.WcsCmd.FirstOrDefault(t => t.taskId == item.objid); if (wcsCmd != null) { - + if (wcsCmd.cmdStatus == 3) { var agvTask = new RequestAGVTaskDto @@ -608,14 +604,18 @@ namespace Khd.Core.Wcs.Wcs LogManager.Info("五楼叉车线程完成任务" + wcsCmd.objid); Console.WriteLine(DateTime.Now + ":五楼背负式AGV线程完成任务" + wcsCmd.currPointNo + "," + wcsCmd.nextPointNo); LogManager.Info("五楼Agv完成任务成功:" + wcsCmd.ToJsonString()); - if (item.taskType == 49) + if (item.taskType == 66) { WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); WmsBaseLocation toBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); fromBaseLocation.outstockFlag = "0"; fromBaseLocation.locationStatus = "1"; + fromBaseLocation.containerCode = null; + fromBaseLocation.updateTime = DateTime.Now; toBaseLocation.instockFlag = "0"; toBaseLocation.locationStatus = "1"; + toBaseLocation.containerCode = item.containerNo; + toBaseLocation.updateTime = DateTime.Now; var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == fromBaseLocation.locationCode).FirstOrDefault(); if (wmsRawStock != null) { @@ -704,13 +704,13 @@ namespace Khd.Core.Wcs.Wcs 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(item); - newTask.createTime=DateTime.Now; + newTask.createTime = DateTime.Now; newTask.nextPointId = floorLineEquip.objid; newTask.nextPointNo = floorLineEquip.equipNo; newTask.fromFloorNo = 5; newTask.floorNo = 1; newTask.taskStatus = 6; - newTask.objid=StaticData.SnowId.NextId(); + newTask.objid = StaticData.SnowId.NextId(); lineEquip.equipStatus = 0; dbContext.Update(lineEquip); dbContext.Add(newTask); @@ -725,7 +725,7 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskType == 33)//原材料到背板安装 { - WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId); + WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); wmsBaseLocation.locationStatus = "1"; wmsBaseLocation.outstockFlag = "0"; wmsBaseLocation.containerCode = ""; @@ -782,7 +782,7 @@ namespace Khd.Core.Wcs.Wcs planDetailCode = wmsProductInstock.planDetailCode, warehouseId = 512 }; - BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.startPointId); + BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); wmsProductInstockDetail.executeStatus = "2"; startEquip.emptyCount = 0; dbContext.Update(wmsProductInstockDetail); @@ -800,7 +800,7 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskType == 46)//该任务结束后,立刻生成一个新的返库任务,但是是否使用标志未0,等待mes通知 { - WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId); + WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); wmsBaseLocation.outstockFlag = "0"; wmsBaseLocation.instockFlag = "1"; wmsBaseLocation.locationStatus = "2"; @@ -817,13 +817,13 @@ namespace Khd.Core.Wcs.Wcs dbContext.Update(wmsBaseLocation); WcsTask newTask = CoreMapper.Map(item); newTask.objid = StaticData.SnowId.NextId(); + var currPointId = item.currPointId; + var currPointNo = item.currPointNo; newTask.currPointId = item.endPointId; newTask.currPointNo = item.endPointNo; - newTask.endPointId = item.startPointId; - newTask.endPointNo = item.startPointNo; - newTask.startPointId = item.currPointId; + newTask.endPointId = item.currPointId; + newTask.endPointNo = item.currPointNo; newTask.createTime = DateTime.Now; - newTask.startPointNo = item.currPointNo; newTask.taskType = 28; newTask.taskStatus = 0; newTask.useFlag = 0; @@ -853,7 +853,6 @@ namespace Khd.Core.Wcs.Wcs wmsRawStock.completeFlag = "0"; wmsRawStock.updateDate = DateTime.Now; wmsRawStock.updateBy = "WCS"; - wmsRawStock.occupyAmount = 0; BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); startEquip.emptyCount = 0; dbContext.Update(startEquip); diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs index 9f30ce0..0f57ea7 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorBearAgv.cs @@ -8,11 +8,6 @@ using Masuit.Tools.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Z.EntityFramework.Plus; namespace Khd.Core.Wcs.Wcs @@ -88,7 +83,7 @@ namespace Khd.Core.Wcs.Wcs { if (item.taskStatus == 0)//下发任务 { - BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.startPointId); + BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); BaseDictionary baseDictionary = dbContext.BaseDictionary.First(t => t.objid == item.taskType); WcsCmd wcsCmd = new() @@ -101,7 +96,7 @@ namespace Khd.Core.Wcs.Wcs containerNo = item.containerNo, createTime = DateTime.Now, createBy = FloorNo + "楼AGV", - currPointId = item.startPointId, + currPointId = item.currPointId, currPointNo = startEquip.agvPositionCode, nextPointId = item.endPointId, nextPointNo = endEquip.agvPositionCode, @@ -191,18 +186,27 @@ namespace Khd.Core.Wcs.Wcs { if (item.taskType == 48) { - dbContext.WmsRawReturn.Where(t => t.rawReturnId == item.orderId).Update(t => new WmsRawReturn { executeStatus = "2" }); + WmsRawReturn? wmsRawReturn = dbContext.WmsRawReturn.Where(t => t.rawReturnId == item.orderId).FirstOrDefault(); + if (wmsRawReturn != null) + { + wmsRawReturn.executeStatus = "2"; + dbContext.Update(wmsRawReturn); + } } - else + else if (item.taskType == 32) { - + WmsRawOutstock? wmsRawOutstock = dbContext.WmsRawOutstock.Where(t => t.rawOutstockId == item.orderId).FirstOrDefault(); + if (wmsRawOutstock != null) + { + wmsRawOutstock.executeStatus = "2"; + dbContext.Update(wmsRawOutstock); + } } dbContext.Remove(wcsCmd); dbContext.Remove(item); dbContext.SaveChanges(); - dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 10 }); - dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 10 }); - + dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 }); + dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); } } } diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs index ffb9945..668540c 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs @@ -1,10 +1,7 @@ -using AngleSharp.Css.Dom; -using Castle.Core.Logging; -using Khd.Core.Domain.Dto.webapi; +using Khd.Core.Domain.Dto.webapi; using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Library.Mapper; -using Khd.Core.Plc; using Khd.Core.Plc.S7; using Khd.Core.Wcs.Global; using Masuit.Tools; @@ -12,8 +9,6 @@ using Masuit.Tools.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Newtonsoft.Json; -using System; -using Thrift.Protocol; using Z.EntityFramework.Plus; namespace Khd.Core.Wcs.Wcs @@ -123,7 +118,6 @@ namespace Khd.Core.Wcs.Wcs var isArrive = this._plc.Read(isarrive.plcpointAddress); var receiveMaterial = this._plc.Read(ReceiveMaterial.plcpointAddress); var waring = this._plc.Read(CtuLineWaring.plcpointAddress); - bool haveAny = dbContext.WcsTask.Where(t => t.nextPointId == 11).Any(); if (rfid != null && isArrive != null && receiveMaterial != null && Convert.ToInt32(receiveMaterial) == 1 && Convert.ToInt32(isArrive) == 1) { if (Convert.ToBoolean(waring)) @@ -146,8 +140,6 @@ namespace Khd.Core.Wcs.Wcs var wcsTask = new WcsTask() { objid = StaticData.SnowId.NextId(), - startPointId = baseEquip.objid, - startPointNo = baseEquip.agvPositionCode, currPointId = baseEquip.objid, currPointNo = baseEquip.agvPositionCode, nextPointId = ctuEquip.objid, @@ -191,8 +183,6 @@ namespace Khd.Core.Wcs.Wcs var wcsTask = new WcsTask() { objid = StaticData.SnowId.NextId(), - startPointId = baseEquip.objid, - startPointNo = baseEquip.agvPositionCode, currPointId = baseEquip.objid, currPointNo = baseEquip.agvPositionCode, nextPointId = ctuEquip.objid, @@ -229,12 +219,12 @@ namespace Khd.Core.Wcs.Wcs } else if (receiveMaterial != null && Convert.ToInt32(receiveMaterial) == 1) { - if (!IsStart && !haveAny) + Task.Run(() => { - Task.Run(() => + var receiveMaterial2 = this._plc.Read(ReceiveMaterial.plcpointAddress); + while (receiveMaterial2 != null && Convert.ToInt32(receiveMaterial2) == 1) { - IsStart = true; - Thread.Sleep(10000); + receiveMaterial2 = this._plc.Read(ReceiveMaterial.plcpointAddress); lock (SystemData.outStockLock) { dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload()); @@ -247,10 +237,10 @@ namespace Khd.Core.Wcs.Wcs dbContext.Update(wcsOutstockLock); dbContext.SaveChanges(); } - IsStart = false; } - }); - } + Thread.Sleep(3000); + } + }); } } catch (Exception ex) @@ -349,7 +339,7 @@ namespace Khd.Core.Wcs.Wcs /// /// 监控上件扫描点位 /// - public void MonitorInLocatorPoint() + public void MonitorInLocatorPoint() { List taskType = new() { 1, 3, 5, 7 }; using var scope = _host.Services.CreateScope(); @@ -374,7 +364,7 @@ namespace Khd.Core.Wcs.Wcs if (item.taskType == 30)//出库任务 { BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); - WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId); + WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); var wcsCmd = new WcsCmd() { objid = StaticData.SnowId.NextId(), @@ -435,7 +425,7 @@ namespace Khd.Core.Wcs.Wcs bool haveOut = taskList.Where(t => t.taskType == 30).Where(t => t.taskStatus != 6).Any(); if (!haveOut && CtuWaitLogic()) { - BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.startPointId); + BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); var wcsCmd = new WcsCmd() { @@ -531,7 +521,7 @@ namespace Khd.Core.Wcs.Wcs if (reponseMessage != null && reponseMessage.code == "0") { LogManager.Info("五楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); - Console.WriteLine(DateTime.Now + ":五楼CTU线程继续任务" + item.startPointNo + "," + item.endPointNo); + Console.WriteLine(DateTime.Now + ":五楼CTU线程继续任务" + item.currPointId + "," + item.endPointNo); dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 }); dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 4 }); dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 }); @@ -558,7 +548,7 @@ namespace Khd.Core.Wcs.Wcs if (reponseMessage != null && reponseMessage.code == "0") { LogManager.Info("五楼CTU线程下发任务" + agvTask.ToJsonString() + "\n" + message); - Console.WriteLine(DateTime.Now + ":五楼CTU线程下发任务" + item.startPointNo + "," + item.endPointNo); + Console.WriteLine(DateTime.Now + ":五楼CTU线程下发任务" + item.currPointId + "," + item.endPointNo); dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmd() { cmdStatus = 4 }); dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 4 }); dbContext.WcsTask.Where(t => t.objid == item.objid).Update(t => new WcsTask() { taskStatus = 4 }); @@ -586,7 +576,7 @@ namespace Khd.Core.Wcs.Wcs } WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation - .First(t => t.locationId == item.startPointId && t.warehouseFloor == 5); + .First(t => t.locationId == item.currPointId && t.warehouseFloor == 5); wmsBaseLocation.outstockFlag = "0"; wmsBaseLocation.locationStatus = "1"; wmsBaseLocation.locationStatus = "2"; diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs index c0e46c3..9325f72 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs @@ -1,14 +1,10 @@ -using Khd.Core.Domain.Dto.webapi; -using Khd.Core.Domain.Models; +using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Library.Mapper; -using Khd.Core.Plc; using Khd.Core.Wcs.Global; using Masuit.Tools.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; -using Newtonsoft.Json; -using System.Security.Cryptography; using Z.EntityFramework.Plus; namespace Khd.Core.Wcs.Wcs @@ -95,7 +91,7 @@ namespace Khd.Core.Wcs.Wcs .Where(t => t.locationScrapType == "1") .Where(t => t.instockFlag == "0") .Where(t => t.outstockFlag == "0") - .Where(t=>t.warehouseId==511) + .Where(t => t.warehouseId == 511) //.Where(t => t.locationStatus == "1") //.Where(t => string.IsNullOrEmpty(t.containerCode)) .ToList(); @@ -144,21 +140,20 @@ namespace Khd.Core.Wcs.Wcs newTask.endPointNo = wmsBaseLocation.locationCode; newTask.objid = StaticData.SnowId.NextId(); newTask.createTime = DateTime.Now; + newTask.taskType = 47; if (newTask.fromFloorNo != 1) { - newTask.taskType = 47; newTask.useFlag = 0; } else { - newTask.taskType = 47;//?28? newTask.useFlag = 1; } wmsBaseLocation.instockFlag = "1"; wmsBaseLocation.locationStatus = "2"; dbContext.Update(wmsBaseLocation); dbContext.Remove(wcsTask); - + dbContext.Add(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); dbContext.Add(wcsTaskLog); diff --git a/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs index f53e0b5..c14b3ac 100644 --- a/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/FourthFloorPoint.cs @@ -1,17 +1,9 @@ using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; -using Khd.Core.Library.Mapper; -using Khd.Core.Plc; -using Khd.Core.Plc.S7; using Khd.Core.Wcs.Global; using Masuit.Tools.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Z.EntityFramework.Plus; namespace Khd.Core.Wcs.Wcs diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs index 99f7b38..0fba2d8 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs @@ -8,8 +8,6 @@ using Masuit.Tools.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Newtonsoft.Json; -using System; -using System.Runtime.Intrinsics.X86; using Z.EntityFramework.Plus; namespace Khd.Core.Wcs.Wcs @@ -139,7 +137,7 @@ namespace Khd.Core.Wcs.Wcs if (reponseMessage != null && reponseMessage.message == "成功") { LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); - Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo); + Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); wcsCmd.taskCode = reponseMessage.data; wcsCmd.cmdStatus = 1; item.taskStatus = 1; @@ -199,7 +197,7 @@ namespace Khd.Core.Wcs.Wcs if (reponseMessage != null && reponseMessage.message == "成功") { LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); - Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo); + Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); wcsCmd.taskCode = reponseMessage.data; wcsCmd.cmdStatus = 1; item.taskStatus = 1; @@ -258,7 +256,7 @@ namespace Khd.Core.Wcs.Wcs if (reponseMessage != null && reponseMessage.message == "成功") { LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); - Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo); + Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); wcsCmd.taskCode = reponseMessage.data; wcsCmd.cmdStatus = 1; item.taskStatus = 1; @@ -276,7 +274,7 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskType == 57)//周转位-提升机 { - var startPoint = StaticData.BaseEquip.First(t => t.objid == item.startPointId); + var startPoint = StaticData.BaseEquip.First(t => t.objid == item.currPointId); WcsCmd wcsCmd = new WcsCmd() { objid = StaticData.SnowId.NextId(), @@ -317,7 +315,7 @@ namespace Khd.Core.Wcs.Wcs if (reponseMessage != null && reponseMessage.message == "成功") { LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); - Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo); + Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); wcsCmd.taskCode = reponseMessage.data; wcsCmd.cmdStatus = 1; item.taskStatus = 1; @@ -335,7 +333,7 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskType == 50)//库位-提升机 { - var startPoint = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId); + var startPoint = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); WcsCmd wcsCmd = new WcsCmd() { objid = StaticData.SnowId.NextId(), @@ -376,7 +374,7 @@ namespace Khd.Core.Wcs.Wcs if (reponseMessage != null && reponseMessage.message == "成功") { LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); - Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo); + Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); wcsCmd.taskCode = reponseMessage.data; wcsCmd.cmdStatus = 1; item.taskStatus = 1; @@ -394,7 +392,7 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskType == 55)//2F移库 { - WmsBaseLocation fromWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId); + WmsBaseLocation fromWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); WmsBaseLocation toWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); WcsCmd wcsCmd = new WcsCmd() { @@ -434,7 +432,7 @@ namespace Khd.Core.Wcs.Wcs if (reponseMessage != null && reponseMessage.message == "成功") { LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); - Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo); + Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); wcsCmd.taskCode = reponseMessage.data; wcsCmd.cmdStatus = 1; item.taskStatus = 1; @@ -492,7 +490,7 @@ namespace Khd.Core.Wcs.Wcs if (reponseMessage != null && reponseMessage.message == "成功") { LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); - Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo); + Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); wcsCmd.taskCode = reponseMessage.data; wcsCmd.cmdStatus = 1; item.taskStatus = 1; @@ -510,7 +508,7 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskType == 54)//周转位-废料工位 { - var wasteEquipLocation = StaticData.BaseEquip.FirstOrDefault(t => t.objid == item.startPointId); + var wasteEquipLocation = StaticData.BaseEquip.FirstOrDefault(t => t.objid == item.currPointId); if (wasteEquipLocation != null) { WcsCmd wcsCmd = new WcsCmd() @@ -553,7 +551,7 @@ namespace Khd.Core.Wcs.Wcs if (reponseMessage != null && reponseMessage.message == "成功") { LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); - Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo); + Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); wcsCmd.taskCode = reponseMessage.data; wcsCmd.cmdStatus = 1; item.taskStatus = 1; @@ -613,7 +611,7 @@ namespace Khd.Core.Wcs.Wcs if (reponseMessage != null && reponseMessage.message == "成功") { LogManager.Info("二楼AGV线程下发任务" + agvTask.ToJsonString() + "\n" + message); - Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.startPointNo + "," + item.endPointNo); + Console.WriteLine(DateTime.Now + ":二楼AGV线程下发任务" + item.currPointId + "," + item.endPointNo); wcsCmd.taskCode = reponseMessage.data; wcsCmd.cmdStatus = 1; item.taskStatus = 1; @@ -787,62 +785,62 @@ namespace Khd.Core.Wcs.Wcs { if (item.taskType == 49) { - WmsProductInstock? wmsProductInstock = dbContext.WmsProductInstock.FirstOrDefault(t => t.productInstockId == item.orderId); - if (wmsProductInstock != null) + //WmsProductInstock? wmsProductInstock = dbContext.WmsProductInstock.FirstOrDefault(t => t.productInstockId == item.orderId); + //if (wmsProductInstock != null) + //{ + // WmsProductInstockDetail? wmsProductInstockDetail = dbContext.WmsProductInstockDetail.FirstOrDefault(t => t.productInstockId == wmsProductInstock.productInstockId); + // if (wmsProductInstockDetail != null) + // { + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo); + if (mesBasePalletInfo != null) { - WmsProductInstockDetail? wmsProductInstockDetail = dbContext.WmsProductInstockDetail.FirstOrDefault(t => t.productInstockId == wmsProductInstock.productInstockId); - if (wmsProductInstockDetail != null) + MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo); + if (mesBaseBarcodeInfo != null) { - MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo); - if (mesBasePalletInfo != null) + WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); + wmsBaseLocation.instockFlag = "0"; + wmsBaseLocation.locationStatus = "1"; + wmsBaseLocation.containerCode = item.containerNo; + WmsProductStock wmsProductStock = new WmsProductStock() { - MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo); - if (mesBaseBarcodeInfo != null) - { - WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); - wmsBaseLocation.instockFlag = "0"; - wmsBaseLocation.locationStatus = "1"; - wmsBaseLocation.containerCode = item.containerNo; - WmsProductStock wmsProductStock = new WmsProductStock() - { - productId = mesBasePalletInfo.materialId, - activeFlag = "1", - frozenAmount = 0, - createBy = "WCS", - createDate = DateTime.Now, - updateBy = "WCS", - updateDate = DateTime.Now, - instockDate = DateTime.Now, - locationCode = wmsBaseLocation.locationCode, - occupyAmount = 0, - totalAmount = 1, - palletInfoCode = item.containerNo, - planCode = wmsProductInstock.planCode, - planDetailCode = wmsProductInstock.planDetailCode, - productBatch = mesBasePalletInfo.materialBarcode, - saleorderCode = wmsProductInstock.saleorderCode, - productStockId = StaticData.SnowId.NextId(), - saleOrderId = wmsProductInstock.SaleOrderId, - stockType = "3", - qualityStatus = "0", - warehouseFloor = 2, - warehouseId = wmsBaseLocation.warehouseId - }; - wmsProductInstockDetail.executeStatus = "2"; - wmsProductInstock.endTime = DateTime.Now; - wmsProductInstock.executeStatus = "2"; - dbContext.Update(wmsProductInstockDetail); - dbContext.Add(wmsProductStock); - dbContext.Update(wmsBaseLocation); - dbContext.Update(wmsProductInstock); - dbContext.Remove(item); - dbContext.Remove(wcsCmd); - dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); - dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 }); - dbContext.SaveChanges(); - } - } + productId = mesBasePalletInfo.materialId, + activeFlag = "1", + frozenAmount = 0, + createBy = "WCS", + createDate = DateTime.Now, + updateBy = "WCS", + updateDate = DateTime.Now, + instockDate = DateTime.Now, + locationCode = wmsBaseLocation.locationCode, + occupyAmount = 0, + totalAmount = 1, + palletInfoCode = item.containerNo, + planCode = mesBaseBarcodeInfo.planCode, + planDetailCode = mesBaseBarcodeInfo.planDetailCode, + productBatch = mesBasePalletInfo.materialBarcode, + saleorderCode = mesBaseBarcodeInfo.saleorderCode, + productStockId = StaticData.SnowId.NextId(), + saleOrderId = mesBaseBarcodeInfo.saleOrderId, + stockType = "3", + qualityStatus = "0", + warehouseFloor = 2, + warehouseId = wmsBaseLocation.warehouseId + }; + //wmsProductInstockDetail.executeStatus = "2"; + //wmsProductInstock.endTime = DateTime.Now; + //wmsProductInstock.executeStatus = "2"; + //dbContext.Update(wmsProductInstockDetail); + dbContext.Add(wmsProductStock); + dbContext.Update(wmsBaseLocation); + //dbContext.Update(wmsProductInstock); + dbContext.Remove(item); + dbContext.Remove(wcsCmd); + dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); + dbContext.WcsCmdLog.Where(t => t.objid == item.objid).Update(t => new WcsCmdLog() { cmdStatus = 8 }); + dbContext.SaveChanges(); } + // } + //} } } else if (item.taskType == 50) @@ -853,7 +851,7 @@ namespace Khd.Core.Wcs.Wcs WmsProductOutstockDetail? wmsProductOutstockDetail = dbContext.WmsProductOutstockDetail.FirstOrDefault(t => t.productOutstockId == wmsProductOutstock.productOutstockId); if (wmsProductOutstockDetail != null) { - var wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.startPointId).First(); + var wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First(); WmsProductStock wmsProductStock = dbContext.WmsProductStock.First(t => t.locationCode == wmsBaseLocation.locationCode); wmsProductOutstockDetail.executeStatus = "2"; wmsProductOutstock.endTime = DateTime.Now; @@ -878,7 +876,7 @@ namespace Khd.Core.Wcs.Wcs { BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); endEquip.equipStatus = 1; - endEquip.emptyCount = Convert.ToInt32(item.isEmpty); + endEquip.emptyCount = item.qty; dbContext.Update(endEquip); dbContext.Remove(item); dbContext.Remove(wcsCmd); @@ -918,18 +916,33 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskType == 55) { - WmsBaseLocation fromWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); - WmsBaseLocation toWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); - fromWmsBaseLocation.locationStatus = "1"; - toWmsBaseLocation.locationStatus = "1"; - fromWmsBaseLocation.outstockFlag = "0"; - toWmsBaseLocation.outstockFlag = "0"; - fromWmsBaseLocation.instockFlag = "0"; - toWmsBaseLocation.instockFlag = "0"; - fromWmsBaseLocation.containerCode = null; - toWmsBaseLocation.containerCode = item.containerNo; - dbContext.Update(fromWmsBaseLocation); - dbContext.Update(toWmsBaseLocation); + WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); + WmsBaseLocation toBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); + fromBaseLocation.outstockFlag = "0"; + fromBaseLocation.locationStatus = "1"; + fromBaseLocation.containerCode = null; + fromBaseLocation.updateTime = DateTime.Now; + toBaseLocation.instockFlag = "0"; + toBaseLocation.locationStatus = "1"; + toBaseLocation.containerCode = item.containerNo; + toBaseLocation.updateTime = DateTime.Now; + var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == fromBaseLocation.locationCode).FirstOrDefault(); + if (wmsRawStock != null) + { + wmsRawStock.locationCode = toBaseLocation.locationCode; + dbContext.Update(wmsRawStock); + } + else + { + var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == fromBaseLocation.locationCode); + if (wmsProductStock != null) + { + wmsProductStock.locationCode = toBaseLocation.locationCode; + dbContext.Update(wmsProductStock); + } + } + dbContext.Update(fromBaseLocation); + dbContext.Update(toBaseLocation); dbContext.Remove(item); dbContext.Remove(wcsCmd); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 }); @@ -940,6 +953,9 @@ namespace Khd.Core.Wcs.Wcs { wasteEquip.emptyCount = 0; wasteEquip.equipStatus = 0; + BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == item.endPointId); + endEquip.emptyCount = 1; + endEquip.equipStatus = 2; dbContext.Remove(item); dbContext.Update(wasteEquip); dbContext.Remove(wcsCmd); diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs index a9bf602..bc12df6 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs @@ -1,11 +1,10 @@ -using Khd.Core.Domain.Dto.webapi; -using Khd.Core.Domain.Models; +using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; +using Khd.Core.Library.Mapper; using Khd.Core.Wcs.Global; using Masuit.Tools.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; -using Newtonsoft.Json; using Z.EntityFramework.Plus; namespace Khd.Core.Wcs.Wcs @@ -58,6 +57,7 @@ namespace Khd.Core.Wcs.Wcs var rfidPoint = StaticData.BasePlcpointList.First(t => t.id == 52); var agvGetPoint = StaticData.BasePlcpointList.First(t => t.id == 53); var agvPutPoint = StaticData.BasePlcpointList.First(t => t.id == 54); + BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 8); while (true) { try @@ -68,13 +68,171 @@ namespace Khd.Core.Wcs.Wcs var rfidValue = this._plc.ReadRFID(rfidPoint.plcpointAddress); if (agvGetValue != null && agvPutValue != null && rfidValue != null) { - if(Convert.ToBoolean(agvPutValue)) + if (Convert.ToInt32(agvPutValue) == 0) { + bool canCreate = dbContext.WcsTask.Where(t => t.endPointId == 36 || t.nextPointId == 8).Any(); + if (!canCreate) + { + BaseEquip? baseEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.emptyCount > 1 && t.equipStatus == 1); + BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 36); + if (baseEquip != null) + { + var wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + endPointId = endEquip.objid, + endPointNo = endEquip.equipNo, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + currPointId = baseEquip.objid, + currPointNo = baseEquip.equipNo, + taskStatus = 0, + useFlag = 1, + containerNo = null, + createBy = "WCS", + createTime = DateTime.Now, + floorNo = 2, + fromFloorNo = 2, + isEmpty = "1", + qty = baseEquip.emptyCount, + taskType = 57, + }; + dbContext.Add(wcsTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + Console.WriteLine(DateTime.Now + ":二楼码垛输送线生成请求空托盘任务成功:" + wcsTask.objid); + LogManager.Info("二楼码垛输送线生成请求空托盘任务成功:" + wcsTask.objid); + } + else + { + baseEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 15 && t.emptyCount > 1 && t.equipStatus == 1); + if (baseEquip != null) + { + } + else + { + BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == 40); + if (startEquip.emptyCount > 1) + { + WcsTaskManual wcsTaskManual = new WcsTaskManual() + { + objid = StaticData.SnowId.NextId(), + startPointId = startEquip.objid, + startPointNo = startEquip.equipNo, + endPointId = endEquip.objid, + endPointNo = endEquip.equipNo, + nextPointId = startEquip.objid, + nextPointNo = startEquip.equipNo, + currPointId = startEquip.objid, + currPointNo = startEquip.equipNo, + taskStatus = 0, + useFlag = 1, + containerNo = null, + createBy = "WCS", + createTime = DateTime.Now, + floorNo = 2, + fromFloorNo = 1, + isEmpty = "1", + qty = startEquip.emptyCount, + taskType = 53, + }; + dbContext.Add(wcsTaskManual); + dbContext.SaveChanges(); + Console.WriteLine(DateTime.Now + ":二楼码垛输送线生成一楼托盘库任务成功:" + wcsTaskManual.objid); + LogManager.Info("二楼码垛输送线生成一楼托盘库任务成功:" + wcsTaskManual.objid); + } + } + } + } } - if (Convert.ToBoolean(agvGetValue) && !string.IsNullOrEmpty(rfidValue)) + if (Convert.ToInt32(agvGetValue) == 1 && !string.IsNullOrEmpty(rfidValue)) { - + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == rfidValue); + if (mesBasePalletInfo != null) + { + var wmsBaseLocations = dbContext.WmsBaseLocation + .Where(t => t.warehouseFloor == FloorNo) + .Where(t => t.activeFlag == "1") + .Where(t => t.delFlag == "0") + .Where(t => t.locationScrapType == "1") + .Where(t => t.instockFlag == "0") + .Where(t => t.outstockFlag == "0") + .Where(t => t.warehouseId == 231) + .ToList(); + var wmsProductStocks = dbContext.WmsProductStock + .Where(t => t.warehouseId == 231) + .ToList(); + WmsBaseLocation? wmsBaseLocation = null; + if (wmsBaseLocations.Count > 0) + { + List locDeepLocations = wmsBaseLocations.Where(t => t.locDeep == 1).ToList(); + var bill = from a in wmsProductStocks + join b in locDeepLocations on a.locationCode equals b.locationCode + select new { a, b }; + if (bill.Any()) + { + int? row = 0; + foreach (var item in bill) + { + if (item.b.locRow % 2 == 1) + { + row = item.b.locRow + 1; + } + else + { + row = item.b.locRow - 1; + } + wmsBaseLocation = wmsBaseLocations + .Where(t => t.locDeep == 2) + .Where(t => t.locRow == row) + .Where(t => t.locColumn == item.b.locColumn) + .Where(t => t.containerCode == null || t.containerCode == "") + .FirstOrDefault(); + if (wmsBaseLocation != null) + { + break; + } + } + } + wmsBaseLocation ??= wmsBaseLocations + .Where(t => t.containerCode == null || t.containerCode == "") + .Where(t => t.locDeep == 1) + .FirstOrDefault(); + wmsBaseLocation ??= wmsBaseLocations.Where(t => t.containerCode == null || t.containerCode == "").FirstOrDefault(); + if (wmsBaseLocation != null) + { + BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 37); + var wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + currPointId = startEquip.objid, + currPointNo = startEquip.equipNo, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = wmsBaseLocation.locationId, + endPointNo = wmsBaseLocation.locationCode, + taskStatus = 0, + useFlag = 1, + containerNo = rfidValue, + createBy = "WCS", + createTime = DateTime.Now, + floorNo = 2, + fromFloorNo = 2, + isEmpty = "0", + taskType = 49, + qty = 1, + }; + dbContext.Add(wcsTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + Console.WriteLine(DateTime.Now + ":二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid); + LogManager.Info("二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid); + } + } + } } } } diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs index 3a41e3d..5dad6b0 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorPoint.cs @@ -79,7 +79,8 @@ namespace Khd.Core.Wcs.Wcs //入库任务 var rfid = this._plc.ReadRFID(LineRFID.plcpointAddress); var isSignal = this._plc.Read(LineSignal.plcpointAddress); - StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress); + var agvPutValue = StaticData.PlcDic[2].Read(agvPutPoint.plcpointAddress); + if (rfid != null && isSignal != null) { //正常读到输送线信息 有到位信号,并且有托盘,获取条码信息 @@ -96,76 +97,196 @@ namespace Khd.Core.Wcs.Wcs { if (wcsTask.taskType != 99) { - dbContext.WcsTask.Remove(wcsTask); - WcsTask newTask = CoreMapper.Map(wcsTask); - newTask.taskStatus = 0; - newTask.objid = StaticData.SnowId.NextId(); - newTask.nextPointId = agvEquip.objid; - newTask.nextPointNo = agvEquip.equipNo; - newTask.createTime = DateTime.Now; - newTask.updateTime = DateTime.Now; - newTask.endPointId = inEquip.objid; - newTask.endPointNo = inEquip.equipNo; - newTask.containerNo = palletNo; - newTask.currPointId = lineEquip.objid; - newTask.currPointNo = lineEquip.equipNo; - newTask.taskType = 2; - newTask.useFlag = 1; - dbContext.WcsTask.Add(newTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); - dbContext.Add(wcsTaskLog); - dbContext.SaveChanges(); - LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + palletNo); - Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo); - } - else - { - - } - } - else if (wcsTask.taskStatus == 6) - { - WmsProductOutstock? wmsProductOutstock = dbContext.WmsProductOutstock.FirstOrDefault(t => t.productOutstockId == wcsTask.orderId); - if (wmsProductOutstock != null) - { - BaseEquip? endEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipNo == wmsProductOutstock.endStationCode); - if (endEquip != null) + if (Convert.ToInt32(agvPutValue) == 0) { dbContext.WcsTask.Remove(wcsTask); WcsTask newTask = CoreMapper.Map(wcsTask); - newTask.serialNo = SystemData.GetSerialNo(dbContext); newTask.taskStatus = 0; newTask.objid = StaticData.SnowId.NextId(); - newTask.nextPointId = tsjEquip.objid; - newTask.nextPointNo = tsjEquip.equipNo; + newTask.nextPointId = agvEquip.objid; + newTask.nextPointNo = agvEquip.equipNo; newTask.createTime = DateTime.Now; newTask.updateTime = DateTime.Now; - newTask.endPointId = endEquip.objid; - newTask.endPointNo = endEquip.equipNo; newTask.containerNo = palletNo; newTask.currPointId = lineEquip.objid; newTask.currPointNo = lineEquip.equipNo; - newTask.taskType = 6; + newTask.endPointId = inEquip.objid; + newTask.endPointNo = inEquip.equipNo; + newTask.taskType = 51;//到小包入口 newTask.useFlag = 1; - newTask.fromFloorNo = 2; - newTask.floorNo = endEquip.floorNo; dbContext.WcsTask.Add(newTask); WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); dbContext.Add(wcsTaskLog); dbContext.SaveChanges(); - LogManager.Info("二楼接驳位生成任务出库成功,托盘号:" + palletNo); - Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务出库成功,托盘号:" + palletNo); + LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + palletNo); + Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo); } - else + else if (Convert.ToInt32(agvPutValue) == 1) { - LogManager.Info("二楼接驳位出库任务出库失败,找不到终点站点"); - Console.WriteLine(DateTime.Now + ":二楼接驳位出库任务出库失败,找不到终点站点"); + BaseEquip? endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0); + if (endEquip != null) + { + dbContext.WcsTask.Remove(wcsTask); + WcsTask newTask = CoreMapper.Map(wcsTask); + newTask.taskStatus = 0; + newTask.objid = StaticData.SnowId.NextId(); + newTask.nextPointId = agvEquip.objid; + newTask.nextPointNo = agvEquip.equipNo; + newTask.createTime = DateTime.Now; + newTask.updateTime = DateTime.Now; + newTask.containerNo = palletNo; + newTask.currPointId = lineEquip.objid; + newTask.currPointNo = lineEquip.equipNo; + newTask.endPointId = endEquip.objid; + newTask.endPointNo = endEquip.equipNo; + newTask.taskType = 58;//到周转位 + newTask.useFlag = 1; + dbContext.WcsTask.Add(newTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + palletNo); + Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo); + } } } else { - LogManager.Info("二楼接驳位出库任务出库失败,找不到订单信息"); - Console.WriteLine(DateTime.Now + ":二楼接驳位出库任务出库失败,找不到订单信息"); + if (wcsTask.endPointId == 36) + { + if (Convert.ToInt32(agvPutValue) == 0) + { + dbContext.WcsTask.Remove(wcsTask); + WcsTask newTask = CoreMapper.Map(wcsTask); + newTask.taskStatus = 0; + newTask.objid = StaticData.SnowId.NextId(); + newTask.nextPointId = agvEquip.objid; + newTask.nextPointNo = agvEquip.equipNo; + newTask.createTime = DateTime.Now; + newTask.updateTime = DateTime.Now; + newTask.containerNo = palletNo; + newTask.currPointId = lineEquip.objid; + newTask.currPointNo = lineEquip.equipNo; + newTask.endPointId = inEquip.objid; + newTask.endPointNo = inEquip.equipNo; + newTask.taskType = 51;//到小包入口 + newTask.useFlag = 1; + dbContext.WcsTask.Add(newTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + palletNo); + Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo); + } + else if (Convert.ToInt32(agvPutValue) == 1) + { + BaseEquip? endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0); + if (endEquip != null) + { + dbContext.WcsTask.Remove(wcsTask); + WcsTask newTask = CoreMapper.Map(wcsTask); + newTask.taskStatus = 0; + newTask.objid = StaticData.SnowId.NextId(); + newTask.nextPointId = agvEquip.objid; + newTask.nextPointNo = agvEquip.equipNo; + newTask.createTime = DateTime.Now; + newTask.updateTime = DateTime.Now; + newTask.containerNo = palletNo; + newTask.currPointId = lineEquip.objid; + newTask.currPointNo = lineEquip.equipNo; + newTask.endPointId = endEquip.objid; + newTask.endPointNo = endEquip.equipNo; + newTask.taskType = 58;//到周转位 + newTask.useFlag = 1; + dbContext.WcsTask.Add(newTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + palletNo); + Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo); + } + } + } + else if (wcsTask.endPointId == 38) + { + dbContext.WcsTask.Remove(wcsTask); + WcsTask newTask = CoreMapper.Map(wcsTask); + newTask.taskStatus = 0; + newTask.objid = StaticData.SnowId.NextId(); + newTask.nextPointId = agvEquip.objid; + newTask.nextPointNo = agvEquip.equipNo; + newTask.createTime = DateTime.Now; + newTask.updateTime = DateTime.Now; + newTask.containerNo = palletNo; + newTask.currPointId = lineEquip.objid; + newTask.currPointNo = lineEquip.equipNo; + newTask.taskType = 54; + newTask.useFlag = 1; + dbContext.WcsTask.Add(newTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + palletNo); + Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo); + } + else + { + BaseEquip? endEquip = dbContext.BaseEquip.FirstOrDefault(t => t.equipType == 20 && t.equipStatus == 0 && t.emptyCount == 0); + if (endEquip != null) + { + dbContext.WcsTask.Remove(wcsTask); + WcsTask newTask = CoreMapper.Map(wcsTask); + newTask.taskStatus = 0; + newTask.objid = StaticData.SnowId.NextId(); + newTask.nextPointId = agvEquip.objid; + newTask.nextPointNo = agvEquip.equipNo; + newTask.createTime = DateTime.Now; + newTask.updateTime = DateTime.Now; + newTask.containerNo = palletNo; + newTask.currPointId = lineEquip.objid; + newTask.currPointNo = lineEquip.equipNo; + newTask.endPointId = endEquip.objid; + newTask.endPointNo = endEquip.equipNo; + newTask.taskType = 58; + newTask.useFlag = 1; + dbContext.WcsTask.Add(newTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + LogManager.Info("二楼接驳位生成任务入库成功,托盘号:" + palletNo); + Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务入库成功,托盘号:" + palletNo); + } + } + } + } + else if (wcsTask.taskStatus == 8) + { + if (wcsTask.taskType == 44) + { + BaseEquip? endEquip = StaticData.BaseEquip.First(t => t.objid == 3); + dbContext.WcsTask.Remove(wcsTask); + WcsTask newTask = CoreMapper.Map(wcsTask); + newTask.serialNo = SystemData.GetSerialNo(dbContext); + newTask.taskStatus = 0; + newTask.objid = StaticData.SnowId.NextId(); + newTask.nextPointId = tsjEquip.objid; + newTask.nextPointNo = tsjEquip.equipNo; + newTask.createTime = DateTime.Now; + newTask.updateTime = DateTime.Now; + newTask.endPointId = endEquip.objid; + newTask.endPointNo = endEquip.equipNo; + newTask.containerNo = palletNo; + newTask.currPointId = lineEquip.objid; + newTask.currPointNo = lineEquip.equipNo; + newTask.useFlag = 1; + newTask.fromFloorNo = 2; + newTask.floorNo = endEquip.floorNo; + dbContext.WcsTask.Add(newTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + LogManager.Info("二楼接驳位生成任务出库成功,托盘号:" + palletNo); + Console.WriteLine(DateTime.Now + ":二楼接驳位生成任务出库成功,托盘号:" + palletNo); } } } diff --git a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs index e78781c..d444da0 100644 --- a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs +++ b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs @@ -114,7 +114,7 @@ namespace Khd.Core.Wcs.Wcs { BasePlcpoint HeartBeat31 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "HeartBeat31"); int heartBeatCount = 0; - while(true) + while (true) { try { diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs index c2b876b..1459285 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs @@ -82,6 +82,66 @@ namespace Khd.Core.Wcs.Wcs { if (item.taskStatus == 0) { + BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType); + if (item.taskType == 67) + { + WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); + WmsBaseLocation toBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); + WcsCmd wcsCmd = new() + { + objid = StaticData.SnowId.NextId(), + cmdStatus = 0, + taskId = item.objid, + useFlag = 1, + cmdType = item.taskType, + containerNo = item.containerNo, + createTime = DateTime.Now, + createBy = FloorNo + "楼AGV", + currPointId = item.currPointId, + currPointNo = fromBaseLocation.agvPositionCode, + nextPointId = item.endPointId, + nextPointNo = toBaseLocation.agvPositionCode, + }; + var agvTask = new RequestAGVTaskDto + { + reqCode = wcsCmd.objid.ToString(), + positionCodePath = new List + { + new () + { + positionCode=wcsCmd.currPointNo, + type="00" + }, + new () + { + positionCode=wcsCmd.nextPointNo, + 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(result); + if (reponseMessage != null && reponseMessage.message == "成功") + { + LogManager.Info("五楼Agv下发任务成功:" + message); + wcsCmd.taskCode = reponseMessage.data; + wcsCmd.cmdStatus = 1; + item.taskStatus = 1; + dbContext.Update(item); + dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); + WcsCmdLog wcsCmdLog = CoreMapper.Map(wcsCmd); + dbContext.Add(wcsCmdLog); + dbContext.Add(wcsCmd); + dbContext.SaveChanges(); + } + else + { + LogManager.Info("五楼Agv下发任务失败" + item.taskType + message); + } + } if (item.taskType == 39) { BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 3); @@ -117,7 +177,7 @@ namespace Khd.Core.Wcs.Wcs type="00" } }, - taskTyp = "F300", + taskTyp = baseDictionary.dicValue, ctnrTyp = "2", }; string message = JsonConvert.SerializeObject(agvTask); @@ -142,27 +202,32 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskType == 41) { - BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 31); - WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.startPointId); - WcsCmd wcsCmd = new WcsCmd() + WmsRawOutstockDetail? wmsRawOutstockDetail = dbContext.WmsRawOutstockDetail.FirstOrDefault(t => t.rawOutstockId == wmsRawOutstock.rawOutstockId && t.executeStatus == "1"); + if (wmsRawOutstockDetail != null) { - objid = StaticData.SnowId.NextId(), - cmdStatus = 0, - taskId = item.objid, - useFlag = 1, - cmdType = item.taskType, - containerNo = item.containerNo, - createTime = DateTime.Now, - createBy = FloorNo + "楼AGV", - currPointId = item.startPointId, - currPointNo = wmsBaseLocation.agvPositionCode, - nextPointId = endEquip.objid, - nextPointNo = endEquip.agvPositionCode, - }; - var agvTask = new RequestAGVTaskDto - { - reqCode = StaticData.SnowId.NextId().ToString(), - positionCodePath = new List + wmsRawOutstockDetail.executeStatus = "1"; + wmsRawOutstockDetail.outstockTime = DateTime.Now; + BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 31); + WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); + WcsCmd wcsCmd = new WcsCmd() + { + objid = StaticData.SnowId.NextId(), + cmdStatus = 0, + taskId = item.objid, + useFlag = 1, + cmdType = item.taskType, + containerNo = item.containerNo, + createTime = DateTime.Now, + createBy = FloorNo + "楼AGV", + currPointId = item.currPointId, + currPointNo = wmsBaseLocation.agvPositionCode, + nextPointId = endEquip.objid, + nextPointNo = endEquip.agvPositionCode, + }; + var agvTask = new RequestAGVTaskDto + { + reqCode = StaticData.SnowId.NextId().ToString(), + positionCodePath = new List { new () { @@ -175,33 +240,35 @@ namespace Khd.Core.Wcs.Wcs type="00" } }, - taskTyp="F301", - 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(result); - if (reponseMessage != null && reponseMessage.message == "成功") - { - wcsCmd.taskCode = reponseMessage.data; - wcsCmd.cmdStatus = 1; - item.taskStatus = 1; - dbContext.Update(item); - dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); - WcsCmdLog wcsCmdLog = CoreMapper.Map(wcsCmd); - dbContext.Add(wcsCmdLog); - dbContext.Add(wcsCmd); - dbContext.SaveChanges(); - } - else - { - LogManager.Info("三楼Agv下发任务失败" + item.taskType + message); + 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(result); + if (reponseMessage != null && reponseMessage.message == "成功") + { + wcsCmd.taskCode = reponseMessage.data; + wcsCmd.cmdStatus = 1; + item.taskStatus = 1; + dbContext.Update(wmsRawOutstockDetail); + dbContext.Update(item); + dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); + WcsCmdLog wcsCmdLog = CoreMapper.Map(wcsCmd); + dbContext.Add(wcsCmdLog); + dbContext.Add(wcsCmd); + dbContext.SaveChanges(); + } + else + { + LogManager.Info("三楼Agv下发任务失败" + item.taskType + message); + } } } - else if (item.taskType == 42) + else if (item.taskType == 40) { - BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 31); - BaseEquip endEquip = StaticData.BaseEquip.First(); + BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); + BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); WcsCmd wcsCmd = new WcsCmd() { objid = StaticData.SnowId.NextId(), @@ -233,8 +300,69 @@ namespace Khd.Core.Wcs.Wcs type="00" } }, - taskTyp="F302", + taskTyp = baseDictionary.dicValue, ctnrTyp = "2", + ctnrNum = startEquip.emptyCount.ToString() + }; + string message = JsonConvert.SerializeObject(agvTask); + string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); + var reponseMessage = JsonConvert.DeserializeObject(result); + if (reponseMessage != null && reponseMessage.message == "成功") + { + wcsCmd.taskCode = reponseMessage.data; + wcsCmd.cmdStatus = 1; + item.taskStatus = 1; + dbContext.Update(item); + dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 1 }); + WcsCmdLog wcsCmdLog = CoreMapper.Map(wcsCmd); + dbContext.Add(wcsCmdLog); + dbContext.Add(wcsCmd); + dbContext.SaveChanges(); + } + else + { + LogManager.Info("三楼Agv下发任务失败" + item.taskType + message); + } + } + else if (item.taskType == 42) + { + //var startEquip = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); + BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); + BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); + WcsCmd wcsCmd = new WcsCmd() + { + objid = StaticData.SnowId.NextId(), + cmdStatus = 0, + taskId = item.objid, + useFlag = 1, + cmdType = item.taskType, + containerNo = item.containerNo, + createTime = DateTime.Now, + createBy = FloorNo + "楼AGV", + currPointId = item.currPointId, + currPointNo = startEquip.agvPositionCode, + nextPointId = endEquip.objid, + nextPointNo = endEquip.agvPositionCode, + }; + var agvTask = new RequestAGVTaskDto + { + reqCode = StaticData.SnowId.NextId().ToString(), + positionCodePath = new List + { + new () + { + positionCode=wcsCmd.currPointNo, + type="00" + }, + new () + { + positionCode=wcsCmd.nextPointNo, + 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); @@ -258,8 +386,8 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskType == 43) { - BaseEquip emptyEquip = StaticData.BaseEquip.First(t => t.objid == item.startPointId); - BaseEquip endEquip = StaticData.BaseEquip.First(t => t.floorNo == 3 && t.equipType == 1); + BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); + BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); WcsCmd wcsCmd = new WcsCmd() { objid = StaticData.SnowId.NextId(), @@ -270,8 +398,8 @@ namespace Khd.Core.Wcs.Wcs containerNo = item.containerNo, createTime = DateTime.Now, createBy = FloorNo + "楼AGV", - currPointId = item.startPointId, - currPointNo = emptyEquip.agvPositionCode, + currPointId = item.currPointId, + currPointNo = startEquip.agvPositionCode, nextPointId = endEquip.objid, nextPointNo = endEquip.agvPositionCode, }; @@ -291,8 +419,9 @@ namespace Khd.Core.Wcs.Wcs type="00" } }, - taskTyp="F303", + taskTyp = baseDictionary.dicValue, ctnrTyp = "2", + ctnrNum = startEquip.emptyCount.ToString() }; string message = JsonConvert.SerializeObject(agvTask); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); @@ -316,7 +445,7 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskType == 44) { - BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.startPointId); + BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.currPointId); BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 3); WcsCmd wcsCmd = new WcsCmd() { @@ -349,8 +478,9 @@ namespace Khd.Core.Wcs.Wcs type = "00" } }, - taskTyp="F304", - ctnrTyp="2" + taskTyp = baseDictionary.dicValue, + ctnrTyp = "2", + ctnrNum = startEquip.emptyCount.ToString() }; string message = JsonConvert.SerializeObject(agvTask); string result = HttpHelper.SendPostMessage(baseEquip.serverIp, baseEquip.serverPort.Value, "rcms/services/rest/hikRpcService/genAgvSchedulingTask", message); @@ -400,6 +530,43 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskStatus == 5) { + if (item.taskType == 67) + { + WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); + WmsBaseLocation toBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); + fromBaseLocation.outstockFlag = "0"; + fromBaseLocation.locationStatus = "1"; + fromBaseLocation.containerCode = null; + fromBaseLocation.updateTime = DateTime.Now; + toBaseLocation.instockFlag = "0"; + toBaseLocation.locationStatus = "1"; + toBaseLocation.containerCode = item.containerNo; + toBaseLocation.updateTime = DateTime.Now; + var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == fromBaseLocation.locationCode).FirstOrDefault(); + if (wmsRawStock != null) + { + wmsRawStock.locationCode = toBaseLocation.locationCode; + dbContext.Update(wmsRawStock); + } + else + { + var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == fromBaseLocation.locationCode); + if (wmsProductStock != null) + { + wmsProductStock.locationCode = toBaseLocation.locationCode; + dbContext.Update(wmsProductStock); + } + } + dbContext.Update(fromBaseLocation); + dbContext.Update(toBaseLocation); + dbContext.Remove(wcsCmd); + dbContext.Remove(item); + dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 6 }); + dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog() { cmdStatus = 6 }); + dbContext.Update(fromBaseLocation); + dbContext.Update(toBaseLocation); + dbContext.SaveChanges(); + } if (item.taskType == 39) { WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation @@ -446,7 +613,26 @@ namespace Khd.Core.Wcs.Wcs dbContext.SaveChanges(); } } - + } + else if (item.taskType == 40) + { + BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId); + BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == item.endPointId); + startEquip.emptyCount = 0; + startEquip.equipStatus = 0; + startEquip.updateTime = DateTime.Now; + startEquip.updateBy = "WCS"; + endEquip.emptyCount = item.qty; + endEquip.equipStatus = 1; + endEquip.updateTime = DateTime.Now; + endEquip.updateBy = "WCS"; + dbContext.Update(startEquip); + dbContext.Update(endEquip); + dbContext.Remove(wcsCmd); + dbContext.Remove(item); + dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 }); + dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 }); + dbContext.SaveChanges(); } else if (item.taskType == 41) { @@ -454,51 +640,68 @@ namespace Khd.Core.Wcs.Wcs .First(t => t.locationId == item.currPointId); wmsBaseLocation.outstockFlag = "0"; wmsBaseLocation.locationStatus = "1"; - wmsBaseLocation.containerCode = ""; + wmsBaseLocation.containerCode = null; wmsBaseLocation.updateTime = DateTime.Now; wmsBaseLocation.updateBy = "WCS"; - dbContext.WmsRawOutstock.Where(t => t.orderId == item.orderId).Update(t => new WmsRawOutstock + + WmsRawOutstock? wmsRawOutstock = dbContext.WmsRawOutstock.FirstOrDefault(t => t.rawOutstockId == item.orderId); + if (wmsRawOutstock != null) { - executeStatus = "2" - }); - dbContext.Update(wmsBaseLocation); - dbContext.WmsRawStock.Where(t => t.locationCode == wmsBaseLocation.locationCode).Delete(); - dbContext.WcsTask.Where(t => t.objid == item.objid).Delete(); - dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 }); - dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 }); - dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete(); - dbContext.SaveChanges(); + wmsRawOutstock.realOutstockAmount += 1; + WmsRawOutstockDetail? wmsRawOutstockDetail = dbContext.WmsRawOutstockDetail.FirstOrDefault(t => t.rawOutstockId == wmsRawOutstock.rawOutstockId && t.executeStatus == "1"); + if (wmsRawOutstockDetail != null) + { + wmsRawOutstockDetail.executeStatus = "2"; + WmsRawStock? wmsRawStock = dbContext.WmsRawStock.Where(t => t.palletInfoCode == item.containerNo).FirstOrDefault(); + if (wmsRawStock != null) + { + dbContext.Update(wmsRawOutstock); + dbContext.Remove(wmsRawStock); + dbContext.Update(wmsBaseLocation); + dbContext.Remove(wcsCmd); + dbContext.Remove(item); + dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 }); + dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 }); + dbContext.SaveChanges(); + } + } + } } else if (item.taskType == 42) { - BaseEquip emptyEquip = StaticData.BaseEquip.First(t => t.objid == 35); - BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 3); + BaseEquip emptyEquip = dbContext.BaseEquip.First(t => t.objid == 35); emptyEquip.emptyCount += 1; + emptyEquip.equipStatus = 1; emptyEquip.updateTime = DateTime.Now; emptyEquip.updateBy = "WCS"; dbContext.Update(emptyEquip); - dbContext.WcsTask.Where(t => t.objid == item.objid).Delete(); + dbContext.Remove(wcsCmd); + dbContext.Remove(item); dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 }); dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 }); - dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete(); dbContext.SaveChanges(); } else if (item.taskType == 43) { - BaseEquip emptyEquip = StaticData.BaseEquip.First(t => t.objid == 35); - BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == item.endPointId); + BaseEquip emptyEquip = dbContext.BaseEquip.First(t => t.objid == 35); + BaseEquip endEquip = dbContext.BaseEquip.First(t => t.objid == item.endPointId); emptyEquip.emptyCount = 0; emptyEquip.updateTime = DateTime.Now; emptyEquip.updateBy = "WCS"; - endEquip.emptyCount = emptyEquip.emptyCount; + endEquip.emptyCount += item.qty; endEquip.updateTime = DateTime.Now; endEquip.updateBy = "WCS"; dbContext.Update(endEquip); dbContext.Update(emptyEquip); + dbContext.Remove(wcsCmd); + dbContext.Remove(item); + dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 }); + dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 }); + dbContext.SaveChanges(); } else if (item.taskType == 44) { - BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == item.startPointId); + BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId); BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.objid == 3); startEquip.emptyCount = 0; startEquip.updateTime = DateTime.Now; @@ -511,9 +714,9 @@ namespace Khd.Core.Wcs.Wcs item.floorNo = endEquip.floorNo; item.taskStatus = 6; dbContext.Update(item); - dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6, nextPointId = lineEquip.objid, nextPointNo = lineEquip.equipNo, fromFloorNo = 3, floorNo = endEquip.floorNo }); + dbContext.Remove(wcsCmd); + dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 }); dbContext.WcsCmdLog.Where(t => t.objid == wcsCmd.objid).Update(t => new WcsCmdLog { cmdStatus = 6 }); - dbContext.WcsCmd.Where(t => t.objid == wcsCmd.objid).Delete(); dbContext.SaveChanges(); } } diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs index 2b57883..e13a860 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs @@ -1,13 +1,10 @@ -using Khd.Core.Domain.Dto.webapi; -using Khd.Core.Domain.Models; +using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Library.Mapper; -using Khd.Core.Plc; using Khd.Core.Wcs.Global; using Masuit.Tools.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; -using Newtonsoft.Json; using Z.EntityFramework.Plus; namespace Khd.Core.Wcs.Wcs @@ -90,27 +87,6 @@ namespace Khd.Core.Wcs.Wcs { if (wcsTask.taskStatus == 5)//提升机任务是完成状态 { - if (wcsTask.isEmpty == "1") - { - var emptyEquip = StaticData.BaseEquip.FirstOrDefault(t => t.equipType == 15 && t.emptyCount == 0); - if(emptyEquip != null) - { - wcsTask.taskStatus = 0;//创建状态 - wcsTask.updateTime = DateTime.Now; - wcsTask.currPointId = baseEquip.objid; - wcsTask.currPointNo = baseEquip.equipNo; - wcsTask.nextPointId = AgvEquip.objid; - wcsTask.nextPointNo = AgvEquip.equipNo; - wcsTask.endPointId = emptyEquip.objid; - wcsTask.endPointNo = emptyEquip.equipNo; - wcsTask.useFlag = 1; - dbContext.Update(wcsTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); - dbContext.Add(wcsTaskLog); - dbContext.SaveChanges(); - } - } - else { var wmsBaseLocations = dbContext.WmsBaseLocation.Where(t => t.warehouseFloor == FloorNo) .Where(t => t.activeFlag == "1") @@ -144,20 +120,23 @@ namespace Khd.Core.Wcs.Wcs wmsBaseLocation ??= outBill.FirstOrDefault()?.b;//先找相同物料的外侧库位 wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 2);//找不到再找深库位 wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 - + if (wmsBaseLocations.Count > 0 && wmsBaseLocation != null) { - wcsTask.taskStatus = 0;//创建状态 - wcsTask.updateTime = DateTime.Now; - wcsTask.currPointId = baseEquip.objid; - wcsTask.currPointNo = baseEquip.equipNo; - wcsTask.nextPointId = AgvEquip.objid; - wcsTask.nextPointNo = AgvEquip.equipNo; - wcsTask.endPointId = wmsBaseLocation.locationId; - wcsTask.endPointNo = wmsBaseLocation.locationCode; + dbContext.Remove(wcsTask); + WcsTask newTask = CoreMapper.Map(wcsTask); + newTask.objid = StaticData.SnowId.NextId(); + newTask.taskStatus = 0;//创建状态 + newTask.updateTime = DateTime.Now; + newTask.currPointId = baseEquip.objid; + newTask.currPointNo = baseEquip.equipNo; + newTask.nextPointId = AgvEquip.objid; + newTask.nextPointNo = AgvEquip.equipNo; + newTask.endPointId = wmsBaseLocation.locationId; + newTask.endPointNo = wmsBaseLocation.locationCode; if (wmsBaseLocation.warehouseId == 311) { - wcsTask.taskType = 39; + newTask.taskType = 39; } else { @@ -165,11 +144,11 @@ namespace Khd.Core.Wcs.Wcs Thread.Sleep(1000); continue; } - wcsTask.useFlag = 1; + newTask.useFlag = 1; wmsBaseLocation.instockFlag = "1"; wmsBaseLocation.locationStatus = "2"; dbContext.Update(wmsBaseLocation); - dbContext.Update(wcsTask); + dbContext.Add(wcsTask); WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); dbContext.Add(wcsTaskLog); dbContext.SaveChanges(); @@ -184,24 +163,19 @@ namespace Khd.Core.Wcs.Wcs else if (wcsTask.taskStatus == 6)//小车任务是完成状态,说明是出库 { BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.equipType == 2);//提升机 - wcsTask.nextPointId = nextEquip.objid; - wcsTask.nextPointNo = nextEquip.equipNo; - wcsTask.currPointId = baseEquip.objid; - wcsTask.currPointNo = baseEquip.equipNo; - wcsTask.fromFloorNo = FloorNo; - wcsTask.taskStatus = 0; - wcsTask.updateTime = DateTime.Now; - dbContext.Update(wcsTask); - dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid) - .Update(t => new WcsTaskLog - { - nextPointId = nextEquip.objid, - nextPointNo = nextEquip.equipNo, - currPointId = baseEquip.objid, - currPointNo = baseEquip.equipNo, - taskStatus = 0, - updateTime = DateTime.Now, - }); + dbContext.Remove(wcsTask); + WcsTask newTask = CoreMapper.Map(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.taskStatus = 0; + newTask.updateTime = DateTime.Now; + dbContext.Add(newTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); + dbContext.Add(wcsTaskLog); dbContext.SaveChanges(); } } diff --git a/src/Khd.Core.Wcs/Wcs/WcsToWms.cs b/src/Khd.Core.Wcs/Wcs/WcsToWms.cs index 3560269..2d5d5f6 100644 --- a/src/Khd.Core.Wcs/Wcs/WcsToWms.cs +++ b/src/Khd.Core.Wcs/Wcs/WcsToWms.cs @@ -1,9 +1,4 @@ -using Khd.Core.Domain.Dto.webapi; -using Masuit.Tools; -using Masuit.Tools.Logging; -using Newtonsoft.Json; - -namespace Khd.Core.Wcs.Wcs +namespace Khd.Core.Wcs.Wcs { public class WcsToWms { diff --git a/src/Khd.Core.Wpf/App.xaml.cs b/src/Khd.Core.Wpf/App.xaml.cs index 0768e79..18d2487 100644 --- a/src/Khd.Core.Wpf/App.xaml.cs +++ b/src/Khd.Core.Wpf/App.xaml.cs @@ -1,9 +1,6 @@ -using Masuit.Tools; -using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Configuration; using System; using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; using System.Threading.Tasks; using System.Windows; namespace Khd.Core.Wpf @@ -15,7 +12,7 @@ namespace Khd.Core.Wpf { public App() { - + //UI线程未捕获异常处理事件(UI主线程) this.DispatcherUnhandledException += App_DispatcherUnhandledException; @@ -30,7 +27,7 @@ namespace Khd.Core.Wpf .Build(); SystemData.PlcConfigs = configuration.GetSection("PlcConfigs").Get>(); - + ConnectionStrings.ConnectionString = configuration["ConnectionStrings:DefaultConnection"].ToString(); //配置文件 加载 Thrift 推送端口 ThriftConfig.ThriftIpAddress = configuration["ThriftConfig:ThriftIpAddress"].ToString(); diff --git a/src/Khd.Core.Wpf/CSS/DataGridClass.xaml b/src/Khd.Core.Wpf/CSS/DataGridClass.xaml index 655d060..f00d059 100644 --- a/src/Khd.Core.Wpf/CSS/DataGridClass.xaml +++ b/src/Khd.Core.Wpf/CSS/DataGridClass.xaml @@ -4,14 +4,14 @@ - - - + + + + + + + + + + + + + + + + @@ -1410,11 +1576,14 @@