| | |
| | | } |
| | | else |
| | | { |
| | | info.QualityState = (int)QualityState.OK;//此处需要注意,判断所有工序质量,然后再赋值 |
| | | info.QualityState = (int)QualityState.OK;//此处需要注意,判断所有工序质量,然后再赋值 //默认合格,OP05默认是合格 |
| | | info.Remarks = "OP05新增工件信息"; |
| | | } |
| | | info.WorkPieceinitOnlineTime = DateTimeHelper.GetDateTime(); |
| | |
| | | info.WorkingProcedureCurrent = loginfo.WorkingProcedure; |
| | | info.Remarks = info.Remarks ?? "" + $"{info.WorkingProcedureCurrent}工件上线"; |
| | | |
| | | //修复下 op35 同一个件 下线时间跟下一个上线时间一模一样的问题 【Editby shaocx,2024-08-27】 |
| | | var isNeedAddNewProcess = true; |
| | | var pro = db.WorkPieceProcess.Where(o => o.WorkPieceID == loginfo.WorkPieceID && !o.OperationType.Equals("SPC") && (o.EndTime == null || o.EndTime <= DateTime.MinValue)).OrderByDescending(o => o.StartTime).FirstOrDefault(); |
| | | if (pro != null && pro.WorkPieceID.Length > 1) |
| | | { |
| | | pro.EndTime = DateTimeHelper.GetDateTime(); |
| | | pro.UpdatedUserName = loginfo.MonitoringPoint; |
| | | pro.UpdatedTime = DateTimeHelper.GetDateTime(); |
| | | pro.Remarks = (pro.Remarks ?? "") + "又一次上线,更新结束时间"; |
| | | if (pro.WorkingProcedureCurrent == loginfo.WorkingProcedure) |
| | | {//表示工序相同 |
| | | isNeedAddNewProcess = false; |
| | | pro.Remarks = (pro.Remarks ?? "") + "又一次上线,更新结束时间"; |
| | | } |
| | | else |
| | | { |
| | | pro.EndTime = DateTimeHelper.GetDateTime(); |
| | | pro.UpdatedUserName = loginfo.MonitoringPoint; |
| | | pro.UpdatedTime = DateTimeHelper.GetDateTime(); |
| | | pro.Remarks = (pro.Remarks ?? "") + "又一次上线,更新结束时间"; |
| | | } |
| | | } |
| | | //每次扫描上线都插入追溯表 |
| | | WorkPieceProcess process = new WorkPieceProcess(); |
| | | process = EntityPropHelper.Mapper<WorkPieceProcess, WorkPieceInfo>(info); |
| | | process.StartTime = DateTimeHelper.GetDateTime(); |
| | | |
| | | process.QualityState = info.QualityState.HasValue ? info.QualityState.Value : (int)QualityState.OK; |
| | | |
| | | if (process.WorkingProcedureCurrent == WorkingProcedureForHMI.OP70.ToString()) |
| | | { //特殊处理OP70,因为OP70没有测量,默认合格 [Editby shaocx,2024-07-03] |
| | | process.QualityState = (int)QualityState.OK; |
| | | } |
| | | |
| | | process.Id = Yitter.IdGenerator.YitIdHelper.NextId(); |
| | | process.CreatedUserName = loginfo.MonitoringPoint; |
| | | process.CreatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local); |
| | | process.UpdatedUserName = loginfo.MonitoringPoint; |
| | | process.UpdatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local); |
| | | process.OperationType = OperationType.生产.ToString(); |
| | | process.Remarks = ""; |
| | | if (loginfo.WorkingProcedure.Equals("OP05")) |
| | | if (isNeedAddNewProcess) |
| | | { |
| | | process.EndTime = process.StartTime; |
| | | //每次扫描上线都插入追溯表 |
| | | WorkPieceProcess new_process = new WorkPieceProcess(); |
| | | new_process = EntityPropHelper.Mapper<WorkPieceProcess, WorkPieceInfo>(info); |
| | | QualityStateHelper.ResetQualityNoOkForNewProcess(ref new_process); |
| | | new_process.StartTime = DateTimeHelper.GetDateTime(); |
| | | |
| | | //不再默认赋值为合格 【Editby shaocx,2024-08-16】 |
| | | //process.QualityState = info.QualityState.HasValue ? info.QualityState.Value : (int)QualityState.OK;//默认合格,已处理 |
| | | new_process.QualityState = GetQualityStateValue(info.QualityState); |
| | | |
| | | if (new_process.WorkingProcedureCurrent == WorkingProcedureForHMI.OP70.ToString()) |
| | | { //特殊处理OP70,因为OP70没有测量,默认合格 [Editby shaocx,2024-07-03] |
| | | new_process.QualityState = (int)QualityState.OK;//默认合格,OP70默认是合格 |
| | | } |
| | | |
| | | new_process.Id = Yitter.IdGenerator.YitIdHelper.NextId(); |
| | | new_process.CreatedUserName = loginfo.MonitoringPoint; |
| | | new_process.CreatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local); |
| | | new_process.UpdatedUserName = loginfo.MonitoringPoint; |
| | | new_process.UpdatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local); |
| | | new_process.OperationType = OperationType.生产.ToString(); |
| | | new_process.Remarks = ""; |
| | | if (loginfo.WorkingProcedure.Equals("OP05")) |
| | | { |
| | | new_process.EndTime = new_process.StartTime; |
| | | } |
| | | db.WorkPieceProcess.Add(new_process); |
| | | } |
| | | db.WorkPieceProcess.Add(process); |
| | | |
| | | //db.Database.AutoTransactionsEnabled = false;// 同一个SaveChanges默认事务, 关闭默认事务:... 好像不能用啊,后面再研究吧 |
| | | if (isAddWorkPieceInfo) |
| | |
| | | /// <param name="type"></param> |
| | | public static void QualityInfoComplete(WorkPieceLogMiddle logMiddle, LogType type) |
| | | { |
| | | //根据质量数据判断是否合格/不合格 【Editby shaocx,2024-06-25】 |
| | | WorkPieceInfoManager.SetLogMiddleForQuality(ref logMiddle); |
| | | |
| | | //此处同时插入了WorkPieceLog,WorkPieceInfoLog表,并新增或修改WorkPieceInfo表 |
| | | //插入质量相关表QualityDataInfo |
| | | |
| | |
| | | } |
| | | else |
| | | { |
| | | pieceInfo.QualityState = (int)QualityState.OK;//此处需要注意,判断所有工序质量,然后再赋值 |
| | | pieceInfo.QualityState = (int)QualityState.OK;//此处需要注意,判断所有工序质量,然后再赋值 //默认合格,OP05默认是合格 |
| | | pieceInfo.Remarks = "OP05新增工件信息"; |
| | | } |
| | | pieceInfo.WorkPieceinitOnlineTime = DateTimeHelper.GetDateTime(); |
| | |
| | | |
| | | WorkPieceProcess process = new WorkPieceProcess(); |
| | | process = EntityPropHelper.Mapper<WorkPieceProcess, WorkPieceInfo>(pieceInfo); |
| | | QualityStateHelper.ResetQualityNoOkForNewProcess(ref process); |
| | | process.StartTime = DateTimeHelper.GetDateTime(); |
| | | process.QualityState = pieceInfo.QualityState.HasValue ? pieceInfo.QualityState.Value : (int)QualityState.OK; |
| | | |
| | | //不再默认赋值为合格 【Editby shaocx,2024-08-16】 |
| | | //process.QualityState = pieceInfo.QualityState.HasValue ? pieceInfo.QualityState.Value : (int)QualityState.OK;//默认合格,已处理 |
| | | process.QualityState = WorkPieceInfoManager.GetQualityStateValue(pieceInfo.QualityState); |
| | | |
| | | |
| | | //记录质量不合格原因 【Editby shaocx,2024-06-26】 |
| | | //赋值不合格原因 |
| | | SetQualityNoOk_WorkPieceProcess(logMiddle, ref process); |
| | |
| | | pro.QualityDataInfoID = qualityData.Id; |
| | | pro.UpdatedUserName = ResetUpdatedUserName(logMiddle); |
| | | pro.UpdatedTime = DateTimeHelper.GetDateTime(); |
| | | pro.QualityState = pieceInfo.QualityState.HasValue ? pieceInfo.QualityState.Value : 9; |
| | | |
| | | //不再默认赋值为合格 【Editby shaocx,2024-08-16】 |
| | | //pro.QualityState = pieceInfo.QualityState.HasValue ? pieceInfo.QualityState.Value : 9; |
| | | pro.QualityState = WorkPieceInfoManager.GetQualityStateValue(pieceInfo.QualityState); |
| | | |
| | | //赋值不合格原因 |
| | | SetQualityNoOk_WorkPieceProcess(logMiddle, ref pro); |
| | | |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 质量检测完成-OP70专用 |
| | | /// </summary> |
| | | /// <param name="logMiddle"></param> |
| | | /// <param name="type"></param> |
| | | public static void QualityInfoCompleteForOP70(WorkPieceLogMiddle logMiddle, LogType type) |
| | | { |
| | | if (string.IsNullOrEmpty(logMiddle.QualityOP70To1) && string.IsNullOrEmpty(logMiddle.QualityOP70To2) && string.IsNullOrEmpty(logMiddle.QualityOP70To3)) |
| | | { |
| | | Log4NetHelper.WriteErrorLog(type, $" {logMiddle.WorkingProcedure}工序监控清洗机数据 读取工件码数据[{logMiddle.WorkPieceID ?? "空"}]获取的三个值都是空的,不处理返回"); |
| | | return; |
| | | } |
| | | using (DbModel db = new DbModel()) |
| | | { |
| | | try |
| | | { |
| | | bool isAdd = false; |
| | | if (logMiddle.WorkPieceID.Length == 22) |
| | | { |
| | | var qualityData = db.QualityDataInfo.Where(o => o.WorkPieceID == logMiddle.WorkPieceID).FirstOrDefault(); |
| | | if (qualityData == null || qualityData.WorkPieceID.Length < 1 || qualityData.WorkingProcedure.Length < 1) |
| | | {//插入QualityDataInfo表 |
| | | isAdd = true; |
| | | qualityData = EntityPropHelper.Mapper<QualityDataInfo, WorkPieceLog>(logMiddle); |
| | | } |
| | | |
| | | qualityData.QualityStateUpdateUser = "OP7009"; |
| | | qualityData.QualityReceiveTime = DateTime.Now; |
| | | |
| | | //特殊处理OP70的质量数据 |
| | | if (string.IsNullOrEmpty(qualityData.QualityOP70To1) && !string.IsNullOrEmpty(SystemHelper.GetStrForQualityOP70(logMiddle.QualityOP70To1))) |
| | | { |
| | | qualityData.QualityOP70To1 = logMiddle.QualityOP70To1; |
| | | } |
| | | if (string.IsNullOrEmpty(qualityData.QualityOP70To2) && !string.IsNullOrEmpty(SystemHelper.GetStrForQualityOP70(logMiddle.QualityOP70To2))) |
| | | { |
| | | qualityData.QualityOP70To2 = logMiddle.QualityOP70To2; |
| | | } |
| | | if (string.IsNullOrEmpty(qualityData.QualityOP70To3) && !string.IsNullOrEmpty(SystemHelper.GetStrForQualityOP70(logMiddle.QualityOP70To3))) |
| | | { |
| | | qualityData.QualityOP70To3 = logMiddle.QualityOP70To3; |
| | | } |
| | | |
| | | |
| | | db.QualityDataInfoLog.Add(GetAddQualityDataInfoLog(qualityData));//插入日志 |
| | | |
| | | if (isAdd) |
| | | { |
| | | db.QualityDataInfo.Add(GetAddQualityDataInfo(qualityData)); |
| | | } |
| | | db.SaveChanges();//保存数据 |
| | | } |
| | | else |
| | | { |
| | | Log4NetHelper.WriteErrorLog(type, $" {logMiddle.WorkingProcedure}工序监控清洗机数据 读取工件码数据[{logMiddle.WorkPieceID ?? "空"}]时异常:"); |
| | | |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Log4NetHelper.WriteErrorLog(type, $" {logMiddle.WorkingProcedure}工序监控清洗机数据 读取工件码数据[{logMiddle.WorkPieceID ?? "空"}]时异常:", ex); |
| | | } |
| | | finally |
| | | { |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 赋值 修改人 【Editby shaocx,2024-07-05】 |
| | | /// </summary> |
| | | /// <param name="logMiddle"></param> |
| | |
| | | { |
| | | if (loginfo.WorkPieceID != null && loginfo.WorkPieceID.Trim('\0').Length == 22) |
| | | { |
| | | WorkPieceInfo info = new WorkPieceInfo(); |
| | | info = db.WorkPieceInfo.Where(o => o.WorkPieceID == loginfo.WorkPieceID).FirstOrDefault(); |
| | | if (info == null || info.WorkPieceID.Length < 1) |
| | | WorkPieceInfo cur_db_info = new WorkPieceInfo(); |
| | | cur_db_info = db.WorkPieceInfo.Where(o => o.WorkPieceID == loginfo.WorkPieceID).FirstOrDefault(); |
| | | if (cur_db_info == null || cur_db_info.WorkPieceID.Length < 1) |
| | | {//没有工件信息,不做更新 |
| | | Log4NetHelper.WriteErrorLog(type, $"工件{loginfo.WorkPieceID} 工件推出工序{loginfo.WorkingProcedure} 没有获取到工件信息不做更新"); |
| | | return; |
| | |
| | | {//更新表WorkPieceInfo |
| | | if (loginfo.WorkingProcedure.Equals("OP10")) |
| | | { |
| | | /* |
| | | info.WorkPieceCurrentPosition = info.WorkingProcedureCurrent + "NOOK"; |
| | | //var WorkingProcedure = (loginfo.MonitoringPoint.Equals("OP1002") ? "OP10" : "OP40"); |
| | | loginfo2.WorkingProcedure = info.WorkingProcedureCurrent;//解决OP10,OP40同一个的问题 |
| | | loginfo.WorkingProcedure = info.WorkingProcedureCurrent; //解决OP10,OP40同一个的问题 |
| | | //*/ |
| | | //修复 错误记录成OP05的问题 【Editby shaocx,2024-08-26】 |
| | | var set_WorkingProcedureCurrent = ""; |
| | | if (cur_db_info.WorkingProcedureCurrent != "OP10" && cur_db_info.WorkingProcedureCurrent != "OP40") |
| | | { |
| | | SetWorkingProcedureCurrentForOP10(cur_db_info, ref set_WorkingProcedureCurrent); |
| | | } |
| | | else |
| | | { |
| | | set_WorkingProcedureCurrent = cur_db_info.WorkingProcedureCurrent; |
| | | } |
| | | cur_db_info.WorkingProcedureCurrent = set_WorkingProcedureCurrent; |
| | | cur_db_info.WorkPieceCurrentPosition = set_WorkingProcedureCurrent + "NOOK"; |
| | | loginfo2.WorkingProcedure = set_WorkingProcedureCurrent;//解决OP10,OP40同一个的问题 |
| | | loginfo.WorkingProcedure = set_WorkingProcedureCurrent; //解决OP10,OP40同一个的问题 |
| | | } |
| | | else |
| | | { |
| | | info.WorkingProcedureCurrent = loginfo.WorkingProcedure; |
| | | info.WorkPieceCurrentPosition = loginfo.WorkingProcedure + "NOOK"; |
| | | cur_db_info.WorkingProcedureCurrent = loginfo.WorkingProcedure; |
| | | cur_db_info.WorkPieceCurrentPosition = loginfo.WorkingProcedure + "NOOK"; |
| | | } |
| | | info.WorkPieceState = (int)WorkPieceState.NOOKPush; |
| | | info.UpdatedUserName = loginfo.MonitoringPoint; |
| | | info.UpdatedTime = DateTime.Now; |
| | | info.Remarks = "工件NOOK推出"; |
| | | if (!(info.WorkingProcedureStartTime.HasValue && info.WorkingProcedureStartTime > DateTime.Parse("1900/01/01"))) |
| | | cur_db_info.WorkPieceState = (int)WorkPieceState.NOOKPush; |
| | | cur_db_info.UpdatedUserName = loginfo.MonitoringPoint; |
| | | cur_db_info.UpdatedTime = DateTime.Now; |
| | | cur_db_info.Remarks = "工件NOOK推出"; |
| | | if (!(cur_db_info.WorkingProcedureStartTime.HasValue && cur_db_info.WorkingProcedureStartTime > DateTime.Parse("1900/01/01"))) |
| | | { |
| | | info.WorkingProcedureStartTime = DateTimeHelper.GetDateTime(); |
| | | cur_db_info.WorkingProcedureStartTime = DateTimeHelper.GetDateTime(); |
| | | } |
| | | info.WorkingProcedureEndTime = DateTimeHelper.GetDateTime(); |
| | | info.WorkingProcedureCompleted = info.WorkingProcedureCompleted + loginfo.WorkingProcedure;//已完成工序 |
| | | info.WorkPieceCurrentPositionOrder = info.WorkingProcedurePlan.IndexOf(loginfo.WorkingProcedure) / 2; |
| | | cur_db_info.WorkingProcedureEndTime = DateTimeHelper.GetDateTime(); |
| | | cur_db_info.WorkingProcedureCompleted = cur_db_info.WorkingProcedureCompleted + loginfo.WorkingProcedure;//已完成工序 |
| | | cur_db_info.WorkPieceCurrentPositionOrder = cur_db_info.WorkingProcedurePlan.IndexOf(loginfo.WorkingProcedure) / 2; |
| | | } |
| | | QualityDataInfo qualityData = null; |
| | | qualityData = db.QualityDataInfo.Where(o => o.WorkPieceID == loginfo.WorkPieceID).FirstOrDefault(); |
| | | if (loginfo.WorkingProcedure.Equals("OP35")) |
| | | {//为了解决OP35的采集到的质量信息是OK还NOOK的情况,OP35 NOOK时更新质量信息 |
| | | loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"OP35NOOK原质量信息{(info.QualityState.HasValue ? info.QualityState.Value.ToString() : "空")}"; |
| | | info.QualityState = (int)QualityState.NG; |
| | | if (!info.QualityState.Equals(((int)QualityState.OK).ToString())) |
| | | loginfo2.Remarks = (loginfo2.Remarks ?? "") + $"OP35NOOK原质量信息{(cur_db_info.QualityState.HasValue ? cur_db_info.QualityState.Value.ToString() : "空")}"; |
| | | cur_db_info.QualityState = (int)QualityState.NG; |
| | | if (!cur_db_info.QualityState.Equals(((int)QualityState.OK).ToString())) |
| | | { |
| | | info.QualityErrorInfo = $"{loginfo.WorkingProcedure}工序质量NOOK采集数据不合格{info.QualityState}"; |
| | | cur_db_info.QualityErrorInfo = $"{loginfo.WorkingProcedure}工序质量NOOK采集数据不合格{cur_db_info.QualityState}"; |
| | | } |
| | | else |
| | | { |
| | | info.QualityErrorInfo = ""; |
| | | cur_db_info.QualityErrorInfo = ""; |
| | | } |
| | | loginfo.QualityState = info.QualityState; |
| | | loginfo.QualityState = cur_db_info.QualityState; |
| | | |
| | | var qualityData = db.QualityDataInfo.Where(o => o.WorkPieceID == loginfo.WorkPieceID).FirstOrDefault(); |
| | | |
| | | if (qualityData != null) |
| | | { |
| | | qualityData.OP35QualityState = loginfo.QualityState.HasValue ? loginfo.QualityState.Value.ToString() : "3"; |
| | |
| | | pro.UpdatedTime = DateTimeHelper.GetDateTime(); |
| | | } |
| | | |
| | | db.WorkPieceInfoLog.Add(GetAddWorkPieceInfoLog(info)); |
| | | QualityStateHelper.SetQualityStateForNoOk(ref cur_db_info, ref pro, ref qualityData); |
| | | |
| | | db.WorkPieceInfoLog.Add(GetAddWorkPieceInfoLog(cur_db_info)); |
| | | |
| | | } |
| | | else |
| | |
| | | //|| !((loginfo.WorkingProcedure.Equals("OP10") || loginfo.WorkingProcedure.Equals("OP40")) && loginfo.Remarks.Length > 0) |
| | | ) |
| | | { |
| | | WorkPieceInfo info = new WorkPieceInfo(); |
| | | info = db.WorkPieceInfo.Where(o => o.WorkPieceID == loginfo.WorkPieceID).FirstOrDefault(); |
| | | if (info == null || info.WorkPieceID.Length < 1) |
| | | WorkPieceInfo cur_db_info = new WorkPieceInfo(); |
| | | cur_db_info = db.WorkPieceInfo.Where(o => o.WorkPieceID == loginfo.WorkPieceID).FirstOrDefault(); |
| | | if (cur_db_info == null || cur_db_info.WorkPieceID.Length < 1) |
| | | {//没有工件信息,不做更新 |
| | | loginfo2.Remarks = $"工件{loginfo.WorkPieceID} 工件SPC推出工序{loginfo.WorkingProcedure} 没有获取到工件信息不做更新"; |
| | | Log4NetHelper.WriteErrorLog(type, $"工件{loginfo.WorkPieceID} 工件SPC推出工序{loginfo.WorkingProcedure} 没有获取到工件信息不做更新"); |
| | |
| | | {//更新表WorkPieceInfo |
| | | if (loginfo.WorkingProcedure.Equals("OP10")) |
| | | { |
| | | info.WorkPieceCurrentPosition = info.WorkingProcedureCurrent + "SPC"; |
| | | //var WorkingProcedure = (loginfo.MonitoringPoint.Equals("OP1002") ? "OP10" : "OP40"); |
| | | loginfo2.WorkingProcedure = info.WorkingProcedureCurrent;//解决OP10,OP40同一个的问题 |
| | | loginfo.WorkingProcedure = info.WorkingProcedureCurrent; //解决OP10,OP40同一个的问题 |
| | | //修复 错误记录成OP05的问题 【Editby shaocx,2024-08-26】 |
| | | var set_WorkingProcedureCurrent = ""; |
| | | if (cur_db_info.WorkingProcedureCurrent != "OP10" && cur_db_info.WorkingProcedureCurrent != "OP40") |
| | | { |
| | | SetWorkingProcedureCurrentForOP10(cur_db_info, ref set_WorkingProcedureCurrent); |
| | | } |
| | | else |
| | | { |
| | | set_WorkingProcedureCurrent = cur_db_info.WorkingProcedureCurrent; |
| | | } |
| | | cur_db_info.WorkingProcedureCurrent = set_WorkingProcedureCurrent; |
| | | cur_db_info.WorkPieceCurrentPosition = set_WorkingProcedureCurrent + "SPC"; |
| | | loginfo2.WorkingProcedure = set_WorkingProcedureCurrent;//解决OP10,OP40同一个的问题 |
| | | loginfo.WorkingProcedure = set_WorkingProcedureCurrent; //解决OP10,OP40同一个的问题 |
| | | } |
| | | else |
| | | { |
| | | info.WorkingProcedureCurrent = loginfo.WorkingProcedure; |
| | | info.WorkPieceCurrentPosition = loginfo.WorkingProcedure + "SPC"; |
| | | cur_db_info.WorkingProcedureCurrent = loginfo.WorkingProcedure; |
| | | cur_db_info.WorkPieceCurrentPosition = loginfo.WorkingProcedure + "SPC"; |
| | | } |
| | | info.WorkPieceState = (int)WorkPieceState.SPCPush; |
| | | info.UpdatedUserName = loginfo.MonitoringPoint; |
| | | info.UpdatedTime = DateTime.Now; |
| | | info.WorkingProcedureEndTime = DateTimeHelper.GetDateTime(); |
| | | if (!(info.WorkingProcedureStartTime.HasValue && info.WorkingProcedureStartTime > DateTime.Parse("1900/01/01"))) |
| | | cur_db_info.WorkPieceState = (int)WorkPieceState.SPCPush; |
| | | cur_db_info.UpdatedUserName = loginfo.MonitoringPoint; |
| | | cur_db_info.UpdatedTime = DateTime.Now; |
| | | cur_db_info.WorkingProcedureEndTime = DateTimeHelper.GetDateTime(); |
| | | if (!(cur_db_info.WorkingProcedureStartTime.HasValue && cur_db_info.WorkingProcedureStartTime > DateTime.Parse("1900/01/01"))) |
| | | { |
| | | info.WorkingProcedureStartTime = DateTimeHelper.GetDateTime(); |
| | | cur_db_info.WorkingProcedureStartTime = DateTimeHelper.GetDateTime(); |
| | | } |
| | | |
| | | |
| | | info.WorkingProcedureCompleted = info.WorkingProcedureCompleted + loginfo.WorkingProcedure;//已完成工序 |
| | | info.WorkPieceCurrentPositionOrder = info.WorkingProcedurePlan.IndexOf(loginfo.WorkingProcedure) / 2; |
| | | cur_db_info.WorkingProcedureCompleted = cur_db_info.WorkingProcedureCompleted + loginfo.WorkingProcedure;//已完成工序 |
| | | cur_db_info.WorkPieceCurrentPositionOrder = cur_db_info.WorkingProcedurePlan.IndexOf(loginfo.WorkingProcedure) / 2; |
| | | } |
| | | info.Remarks = "工件SPC抽检推出"; |
| | | cur_db_info.Remarks = "工件SPC抽检推出"; |
| | | |
| | | //更新上一工序的结束时间 |
| | | var pro = db.WorkPieceProcess.Where(o => o.WorkPieceID == loginfo.WorkPieceID && o.WorkingProcedureCurrent == loginfo.WorkingProcedure && o.OperationType == OperationType.生产.ToString()).OrderByDescending(o => o.StartTime).FirstOrDefault(); |
| | | var pro = db.WorkPieceProcess.Where(o => o.WorkPieceID == loginfo.WorkPieceID && o.WorkingProcedureCurrent == loginfo.WorkingProcedure |
| | | && o.OperationType == OperationType.生产.ToString()).OrderByDescending(o => o.StartTime).FirstOrDefault(); |
| | | if (pro != null && pro.WorkPieceID.Length > 0) |
| | | { |
| | | pro.EndTime = DateTimeHelper.GetDateTime(); |
| | |
| | | } |
| | | //每次SPC 都插入追溯表 |
| | | WorkPieceProcess process = new WorkPieceProcess(); |
| | | process = EntityPropHelper.Mapper<WorkPieceProcess, WorkPieceInfo>(info); |
| | | process = EntityPropHelper.Mapper<WorkPieceProcess, WorkPieceInfo>(cur_db_info); |
| | | QualityStateHelper.ResetQualityNoOkForNewProcess(ref process); |
| | | process.StartTime = DateTimeHelper.GetDateTime(); |
| | | process.OperationType = OperationType.SPC.ToString(); |
| | | process.QualityState = (int)QualityState.Suspected; |
| | |
| | | db.WorkPieceProcess.Add(process); |
| | | |
| | | |
| | | db.WorkPieceInfoLog.Add(GetAddWorkPieceInfoLog(info)); |
| | | db.WorkPieceInfoLog.Add(GetAddWorkPieceInfoLog(cur_db_info)); |
| | | } |
| | | else |
| | | { |
| | |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | public static void SetWorkingProcedureCurrentForOP10(WorkPieceInfo cur_db_info, ref string set_WorkingProcedureCurrent) |
| | | { |
| | | //截断字符串 |
| | | if (cur_db_info.WorkingProcedureCurrent.Length == 4) |
| | | { |
| | | try |
| | | { |
| | | var bb = cur_db_info.WorkingProcedureCurrent.Substring(2, 2); |
| | | int ii = Convert.ToInt32(bb); |
| | | if (ii <= 10) |
| | | { |
| | | set_WorkingProcedureCurrent = "OP10"; |
| | | } |
| | | else |
| | | { |
| | | set_WorkingProcedureCurrent = "OP40"; |
| | | } |
| | | } |
| | | catch (Exception) |
| | | { |
| | | set_WorkingProcedureCurrent = cur_db_info.WorkingProcedureCurrent; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | set_WorkingProcedureCurrent = cur_db_info.WorkingProcedureCurrent; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 工序完成 |
| | | /// </summary> |
| | |
| | | } |
| | | else |
| | | { |
| | | info.QualityState = (int)QualityState.OK;//此处需要注意,判断所有工序质量,然后再赋值 |
| | | info.QualityState = (int)QualityState.OK;//此处需要注意,判断所有工序质量,然后再赋值 //默认合格,OP05默认是合格 |
| | | info.Remarks = "OP05新增工件信息"; |
| | | } |
| | | info.WorkPieceinitOnlineTime = DateTimeHelper.GetDateTime();//WorkPieceInitOnlineTime |
| | |
| | | info.QualityStateUpdateTime = loginfo.UpdatedTime.Value.LocalDateTime; |
| | | info.QualityStateUpdateMode = QualityStateUpdateMode.Auto.ToString(); |
| | | //*/ |
| | | |
| | | |
| | | var qualityData = db.QualityDataInfo.Where(o => o.WorkPieceID == logMiddle.WorkPieceID).FirstOrDefault(); |
| | | if (qualityData == null || qualityData.WorkPieceID.Length < 1 || qualityData.WorkingProcedure.Length < 1) |
| | |
| | | } |
| | | else |
| | | { |
| | | info.WorkPieceState = (int)WorkPieceState.WIP; |
| | | //这里修复OP10、OP40 因为PLC先推 SPC推出、再推 产品下线问题,导致 产品下线更新数据时,把SPC数据覆盖的问题 【Editby shaocx,2024-08-27】 |
| | | var isAlow = SystemBussinessHelper.IsAllowUpdateWorkPieceStateToWip(info, db, logMiddle); |
| | | if (isAlow) |
| | | { |
| | | info.WorkPieceState = (int)WorkPieceState.WIP; |
| | | } |
| | | |
| | | |
| | | if (info.WorkingProcedurePlan.IndexOf(logMiddle.WorkingProcedure) + 4 <= info.WorkingProcedurePlan.Length) |
| | | { |
| | | info.WorkPieceCurrentPosition = info.WorkingProcedurePlan.Substring(info.WorkingProcedurePlan.IndexOf(logMiddle.WorkingProcedure), 8); |
| | |
| | | { |
| | | WorkPieceProcess process = new WorkPieceProcess(); |
| | | process = EntityPropHelper.Mapper<WorkPieceProcess, WorkPieceInfo>(info); |
| | | QualityStateHelper.ResetQualityNoOkForNewProcess(ref process); |
| | | process.Id = Yitter.IdGenerator.YitIdHelper.NextId(); |
| | | process.StartTime = DateTimeHelper.GetDateTime(); |
| | | process.EndTime = DateTimeHelper.GetDateTime(); |
| | | if (logMiddle.WorkingProcedure.Equals("OP80")) |
| | | {//OP80的质量数据是后来获取文件搞的 |
| | | //质检数据,再考虑 另外两种状态 【Editby shaocx,2024-08-27】 |
| | | QualityStateHelper.SetQualityStateForOP80(logMiddle, ref info, ref process); |
| | | } |
| | | else |
| | | { |
| | | process.QualityState = logMiddle.QualityState.HasValue ? logMiddle.QualityState.Value : (int)QualityState.OK; |
| | | //不再默认赋值为合格 【Editby shaocx,2024-08-16】 |
| | | //process.QualityState = logMiddle.QualityState.HasValue ? logMiddle.QualityState.Value : (int)QualityState.OK;//默认合格,已处理 |
| | | process.QualityState = WorkPieceInfoManager.GetQualityStateValue(logMiddle.QualityState); |
| | | } |
| | | process.CreatedUserName = logMiddle.MonitoringPoint; |
| | | process.CreatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local); |
| | |
| | | |
| | | public static void SetQualityNoOk_WorkPieceInfo(WorkPieceLogMiddle logMiddle, ref WorkPieceInfo pieceInfo) |
| | | { |
| | | if (!IsWirteQualityNoOk(logMiddle, pieceInfo.QualityNoOk)) return; |
| | | |
| | | pieceInfo.QualityNoOk = logMiddle.QualityNoOk; |
| | | pieceInfo.QualityNoOkReason = logMiddle.QualityNoOkReason; |
| | | } |
| | | public static void SetQualityNoOk_WorkPieceProcess(WorkPieceLogMiddle logMiddle, ref WorkPieceProcess pieceProcess) |
| | | { |
| | | if (!IsWirteQualityNoOk(logMiddle, pieceProcess.QualityNoOk)) return; |
| | | |
| | | pieceProcess.QualityNoOk = logMiddle.QualityNoOk; |
| | | pieceProcess.QualityNoOkReason = logMiddle.QualityNoOkReason; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 是否需要重写 NOOK原因 |
| | | /// </summary> |
| | | /// <param name="logMiddle"></param> |
| | | /// <param name="pieceInfo"></param> |
| | | /// <returns></returns> |
| | | public static bool IsWirteQualityNoOk(WorkPieceLogMiddle logMiddle, int? qualityNoOk) |
| | | { |
| | | if (logMiddle.WorkingProcedure == (WorkingProcedureForHMI.OP30).ToString()) |
| | | { |
| | | //特殊逻辑:按照OP30的顺序判断 |
| | | if (logMiddle.QualityNoOk != null && qualityNoOk != null |
| | | && ( |
| | | qualityNoOk == (int)QualityNoOkEnum.OP30压衬套工位力矩大 |
| | | || qualityNoOk == (int)QualityNoOkEnum.OP30涨断工位力矩大 |
| | | || qualityNoOk == (int)QualityNoOkEnum.OP30终拧紧工位力矩大 |
| | | || qualityNoOk == (int)QualityNoOkEnum.OP30预拧紧工位力矩大 |
| | | ) |
| | | ) |
| | | { |
| | | if ((int)logMiddle.QualityNoOk > (int)qualityNoOk) |
| | | {//不需要重新赋值 |
| | | return false; |
| | | } |
| | | } |
| | | } |
| | | |
| | | return true; |
| | | } |
| | | |
| | | |
| | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 获取质量状态值 |
| | | /// </summary> |
| | | /// <param name="qualityState"></param> |
| | | /// <returns></returns> |
| | | public static int GetQualityStateValue(int? qualityState) |
| | | { |
| | | if (qualityState.HasValue == false) |
| | | { |
| | | return (int)QualityState.Suspected; |
| | | } |
| | | if (qualityState.Value == 1) |
| | | { |
| | | return (int)QualityState.OK; |
| | | } |
| | | if (qualityState.Value == 2) |
| | | { |
| | | return (int)QualityState.NG; |
| | | } |
| | | return (int)QualityState.Suspected; |
| | | } |
| | | |
| | | |
| | | #endregion |
| | | } |
| | | } |