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 00000000..39134a73 Binary files /dev/null and b/labs/CameraCard/CameraCard/loading.gif differ diff --git a/labs/CameraCard/WebApi/Controllers/TestController.cs b/labs/CameraCard/WebApi/Controllers/TestController.cs index 7a017832..15cc2424 100644 --- a/labs/CameraCard/WebApi/Controllers/TestController.cs +++ b/labs/CameraCard/WebApi/Controllers/TestController.cs @@ -40,14 +40,15 @@ namespace WebApi.Controllers var list = new List(); 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