diff --git a/EOM.TSHotelManagement.FormUI/AppInterface/FrmLoading.Designer.cs b/EOM.TSHotelManagement.FormUI/AppInterface/FrmLoading.Designer.cs index 7819869217f59e7e82d4a3d0703340afb72991ee..08415f3676fe298159977f500c3ea6e09fac32d8 100644 --- a/EOM.TSHotelManagement.FormUI/AppInterface/FrmLoading.Designer.cs +++ b/EOM.TSHotelManagement.FormUI/AppInterface/FrmLoading.Designer.cs @@ -30,7 +30,9 @@ { lblTips = new Sunny.UI.UILabel(); uiTitlePanel1 = new Sunny.UI.UITitlePanel(); - lblSoftwareVersion = new Sunny.UI.UILabel(); + lbInternetSoftwareVersion = new Sunny.UI.UILabel(); + uiLabel4 = new Sunny.UI.UILabel(); + lblLocalSoftwareVersion = new Sunny.UI.UILabel(); uiLabel2 = new Sunny.UI.UILabel(); uiTitlePanel1.SuspendLayout(); SuspendLayout(); @@ -48,7 +50,9 @@ // // uiTitlePanel1 // - uiTitlePanel1.Controls.Add(lblSoftwareVersion); + uiTitlePanel1.Controls.Add(lbInternetSoftwareVersion); + uiTitlePanel1.Controls.Add(uiLabel4); + uiTitlePanel1.Controls.Add(lblLocalSoftwareVersion); uiTitlePanel1.Controls.Add(uiLabel2); uiTitlePanel1.Font = new Font("微软雅黑", 12F); uiTitlePanel1.ForeColor = Color.White; @@ -59,21 +63,42 @@ uiTitlePanel1.Padding = new Padding(0, 25, 0, 0); uiTitlePanel1.ShowCollapse = true; uiTitlePanel1.ShowText = false; - uiTitlePanel1.Size = new Size(247, 66); + uiTitlePanel1.Size = new Size(247, 86); uiTitlePanel1.TabIndex = 2; uiTitlePanel1.Text = "软件版本信息"; uiTitlePanel1.TextAlignment = ContentAlignment.MiddleCenter; uiTitlePanel1.TitleHeight = 25; // - // lblSoftwareVersion + // lbInternetSoftwareVersion // - lblSoftwareVersion.Font = new Font("微软雅黑", 9F, FontStyle.Regular, GraphicsUnit.Point, 134); - lblSoftwareVersion.ForeColor = Color.FromArgb(48, 48, 48); - lblSoftwareVersion.Location = new Point(123, 33); - lblSoftwareVersion.Name = "lblSoftwareVersion"; - lblSoftwareVersion.Size = new Size(110, 23); - lblSoftwareVersion.TabIndex = 6; - lblSoftwareVersion.TextAlign = ContentAlignment.MiddleLeft; + lbInternetSoftwareVersion.Font = new Font("微软雅黑", 9F, FontStyle.Regular, GraphicsUnit.Point, 134); + lbInternetSoftwareVersion.ForeColor = Color.FromArgb(48, 48, 48); + lbInternetSoftwareVersion.Location = new Point(122, 57); + lbInternetSoftwareVersion.Name = "lbInternetSoftwareVersion"; + lbInternetSoftwareVersion.Size = new Size(110, 23); + lbInternetSoftwareVersion.TabIndex = 8; + lbInternetSoftwareVersion.TextAlign = ContentAlignment.MiddleLeft; + // + // uiLabel4 + // + uiLabel4.Font = new Font("微软雅黑", 9F, FontStyle.Regular, GraphicsUnit.Point, 134); + uiLabel4.ForeColor = Color.FromArgb(48, 48, 48); + uiLabel4.Location = new Point(14, 57); + uiLabel4.Name = "uiLabel4"; + uiLabel4.Size = new Size(110, 23); + uiLabel4.TabIndex = 7; + uiLabel4.Text = "联网程序版本号:"; + uiLabel4.TextAlign = ContentAlignment.MiddleCenter; + // + // lblLocalSoftwareVersion + // + lblLocalSoftwareVersion.Font = new Font("微软雅黑", 9F, FontStyle.Regular, GraphicsUnit.Point, 134); + lblLocalSoftwareVersion.ForeColor = Color.FromArgb(48, 48, 48); + lblLocalSoftwareVersion.Location = new Point(123, 33); + lblLocalSoftwareVersion.Name = "lblLocalSoftwareVersion"; + lblLocalSoftwareVersion.Size = new Size(110, 23); + lblLocalSoftwareVersion.TabIndex = 6; + lblLocalSoftwareVersion.TextAlign = ContentAlignment.MiddleLeft; // // uiLabel2 // @@ -90,7 +115,7 @@ // AllowShowTitle = false; AutoScaleMode = AutoScaleMode.None; - ClientSize = new Size(335, 180); + ClientSize = new Size(335, 186); Controls.Add(uiTitlePanel1); Controls.Add(lblTips); Name = "FrmLoading"; @@ -107,8 +132,10 @@ private Sunny.UI.UILabel lblTips; private Sunny.UI.UITitlePanel uiTitlePanel1; private Sunny.UI.UILabel lblDllVersion; - private Sunny.UI.UILabel lblSoftwareVersion; + private Sunny.UI.UILabel lblLocalSoftwareVersion; private Sunny.UI.UILabel uiLabel3; private Sunny.UI.UILabel uiLabel2; + private Sunny.UI.UILabel lbInternetSoftwareVersion; + private Sunny.UI.UILabel uiLabel4; } } \ No newline at end of file diff --git a/EOM.TSHotelManagement.FormUI/AppInterface/FrmLoading.cs b/EOM.TSHotelManagement.FormUI/AppInterface/FrmLoading.cs index 777c0517858801e9cf990664176d758ccf8911a5..773dd91591861ce460c54b38b8bbdf7caf4aacf7 100644 --- a/EOM.TSHotelManagement.FormUI/AppInterface/FrmLoading.cs +++ b/EOM.TSHotelManagement.FormUI/AppInterface/FrmLoading.cs @@ -26,6 +26,7 @@ using EOM.TSHotelManagement.Common; using Newtonsoft.Json; using Sunny.UI; using System.Diagnostics; +using System.Text; namespace EOM.TSHotelManagement.FormUI { @@ -33,6 +34,7 @@ namespace EOM.TSHotelManagement.FormUI { private string CurrentVersion => ApplicationUtil.GetApplicationVersion().ToString(); private string GithubRepoUrl = "https://api.github.com/repos/easy-open-meta/TopskyHotelManagerSystem/releases/latest"; + private string GiteeRepoUrl = "https://gitee.com/api/v5/repos/java-and-net/TopskyHotelManagerSystem/releases/latest"; private string FileName { get; set; } private string CurrentExecutablePath => Application.ExecutablePath; private string CurrentExecutableName => Path.GetFileName(CurrentExecutablePath); @@ -54,68 +56,76 @@ namespace EOM.TSHotelManagement.FormUI private async void CheckForUpdate() { + using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(10) }; + client.DefaultRequestHeaders.Add("User-Agent", await GetDefaultUserAgentAsync()); try { - using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(10) }; - client.DefaultRequestHeaders.Add("User-Agent", await GetDefaultUserAgentAsync()); - var response = await client.GetAsync(GithubRepoUrl); - - if (response.IsSuccessStatusCode) + var giteeResponse = await client.GetAsync(GiteeRepoUrl); + if (giteeResponse.IsSuccessStatusCode) { - var result = await response.Content.ReadAsStringAsync(); - var release = JsonConvert.DeserializeObject(result); - - var latestVersion = release!.TagName.Replace("v", "", StringComparison.OrdinalIgnoreCase); - var currentVersion = CurrentVersion.Replace("v", "", StringComparison.OrdinalIgnoreCase); - - var versionCompareResult = string.Compare(latestVersion, currentVersion, StringComparison.OrdinalIgnoreCase); - - if (versionCompareResult > 0) - { - var updateAsset = release.Assets.FirstOrDefault(a => a.Name.EndsWith(".exe", StringComparison.OrdinalIgnoreCase)); - if (updateAsset != null) - { - FileName = $"{updateAsset.Name}_{DateTime.Now.ToString("yyyyMMddHHmmsss")}"; - var isUpdated = await DownloadAndInstallUpdate(updateAsset.BrowserDownloadUrl, updateAsset.Name, new Progress(ReportProgress)); - if (isUpdated) - { - AntdUI.Modal.open(this, "系统提示", "旧版已停止使用,稍后将自动下载最新发行版!", TType.Warn); - ExitApplication(); - } - else - { - AntdUI.Modal.open(this, "系统提示", "更新失败,请手动下载最新版本。", TType.Warn); - } - } - else - { - AntdUI.Modal.open(this, "系统提示", "最新版本中未找到可更新的 .exe 文件。", TType.Warn); - } - } - else - { - AntdUI.Modal.open(this, "系统提示", "当前已为最新版本,无需更新!", TType.Success); - await Task.Run(() => threadPro()); - } + var giteeResult = await giteeResponse.Content.ReadAsStringAsync(); + var giteeRelease = JsonConvert.DeserializeObject(giteeResult); + HandleReleaseInfo(giteeRelease.TagName, giteeRelease.Assets, isGitee: true); + return; } - else + + var githubResponse = await client.GetAsync(GithubRepoUrl); + if (githubResponse.IsSuccessStatusCode) { - AntdUI.Modal.open(this, "系统提示", "无法获取最新版本信息,请检查网络连接。", TType.Info); - ExitApplication(); + var githubResult = await githubResponse.Content.ReadAsStringAsync(); + var githubRelease = JsonConvert.DeserializeObject(githubResult); + HandleReleaseInfo(githubRelease.TagName, githubRelease.Assets, isGitee: false); + return; } } - catch (OperationCanceledException) - { - AntdUI.Modal.open(this, "系统提示", "网络连接超时,无法检查更新。即将跳转到网盘版本库", TType.Info); - OpenFallbackUrl(); - ExitApplication(); - } catch (Exception ex) { AntdUI.Modal.open(this, "系统提示", $"检查更新时发生错误: {ex.Message}", TType.Info); OpenFallbackUrl(); - ExitApplication(); } + finally + { + progressBar.Visible = true; + } + } + + private void HandleReleaseInfo( + string tagName, + List assets, + bool isGitee) where TAsset : class + { + var version = tagName.Replace("v", string.Empty); + lbInternetSoftwareVersion.Text = version; + lbInternetSoftwareVersion.Refresh(); + if (version.Equals(lblLocalSoftwareVersion.Text.Trim())) + { + AntdUI.Modal.open(this, "系统提示", "当前已是最新版本,无需更新!", TType.Info); + Task.Run(() => threadPro()); + return; + } + + string downloadUrl = string.Empty; + if (isGitee) + { + dynamic executableAsset = assets.SingleOrDefault(a => ((dynamic)a).FileName?.EndsWith(".exe") == true); + + if (executableAsset == null) return; + + downloadUrl = executableAsset.DownloadUrl; + } + else + { + dynamic executableAsset = assets.SingleOrDefault(a => ((dynamic)a).Name?.EndsWith(".exe") == true); + + if (executableAsset == null) return; + + downloadUrl = executableAsset.BrowserDownloadUrl; + } + + + + DownloadAndInstallUpdate(downloadUrl, "TS酒店管理系统.exe", new Progress(ReportProgress)); + lblTips.Text = "安装包正在下载中,请稍等..."; } private async Task GetDefaultUserAgentAsync() @@ -150,6 +160,10 @@ namespace EOM.TSHotelManagement.FormUI var buffer = new byte[8192]; int bytesRead; + AntdUI.Modal.open(this, "下载提示", + $"已开始下载,请稍等。\n文件名称: {fileName}", + TType.Info); + while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0) { await fileStream.WriteAsync(buffer, 0, bytesRead); @@ -217,7 +231,7 @@ namespace EOM.TSHotelManagement.FormUI private void FrmLoading_Load(object sender, EventArgs e) { - lblSoftwareVersion.Text = ApplicationUtil.GetApplicationVersion().ToString(); + lblLocalSoftwareVersion.Text = ApplicationUtil.GetApplicationVersion().ToString(); CheckForUpdate(); } @@ -260,5 +274,44 @@ namespace EOM.TSHotelManagement.FormUI [JsonProperty("browser_download_url")] public string BrowserDownloadUrl { get; set; } } + + public class GiteeRelease + { + [JsonProperty("tag_name")] + public string TagName { get; set; } + + [JsonProperty("name")] + public string FileName { get; set; } + + [JsonProperty("body")] + public string Body { get; set; } + + [JsonProperty("assets")] + public List Assets { get; set; } + + [JsonProperty("author")] + public GiteeAuthor Author { get; set; } + + [JsonProperty("created_at")] + public DateTime CreatedAt { get; set; } + } + + public class GiteeAsset + { + [JsonProperty("browser_download_url")] + public string DownloadUrl { get; set; } + + [JsonProperty("name")] + public string FileName { get; set; } + } + + public class GiteeAuthor + { + [JsonProperty("login")] + public string Login { get; set; } + + [JsonProperty("avatar_url")] + public string AvatarUrl { get; set; } + } } } diff --git a/EOM.TSHotelManagement.FormUI/AppInterface/FrmLogin.cs b/EOM.TSHotelManagement.FormUI/AppInterface/FrmLogin.cs index dc304719af5f915c92e779b54028a58db77564ad..8c39b365de30a8b0b9330923f548f495c51dd30d 100644 --- a/EOM.TSHotelManagement.FormUI/AppInterface/FrmLogin.cs +++ b/EOM.TSHotelManagement.FormUI/AppInterface/FrmLogin.cs @@ -117,8 +117,6 @@ namespace EOM.TSHotelManagement.FormUI private void FrmLogin_Load(object sender, EventArgs e) { this.Owner.Hide(); - txtWorkerId.Text = "W428989222912"; - txtWorkerPwd.Text = "U.aX]Wj}U4Aw"; } #endregion diff --git a/EOM.TSHotelManagement.FormUI/EOM.TSHotelManagement.FormUI.csproj b/EOM.TSHotelManagement.FormUI/EOM.TSHotelManagement.FormUI.csproj index 012b4d91c3137dd2dee542205f616cb57423e6e7..623b0dd2cb334c94e8ed5e8c6645a967951280dc 100644 --- a/EOM.TSHotelManagement.FormUI/EOM.TSHotelManagement.FormUI.csproj +++ b/EOM.TSHotelManagement.FormUI/EOM.TSHotelManagement.FormUI.csproj @@ -11,7 +11,7 @@ true enable true - 2.8.1.0 + 2.8.5.0 EOM.TSHotelManagement.FormUI.Program x64 TS酒店管理系统