From ea209e998287a322fe53c6abf75a8c87a7b49e2f Mon Sep 17 00:00:00 2001 From: wanggang <76527413@qq.com> Date: Thu, 27 Feb 2020 13:45:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0loading=E7=AA=97=E4=BD=93?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E6=94=B9=E4=B8=8D=E5=8F=AF=E8=AE=A1=E6=95=B0?= =?UTF-8?q?=E8=BF=9B=E5=BA=A6=E6=9D=A1=E7=AA=97=E4=BD=93=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E9=83=A8=E5=88=86=E4=B8=BAloading=E7=AA=97=E4=BD=93=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Former-commit-id: 21b16e296327c4cfb56f6cfe8aeaef92236738a5 --- labs/CameraCard/CameraCard/CameraCard.csproj | 11 + .../Infrastructure/FormExtensions.cs | 42 ++ .../CameraCard/LoadingForm.Designer.cs | 61 +++ labs/CameraCard/CameraCard/LoadingForm.cs | 15 + labs/CameraCard/CameraCard/LoadingForm.resx | 230 +++++++++++ .../CameraCard/LoginForm.Designer.cs | 22 +- labs/CameraCard/CameraCard/LoginForm.cs | 145 +++---- .../CameraCard/MainForm.Designer.cs | 55 ++- labs/CameraCard/CameraCard/MainForm.cs | 358 +++++++++--------- labs/CameraCard/CameraCard/ProgressForm.cs | 10 +- labs/CameraCard/CameraCard/loading.gif | Bin 0 -> 6244 bytes .../WebApi/Controllers/TestController.cs | 13 +- 12 files changed, 670 insertions(+), 292 deletions(-) create mode 100644 labs/CameraCard/CameraCard/Infrastructure/FormExtensions.cs create mode 100644 labs/CameraCard/CameraCard/LoadingForm.Designer.cs create mode 100644 labs/CameraCard/CameraCard/LoadingForm.cs create mode 100644 labs/CameraCard/CameraCard/LoadingForm.resx create mode 100644 labs/CameraCard/CameraCard/loading.gif diff --git a/labs/CameraCard/CameraCard/CameraCard.csproj b/labs/CameraCard/CameraCard/CameraCard.csproj index c6d40714..34e8b98c 100644 --- a/labs/CameraCard/CameraCard/CameraCard.csproj +++ b/labs/CameraCard/CameraCard/CameraCard.csproj @@ -95,12 +95,19 @@ IdCard.cs + + + Form + + + LoadingForm.cs + Form @@ -124,6 +131,9 @@ IdCard.cs + + LoadingForm.cs + LoginForm.cs @@ -173,6 +183,7 @@ + PreserveNewest diff --git a/labs/CameraCard/CameraCard/Infrastructure/FormExtensions.cs b/labs/CameraCard/CameraCard/Infrastructure/FormExtensions.cs new file mode 100644 index 00000000..32d40b57 --- /dev/null +++ b/labs/CameraCard/CameraCard/Infrastructure/FormExtensions.cs @@ -0,0 +1,42 @@ +using CameraCard; +using System; +using System.Threading.Tasks; +using System.Windows.Forms; + +public static class FormExtensions +{ + public static void Run(this Form form, Action action) + { + form.BeginInvoke(action); + } + + public static void CloseForm(this Form form) + { + form.Invoke(new Action(() => + { + if (form.IsHandleCreated) + { + form.Close(); + } + })); + } + + public static void RunWithLoading(this Form form, Action action, string title = "加载中") + { + var loading = new LoadingForm(title); + form.Run(() => loading.ShowDialog()); + Task.Run(() => + { + try + { + form.Invoke(action); + loading.CloseForm(); + } + catch (Exception ex) + { + loading.CloseForm(); + MessageBox.Show(ex.Message); + } + }); + } +} \ No newline at end of file diff --git a/labs/CameraCard/CameraCard/LoadingForm.Designer.cs b/labs/CameraCard/CameraCard/LoadingForm.Designer.cs new file mode 100644 index 00000000..1ebf4deb --- /dev/null +++ b/labs/CameraCard/CameraCard/LoadingForm.Designer.cs @@ -0,0 +1,61 @@ +namespace CameraCard +{ + partial class LoadingForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LoadingForm)); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Image = ((System.Drawing.Image)(resources.GetObject("label1.Image"))); + this.label1.Location = new System.Drawing.Point(55, 11); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(48, 48); + this.label1.TabIndex = 0; + // + // LoadingForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(164, 68); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "LoadingForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "加载中"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/labs/CameraCard/CameraCard/LoadingForm.cs b/labs/CameraCard/CameraCard/LoadingForm.cs new file mode 100644 index 00000000..c5dcacf3 --- /dev/null +++ b/labs/CameraCard/CameraCard/LoadingForm.cs @@ -0,0 +1,15 @@ +using System; +using System.Windows.Forms; + +namespace CameraCard +{ + public partial class LoadingForm : Form + { + public LoadingForm(string title = "加载中") + { + InitializeComponent(); + this.ControlBox = false; + this.Text = title; + } + } +} \ No newline at end of file diff --git a/labs/CameraCard/CameraCard/LoadingForm.resx b/labs/CameraCard/CameraCard/LoadingForm.resx new file mode 100644 index 00000000..870bcfcb --- /dev/null +++ b/labs/CameraCard/CameraCard/LoadingForm.resx @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + R0lGODlhMAAwAOZ8APv7+0BAQH9/f8HBwc/Pz/z8/Orq6vX19fj4+MfHx/b29uDg4PHx8eTk5NXV1f39 + /fPz887Ozvf39/n5+ebm5tra2tfX1/T09MbGxsDAwN7e3uLi4uHh4d3d3YODg+Pj46CgoPLy8kFBQYSE + hMjIyLW1tdbW1tzc3Pr6+qysrEZGRggICFlZWbCwsJ+fn5CQkOfn53Fxce3t7YCAgKenp8rKyp2dnZSU + lAkJCcTExO/v70dHR+Xl5dPT0319faOjo9LS0u7u7oeHh7a2tjw8PNjY2ElJSY+Pj29vbz8/P6urq4mJ + iZubm1ZWVry8vAICAoqKiq2trY6OjlhYWDs7OyAgIOjo6K+vr2xsbG1tbYKCgnl5eURERAEBAR0dHYiI + iD09PVVVVevr6wYGBo2NjYaGhh4eHiEhIb29vaGhoa6urhwcHHp6ent7e83NzZycnPDw8NnZ2QUFBTo6 + OrS0tHBwcNHR0UpKSkhISOnp6b+/vwAAAP///wAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtY + TVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlk + Ij8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBD + b3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpS + REYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4g + PHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5j + b20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5 + cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHht + cE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpGOTdGMTE3NDA3MjA2ODExOEMxNEY4RUMxQzI3 + NjA5QiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyRjZBRjBDOERDN0YxMUUxQTBEOUM1RTUwRkEz + REE3QSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyRjZBRjBDN0RDN0YxMUUxQTBEOUM1RTUwRkEz + REE3QSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHht + cE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RjJCQzUxMUIwQTIwNjgxMThD + MTRGOEVDMUMyNzYwOUIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Rjk3RjExNzQwNzIwNjgxMThD + MTRGOEVDMUMyNzYwOUIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+ + IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ + 2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56d + nJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2Jh + YF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3NjU0MzIxMC8uLSwrKikoJyYl + JCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQJAAB8ACwAAAAAMAAwAAAH/4B8 + goOEhYaHiImKi4yNjo0mXl4mj5WNSXt7SZacBwCGPJmZPIefnIYtASo0hSWieyWFGwN6DaeFXwG6P4Qu + ryCEC3rDFreEL7oBIpSCUa9RgwwZw3oVxoNDyQExgz2vPYME1HoU14JBXNoXg1WZVYMA4wMT5oJM2guD + SplKgwfjHeoJAoAl2QlCQIAQgkAtwgNONVqUiLDOn4cAO0IoAkDLgSlBEyhUsGALEQIBKAV4QFOAEICW + lh5ooEXtY6ECHlKitIHgWoEI4/QMUJRDJ8oU1xwE1bNh0YAZRmGeWpqP0QcQKUc8vEVTDwEGlSQYgKHg + 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 + EggAOw== + + + \ No newline at end of file diff --git a/labs/CameraCard/CameraCard/LoginForm.Designer.cs b/labs/CameraCard/CameraCard/LoginForm.Designer.cs index 33561144..1ef30e18 100644 --- a/labs/CameraCard/CameraCard/LoginForm.Designer.cs +++ b/labs/CameraCard/CameraCard/LoginForm.Designer.cs @@ -41,47 +41,53 @@ // label1 // this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.label1.Location = new System.Drawing.Point(41, 56); this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(53, 12); + this.label1.Size = new System.Drawing.Size(56, 17); this.label1.TabIndex = 0; this.label1.Text = "登录名:"; // // userNameInput // + this.userNameInput.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.userNameInput.Location = new System.Drawing.Point(96, 50); this.userNameInput.Name = "userNameInput"; - this.userNameInput.Size = new System.Drawing.Size(157, 21); + this.userNameInput.Size = new System.Drawing.Size(157, 23); this.userNameInput.TabIndex = 1; // // label2 // this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.label2.Location = new System.Drawing.Point(56, 18); this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(197, 12); + this.label2.Size = new System.Drawing.Size(200, 17); this.label2.TabIndex = 2; this.label2.Text = "普通高中学业水平考试信息管理系统"; // // label3 // this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.label3.Location = new System.Drawing.Point(41, 105); this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(41, 12); + this.label3.Size = new System.Drawing.Size(44, 17); this.label3.TabIndex = 3; this.label3.Text = "密码:"; // // passwordInput // + this.passwordInput.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.passwordInput.Location = new System.Drawing.Point(96, 100); this.passwordInput.Name = "passwordInput"; this.passwordInput.PasswordChar = '*'; - this.passwordInput.Size = new System.Drawing.Size(157, 21); + this.passwordInput.Size = new System.Drawing.Size(157, 23); this.passwordInput.TabIndex = 4; // // login // + this.login.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.login.Location = new System.Drawing.Point(96, 149); this.login.Name = "login"; this.login.Size = new System.Drawing.Size(157, 30); @@ -93,20 +99,22 @@ // userNameValid // this.userNameValid.AutoSize = true; + this.userNameValid.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.userNameValid.ForeColor = System.Drawing.Color.Red; this.userNameValid.Location = new System.Drawing.Point(96, 78); this.userNameValid.Name = "userNameValid"; - this.userNameValid.Size = new System.Drawing.Size(29, 12); + this.userNameValid.Size = new System.Drawing.Size(32, 17); this.userNameValid.TabIndex = 6; this.userNameValid.Text = "验证"; // // passwordValid // this.passwordValid.AutoSize = true; + this.passwordValid.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.passwordValid.ForeColor = System.Drawing.Color.Red; this.passwordValid.Location = new System.Drawing.Point(95, 127); this.passwordValid.Name = "passwordValid"; - this.passwordValid.Size = new System.Drawing.Size(29, 12); + this.passwordValid.Size = new System.Drawing.Size(32, 17); this.passwordValid.TabIndex = 7; this.passwordValid.Text = "验证"; // diff --git a/labs/CameraCard/CameraCard/LoginForm.cs b/labs/CameraCard/CameraCard/LoginForm.cs index 7e7276cc..a402486b 100644 --- a/labs/CameraCard/CameraCard/LoginForm.cs +++ b/labs/CameraCard/CameraCard/LoginForm.cs @@ -6,6 +6,7 @@ using System.Net; using System.Net.Http; using System.Text; using System.Threading; +using System.Threading.Tasks; using System.Web.Script.Serialization; using System.Windows.Forms; @@ -13,8 +14,6 @@ namespace CameraCard { public partial class LoginForm : Form { - private ProgressForm _progress; - public LoginForm() { InitializeComponent(); @@ -59,7 +58,6 @@ namespace CameraCard var user = db.Users.FirstOrDefault(o => o.UserName == userName && o.Password == password); if (user != null) { - this._progress?.SetProgress("本地登录成功", 100); MainForm.User = user; this.Hide(); new MainForm().Show(); @@ -71,10 +69,38 @@ namespace CameraCard } else { - this.BeginInvoke(new Action(() => + var loading = new LoadingForm("登录中"); + this.Run(() => loading.ShowDialog()); + Task.Run(() => { - this.LoginFromServer(userName, password); - })); + try + { + this.LoginFromServer(userName, password); + loading.CloseForm(); + var progress = new ProgressForm("更新中", "正在下载数据", 0, 100); + this.Run(() => progress.ShowDialog()); + try + { + MainForm.LoadData(progress); + progress.CloseForm(); + this.Invoke(new Action(() => + { + this.Hide(); + new MainForm().Show(); + })); + } + catch (Exception ex) + { + progress.CloseForm(); + MessageBox.Show(ex.Message); + } + } + catch (Exception ex) + { + loading.CloseForm(); + MessageBox.Show(ex.Message); + } + }); } } } @@ -82,81 +108,40 @@ namespace CameraCard private void LoginFromServer(string userName, string password) { - if (this._progress == null) + var url = ConfigurationManager.AppSettings["login"]; + var client = HttpClientFactory.Create(); + var content = new StringContent(new JavaScriptSerializer().Serialize(new { userName = userName, password = password }), Encoding.UTF8, "application/json"); + var response = client.PostAsync(url, content).Result; + if (response.StatusCode == HttpStatusCode.OK) { - var thread = new Thread(() => + var result = new JavaScriptSerializer().Deserialize(response.Content.ReadAsStringAsync().Result); + if (result.code == 0) { - try + using (var db = new MyDbContext()) { - this._progress?.SetProgress("正在登录,请稍候", 30); - var url = ConfigurationManager.AppSettings["login"]; - var client = HttpClientFactory.Create(); - var content = new StringContent(new JavaScriptSerializer().Serialize(new { userName = userName, password = password }), Encoding.UTF8, "application/json"); - var response = client.PostAsync(url, content).Result; - this._progress?.SetProgress("正在登录,请稍候", 50); - if (response.StatusCode == HttpStatusCode.OK) + var user = db.Users.FirstOrDefault(o => o.UserName == userName); + if (user == null) { - var result = new JavaScriptSerializer().Deserialize(response.Content.ReadAsStringAsync().Result); - if (result.code == 0) - { - using (var db = new MyDbContext()) - { - var user = db.Users.FirstOrDefault(o => o.UserName == userName); - if (user == null) - { - user = new User { UserName = userName, Password = password, PasswordHash = result.data }; - db.Users.Add(user); - } - else - { - user.Password = password; - user.PasswordHash = result.data; - } - db.SaveChanges(); - MainForm.User = user; - } - this._progress?.SetProgress("登录成功,正在更新数据", 50); - MainForm.LoadData(this._progress); - this._progress?.SetProgress("数据更新完毕", 100); - this._progress.CloseProgress(); - this.Invoke(new Action(() => - { - this.Hide(); - new MainForm().Show(); - })); - } - else - { - MessageBox.Show($"错误代码:{result.code},错误消息:{result.message}"); - this._progress?.SetProgress("登录失败", 100); - this._progress.CloseProgress(); - } + user = new User { UserName = userName, Password = password, PasswordHash = result.data }; + db.Users.Add(user); } else { - MessageBox.Show(response.Content.ReadAsStringAsync().Result); - this._progress?.SetProgress("登录失败", 100); - this._progress.CloseProgress(); + user.Password = password; + user.PasswordHash = result.data; } + db.SaveChanges(); + MainForm.User = user; } - catch (ThreadAbortException ex) - { - } - catch (Exception ex) - { - MessageBox.Show(ex.Message); - } - }); - this._progress = new ProgressForm("登录中", "正在登录,请稍候", 0, 100, this.Width, () => + } + else { - this._progress = null; - if (thread != null && thread.IsAlive) - { - thread.Abort(); - } - }); - thread.Start(); - this._progress.ShowDialog(); + MessageBox.Show($"错误代码:{result.code},错误消息:{result.message}"); + } + } + else + { + MessageBox.Show(response.Content.ReadAsStringAsync().Result); } } @@ -167,5 +152,23 @@ namespace CameraCard this.login_Click(sender, e); } } + + private void button1_Click(object sender, EventArgs e) + { + var loading = new LoadingForm("登录中"); + this.Run(() => loading.ShowDialog()); + Task.Run(() => + { + try + { + loading.CloseForm(); + } + catch (Exception ex) + { + loading.CloseForm(); + MessageBox.Show(ex.Message); + } + }); + } } } \ No newline at end of file diff --git a/labs/CameraCard/CameraCard/MainForm.Designer.cs b/labs/CameraCard/CameraCard/MainForm.Designer.cs index 0e1323ea..1feef1a6 100644 --- a/labs/CameraCard/CameraCard/MainForm.Designer.cs +++ b/labs/CameraCard/CameraCard/MainForm.Designer.cs @@ -76,7 +76,6 @@ this.statusStrip1 = new System.Windows.Forms.StatusStrip(); this.statusLabel = new System.Windows.Forms.ToolStripStatusLabel(); this.versionLabel = new System.Windows.Forms.ToolStripStatusLabel(); - this.idCard = new CameraCard.IdCard(); this.StudentName = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Sex = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Nation = new System.Windows.Forms.DataGridViewTextBoxColumn(); @@ -89,6 +88,9 @@ this.HasChedked = new System.Windows.Forms.DataGridViewCheckBoxColumn(); this.HasUploaded = new System.Windows.Forms.DataGridViewCheckBoxColumn(); this.StudentId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.idCard = new CameraCard.IdCard(); + this.push = new System.Windows.Forms.Button(); + this.pull = new System.Windows.Forms.Button(); tab1 = new System.Windows.Forms.TabPage(); tab1.SuspendLayout(); this.idcGroupBox.SuspendLayout(); @@ -345,6 +347,8 @@ // // tab3 // + this.tab3.Controls.Add(this.pull); + this.tab3.Controls.Add(this.push); this.tab3.Controls.Add(this.totalPageValue); this.tab3.Controls.Add(this.pageIndexSelector); this.tab3.Controls.Add(this.pageMenu); @@ -420,7 +424,7 @@ // // searchBtn // - this.searchBtn.Location = new System.Drawing.Point(730, 18); + this.searchBtn.Location = new System.Drawing.Point(768, 18); this.searchBtn.Name = "searchBtn"; this.searchBtn.Size = new System.Drawing.Size(75, 23); this.searchBtn.TabIndex = 7; @@ -430,7 +434,7 @@ // // nameInput // - this.nameInput.Location = new System.Drawing.Point(457, 20); + this.nameInput.Location = new System.Drawing.Point(593, 20); this.nameInput.Name = "nameInput"; this.nameInput.Size = new System.Drawing.Size(120, 21); this.nameInput.TabIndex = 6; @@ -438,7 +442,7 @@ // label3 // this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(398, 24); + this.label3.Location = new System.Drawing.Point(534, 24); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(41, 12); this.label3.TabIndex = 5; @@ -446,7 +450,7 @@ // // numberInput // - this.numberInput.Location = new System.Drawing.Point(252, 21); + this.numberInput.Location = new System.Drawing.Point(388, 21); this.numberInput.Name = "numberInput"; this.numberInput.Size = new System.Drawing.Size(120, 21); this.numberInput.TabIndex = 4; @@ -454,7 +458,7 @@ // label2 // this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(200, 24); + this.label2.Location = new System.Drawing.Point(336, 24); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(53, 12); this.label2.TabIndex = 3; @@ -463,7 +467,7 @@ // label1 // this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(9, 24); + this.label1.Location = new System.Drawing.Point(145, 24); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(41, 12); this.label1.TabIndex = 2; @@ -473,7 +477,7 @@ // this.classSelector.DisplayMember = "Class"; this.classSelector.FormattingEnabled = true; - this.classSelector.Location = new System.Drawing.Point(56, 21); + this.classSelector.Location = new System.Drawing.Point(192, 21); this.classSelector.Name = "classSelector"; this.classSelector.Size = new System.Drawing.Size(121, 20); this.classSelector.TabIndex = 1; @@ -628,13 +632,6 @@ this.versionLabel.Size = new System.Drawing.Size(14, 17); this.versionLabel.Text = "v"; // - // idCard - // - this.idCard.Location = new System.Drawing.Point(-1, 16); - this.idCard.Name = "idCard"; - this.idCard.Size = new System.Drawing.Size(420, 200); - this.idCard.TabIndex = 8; - // // StudentName // this.StudentName.DataPropertyName = "Name"; @@ -723,6 +720,32 @@ this.StudentId.ReadOnly = true; this.StudentId.Visible = false; // + // idCard + // + this.idCard.Location = new System.Drawing.Point(-1, 16); + this.idCard.Name = "idCard"; + this.idCard.Size = new System.Drawing.Size(420, 200); + this.idCard.TabIndex = 8; + // + // push + // + this.push.Location = new System.Drawing.Point(893, 19); + this.push.Name = "push"; + this.push.Size = new System.Drawing.Size(75, 23); + this.push.TabIndex = 14; + this.push.Text = "上传"; + this.push.UseVisualStyleBackColor = true; + // + // pull + // + this.pull.Location = new System.Drawing.Point(20, 18); + this.pull.Name = "pull"; + this.pull.Size = new System.Drawing.Size(75, 23); + this.pull.TabIndex = 15; + this.pull.Text = "下载"; + this.pull.UseVisualStyleBackColor = true; + this.pull.Click += new System.EventHandler(this.pull_Click); + // // MainForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); @@ -819,5 +842,7 @@ private System.Windows.Forms.DataGridViewCheckBoxColumn HasChedked; private System.Windows.Forms.DataGridViewCheckBoxColumn HasUploaded; private System.Windows.Forms.DataGridViewTextBoxColumn StudentId; + private System.Windows.Forms.Button pull; + private System.Windows.Forms.Button push; } } \ No newline at end of file diff --git a/labs/CameraCard/CameraCard/MainForm.cs b/labs/CameraCard/CameraCard/MainForm.cs index 4efa8944..932d385d 100644 --- a/labs/CameraCard/CameraCard/MainForm.cs +++ b/labs/CameraCard/CameraCard/MainForm.cs @@ -21,7 +21,6 @@ namespace CameraCard public partial class MainForm : Form { private ICameraHelper _cameraHelper = new OpenCvSharpCameraHelper(); - private CVRHelper _cvrHelper = new CVRHelper(); public MainForm() @@ -178,36 +177,45 @@ namespace CameraCard public static void LoadData(ProgressForm progress) { - var url = ConfigurationManager.AppSettings["pull"]; - var client = HttpClientFactory.Create(); - var content = new StringContent(new JavaScriptSerializer().Serialize(new { userName = MainForm.User.UserName }), Encoding.UTF8, "application/json"); - var response = client.PostAsync(url, content).Result; - var result = new JavaScriptSerializer().Deserialize(response.Content.ReadAsStringAsync().Result); - if (result.code == 0) + try { - using (var db = new MyDbContext()) + var url = ConfigurationManager.AppSettings["pull"]; + var client = HttpClientFactory.Create(); + var content = new StringContent(new JavaScriptSerializer().Serialize(new { userName = MainForm.User.UserName }), Encoding.UTF8, "application/json"); + var response = client.PostAsync(url, content).Result; + var result = new JavaScriptSerializer().Deserialize(response.Content.ReadAsStringAsync().Result); + if (result.code == 0) { - foreach (var item in result.data) + using (var db = new MyDbContext()) { - var entity = db.Students.FirstOrDefault(o => o.Id == item.Id); - if (entity == null) - { - entity = item; - db.Students.Add(entity); - progress?.SetProgress($"正在加载{entity.Name}", 50); - } - else + int i = 1; + foreach (var item in result.data) { - progress?.SetProgress($"正在更新{entity.Name}", 50); - entity.Adapt(item); + var entity = db.Students.FirstOrDefault(o => o.Id == item.Id); + if (entity == null) + { + entity = item; + db.Students.Add(entity); + progress?.SetProgress($"正在加载{entity.Name}", i * 100 / result.data.Count); + } + else + { + progress?.SetProgress($"正在更新{entity.Name}", i * 100 / result.data.Count); + entity.Adapt(item); + } + db.SaveChanges(); + i++; } - db.SaveChanges(); } } + else + { + MessageBox.Show($"错误代码:{result.code},错误消息:{result.message}"); + } } - else + catch (Exception ex) { - MessageBox.Show($"错误代码:{result.code},错误消息:{result.message}"); + MessageBox.Show(ex.Message); } } @@ -340,210 +348,192 @@ namespace CameraCard { if (e.TabPage.Text == "采集进度") { - RefreshGroup(); + this.RunWithLoading(RefreshGroup); } else if (e.TabPage.Text == "图像管理") { - RefreshData(); + this.RunWithLoading(RefreshData); } } private void RefreshGroup() { - this._progress = new ProgressForm("加载中", "正在统计,请稍候", 0, 100, 320, null, false); - Task.Run(() => + using (var db = new MyDbContext()) { - this.Invoke(new Action(() => + var list = db.Students.GroupBy(o => o.Class, (k, g) => new GroupData { - using (var db = new MyDbContext()) + Class = k, + Total = g.Count(), + HasImage = g.Sum(c => c.HasImage ? 1 : 0), + NotHasImage = g.Sum(c => c.HasImage ? 0 : 1), + HasUpload = g.Sum(c => c.HasUploaded ? 1 : 0), + NotHasUpload = g.Sum(c => c.HasUploaded ? 0 : 1), + HasChecked = g.Sum(c => c.HasChecked ? 1 : 0), + IsNotChecked = g.Sum(c => c.HasChecked ? 0 : 1), + Progress = g.Sum(c => c.HasUploaded ? 1 : 0) / (g.Count() * 1.0f) + }) + .OrderBy(o => o.Class) + .ToList(); + var total = new GroupData + { + Class = "合计", + Total = list.Sum(o => o.Total), + HasImage = list.Sum(o => o.HasImage), + NotHasImage = list.Sum(o => o.NotHasImage), + HasUpload = list.Sum(o => o.HasUpload), + NotHasUpload = list.Sum(o => o.NotHasUpload), + HasChecked = list.Sum(o => o.HasChecked), + IsNotChecked = list.Sum(o => o.HasChecked), + Progress = list.Sum(o => o.NotHasUpload) / (list.Sum(o => o.Total) * 1.0f) + }; + list.Insert(0, total); + groupGrid.DataSource = list; + var headers = new string[] { "班级", "总人数", "已采集", "未采集", "已上传", "未上传", "已审核", "未审核", "完成进度" }; + for (int i = 0; i < headers.Length; i++) + { + groupGrid.Columns[i].HeaderText = headers[i]; + if (headers[i] == "完成进度") { - this._progress.SetProgress("开始统计数据", 0); - var list = db.Students.GroupBy(o => o.Class, (k, g) => new GroupData - { - Class = k, - Total = g.Count(), - HasImage = g.Sum(c => c.HasImage ? 1 : 0), - NotHasImage = g.Sum(c => c.HasImage ? 0 : 1), - HasUpload = g.Sum(c => c.HasUploaded ? 1 : 0), - NotHasUpload = g.Sum(c => c.HasUploaded ? 0 : 1), - HasChecked = g.Sum(c => c.HasChecked ? 1 : 0), - IsNotChecked = g.Sum(c => c.HasChecked ? 0 : 1), - Progress = g.Sum(c => c.HasUploaded ? 1 : 0) / (g.Count() * 1.0f) - }) - .OrderBy(o => o.Class) - .ToList(); - this._progress.SetProgress("开始合计数据", 30); - var total = new GroupData - { - Class = "合计", - Total = list.Sum(o => o.Total), - HasImage = list.Sum(o => o.HasImage), - NotHasImage = list.Sum(o => o.NotHasImage), - HasUpload = list.Sum(o => o.HasUpload), - NotHasUpload = list.Sum(o => o.NotHasUpload), - HasChecked = list.Sum(o => o.HasChecked), - IsNotChecked = list.Sum(o => o.HasChecked), - Progress = list.Sum(o => o.NotHasUpload) / (list.Sum(o => o.Total) * 1.0f) - }; - list.Insert(0, total); - groupGrid.DataSource = list; - this._progress.SetProgress("开始设置表头", 60); - var headers = new string[] { "班级", "总人数", "已采集", "未采集", "已上传", "未上传", "已审核", "未审核", "完成进度" }; - for (int i = 0; i < headers.Length; i++) - { - groupGrid.Columns[i].HeaderText = headers[i]; - if (headers[i] == "完成进度") - { - groupGrid.Columns[i].DefaultCellStyle.Format = "P0"; - } - } - this._progress.SetProgress("加载完毕", 100); + groupGrid.Columns[i].DefaultCellStyle.Format = "P0"; } - })); - this._progress.CloseProgress(); - this._progress = null; - }); - this._progress.ShowDialog(); + } + } } private void RefreshData() { - this._progress = new ProgressForm("加载中", "正在读取,请稍候", 0, 100, 320, null, false); - Task.Run(() => + var pageIndex = this.pageIndexSelector.SelectedValue == null ? 1 : Convert.ToInt32(this.pageIndexSelector.SelectedValue?.ToString()); + var classValue = this.classSelector.SelectedValue == null ? "全部班级" : this.classSelector.SelectedValue.ToString(); + using (var db = new MyDbContext()) { - this.Invoke(new Action(() => + //pagesize + if (this.pageSizeSelector.DataSource == null) { - this._progress.SetProgress("开始读取数据", 0); - var pageIndex = this.pageIndexSelector.SelectedValue == null ? 1 : Convert.ToInt32(this.pageIndexSelector.SelectedValue?.ToString()); - var classValue = this.classSelector.SelectedValue == null ? "全部班级" : this.classSelector.SelectedValue.ToString(); - using (var db = new MyDbContext()) + this.pageSizeSelector.SelectedIndexChanged -= this.pageSizeSelector_SelectedIndexChanged; + this.pageSizeSelector.DataSource = new List { + new { Value=20,Text="20条/页"}, + new { Value=50,Text="50条/页"}, + new { Value=100,Text="100条/页"} + }; + this.pageSizeSelector.SelectedIndexChanged += this.pageSizeSelector_SelectedIndexChanged; + } + //class + if (this.classSelector.DataSource == null) + { + this.classSelector.SelectedIndexChanged -= this.classSelector_SelectedIndexChanged; + var classList = db.Students.Select(o => new { o.Class }).Distinct().OrderBy(o => o.Class).ToList(); + classList.Insert(0, new { Class = "全部班级" }); + this.classSelector.DataSource = classList; + this.classSelector.SelectedValue = classValue; + this.classSelector.SelectedIndexChanged += this.classSelector_SelectedIndexChanged; + } + //search + var query = db.Set().AsQueryable(); + if (classValue != "全部班级") + { + query = query.Where(o => o.Class == classValue); + } + var total = query.Count(); + this.totalValue.Text = $"共{total}条"; + var pageSize = (int)this.pageSizeSelector.SelectedValue; + var paged = new PagedList(pageSize); + paged.TotalCount = total; + var pageCount = paged.PageCount(); + pageIndex = pageIndex > pageCount ? 1 : pageIndex; + this.totalPageValue.Text = $"共{pageCount}页"; + if (this.dataGrid.Rows.Count > 0) + { + foreach (DataGridViewRow row in this.dataGrid.Rows) { - //pagesize - if (this.pageSizeSelector.DataSource == null) - { - this.pageSizeSelector.DataSource = new List { - new { Value=20,Text="20条/页"}, - new { Value=50,Text="50条/页"}, - new { Value=100,Text="100条/页"} - }; - } - //class - if (this.classSelector.DataSource == null) - { - var classList = db.Students.Select(o => new { o.Class }).Distinct().OrderBy(o => o.Class).ToList(); - classList.Insert(0, new { Class = "全部班级" }); - this.classSelector.DataSource = classList; - this.classSelector.SelectedValue = classValue; - } - //search - var query = db.Set().AsQueryable(); - if (classValue != "全部班级") - { - query = query.Where(o => o.Class == classValue); - } - var total = query.Count(); - this.totalValue.Text = $"共{total}条"; - var pageSize = (int)this.pageSizeSelector.SelectedValue; - var paged = new PagedList(pageSize); - paged.TotalCount = total; - var pageCount = paged.PageCount(); - pageIndex = pageIndex > pageCount ? 1 : pageIndex; - this.totalPageValue.Text = $"共{pageCount}页"; - if (this.dataGrid.Rows.Count > 0) - { - foreach (DataGridViewRow row in this.dataGrid.Rows) - { - foreach (DataGridViewCell cell in row.Cells) - { - if (this.dataGrid.Columns[cell.ColumnIndex].Name == "图像") - { - (cell.Value as Image).Dispose(); - } - } - } - } - this.dataGrid.DataSource = query.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); - var pageList = new List(); - for (int i = 0; i < paged.PageCount(); i++) - { - pageList.Add(new { Value = i + 1, Text = $"第{i + 1}页" }); - } - this.pageIndexSelector.DataSource = pageList; - this.pageIndexSelector.SelectedValue = pageIndex; - this.pageMenu.Controls.Clear(); - paged.PageIndex = pageIndex; - if (paged.HasPrev()) - { - this.pageMenu.Controls.Add(new Button { Text = "<", Width = 30, Tag = pageIndex - 1 }); - } - foreach (var item in paged.GetPageIndexs()) + foreach (DataGridViewCell cell in row.Cells) { - var button = new Button { Text = item.ToString(), Width = 30, Tag = item }; - if (item == pageIndex) + if (this.dataGrid.Columns[cell.ColumnIndex].Name == "图像") { - button.ForeColor = Color.Red; + (cell.Value as Image).Dispose(); } - this.pageMenu.Controls.Add(button); } - if (paged.HasNext()) - { - this.pageMenu.Controls.Add(new Button { Text = ">", Width = 30, Tag = pageIndex + 1 }); - } - foreach (var item in this.pageMenu.Controls) + } + } + this.dataGrid.DataSource = query.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); + var pageList = new List(); + for (int i = 0; i < paged.PageCount(); i++) + { + pageList.Add(new { Value = i + 1, Text = $"第{i + 1}页" }); + } + this.pageIndexSelector.SelectedIndexChanged -= this.pageIndexSelector_SelectedIndexChanged; + this.pageIndexSelector.DataSource = pageList; + this.pageIndexSelector.SelectedValue = pageIndex; + this.pageIndexSelector.SelectedIndexChanged += this.pageIndexSelector_SelectedIndexChanged; + this.pageMenu.Controls.Clear(); + paged.PageIndex = pageIndex; + if (paged.HasPrev()) + { + this.pageMenu.Controls.Add(new Button { Text = "<", Width = 30, Tag = pageIndex - 1 }); + } + foreach (var item in paged.GetPageIndexs()) + { + var button = new Button { Text = item.ToString(), Width = 30, Tag = item }; + if (item == pageIndex) + { + button.ForeColor = Color.Red; + } + this.pageMenu.Controls.Add(button); + } + if (paged.HasNext()) + { + this.pageMenu.Controls.Add(new Button { Text = ">", Width = 30, Tag = pageIndex + 1 }); + } + foreach (var item in this.pageMenu.Controls) + { + (item as Button).Click += (s, e) => + { + if (this._progress == null) { - (item as Button).Click += (s, e) => - { - if (this._progress == null) - { - this.pageIndexSelector.SelectedValue = Convert.ToInt32((s as Button).Tag); - } - }; + this.pageIndexSelector.SelectedValue = Convert.ToInt32((s as Button).Tag); } - //header - //var dataGridHeaders = new string[] { "姓名", "性别", "民族", "身份证号", "班级", "考籍号", "图像", "已采集", "相片已审核", "已上传", "身份证已验证" }; - //for (int i = 0; i < dataGridHeaders.Length; i++) - //{ - // dataGrid.Columns[i].HeaderText = dataGridHeaders[i]; - //} - this._progress.SetProgress("加载完毕", 100); - } - this._progress.CloseProgress(); - this._progress = null; - })); - }); - this._progress.ShowDialog(); + }; + } + } } private void pageIndexSelector_SelectedIndexChanged(object sender, EventArgs e) { - if (this._progress == null) - { - this.RefreshData(); - } + this.RunWithLoading(RefreshData); } private void classSelector_SelectedIndexChanged(object sender, EventArgs e) { - if (this._progress == null) - { - this.RefreshData(); - } + this.RunWithLoading(RefreshData); } private void pageSizeSelector_SelectedIndexChanged(object sender, EventArgs e) { - if (this._progress == null) - { - this.RefreshData(); - } + this.RunWithLoading(RefreshData); } private void searchBtn_Click(object sender, EventArgs e) { - if (this._progress == null) + this.RunWithLoading(RefreshData); + } + + private void pull_Click(object sender, EventArgs e) + { + var progress = new ProgressForm("更新中", "正在下载数据", 0, 100); + this.Run(() => progress.ShowDialog()); + Task.Run(() => { - this.RefreshData(); - } + try + { + MainForm.LoadData(progress); + progress.CloseForm(); + this.RunWithLoading(RefreshData); + } + catch (Exception ex) + { + progress.CloseForm(); + MessageBox.Show(ex.Message); + } + }); } } } \ No newline at end of file diff --git a/labs/CameraCard/CameraCard/ProgressForm.cs b/labs/CameraCard/CameraCard/ProgressForm.cs index e68712ad..0477b88c 100644 --- a/labs/CameraCard/CameraCard/ProgressForm.cs +++ b/labs/CameraCard/CameraCard/ProgressForm.cs @@ -32,17 +32,9 @@ namespace CameraCard this.Invoke(new Action(() => { this.status.Text = label; - this.progressBar.Value = progress; + this.progressBar.Value = progress < this.progressBar.Maximum ? progress : this.progressBar.Maximum; })); } } - - public void CloseProgress() - { - this.Invoke(new Action(() => - { - this.Close(); - })); - } } } \ No newline at end of file diff --git a/labs/CameraCard/CameraCard/loading.gif b/labs/CameraCard/CameraCard/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..39134a730bab99967021754e5c713515d249ea49 GIT binary patch literal 6244 zcmd^DcU%)$*PcloLJPe}8A35iOXviGNeERy6hw3_AfTX>2&fp?HDm&WUIa9Xn1Db~ z1XOI;qJScbf`B5fieN=i5pgZ+`UPG0eZSxDZQuLvH_0!VxpU6B_ndj|bDujte%>yw zkraReJjnn)fBwv1Ft%^se&ND}8#iwJ{`>C}6B9EtGao*DxP1BY`}glhM@OforXD?d zG&D5y<;$1p>FMj&umASjZy!H?eDdVU$jHd;+qd7ndw1#5C7Dci|Ni~4v9X5_AKtrn z4?&Re@o}+O{PyizCX*=;2)etwj~zR9>(;GbfBp5-r%z2yP2S$#5Ckn>zPz=yb>F^y zB_$Djw?Z+UsSf`US4XXoqJuYG)c9zT9OFfj1*&p+4J z*515%^VO?YIXOAUj~{n;cOM=e_Ve>AE-p?=N?NdB!NG$Eb8~a|?Aa3*7Ix;$859bY zmzQ_w(4nHDqVVu=H#avJhMzrq*3!}vA0MBPkih5jw{6?TX0t&MG&D363Wan!ed*Gr zFJ8RB;c$h8h1uEJMn*;^CMIXko|Q->&CSgQ1_oR%H$6SQx3{;ds_M;~H+Syb!D6vA z8m+CZjl<#e_xJnz`}_L(K7aoF{Q2_$0DS%WRsQ?^F!`z&$3RLT$1^52&X=1U6T%G& zjpA;Ma*ZY}@POUZXlV(YgqYMwI4vPQF@=^!Cq+glt&O3{&u5!$N$@w5)Qxl!bM^*2 z+oxwzat!QfV{aWrp;BQdCmX7RqmvWW3bvzA?QALXuah;^f#&E$vvZc0?%P3<_m&*J zj<$sD{byhDD>^AQHI+lNwcWaPtIbw>o22CRwp3SF*V!0$cGhwW>y&MYsgY^ci7BQ( zBCumpqLSk{sc}h(@NC4$wMm;(=_L6`zo(GE2@L!zaAJzhw}fn>k`ipwB008H8;Wg0 z!famOtW#2##Qbd-|Ij)mbQ>qec1cW1(&pr-7`eIW4`+Gp{&h#QhVs$S7A42YA4+6A zJ1J^&LQG<+ADd2+-?52~i>7(II(t*8&JGl3JBpJFmFnV2b?|oa@}zp&IXh8YSwCX@ zBVRjjC#E;W(}nFh8^eprq_AB*9labW-b{No)0z3h*Do<8H8L?O=10GA@_zsHb^e#W zG|%Li$ke3d(4?gJ9|#DJO-fBliB00bo*_;!IWRIRE^)SD-s}VVo-aElIc`f#w0Ck+ z0{pGQw77pT0&hE(rz4fhqA>qi=HGpz|C_4W$_HaR3y;5p%a0~G24_$I0>Av?ujvz$ zD4#RQ^2q^y{o~8;pFe&4@Z0;DchhgD-n@P_`SQiY^Jh<=JbpAj_HgvU{d>RO9l0}n z`_|Clz|H=?8`pcUUG2Hjefd&XXUD}0vh(N8o;lrq>g0*z$J&k_Io#UPe5mQ*fktUV zeck@r8i{yc_1>yIyG6TpR#uenC@U=~E-Ea@&&w6&WM>HwekO1GFF$9bbGM~!-Lg3~ zC3zDkDKQ~_aqyy`z<`DRe!f25UTjYm zld-^q?(Rl&b#Zobbg;LhQfzIktt{uyBhR%kH!~%fz{W;~26OcFbak|~G&R)Kh^i{e zN{R#p2#>>J&?q^@n0&-206+#{HOoP>3ju)t%FEy*f~@QuVQyZ2L19s$#p=}-#TA8q z>FIuzRd^uVT_keP*;kcq4bFGSGOtND&zghgDmP@U0oxY{Y+7J}BDX{Pguu2PB$e|Q zw=71K^g6g&mk`e@AQhpv&=JfaSMxTXxpG7YSt?qJ0OM$lC;WgBMZ{m^kKo4*ClpXT z^E(PG29L;RSYJd3Ij$%dwqD z86`m(EvaeC99@wKjlWY0F87?J_@tsOYWSVGT92W0$<&QL4LD@p5of&R**@|?hwAP zUcH;wmvwgV(;toj39XV7n>6+uOm|MYJ0R6E=D{QVciJj+BaAjQy}0eISYLQr+re{) zJ*Sf9+g^^;Gx95NiA#yW8qm-)3KMe3w)32Eof?a8bSi55&EnB0nlA z#Gw8oG$;lJD$3E|3xd9tRS-5C5{aN}oLN?%%H9|WYYjup7Imh3Uq;k=P%vWBYJ!l4(pkfN;)=WKNQfu|F?~SM1dF9m5#36cxSJv2XGI8s zXUiMc^Rn>*f^229xLSiIM9UdKnZXx-3tYsPZF zl6T{)YY~q9xVnI1SH~Xa;@cH!&yq8%$`1(yhg+FQYvkfW&+R*`^@9i zW9sl;%UB#F*T0p7jaDg(`O^pJjZiuYMW8a6i zYJ_L_wraTXDZIP>TEkJ`!n0EnS&)G;X~VA5jh*cSLG;k(Q~qtBq*gU zhxwp&LzXtTT~T1yVkcMtcC0xe&}!%E9p=+oXov-=1GK$_XkOuB5JC$9p$>wcxA_|A zk!rq=$Oq9GU&(yJHx850LCTM%XS%XPt# zSmt8-C4KUwU5y$Vbp@wu&qL~=J+qJymxh$ifrB79Bqqfu=(DCT*^(%S1hhq)##{Om zN;0ElM)n8xi!Usi>6^7lTI-e{)pAMr$b|j5o-+cA5&FZuJLk?~U z&3owx5N!gyQypJ8R^8p@*c<$AMZeM+&4e`WJMBv~2AU6VX+>_SMPWm#1MXzjox$t(es&-eNS!6n?D_sPV+CzgE*_?pv_?6+eiLvgi4lR5iq zSJU&g#L64A54{)LC`|~vLEVUw;$pV8$QS+_MQ8yiKu`Vw@EyDiysj=j#wc543c zjM2v_hl%B%=Z@vbJh5B4^CQRL8sc2-l^oy0HC`U{8XoxqvNq2?os}JMv(<=LO8zZP zEzK^**B&1d>gQLs)?3Fw75kr2-)xq0oX@6MStZ1ZMA#f)Z!sk1Lf=-vxmHLiDEU?2Nl2}m4_Kb zHS=YTPm8dzMyL;{1JijLP9HzG3&(bnv5X8?$YMT+a|y`GH7e-FkD=LKgb3Ydn-AAs zF3w_w$3;XK`!dntnDA5TSNJ>d;XO)3+>?OHz@WE!l$iR3d-?1#2Zc6iKieyj=dx)K zD53{@m5@h(14DC7^NzG`*sRb;WS@MsToU*c<79a<$odmgs7CS7DC(K9IMICXblUWU zBO#&Xfq&*V!SHYS;D6N#$oW>N>ZoC$q?SqT6Ued z-ACMbga*Tz=x4+uWtpmgNID#-u=rw@GFB_iC1Rt2L3+5EmS%K!zPYu_)HFVLw2=O$ zG5TvgSnbY5Zpw1bdl~1IKiXw4#C@Km;!+<3Yveg*m^Bna*vkGOs-&PHfP4*NUDWve zuwTVSgfWL~B_Hg%q0hbjD)Z6L*uIt$84J?1eEAUZu*y{LA!iAhsC5EP2V9bCPy*m2 zYK@ODWkr9l9kc+gKZ)VocO{7c>IAt^D9pksaLdXt_@Y8!$8N6f&TP@1vc1*CrMoNk z@5;?@Jk;FMNTA@^o4A2S zm56-KSUYAh7=pRri|~Q{^U~A(5yclT0vgv(Ek*F}!Ik{92{qf*#Z2lS6>s*}i_b7E z*u!pP3Ib0Z!7sy><8i`{EJ3Uk>bt0+nxpLT^RyXhwfY)jZ__4V$D+UEx_>T?i%Uw& zc9d6C?%XBXy{Bq#^**trrgnc_eS@^|z`>?N1>aI{lqY`jBnDp(oI20dJu5qPvHrO1 zbYtt0w&ojGi8??N`V>a#fJ{%ZQKi#BidB=LE0l2ss@M6d`nOIEmYP_lyLjczvLGbT z(3~G03&){K=};1pCfi6<0*MK&rw4H+EFyx#KqZkSppdvXdhGDUv1$z@Jif{f0)4?1 zaD@8WC7oj89OrCZ%vjx=fUQ%sq5KETax5^4$G`2hX+ zz+(OK_fNxo48O*$g#`~Au58(~s@E_zv#A=h?yjWHFTz@KaQTDX6Q3O8hc1^S#QCPw z3LSu8Ee(>%+T!&FnXZO`?XjI2H>3-cYDFfoB(ikz(UTuT=8~wEYhO!PBjpQsQ`Jg^ z*6SB`Y%DS^445~B*D{R>y*o{e@PWKEW2*?R+9C9Dxof-FemfVXD~> zB1VMtoelmt@;rFTgW=A!y|xuYqZm40BYx?k2vO6$PxImEZPUGquX7_V!W;)OPo>v= zho8d(tEu~{f^M-y={#m2ND-7WJWZ5hhvyg{>8rT`&XtHw2>aRc_jc2#Momp|zD(~} zPm4w~wCVSC;`_!D^%os<@iH>p&Eds#zI{l&qguP?5W?RFuxBtk}4_bj#iX z6~Em}{c9@)HvYl`t%r{s-HTV8Ytoi$K?TpbVcQpw&UFE84qaVFZNU5G((9O z?K|UdKGFN3#FynsN4Xu7Ix|Z7`Oj!W#8H#WB#e%lltqkRoSAPupw{ODuc|>SP*#p= zKz~y}|0h-`_lWRj8P^ES(wovP<24$yaF&Of*h)tP3y(KhwF^vFot4V?W~4(dxJ!b$ zu(Mb1z+eG{Qw}p3P}~eYcwmLT6gc_>#LFU|jy`W!^nDtlH*i~-a(C#{=lt6g!k`C_ z$l!D$>(J|nE5l{sMOlg=x|XA04KN2PFyTqN{5sY-HkWhInZY2Qivz^(VSe>ab37O> z^6$91QwOJ)cEw6F4|JaCd$eOT2DMm|uU?{;Ds3PzQxwXGp)9hZvkq|yQ4^Np=DBLJ zhz?QY284k5;!-HPS~o;cF_V?-*taU+zYz##xa{vzsw&4L-7+`}s`*nPG-R>U+f4=X z4S_(hM*c#iN5BG>7=cQNwc)xk|X(g4P)4|1=EC zMZ!KlzQu5guMt{u55~y$z)%gzeROc`m3$K>M2$F%_fhi#VqGcS>rrw!9dAM-ilYIo z0GD67mp#wKt*CKP4~;w$t?l1MV5ils=aKXs7jmUfcnwA>`M(IE`A5t8v4sJhlvBu{ z^{(Bzq3x}sY~cm~UKu;l(zJX#S+~0nd}(D2sDILgTm8FvieTE*IZp5`Ui&f(hfr2_ zqLmjueo}7;$t3D^Y*Ry4T|4>e-bJ4epQf+cw@TVJ-mT8E+}SLDqhJZT0GTgqTca$g z!0n^@VW<^))+O%`=-*HZ)=Hop_!zdh+E*j8SM$O#)4lFLla^G?^UTQ_Uum=TzKn$> zyuoRaX|j($6&ld_ns<`dTR<3BQgji$I(wPU%ZGE?7KNTqBggN&PMZ|I4RY56!Xhki z{q;F6z8KBA=A!(r{8zYHND{$E2gg*GON47j boEnu;*DYM(); for (int i = 0; i < 222; i++) { - list.Add(new Student { - Id = Guid.NewGuid().ToString(), - Name = $"小明{i+1}", - Class = $"{i%10+1}班", + list.Add(new Student + { + Id = i.ToString(), + Name = $"小明{i + 1}", + Class = $"{i % 10 + 1}班", Sex = "男", Nation = "汉", - IdCardNo = $"01234567891234{i+1}", - Number = $"01234567891234{i+1}" + IdCardNo = $"01234567891234{i + 1}", + Number = $"01234567891234{i + 1}" }); } return new ApiResponse
$3RLT$1^52&X=1U6T%G& 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 boEnu;*DYM(); for (int i = 0; i < 222; i++) { - list.Add(new Student { - Id = Guid.NewGuid().ToString(), - Name = $"小明{i+1}", - Class = $"{i%10+1}班", + list.Add(new Student + { + Id = i.ToString(), + Name = $"小明{i + 1}", + Class = $"{i % 10 + 1}班", Sex = "男", Nation = "汉", - IdCardNo = $"01234567891234{i+1}", - Number = $"01234567891234{i+1}" + IdCardNo = $"01234567891234{i + 1}", + Number = $"01234567891234{i + 1}" }); } return new ApiResponse