/// <summary> /// 增加设备新的异常记录。会将该异常的所有配置,记录,人员,类型对象一次性加载并返回 /// </summary> /// <param name="TagValueObject"></param> /// <param name="eCodeDeatials"></param> /// <returns>ErrorObject:包含该异常的配置,记录,需要通知的人员,以及类型</returns> public ErrorObject AddNewErrorLog(DeviceTagValueInfo TagValueObject, ErrorObject errorObject, TagAreaAttributeEnum tagAreaAttributeEnum, string AppendDetailsInfo = "") { int id = -1; error_log eLog = new error_log(); MachineInfo machine = null; station_info station = null; Pro_schedule_machine deviceSchedule = null; if (tagAreaAttributeEnum == TagAreaAttributeEnum.machine_info)//设备形式 { machine = AndonGlobalCfg.MachinesList.FirstOrDefault(x => x.machine_code == TagValueObject.device_code); deviceSchedule = proScheduleMachineManager.SelectOnLineWorkorder(TagValueObject.device_code); } else if (tagAreaAttributeEnum == TagAreaAttributeEnum.station_info)//站位形式 { station = AndonGlobalCfg.StationsList.FirstOrDefault(x => x.station_id == TagValueObject.device_id); deviceSchedule = proScheduleMachineManager.SelectOnLineWorkorder(TagValueObject.device_code); } if (machine != null || station != null) { if (deviceSchedule != null)//从在制进度中获取工单机种 { eLog.pn = deviceSchedule.part_num; eLog.work_order = deviceSchedule.work_order; } if (TagValueObject.system_tag_code == SystemTagCodeEnum.machine_time_error.ToString()) //工时异常类型 { eLog.start_time = TagValueObject.insert_time; //CT从CT模块过来,无时差 } else if (TagValueObject.system_tag_code == SystemTagCodeEnum.material_require.ToString()) //物料呼叫类型 { eLog.start_time = TagValueObject.insert_time.AddHours(GlobalDefine.SysTimeZone); //加上时区 int requireCount = 0, materialId = 0; //支持两种格式:数量,数量&物料id TagIdAndValue valueObject = tagService.GetTagValue(TagValueObject.tag_value); if (valueObject.id > 0 && valueObject.value.Length > 0) { requireCount = valueObject.id; int.TryParse(valueObject.value, out materialId); //id为物料呼叫的id eLog.error_type_id = materialId; //物料呼叫的id直接给到error_type_id字段 } } else { eLog.start_time = TagValueObject.insert_time.AddHours(GlobalDefine.SysTimeZone); //加上时区 } eLog.arrival_time = default(DateTime); //分配默认时间 eLog.release_time = default(DateTime); //分配默认时间 eLog.maintenance_time = default(DateTime); //分配默认时间 if (machine != null) { eLog.machine_code = TagValueObject.device_code; eLog.station_id = machine.station_id; eLog.line_id = machine.line_id; eLog.unit_no = machine.unit_no; } else { eLog.station_id = station.station_id; eLog.machine_code = station.station_name_en; eLog.line_id = station.line_id; eLog.unit_no = station.unit_no; } eLog.system_tag_code = TagValueObject.system_tag_code; eLog.error_name = errorObject.eConfig.error_name + AppendDetailsInfo; if (errorObject.eConfig.check_ack == (int)AckModeEnum.NoAck)//只是记录,不需要确认 { eLog.release_time = eLog.start_time; } eLog.ack_person_id = -1;//确认人员为空 if (eLog.error_type_id == 0) { eLog.error_type_id = -1;//确认编码为空 } id = errorLogManager.Insert(eLog); //插入数据库 if (id > 0) { eLog.id = id; //id记录 errorObject.ELog = eLog; } } return(errorObject); }
/// <summary> /// 根据Tag值信息加载所有信息.外部处理进入,需要确认和优化?????????? /// </summary> /// <param name="TagValueObject"></param> /// <param name="tagAreaAttributeEnum"></param> /// <returns></returns> public ErrorObject LoadErrorObject(DeviceTagValueInfo TagValueObject, TagAreaAttributeEnum tagAreaAttributeEnum) { ErrorObject errorObject = new ErrorObject(); List <error_config_pn> eCfgPns; string partNo = string.Empty;//当前机种 Pro_schedule_machine deviceSchedule = null; if (tagAreaAttributeEnum == TagAreaAttributeEnum.machine_info)//设备形式 { MachineInfo machine = AndonGlobalCfg.MachinesList.FirstOrDefault(x => x.machine_id == TagValueObject.device_id); if (machine != null) { errorObject.eConfig = errorConfigManager.GetFirstErrorConfig(TagValueObject.system_tag_code, machine.unit_no, machine.line_id); if (errorObject.eConfig == null) { errorObject.eConfig = errorConfigManager.GetFirstErrorConfig(TagValueObject.system_tag_code, machine.unit_no); } } } else if (tagAreaAttributeEnum == TagAreaAttributeEnum.station_info)//站位形式 { station_info station = AndonGlobalCfg.StationsList.FirstOrDefault(x => x.station_id == TagValueObject.device_id); if (station != null) { errorObject.eConfig = errorConfigManager.GetFirstErrorConfig(TagValueObject.system_tag_code, station.unit_no, station.line_id); if (errorObject.eConfig == null) { errorObject.eConfig = errorConfigManager.GetFirstErrorConfig(TagValueObject.system_tag_code, station.unit_no); } } } if (errorObject.eConfig == null) { return(errorObject); } errorObject.DeviceCode = TagValueObject.device_code; if (TagValueObject.system_type_code == SystemTagCodeEnum.quality_error.ToString()) { eCfgPns = errorConfigPnManager.GetCfgPns(errorObject.eConfig.id);//获取该异常配置的机种信息 deviceSchedule = proScheduleMachineManager.SelectOnLineWorkorder(TagValueObject.device_code); if (deviceSchedule != null) { partNo = deviceSchedule.part_num;//获取当前机种 } if (eCfgPns != null && eCfgPns.Count > 0) { if (eCfgPns.Any(x => x.part_num.Equals(partNo))) //当前机种在此配置里面 { errorObject.eCfgPnList = eCfgPns; } } } if (errorObject.eConfig != null) { errorObject.eCfgPersonList = errorPersonManager.GetCfgPersonList(errorObject.eConfig.id); //需通知的配置人员加载 eCfgPns = errorConfigPnManager.GetCfgPns(errorObject.eConfig.id); errorObject.eCfgPnList = eCfgPns; //关联的机种信息加载 } return(errorObject); }