835 lines
39 KiB
C#
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(" ", "");
|
|
// //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;
|
|
}
|
|
}
|
|
}
|