using HslCommunication.BasicFramework;
using iWare.Wms.Core;
using iWare_SCADA_BusinessLogical.Utils;
using iWare_SCADA_Model;
using iWare_SCADA_Model.MiddleModel;
using iWare_SCADA_Model.TableModel;
using log4net;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity.Validation;
using System.Diagnostics;
//using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
using System.Windows.Forms;
using static System.Windows.Forms.AxHost;
namespace iWare_SCADA_BusinessLogical.BLL
{
public class WorkPieceInfoManager
{
//public static WorkPieceInfo GetWorkPieceInfo(string WorkPieceID)
//{
// using (DbModel db = new DbModel())
// {
// //查询所有
// var query = db.WorkPieceInfo.Where(o => o.WorkPieceID == WorkPieceID).FirstOrDefault();
// return query;
// }
//}
//public static long InsertWorkPieceInfo(WorkPieceInfo workPiece)
//{
// using (DbModel db = new DbModel())
// {
// db.WorkPieceInfo.Add(workPiece);
// db.SaveChanges();
// return workPiece.Id;
// }
//}
//public static WorkPieceLogMiddle GetAddWorkPieceLog(WorkPieceLogMiddle loginfo)
//{
// loginfo.Id = Yitter.IdGenerator.YitIdHelper.NextId();
// return loginfo;
//}
///
/// 给WorkPieceLog主键等公共的的属性赋值
///
///
///
public static WorkPieceLog GetAddWorkPieceLog(WorkPieceLog loginfo)
{
loginfo.Id = Yitter.IdGenerator.YitIdHelper.NextId();
PieceLogTypeEnum pieceLogTypeEnum = PieceLogTypeEnum.正常;
loginfo.PieceLogType = (int)pieceLogTypeEnum;
loginfo.PieceLogTypeName = pieceLogTypeEnum.ToString();
return loginfo;
}
//public static WorkPieceLog GetAddWorkPieceLog1(WorkPieceLogMiddle loginfo)
//{
// loginfo.Id = Yitter.IdGenerator.YitIdHelper.NextId();
// return loginfo;
//}
///
/// 通过WorkPieceInfo 给WorkPieceInfoLog 属性赋值
///
///
///
public static WorkPieceInfoLog GetAddWorkPieceInfoLog(WorkPieceInfo wpinfo)
{
WorkPieceInfoLog infolog = EntityPropHelper.Mapper(wpinfo);
infolog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
infolog.WorkPieceInfoID = wpinfo.Id;
infolog.LogAddTime = DateTime.Now;
return infolog;
}
///
/// 给QualityDataInfo主键等公共的的属性赋值
///
///
///
public static QualityDataInfo GetAddQualityDataInfo(QualityDataInfo qdinfo)
{
qdinfo.Id = Yitter.IdGenerator.YitIdHelper.NextId();
return qdinfo;
}
///
/// 通过QualityDataInfo 给QualityDataInfoLog 属性赋值
///
///
///
public static QualityDataInfoLog GetAddQualityDataInfoLog(QualityDataInfo qdinfo)
{
QualityDataInfoLog infolog = EntityPropHelper.Mapper(qdinfo);
infolog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
return infolog;
}
public static void test()
{
using (DbModel db = new DbModel())
{
//WorkPieceLogMiddle a = new WorkPieceLogMiddle();
//a.Id = Yitter.IdGenerator.YitIdHelper.NextId();
//a.WorkPieceID="test01"+ new Random().Next(4).ToString();
//a.QualityType = QualityType.SPC.ToString();
//if(a.QualityType.Equals(QualityType.SPC.ToString()))
//{
// a.Remarks = "SPC";
//}
//else
//{
// a.Remarks = "AUTO";
//}
//WorkPieceLog b = new WorkPieceLog();
//b.Id = Yitter.IdGenerator.YitIdHelper.NextId();
//b.WorkPieceID = "testxxx" + new Random().Next(0,1000).ToString();
//b.QualityType = QualityType.SPC.ToString();
//b.Remarks = "SPC insert into";
//b.QualityState = 2;
//b.QualityStateUpdateMode = "heheh";
//db.WorkPieceLog.Add(b);
//db.SaveChanges();
}
}
///
/// 根据设备id更新刀具寿命信息(目前设定每生产一个工件,所有刀具寿命都会减1)
///
///
///
public static void UpdateKnifeToolLift(DbModel db, WorkPieceLog loginfo)
{
try
{
var info = db.KnifeToolEquipmentInfo.Where(o => o.EquipmentID.Equals(loginfo.EquipmentID)).ToList();
foreach (var item in info)
{
item.CurrentLife++;
item.UpdatedTime = DateTime.Now;
}
}
catch (Exception ex)
{
loginfo.Remarks = $"{loginfo.WorkPieceID ?? "空"}刀具寿命更新数据异常{ex.Message}";
}
}
public static WorkPieceLogMiddle QualityDataHand(WorkPieceLogMiddle loginfo, List qcofig)
{
try
{
switch (loginfo.WorkingProcedure)
{
case "OP10":
var cof = qcofig.Where(o => o.ParamColName.Equals("QualityOP10To1")).FirstOrDefault();
if (cof != null && cof.Id > 0)
{
double oldvalue = 0;
double StandardValue = 0;
var flag1 = double.TryParse(loginfo.QualityOP10To1, out oldvalue);
var flag2 = double.TryParse(cof.StandardValue, out StandardValue);
if (!flag1 || !flag2)
{
return loginfo;
}
loginfo.QualityOP10To1 = ((StandardValue + oldvalue * 1.0 / cof.DecimalPlaces).ToString());
//+(string.IsNullOrEmpty(cof.Unit) ? "" : cof.Unit)
}
break;
case "OP40":
var cofOP40 = qcofig.Where(o => o.ParamColName.Equals("QualityOP40To1")).FirstOrDefault();
if (cofOP40 != null && cofOP40.Id > 0)
{
double oldvalue = 0;
double StandardValue = 0;
var flag1 = double.TryParse(loginfo.QualityOP40To1, out oldvalue);
var flag2 = double.TryParse(cofOP40.StandardValue, out StandardValue);
if (!flag1 || !flag2)
{
return loginfo;
}
loginfo.QualityOP40To1 = ((StandardValue + oldvalue * 1.0 / cofOP40.DecimalPlaces).ToString());
//+(string.IsNullOrEmpty(cofOP40.Unit) ? "" : cofOP40.Unit)
}
break;
case "OP20":
var cofOP20 = qcofig.Where(o => o.ParamColName.Equals("QualityOP20To1")).FirstOrDefault();
if (cofOP20 != null && cofOP20.Id > 0)
{
double oldvalue = 0;
double StandardValue = 0;
var flag1 = double.TryParse(loginfo.QualityOP20To1, out oldvalue);
var flag2 = double.TryParse(cofOP20.StandardValue, out StandardValue);
if (!flag1 || !flag2)
{
return loginfo;
}
loginfo.QualityOP20To1 = ((StandardValue + oldvalue * 1.0 / cofOP20.DecimalPlaces).ToString());
}
break;
case "OP60":
var cofOP60to1 = qcofig.Where(o => o.ParamColName.Equals("QualityOP60To1")).FirstOrDefault();
if (cofOP60to1 != null && cofOP60to1.Id > 0)
{
double oldvalue = 0;
double StandardValue = 0;
var flag1 = double.TryParse(loginfo.QualityOP60To1, out oldvalue);
var flag2 = double.TryParse(cofOP60to1.StandardValue, out StandardValue);
if (!flag1 || !flag2)
{
return loginfo;
}
loginfo.QualityOP60To1 = ((StandardValue + oldvalue * 1.0 / cofOP60to1.DecimalPlaces).ToString());
}
var cofOP60to2 = qcofig.Where(o => o.ParamColName.Equals("QualityOP60To2")).FirstOrDefault();
if (cofOP60to2 != null && cofOP60to2.Id > 0)
{
double oldvalue = 0;
double StandardValue = 0;
var flag1 = double.TryParse(loginfo.QualityOP60To2, out oldvalue);
var flag2 = double.TryParse(cofOP60to2.StandardValue, out StandardValue);
if (!flag1 || !flag2)
{
return loginfo;
}
loginfo.QualityOP60To2 = ((StandardValue + oldvalue * 1.0 / (10 * cofOP60to2.DecimalPlaces)).ToString() + (string.IsNullOrEmpty(cofOP60to2.Unit) ? "" : cofOP60to2.Unit));
}
break;
default:
break;
}
}
catch (Exception ex)
{
}
return loginfo;
}
///
/// 赋值 修改人 【Editby shaocx,2024-07-05】
///
///
///
public static string ResetUpdatedUserName(WorkPieceLogMiddle logMiddle)
{
if (logMiddle.MonitoringPoint.Equals("OP1003"))
{//因为OP10和OP40是一台机器,OP1003专门是OP40测量的。
return "OP4003";
}
return logMiddle.MonitoringPoint;
}
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;
}
}
public static void AlertMonitor(WorkPieceLog loginfo, LogType type)
{
}
///
/// 设备告警监控(清洗液,切削液,刀具告警等)
///
///
///
public static void AlertMonitor(LogType type)
{
using (DbModel db = new DbModel())
{
bool isAddAlert = false;
try
{
var equipmentlist = db.EquipmentBaseInfo.Where(o => o.IsDeleted == false).ToList();
var alertlist = db.v_get_equipment_alert.Where(o => o.IsDeleted == false).ToList();
var knifetoolbase = db.KnifeToolBaseInfo.Where(o => o.IsDeleted == false).ToList();
var knifetoolinfo = db.KnifeToolEquipmentInfo.Where(o => o.IsDeleted == false).ToList();
//var knifelist = db.KnifeToolEquipmentInfo.GroupJoin(db.KnifeToolBaseInfo.Where(o => o.IsDeleted == false).ToList(), a => a.EquipmentID, b => b.EquipmentID, (a, b) => new { a,b})
//.SelectMany(ab => ab.b.DefaultIfEmpty(), (ab, b) => new { ab.a, b.KnifeToolChangeAlertThreshold,b.KnifeToolLife })
//.Where(o => o.a.IsDeleted == false)
//.ToList();
foreach (var item in equipmentlist)
{
try
{
var alert = alertlist.Where(o => o.EquipmentId.Equals(item.EquipmentId)).FirstOrDefault();
if (alert == null || alert.Id < 1)
{
alert = EntityPropHelper.Mapper(item);
isAddAlert = true;
}
//if(item.WorkingProcedure.Equals("OP70"))
{
if (item.Detergentchangetime.HasValue)
{
if (item.Detergentchangetime.Value.AddDays(item.DetergentChangeAlertThreshold).Date <= DateTime.Now.Date)
{//op70清洗液告警
alert.IsAlertDetergent = true;
alert.Detergentchangetime = item.Detergentchangetime;
alert.DetergentChangeAlertThreshold = item.DetergentChangeAlertThreshold;
alert.DetergentChangeCycle = item.DetergentChangeCycle;
alert.DetergentDesc = $"设备【{item.EquipmentName}】清洗液最新更换时间为【{item.Detergentchangetime.Value}】,已达到告警阈值,请注意!";
}
else
{
alert.IsAlertDetergent = false;
alert.DetergentDesc = "";
}
}
else
{
alert.IsAlertDetergent = false;
alert.DetergentDesc = "";
}
}
//if (!item.WorkingProcedure.Equals("OP05")&& !item.WorkingProcedure.Equals("OP30") && !item.WorkingProcedure.Equals("OP70") && !item.WorkingProcedure.Equals("OP80"))
{
if (item.CuttingFluidChangeTime.HasValue)
{
if (item.CuttingFluidChangeTime.Value.AddDays(item.CuttingFluidChangeAlertThreshold).Date <= DateTime.Now.Date)
{//切削液告警
alert.IsAlertCuttingFluid = true;
alert.CuttingFluidChangeTime = item.CuttingFluidChangeTime;
alert.CuttingFluidChangeAlertThreshold = item.CuttingFluidChangeAlertThreshold;
alert.CuttingFluidDesc = $"设备【{item.EquipmentName}】切削液最新更换时间为【{item.CuttingFluidChangeTime.Value}】,已达到告警阈值,请注意!";
}
else
{
alert.IsAlertCuttingFluid = false;
alert.CuttingFluidDesc = "";
}
}
else
{
alert.IsAlertCuttingFluid = false;
alert.CuttingFluidDesc = "";
}
}
bool flag = false;
string desc = $"设备【{item.EquipmentName}】";
foreach (var knife in knifetoolinfo.Where(o => o.EquipmentID.Equals(item.EquipmentId)))
{
var list = knifetoolbase.Where(o => o.KnifeToolID.Equals(knife.KnifeToolID)).FirstOrDefault();
if (list != null)
{
if ((knife.CurrentLife + list.KnifeToolChangeAlertThreshold) >= list.KnifeToolLife)
{//刀具告警
flag = true;
alert.IsAlertKnifeTool = true;
alert.KnifeToolChangeAlertThreshold = list.KnifeToolChangeAlertThreshold;
desc += $"\r\n工位【{knife.Station}】上刀具【{knife.KnifeToolID}】计划寿命【{list.KnifeToolLife}】次,当前已使用寿命【{knife.CurrentLife}】次,已达到告警阈值,请注意!";
}
}
}
if (!flag)
{//没有刀具告警
alert.IsAlertKnifeTool = false;
alert.KnifeToolDesc = "";
}
else
{
alert.IsAlertKnifeTool = true;
alert.KnifeToolDesc = desc;
}
EquipmentCurrentMonitor info = new EquipmentCurrentMonitor();
info = db.EquipmentCurrentMonitor.Where(o => o.EquipmentID == item.EquipmentId).FirstOrDefault();
if (info == null || info.Id < 1)
{//没有工件信息,不做更新
Log4NetHelper.WriteErrorLog(type, $"设备{item.EquipmentId} 计算告警{item.WorkingProcedure} 没有获取到设备监控信息!");
}
else
{
if (string.IsNullOrEmpty(info.Alertmsg))
{
alert.IsAlert = false;
alert.AlertDesc = "";
}
else
{
alert.IsAlert = true;
alert.AlertDesc = info.Alertmsg;
}
}
if (isAddAlert)
{
db.v_get_equipment_alert.Add(alert);
}
}
catch (Exception ex)
{
Log4NetHelper.WriteErrorLog(type, $" {item.EquipmentName}设备计算告警时异常:");
}
}
}
catch (Exception e)
{
Log4NetHelper.WriteErrorLog(type, $" 设备告警监控(清洗液,切削液,刀具告警等) 计算时异常:{e.Message} {e.StackTrace}");
}
//db.WorkPieceLog.Add(loginfo2);//插入设备采集日志表
db.SaveChanges();
}
}
///
/// 设备监控
///
///
///
public static void EquipmentMonitor(WorkPieceLogMiddle loginfo, LogType type)
{
using (DbModel db = new DbModel())
{
var loginfo2 = EntityPropHelper.Mapper(loginfo);
try
{
bool isAddEquipmentCurrentMonitor = false;
EquipmentCurrentMonitor info = new EquipmentCurrentMonitor();
info = db.EquipmentCurrentMonitor.Where(o => o.EquipmentID == loginfo.EquipmentID).FirstOrDefault();
if (info == null || info.Id < 1)
{//没有工件信息,不做更新
Log4NetHelper.WriteErrorLog(type, $"设备{loginfo.EquipmentID} 告警监控{loginfo.MonitoringPoint} 没有获取到设备监控信息,现新增");
info = EntityPropHelper.Mapper(loginfo);
isAddEquipmentCurrentMonitor = true;
}
//最新设备状态
string State = "";
//OP20,OP30,OP35,OP50,OP60等等都不区分告警和message,但code都不会重复,所以本处就不需要判断告警类型了
var codelist = db.EquipmentFailureCode.Where(o => o.WorkingProcedure.Equals(loginfo.WorkingProcedure)).ToList();
#region 故障代码处理
List Failueslist = new List();
Failueslist.Add(loginfo.FailureType1);
Failueslist.Add(loginfo.FailureType2);
Failueslist.Add(loginfo.FailureType3);
Failueslist.Add(loginfo.FailureType4);
Failueslist.Add(loginfo.FailureType5);
Failueslist.Add(loginfo.FailureType6);
Failueslist.Add(loginfo.FailureType7);
Failueslist.Add(loginfo.FailureType8);
Failueslist.Add(loginfo.FailureType9);
Failueslist.Add(loginfo.FailureType10);
Failueslist.Add(loginfo.FailureType11);
Failueslist.Add(loginfo.FailureType12);
Failueslist.Add(loginfo.FailureType13);
Failueslist.Add(loginfo.FailureType14);
Failueslist.Add(loginfo.FailureType15);
Failueslist.Add(loginfo.FailureType16);
Failueslist.Add(loginfo.FailureType17);
Failueslist.Add(loginfo.FailureType18);
Failueslist.Add(loginfo.FailureType19);
Failueslist.Add(loginfo.FailureType20);
Failueslist.RemoveAll(o => o == 0);
string faultall = "";
string faultmsg = "";
int i = 1;
foreach (var failues in Failueslist)
{
faultall += (failues + "\r\n");
EquipmentFailureCode codeinfo = codelist.Where(o => o.Code == failues.ToString()).FirstOrDefault();
if (codeinfo != null && codeinfo.Code.Length > 0)
{
faultmsg += (i.ToString() + "." + (codeinfo.CodeDesc ?? codeinfo.Code) + "\r\n");
}
else
{
faultmsg += (i.ToString() + "." + failues.ToString() + "\r\n");
}
i++;
}
//var faultall = string.Join("\r\n", Failueslist.OrderBy(o=>o));
#endregion
#region 告警代码处理
List Alertlist = new List();
Alertlist.Add(loginfo.FailureMessage1);
Alertlist.Add(loginfo.FailureMessage2);
Alertlist.Add(loginfo.FailureMessage3);
Alertlist.Add(loginfo.FailureMessage4);
Alertlist.Add(loginfo.FailureMessage5);
Alertlist.Add(loginfo.FailureMessage6);
Alertlist.Add(loginfo.FailureMessage7);
Alertlist.Add(loginfo.FailureMessage8);
Alertlist.Add(loginfo.FailureMessage9);
Alertlist.Add(loginfo.FailureMessage10);
Alertlist.Add(loginfo.FailureMessage11);
Alertlist.Add(loginfo.FailureMessage12);
Alertlist.Add(loginfo.FailureMessage13);
Alertlist.Add(loginfo.FailureMessage14);
Alertlist.Add(loginfo.FailureMessage15);
Alertlist.Add(loginfo.FailureMessage16);
Alertlist.Add(loginfo.FailureMessage17);
Alertlist.Add(loginfo.FailureMessage18);
Alertlist.Add(loginfo.FailureMessage19);
Alertlist.Add(loginfo.FailureMessage20);
Alertlist.RemoveAll(o => o == 0);
string alertall = "";
string warnmsg = "";
i = 1;
foreach (var alert in Alertlist)
{
alertall += (alert + "\r\n");
var codeinfo = codelist.Where(o => o.Code == alert.ToString()).FirstOrDefault();
if (codeinfo != null && codeinfo.Code.Length > 0)
{
warnmsg += (i.ToString() + "." + (codeinfo.CodeDesc ?? codeinfo.Code) + "\r\n");
}
else
{
warnmsg += (i.ToString() + "." + alert.ToString() + "\r\n");
}
i++;
}
#endregion
//var alertall = string.Join("\r\n", Alertlist.OrderBy(o=>o));
EquipmentWorkingLog infolog = new EquipmentWorkingLog();
infolog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
infolog.LogAddTime = DateTimeHelper.GetDateTime();
infolog.WorkPieceLogID = loginfo2.Id;
infolog.EquipmentID = info.EquipmentID;
bool isAddEquipmentWorkingLog = false;
bool isStatechange = false;
#region 设备状态处理
//故障》警告》其他
if (loginfo.IsCloseAlert)
{//故障
info.AlertTime = info.AlertTime ?? DateTime.Now;
info.FailureType = "";
info.WarnType = "";
info.Alertmsg = faultmsg;//这个需要代码对应字典维护信息才知道
info.FailureType = faultall;
State = ((int)EnumEquipmentCurrentStateDisplay.故障).ToString();
//infolog.FailureStartTime = DateTimeHelper.GetDateTime();
//infolog.FailureType = faultall;
//infolog.FailureMsg = faultmsg;
if (loginfo.IsMessage)
{
info.WarnTime = info.WarnTime ?? DateTime.Now;
info.Warnmsg = warnmsg;//这个需要代码对应字典维护信息才知道
info.WarnType = alertall;
}
}
//else if (loginfo.IsMessage)
//{//警告
// info.AlertTime = null;
// info.Alertmsg = "";//这个需要代码对应字典维护信息才知道
// info.FailureType = "";
// info.WarnTime = info.WarnTime ?? DateTime.Now;
// info.Warnmsg = warnmsg;//这个需要代码对应字典维护信息才知道
// info.WarnType = alertall;
// //infolog.WarnStartTime = DateTimeHelper.GetDateTime();
// //infolog.WarnType = alertall;
// //infolog.Warnmsg = warnmsg;
// State = ((int)EnumEquipmentCurrentStateDisplay.警告).ToString();
//}
else
{//告警结束,获取有告警的数据,然后关闭他
info.AlertTime = null;
info.Alertmsg = "";//这个需要代码对应字典维护信息才知道
info.FailureType = "";
info.WarnType = "";
info.WarnTime = null;
info.Warnmsg = "";
if (loginfo.IsMessage)
{//警告会覆盖下面的状态,先不用警告了
info.WarnTime = info.WarnTime ?? DateTime.Now;
info.Warnmsg = warnmsg;//这个需要代码对应字典维护信息才知道
info.WarnType = alertall;
}
if (info.EquipmentCurrentState == null || (!info.EquipmentCurrentState.Equals(((int)EnumEquipmentCurrentStateDisplay.离线).ToString())))
{//如果设备状态为离线,则此处不需要判断任何信息
if (loginfo.IsNormalProduction && !loginfo.LackMaterial && !loginfo.FullMaterial)
{//自动运行状态+不缺料+不堵料
State = ((int)EnumEquipmentCurrentStateDisplay.生产).ToString();
}
else if (loginfo.IsNormalProduction && loginfo.FullMaterial)
{//自动运行状态+下料道满料 = 完成 (就是有生产出来但没有出设备)
State = ((int)EnumEquipmentCurrentStateDisplay.完成).ToString();
}
else
{//其他状态全算待机
State = ((int)EnumEquipmentCurrentStateDisplay.待机).ToString();
}
}
}
if (!string.IsNullOrEmpty(State) && State != info.EquipmentCurrentState)
{//只有状态出现变化才变更,状态变更,肯定有新的一条数据
//状态变更,获取旧状态的信息,若有则更新(准确的说,只要没有结束时间的设备状态都需要更新结束时间,以便于插入新的数据)
var equlogState = db.EquipmentWorkingLog.Where(o => o.EquipmentID == loginfo.EquipmentID
&& o.EquipmentStateStartTime != null && o.EquipmentStateStartTime != DateTime.MinValue && (o.EquipmentStateEndTime == null || o.EquipmentStateEndTime == DateTime.MinValue)
//&& o.EquipmentState== info.EquipmentCurrentState
)
.OrderByDescending(o => o.EquipmentStateStartTime).FirstOrDefault();
if (equlogState != null)
{
equlogState.MonitoringPoint = loginfo.MonitoringPoint;
equlogState.EquipmentStateEndTime = DateTimeHelper.GetDateTime();
}
info.UpdatedUserName = loginfo.MonitoringPoint;
info.UpdatedTime = DateTime.Now;
info.EquipmentCurrentState = State;
//状态变更,需要更新原来的,肯定会插入新的
infolog.EquipmentState = State;
infolog.EquipmentStateStartTime = DateTimeHelper.GetDateTime();
infolog.WorkingProcedure = loginfo.WorkingProcedure;
infolog.MonitoringPoint = loginfo.MonitoringPoint;
infolog.Remarks = "告警信息出现变更3";
infolog.UpdateDesc = (infolog.UpdateDesc ?? "") + $"设备状态变更为{((EnumEquipmentCurrentStateDisplay)int.Parse(State)).ToString()}\r\n";
isAddEquipmentWorkingLog = true;
isStatechange = true;
}
#endregion
//1.有故障则是故障状态, 有故障信息+告警信息
//2.没有故障有告警则是告警状态,有告警信息
//3.即没故障,也没告警,则是其他状态
//查找是否有未结束的故障
var equlogFailure = db.EquipmentWorkingLog.Where(o => o.EquipmentID == loginfo.EquipmentID
&& o.FailureStartTime != null && o.FailureStartTime != DateTime.MinValue && (o.FailureEndTime == null || o.FailureEndTime == DateTime.MinValue))
.OrderByDescending(o => o.FailureStartTime).FirstOrDefault();
if (loginfo.IsCloseAlert)
{//有故障标志位,设备状态若有变更则肯定有新增,此处直接更新即可
//有故障标志位,设备状态若没有更新,有故障,也不会插入新的(有故障设备状态变更肯定是变成故障)
infolog.FailureStartTime = DateTimeHelper.GetDateTime();
infolog.FailureType = faultall;
infolog.FailureMsg = faultmsg;
infolog.WorkingProcedure = loginfo.WorkingProcedure;
infolog.MonitoringPoint = loginfo.MonitoringPoint;
infolog.Remarks = "故障信息出现变更1";
infolog.UpdateDesc = (infolog.UpdateDesc ?? "") + "故障信息变更\r\n";
}
else
{
if (equlogFailure != null)
{//故障关闭的
equlogFailure.MonitoringPoint = loginfo.MonitoringPoint;
equlogFailure.FailureEndTime = DateTimeHelper.GetDateTime();
}
}
//查找是否有未结束的告警
var equlogalert = db.EquipmentWorkingLog.Where(o => o.EquipmentID == loginfo.EquipmentID
&& o.WarnStartTime != null && o.WarnStartTime != DateTime.MinValue && (o.WarnEndTime == null || o.WarnEndTime == DateTime.MinValue))
.OrderByDescending(o => o.WarnStartTime).FirstOrDefault();
if (loginfo.IsMessage)
{//若有告警,如果有设备状态变更,肯定插入,此处只修改即可
//若有告警,如果设备状态没有变更,有告警,也不插入新的(问题:当状态没有更改,如一直是故障,但告警信息有变化,怎么办 ps:此处先不管)
infolog.WarnStartTime = DateTimeHelper.GetDateTime();
infolog.WarnType = alertall;
infolog.Warnmsg = warnmsg;
infolog.WorkingProcedure = loginfo.WorkingProcedure;
infolog.MonitoringPoint = loginfo.MonitoringPoint;
infolog.Remarks = "告警信息出现变更2";
infolog.UpdateDesc = (infolog.UpdateDesc ?? "") + "告警信息变更\r\n";
}
else
{
if (equlogalert != null)
{//故障关闭的
equlogalert.MonitoringPoint = loginfo.MonitoringPoint;
equlogalert.WarnEndTime = DateTimeHelper.GetDateTime();
}
}
if (isAddEquipmentCurrentMonitor)
{
info.Id = Yitter.IdGenerator.YitIdHelper.NextId();
db.EquipmentCurrentMonitor.Add(info);
}
if (isAddEquipmentWorkingLog)
{
db.EquipmentWorkingLog.Add(infolog);
}
}
catch (Exception e)
{
loginfo2.Remarks = $"{loginfo2.MonitoringPoint}设备监控更新数据异常{e.Message}.{e.StackTrace}";
Log4NetHelper.WriteErrorLog(type, $"{loginfo2.MonitoringPoint}设备监控更新数据异常{e.Message}.{e.StackTrace}");
}
//db.WorkPieceLog.Add(loginfo2);//插入设备采集日志表
db.SaveChanges();
}
}
///
/// 心跳监控
///
///
///
public static void EquipmentBeartBeatMonitor(WorkPieceLogMiddle loginfo, LogType type)
{
using (DbModel db = new DbModel())
{
bool isAddEquipmentCurrentMonitor = false;
EquipmentCurrentMonitor info = new EquipmentCurrentMonitor();
info = db.EquipmentCurrentMonitor.Where(o => o.WorkingProcedure == loginfo.WorkingProcedure).FirstOrDefault();
if (info == null)
{//没有工件信息,不做更新
Log4NetHelper.WriteErrorLog(type, $"设备{loginfo.EquipmentID} 告警监控{loginfo.MonitoringPoint} 没有获取到设备监控信息,现新增");
info = EntityPropHelper.Mapper(loginfo);
isAddEquipmentCurrentMonitor = true;
info.EquipmentCurrentState = ((int)EnumEquipmentCurrentStateDisplay.待机).ToString();
info.IsDeleted = false;
}
string state = "";
EquipmentWorkingLog infolog = new EquipmentWorkingLog();
infolog.Id = Yitter.IdGenerator.YitIdHelper.NextId();
infolog.LogAddTime = DateTimeHelper.GetDateTime();
infolog.WorkPieceLogID = loginfo.Id;
infolog.EquipmentID = info.EquipmentID;
bool isAddEquipmentWorkingLog = false;
if (!loginfo.IsConnect)
{//最新状态为离线
state = ((int)EnumEquipmentCurrentStateDisplay.离线).ToString();
info.EquipmentCurrentState = state;
info.UpdatedUserName = loginfo.MonitoringPoint;
info.UpdatedTime = DateTime.Now;
info.Alertmsg = "设备离线";
info.AlertTime = DateTimeHelper.GetDateTime();
info.FailureType = "";
//若没有离线的信息,则新增一条
var equlog = db.EquipmentWorkingLog.Where(o => o.EquipmentID == loginfo.EquipmentID
&& o.EquipmentStateStartTime != null && o.EquipmentStateStartTime != DateTime.MinValue && (o.EquipmentStateEndTime == null || o.EquipmentStateEndTime == DateTime.MinValue)
&& o.EquipmentState.Equals(state)
).OrderByDescending(o => o.EquipmentStateStartTime).FirstOrDefault();
if (equlog == null)
{
infolog.EquipmentState = state;
infolog.EquipmentStateStartTime = DateTimeHelper.GetDateTime();
infolog.WorkingProcedure = loginfo.WorkingProcedure;
infolog.MonitoringPoint = loginfo.MonitoringPoint;
infolog.Remarks = "离线";
infolog.UpdateDesc = (infolog.UpdateDesc ?? "") + $"设备状态变更为{((EnumEquipmentCurrentStateDisplay)int.Parse(state)).ToString()}\r\n";
isAddEquipmentWorkingLog = true;
}
//若有非离线的状态数据,则更新
var equlog2 = db.EquipmentWorkingLog.Where(o => o.EquipmentID == loginfo.EquipmentID
&& o.EquipmentStateStartTime != null && o.EquipmentStateStartTime != DateTime.MinValue && (o.EquipmentStateEndTime == null || o.EquipmentStateEndTime == DateTime.MinValue)
&& !o.EquipmentState.Equals(state)
).OrderByDescending(o => o.EquipmentStateStartTime).FirstOrDefault();
if (equlog2 != null)
{
equlog2.MonitoringPoint = loginfo.MonitoringPoint;
equlog2.EquipmentStateEndTime = DateTimeHelper.GetDateTime();
}
}
else
{//最新状态为开机
if (((int)EnumEquipmentCurrentStateDisplay.离线).ToString() == info.EquipmentCurrentState)
{//只有离线状态,才能变成开机
state = ((int)EnumEquipmentCurrentStateDisplay.待机).ToString();
info.EquipmentCurrentState = state;
info.UpdatedUserName = loginfo.MonitoringPoint;
info.UpdatedTime = DateTime.Now;
info.Alertmsg = "";
info.AlertTime = null;
//有离线的数据,则更新
var equlog = db.EquipmentWorkingLog.Where(o => o.EquipmentID == loginfo.EquipmentID
&& o.EquipmentStateStartTime != null && o.EquipmentStateStartTime != DateTime.MinValue && (o.EquipmentStateEndTime == null || o.EquipmentStateEndTime == DateTime.MinValue)
&& o.EquipmentState.Equals(((int)EnumEquipmentCurrentStateDisplay.离线).ToString())
).OrderByDescending(o => o.EquipmentStateStartTime).FirstOrDefault();
if (equlog != null)
{
equlog.MonitoringPoint = loginfo.MonitoringPoint;
equlog.EquipmentStateEndTime = DateTimeHelper.GetDateTime();
}
//离线变开机,肯定会插入一条
infolog.EquipmentState = state;
infolog.EquipmentStateStartTime = DateTimeHelper.GetDateTime();
infolog.WorkingProcedure = loginfo.WorkingProcedure;
infolog.MonitoringPoint = loginfo.MonitoringPoint;
infolog.Remarks = "开机";
infolog.UpdateDesc = (infolog.UpdateDesc ?? "") + $"设备状态变更为{((EnumEquipmentCurrentStateDisplay)int.Parse(state)).ToString()}\r\n";
isAddEquipmentWorkingLog = true;
}
}
if (isAddEquipmentWorkingLog)
{
db.EquipmentWorkingLog.Add(infolog);
}
if (isAddEquipmentCurrentMonitor)
{
info.Id = Yitter.IdGenerator.YitIdHelper.NextId();
db.EquipmentCurrentMonitor.Add(info);
}
db.SaveChanges();
}
}
public static void ThreadMonitor(ThreadStatusMonitorMiddle threadinfo)
{
ThreadMonitor(EntityPropHelper.Mapper(threadinfo));
try
{
SystemValue.UpdateMainList(threadinfo);
}
catch (Exception ex)
{
}
}
public static void ThreadMonitor(ThreadStatusMonitor threadinfo)
{
try
{
using (DbModel db = new DbModel())
{
var info = db.ThreadStatusMonitor.Where(o => o.Threadcode == threadinfo.Threadcode).FirstOrDefault();
if (info == null || info.Id == 0)
{//没有工件信息,不做更新
threadinfo.Id = Yitter.IdGenerator.YitIdHelper.NextId();
threadinfo.CreatedTime = DateTimeHelper.GetDateTime();
threadinfo.CreatedUserName = threadinfo.Threadcode;
db.ThreadStatusMonitor.Add(threadinfo);
}
else
{//更新表WorkPieceInfo
info.Remarks = threadinfo.Remarks;
info.ErrorMsg = threadinfo.ErrorMsg;
info.Threadendtime = DateTimeHelper.GetDateTime();//每次都更新
info.ThreadId = threadinfo.ThreadId;
info.ThreadFrequency = threadinfo.ThreadFrequency;
info.UpdatedTime = DateTimeHelper.GetDateTime();
info.UpdatedUserName = threadinfo.Threadcode;
info.Threadlastmodifytime = threadinfo.Threadlastmodifytime > DateTime.MinValue ? threadinfo.Threadlastmodifytime : info.Threadlastmodifytime;//如果有传参则更新
//if (info.Threadstatue==1)
//{
// info.Threadlastmodifytime = DateTimeHelper.GetDateTime();//最新跑到数据
//}
}
db.SaveChanges();
}
}
catch (Exception ex)
{
}
}
#region 业务方法
///
/// 【质量数据更新专用】 dict中前面一个是原对象,后面一个是目标对象
///
///
///
public static Dictionary GetQualityDataInfoUpdate(WorkPieceLogMiddle logMiddle, string WorkingProcedure = "", string MonitoringPoint = "")
{
Dictionary dict = new Dictionary();
dict.Add("QualityState", "QualityState");
dict.Add("EquipmentID", "EquipmentID");
dict.Add("WorkingProcedure", "WorkingProcedure");
dict.Add("QualityStateUpdateMode", "QualityStateUpdateMode");
dict.Add("QualityStateUpdateUser", "QualityStateUpdateUser");
dict.Add("OfflineTime", "OfflineTime");
switch (WorkingProcedure)
{
case "OP10":
dict.Add("QualityOP10To1", "QualityOP10To1");
dict.Add("QualityNoOk", "QualityNoOk_OP10");
dict.Add("QualityNoOkReason", "QualityNoOkReason_OP10");
break;
case "OP20":
dict.Add("QualityOP20To1", "QualityOP20To1");
dict.Add("QualityNoOk", "QualityNoOk_OP20");
dict.Add("QualityNoOkReason", "QualityNoOkReason_OP20");
break;
case "OP30":
dict.Add("QualityNoOk", "QualityNoOk_OP30");
dict.Add("QualityNoOkReason", "QualityNoOkReason_OP30");
switch (MonitoringPoint)
{
case "OP3002CH3":
dict.Add("QualityOP30To1", "QualityOP30To1");
break;
case "OP3002CH4":
dict.Add("QualityOP30To2", "QualityOP30To2");
dict.Add("QualityOP30To8", "QualityOP30To8");
break;
case "OP3002CH5":
dict.Add("QualityOP30To3", "QualityOP30To3");
dict.Add("QualityOP30To4", "QualityOP30To4");
dict.Add("QualityOP30To5", "QualityOP30To5");
dict.Add("QualityOP30To9", "QualityOP30To9");
dict.Add("QualityOP30To10", "QualityOP30To10");
dict.Add("QualityOP30To11", "QualityOP30To11");
break;
case "OP3002CH6":
dict.Add("QualityOP30To6", "QualityOP30To6");
dict.Add("QualityOP30To7", "QualityOP30To7");
break;
default:
break;
}
break;
case "OP35":
dict.Add("QualityOP35To1", "QualityOP35To1");
dict.Add("QualityOP35To2", "QualityOP35To2");
dict.Add("QualityNoOk", "QualityNoOk_OP35");
dict.Add("QualityNoOkReason", "QualityNoOkReason_OP35");
break;
case "OP40":
dict.Add("QualityOP40To1", "QualityOP40To1");
dict.Add("QualityNoOk", "QualityNoOk_OP40");
dict.Add("QualityNoOkReason", "QualityNoOkReason_OP40");
break;
case "OP60":
dict.Add("QualityOP60To1", "QualityOP60To1");
dict.Add("QualityOP60To2", "QualityOP60To2");
dict.Add("QualityNoOk", "QualityNoOk_OP60");
dict.Add("QualityNoOkReason", "QualityNoOkReason_OP60");
break;
case "OP70":
dict.Add("QualityOP70To1", "QualityOP70To1");
dict.Add("QualityOP70To2", "QualityOP70To2");
dict.Add("QualityOP70To3", "QualityOP70To3");
break;
case "OP80":
//dict.Add("OP80NewCode", "OP80NewCode");
dict.Add("QualityOP80To1", "QualityOP80To1");
dict.Add("QualityOP80To2", "QualityOP80To2");
dict.Add("QualityOP80To3", "QualityOP80To3");
dict.Add("QualityOP80To4", "QualityOP80To4");
dict.Add("QualityOP80To5", "QualityOP80To5");
dict.Add("QualityOP80To6", "QualityOP80To6");
dict.Add("QualityOP80To7", "QualityOP80To7");
dict.Add("QualityOP80To8", "QualityOP80To8");
dict.Add("QualityOP80To9", "QualityOP80To9");
dict.Add("QualityOP80To10", "QualityOP80To10");
//新增 【Editby shaocx,2024-06-16】
dict.Add("QualityOP80_Houdu", "QualityOP80_Houdu");
dict.Add("QualityOP80_ZXJ", "QualityOP80_ZXJ");
dict.Add("QualityOP80_DTKYZD", "QualityOP80_DTKYZD");
dict.Add("QualityOP80_XTSMYD", "QualityOP80_XTSMYD");
dict.Add("QualityOP80_XTXMYD", "QualityOP80_XTXMYD");
dict.Add("QualityOP80_D_TKZJ", "QualityOP80_D_TKZJ");
dict.Add("QualityOP80_D_S_X", "QualityOP80_D_S_X");
dict.Add("QualityOP80_D_S_Y", "QualityOP80_D_S_Y");
dict.Add("QualityOP80_D_X_X", "QualityOP80_D_X_X");
dict.Add("QualityOP80_D_X_Y", "QualityOP80_D_X_Y");
dict.Add("QualityOP80_X_TKZJ", "QualityOP80_X_TKZJ");
dict.Add("QualityOP80_X_S_X", "QualityOP80_X_S_X");
dict.Add("QualityOP80_X_S_Y", "QualityOP80_X_S_Y");
dict.Add("QualityOP80_X_X_X", "QualityOP80_X_X_X");
dict.Add("QualityOP80_X_X_Y", "QualityOP80_X_X_Y");
dict.Add("QualityNoOk", "QualityNoOk_OP80");
dict.Add("QualityNoOkReason", "QualityNoOkReason_OP80");
break;
default:
break;
}
return dict;
}
///
/// 【工件或工序数据数据更新专用】 dict中前面一个是原对象,后面一个是目标对象
///
///
///
public static Dictionary GetWorkPieceInfoUpdateForQualityNoOk(WorkPieceLogMiddle loginfo)
{
Dictionary dict = new Dictionary();
//if (loginfo.QualityState != null)
//{
// QualityState qualityState;
// bool isRight = Enum.TryParse(loginfo.QualityState.ToString(), out qualityState);
// if (isRight && (qualityState == QualityState.NG || qualityState == QualityState.Suspected))
// {
// }
//}
dict.Add("QualityNoOk", "QualityNoOk");
dict.Add("QualityNoOkReason", "QualityNoOkReason");
return dict;
}
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;
}
///
/// 是否需要重写 NOOK原因
///
///
///
///
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;
}
///
/// 判断是否跳序
///
///
///
public static bool CheckQualityInfoComplete(WorkPieceInfo info, WorkPieceLog loginfo, LogType type)
{
//判断是否跳序
if (info == null || info.WorkPieceID.Length < 1)
{
Log4NetHelper.WriteErrorLog(type, $"校验工件信息{loginfo.WorkPieceID}工序是否跳序时,传入工件信息异常");
return true;//没取到工件信息,不做判断是否跳序
}
else
{
try
{
string wproStr = info.WorkingProcedureCurrent + loginfo.WorkingProcedure;
if (wproStr.Length != 8)
{
Log4NetHelper.WriteErrorLog(type, $"校验工件{info.WorkPieceID} {loginfo.WorkingProcedure}工序 是否跳序时,工序拼接有问题长度不为8位:{wproStr}");
return true;//工序拼接有问题
}
if (!ConfigHelper.GetConfigString("WorkingProcedureAllStr").Contains(wproStr))
{
Log4NetHelper.WriteErrorLog(type, $"校验工件{info.WorkPieceID} {loginfo.WorkingProcedure}工序 出现跳序,请设备注意:{wproStr}");
return false;
}
}
catch (Exception ex)
{
Log4NetHelper.WriteErrorLog(type, $"校验工件{info.WorkPieceID} {loginfo.WorkingProcedure}工序 是否跳序时出现异常", ex);
}
}
return true;
//using (var trans = db.Database.BeginTransaction())
//{ }
//var conStr = @"server=localhost;Database=EFDBO1;User ID=sa;Password=123456;";
//using (var connection = new SqlConnection(conStr))
//{
// connection.Open();
// using (var scope = new Transactionscope())
// {
// //AD0.Net
// var command = connection.CreateCommand();
// command.CommandText = "DELETE FROM T_RoleInfor";
// command.ExecuteNonQuery();
// //综合提交
// scope.complete();
// }
//}
}
///
/// 解析二维码
///
///
///
public static WorkPieceInfo ParseQRCode(WorkPieceInfo loginfo)
{
if (string.IsNullOrEmpty(loginfo.WorkPieceID) || loginfo.WorkPieceID.Length != 22)
{
return loginfo;
}
loginfo.WorkPieceIDTo1 = loginfo.WorkPieceID.Substring(0, 2);
loginfo.WorkPieceIDTo2 = loginfo.WorkPieceID.Substring(2, 4);
loginfo.WorkPieceIDTo3 = loginfo.WorkPieceID.Substring(6, 6);
loginfo.WorkPieceIDTo4 = loginfo.WorkPieceID.Substring(12, 2);
loginfo.WorkPieceIDTo5 = loginfo.WorkPieceID.Substring(14, 4);
loginfo.WorkPieceIDTo6 = loginfo.WorkPieceID.Substring(18, 2);
loginfo.WorkPieceIDTo7 = loginfo.WorkPieceID.Substring(20, 2);
return loginfo;
}
///
/// 设置中间变量的质量数据
///
///
public static void SetLogMiddleForQuality(ref WorkPieceLogMiddle logMiddle)
{
logMiddle.QualityState = (int)((logMiddle.QualityStateStr.Equals("OK") || logMiddle.QualityStateStr.Equals("0K")) ? QualityStateEnum.OK : QualityStateEnum.NG);
//根据质量数据判断是否合格/不合格 【Editby shaocx,2024-06-25】
QualityNoOkEnum? qualityNoOkEnum = null;
QualityStateEnum qualityState = WorkPieceInfoManager.CalcQualityStateForOP(logMiddle, ref qualityNoOkEnum);
logMiddle.QualityState = (int)qualityState;
logMiddle.QualityStateStr = qualityState.ToString();
if (qualityNoOkEnum != null)
{
logMiddle.QualityNoOk = (int)qualityNoOkEnum;
logMiddle.QualityNoOkReason = qualityNoOkEnum.ToString();
}
}
///
/// 计算OP 质量数据是否合格
///
private static QualityStateEnum CalcQualityStateForOP(WorkPieceLogMiddle logMiddle, ref QualityNoOkEnum? qualityNoOkEnum)
{
QualityStateEnum qualityState = QualityStateEnum.Suspected;
if (logMiddle.WorkingProcedure == "OP60")
{//合格/不合格由 WMS自行判断
decimal _QualityOP60To1 = SystemHelper.GetDecimal(logMiddle.QualityOP60To1);
decimal _QualityOP60To2 = SystemHelper.GetDecimal(logMiddle.QualityOP60To2);
var isPass_QualityOP60To1 = false;
var isPass_QualityOP60To2 = false;
if (_QualityOP60To1 >= (decimal)53.018 && _QualityOP60To1 <= (decimal)53.030)
{
isPass_QualityOP60To1 = true;
}
else
{
qualityNoOkEnum = QualityNoOkEnum.OP60大头孔直径超差;
}
if (_QualityOP60To2 >= (decimal)22.005 && _QualityOP60To2 <= (decimal)22.011)
{
isPass_QualityOP60To2 = true;
}
else
{
qualityNoOkEnum = QualityNoOkEnum.OP60小头孔直径超差;
}
if (isPass_QualityOP60To1 && isPass_QualityOP60To2)
{
qualityState = QualityStateEnum.OK;
}
else
{
qualityState = QualityStateEnum.NG;
}
if (_QualityOP60To1 == 0 || _QualityOP60To2 == 0)
{
qualityState = QualityStateEnum.Suspected;
return qualityState;
}
return qualityState;
}
else if (logMiddle.WorkingProcedure == "OP80")
{//合格/不合格由 OP80 判断,QualityState 和 QualityStateStr 都在调用当前方法前 写入值了
if (logMiddle.QualityState == (int)QualityStateEnum.OK)
{
qualityState = QualityStateEnum.OK;
return qualityState;
}
decimal _QualityOP80_D_TKZJ = SystemHelper.GetDecimal(logMiddle.QualityOP80_D_TKZJ);
if (!(_QualityOP80_D_TKZJ >= (decimal)53.018 && _QualityOP80_D_TKZJ <= (decimal)53.03))
{
qualityNoOkEnum = QualityNoOkEnum.OP80大头孔直径超差;
}
decimal _QualityOP80_X_TKZJ = SystemHelper.GetDecimal(logMiddle.QualityOP80_X_TKZJ);
if (!(_QualityOP80_X_TKZJ >= (decimal)22.005 && _QualityOP80_X_TKZJ <= (decimal)22.011))
{
qualityNoOkEnum = QualityNoOkEnum.OP80小头孔直径超差;
}
decimal _QualityOP80_ZXJ = SystemHelper.GetDecimal(logMiddle.QualityOP80_ZXJ);
if (!(_QualityOP80_ZXJ >= (decimal)144.475 && _QualityOP80_ZXJ <= (decimal)144.525))
{
qualityNoOkEnum = QualityNoOkEnum.OP80中心距超差;
}
decimal _QualityOP80_DTKYZD = SystemHelper.GetDecimal(logMiddle.QualityOP80_DTKYZD);
if (!(_QualityOP80_DTKYZD >= (decimal)0 && _QualityOP80_DTKYZD <= (decimal)0.005))
{
qualityNoOkEnum = QualityNoOkEnum.OP80大头孔圆柱度超差;
}
decimal _QualityOP80_XTSMYD = SystemHelper.GetDecimal(logMiddle.QualityOP80_XTSMYD);
if (!(_QualityOP80_XTSMYD >= (decimal)0 && _QualityOP80_XTSMYD <= (decimal)0.003))
{
qualityNoOkEnum = QualityNoOkEnum.OP80小头孔圆度上面超差;
}
decimal _QualityOP80_XTXMYD = SystemHelper.GetDecimal(logMiddle.QualityOP80_XTXMYD);
if (!(_QualityOP80_XTXMYD >= (decimal)0 && _QualityOP80_XTXMYD <= (decimal)0.003))
{
qualityNoOkEnum = QualityNoOkEnum.OP80小头孔圆度下面超差;
}
decimal _QualityOP80To4 = SystemHelper.GetDecimal(logMiddle.QualityOP80To4);
if (!(_QualityOP80To4 >= (decimal)(-0.075) && _QualityOP80To4 <= (decimal)0.075))
{
qualityNoOkEnum = QualityNoOkEnum.OP80小头孔平行度弯曲超差;
}
decimal _QualityOP80To5 = SystemHelper.GetDecimal(logMiddle.QualityOP80To5);
if (!(_QualityOP80To5 >= (decimal)(-0.2) && _QualityOP80To5 <= (decimal)0.2))
{
qualityNoOkEnum = QualityNoOkEnum.OP80小头孔平行度扭曲超差;
}
decimal _QualityOP80To6 = SystemHelper.GetDecimal(logMiddle.QualityOP80To6);
if (!(_QualityOP80To6 >= (decimal)0 && _QualityOP80To6 <= (decimal)0.04))
{
qualityNoOkEnum = QualityNoOkEnum.OP80大头孔垂直度超差;
}
decimal _QualityOP80To10 = SystemHelper.GetDecimal(logMiddle.QualityOP80To10);
if (!(_QualityOP80To10 >= (decimal)0 && _QualityOP80To10 <= (decimal)0.04))
{
qualityNoOkEnum = QualityNoOkEnum.OP80小头孔垂直度超差;
}
decimal _QualityOP80_Houdu = SystemHelper.GetDecimal(logMiddle.QualityOP80_Houdu);
if (!(_QualityOP80_Houdu >= (decimal)21.80 && _QualityOP80_Houdu <= (decimal)21.85))
{
qualityNoOkEnum = QualityNoOkEnum.OP80厚度超差;
}
decimal _QualityOP80To1 = SystemHelper.GetDecimal(logMiddle.QualityOP80To1);
if (!(_QualityOP80To1 >= (decimal)364 && _QualityOP80To1 <= (decimal)385))
{
qualityNoOkEnum = QualityNoOkEnum.OP80大头端重量超差;
}
decimal _QualityOP80To2 = SystemHelper.GetDecimal(logMiddle.QualityOP80To2);
if (!(_QualityOP80To2 >= (decimal)143 && _QualityOP80To2 <= (decimal)155))
{
qualityNoOkEnum = QualityNoOkEnum.OP80小头端重量超差;
}
return qualityState;
}
else if (logMiddle.WorkingProcedure == "OP10")
{//合格/不合格由 QualityStateStr值判断
if (logMiddle.QualityState == (int)QualityStateEnum.NG)
{
qualityNoOkEnum = QualityNoOkEnum.OP10厚度超差;
}
else
{
qualityState = QualityStateEnum.OK;
}
return qualityState;
}
else if (logMiddle.WorkingProcedure == "OP20")
{//合格/不合格由 QualityStateStr值判断
if (logMiddle.QualityState == (int)QualityStateEnum.NG)
{
qualityNoOkEnum = QualityNoOkEnum.OP20小头孔直径超差;
}
else
{
qualityState = QualityStateEnum.OK;
}
return qualityState;
}
else if (logMiddle.WorkingProcedure == "OP30")
{//合格/不合格由 QualityStateStr值判断
if (logMiddle.QualityStateStr.Equals("OK"))
{
qualityState = QualityStateEnum.OK;
}
else
{
qualityState = QualityStateEnum.NG;
}
return qualityState;
}
else if (logMiddle.WorkingProcedure == "OP35")
{//合格/不合格由 QualityStateStr值判断
if (logMiddle.QualityState == (int)QualityStateEnum.NG)
{
qualityNoOkEnum = QualityNoOkEnum.OP35滚压力超差;
}
else
{
qualityState = QualityStateEnum.OK;
}
return qualityState;
}
else if (logMiddle.WorkingProcedure == "OP40")
{//合格/不合格由 QualityStateStr值判断
if (logMiddle.QualityState == (int)QualityStateEnum.NG)
{
qualityNoOkEnum = QualityNoOkEnum.OP40厚度超差;
}
else
{
qualityState = QualityStateEnum.OK;
}
return qualityState;
}
return qualityState;
}
///
/// 获取质量状态值
///
///
///
public static int GetQualityStateValue(int? qualityState)
{
if (qualityState.HasValue == false)
{
return (int)QualityStateEnum.Suspected;
}
if (qualityState.Value == 1)
{
return (int)QualityStateEnum.OK;
}
if (qualityState.Value == 2)
{
return (int)QualityStateEnum.NG;
}
return (int)QualityStateEnum.Suspected;
}
#endregion
}
}