| | |
| | | info.Remarks = $"工件二维码第一次出现的工序{loginfo.WorkingProcedure}不是OP05,数据缺失,请确认情况并做相应处理!"; |
| | | } |
| | | else |
| | | { |
| | | {//OP05工序 |
| | | info.QualityState = (int)QualityStateEnum.OK;//此处需要注意,判断所有工序质量,然后再赋值 //默认合格,OP05默认是合格 |
| | | info.Remarks = "OP05新增工件信息"; |
| | | } |
| | |
| | | return; |
| | | } |
| | | } |
| | | info.WorkingProcedureStartTime = DateTimeHelper.GetDateTime();// |
| | | info.WorkingProcedureEndTime = null; |
| | | info.WorkPieceState = (int)WorkPieceState.WIP; |
| | | info.EquipmentID = loginfo.EquipmentID; |
| | | info.QualityStateUpdateUser = loginfo.UpdatedUserName; |
| | | info.QualityStateUpdateTime = loginfo.UpdatedTime.Value.LocalDateTime; |
| | | info.QualityStateUpdateMode = QualityStateUpdateMode.Auto.ToString(); |
| | | info.UpdatedUserName = loginfo.MonitoringPoint; |
| | | SystemBussinessHelper.SetWorkPieceInfoMiddleForUpdateDataCapturePointCname(ref info, loginfo.DataCapturePointCname); |
| | | info.UpdatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local); |
| | | info.WorkPieceCurrentPosition = loginfo.WorkingProcedure; |
| | | info.WorkPieceCurrentPositionOrder = info.WorkingProcedurePlan.IndexOf(loginfo.WorkingProcedure) / 2; |
| | | info.WorkingProcedureCurrent = loginfo.WorkingProcedure; |
| | | info.Remarks = $"{info.WorkingProcedureCurrent}工件上线"; |
| | | if ((info.WorkingProcedureCurrent.Equals("OP05") && isAddWorkPieceInfo == false)) |
| | | { |
| | | //如果是OP05的,并且是 不需要新增 表WorkPieceInfo,那么就不需要更新表 WorkPieceInfo |
| | | } |
| | | else |
| | | { |
| | | info.WorkingProcedureStartTime = DateTimeHelper.GetDateTime();// |
| | | info.WorkingProcedureEndTime = null; |
| | | info.WorkPieceState = (int)WorkPieceState.WIP; |
| | | info.EquipmentID = loginfo.EquipmentID; |
| | | info.QualityStateUpdateUser = loginfo.UpdatedUserName; |
| | | info.QualityStateUpdateTime = loginfo.UpdatedTime.Value.LocalDateTime; |
| | | info.QualityStateUpdateMode = QualityStateUpdateMode.Auto.ToString(); |
| | | info.UpdatedUserName = loginfo.MonitoringPoint; |
| | | SystemBussinessHelper.SetWorkPieceInfoMiddleForUpdateDataCapturePointCname(ref info, loginfo.DataCapturePointCname); |
| | | info.UpdatedTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local); |
| | | |
| | | info.WorkPieceCurrentPosition = loginfo.WorkingProcedure; |
| | | info.WorkPieceCurrentPositionOrder = info.WorkingProcedurePlan.IndexOf(loginfo.WorkingProcedure) / 2; |
| | | info.WorkingProcedureCurrent = loginfo.WorkingProcedure; |
| | | info.Remarks = $"{info.WorkingProcedureCurrent}工件上线"; |
| | | } |
| | | |
| | | |
| | | //修复下 op35 同一个件 下线时间跟下一个上线时间一模一样的问题 【Editby shaocx,2024-08-27】 |
| | | var isNeedAddNewProcess = true; |
| | |
| | | new_process.Remarks = ""; |
| | | new_process.MyRemarks = "读码上线时,每次扫描上线都插入追溯表"; |
| | | if (loginfo.WorkingProcedure.Equals("OP05")) |
| | | { |
| | | {//特殊处理OP05工序 |
| | | new_process.EndTime = new_process.StartTime; |
| | | |
| | | //如果已经存在其他工序,那么就必须要按照其他工序的时间往前推数据 【Editby shaocx,2024-09-05】 |
| | | var op05OtherProccss = db.WorkPieceProcess.Where(o => o.WorkPieceID == loginfo.WorkPieceID).OrderBy(x => x.StartTime).FirstOrDefault(); |
| | | if (op05OtherProccss != null) |
| | | {//说明有,那么时间就按照这个时间往前推 |
| | | var _time = op05OtherProccss.StartTime.AddHours(-1); |
| | | new_process.StartTime = _time; |
| | | new_process.EndTime = _time; |
| | | new_process.CreatedTime = _time; |
| | | new_process.UpdatedTime = _time; |
| | | } |
| | | } |
| | | db.WorkPieceProcess.Add(new_process); |
| | | } |
| | | |
| | | //db.Database.AutoTransactionsEnabled = false;// 同一个SaveChanges默认事务, 关闭默认事务:... 好像不能用啊,后面再研究吧 |
| | | if (isAddWorkPieceInfo) |
| | | { |
| | | db.WorkPieceInfo.Add(info); |
| | | } |
| | | else |
| | | {//不确定info是直接会修改还是需要再次查询,待测试 |
| | | //info.Remarks = "修改,具体修改逻辑待定"; |
| | | } |
| | | |
| | | #region 判断是否跳序,或质量不符合 然后反馈PLC |
| | | if (IsFeedback.HasValue && IsFeedback.Value == (int)FeedbackMode.FeedbackPLC) |
| | | { |
| | | bool checkQualityInfoCompleteFlag = false; |
| | | bool plcFlag = true;//反馈给PLC的标记 |
| | | string message = ""; |
| | | checkQualityInfoCompleteFlag = WorkPieceInfoManager.CheckQualityInfoComplete(info, loginfo, type); |
| | | |
| | | if (!checkQualityInfoCompleteFlag || info.QualityState != (int)QualityStateEnum.OK) |
| | | //db.Database.AutoTransactionsEnabled = false;// 同一个SaveChanges默认事务, 关闭默认事务:... 好像不能用啊,后面再研究吧 |
| | | if (isAddWorkPieceInfo) |
| | | { |
| | | plcFlag = false; |
| | | message = !checkQualityInfoCompleteFlag ? "跳序," : ""; |
| | | message += info.QualityState != (int)QualityStateEnum.OK ? "质量不符合" : ""; |
| | | db.WorkPieceInfo.Add(info); |
| | | } |
| | | ////反馈给PLC,(写入点待定) |
| | | //MessageModel fr = null; |
| | | //fr = plcService.WriteValuePoint("", "", plcFlag, PLCManger.GetTypeForString("bool")); |
| | | //if (fr.result) |
| | | //{ |
| | | // Log4NetHelper.WriteInfoLog(type, $" 工件{info.WorkPieceID} {loginfo.WorkingProcedure}工序反馈给PLC 成功, 出现 {message}"); |
| | | //} |
| | | //else |
| | | //{ |
| | | // Log4NetHelper.WriteErrorLog(type, $" 工件{info.WorkPieceID} {loginfo.WorkingProcedure}工序反馈给PLC 失败, 出现 {message} ,失败原因:{fr.resMsg}"); |
| | | //} |
| | | else |
| | | {//不确定info是直接会修改还是需要再次查询,待测试 |
| | | //info.Remarks = "修改,具体修改逻辑待定"; |
| | | } |
| | | |
| | | //#region 反馈PLC |
| | | #region 判断是否跳序,或质量不符合 然后反馈PLC |
| | | if (IsFeedback.HasValue && IsFeedback.Value == (int)FeedbackMode.FeedbackPLC) |
| | | { |
| | | bool checkQualityInfoCompleteFlag = false; |
| | | bool plcFlag = true;//反馈给PLC的标记 |
| | | string message = ""; |
| | | checkQualityInfoCompleteFlag = WorkPieceInfoManager.CheckQualityInfoComplete(info, loginfo, type); |
| | | |
| | | //bool checkQualityInfoCompleteFlag = false; |
| | | //bool plcFlag = true;//反馈给PLC的标记 |
| | | //string message = ""; |
| | | //checkQualityInfoCompleteFlag = WorkPieceInfoManager.CheckQualityInfoComplete(info, wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure)); |
| | | if (!checkQualityInfoCompleteFlag || info.QualityState != (int)QualityStateEnum.OK) |
| | | { |
| | | plcFlag = false; |
| | | message = !checkQualityInfoCompleteFlag ? "跳序," : ""; |
| | | message += info.QualityState != (int)QualityStateEnum.OK ? "质量不符合" : ""; |
| | | } |
| | | ////反馈给PLC,(写入点待定) |
| | | //MessageModel fr = null; |
| | | //fr = plcService.WriteValuePoint("", "", plcFlag, PLCManger.GetTypeForString("bool")); |
| | | //if (fr.result) |
| | | //{ |
| | | // Log4NetHelper.WriteInfoLog(type, $" 工件{info.WorkPieceID} {loginfo.WorkingProcedure}工序反馈给PLC 成功, 出现 {message}"); |
| | | //} |
| | | //else |
| | | //{ |
| | | // Log4NetHelper.WriteErrorLog(type, $" 工件{info.WorkPieceID} {loginfo.WorkingProcedure}工序反馈给PLC 失败, 出现 {message} ,失败原因:{fr.resMsg}"); |
| | | //} |
| | | |
| | | //if (!checkQualityInfoCompleteFlag || info.QualityState != (int)QualityState.OK) |
| | | //{ |
| | | // plcFlag = false; |
| | | // message = !checkQualityInfoCompleteFlag ? "跳序," : ""; |
| | | //message += info.QualityState != (int)QualityState.OK ? "质量不符合" : ""; |
| | | //} |
| | | ////反馈给PLC,(写入点待定) |
| | | //MessageModel fr = null; |
| | | //fr = plcService.WriteValuePoint("", "", plcFlag, PLCManger.GetTypeForString("bool")); |
| | | //if (fr.result) |
| | | //{ |
| | | // Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" 工件{wplog.WorkPieceID} {WorkingProcedure}工序反馈给PLC 成功, 出现 {message}"); |
| | | //} |
| | | //else |
| | | //{ |
| | | // Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" 工件{wplog.WorkPieceID} {WorkingProcedure}工序反馈给PLC 失败, 出现 {message} ,失败原因:{fr.resMsg}"); |
| | | //} |
| | | //#endregion |
| | | //#region 反馈PLC |
| | | |
| | | //bool checkQualityInfoCompleteFlag = false; |
| | | //bool plcFlag = true;//反馈给PLC的标记 |
| | | //string message = ""; |
| | | //checkQualityInfoCompleteFlag = WorkPieceInfoManager.CheckQualityInfoComplete(info, wplog, PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure)); |
| | | |
| | | //if (!checkQualityInfoCompleteFlag || info.QualityState != (int)QualityState.OK) |
| | | //{ |
| | | // plcFlag = false; |
| | | // message = !checkQualityInfoCompleteFlag ? "跳序," : ""; |
| | | //message += info.QualityState != (int)QualityState.OK ? "质量不符合" : ""; |
| | | //} |
| | | ////反馈给PLC,(写入点待定) |
| | | //MessageModel fr = null; |
| | | //fr = plcService.WriteValuePoint("", "", plcFlag, PLCManger.GetTypeForString("bool")); |
| | | //if (fr.result) |
| | | //{ |
| | | // Log4NetHelper.WriteInfoLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" 工件{wplog.WorkPieceID} {WorkingProcedure}工序反馈给PLC 成功, 出现 {message}"); |
| | | //} |
| | | //else |
| | | //{ |
| | | // Log4NetHelper.WriteErrorLog(PLCManger.GetLogTypeForWorkingProcedure(WorkingProcedure), $" 工件{wplog.WorkPieceID} {WorkingProcedure}工序反馈给PLC 失败, 出现 {message} ,失败原因:{fr.resMsg}"); |
| | | //} |
| | | //#endregion |
| | | } |
| | | else |
| | | {//读码完成若工件质量不符合或发生跳序,不用管设备是否把工件放过去,数采系统都不变更当前工序,反馈设备PLC工件不符合, |
| | | //若工序后续收集点收到相关工件信息再变更当前工序, 但质量信息不变 |
| | | |
| | | info.WorkingProcedureCurrent = loginfo.WorkingProcedure; |
| | | } |
| | | #endregion |
| | | |
| | | #region 更新设备实时表 |
| | | |
| | | bool isAddEquipmentCurrentMonitor = false; |
| | | EquipmentCurrentMonitor equinfo = new EquipmentCurrentMonitor(); |
| | | equinfo = db.EquipmentCurrentMonitor.Where(o => o.EquipmentID == loginfo.EquipmentID).FirstOrDefault(); |
| | | if (equinfo == null || equinfo.Id < 1) |
| | | {//没有工件信息,不做更新 |
| | | Log4NetHelper.WriteErrorLog(type, $"设备{loginfo.EquipmentID} 告警监控{loginfo.WorkingProcedure} 没有获取到设备监控信息,现新增"); |
| | | equinfo = EntityPropHelper.Mapper<EquipmentCurrentMonitor, WorkPieceLog>(loginfo); |
| | | equinfo.OnlineTime = DateTime.Now; |
| | | isAddEquipmentCurrentMonitor = true; |
| | | } |
| | | else |
| | | {//更新工件 |
| | | equinfo.WorkPieceID = loginfo.WorkPieceID; |
| | | equinfo.UpdatedUserName = loginfo.MonitoringPoint; |
| | | equinfo.UpdatedTime = DateTime.Now; |
| | | equinfo.OnlineTime = DateTime.Now; |
| | | } |
| | | if (isAddEquipmentCurrentMonitor) |
| | | { |
| | | equinfo.Id = Yitter.IdGenerator.YitIdHelper.NextId(); |
| | | db.EquipmentCurrentMonitor.Add(equinfo); |
| | | } |
| | | #endregion |
| | | //db.WorkPieceLog.Add(GetAddWorkPieceLog(loginfo)); |
| | | db.WorkPieceInfoLog.Add(GetAddWorkPieceInfoLog(info)); |
| | | //UpdateKnifeToolLift(db, loginfo);//更新刀具寿命信息 |
| | | } |
| | | else |
| | | {//读码完成若工件质量不符合或发生跳序,不用管设备是否把工件放过去,数采系统都不变更当前工序,反馈设备PLC工件不符合, |
| | | //若工序后续收集点收到相关工件信息再变更当前工序, 但质量信息不变 |
| | | |
| | | info.WorkingProcedureCurrent = loginfo.WorkingProcedure; |
| | | } |
| | | #endregion |
| | | |
| | | #region 更新设备实时表 |
| | | |
| | | bool isAddEquipmentCurrentMonitor = false; |
| | | EquipmentCurrentMonitor equinfo = new EquipmentCurrentMonitor(); |
| | | equinfo = db.EquipmentCurrentMonitor.Where(o => o.EquipmentID == loginfo.EquipmentID).FirstOrDefault(); |
| | | if (equinfo == null || equinfo.Id < 1) |
| | | {//没有工件信息,不做更新 |
| | | Log4NetHelper.WriteErrorLog(type, $"设备{loginfo.EquipmentID} 告警监控{loginfo.WorkingProcedure} 没有获取到设备监控信息,现新增"); |
| | | equinfo = EntityPropHelper.Mapper<EquipmentCurrentMonitor, WorkPieceLog>(loginfo); |
| | | equinfo.OnlineTime = DateTime.Now; |
| | | isAddEquipmentCurrentMonitor = true; |
| | | } |
| | | else |
| | | {//更新工件 |
| | | equinfo.WorkPieceID = loginfo.WorkPieceID; |
| | | equinfo.UpdatedUserName = loginfo.MonitoringPoint; |
| | | equinfo.UpdatedTime = DateTime.Now; |
| | | equinfo.OnlineTime = DateTime.Now; |
| | | } |
| | | if (isAddEquipmentCurrentMonitor) |
| | | { |
| | | equinfo.Id = Yitter.IdGenerator.YitIdHelper.NextId(); |
| | | db.EquipmentCurrentMonitor.Add(equinfo); |
| | | } |
| | | #endregion |
| | | //db.WorkPieceLog.Add(GetAddWorkPieceLog(loginfo)); |
| | | db.WorkPieceInfoLog.Add(GetAddWorkPieceInfoLog(info)); |
| | | //UpdateKnifeToolLift(db, loginfo);//更新刀具寿命信息 |
| | | } |
| | | else |
| | | { |
| | | loginfo.Remarks = $"上线完成读取二维码{loginfo.WorkPieceID ?? "空"}异常"; |
| | | Log4NetHelper.WriteErrorLog(type, $" {loginfo.WorkingProcedure}上线监控读码标记 读取工件码数据[{loginfo.WorkPieceID ?? "空"}]时异常:"); |
| | | loginfo.Remarks = $"上线完成读取二维码{loginfo.WorkPieceID ?? "空"}异常"; |
| | | Log4NetHelper.WriteErrorLog(type, $" {loginfo.WorkingProcedure}上线监控读码标记 读取工件码数据[{loginfo.WorkPieceID ?? "空"}]时异常:"); |
| | | |
| | | } |
| | | } |
| | | } |
| | | catch (Exception e) |
| | |
| | | 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} 没有获取到工件信息不做更新"); |
| | | Log4NetHelper.WriteErrorLog(type, $"工件{loginfo.WorkPieceID} 工件推出NOOK工序{loginfo.WorkingProcedure} 没有获取到工件信息不做更新"); |
| | | return; |
| | | } |
| | | else |
| | |
| | | info.QualityErrorInfo = ""; |
| | | } |
| | | //*/ |
| | | |
| | | loginfo2.Remarks = $"测量合格状态:{logMiddle.St3_Means_OK},称重状态:{logMiddle.St4_Weight_OK}"; |
| | | } |
| | | else if (logMiddle.WorkingProcedure.Equals("OP30")) |
| | | { |