| | |
| | | using System; |
| | | using Volo.Abp.BackgroundJobs; |
| | | using Volo.Abp.Uow; |
| | | using CMS.Plugin.PipeLineLems.Application.Contracts.Services; |
| | | using CMS.Plugin.PipeLineLems.Domain.WorkPlan; |
| | | using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrder; |
| | | |
| | | namespace CMS.Plugin.PipeLineLems.ProjectService |
| | | { |
| | |
| | | private IServiceProvider _serviceProvider; |
| | | private readonly ILogger<PipeLineLemsProjectService> _logger; |
| | | private readonly IVariableDataCache _variableDataCache; |
| | | private readonly IWorkSectionManager _workSectionManager; |
| | | |
| | | /// <summary> |
| | | /// 变量服务 |
| | | /// </summary> |
| | |
| | | /// <param name="logger">The logger.</param> |
| | | /// <param name="variableDataCache">The variable data cache.</param> |
| | | public PipeLineLemsProjectService( |
| | | IWorkSectionManager workSectionManager, |
| | | VariableService variableService, |
| | | IServiceProvider serviceProvider, ILogger<PipeLineLemsProjectService> logger, IVariableDataCache variableDataCache) |
| | | { |
| | |
| | | _logger = logger; |
| | | _variableDataCache = variableDataCache; |
| | | _variableService = variableService; |
| | | _workSectionManager = workSectionManager; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | _monitorVariableNames = new Dictionary<string, string> |
| | | { |
| | | { "打码进站信号", "打码进站信号(描述)" }, |
| | | { "切割进站信号", "切割进站信号(描述)" }, |
| | | }; |
| | | |
| | | // 创建通道监听 |
| | |
| | | private async Task HanlderForPringBarCodeAsync() |
| | | { |
| | | |
| | | var workPlanAppService = _serviceProvider.GetRequiredService<IWorkPlanAppService>(); |
| | | var workPlanRepository = _serviceProvider.GetRequiredService<IWorkPlanRepository>(); |
| | | var callMaterialOrderAppService = _serviceProvider.GetRequiredService<ICallMaterialOrderAppService>(); |
| | | |
| | | using var scope = _serviceProvider.CreateScope(); |
| | | var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>(); |
| | | using var uow = unitOfWorkManager.Begin(requiresNew: true); |
| | | |
| | | var plcTaskNo = await _variableService.ReadValueAsync("打码进站PLC任务号"); |
| | | |
| | | if (string.IsNullOrEmpty(plcTaskNo?.Content?.Value.SafeString().ToString())) |
| | |
| | | else |
| | | { |
| | | var myTaskNo = plcTaskNo.Content.Value.SafeString().ToString(); |
| | | //TODO:暂时先写入 内部变量 |
| | | Dictionary<string, object?> keyValuePairs = new Dictionary<string, object?> |
| | | { |
| | | { "打码1", "11111111" }, |
| | | { "打码2", "22222222" }, |
| | | { "打码3", "33333333" } |
| | | }; |
| | | _variableService.WriteValueAsync(keyValuePairs); |
| | | CallMaterialOrder callMaterialOrder = null; |
| | | try |
| | | { |
| | | //根据wms任务号寻找 叫料工单 |
| | | callMaterialOrder = await callMaterialOrderAppService.FindByWmsTaskNoAsync(myTaskNo); |
| | | if (callMaterialOrder == null) return;//结束 |
| | | |
| | | //TODO:模拟采集参数 |
| | | keyValuePairs = new Dictionary<string, object?> |
| | | |
| | | |
| | | //根据原料标识寻找 作业计划 |
| | | var workPlanList = await workPlanAppService.FindByDataIdentifierAsync(callMaterialOrder.DataIdentifier); |
| | | if (workPlanList?.Count == 0) return;//结束 |
| | | |
| | | //更新为生产中 |
| | | foreach (var item in workPlanList) |
| | | { |
| | | item.WorkPlanStatus = Domain.Shared.Enums.WorkPlanStatusEnum.生产中; |
| | | } |
| | | await workPlanRepository.UpdateManyAsync(workPlanList); |
| | | |
| | | //得到码值 |
| | | var code1 = ""; |
| | | var code2 = ""; |
| | | var code3 = ""; |
| | | var new_workPlanList = workPlanList.Where(x => x.ProcessRouteNumber == "切割").ToList(); |
| | | for (int i = 0; i < new_workPlanList.Count; i++) |
| | | { |
| | | if (i == 0) |
| | | { |
| | | code1 = new_workPlanList[i].MarkingContent; |
| | | } |
| | | if (i == 1) |
| | | { |
| | | code2 = new_workPlanList[i].MarkingContent; |
| | | } |
| | | if (i == 2) |
| | | { |
| | | code3 = new_workPlanList[i].MarkingContent; |
| | | } |
| | | } |
| | | Dictionary<string, object?> keyValuePairs = new Dictionary<string, object?> |
| | | { |
| | | { "打码工件1",code1}, |
| | | { "打码工件2", code2}, |
| | | { "打码工件3", code3 }, |
| | | { "打码原料管型号", new_workPlanList.First().MaterialMode }, |
| | | { "打码原料标识", new_workPlanList.First().DataIdentifier } |
| | | }; |
| | | _variableService.WriteValueAsync(keyValuePairs); |
| | | |
| | | //TODO:模拟采集参数 |
| | | keyValuePairs = new Dictionary<string, object?> |
| | | { |
| | | { "打码速度", 100}, |
| | | { "打码质量", 2}, |
| | | }; |
| | | var ret2 = _variableService.WriteValueAsync(keyValuePairs); |
| | | var ret2 = _variableService.WriteValueAsync(keyValuePairs); |
| | | |
| | | //TODO:暂时生成产品ID |
| | | //var productID = Guid.NewGuid().ToString(); |
| | | var productID = DateTime.Now.ToString("yyyyMMddHHmmssfff"); |
| | | keyValuePairs = new Dictionary<string, object?> |
| | | //TODO:暂时生成产品ID |
| | | var productID = DateTime.Now.ToString("yyyyMMddHHmmssfff"); |
| | | //var productID = new_workPlanList.Last().PipeSpecCode; |
| | | keyValuePairs = new Dictionary<string, object?> |
| | | { |
| | | { "打码_ProductID", productID}, |
| | | }; |
| | | var ret = _variableService.WriteValueAsync(keyValuePairs); |
| | | var ret = _variableService.WriteValueAsync(keyValuePairs); |
| | | |
| | | |
| | | uow.CompleteAsync(); |
| | | } |
| | | catch (Exception) |
| | | { |
| | | uow.RollbackAsync(); |
| | | throw; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | //TODO:暂时先写入 内部变量 |
| | | Dictionary<string, object?> keyValuePairs = new Dictionary<string, object?> |
| | | { |
| | | { "切割1", "555555" }, |
| | | { "切割2", "66666" }, |
| | | { "切割3", "77777" } |
| | | { "切割位置1", "555555" }, |
| | | { "切割位置2", "66666" }, |
| | | { "切割位置3", "77777" } |
| | | }; |
| | | _variableService.WriteValueAsync(keyValuePairs); |
| | | |
| | |
| | | //TODO:暂时生成产品ID |
| | | //获取上一个工序的产品ID |
| | | //根据工序名获取工序对象 |
| | | var _workSectionManager = _serviceProvider.GetRequiredService<IWorkSectionManager>(); |
| | | var lastWorkSection = "打码工序"; |
| | | var workSection = await _workSectionManager.GetByNameAsync(lastWorkSection); |
| | | |