Пример #1
0
        /// <summary>
        /// 验签函数 及通用反馈
        /// </summary>
        /// <param name="filepath"></param>
        /// <param name="PlatformVerifySignatureresule"></param>
        public void DealTarBack(string filepath, out bool PlatformVerifySignatureresule)
        {
            PlatformVerifySignatureresule = false;//验签是否通过
            EBD ebdb = null;

            if (File.Exists(filepath))
            {
                try
                {
                    #region 先删除预处理解压缩包中的文件
                    foreach (string xmlfiledel in Directory.GetFileSystemEntries(ServerForm.strBeUnTarFolder))
                    {
                        if (File.Exists(xmlfiledel))
                        {
                            FileInfo fi = new FileInfo(xmlfiledel);
                            if (fi.Attributes.ToString().IndexOf("ReadOnly") != -1)
                            {
                                fi.Attributes = FileAttributes.Normal;
                            }
                            File.Delete(xmlfiledel);//直接删除其中的文件
                        }
                    }
                    #endregion End
                    ServerForm.tar.UnpackTarFiles(filepath, ServerForm.strBeUnTarFolder);                  //把压缩包解压到专门存放接收到的XML文件的文件夹下
                    string[] xmlfilenames      = Directory.GetFiles(ServerForm.strBeUnTarFolder, "*.xml"); //从解压XML文件夹下获取解压的XML文件名
                    string   sTmpFile          = string.Empty;
                    string   sAnalysisFileName = "";
                    string   sSignFileName     = "";
                    if (SingletonInfo.GetInstance().m_UsbPwsSupport == "1")
                    {
                        if (xmlfilenames.Length < 2)//没有签名文件
                        {
                            PlatformVerifySignatureresule = false;
                        }
                    }

                    for (int i = 0; i < xmlfilenames.Length; i++)
                    {
                        sTmpFile = Path.GetFileName(xmlfilenames[i]);
                        if (sTmpFile.ToUpper().IndexOf("EBDB") > -1 && sTmpFile.ToUpper().IndexOf("EBDS_EBDB") < 0)
                        {
                            sAnalysisFileName = xmlfilenames[i];
                        }
                        else if (sTmpFile.ToUpper().IndexOf("EBDS_EBDB") > -1) //签名文件
                        {
                            sSignFileName = xmlfilenames[i];                   //签名文件
                        }
                    }
                    if (!string.IsNullOrWhiteSpace(sAnalysisFileName))
                    {
                        using (FileStream fsr = new FileStream(sAnalysisFileName, FileMode.Open))
                        {
                            StreamReader sr      = new StreamReader(fsr, Encoding.UTF8);
                            string       xmlInfo = sr.ReadToEnd();
                            xmlInfo = xmlInfo.Replace("xmlns:xs", "xmlns");
                            sr.Close();
                            xmlInfo = XmlSerialize.ReplaceLowOrderASCIICharacters(xmlInfo);
                            xmlInfo = XmlSerialize.GetLowOrderASCIICharacters(xmlInfo);
                            ebdb    = XmlSerialize.DeserializeXML <EBD>(xmlInfo);
                        }
                    }
                    string myEBDType = string.Empty;
                    if (ebdb != null)
                    {
                        myEBDType = ebdb.EBDType;
                    }
                    if (!string.IsNullOrWhiteSpace(sSignFileName) && myEBDType != "ConnectionCheck" && SingletonInfo.GetInstance().m_UsbPwsSupport == "1")
                    {
                        //读取xml中的文件,转换为byte字节
                        byte[] xmlArray = File.ReadAllBytes(sAnalysisFileName);

                        #region 签名处理
                        Console.WriteLine("开始验证签名文件!");
                        using (FileStream SignFs = new FileStream(sSignFileName, FileMode.Open))
                        {
                            StreamReader signsr  = new StreamReader(SignFs, Encoding.UTF8);
                            string       xmlsign = signsr.ReadToEnd();
                            signsr.Close();
                            responseXML signrp     = new responseXML();//签名回复
                            XmlDocument xmlSignDoc = new XmlDocument();
                            try
                            {
                                int nDeviceHandle = (int)ServerForm.mainFrm.phDeviceHandle;
                                xmlsign = XmlSerialize.ReplaceLowOrderASCIICharacters(xmlsign);
                                xmlsign = XmlSerialize.GetLowOrderASCIICharacters(xmlsign);
                                Signature sign = XmlSerialize.DeserializeXML <Signature>(xmlsign);
                                xmlsign = XmlSerialize.ReplaceLowOrderASCIICharacters(xmlsign);
                                xmlsign = XmlSerialize.GetLowOrderASCIICharacters(xmlsign);
                                string PucStr    = sign.SignatureValue;
                                byte[] pucsingVi = Encoding.UTF8.GetBytes(sign.SignatureValue);

                                //0是签名通过
                                var result = ServerForm.mainFrm.usb.PlatformVerifySignature(nDeviceHandle, 1, xmlArray, xmlArray.Length, pucsingVi);
                                PlatformVerifySignatureresule = result == 0;
                                Log.Instance.LogWrite(PlatformVerifySignatureresule ? "签名验证成功" : "签名验证失败-" + result);
                            }
                            catch (Exception ex)
                            {
                                Log.Instance.LogWrite("签名文件错误:" + ex.Message);
                            }
                        }
                        Console.WriteLine("结束验证签名文件!");
                        #endregion End
                    }

                    ServerForm.DeleteFolder(ServerForm.strBeSendFileMakeFolder);//删除原有XML发送文件的文件夹下的XML
                    if (!PlatformVerifySignatureresule && myEBDType != "ConnectionCheck" && SingletonInfo.GetInstance().m_UsbPwsSupport == "1")
                    {
                        //验签失败
                        CurrencyTarBack(ebdb, "4");
                        return;
                    }
                    Console.WriteLine("要解析文件:" + sAnalysisFileName);

                    #region 通用反馈  20181210
                    CurrencyTarBack(ebdb, "1");
                    #endregion

                    if (ebdb != null)
                    {
                        switch (ebdb.EBDType)
                        {
                        case "ConnectionCheck":
                            //要提示系统在线
                            ServerForm.mainFrm.serverFrm.OnlineCheck(true);
                            break;
                        }
                    }
                }
                catch (Exception ep)
                {
                    Log.Instance.LogWrite("验签过程异常:" + ep.Message);
                }
            }
        }
        public void TimingTerminalInfo(int type, string MediaSql)
        {
            DateTime    INow        = DateTime.Now;
            XmlDocument xmlHeartDoc = new XmlDocument();
            responseXML rHeart      = new responseXML();

            rHeart.SourceAreaCode = ServerForm.strSourceAreaCode;
            rHeart.SourceType     = ServerForm.strSourceType;
            rHeart.SourceName     = ServerForm.strSourceName;
            rHeart.SourceID       = ServerForm.strSourceID;
            rHeart.sHBRONO        = ServerForm.strHBRONO;

            string strSRV_ID   = "";
            string strSRV_CODE = "";

            ServerForm.DeleteFolder(ServerForm.sHeartSourceFilePath);//删除原有XML发送文件的文件夹下的XML
            string        frdStateName = "";
            DataTable     dtMedia      = null;
            DataTable     dtSrvMedia   = null;
            List <Device> lDev         = new List <Device>();

            try
            {
                dtMedia = mainForm.dba.getQueryInfoBySQL(MediaSql);

                if (dtMedia.Rows.Count > 0)
                {
                    // MediaSql = "select top(99) SRV_ID,SRV_CODE,SRV_GOOGLE from SRV";

                    if (dtMedia != null && dtMedia.Rows.Count > 0)
                    {
                        for (int idtM = 0; idtM < dtMedia.Rows.Count; idtM++)
                        {
                            int    srvId         = Convert.ToInt32(dtMedia.Rows[idtM]["SRV_ID"].ToString());
                            string TerminalState = dtMedia.Rows[idtM]["SRV_RMT_STATUS"].ToString();


                            Device DV = new Device();
                            DV.SRV_ID   = dtMedia.Rows[idtM][0].ToString();
                            strSRV_CODE = dtMedia.Rows[idtM][1].ToString();
                            DV.DeviceID = dtMedia.Rows[idtM]["SRV_LOGICAL_CODE"].ToString();

                            DV.DeviceName = dtMedia.Rows[idtM][4].ToString();

                            DV.Latitude = dtMedia.Rows[idtM][2].ToString().Split(',')[0];
                            if (DV.Latitude.Split('.')[1].Length > 6)
                            {
                                DV.Latitude = DV.Latitude.Split('.')[0] + "." + DV.Latitude.Split('.')[1].Substring(0, 6);
                            }
                            DV.Longitude = dtMedia.Rows[idtM][2].ToString().Split(',')[1];
                            if (DV.Longitude.Split('.')[1].Length > 6)
                            {
                                DV.Longitude = DV.Latitude.Split('.')[0] + "." + DV.Longitude.Split('.')[1].Substring(0, 6);
                            }
                            DV.Srv_Mft_Date = dtMedia.Rows[idtM]["SRV_MFT_DATE"].ToString();
                            DV.UpdateDate   = dtMedia.Rows[idtM]["srv_updateDate"].ToString();
                            /// Terminal_SRV_MFT_DATE,terminal_updateDate
                            DV.Old_Srv_Mft_Date = dtMedia.Rows[idtM]["Terminal_SRV_MFT_DATE"].ToString();
                            DV.Old_UpdateDate   = dtMedia.Rows[idtM]["terminal_updateDate"].ToString();
                            if (!(DV.Srv_Mft_Date.IndexOf(DV.Old_Srv_Mft_Date) > -1))
                            {
                                rHeart.UpdateTerminalMaintenance(DV);
                                lDev.Add(DV);
                            }
                            else if (!string.IsNullOrEmpty(DV.UpdateDate) && !string.IsNullOrEmpty(DV.Old_UpdateDate))
                            {
                                if (!(DV.UpdateDate.IndexOf(DV.Old_UpdateDate) > -1))
                                {
                                    rHeart.UpdateTerminalMaintenance(DV);
                                    lDev.Add(DV);
                                }
                            }
                            else
                            {
                                continue;
                            }
                        }

                        //string TrLL = dtMedia.Rows[idtM][2].ToString();
                        //Device DV = new Device();
                        //if (idtM < 10)
                        //{
                        //    DV.DeviceID = "0" + idtM;
                        //}
                        //else { DV.DeviceID = idtM.ToString(); }
                        //strSRV_CODE = dtMedia.Rows[idtM][1].ToString();
                        //DV.DeviceID = strSRV_ID;
                        //DV.DeviceName = strSRV_ID;
                        //if (TrLL != "")
                        //{
                        //    string[] str = TrLL.Split(',');
                        //    if (str.Length >= 2)
                        //    {
                        //        DV.Longitude = str[1];
                        //        DV.Latitude = str[0];
                        //    }
                        //    else
                        //    {
                        //        DV.Longitude = "118.33";
                        //        DV.Latitude = "33.95";
                        //    }
                        //}
                        //else
                        //{
                        //    DV.Longitude = "118.33";
                        //    DV.Latitude = "33.95";
                        //}
                    }
                }
                if (lDev.Count > 0)
                {
                    Random rdState = new Random();
                    frdStateName = "10" + rHeart.sHBRONO + GetSequenceCodes();
                    string xmlEBMStateFileName = "\\EBDB_" + frdStateName + ".xml";
                    xmlHeartDoc = rHeart.DeviceInfoResponse(lDev, frdStateName);
                    CreateXML(xmlHeartDoc, ServerForm.sHeartSourceFilePath + xmlEBMStateFileName);
                    ServerForm.mainFrm.GenerateSignatureFile(ServerForm.sHeartSourceFilePath, frdStateName);
                    ServerForm.tar.CreatTar(ServerForm.sHeartSourceFilePath, ServerForm.sSendTarPath, frdStateName);//使用新TAR
                    string sHeartBeatTarName = ServerForm.sSendTarPath + "\\" + "EBDT_" + frdStateName + ".tar";
                    send.address      = ServerForm.sZJPostUrlAddress;
                    send.fileNamePath = sHeartBeatTarName;
                    SendTar.SendTarOrder.sendHelper.AddPostQueue(ServerForm.sZJPostUrlAddress, sHeartBeatTarName);
                }
            }

            catch
            {
            }
            Console.WriteLine((INow - DateTime.Now));
        }
Пример #3
0
        private bool UpdateState(string TimingTerminalState)
        {
            bool        flag        = false;
            XmlDocument xmlHeartDoc = new XmlDocument();
            responseXML rHeart      = new responseXML();

            rHeart.SourceAreaCode = ServerForm.strSourceAreaCode;
            rHeart.SourceType     = ServerForm.strSourceType;
            rHeart.SourceName     = ServerForm.strSourceName;
            rHeart.SourceID       = ServerForm.strSourceID;
            rHeart.sHBRONO        = SingletonInfo.GetInstance().CurrentResourcecode;
            string MediaSql    = "";
            string strSRV_ID   = "";
            string strSRV_CODE = "";

            ServerForm.DeleteFolder(ServerForm.sHeartSourceFilePath);//删除原有XML发送文件的文件夹下的XML
            string        frdStateName = "";
            List <Device> lDev         = new List <Device>();

            try
            {
                MediaSql = "select  SRV.SRV_ID,SRV.SRV_CODE,SRV_GOOGLE,SRV_PHYSICAL_CODE,srv_detail,SRV_LOGICAL_CODE_GB,SRV_MFT_DATE,updateDate,SRV_RMT_STATUS  FROM SRV  left join Srvtype on   SRV.DeviceTypeId= Srvtype .srv_id where  Srvtype.srv_id=1";
                DataTable dtMedia = mainForm.dba.getQueryInfoBySQL(MediaSql);
                if (dtMedia != null && dtMedia.Rows.Count > 0)
                {
                    if (dtMedia.Rows.Count > 100)
                    {
                        int mod = dtMedia.Rows.Count / 100 + 1;
                        for (int i = 0; i < mod; i++)
                        {
                            for (int idtM = 0; idtM < dtMedia.Rows.Count; idtM++)
                            {
                                Device DV = new Device();
                                DV.SRV_ID       = dtMedia.Rows[idtM][0].ToString();
                                strSRV_CODE     = dtMedia.Rows[idtM][1].ToString();
                                DV.DeviceID     = dtMedia.Rows[idtM]["SRV_LOGICAL_CODE_GB"].ToString();//修改于20180819 把资源码换成23位
                                DV.DeviceName   = dtMedia.Rows[idtM][4].ToString();
                                DV.Latitude     = dtMedia.Rows[idtM][2].ToString().Split(',')[0];
                                DV.Longitude    = dtMedia.Rows[idtM][2].ToString().Split(',')[1];
                                DV.Srv_Mft_Date = dtMedia.Rows[idtM]["SRV_MFT_DATE"].ToString();
                                DV.UpdateDate   = dtMedia.Rows[idtM]["updateDate"].ToString();
                                DV.DeviceState  = TimingTerminalState;
                                lDev.Add(DV);
                            }
                            frdStateName = "10" + rHeart.sHBRONO + GetSequenceCodes();
                            string xmlEBMStateFileName = "\\EBDB_" + frdStateName + ".xml";

                            xmlHeartDoc = rHeart.DeviceStateResponse(lDev, frdStateName);
                            TarXml.AudioResponseXml.CreateXML(xmlHeartDoc, ServerForm.sHeartSourceFilePath + xmlEBMStateFileName);
                            ServerForm.mainFrm.GenerateSignatureFile(ServerForm.sHeartSourceFilePath, frdStateName);
                            ServerForm.tar.CreatTar(ServerForm.sHeartSourceFilePath, ServerForm.sSendTarPath, frdStateName);//使用新TAR
                            string sHeartBeatTarName = ServerForm.sSendTarPath + "\\" + "EBDT_" + frdStateName + ".tar";
                            string result            = SendTar.SendTarOrder.sendHelper.AddPostQueue(SingletonInfo.GetInstance().SendTarAddress, sHeartBeatTarName);
                            if (result == "1")
                            {
                                flag = true;
                            }
                        }
                    }
                    else
                    {
                        for (int idtM = 0; idtM < dtMedia.Rows.Count; idtM++)
                        {
                            Device DV = new Device();
                            DV.SRV_ID   = dtMedia.Rows[idtM][0].ToString();
                            strSRV_CODE = dtMedia.Rows[idtM][1].ToString();
                            DV.DeviceID = dtMedia.Rows[idtM]["SRV_LOGICAL_CODE_GB"].ToString();

                            DV.DeviceName = dtMedia.Rows[idtM][4].ToString();

                            DV.Latitude     = dtMedia.Rows[idtM][2].ToString().Split(',')[0];
                            DV.Longitude    = dtMedia.Rows[idtM][2].ToString().Split(',')[1];
                            DV.Srv_Mft_Date = dtMedia.Rows[idtM]["SRV_MFT_DATE"].ToString();
                            DV.UpdateDate   = dtMedia.Rows[idtM]["updateDate"].ToString();
                            DV.DeviceState  = TimingTerminalState;
                            lDev.Add(DV);
                        }
                        Random rdState = new Random();
                        frdStateName = "10" + rHeart.sHBRONO + GetSequenceCodes();
                        string xmlEBMStateFileName = "\\EBDB_" + frdStateName + ".xml";

                        xmlHeartDoc = rHeart.DeviceStateResponse(lDev, frdStateName);
                        TarXml.AudioResponseXml.CreateXML(xmlHeartDoc, ServerForm.sHeartSourceFilePath + xmlEBMStateFileName);
                        ServerForm.mainFrm.GenerateSignatureFile(ServerForm.sHeartSourceFilePath, frdStateName);
                        ServerForm.tar.CreatTar(ServerForm.sHeartSourceFilePath, ServerForm.sSendTarPath, frdStateName);//使用新TAR
                        string sHeartBeatTarName = ServerForm.sSendTarPath + "\\" + "EBDT_" + frdStateName + ".tar";
                        string result            = SendTar.SendTarOrder.sendHelper.AddPostQueue(SingletonInfo.GetInstance().SendTarAddress, sHeartBeatTarName);
                        if (result == "1")
                        {
                            flag = true;
                        }
                    }
                }
                else
                {
                    Random rdState = new Random();
                    frdStateName = "10" + rHeart.sHBRONO + GetSequenceCodes();
                    string xmlEBMStateFileName = "\\EBDB_" + frdStateName + ".xml";

                    xmlHeartDoc = rHeart.DeviceStateResponse(lDev, frdStateName);
                    TarXml.AudioResponseXml.CreateXML(xmlHeartDoc, ServerForm.sHeartSourceFilePath + xmlEBMStateFileName);
                    ServerForm.mainFrm.GenerateSignatureFile(ServerForm.sHeartSourceFilePath, frdStateName);
                    ServerForm.tar.CreatTar(ServerForm.sHeartSourceFilePath, ServerForm.sSendTarPath, frdStateName);//使用新TAR
                    string sHeartBeatTarName = ServerForm.sSendTarPath + "\\" + "EBDT_" + frdStateName + ".tar";
                    string result            = SendTar.SendTarOrder.sendHelper.AddPostQueue(SingletonInfo.GetInstance().SendTarAddress, sHeartBeatTarName);
                    if (result == "1")
                    {
                        flag = true;
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception("终端状态变更:" + ex.Message);
            }
            return(flag);
        }
        public void TimingTerminalInfo(int type)
        {
            DateTime    INow        = DateTime.Now;
            XmlDocument xmlHeartDoc = new XmlDocument();
            responseXML rHeart      = new responseXML();

            rHeart.SourceAreaCode = ServerForm.strSourceAreaCode;
            rHeart.SourceType     = ServerForm.strSourceType;
            rHeart.SourceName     = ServerForm.strSourceName;
            rHeart.SourceID       = ServerForm.strSourceID;
            rHeart.sHBRONO        = ServerForm.strHBRONO;
            string MediaSql    = "";
            string strSRV_ID   = "";
            string strSRV_CODE = "";

            ServerForm.DeleteFolder(ServerForm.sHeartSourceFilePath);//删除原有XML发送文件的文件夹下的XML
            string        frdStateName = "";
            DataTable     dtMedia      = null;
            DataTable     dtSrvMedia   = null;
            List <Device> lDev         = new List <Device>();

            try
            {
                MediaSql = "select SRV_ID, SRV_CODE, SRV_GOOGLE, SRV_PHYSICAL_CODE, srv_detail, SRV_LOGICAL_CODE, SRV_RMT_STATUS, SRV_MFT_DATE,  srv_updateDate,Terminal_SRV_MFT_DATE,terminal_updateDate from terminalMaintenanceView where deviceTypeId = '" + type + "' ";
                dtMedia  = mainForm.dba.getQueryInfoBySQL(MediaSql);

                if (dtMedia.Rows.Count == 0)
                {
                    MediaSql   = "select  SRV.SRV_ID,SRV.SRV_CODE,SRV_GOOGLE, SRV_PHYSICAL_CODE,srv_detail,SRV_LOGICAL_CODE,SRV_MFT_DATE,updateDate,SRV_RMT_STATUS  FROM SRV  left join Srvtype on   SRV.DeviceTypeId= Srvtype .srv_id where  Srvtype.srv_id= " + type;
                    dtSrvMedia = mainForm.dba.getQueryInfoBySQL(MediaSql);
                    for (int idtM = 0; idtM < dtSrvMedia.Rows.Count; idtM++)
                    {
                        int    srvId         = Convert.ToInt32(dtSrvMedia.Rows[idtM]["SRV_ID"].ToString());
                        string TerminalState = dtSrvMedia.Rows[0]["SRV_RMT_STATUS"].ToString();


                        Device DV = new Device();
                        DV.SRV_ID   = dtSrvMedia.Rows[idtM][0].ToString();
                        strSRV_CODE = dtSrvMedia.Rows[idtM][1].ToString();
                        #region 自动添加逻辑编码 2018-01-10
                        string SRV_LOGICAL_CODE    = dtMedia.Rows[idtM]["SRV_LOGICAL_CODE"].ToString();
                        string areaId              = dtMedia.Rows[idtM]["areaId"].ToString();
                        string SRV_LOGICAL_CODE_GB = dtMedia.Rows[idtM]["SRV_LOGICAL_CODE_GB"].ToString();
                        int    number              = GetGBCodeCount(areaId, SRV_LOGICAL_CODE_GB);

                        LogicalData logicaldata = new LogicalData();
                        logicaldata.srvID       = dtMedia.Rows[idtM]["SRV_ID"].ToString();
                        logicaldata.srvAreaID   = areaId;
                        logicaldata.LogicalCode = SRV_LOGICAL_CODE;
                        LogicalCoding.LogicalHelper logical = new LogicalCoding.LogicalHelper(logicaldata);

                        if (number > 1)
                        {
                            SRV_LOGICAL_CODE_GB = logical.GetLogicalCodel(SRV_LOGICAL_CODE_GB);

                            logical.UpdateLogicalCode(logicaldata.srvID, SRV_LOGICAL_CODE_GB);
                        }

                        if (string.IsNullOrEmpty(SRV_LOGICAL_CODE_GB) || SRV_LOGICAL_CODE_GB.Length != 23)
                        {
                            SRV_LOGICAL_CODE_GB = logical.GetLogicalAndAddDataBase();
                            if (string.IsNullOrEmpty(SRV_LOGICAL_CODE_GB))
                            {
                                HttpServerFrom.SetManager("区域码有误请认真核对区域码", Color.Red);
                                continue;
                            }
                        }
                        if (!string.IsNullOrEmpty(SRV_LOGICAL_CODE_GB))
                        {
                            if (!(SRV_LOGICAL_CODE_GB.Length == 23 && logical.GetCombAreaCode(SRV_LOGICAL_CODE_GB, areaId)))
                            {
                                SRV_LOGICAL_CODE_GB = logical.GetLogicalAndAddDataBase();
                            }
                        }
                        DV.DeviceID = SRV_LOGICAL_CODE_GB;
                        #endregion

                        DV.DeviceName = dtSrvMedia.Rows[idtM][4].ToString();

                        DV.Latitude     = dtSrvMedia.Rows[idtM][2].ToString().Split(',')[0].Substring(0, 6);
                        DV.Longitude    = dtSrvMedia.Rows[idtM][2].ToString().Split(',')[1].Substring(0, 6);;
                        DV.Srv_Mft_Date = dtSrvMedia.Rows[idtM]["SRV_MFT_DATE"].ToString();
                        DV.UpdateDate   = dtSrvMedia.Rows[idtM]["updateDate"].ToString();
                        if (string.IsNullOrEmpty(DV.UpdateDate))
                        {
                            DV.UpdateDate = "null";
                        }

                        rHeart.AddTerminalMaintenance(DV);
                        lDev.Add(DV);
                    }
                }
                else
                {
                    // MediaSql = "select top(99) SRV_ID,SRV_CODE,SRV_GOOGLE from SRV";

                    if (dtMedia != null && dtMedia.Rows.Count > 0)
                    {
                        for (int idtM = 0; idtM < dtMedia.Rows.Count; idtM++)
                        {
                            int    srvId         = Convert.ToInt32(dtMedia.Rows[idtM]["SRV_ID"].ToString());
                            string TerminalState = dtMedia.Rows[idtM]["SRV_RMT_STATUS"].ToString();


                            Device DV = new Device();
                            DV.SRV_ID   = dtMedia.Rows[idtM][0].ToString();
                            strSRV_CODE = dtMedia.Rows[idtM][1].ToString();
                            #region 自动添加逻辑编码 2018-01-10
                            string SRV_LOGICAL_CODE    = dtMedia.Rows[idtM]["SRV_LOGICAL_CODE"].ToString();
                            string areaId              = dtMedia.Rows[idtM]["areaId"].ToString();
                            string SRV_LOGICAL_CODE_GB = dtMedia.Rows[idtM]["SRV_LOGICAL_CODE_GB"].ToString();
                            int    number              = GetGBCodeCount(areaId, SRV_LOGICAL_CODE_GB);

                            LogicalData logicaldata = new LogicalData();
                            logicaldata.srvID       = dtMedia.Rows[idtM]["SRV_ID"].ToString();
                            logicaldata.srvAreaID   = areaId;
                            logicaldata.LogicalCode = SRV_LOGICAL_CODE;
                            LogicalCoding.LogicalHelper logical = new LogicalCoding.LogicalHelper(logicaldata);

                            if (number > 1)
                            {
                                SRV_LOGICAL_CODE_GB = logical.GetLogicalCodel(SRV_LOGICAL_CODE_GB);

                                logical.UpdateLogicalCode(logicaldata.srvID, SRV_LOGICAL_CODE_GB);
                            }

                            if (string.IsNullOrEmpty(SRV_LOGICAL_CODE_GB) || SRV_LOGICAL_CODE_GB.Length != 23)
                            {
                                SRV_LOGICAL_CODE_GB = logical.GetLogicalAndAddDataBase();
                                if (string.IsNullOrEmpty(SRV_LOGICAL_CODE_GB))
                                {
                                    HttpServerFrom.SetManager("区域码有误请认真核对区域码", Color.Red);
                                    continue;
                                }
                            }
                            if (!string.IsNullOrEmpty(SRV_LOGICAL_CODE_GB))
                            {
                                if (!(SRV_LOGICAL_CODE_GB.Length == 23 && logical.GetCombAreaCode(SRV_LOGICAL_CODE_GB, areaId)))
                                {
                                    SRV_LOGICAL_CODE_GB = logical.GetLogicalAndAddDataBase();
                                }
                            }
                            DV.DeviceID = SRV_LOGICAL_CODE_GB;
                            #endregion

                            DV.DeviceName = dtMedia.Rows[idtM][4].ToString();

                            DV.Latitude = dtMedia.Rows[idtM][2].ToString().Split(',')[0];
                            if (DV.Latitude.Split('.')[1].Length > 6)
                            {
                                DV.Latitude = DV.Latitude.Split('.')[0] + "." + DV.Latitude.Split('.')[1].Substring(0, 6);
                            }
                            DV.Longitude = dtMedia.Rows[idtM][2].ToString().Split(',')[1];
                            if (DV.Longitude.Split('.')[1].Length > 6)
                            {
                                DV.Longitude = DV.Latitude.Split('.')[0] + "." + DV.Longitude.Split('.')[1].Substring(0, 6);
                            }
                            DV.Srv_Mft_Date = dtMedia.Rows[idtM]["SRV_MFT_DATE"].ToString();
                            DV.UpdateDate   = dtMedia.Rows[idtM]["srv_updateDate"].ToString();
                            /// Terminal_SRV_MFT_DATE,terminal_updateDate
                            DV.Old_Srv_Mft_Date = dtMedia.Rows[idtM]["Terminal_SRV_MFT_DATE"].ToString();
                            DV.Old_UpdateDate   = dtMedia.Rows[idtM]["terminal_updateDate"].ToString();
                            if (!(DV.Srv_Mft_Date.IndexOf(DV.Old_Srv_Mft_Date) > -1))
                            {
                                rHeart.UpdateTerminalMaintenance(DV);
                                lDev.Add(DV);
                            }
                            else if (!string.IsNullOrEmpty(DV.UpdateDate) && !string.IsNullOrEmpty(DV.Old_UpdateDate))
                            {
                                if (!(DV.UpdateDate.IndexOf(DV.Old_UpdateDate) > -1))
                                {
                                    rHeart.UpdateTerminalMaintenance(DV);
                                    lDev.Add(DV);
                                }
                            }
                            else
                            {
                                continue;
                            }
                        }

                        //string TrLL = dtMedia.Rows[idtM][2].ToString();
                        //Device DV = new Device();
                        //if (idtM < 10)
                        //{
                        //    DV.DeviceID = "0" + idtM;
                        //}
                        //else { DV.DeviceID = idtM.ToString(); }
                        //strSRV_CODE = dtMedia.Rows[idtM][1].ToString();
                        //DV.DeviceID = strSRV_ID;
                        //DV.DeviceName = strSRV_ID;
                        //if (TrLL != "")
                        //{
                        //    string[] str = TrLL.Split(',');
                        //    if (str.Length >= 2)
                        //    {
                        //        DV.Longitude = str[1];
                        //        DV.Latitude = str[0];
                        //    }
                        //    else
                        //    {
                        //        DV.Longitude = "118.33";
                        //        DV.Latitude = "33.95";
                        //    }
                        //}
                        //else
                        //{
                        //    DV.Longitude = "118.33";
                        //    DV.Latitude = "33.95";
                        //}
                    }
                }
                if (lDev.Count > 0)
                {
                    Random rdState = new Random();
                    frdStateName = "10" + rHeart.sHBRONO + GetSequenceCodes();
                    string xmlEBMStateFileName = "\\EBDB_" + frdStateName + ".xml";
                    xmlHeartDoc = rHeart.DeviceInfoResponse(lDev, frdStateName);
                    CreateXML(xmlHeartDoc, ServerForm.sHeartSourceFilePath + xmlEBMStateFileName);
                    ServerForm.mainFrm.GenerateSignatureFile(ServerForm.sHeartSourceFilePath, frdStateName);
                    ServerForm.tar.CreatTar(ServerForm.sHeartSourceFilePath, ServerForm.sSendTarPath, frdStateName);//使用新TAR
                    string sHeartBeatTarName = ServerForm.sSendTarPath + "\\" + "EBDT_" + frdStateName + ".tar";
                    send.address      = ServerForm.sZJPostUrlAddress;
                    send.fileNamePath = sHeartBeatTarName;
                    SendTar.SendTarOrder.sendHelper.AddPostQueue(ServerForm.sZJPostUrlAddress, sHeartBeatTarName);
                }
            }

            catch
            {
            }
            Console.WriteLine((INow - DateTime.Now));
        }