22
schangxiang@126.com
2025-05-11 62ea41137b3f2e1d0bd3a0dacd8383758874e280
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService.cs
@@ -16,6 +16,10 @@
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;
using System.Collections.Generic;
namespace CMS.Plugin.PipeLineLems.ProjectService
{
@@ -27,7 +31,7 @@
        private IServiceProvider _serviceProvider;
        private readonly ILogger<PipeLineLemsProjectService> _logger;
        private readonly IVariableDataCache _variableDataCache;
        private readonly IWorkSectionManager _workSectionManager;
        /// <summary>
        /// 变量服务
        /// </summary>
@@ -56,7 +60,6 @@
        /// <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)
        {
@@ -64,7 +67,6 @@
            _logger = logger;
            _variableDataCache = variableDataCache;
            _variableService = variableService;
            _workSectionManager = workSectionManager;
        }
        /// <summary>
@@ -82,6 +84,7 @@
            _monitorVariableNames = new Dictionary<string, string>
            {
                { "打码进站信号", "打码进站信号(描述)" },
                { "切割进站信号", "切割进站信号(描述)" },
            };
            // 创建通道监听
@@ -232,6 +235,14 @@
        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()))
@@ -240,32 +251,89 @@
            }
            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);
                //TODO:模拟采集参数
                keyValuePairs = new Dictionary<string, object?>
                var myTaskNo = plcTaskNo.Content.Value.SafeString().ToString();
                CallMaterialOrder callMaterialOrder = null;
                try
                {
                    //根据wms任务号寻找 叫料工单
                    callMaterialOrder = await callMaterialOrderAppService.FindByWmsTaskNoAsync(myTaskNo);
                    if (callMaterialOrder == null) return;//结束
                    //根据原料标识寻找 作业计划
                    var workPlanList = await workPlanAppService.FindByDataIdentifierAsync(callMaterialOrder.DataIdentifier);
                    if (workPlanList?.Count == 0) return;//结束
                    //TODO:暂时生成产品ID
                    //var productID = DateTime.Now.ToString("yyyyMMddHHmmssfff");
                    var productID = workPlanList.First().PipeSpecCode;
                    Dictionary<string, object?> keyValuePairs_productID = new Dictionary<string, object?>
                    {
                        { "打码_ProductID", productID},
                    };
                    var ret = _variableService.WriteValueAsync(keyValuePairs_productID);
                    //更新为生产中
                    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().PipeSpecCode },
                        { "打码管段名称", new_workPlanList.First().PipeSectionName },
                        { "打码原料管型号", 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?>
                    {
                        { "打码_ProductID", productID},
                    };
                var ret = _variableService.WriteValueAsync(keyValuePairs);
                    uow.CompleteAsync();
                }
                catch (Exception)
                {
                    uow.RollbackAsync();
                    throw;
                }
            }
        }
@@ -289,9 +357,9 @@
                //TODO:暂时先写入 内部变量
                Dictionary<string, object?> keyValuePairs = new Dictionary<string, object?>
                    {
                        { "切割1", "555555" },
                        { "切割2", "66666" },
                        { "切割3", "77777" }
                        { "切割位置1", "555555" },
                        { "切割位置2", "66666" },
                        { "切割位置3", "77777" }
                    };
                _variableService.WriteValueAsync(keyValuePairs);
@@ -306,6 +374,7 @@
                //TODO:暂时生成产品ID
                //获取上一个工序的产品ID
                //根据工序名获取工序对象
                var _workSectionManager = _serviceProvider.GetRequiredService<IWorkSectionManager>();
                var lastWorkSection = "打码工序";
                var workSection = await _workSectionManager.GetByNameAsync(lastWorkSection);