2025-03-28 09:49:56 +08:00

835 lines
39 KiB
C#

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
{
/// <summary>
/// Update 的摘要说明
/// </summary>
[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"];
/// <summary>
/// 统一供配送中转接口
/// </summary>
/// <param name="url">总部Ajax地址</param>
/// <returns></returns>
//[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("&nbsp;", "");
// //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);
}
/// <summary>
/// 收银系统更新检查
/// </summary>
/// <param name="province_code">省份编码</param>
/// <param name="update_date">上次更新时间</param>
/// <returns></returns>
[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);
}
}
/// <summary>
/// 软件授权校验
/// </summary>
/// <param name="ServerPart">服务区编码</param>
/// <returns></returns>
[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;
}
/// <summary>
/// 收银系统更新升级
/// </summary>
/// 说明:
/// 检查类型(UpdateType) --> 对应值(UpdateValue) --> 返回值类型
/// DownLoad --> 版本号 --> XmlDocument
/// Machine --> 网卡地址 --> XmlDocument
/// Shop --> 门店编码 --> XmlDocument
/// ServerPart --> 服务区编码 --> DataTableToJson
/// Province --> 省份编码 --> DataTableToJson
/// <param name="UpdateType">检查类型</param>
/// <param name="UpdateValue">对应类型值信息</param>
/// <returns></returns>
[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;
}
/// <summary>
/// 区服系统更新结果上报
/// </summary>
/// <param name="jsonData">更新结果信息数据包</param>
/// <returns></returns>
[WebMethod]
public string SoftUpdateFeedback(string jsonData)
{
try
{
//LogHelper.WriteServiceLog(jsonData);
//定义数据库连接
OracleHelper _OracleHelper = new OracleHelper(host2, port, service_name, UserName, UserPwd);
//转换传入的更新结果数据
List<SoftUpdateModel> _SoftUpdateList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<SoftUpdateModel>>(jsonData);
//定义待执行语句参数
List<string> _UpdateSQL = new List<string>();
//循环添加更新结果至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 });
}
}
/// <summary>
/// 获取更新信息
/// </summary>
/// <param name="UpdateType">更新类型</param>
/// <param name="UpdateValue">类型对应值</param>
/// <returns></returns>
[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;
}
/// <summary>
/// 更新发布
/// </summary>
/// <param name="FileName">更新包名称</param>
/// <param name="FileMd5">更新包MD5</param>
/// <param name="UpdateType">更新包类型</param>
/// <returns></returns>
[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;
}
/// <summary>
/// 服务站点安装/更新
/// </summary>
/// <param name="FileName"></param>
/// <param name="Md5"></param>
/// <returns></returns>
[WebMethod]
public string ServiceUpdate(string FileName, string Md5)
{
Dictionary<string, string> _Dictionary = new Dictionary<string, string>();
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);
}
/// <summary>
/// 获取指定省份所有设备版本更新信息
/// </summary>
/// <param name="ProvinceCode">省份编码(多个省份编码用英文逗号","隔开</param>
/// <returns></returns>
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);
}
}
/// <summary>
/// 获取指定服务区所有设备版本更新信息
/// </summary>
/// <param name="ServerPartCode">指定服务区编码(多个服务区编码用英文逗号","隔开)</param>
/// <returns></returns>
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);
}
}
/// <summary>
/// 根据门店获取更新版本
/// </summary>
/// <param name="ServerPartCode">服务区码</param>
/// <param name="ShopCode">门店编码</param>
/// <param name="Version">输出:版本号</param>
/// <param name="UpdateDate">输出:更新日期</param>
/// <returns></returns>
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;
}
}
/// <summary>
/// 获取指定设备版本更新文件列表
/// </summary>
/// <param name="MacAddress">设备网卡地址</param>
/// <param name="Version">输出:版本号</param>
/// <param name="UpdateDate">输出:更新时间</param>
/// <returns></returns>
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;
}
}
/// <summary>
/// XmlDocument转换为字符串
/// </summary>
/// <param name="xmlDoc">XmlDocument</param>
/// <returns></returns>
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;
}
/// <summary>
/// 生成更新文件列表XmlDocument
/// </summary>
/// <param name="FilesList">文件列表</param>
/// <param name="UpdateDate">更新时间</param>
/// <param name="Version">更新版本</param>
/// <param name="FilesPath">文件URL路径(例:~/UpdateFiles/4.7.3.7)</param>
/// <returns>返回XmlDocument</returns>
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;
}
/// <summary>
/// 计算指定文件MD5
/// </summary>
/// <param name="FilePath">文件路径</param>
/// <returns>返回MD5</returns>
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 "";
}
}
/// <summary>
/// 返回指定目录下的所有文件信息
/// </summary>
/// <param name="strDirectory"></param>
/// <returns></returns>
private List<FileInfo> GetAllFilesInDirectory(string strDirectory)
{
//判断文件夹是否存在,不存在则退出
if (!Directory.Exists(strDirectory))
return null;
List<FileInfo> listFiles = new List<FileInfo>(); //保存所有的文件信息
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;
}
/// <summary>
/// 获取所有目录即子目录下的文件总字节大小
/// </summary>
/// <param name="listFileInfo">返回指定目录下的所有文件信息</param>
/// <returns>返回值</returns>
private static long GetUpdateSize(List<FileInfo> listFileInfo)
{
long len = 0;
if (listFileInfo != null)
{
foreach (FileInfo fileInfo in listFileInfo)
{
if (fileInfo.Name != "lpk.dll")
{
len += fileInfo.Length;
}
}
}
return len;
}
/// <summary>
/// 获取所有目录即子目录下的文件完整路径列表
/// </summary>
/// <param name="listFileInfo">文件信息列表</param>
/// <param name="UpdateFilesPath">文件路径</param>
/// <returns></returns>
private static string[] GetUpdateList(List<FileInfo> 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;
}
}
}