コード例 #1
0
        private void getdt(DateTime nowtime)
        {
            DataRow[]  rows = null;
            DataRow    row = null, r = null;
            TimeSpan   span;
            string     point = "", ssz1, ssz2;
            double     ssz, zdz, zxz, pjz, allvlaue;
            int        zt = -1;
            DataTable  dt = showdt.Clone();
            List <int> fzh;
            int        x = -1, y = -1, count = 0, toprowindex = 0;
            long       temp = 0;

            string[]        kdid1;
            Jc_BInfo        tempobj    = null;
            bool            updateflag = true;
            List <Jc_BInfo> endkdlist  = new List <Jc_BInfo>();
            Jc_BInfo        lb         = new Jc_BInfo();
            string          nt         = string.Empty;

            try
            {
                #region  模拟量信息
                lock (StaticClass.allPointDtLockObj)
                {
                    rows = StaticClass.AllPointDt.Select("lx='开关量' ", "fzh,tdh,dzh");

                    //modified by  20170315
                    //在调试代码时,发现此select返回的行,第一行有时有为null的情况(估计是datatable读写并发引起返回为空行记录,临时通过特殊处理空行记录),
                    if (rows != null && rows.Length > 0)
                    {
                        List <DataRow> list = new List <DataRow>();
                        foreach (DataRow dr in rows)
                        {
                            if (dr != null) //移除空行
                            {
                                list.Add(dr);
                            }
                        }
                        rows = list.ToArray();
                    }

                    if (rows.Length > 0)
                    {
                        DataTable dt1 = rows.CopyToDataTable();
                        #region  除已结束的报警
                        lock (objShowDt)
                        {
                            for (int i = 0; i < showdt.Rows.Count; i++)
                            {
                                rows = dt1.Select("point='" + showdt.Rows[i]["point"].ToString() + "'");
                                if (rows.Length > 0)
                                {
                                    #region 刷新实时值、最大值、最小值、平均值
                                    point = showdt.Rows[i]["point"].ToString();
                                    ssz2  = showdt.Rows[i]["ssz"].ToString();
                                    ssz1  = rows[0]["ssz"].ToString();
                                    if (ssz1 != ssz2)
                                    {
                                        showdt.Rows[i]["ssz"]     = ssz1;
                                        showdt.Rows[i]["state"]   = OprFuction.StateChange(rows[0]["zt"].ToString());
                                        showdt.Rows[i]["sbstate"] = OprFuction.StateChange(rows[0]["sbzt"].ToString());
                                        showdt.Rows[i]["stime"]   = OprFuction.TimeToString(DateTime.Parse(rows[0]["time"].ToString()));
                                        showdt.Rows[i]["time"]    = OprFuction.TimeToString(DateTime.Parse(rows[0]["time"].ToString()));
                                    }
                                    #endregion

                                    lock (StaticClass.bjobj)
                                    {
                                        var bjobj = StaticClass.jcbdata.Values.Where(pp => pp.Point == showdt.Rows[i]["point"].ToString() && (
                                                                                         (OprFuction.KGLisAlarm(pp) || !string.IsNullOrEmpty(pp.Kzk))) && (OprFuction.IsInitTime(pp.Etime))).OrderByDescending(pp => pp.Stime).FirstOrDefault();
                                        if (bjobj != null && !string.IsNullOrEmpty(bjobj.Point))
                                        {
                                            if (OprFuction.KGLisAlarm(bjobj))
                                            {
                                                if (showdt.Rows[i]["bjtime"] != null && showdt.Rows[i]["bjtime"].ToString() != "报警/" + OprFuction.TimeToString(bjobj.Etime))
                                                {
                                                    showdt.Rows[i]["bjtime"] = "报警/" + OprFuction.TimeToString(bjobj.Stime);
                                                }
                                            }
                                            else
                                            {
                                                if (showdt.Rows[i]["bjtime"] != null && showdt.Rows[i]["bjtime"].ToString() != "断电/" + OprFuction.TimeToString(bjobj.Stime))
                                                {
                                                    showdt.Rows[i]["bjtime"] = "断电/" + OprFuction.TimeToString(bjobj.Stime);
                                                }
                                            }

                                            if (!string.IsNullOrEmpty(bjobj.Kzk))
                                            {
                                                string[] kzk  = bjobj.Kzk.Split('|');
                                                string   kzqy = "";
                                                if (kzk.Length > 0)
                                                {
                                                    for (int k = 0; k < kzk.Length; k++)
                                                    {
                                                        lock (StaticClass.allPointDtLockObj)
                                                        {
                                                            DataRow[] row1 = StaticClass.AllPointDt.Select("point='" + kzk[i] + "'");
                                                            if (row1.Length > 0)
                                                            {
                                                                kzqy = kzqy + kzk[i] + "(" + row1[0]["wz"] + ")|";
                                                            }
                                                        }
                                                    }
                                                }
                                                if (kzqy.Length > 1)
                                                {
                                                    kzqy = kzqy.Substring(0, kzqy.Length - 1);
                                                }
                                                showdt.Rows[i]["ddqy"] = kzqy;
                                            }
                                            else
                                            {
                                                showdt.Rows[i]["ddqy"] = "";
                                            }


                                            if (showdt.Rows[i]["cstime"] != null && showdt.Rows[i]["cstime"].ToString() != bjobj.Cs + "/" + bjobj.Bz2)
                                            {
                                                showdt.Rows[i]["cstime"] = bjobj.Cs + "/" + bjobj.Bz2;
                                            }

                                            if (!string.IsNullOrEmpty(bjobj.Kdid))
                                            {
                                                if (null != showdt.Rows[i]["kdid"])
                                                {
                                                    if (showdt.Rows[i]["kdid"].ToString() != bjobj.Kdid)
                                                    {
                                                        #region 修改馈电
                                                        kdid1 = bjobj.Kdid.Split(',');
                                                        lock (StaticClass.bjobj)
                                                        {
                                                            try
                                                            {
                                                                for (int z = 0; z < kdid1.Length; z++)
                                                                {
                                                                    if (!string.IsNullOrEmpty(kdid1[z]))
                                                                    {
                                                                        temp = long.Parse(kdid1[z]);
                                                                        if (StaticClass.jcbdata.ContainsKey(temp))
                                                                        {
                                                                            tempobj = StaticClass.jcbdata[temp];
                                                                            showdt.Rows[i]["kdtime"] = OprFuction.StateChange(tempobj.Type.ToString()) + "/" + tempobj.Stime;
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                            catch (Exception ex)
                                                            {
                                                                Basic.Framework.Logging.LogHelper.Error(ex);
                                                            }
                                                        }
                                                        showdt.Rows[i]["kdid"] = bjobj.Kdid;
                                                        #endregion
                                                    }
                                                    else
                                                    {
                                                        updateflag = true;
                                                        kdid1      = bjobj.Kdid.Split(',');
                                                        for (int z = 0; z < kdid1.Length; z++)
                                                        {
                                                            if (!string.IsNullOrEmpty(kdid1[z]))
                                                            {
                                                                temp = long.Parse(kdid1[z]);
                                                                if (StaticClass.jcbdata.ContainsKey(temp))
                                                                {
                                                                    tempobj = StaticClass.jcbdata[temp];
                                                                    endkdlist.Add(tempobj);
                                                                    if (OprFuction.IsInitTime(tempobj.Etime))
                                                                    {
                                                                        updateflag = false;
                                                                    }
                                                                }
                                                            }
                                                        }
                                                        if (updateflag)
                                                        {
                                                            lb = endkdlist.OrderByDescending(pp => pp.Etime).First();
                                                            if (lb.Type == (short)DeviceDataState.DataPowerOffFail)
                                                            {
                                                                nt = ((short)DeviceDataState.DataPowerOffSuc).ToString();
                                                            }
                                                            else if (lb.Type == (short)DeviceDataState.DataPowerOnFail)
                                                            {
                                                                nt = ((short)DeviceDataState.DataPowerOnSuc).ToString();
                                                            }
                                                            showdt.Rows[i]["kdtime"] = OprFuction.StateChange(nt) + "/" + lb.Etime;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        else
                                        {
                                            showdt.Rows[i]["bjtime"] = "";
                                            showdt.Rows[i]["ddqy"]   = "";
                                            showdt.Rows[i]["kdtime"] = "";
                                            showdt.Rows[i]["cstime"] = "";
                                        }
                                    }
                                }
                                else
                                {
                                    showdt.Rows.RemoveAt(i);
                                    i--;
                                }
                            }
                        }
                        #endregion

                        #region 添加新的报警
                        lock (objShowDt)
                        {
                            for (int kj = 0; kj < dt1.Rows.Count; kj++)
                            {
                                r    = dt1.Rows[kj];
                                rows = showdt.Select("point='" + r["point"].ToString() + "'");
                                {
                                    if (rows.Length > 0)
                                    {
                                        continue;
                                    }
                                }
                                row          = showdt.NewRow();
                                row["point"] = r["point"];
                                row["wz"]    = r["wz"];
                                if (r["zt"].ToString() == StaticClass.itemStateToClient.EqpState7.ToString())
                                {
                                    row["yjz"] = r["sxyj"];
                                }
                                else
                                {
                                    row["yjz"] = r["xxyj"];
                                }
                                row["fzh"]      = r["fzh"] + "/" + r["tdh"] + "/" + r["dzh"];
                                row["ssz"]      = r["ssz"];
                                row["state"]    = OprFuction.StateChange(r["zt"].ToString());
                                row["sbstate"]  = OprFuction.StateChange(r["sbzt"].ToString());
                                row["stime"]    = OprFuction.TimeToString(DateTime.Parse(r["time"].ToString()));
                                row["time"]     = OprFuction.TimeToString(DateTime.Parse(r["time"].ToString()));
                                span            = nowtime - DateTime.Parse(r["time"].ToString());
                                row["cxtime"]   = String.Format("{0:D2}:{1:D2}:{2:D2}:{3:D2}", span.Days, span.Hours, span.Minutes, span.Seconds);
                                row["zdz"]      = r["ssz"];
                                row["zxz"]      = r["ssz"];
                                row["pjz"]      = r["ssz"];
                                row["count"]    = 1;
                                row["allvalue"] = r["ssz"];
                                row["id"]       = 0;
                                row["devname"]  = r["lb"];
                                row["dw"]       = r["dw"];
                                showdt.Rows.InsertAt(row, 0);//添加新记录
                            }
                        }
                        #endregion
                    }
                    else
                    {
                        lock (objShowDt)
                        {
                            showdt.Rows.Clear();
                        }
                    }
                }
                #endregion
            }
            catch (Exception ex)
            {
                Basic.Framework.Logging.LogHelper.Error(ex);
            }
        }
コード例 #2
0
        /// <summary>
        /// 获取新增报警断电信息
        /// </summary>
        public void getdata()
        {
            short       type  = 0;
            int         count = 0;
            long        id    = 0;
            List <long> keylist;
            Jc_BInfo    jcb = null;
            Jc_BInfo    obj = null;

            lock (StaticClass.bjobj)
            {
                try
                {
                    #region 获取报警信息
                    keylist = new List <long>(StaticClass.jcbdata.Keys);
                    for (int i = 0; i < keylist.Count; i++)
                    {
                        if (StaticClass.jcbdata.ContainsKey(keylist[i]))
                        {
                            jcb  = StaticClass.jcbdata[keylist[i]];
                            type = jcb.Type;
                            if (type == 27)
                            {
                            }
                            if (type == StaticClass.itemStateToClient.EqpState24 || type == StaticClass.itemStateToClient.EqpState25 ||
                                type == StaticClass.itemStateToClient.EqpState26)
                            {
                                id = long.Parse(jcb.ID);
                                if (!jc_b.ContainsKey(id) && (OprFuction.KGLisAlarm(jcb) || !string.IsNullOrEmpty(jcb.Kzk)))//增加如果未选择报警,勾选了控制的也进行显示  20170726
                                {
                                    #region 新增报警断电
                                    obj = OprFuction.NewDTO(jcb);
                                    jc_b.Add(id, obj);
                                    addlist.Add(id);
                                    #endregion
                                }
                                else
                                {
                                    #region update 报警 断电
                                    if (jc_b.ContainsKey(id))
                                    {
                                        #region 控制口改变
                                        if (jc_b[id].Kzk != jcb.Kzk)//报警断电结束
                                        {
                                            obj      = OprFuction.NewDTO(jcb);
                                            jc_b[id] = obj;
                                            addlist.Add(id);
                                        }
                                        #endregion

                                        if (OprFuction.IsInitTime(jc_b[id].Etime) &&
                                            !OprFuction.IsInitTime(jcb.Etime) ||
                                            jc_b[id].Kdid != jcb.Kdid)//报警断电结束
                                        {
                                            obj = OprFuction.NewDTO(jcb);
                                            if (jc_b[id].Kdid != jcb.Kdid)//馈电改变
                                            {
                                                kdlist.Add(id);
                                            }
                                            jc_b[id] = obj;
                                            updatelist.Add(id);
                                        }
                                        else if (jc_b[id].Cs != jcb.Cs)//措施改变//&& !OprFuction.GetClientType() 注释  20170817
                                        {
                                            obj      = OprFuction.NewDTO(jcb);
                                            jc_b[id] = obj;
                                            updatelist.Add(id);
                                        }
                                        //else if (jc_b[id].Isalarm != jcb.Isalarm)
                                        //{
                                        //    //2017.7.14 by
                                        //    obj = OprFuction.NewDTO(jcb);
                                        //    jc_b[id] = obj;
                                        //    updatelist.Add(id);
                                        //}
                                        else//无变化,直接更新结束时间  20170627
                                        {
                                            updatelist.Add(id);
                                        }
                                    }
                                    #endregion
                                }
                            }
                        }
                    }
                    #region 判断报警断电是否还存在
                    foreach (long key in jc_b.Keys)
                    {
                        if (!StaticClass.jcbdata.ContainsKey(key) || (StaticClass.jcbdata[key].Isalarm == 0 && string.IsNullOrEmpty(StaticClass.jcbdata[key].Kzk)))//如果用户取消报警(只有报警,没有控制时,可取消),此时数据处理会将标记置成正常,客户端显示的时候也取消报警  20170627
                        {
                            deletelist.Add(key);
                        }
                    }
                    #endregion
                    #endregion
                }
                catch (Exception ex)
                {
                    Basic.Framework.Logging.LogHelper.Error(ex);
                }
            }
        }