diff --git a/DOAN.Admin.WebApi/Controllers/PBL/MESInteractionController.cs b/DOAN.Admin.WebApi/Controllers/PBL/MESInteractionController.cs new file mode 100644 index 0000000..46c517f --- /dev/null +++ b/DOAN.Admin.WebApi/Controllers/PBL/MESInteractionController.cs @@ -0,0 +1,49 @@ +using Microsoft.AspNetCore.Mvc; +using DOAN.Model.PBL.Dto; +using DOAN.Model.PBL; +using DOAN.Service.PBL.IService; +using DOAN.Admin.WebApi.Filters; + +//创建时间:2024-09-23 +namespace DOAN.Admin.WebApi.Controllers.PBL +{ + /// + /// 与MES交互 + /// + [AllowAnonymous] + [Route("PBL/mes_interation")] + public class MESInteractionController : BaseController + { + private readonly IMESInteractionServcie mesInteraction; + public MESInteractionController(IMESInteractionServcie mesInteraction) + { + this.mesInteraction = mesInteraction; + } + + //TODO 接受工单 亮灯 + + [HttpPost("mes_light_up")] + public IActionResult MESLightUp([FromBody] LightUpDto light) + { + var response= mesInteraction.MESLightUp(light); + + return SUCCESS(response); + } + + //TODO 扫码灭灯 + [HttpGet("mes_light_down")] + public IActionResult MESLightDown(string scan_code) + { + var response = mesInteraction.MESLightDown(scan_code); + + return SUCCESS(response); + } + + + } + +} + + + + diff --git a/DOAN.Model/PBL/Dto/LightUp.cs b/DOAN.Model/PBL/Dto/LightUp.cs new file mode 100644 index 0000000..3e720ef --- /dev/null +++ b/DOAN.Model/PBL/Dto/LightUp.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DOAN.Model.PBL.Dto +{ + public class LightUpDto + { + /// + /// 工单号 + /// + public string Workorder { get; set; } + + + /// + /// 订单号 + /// + public string OrderNumber { get; set; } + + + /// + /// 总成零件号 + /// + public string AssemblyPartNumber { get; set; } + + + + + + + } + + +} diff --git a/DOAN.Model/PBL/Dto/StoragelocationDto.cs b/DOAN.Model/PBL/Dto/StoragelocationDto.cs index 116534b..b8d5e8f 100644 --- a/DOAN.Model/PBL/Dto/StoragelocationDto.cs +++ b/DOAN.Model/PBL/Dto/StoragelocationDto.cs @@ -18,11 +18,18 @@ namespace DOAN.Model.PBL.Dto { [Required(ErrorMessage = "Id不能为空")] public int Id { get; set; } + + public string RackCode { get; set; } + + public int LayerNum { get; set; } public string Partnumber { get; set; } - - public string RackCode { get; set; } - + + /// + /// 最大容量 + /// + + public int MaxCapacity { get; set; } public int? PackageNum { get; set; } public string CreatedBy { get; set; } diff --git a/DOAN.Model/PBL/Light_Log.cs b/DOAN.Model/PBL/Light_Log.cs new file mode 100644 index 0000000..c0d4572 --- /dev/null +++ b/DOAN.Model/PBL/Light_Log.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DOAN.Model.PBL +{ + /// + /// 库存日志 + /// + [SugarTable("light_log")] + public class Light_Log + { + /// + /// 雪花 + /// + [SugarColumn(IsPrimaryKey = true, IsIdentity = false)] + public string Id { get; set; } + + /// + /// 1亮灯、2灭灯 + /// + [SugarColumn(ColumnName = "light_operation")] + public int LightOperation { get; set; } + + + /// + /// 货架号 + /// + [SugarColumn(ColumnName = "shelf_code")] + public string ShelfCode { get; set; } + + + /// + /// 操作者 + /// + [SugarColumn(ColumnName = "operationer")] + public string Operationer { get; set; } + + + /// + /// 创建时间 + /// + [SugarColumn(ColumnName = "created_time")] + public DateTime? CreatedTime { get; set; } + } +} diff --git a/DOAN.Model/PBL/MES_Interaction.cs b/DOAN.Model/PBL/MES_Interaction.cs new file mode 100644 index 0000000..4f0ae66 --- /dev/null +++ b/DOAN.Model/PBL/MES_Interaction.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DOAN.Model.PBL +{ + /// + /// mes交互日志 + /// + [SugarTable("mes_interation_log")] + public class MES_Interation_Log + { + /// + /// 雪花 + /// + [SugarColumn(IsPrimaryKey = true, IsIdentity = false)] + public string Id { get; set; } + + /// + /// 工单号 + /// + [SugarColumn(ColumnName = "Workorder")] + public string Workorder { get; set; } + + + /// + /// 订单号 + /// + [SugarColumn(ColumnName = "OrderNumber")] + public string OrderNumber { get; set; } + + + /// + /// 总成零件号 + /// + [SugarColumn(ColumnName = "AssemblyPartNumber")] + public string AssemblyPartNumber { get; set; } + + /// + /// 扫描scancode + /// + [SugarColumn(ColumnName = "scancode")] + public string ScanCode { get; set; } + + + [SugarColumn(ColumnName = "created_time")] + public DateTime CreatedTime { get; set; } + + + + [SugarColumn(ColumnName = "updated_time")] + public DateTime UpdatedTime { get; set; } + } +} diff --git a/DOAN.Model/PBL/Storagelocation.cs b/DOAN.Model/PBL/Storagelocation.cs index f185970..c33fe6d 100644 --- a/DOAN.Model/PBL/Storagelocation.cs +++ b/DOAN.Model/PBL/Storagelocation.cs @@ -1,4 +1,3 @@ - namespace DOAN.Model.PBL { /// @@ -13,16 +12,28 @@ namespace DOAN.Model.PBL [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] public int Id { get; set; } + /// + /// 料架号 + /// + [SugarColumn(ColumnName = "rack_code")] + public string RackCode { get; set; } + + /// + /// 层号 + /// + [SugarColumn(ColumnName = "layer_num")] + public int LayerNum { get; set; } + /// /// 零件号 /// public string Partnumber { get; set; } /// - /// 料架号 + /// 最大容量 /// - [SugarColumn(ColumnName = "rack_code")] - public string RackCode { get; set; } + [SugarColumn(ColumnName = "max_capacity")] + public int MaxCapacity { get; set; } /// /// 箱子数 @@ -53,6 +64,5 @@ namespace DOAN.Model.PBL /// [SugarColumn(ColumnName = "uPDATED_TIME")] public DateTime? UpdatedTime { get; set; } - } } \ No newline at end of file diff --git a/DOAN.Service/PBL/IService/IMESInteractionServcie.cs b/DOAN.Service/PBL/IService/IMESInteractionServcie.cs new file mode 100644 index 0000000..3e0e1f4 --- /dev/null +++ b/DOAN.Service/PBL/IService/IMESInteractionServcie.cs @@ -0,0 +1,17 @@ +using DOAN.Model.PBL.Dto; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DOAN.Service.PBL.IService +{ + public interface IMESInteractionServcie + { + + bool MESLightUp(LightUpDto light); + bool MESLightDown(string scan_code); + } +} diff --git a/DOAN.Service/PBL/MESInteractionServcie.cs b/DOAN.Service/PBL/MESInteractionServcie.cs new file mode 100644 index 0000000..afa9ddc --- /dev/null +++ b/DOAN.Service/PBL/MESInteractionServcie.cs @@ -0,0 +1,101 @@ +using Infrastructure.Attribute; +using Infrastructure.Extensions; +using DOAN.Model.PBL.Dto; +using DOAN.Model.PBL; +using DOAN.Repository; +using DOAN.Service.PBL.IService; +using Mapster; +using System.Runtime.InteropServices; +using SqlSugar; +using System.Security.Cryptography.X509Certificates; + + +namespace DOAN.Service.PBL +{ + /// + /// 料架表Service业务层处理 + /// + [AppService(ServiceType = typeof(IMESInteractionServcie), ServiceLifetime = LifeTime.Transient)] + public class MESInteractionServcie : BaseService, IMESInteractionServcie + { + public bool MESLightUp(LightUpDto light) + { + // 1.记录MES交互记录 + MES_Interation_Log item = light.Adapt(); + item.Id = XUEHUA; + item.CreatedTime= DateTime.Now; + Context.Insertable(item).ExecuteCommand(); + + // 2.根据总成零件号 查询对应零件号,使得对应料架亮灯 + + //镜壳 料架 + Storagelocation MirrorshellShelf = Context.Queryable().Where(it => it.Partnumber == + SqlFunc.Subqueryable().Where(It => It.Productcode == light.AssemblyPartNumber).Select(it => it.MirrorshellCode)).First(); + + //镜体 料架 + Storagelocation MirrorshellBody = Context.Queryable().Where(it => it.Partnumber == + SqlFunc.Subqueryable().Where(It => It.Productcode == light.AssemblyPartNumber).Select(it => it.MirrorbodyCode)).First(); + + // 3.对应料架亮灯 + Light_Log light_Log = new Light_Log(); + light_Log.Id = XUEHUA; + light_Log.LightOperation = 1; + if (MirrorshellShelf != null) + { + light_Log.ShelfCode = MirrorshellShelf.RackCode; + + } + + light_Log.Operationer = "PBL"; + light_Log.CreatedTime = DateTime.Now; + Light_Log light_Log2 = new Light_Log(); + light_Log2.Id = XUEHUA; + light_Log2.LightOperation = 1; + if (MirrorshellShelf != null) + { + light_Log2.ShelfCode = MirrorshellShelf.RackCode; + + } + + light_Log2.Operationer = "PBL"; + light_Log2.CreatedTime = DateTime.Now; + Context.Insertable(light_Log2).ExecuteCommand(); + int result = Context.Insertable(light_Log).ExecuteCommand(); + return result > 0; + + } + + + public bool MESLightDown(string scan_code) + { + // 1.记录MES交互记录 + MES_Interation_Log item = new MES_Interation_Log(); + item.Id = XUEHUA; + item.ScanCode=scan_code; + item.CreatedTime = DateTime.Now; + Context.Insertable(item).ExecuteCommand(); + + //2 找到对应的料架 灭灯 + Storagelocation storagelocation= Context.Queryable().Where(it => it.Partnumber == scan_code).First(); + Light_Log light_Log = new Light_Log(); + light_Log.Id = XUEHUA; + light_Log.LightOperation = 2; + if (storagelocation != null) { + light_Log.ShelfCode = storagelocation.RackCode ; + } + + light_Log.Operationer = "PBL"; + light_Log.CreatedTime = DateTime.Now; + int result= Context.Insertable(light_Log).ExecuteCommand(); + if (result > 0) + { + return true; + } + else + { + return false; + } + } + + } +} \ No newline at end of file diff --git a/Infrastructure/Cache/CacheHelper.cs b/Infrastructure/Cache/CacheHelper.cs index d361fac..ada267e 100644 --- a/Infrastructure/Cache/CacheHelper.cs +++ b/Infrastructure/Cache/CacheHelper.cs @@ -134,7 +134,7 @@ namespace DOAN.Common //.net7需要这样写 var coherentState = Cache.GetType().GetField("_coherentState", flags).GetValue(Cache); - var entries = coherentState.GetType().GetField("_entries", flags).GetValue(coherentState); + var entries = coherentState.GetType()?.GetField("_entries", flags)?.GetValue(coherentState); var keys = new List(); if (entries is not IDictionary cacheItems) return keys; diff --git a/Infrastructure/DOAN.Infrastructure.csproj b/Infrastructure/DOAN.Infrastructure.csproj index 7b8af04..81355e1 100644 --- a/Infrastructure/DOAN.Infrastructure.csproj +++ b/Infrastructure/DOAN.Infrastructure.csproj @@ -23,4 +23,13 @@ + + + dll\HslCommunication.dll + + + dll\Register.dll + + + diff --git a/Infrastructure/WebExtensions/HslCommunicationExtension.cs b/Infrastructure/WebExtensions/HslCommunicationExtension.cs new file mode 100644 index 0000000..77046b5 --- /dev/null +++ b/Infrastructure/WebExtensions/HslCommunicationExtension.cs @@ -0,0 +1,32 @@ +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Register; + +namespace DOAN.Infrastructure.WebExtensions +{ + public static class HslCommunicationExtension + { + + public static void AddHslCommunication(this IServiceCollection services) + { + //if (!HslCommunication.Authorization.SetAuthorizationCode("71d19e25-1fc3-419f-adaa-8c14df37952a")) + //{ + // Console.WriteLine("HslCommunication激活失败"); + + //} + if (!Register.Reg.RegLicense()) + { + Console.WriteLine("HslCommunication激活失败"); + } + else + { + Console.WriteLine("HslCommunication激活成功"); + } + ; + } + } +} diff --git a/Infrastructure/dll/HslCommunication.dll b/Infrastructure/dll/HslCommunication.dll new file mode 100644 index 0000000..848d236 Binary files /dev/null and b/Infrastructure/dll/HslCommunication.dll differ diff --git a/Infrastructure/dll/Register.dll b/Infrastructure/dll/Register.dll new file mode 100644 index 0000000..5309e5f Binary files /dev/null and b/Infrastructure/dll/Register.dll differ