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