using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Script.Serialization; using System.Web.Configuration; using System.Data; using Oracle.ManagedDataAccess.Client; using System.IO; using System.Security.Cryptography; using System.Text; using System.Xml; using CL.IO.Zip; namespace UpdateService { /// /// Update 的摘要说明 /// [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 [System.Web.Script.Services.ScriptService] public class Update : WebService { public string host = WebConfigurationManager.AppSettings["host"]; public string host2 = WebConfigurationManager.AppSettings["host2"]; public string port = WebConfigurationManager.AppSettings["port"]; public string service_name = WebConfigurationManager.AppSettings["service_name"]; public string service_name2 = WebConfigurationManager.AppSettings["service_name2"]; public string dbname = WebConfigurationManager.AppSettings["dbname"]; public string UserName = WebConfigurationManager.AppSettings["UserName"]; public string UserPwd = WebConfigurationManager.AppSettings["UserPwd"]; /// /// 统一供配送中转接口 /// /// 总部Ajax地址 /// //[WebMethod] //public string GeneralPurchase(string url) //{ // //string url = "http://183.129.232.100:8010/MobileServicePlatform/Handler/handler_ajax.ashx?action_type=DownLoadSeller&action_data=SellerCommodityById&action_record=|882"; // string pageHtml = ""; // try // { // System.Net.WebClient MyWebClient = new System.Net.WebClient(); // MyWebClient.Credentials = System.Net.CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据 // Byte[] pageData = MyWebClient.DownloadData(url); //从指定网站下载数据 // pageHtml = Encoding.UTF8.GetString(pageData); // //int index = pageHtml.IndexOf(":"); // //pageHtml = pageHtml.Substring(index + 1, pageHtml.Length - index - 2); // //pageHtml = pageHtml.Replace(" ", ""); // //pageHtml = HttpUtility.UrlDecode(pageHtml); // return pageHtml; // } // catch (System.Net.WebException webEx) // { // return ""; // } //} [WebMethod] public string ServerTime() { return DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo); } /// /// 收银系统更新检查 /// /// 省份编码 /// 上次更新时间 /// [WebMethod] public string UpdateCheck(string province_code, string update_date) { string serverpart = ""; string _sqlstr; using (DataTable _result = new DataTable("t_softupdate")) { _result.Columns.Add("softupdate_date", typeof(string)); _result.Columns.Add("softupdate_version", typeof(string)); _result.Columns.Add("serverpart_code", typeof(string)); OracleHelper _OracleHelper = new OracleHelper("192.168.11.190", port, service_name, UserName, UserPwd); try { _sqlstr = "SELECT DISTINCT SERVERPART_CODE,SOFTUPDATE_VERSION,SOFTUPDATE_DATE " + "FROM " + dbname + ".T_SOFTUPDATE WHERE PROVINCE_CODE = '" + province_code + "' AND SOFTUPDATE_DATE = ( SELECT MAX(SOFTUPDATE_DATE) " + "FROM " + dbname + ".T_SOFTUPDATE WHERE PROVINCE_CODE = '" + province_code + "' AND SOFTUPDATE_DATE > TO_DATE ('" + update_date + "','YYYY/MM/DD HH24:MI:SS'))"; using (DataSet ds = _OracleHelper.ExcuteSqlGetDataSet(_sqlstr, "t_softupdate")) { DataTable dt = ds.Tables["t_softupdate"]; if (dt.Rows.Count > 0) { _sqlstr = "SELECT DISTINCT SERVERPART_CODE,SOFTUPDATE_VERSION,SOFTUPDATE_DATE " + "FROM " + dbname + ".T_SOFTUPDATE WHERE PROVINCE_CODE = '" + province_code + "' "; int _ServerPartCount = _OracleHelper.ExcuteSqlGetDataSet(_sqlstr).Tables[0].Rows.Count; if (_ServerPartCount == dt.Rows.Count) { serverpart = "ALL"; } else { foreach (DataRow row in dt.Rows) { serverpart += (serverpart == "" ? "" : "|") + row["serverpart_code"].ToString(); } } DataRow _row = _result.NewRow(); _row["softupdate_version"] = dt.Rows[0]["softupdate_version"].ToString(); _row["softupdate_date"] = dt.Rows[0]["softupdate_date"].ToString(); _row["serverpart_code"] = serverpart; _result.Rows.Add(_row); } } } catch (Exception ex) { serverpart = ""; } return JsonHelper.ToJson(_result); } } /// /// 软件授权校验 /// /// 服务区编码 /// [WebMethod] public string SoftCheck(string ServerPart) { string[] _ServerPartTmp = ServerPart.Split(","); string _ServerPart = ""; for (int i = 0; i < _ServerPartTmp.Count(); i++) { _ServerPart += (_ServerPart == "" ? "'" : ",'") + _ServerPartTmp[i] + "'"; } using (DataTable _result = new DataTable("t_softupdate")) { string sf_check = System.RealEstate_Extend.ToEncrypt(TimeHelper.ConvertDataTimeLong(DateTime.Now)); _result.Columns.Add("serverpart_code", typeof(string)); _result.Columns.Add("sf_type", typeof(string)); _result.Columns.Add("sf_build", typeof(string)); _result.Columns.Add("sf_check", typeof(string)); _result.Columns.Add("sf_checkday", typeof(string)); OracleHelper _OracleHelper = new OracleHelper(host2, port, service_name2, UserName, UserPwd); try { string _select = string.Format("SELECT SERVERPART_CODE,SF_TYPE,SF_BUILD,SF_CHECK,SF_CHECKDAY," + "SF_CHECKTYPE FROM {0}.T_SOFTCHECK WHERE SERVERPART_CODE IN ({1})", dbname, _ServerPart); using (DataTable dt = _OracleHelper.ExcuteSqlGetDataSet(_select, "t_softcheck").Tables["t_softcheck"]) { if (dt.Rows.Count > 0) { foreach (DataRow _Row in dt.Rows) { if (System.RealEstate_Extend.ToDecryptInt16(_Row["SF_CHECKTYPE"].ToString()) == 1) { sf_check = _Row["SF_CHECK"].ToString(); } else { sf_check = System.RealEstate_Extend.ToEncrypt(TimeHelper.ConvertDataTimeLong(DateTime.Now)); } DataRow softcheck = _result.NewRow(); softcheck["serverpart_code"] = _Row["SERVERPART_CODE"]; softcheck["sf_type"] = _Row["SF_TYPE"]; softcheck["sf_build"] = _Row["SF_BUILD"]; softcheck["sf_check"] = sf_check; softcheck["sf_checkday"] = _Row["SF_CHECKDAY"]; _result.Rows.Add(softcheck); } } } } catch (Exception ex) { } LogHelper.WriteServiceLog("校验服务区:" + _ServerPart); return JsonHelper.ToJson(_result); } } [WebMethod] public string POSUpdatePB(string UpdateType, string UpdateValue) { string _Result = ""; if (GetShopUpdate(UpdateValue.Split(",")[0], UpdateValue.Split(",")[1], out _, out string _UpdateDate)) { string _Version = "4.9.1.8"; string[] _FileList = GetUpdateList(GetAllFilesInDirectory(Server.MapPath("~/UpdateServer/" + _Version + "/UpdateFiles")), Server.MapPath("~/UpdateServer/" + _Version + "/UpdateFiles")); _Result = ConvertXmlToString(GetXmlDocument(_FileList, _UpdateDate, _Version, "~/UpdateServer/" + _Version + "/UpdateFiles")); } return _Result; } /// /// 收银系统更新升级 /// /// 说明: /// 检查类型(UpdateType) --> 对应值(UpdateValue) --> 返回值类型 /// DownLoad --> 版本号 --> XmlDocument /// Machine --> 网卡地址 --> XmlDocument /// Shop --> 门店编码 --> XmlDocument /// ServerPart --> 服务区编码 --> DataTableToJson /// Province --> 省份编码 --> DataTableToJson /// 检查类型 /// 对应类型值信息 /// [WebMethod] public string POSUpdate(string UpdateType, string UpdateValue) { string _Result = ""; switch (UpdateType) { //返回指定版本下载列表 case "DownLoad": string[] _FileList = GetUpdateList(GetAllFilesInDirectory(Server.MapPath("~/UpdateServer/" + UpdateValue + "/UpdateFiles")), Server.MapPath("~/UpdateServer/" + UpdateValue + "/UpdateFiles")); _Result = ConvertXmlToString(GetXmlDocument(_FileList, DateTime.Now.ToString(), UpdateValue, "~/UpdateServer/" + UpdateValue + "/UpdateFiles")); break; //返回指定设备更新版本及下载列表 case "Machine": if (GetMachineUpdate(UpdateValue, out string _Version, out string _UpdateDate)) { _FileList = GetUpdateList(GetAllFilesInDirectory(Server.MapPath("~/UpdateServer/" + _Version + "/UpdateFiles")), Server.MapPath("~/UpdateServer/" + _Version + "/UpdateFiles")); _Result = ConvertXmlToString(GetXmlDocument(_FileList, _UpdateDate, _Version, "~/UpdateServer/" + _Version + "/UpdateFiles")); } //else //{ // _FileList = GetUpdateList(GetAllFilesInDirectory(Server.MapPath("~/UpdateServer/UpdateFiles")), // Server.MapPath("~/UpdateServer/UpdateFiles")); // _Result = ConvertXmlToString(GetXmlDocument(_FileList, _UpdateDate, // _Version, "~/UpdateServer/UpdateFiles")); //} break; case "Shop": if (GetShopUpdate(UpdateValue.Split(",")[0], UpdateValue.Split(",")[1], out _Version, out _UpdateDate)) { _FileList = GetUpdateList(GetAllFilesInDirectory(Server.MapPath("~/UpdateServer/" + _Version + "/UpdateFiles")), Server.MapPath("~/UpdateServer/" + _Version + "/UpdateFiles")); _Result = ConvertXmlToString(GetXmlDocument(_FileList, _UpdateDate, _Version, "~/UpdateServer/" + _Version + "/UpdateFiles")); } //else //{ // _FileList = GetUpdateList(GetAllFilesInDirectory(Server.MapPath("~/UpdateServer/UpdateFiles")), // Server.MapPath("~/UpdateServer/UpdateFiles")); // _Result = ConvertXmlToString(GetXmlDocument(_FileList, _UpdateDate, // _Version, "~/UpdateServer/UpdateFiles")); //} break; //返回指定服务区所有设备版本更新信息 case "ServerPart": _Result = GetServerPartUpdateList(UpdateValue); break; //返回指定省份所有服务区设备版本更新信息 case "Province": _Result = GetProvinceUpdateList(UpdateValue); break; } return _Result; } /// /// 区服系统更新结果上报 /// /// 更新结果信息数据包 /// [WebMethod] public string SoftUpdateFeedback(string jsonData) { try { //LogHelper.WriteServiceLog(jsonData); //定义数据库连接 OracleHelper _OracleHelper = new OracleHelper(host2, port, service_name, UserName, UserPwd); //转换传入的更新结果数据 List _SoftUpdateList = Newtonsoft.Json.JsonConvert.DeserializeObject>(jsonData); //定义待执行语句参数 List _UpdateSQL = new List(); //循环添加更新结果至SQL语句 foreach (SoftUpdateModel _SoftUpdateModel in _SoftUpdateList) { DateTime _UpdateDate; if (_SoftUpdateModel.UpdateDate == null || _SoftUpdateModel.UpdateDate.Value == DateTime.MinValue) { _UpdateDate = DateTime.Now; } else { _UpdateDate = _SoftUpdateModel.UpdateDate.Value; } _UpdateSQL.Add($@"UPDATE HIGHWAY_EXCHANGE.T_SOFTUPDATE SET SERVERPART_VERSION = '{_SoftUpdateModel.SoftVersion}', UPDATE_DATE = TO_DATE('{_UpdateDate.ToString()}','YYYY/MM/DD HH24:MI:SS') WHERE SERVERPART_CODE = '{_SoftUpdateModel.ServerPartCode}' AND SHOPCODE = '{_SoftUpdateModel.ShopCode}' AND NVL(SERVERPART_VERSION,'0') <> '{_SoftUpdateModel.SoftVersion}'"); } //执行语句更新服务端下发结果 if (_UpdateSQL.Count > 0) { _OracleHelper.ExecuteSqlTran(_UpdateSQL); } return Newtonsoft.Json.JsonConvert.SerializeObject( new { ResultCode = 100, ResultDesc = "更新记录上传成功" }); } catch (Exception ex) { LogHelper.WriteServiceLog("更新结果上报失败:" + ex.Message); return Newtonsoft.Json.JsonConvert.SerializeObject( new { ResultCode = 999, ResultDesc = "更新记录上传失败:" + ex.Message }); } } /// /// 获取更新信息 /// /// 更新类型 /// 类型对应值 /// [WebMethod] public string UpdateContent(string UpdateType, string UpdateValue) { string _Result = ""; string _SelectSql = ""; OracleHelper _OracleHelper = new OracleHelper(host2, port, service_name, UserName, UserPwd); switch (UpdateType) { //返回指定设备更新版本及下载列表 case "Machine": _SelectSql = "SELECT SOFTUPDATE_DATE,SOFTUPDATE_VERSION,SOFTUPDATE_DESC " + "FROM " + dbname + ".T_SOFTUPDATE WHERE MACADDRESS = '" + UpdateValue + "'"; try { DataTable _DataTable = _OracleHelper.ExcuteSqlGetDataSet(_SelectSql, "T_SOFTUPDATE").Tables["T_SOFTUPDATE"]; _Result = JsonHelper.ToJson(_DataTable); } catch { DataTable _DataTable = new DataTable(); _DataTable.Columns.Add("SOFTUPDATE_DATE", typeof(DateTime)); _DataTable.Columns.Add("SOFTUPDATE_VERSION", typeof(string)); _DataTable.Columns.Add("SOFTUPDATE_DESC", typeof(string)); _Result = JsonHelper.ToJson(_DataTable); } break; case "Shop": _SelectSql = String.Format("SELECT DISTINCT SOFTUPDATE_DATE,SOFTUPDATE_VERSION,SOFTUPDATE_DESC " + "FROM {0}.T_SOFTUPDATE WHERE SERVERPART_CODE = '{1}' AND SHOPCODE = '{2}' " + "ORDER BY SOFTUPDATE_DATE DESC", dbname, UpdateValue.Split(",")[0], UpdateValue.Split(",")[1]); try { DataTable _DataTable = _OracleHelper.ExcuteSqlGetDataSet(_SelectSql, "T_SOFTUPDATE").Tables["T_SOFTUPDATE"]; _Result = JsonHelper.ToJson(_DataTable); } catch { DataTable _DataTable = new DataTable(); _DataTable.Columns.Add("SOFTUPDATE_DATE", typeof(DateTime)); _DataTable.Columns.Add("SOFTUPDATE_VERSION", typeof(string)); _DataTable.Columns.Add("SOFTUPDATE_DESC", typeof(string)); _Result = JsonHelper.ToJson(_DataTable); } break; } return _Result; } /// /// 更新发布 /// /// 更新包名称 /// 更新包MD5 /// 更新包类型 /// [WebMethod] public string UpdateRelease(string FileName, string FileMd5, string UpdateType, string UpdateContent) { string _Result = ""; string _FilePath = ""; string _UpdateDate = ""; OracleHelper _OracleHelper = new OracleHelper(host2, port, service_name, UserName, UserPwd); switch (UpdateType) { case "ServiceSite": _FilePath = Server.MapPath("~/ServicePack/" + FileName + ".zip"); if (File.Exists(_FilePath)) { string _FileMd5 = GetFileMd5(_FilePath); if (_FileMd5 == FileMd5) { _Result = "发布成功"; } else { _Result = "文件MD5校验失败"; } } else { _Result = "文件不存在"; } break; case "PosRelease": _FilePath = Server.MapPath("~/PosSystemPack/" + FileName + ".zip"); if (File.Exists(_FilePath)) { string _FileMd5 = GetFileMd5(_FilePath); string _UnZipPath = Server.MapPath("~/") + "UpdateServer\\" + FileName + "\\"; if (_FileMd5 == FileMd5) { ZipHandler _ZipHandler = ZipHandler.GetInstance(); string _PassWord = _ZipHandler.GetZipExtensionFileName(_FilePath, ".pw"); if (String.IsNullOrWhiteSpace(_PassWord)) { _UpdateDate = DateTime.Now.ToString(); _ZipHandler.UnpackAll(_FilePath, _UnZipPath, (ProgressPercentage) => { }); } else { _UpdateDate = DateTime.ParseExact(_PassWord, "yyyyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture).ToString(); _ZipHandler.UnpackAll(_FilePath, _UnZipPath, _PassWord, (ProgressPercentage) => { }); } int _count = 0; LogHelper.DeleteFiles(_UnZipPath, new string[] { ".pw" }, true, false, ref _count); string[] _BuildTmp = FileName.Trim().Split('.'); if (_BuildTmp.Length == 4) { string _Build = _BuildTmp[0].PadLeft(2, '0') + _BuildTmp[1].PadLeft(2, '0') + _BuildTmp[2].PadLeft(2, '0') + _BuildTmp[3].PadLeft(2, '0'); string _SelectSql = "SELECT 1 FROM " + dbname + ".T_SOFTVERSION WHERE SOFTVERSION_BUILD = '" + _Build + "'"; if (_OracleHelper.ExcuteSqlGetDataSet(_SelectSql, "T_SOFTVERSION").Tables[0].Rows.Count == 0) { string _InsertSql = "INSERT INTO " + dbname + ".T_SOFTVERSION (SOFTVERSION_ID,SOFTVERSION_BUILD,SOFTVERSION_DATE," + "SOFTVERSION_VERSION,SOFTVERSION_NAME,UPDATECONTENT ) VALUES ( " + dbname + ".SEQ_SOFTVERSION.NEXTVAL,'" + _Build + "',TO_DATE('" + _UpdateDate + "','YYYY/MM/DD HH24:MI:SS'),'" + FileName + "','YSv" + FileName + "','" + UpdateContent + "')"; _OracleHelper.ExcuteSql(_InsertSql); } else { string _UpdateSql = "UPDATE " + dbname + ".T_SOFTVERSION SET SOFTVERSION_DATE = TO_DATE('" + _UpdateDate + "','YYYY/MM/DD HH24:MI:SS'), UPDATECONTENT = '" + UpdateContent + "' WHERE SOFTVERSION_BUILD = '" + _Build + "'"; _OracleHelper.ExcuteSql(_UpdateSql); } } _Result = "发布成功!"; } else { _Result = "文件完整性校验失败!"; } } else { _Result = "文件不存在!"; } break; } return _Result; } /// /// 服务站点安装/更新 /// /// /// /// [WebMethod] public string ServiceUpdate(string FileName, string Md5) { Dictionary _Dictionary = new Dictionary(); string _FilePath = Server.MapPath("~/ServicePack") + "\\" + FileName + ".zip"; if (File.Exists(_FilePath)) { string _FileMd5 = GetFileMd5(_FilePath); ZipHandler _ZipHandler = ZipHandler.GetInstance(); string _Version = _ZipHandler.GetZipExtensionFileName(_FilePath, ".pw"); _Dictionary.Add("Md5", _FileMd5); _Dictionary.Add("Version", _Version); } return JsonHelper.JsonSerializerBySingleData(_Dictionary); } /// /// 获取指定省份所有设备版本更新信息 /// /// 省份编码(多个省份编码用英文逗号","隔开 /// private string GetProvinceUpdateList(string ProvinceCode) { string[] _ProvinceTmp = ProvinceCode.Split(","); string _Province = ""; for (int i = 0; i < _ProvinceTmp.Count(); i++) { _Province += (_Province == "" ? "'" : ",'") + _ProvinceTmp[i] + "'"; } string _SelectSql = "SELECT SOFTUPDATE_ID,PROVINCE_CODE,SERVERPART_CODE,SHOPCODE," + "MACADDRESS,SOFTUPDATE_DATE,SOFTUPDATE_VERSION,SOFTUPDATE_DESC FROM " + dbname + ".T_SOFTUPDATE WHERE PROVINCE_CODE IN (" + _Province + ") AND MACADDRESS IS NOT NULL"; OracleHelper _OracleHelper = new OracleHelper(host, port, service_name, UserName, UserPwd); try { using (DataTable _DataTable = _OracleHelper.ExcuteSqlGetDataSet(_SelectSql, "T_SOFTUPDATE").Tables["T_SOFTUPDATE"]) { return JsonHelper.ToJson(_DataTable); } } catch { DataTable _DataTable = new DataTable("T_SOFTUPDATE"); _DataTable.Columns.Add("SOFTUPDATE_ID", typeof(int)); _DataTable.Columns.Add("PROVINCE_CODE", typeof(string)); _DataTable.Columns.Add("SERVERPART_CODE", typeof(string)); _DataTable.Columns.Add("SHOPCODE", typeof(string)); _DataTable.Columns.Add("MACADDRESS", typeof(string)); _DataTable.Columns.Add("SOFTUPDATE_DATE", typeof(DateTime)); _DataTable.Columns.Add("SOFTUPDATE_VERSION", typeof(string)); _DataTable.Columns.Add("SOFTUPDATE_DESC", typeof(string)); return JsonHelper.ToJson(_DataTable); } } /// /// 获取指定服务区所有设备版本更新信息 /// /// 指定服务区编码(多个服务区编码用英文逗号","隔开) /// private string GetServerPartUpdateList(string ServerPartCode) { string[] _ServerPartTmp = ServerPartCode.Split(","); string _ServerPart = ""; for (int i = 0; i < _ServerPartTmp.Count(); i++) { _ServerPart += (_ServerPart == "" ? "'" : ",'") + _ServerPartTmp[i] + "'"; } OracleHelper _OracleHelper = new OracleHelper(host2, port, service_name, UserName, UserPwd); string _SelectSql = "SELECT SOFTUPDATE_ID,PROVINCE_CODE,SERVERPART_CODE,SHOPCODE," + "MACADDRESS,SOFTUPDATE_DATE,SOFTUPDATE_VERSION,SOFTUPDATE_DESC FROM " + dbname + ".T_SOFTUPDATE WHERE SERVERPART_CODE IN (" + _ServerPart + ") AND MACADDRESS IS NOT NULL"; try { using (DataTable _DataTable = _OracleHelper.ExcuteSqlGetDataSet(_SelectSql, "T_SOFTUPDATE").Tables["T_SOFTUPDATE"]) { return JsonHelper.ToJson(_DataTable); } } catch { DataTable _DataTable = new DataTable("T_SOFTUPDATE"); _DataTable.Columns.Add("SOFTUPDATE_ID", typeof(int)); _DataTable.Columns.Add("PROVINCE_CODE", typeof(string)); _DataTable.Columns.Add("SERVERPART_CODE", typeof(string)); _DataTable.Columns.Add("SHOPCODE", typeof(string)); _DataTable.Columns.Add("MACADDRESS", typeof(string)); _DataTable.Columns.Add("SOFTUPDATE_DATE", typeof(DateTime)); _DataTable.Columns.Add("SOFTUPDATE_VERSION", typeof(string)); _DataTable.Columns.Add("SOFTUPDATE_DESC", typeof(string)); return JsonHelper.ToJson(_DataTable); } } /// /// 根据门店获取更新版本 /// /// 服务区码 /// 门店编码 /// 输出:版本号 /// 输出:更新日期 /// private bool GetShopUpdate(string ServerPartCode, string ShopCode, out string Version, out string UpdateDate) { OracleHelper _OracleHelper = new OracleHelper(host2, port, service_name, UserName, UserPwd); string _SelectSql = String.Format("SELECT DISTINCT SOFTUPDATE_DATE,SOFTUPDATE_VERSION,SOFTUPDATE_DESC FROM {0}.T_SOFTUPDATE " + "WHERE SERVERPART_CODE = '{1}' AND SHOPCODE = '{2}' ORDER BY SOFTUPDATE_DATE DESC", dbname, ServerPartCode, ShopCode); try { using (DataTable _DataTable = _OracleHelper.ExcuteSqlGetDataSet(_SelectSql, "T_SOFTUPDATE").Tables["T_SOFTUPDATE"]) { if (_DataTable.Rows.Count > 0) { Version = _DataTable.Rows[0]["SOFTUPDATE_VERSION"].ToString(); UpdateDate = _DataTable.Rows[0]["SOFTUPDATE_DATE"].ToString(); return true; } else { Version = ""; UpdateDate = ""; return false; } } } catch (Exception ex) { Version = ""; UpdateDate = ""; return false; } } /// /// 获取指定设备版本更新文件列表 /// /// 设备网卡地址 /// 输出:版本号 /// 输出:更新时间 /// private bool GetMachineUpdate(string MacAddress, out string Version, out string UpdateDate) { OracleHelper _OracleHelper = new OracleHelper(host2, port, service_name, UserName, UserPwd); string _SelectSql = "SELECT SOFTUPDATE_DATE,SOFTUPDATE_VERSION,SOFTUPDATE_DESC " + "FROM " + dbname + ".T_SOFTUPDATE WHERE MACADDRESS = '" + MacAddress + "'"; try { using (DataTable _DataTable = _OracleHelper.ExcuteSqlGetDataSet(_SelectSql, "T_SOFTUPDATE").Tables["T_SOFTUPDATE"]) { if (_DataTable.Rows.Count > 0) { Version = _DataTable.Rows[0]["SOFTUPDATE_VERSION"].ToString(); UpdateDate = _DataTable.Rows[0]["SOFTUPDATE_DATE"].ToString(); return true; } else { Version = ""; UpdateDate = ""; return false; } } } catch { Version = ""; UpdateDate = ""; return false; } } /// /// XmlDocument转换为字符串 /// /// XmlDocument /// private string ConvertXmlToString(XmlDocument xmlDoc) { MemoryStream stream = new MemoryStream(); XmlTextWriter writer = new XmlTextWriter(stream, null) { Formatting = Formatting.Indented }; xmlDoc.Save(writer); StreamReader sr = new StreamReader(stream, Encoding.UTF8); stream.Position = 0; string xmlString = sr.ReadToEnd(); sr.Close(); stream.Close(); return xmlString; } /// /// 生成更新文件列表XmlDocument /// /// 文件列表 /// 更新时间 /// 更新版本 /// 文件URL路径(例:~/UpdateFiles/4.7.3.7) /// 返回XmlDocument private XmlDocument GetXmlDocument(string[] FilesList, string UpdateDate, string Version, string FilesPath) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", null, null)); // 创建根节点AutoUpdater XmlElement xeRoot = xmlDoc.CreateElement("AutoUpdater"); xmlDoc.AppendChild(xeRoot); // 加入到上层节点 // 创建UpdateInfo元素 XmlElement xeUI = xmlDoc.CreateElement("UpdateInfo"); xeRoot.AppendChild(xeUI); // 创建UpdateTime元素 XmlElement xeUT = xmlDoc.CreateElement("UpdateTime"); xeUT.SetAttribute("Date", UpdateDate); xeUI.AppendChild(xeUT); // 创建Version元素 if (Version != "") { XmlElement xeUV = xmlDoc.CreateElement("Version"); xeUV.SetAttribute("Num", Version); xeUI.AppendChild(xeUV); } // 创建UpdateSize元素 XmlElement xeUS = xmlDoc.CreateElement("UpdateSize"); xeUS.SetAttribute("Size", GetUpdateSize(GetAllFilesInDirectory(Server.MapPath(FilesPath))).ToString()); xeUI.AppendChild(xeUS); //// 创建UpdateServerPart元素 //XmlElement xeUSP = xmlDoc.CreateElement("UpdateServerPart"); //xeUSP.SetAttribute("Code", UpdateServerPart()); //xeUI.AppendChild(xeUSP); // 创建UpdateFileList元素 XmlElement xeUFL = xmlDoc.CreateElement("UpdateFileList"); xeRoot.AppendChild(xeUFL); for (int i = 0; i < FilesList.Length; i++) { // 循环创建UpdateFile元素 XmlElement xeUF = xmlDoc.CreateElement("UpdateFile"); //xeUF.SetAttribute("Name", strArray[i]); xeUF.SetAttribute("Md5", GetFileMd5(Server.MapPath(FilesPath) + FilesList[i])); xeUF.InnerText = FilesList[i]; xeUFL.AppendChild(xeUF); // 加入到上层节点 } return xmlDoc; } /// /// 计算指定文件MD5 /// /// 文件路径 /// 返回MD5 private static string GetFileMd5(string FilePath) { try { FileStream _File = new FileStream(FilePath, FileMode.Open); MD5 _MD5 = new MD5CryptoServiceProvider(); byte[] retval = _MD5.ComputeHash(_File); _File.Close(); StringBuilder sc = new StringBuilder(); for (int i = 0; i < retval.Length; i++) { sc.Append(retval[i].ToString("x2")); } return sc.ToString().ToUpper(); } catch (Exception ex) { return ""; } } /// /// 返回指定目录下的所有文件信息 /// /// /// private List GetAllFilesInDirectory(string strDirectory) { //判断文件夹是否存在,不存在则退出 if (!Directory.Exists(strDirectory)) return null; List listFiles = new List(); //保存所有的文件信息 DirectoryInfo directory = new DirectoryInfo(strDirectory); DirectoryInfo[] directoryArray = directory.GetDirectories(); FileInfo[] fileInfoArray = directory.GetFiles(); if (fileInfoArray.Length > 0) listFiles.AddRange(fileInfoArray); foreach (DirectoryInfo _directoryInfo in directoryArray) { listFiles.AddRange(GetAllFilesInDirectory(_directoryInfo.FullName));//递归遍历 } return listFiles; } /// /// 获取所有目录即子目录下的文件总字节大小 /// /// 返回指定目录下的所有文件信息 /// 返回值 private static long GetUpdateSize(List listFileInfo) { long len = 0; if (listFileInfo != null) { foreach (FileInfo fileInfo in listFileInfo) { if (fileInfo.Name != "lpk.dll") { len += fileInfo.Length; } } } return len; } /// /// 获取所有目录即子目录下的文件完整路径列表 /// /// 文件信息列表 /// 文件路径 /// private static string[] GetUpdateList(List listFileInfo, string UpdateFilesPath) { string strRelativePath = null; string[] strArrayRelativePaths = null; if (listFileInfo != null) { foreach (FileInfo fileInfo in listFileInfo) { if (!fileInfo.FullName.Contains("lpk.dll")) { if (fileInfo.Extension != ".rar") { fileInfo.MoveTo(fileInfo.FullName + ".rar"); } strRelativePath += fileInfo.FullName.Replace(UpdateFilesPath, "") + ','; } } if (strRelativePath != null) { strArrayRelativePaths = strRelativePath.TrimEnd(',').Split(','); } } return strArrayRelativePaths; } } }