diff --git a/Admin.Core.IService/IService_New/IBaseBomInfoServices.cs b/Admin.Core.IService/IService_New/IBaseBomInfoServices.cs index 6bf295ad..49f0f58e 100644 --- a/Admin.Core.IService/IService_New/IBaseBomInfoServices.cs +++ b/Admin.Core.IService/IService_New/IBaseBomInfoServices.cs @@ -1,5 +1,7 @@ using Admin.Core.IService; using Admin.Core.Model; +using System.Collections.Generic; +using System.Threading.Tasks; namespace Admin.Core.IService { @@ -8,5 +10,13 @@ namespace Admin.Core.IService /// public interface IBaseBomInfoServices : IBaseServices { + + /// + /// 根据成品物料码获取自己BOM信息 + /// + /// + /// + /// + Task GetChildenBomInfoByMaterialCode(string materialCode, string materialType); } } \ No newline at end of file diff --git a/Admin.Core.Service/Service_New/BaseBomInfoServices.cs b/Admin.Core.Service/Service_New/BaseBomInfoServices.cs index f0c3fd18..2198c687 100644 --- a/Admin.Core.Service/Service_New/BaseBomInfoServices.cs +++ b/Admin.Core.Service/Service_New/BaseBomInfoServices.cs @@ -2,16 +2,68 @@ using Admin.Core.IService; using Admin.Core.Model; using Admin.Core.Model.Model_New; +using log4net; +using Microsoft.AspNetCore.Razor.TagHelpers; +using Microsoft.IdentityModel.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; namespace Admin.Core.Service { public class BaseBomInfoServices : BaseServices, IBaseBomInfoServices { + private static readonly log4net.ILog logHelper = LogManager.GetLogger(typeof(BaseBomInfoServices)); private readonly IBaseRepository _dal; public BaseBomInfoServices(IBaseRepository dal) { this._dal = dal; base.BaseDal = dal; } + + public async Task GetChildenBomInfoByMaterialCode(string materialCode, string materialType) + { + BaseBomInfo bomInfo = null; + try + { + var info =await GetChildenByParentId(materialCode); + if (info.Count > 0) + { + bomInfo = info.FirstOrDefault(x => x.MaterialType == materialType); + } + } + catch (Exception ex) + { + logHelper.Error("获取BOM集合异常", ex); + } + return bomInfo; + } + + private async Task> GetChildenByParentId(string parentId, List result = null) + { + if (result == null) + { + result = new List(); + } + try + { + var info =await _dal.QueryAsync(x => x.ParentId == parentId); + + if (info.Count > 0) + { + foreach (var item in info) + { + result.Add(item); + var childInfos = GetChildenByParentId(item.MaterialCode, result); + } + } + } + catch (Exception ex) + { + logHelper.Error("获取BOM集合异常", ex); + } + return result; + } } } \ No newline at end of file diff --git a/Admin.Core.Tasks/QuartzNet/Jobs/Job_PQInStoreTask_Quartz.cs b/Admin.Core.Tasks/QuartzNet/Jobs/Job_BoxFoamInStoreTask_Quartz.cs similarity index 98% rename from Admin.Core.Tasks/QuartzNet/Jobs/Job_PQInStoreTask_Quartz.cs rename to Admin.Core.Tasks/QuartzNet/Jobs/Job_BoxFoamInStoreTask_Quartz.cs index 941c494e..c06e5be0 100644 --- a/Admin.Core.Tasks/QuartzNet/Jobs/Job_PQInStoreTask_Quartz.cs +++ b/Admin.Core.Tasks/QuartzNet/Jobs/Job_BoxFoamInStoreTask_Quartz.cs @@ -15,7 +15,7 @@ using StackExchange.Profiling.Internal; /// namespace Admin.Core.Tasks { - public class Job_PQInStoreTask_Quartz : JobBase, IJob + public class Job_BoxFoamInStoreTask_Quartz : JobBase, IJob { #region 事件 @@ -66,7 +66,7 @@ namespace Admin.Core.Tasks private readonly IBaseStoreInfoServices _baseStoreInfoServices; private readonly IBaseSpaceDetailServices _baseSpaceDetailServices; - public Job_PQInStoreTask_Quartz(ISysTasksQzService SysTasksQzService, ISysJobLogService sysJobLogService, + public Job_BoxFoamInStoreTask_Quartz(ISysTasksQzService SysTasksQzService, ISysJobLogService sysJobLogService, IBaseSpaceInfoServices baseSpaceInfoServices, IRealTaskInfoServices realTaskInfoService, IProductPlanInfoServices productPlanInfoServices, IRecordInstoreServices recordInstoreServices, IBaseStoreInfoServices baseStoreInfoServices, IBaseSpaceDetailServices IBaseSpaceDetailServices) diff --git a/Admin.Core.Tasks/QuartzNet/Jobs/Job_BoxFoamOutStore_Quartz.cs b/Admin.Core.Tasks/QuartzNet/Jobs/Job_BoxFoamOutStore_Quartz.cs new file mode 100644 index 00000000..ef2d8937 --- /dev/null +++ b/Admin.Core.Tasks/QuartzNet/Jobs/Job_BoxFoamOutStore_Quartz.cs @@ -0,0 +1,138 @@ +using Admin.Core.Common; +using Admin.Core.IService; +using Admin.Core.IService.ISys; +using Admin.Core.Model; +using Admin.Core.Service; +using Aucma.Core.PLc; +using log4net; +using Quartz; +using System; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +/// +/// 这里要注意下,命名空间和程序集是一样的,不然反射不到 +/// +namespace Admin.Core.Tasks +{ + public class Job_BoxFoamOutStore_Quartz : JobBase, IJob + { + #region 初始化出库任务 + /// + /// 初始化出库任务 + /// + /// + public delegate void RefreshOutStoreTask(RealTaskInfo taskInfos); + public event RefreshOutStoreTask RefreshOutStoreTaskEvent; + + #endregion + + private static readonly log4net.ILog log = LogManager.GetLogger(typeof(Job_BoxFoamOutStore_Quartz)); + protected readonly IBaseOrderInfoServices _baseOrderInfoServices; + protected readonly IBaseSpaceInfoServices _baseSpaceInfoServices; + protected readonly IBaseBomInfoServices _baseBomInfoServices; + protected readonly IRealTaskInfoServices _realTaskInfoServices; + protected readonly IExecutePlanInfoServices _executePlanInfoServices; + public Job_BoxFoamOutStore_Quartz(ISysTasksQzService SysTasksQzService, ISysJobLogService sysJobLogService, + IBaseOrderInfoServices baseOrderInfoServices, IBaseSpaceInfoServices baseSpaceInfoServices, + IRealTaskInfoServices realTaskInfoServices,IBaseBomInfoServices baseBomInfoServices, IExecutePlanInfoServices executePlanInfoServices) + { + _SysTasksQzService = SysTasksQzService; + _sysJobLogService = sysJobLogService; + _baseOrderInfoServices = baseOrderInfoServices; + _baseSpaceInfoServices = baseSpaceInfoServices; + _baseBomInfoServices = baseBomInfoServices; + _realTaskInfoServices = realTaskInfoServices; + _executePlanInfoServices = executePlanInfoServices; + } + public async Task Execute(IJobExecutionContext context) + { + await ExecuteJob(context, async () => await Run(context)); + } + public async Task Run(IJobExecutionContext context) + { + var obj = PlcHelper.melsecList.FirstOrDefault(d => d.EquipName.Equals("泡前库")); + if (obj.IsConnect) + { + var val = obj.plc.ReadBool("M100"); + if (val) + { + //查询库存情况、获取发泡夹类型 + + var planInfo = await _executePlanInfoServices.FirstAsync(); + await PlanHandle(planInfo); + } + } + } + + + private async Task PlanHandle(ExecutePlanInfo planInfo) + { + string storeCode = Appsettings.app("StoreInfo", "BeforeStoreCode");//读取泡前库标识 + if (planInfo != null) + { + var boxBomInfo = await _baseBomInfoServices.GetChildenBomInfoByMaterialCode(planInfo.MaterialCode, storeCode); + OutStore(storeCode, boxBomInfo, planInfo.ExecutePlanCode); + } + } + + private async void OutStore(string storeCode, BaseBomInfo bomInfo, string planCode) + { + try + { + log.Info($"收到出库计划,物料码:{bomInfo.MaterialCode}"); + BaseSpaceInfo spaceInfo = await _baseSpaceInfoServices.OutStoreGetSpaceInfoByMaterialCode(storeCode, bomInfo.MaterialCode); + if (spaceInfo != null) + { + log.Info($"匹配货道:{spaceInfo.SpaceName}"); + // RefreshScanMateriaCodeEvent?.Invoke(materiaclCode, materialType, spaceInfo.spaceName, storeCode); //刷新界面扫码信息 + CreateOutStoreTask(spaceInfo, bomInfo, planCode); //创建出库任务 + } + else + { + //报警停线 + } + } + catch (Exception ex) + { + log.Info($"出库业务异常:{ex.Message}"); + } + } + + #region 创建出库任务 + /// + /// 创建出库任务 + /// + /// + private async void CreateOutStoreTask(BaseSpaceInfo spaceInfo, BaseBomInfo bomInfo, string planCode) + { + //生成出库任务依次下发至PLC + RealTaskInfo realTaskInfo = new RealTaskInfo(); + realTaskInfo.PlanCode = planCode; + realTaskInfo.TaskType = 2; + realTaskInfo.TaskCode = System.Guid.NewGuid().ToString("N").Substring(0, 6); + realTaskInfo.StoreCode = spaceInfo.StoreCode; + realTaskInfo.SpaceCode = spaceInfo.SpaceCode; + realTaskInfo.SpaceName = spaceInfo.SpaceName; + realTaskInfo.MaterialType = bomInfo.MaterialName; + realTaskInfo.MaterialCode = bomInfo.MaterialCode; + realTaskInfo.PlanAmount = 1; + realTaskInfo.TaskStatus = 1; + realTaskInfo.CreateTime = DateTime.Now; + int result = await _realTaskInfoServices.AddAsync(realTaskInfo); + if (result > 0) + { + log.Info("出库任务创建成功"); + + RefreshOutStoreTaskEvent?.Invoke(realTaskInfo); + } + else + { + log.Error("出库任务创建失败"); + } + } + + #endregion + } +} diff --git a/Admin.Core.Tasks/obj/Release/net6.0/Admin.Core.Tasks.GeneratedMSBuildEditorConfig.editorconfig b/Admin.Core.Tasks/obj/Release/net6.0/Admin.Core.Tasks.GeneratedMSBuildEditorConfig.editorconfig index d114eba8..caf0ddc6 100644 --- a/Admin.Core.Tasks/obj/Release/net6.0/Admin.Core.Tasks.GeneratedMSBuildEditorConfig.editorconfig +++ b/Admin.Core.Tasks/obj/Release/net6.0/Admin.Core.Tasks.GeneratedMSBuildEditorConfig.editorconfig @@ -8,4 +8,4 @@ build_property.PlatformNeutralAssembly = build_property.EnforceExtendedAnalyzerRules = build_property._SupportedPlatformList = Linux,macOS,Windows build_property.RootNamespace = Admin.Core.Tasks -build_property.ProjectDir = D:\Project\gitea\AUCMA\SCADA\Admin.Core.Tasks\ +build_property.ProjectDir = D:\gitea\AUCMA\AUCMA_SCADA\Admin.Core.Tasks\ diff --git a/Aucma.Core.BoxFoam/ViewModels/IndexPageViewModel.cs b/Aucma.Core.BoxFoam/ViewModels/IndexPageViewModel.cs index 1d78df61..9efadf52 100644 --- a/Aucma.Core.BoxFoam/ViewModels/IndexPageViewModel.cs +++ b/Aucma.Core.BoxFoam/ViewModels/IndexPageViewModel.cs @@ -25,10 +25,10 @@ namespace Aucma.Core.BoxFoam.ViewModels public IndexPageViewModel() { _recordInstoreServices = App.ServiceProvider.GetService(); - Job_PQInStoreTask_Quartz.RefreshDataGridDelegateEvent += LoadData;//刷新底部列表 + Job_BoxFoamInStoreTask_Quartz.RefreshDataGridDelegateEvent += LoadData;//刷新底部列表 Job_TestTask_Quartz.DataGridDelegateEvent += ExecMethod;//刷新日志 - Job_PQInStoreTask_Quartz.RefreshScanMateriaCodeEvent += RefreshScanInfo;//扫码信息刷新 - Job_PQInStoreTask_Quartz.LogDelegateEvent += PrintMessageToListBox;//入库日志事件 + Job_BoxFoamInStoreTask_Quartz.RefreshScanMateriaCodeEvent += RefreshScanInfo;//扫码信息刷新 + Job_BoxFoamInStoreTask_Quartz.LogDelegateEvent += PrintMessageToListBox;//入库日志事件 } public async Task ExecMethod() diff --git a/Aucma.Core.BoxFoam/Views/MainWindow.xaml b/Aucma.Core.BoxFoam/Views/MainWindow.xaml index 5cee3c4d..1f5d4686 100644 --- a/Aucma.Core.BoxFoam/Views/MainWindow.xaml +++ b/Aucma.Core.BoxFoam/Views/MainWindow.xaml @@ -64,7 +64,7 @@