schangxiang@126.com
2025-01-08 4e475294999e7053036cc162de388010f6ee3132
DataCapture/iWare_SCADA_DataCapture/iWare_SCADA_BusinessLogical/BLL/WorkPieceInfoManager.cs
@@ -642,13 +642,10 @@
                            {//自动运行状态+下料道满料 =  完成 (就是有生产出来但没有出设备)
                                State = ((int)EnumEquipmentCurrentStateDisplay.完成).ToString();
                            }
                            //else if (loginfo.IsNormalProduction && loginfo.LackMaterial)
                            //{//其他状态全算待机
                            //    State = ((int)EnumEquipmentCurrentStateDisplay.待机).ToString();
                            //}
                            else
                            {//其他状态全算待机
                                State = ((int)EnumEquipmentCurrentStateDisplay.待机).ToString();
                                CommonHandleEnumEquipmentCurrentState(db, info, ref State); //公共处理 设备当前状态 [Editby shaocx,2025-01-07]
                            }
                        }
                    }
@@ -735,164 +732,7 @@
                            equlogalert.WarnEndTime = DateTimeHelper.GetDateTime();
                        }
                    }
                    #region 原来的代码,以后删掉
                    //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;
                    //if (loginfo.ischeckAlertStatus)
                    //{//告警状态发生变更
                    //    //说明是一个新告警,需要更新设备监控表
                    //    //查找未结束的告警
                    //    var equlog = db.EquipmentWorkingLog.Where(o => o.EquipmentID == loginfo.EquipmentID
                    //    && o.FailureStartTime != null && o.FailureStartTime != DateTime.MinValue)
                    //        .OrderByDescending(o=>o.FailureStartTime).FirstOrDefault();
                    //    if (loginfo.IsCloseAlert)
                    //    {
                    //        if (equlog == null|| (equlog.FailureEndTime!=null&& equlog.FailureEndTime > DateTime.MinValue))
                    //        {
                    //            info.AlertTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                    //            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";
                    //            isAddEquipmentWorkingLog =true;
                    //        }
                    //    }
                    //    else
                    //    {
                    //        if (equlog != null && (equlog.FailureEndTime == null || equlog.FailureEndTime <= DateTime.MinValue))
                    //        {//告警关闭的,若没有告警信息,不用管
                    //            equlog.MonitoringPoint = loginfo.MonitoringPoint;
                    //            equlog.FailureEndTime = DateTimeHelper.GetDateTime();
                    //        }
                    //    }
                    //}
                    //if (loginfo.ischeckMessageStatus)
                    //{//告警状态发生变更
                    //    //说明是一个新告警,需要更新设备监控表
                    //    //查找未结束的告警
                    //    var equlog = db.EquipmentWorkingLog.Where(o => o.EquipmentID == loginfo.EquipmentID
                    //    && o.WarnStartTime != null && o.WarnStartTime != DateTime.MinValue).OrderByDescending(o => o.WarnStartTime).FirstOrDefault();
                    //    if (loginfo.IsMessage)
                    //    {
                    //        if (equlog == null || (equlog.WarnEndTime != null && equlog.WarnEndTime > DateTime.MinValue))
                    //        {
                    //            info.WarnTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
                    //            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";
                    //            isAddEquipmentWorkingLog = true;
                    //        }
                    //    }
                    //    else
                    //    {
                    //        if (equlog != null && (equlog.WarnEndTime == null || equlog.WarnEndTime <= DateTime.MinValue))
                    //        {//告警关闭的,若没有告警信息,不用管
                    //            equlog.MonitoringPoint = loginfo.MonitoringPoint;
                    //            equlog.WarnEndTime = DateTimeHelper.GetDateTime();
                    //        }
                    //    }
                    //}
                    ////故障》警告》其他
                    //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.IsNormalProduction&& loginfo.LackMaterial)
                    //    {
                    //        State = ((int)EnumEquipmentCurrentStateDisplay.待机).ToString();
                    //    }
                    //    else if(loginfo.IsNormalProduction && !loginfo.LackMaterial)
                    //    {
                    //        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)
                    //{//只有状态出现变化才变更
                    //    info.UpdatedUserName = loginfo.MonitoringPoint;
                    //    info.UpdatedTime = DateTime.Now;
                    //    info.EquipmentCurrentState = State;
                    //    var equlog = db.EquipmentWorkingLog.Where(o => o.EquipmentID == loginfo.EquipmentID
                    //    && o.EquipmentStateStartTime != null && o.EquipmentStateStartTime != DateTime.MinValue).OrderByDescending(o => o.EquipmentStateStartTime).FirstOrDefault();
                    //    if (equlog != null && (equlog.EquipmentStateEndTime == null || equlog.EquipmentStateEndTime <= DateTime.MinValue))
                    //    {
                    //        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 = "告警信息出现变更3";
                    //    infolog.UpdateDesc = (infolog.UpdateDesc ?? "") + $"设备状态变更为{((EnumEquipmentCurrentStateDisplay)int.Parse(State)).ToString()}\r\n";
                    //    isAddEquipmentWorkingLog = true;
                    //}
                    ////info.Remarks = $"{loginfo.WorkingProcedure}工序告警";
                    #endregion
                    if (isAddEquipmentCurrentMonitor)
                    {
                        info.Id = Yitter.IdGenerator.YitIdHelper.NextId();
@@ -916,6 +756,45 @@
        /// <summary>
        /// 公共处理 设备当前状态
        /// </summary>
        /// <param name="db"></param>
        /// <param name="info"></param>
        /// <param name="state"></param>
        private static void CommonHandleEnumEquipmentCurrentState(DbModel db, EquipmentCurrentMonitor info, ref string state)
        {
            try
            {
                //如果是OP35,则处理,如果不是,则不处理
                var query_WorkingProcedure = "OP35";
                if (info.WorkingProcedure == query_WorkingProcedure)
                {
                    var quereyCreateTime = DateTime.Now.AddMinutes(-5);
                    //判断10分钟之内 ,只进 不出
                    var num = db.WorkPieceProcess.Where(o => o.WorkingProcedureCurrent == query_WorkingProcedure
                      && (o.EndTime == null || o.EndTime <= DateTime.MinValue)
                      && o.CreatedTime >= quereyCreateTime
                      ).Count();
                    if (num > 0)
                    {
                        state = ((int)EnumEquipmentCurrentStateDisplay.生产).ToString();
                        return;
                    }
                }
                else
                {
                    return;
                }
                return;
            }
            catch (Exception)
            {
                return;
            }
        }
        /// <summary>
        /// 心跳监控
        /// </summary>
        /// <param name="loginfo"></param>