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;
+ }
+
}
}