From 539280caf3c8a8a0accac4a6dbe8bad95a66effc Mon Sep 17 00:00:00 2001 From: quowingwang Date: Sat, 31 Jan 2026 14:04:27 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E7=AB=99=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Into/PlcIntoStationService_Common.cs | 2 +- .../Into/PlcIntoStationService_OP020-2.cs | 124 ++++++++++++++++++ 2 files changed, 125 insertions(+), 1 deletion(-) diff --git a/RIZO.Service/PLCBackground/Stations/Into/PlcIntoStationService_Common.cs b/RIZO.Service/PLCBackground/Stations/Into/PlcIntoStationService_Common.cs index 3de90c7..4510737 100644 --- a/RIZO.Service/PLCBackground/Stations/Into/PlcIntoStationService_Common.cs +++ b/RIZO.Service/PLCBackground/Stations/Into/PlcIntoStationService_Common.cs @@ -131,7 +131,7 @@ namespace RIZO.Service.PLCBackground.Stations.Into /// 产品型号 /// 产品SN /// - protected async Task checkEntryPermission(string productModel, string productSN, string workstationCode, List processOperations) + protected override async Task checkEntryPermission(string productModel, string productSN, string workstationCode, List processOperations) { EntryPermissionResult result = EntryPermissionResult.UnkownException; diff --git a/RIZO.Service/PLCBackground/Stations/Into/PlcIntoStationService_OP020-2.cs b/RIZO.Service/PLCBackground/Stations/Into/PlcIntoStationService_OP020-2.cs index 8a17f25..4015b43 100644 --- a/RIZO.Service/PLCBackground/Stations/Into/PlcIntoStationService_OP020-2.cs +++ b/RIZO.Service/PLCBackground/Stations/Into/PlcIntoStationService_OP020-2.cs @@ -31,6 +31,130 @@ namespace RIZO.Service.PLCBackground.Stations.Into { WorkstationCode = "OP020_2"; } + + /// + /// 校验是否可以进站 + /// + /// 产品型号 + /// 产品SN + /// + protected async Task checkEntryPermission(string productModel, string productSN, string workstationCode, List processOperations) + { + + EntryPermissionResult result = EntryPermissionResult.UnkownException; + + + //2上工位无记录 + + //ProcessOperation LastOperation = processOperations.Where(operation => operation.OperationSeq < processOperations.Where(it => it.OperationCode == workstationCode).Select(it => it.OperationSeq).First()).OrderByDescending(operation => operation.OperationSeq).First(); + int LastOperationSeq = processOperations.Where(operation => operation.OperationCode == workstationCode).Select(operation => operation.LastOperationSeq ?? -1).First(); + ProcessOperation LastOperation = processOperations.Where(it => it.OperationSeq == LastOperationSeq).First(); + bool isExistLastOperationRecord = await DbScoped.SugarScope.CopyNew().Queryable() + .Where(it => it.ProductSN == productSN) + .Where(it => it.OperationCode == LastOperation.OperationCode) + .AnyAsync(); + if (!isExistLastOperationRecord) + { + return EntryPermissionResult.NoRecordAtPreviousStation; + } + + // 3 上工位NG 入站或者出站结果 NG + bool isExistLastOperationNG = await Context.Queryable() + .Where(it => it.ProductSN == productSN) + .Where(it => it.OperationCode == LastOperation.OperationCode) + .Where(it => it.PasstationType == 2 || it.PasstationType == 4) + .Where(it => it.ResultCode != 1) + .AnyAsync(); + if (!isExistLastOperationNG) + { + result = EntryPermissionResult.PreviousStationNG; + goto InsertPassrecord; + } + + + // 4 扫码产品型号错误 + bool isExistproductSN = await Context.Queryable() + .Where(it => it.ProductSN == productSN).AnyAsync(); + + + bool isExistproductSNProducting = await Context.Queryable() + .Where(it => it.ProductSN == productSN && (it.ProductCurrentStatus != 1 && it.ProductCurrentStatus != 3)).AnyAsync(); + if (!isExistproductSN || !isExistproductSNProducting) + { + result = EntryPermissionResult.ProductModelError; + goto InsertPassrecord; + } + //6时间超出规定无法生产 + + + //7固化时间未到规定时间 + + int LastOperationStandardTime = processOperations.Where(operation => operation.OperationCode == LastOperation.OperationCode) + .Select(operation => operation.StandardTime ?? 0).First(); + + + + if (LastOperationStandardTime > 0) + { + // 上一站的入站时间 和本站的请求时间差值 + DateTime LastInStationTime = await Context.Queryable() + .Where(it => it.ProductSN == productSN) + .Where(it => it.OperationCode == LastOperation.OperationCode) + .Where(it => it.PasstationType == 1) + .MaxAsync(it => it.InStationTime ?? DateTime.MinValue); + TimeSpan timeDiff = DateTime.Now - LastInStationTime; + double totalSeconds = timeDiff.TotalSeconds; + if (totalSeconds < LastOperationStandardTime) + { + result = EntryPermissionResult.CuringTimeNotReached; + goto InsertPassrecord; + } + + } + + //12 最大重复入站次数 + int MaxRepeatEntries = processOperations.Where(operation => operation.OperationCode == workstationCode).Select(operation => operation.MaxStationCount ?? 1).First(); + if (MaxRepeatEntries > 1) + { + int currentStationEntryCount = await Context.Queryable() + .Where(it => it.ProductSN == productSN) + .Where(it => it.OperationCode == workstationCode) + .Where(it => it.PasstationType == 1) + .CountAsync(); + if (currentStationEntryCount >= MaxRepeatEntries) + { + result = EntryPermissionResult.MaximumRepeatedEntries; + goto InsertPassrecord; + } + } + + //OK 准许进站 + result = EntryPermissionResult.AllowIntoStation; + goto InsertPassrecord; + InsertPassrecord: + //插入入站请求Resp过站记录 + ProductPassStationRecord RespintoStation = new ProductPassStationRecord + { + ProductSN = productSN, + WorkstationCode = WorkstationCode, + Routingcode = processOperations?.First()?.FkRoutingCode ?? "", + OperationCode = WorkstationCode, + OperationName = plcSetting.WorkStationName, + ProductionLifeStage = 1, // 1表示生产中 + PasstationType = 1, // 入站完毕 + PasstationDescription = "入站完毕Resp", + EffectTime = DateTime.Now, + InStationTime = DateTime.Now, + ResultCode = (int)result, + ResultDescription = result.ToString(), + CreatedTime = DateTime.Now, + + }; + await Context.Insertable(RespintoStation).ExecuteCommandAsync(); + + return result; + } + } }