You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
814 lines
34 KiB
814 lines
34 KiB
using CameraCard.Data;
|
|
using Newtonsoft.Json;
|
|
using Omu.ValueInjecter;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Configuration;
|
|
using System.Data;
|
|
using System.Diagnostics;
|
|
using System.Drawing;
|
|
using System.Drawing.Drawing2D;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Net.Http;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace CameraCard
|
|
{
|
|
public partial class MainForm : Form
|
|
{
|
|
private ICameraHelper _cameraHelper = new OpenCvSharpCameraHelper();
|
|
private CVRHelper _cvrHelper = new CVRHelper();
|
|
|
|
public MainForm()
|
|
{
|
|
InitializeComponent();
|
|
this.versionLabel.Alignment = ToolStripItemAlignment.Right;
|
|
this.versionLabel.Text += Assembly.GetExecutingAssembly().GetName().Version.ToString();
|
|
this.currentVersion.Text += this.versionLabel.Text;
|
|
this.loginUserName.Text += User.UserName;
|
|
this.userRealName.Text += User.RealName;
|
|
this.userOrgan.Text += User.Organ;
|
|
//init
|
|
if (this.pageSizeSelector.DataSource == null)
|
|
{
|
|
this.pageSizeSelector.SelectedIndexChanged -= this.pageSizeSelector_SelectedIndexChanged;
|
|
this.pageSizeSelector.DataSource = new List<object> {
|
|
new { Value=20,Text="20条/页"},
|
|
new { Value=50,Text="50条/页"},
|
|
new { Value=100,Text="100条/页"}
|
|
};
|
|
this.pageSizeSelector.SelectedIndexChanged += this.pageSizeSelector_SelectedIndexChanged;
|
|
}
|
|
if (this.imageStatusSelector.DataSource == null)
|
|
{
|
|
this.imageStatusSelector.SelectedIndexChanged -= this.imageStatusSelctor_SelectedIndexChanged;
|
|
this.imageStatusSelector.DataSource = new List<object> {
|
|
new { Value=false,Text="全部"},
|
|
new { Value=true,Text="已采集"},
|
|
new { Value=false,Text="未采集"}
|
|
};
|
|
this.imageStatusSelector.SelectedIndexChanged += this.imageStatusSelctor_SelectedIndexChanged;
|
|
}
|
|
if (this.uploadStatusSelector.DataSource == null)
|
|
{
|
|
this.uploadStatusSelector.SelectedIndexChanged -= this.uploadStatusSelector_SelectedIndexChanged;
|
|
this.uploadStatusSelector.DataSource = new List<object> {
|
|
new { Value=false,Text="全部"},
|
|
new { Value=true,Text="已上传"},
|
|
new { Value=false,Text="未上传"}
|
|
};
|
|
this.uploadStatusSelector.SelectedIndexChanged += this.uploadStatusSelector_SelectedIndexChanged;
|
|
}
|
|
if (this.checkStatusSelector.DataSource == null)
|
|
{
|
|
this.checkStatusSelector.SelectedIndexChanged -= this.checkStatusSelector_SelectedIndexChanged;
|
|
this.checkStatusSelector.DataSource = new List<object> {
|
|
new { Value=false,Text="全部"},
|
|
new { Value=true,Text="已审核"},
|
|
new { Value=false,Text="未审核"}
|
|
};
|
|
this.checkStatusSelector.SelectedIndexChanged += this.checkStatusSelector_SelectedIndexChanged;
|
|
}
|
|
if (this.cardStatusSelector.DataSource == null)
|
|
{
|
|
this.cardStatusSelector.SelectedIndexChanged -= this.cardStatusSelector_SelectedIndexChanged;
|
|
this.cardStatusSelector.DataSource = new List<object> {
|
|
new { Value=false,Text="全部"},
|
|
new { Value=true,Text="已验证"},
|
|
new { Value=false,Text="未验证"}
|
|
};
|
|
this.cardStatusSelector.SelectedIndexChanged += this.cardStatusSelector_SelectedIndexChanged;
|
|
}
|
|
}
|
|
|
|
private void MainFrom_Load(object sender, EventArgs e)
|
|
{
|
|
//截图
|
|
this.CreateRect();
|
|
//摄像头预览
|
|
this._cameraHelper.OnCameraChange = o =>
|
|
{
|
|
this.Invoke(new Action(() =>
|
|
{
|
|
try
|
|
{
|
|
this.cameraSelector.Items.Clear();
|
|
this.cameraSelector.Text = string.Empty;
|
|
foreach (var item in o)
|
|
{
|
|
this.cameraSelector.Items.Add(item);
|
|
}
|
|
if (this.cameraSelector.Items.Count > 0)
|
|
{
|
|
this.cameraSelector.SelectedIndex = 0;
|
|
}
|
|
else
|
|
{
|
|
this.cameraSelector.Text = "没有检测到USB摄像头";
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
this.log.Text += ex.Message;
|
|
this.log.Text += ex.StackTrace;
|
|
this.log.Text += Environment.NewLine;
|
|
}
|
|
}));
|
|
};
|
|
this._cameraHelper.OnFrame = o =>
|
|
{
|
|
this.Invoke(new Action(() =>
|
|
{
|
|
try
|
|
{
|
|
cameraRender.Image?.Dispose();
|
|
cameraRender.Image = o;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
this.log.Text += ex.Message;
|
|
this.log.Text += ex.StackTrace;
|
|
this.log.Text += Environment.NewLine;
|
|
}
|
|
}));
|
|
};
|
|
this.cameraSelector.SelectedIndexChanged += new EventHandler((s, o) =>
|
|
{
|
|
try
|
|
{
|
|
this._cameraHelper.SwitchCamera((s as ComboBox).SelectedIndex);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
this.log.Text += ex.Message;
|
|
this.log.Text += ex.StackTrace;
|
|
this.log.Text += Environment.NewLine;
|
|
}
|
|
});
|
|
this._cameraHelper.Start();
|
|
//身份读卡器
|
|
this._cvrHelper.OnConnect = new Action<bool>(o =>
|
|
{
|
|
this.Invoke(new Action(() =>
|
|
{
|
|
this.statusLabel.Text = o ? "读卡器已连接" : "读卡器未连接";
|
|
}));
|
|
});
|
|
this._cvrHelper.OnRead = new Action<IdCardModel>(o =>
|
|
{
|
|
this.Invoke(new Action(() =>
|
|
{
|
|
try
|
|
{
|
|
this.UpdateIdCardUI(o);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
this.log.Text += ex.Message;
|
|
this.log.Text += ex.StackTrace;
|
|
this.log.Text += Environment.NewLine;
|
|
}
|
|
}));
|
|
});
|
|
this._cvrHelper.Start();
|
|
//自动更新
|
|
if (this.autoUpdateOption.Checked)
|
|
{
|
|
this.checkUpdate_Click(null, null);
|
|
}
|
|
}
|
|
|
|
private void cameraSelector_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
this._cameraHelper.SwitchCamera(this.cameraSelector.SelectedIndex);
|
|
}
|
|
|
|
private int _rectWidth = 351;
|
|
private int _rectHeight = 448;
|
|
private int _photoWidth;
|
|
private int _photoHeight;
|
|
private Rectangle _rect;
|
|
private Pen _pen;
|
|
|
|
public static User User { get; set; }
|
|
|
|
private void CreateRect()
|
|
{
|
|
this._photoWidth = 351;
|
|
this._photoHeight = 448;
|
|
this._rectWidth = this._photoWidth / 2;
|
|
this._rectHeight = this._photoHeight / 2;
|
|
//
|
|
var x = this.cameraRender.Width / 2 - this._rectWidth / 2;
|
|
var y = this.cameraRender.Height / 2 - this._rectHeight / 2;
|
|
this._rect = new Rectangle(x, y, _rectWidth, _rectHeight);
|
|
this._pen = new Pen(Color.Green);
|
|
this._pen.DashStyle = DashStyle.Dash;
|
|
}
|
|
|
|
public static void LoadData(ProgressForm progress)
|
|
{
|
|
try
|
|
{
|
|
var url = ConfigurationManager.AppSettings["pull"];
|
|
var client = HttpClientFactory.Create();
|
|
var content = new StringContent(JsonConvert.SerializeObject(new { userName = MainForm.User.UserName }), Encoding.UTF8, "application/json");
|
|
var response = client.PostAsync(url, content).Result;
|
|
var resultValue = response.Content.ReadAsStringAsync().Result;
|
|
if (response.StatusCode == HttpStatusCode.OK)
|
|
{
|
|
var result = JsonConvert.DeserializeObject<PullResponse>(resultValue);
|
|
if (result.code == 0)
|
|
{
|
|
using (var db = new MyDbContext())
|
|
{
|
|
int i = 1;
|
|
foreach (var item in result.data)
|
|
{
|
|
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.InjectFrom(item);
|
|
}
|
|
db.SaveChanges();
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show($"错误代码:{result.code},错误消息:{result.message}");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show(resultValue);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message);
|
|
}
|
|
}
|
|
|
|
private void cameraRender_Paint(object sender, PaintEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
e.Graphics.DrawRectangle(this._pen, _rect);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
this.log.Text += ex.Message;
|
|
this.log.Text += ex.StackTrace;
|
|
this.log.Text += Environment.NewLine;
|
|
}
|
|
}
|
|
|
|
private void shotBtn_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
using (var bitmap = (this.cameraRender.Image.Clone() as Image))
|
|
{
|
|
using (var bitmap2 = bitmap.ClipImage(this.cameraRender.Width, this.cameraRender.Height, this._rectWidth, this._rectHeight))
|
|
{
|
|
this.photo.Image?.Dispose();
|
|
this.photo.Image = bitmap2.ResizeImage(this._photoWidth, this._photoHeight);
|
|
var base64Value = this.photo.Image.ToBase64();
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
this.log.Text += ex.Message;
|
|
this.log.Text += ex.StackTrace;
|
|
this.log.Text += Environment.NewLine;
|
|
}
|
|
}
|
|
|
|
private void UpdateIdCardUI(IdCardModel model)
|
|
{
|
|
this.idCard.idcPicture.Image?.Dispose();
|
|
this.idCard.idcPicture.Image = model.Image;
|
|
if (model.Type == "居民身份证")
|
|
{
|
|
this.idCard.idcAddressLabel.Visible = true;
|
|
this.idCard.idcAddressValue.Visible = true;
|
|
this.idCard.idcCnNameLabel.Visible = false;
|
|
this.idCard.idcCnNameValue.Visible = false;
|
|
this.idCard.idcAddressLabel.Visible = true;
|
|
this.idCard.idcAddressValue.Visible = true;
|
|
this.idCard.idcAddressValue.Text = model.Address;
|
|
this.idCard.idcNameLable.Text = "民族:";
|
|
this.idCard.idcNationCodeLabel.Text = "民族代码:";
|
|
this.idCard.idcIdCardNoLabel.Text = "身份证号";
|
|
}
|
|
else
|
|
{
|
|
this.idCard.idcAddressLabel.Visible = false;
|
|
this.idCard.idcAddressValue.Visible = false;
|
|
this.idCard.idcCnNameLabel.Visible = true;
|
|
this.idCard.idcCnNameValue.Visible = true;
|
|
this.idCard.idcAddressLabel.Visible = false;
|
|
this.idCard.idcAddressValue.Visible = false;
|
|
this.idCard.idcCnNameValue.Text = model.CnName;
|
|
this.idCard.idcNameLable.Text = "国籍:";
|
|
this.idCard.idcNationCodeLabel.Text = "国籍代码:";
|
|
this.idCard.idcIdCardNoLabel.Text = "证件号码";
|
|
}
|
|
this.idCard.idcNameValue.Text = model.Name;
|
|
this.idCard.idcSexValue.Text = model.Sex;
|
|
this.idCard.idcNationValue.Text = model.Nation;
|
|
this.idCard.idcNationCodeValue.Text = model.NationCode;
|
|
this.idCard.idcBirthdayValue.Text = model.Birthday;
|
|
this.idCard.idcIdCardNoValue.Text = model.IdCardNo;
|
|
this.idCard.idcDepartmentValue.Text = model.Department;
|
|
this.idCard.idcValidDateValue.Text = $"{model.ValidDateStart}-{model.ValidDateEnd}";
|
|
this.idCard.idcSamIDValue.Text = model.SamID;
|
|
using (var db = new MyDbContext())
|
|
{
|
|
var student = db.Students.FirstOrDefault(o => o.IdCardNo == model.IdCardNo);
|
|
if (student != null)
|
|
{
|
|
student.HasIdCard = true;
|
|
student.CardType = model.Type;
|
|
db.SaveChanges();
|
|
//
|
|
this.photo.Image?.Dispose();
|
|
if (student.Image != null)
|
|
{
|
|
using (var ms = new MemoryStream(Convert.FromBase64String(student.Image)))
|
|
{
|
|
this.photo.Image = System.Drawing.Image.FromStream(ms);
|
|
}
|
|
}
|
|
//
|
|
this.stuNameValue.Text = student.Name;
|
|
this.stuSexValue.Text = student.Sex;
|
|
this.stuNationValue.Text = student.Nation;
|
|
this.stuCardTypeValue.Text = student.CardType;
|
|
this.stuCardNoValue.Text = student.IdCardNo;
|
|
this.stuBirthdayValue.Text = student.Birthday;
|
|
this.stuExamNoValue.Text = student.ExamNo;
|
|
this.stuLanguageNoValue.Text = student.LanguageNo;
|
|
this.stuStudentTypeValue.Text = student.StudentType;
|
|
this.stuClassValue.Text = student.Class;
|
|
this.stuYearValue.Text = student.Year;
|
|
this.stuSchoolValue.Text = student.School;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void checkUpdate_Click(object sender, EventArgs e)
|
|
{
|
|
var loading = new LoadingForm("检查中");
|
|
this.Run(() => loading.ShowDialog());
|
|
Task.Run(() =>
|
|
{
|
|
try
|
|
{
|
|
var url = ConfigurationManager.AppSettings["update"];
|
|
var client = HttpClientFactory.Create();
|
|
var content = new StringContent(JsonConvert.SerializeObject(new { userName = MainForm.User.UserName }), Encoding.UTF8, "application/json");
|
|
var response = client.PostAsync(url, content).Result;
|
|
var result = JsonConvert.DeserializeObject<UpdateResponse>(response.Content.ReadAsStringAsync().Result);
|
|
if (result.code == 0)
|
|
{
|
|
if (result.data.version == this.versionLabel.Text)
|
|
{
|
|
MessageBox.Show("当前已经是最新版本");
|
|
}
|
|
else
|
|
{
|
|
var url2 = result.data.file;
|
|
var client2 = HttpClientFactory.Create();
|
|
using (var stream = client2.GetStreamAsync(url2).Result)
|
|
{
|
|
using (var fs = new FileStream("application.zip", FileMode.Create))
|
|
{
|
|
var buffer = new byte[1024];
|
|
stream.CopyTo(fs);
|
|
}
|
|
}
|
|
//
|
|
var file = Path.Combine(Application.StartupPath, "AutoUpdate.exe");
|
|
var file2 = Path.Combine(Application.StartupPath, "update.exe");
|
|
File.Copy(file, file2, true);
|
|
var info = new ProcessStartInfo
|
|
{
|
|
FileName = file2,
|
|
Arguments = Application.ExecutablePath,
|
|
WorkingDirectory = Application.StartupPath
|
|
};
|
|
Process.Start(info);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show($"错误代码:{result.code},错误消息:{result.message}");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message);
|
|
}
|
|
finally
|
|
{
|
|
loading.CloseForm();
|
|
}
|
|
});
|
|
}
|
|
|
|
private void MainForm_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.KeyCode == Keys.Space)
|
|
{
|
|
this.shotBtn_Click(sender, e);
|
|
}
|
|
}
|
|
|
|
//closeing
|
|
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
|
{
|
|
this._cameraHelper.Dispose();
|
|
this._pen.Dispose();
|
|
}
|
|
|
|
private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
|
|
{
|
|
Application.Exit();
|
|
}
|
|
|
|
private void grid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
|
|
{
|
|
if (this.dataGrid.Columns[e.ColumnIndex].Name.Equals("Image"))
|
|
{
|
|
if (e.Value != null)
|
|
{
|
|
using (var ms = new MemoryStream(Convert.FromBase64String(e.Value as string)))
|
|
{
|
|
e.Value = System.Drawing.Image.FromStream(ms);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void tabControl1_Selected(object sender, TabControlEventArgs e)
|
|
{
|
|
if (e.TabPage.Text == "图像采集")
|
|
{
|
|
}
|
|
else if (e.TabPage.Text == "采集进度")
|
|
{
|
|
this.RunWithLoading(RefreshGroup);
|
|
}
|
|
else if (e.TabPage.Text == "图像管理")
|
|
{
|
|
this.RunWithLoading(RefreshData);
|
|
}
|
|
}
|
|
|
|
private void RefreshGroup()
|
|
{
|
|
using (var db = new MyDbContext())
|
|
{
|
|
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();
|
|
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.HasUpload) / (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] == "完成进度")
|
|
{
|
|
groupGrid.Columns[i].DefaultCellStyle.Format = "P";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void RefreshData()
|
|
{
|
|
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())
|
|
{
|
|
//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<Student>().AsQueryable();
|
|
if (classValue != "全部")
|
|
{
|
|
query = query.Where(o => o.Class == classValue);
|
|
}
|
|
if (imageStatusSelector.Text != "全部")
|
|
{
|
|
var imageStatus = (bool)imageStatusSelector.SelectedValue;
|
|
query = query.Where(o => o.HasImage == imageStatus);
|
|
}
|
|
if (uploadStatusSelector.Text != "全部")
|
|
{
|
|
var uploadStatus = (bool)uploadStatusSelector.SelectedValue;
|
|
query = query.Where(o => o.HasUploaded == uploadStatus);
|
|
}
|
|
if (checkStatusSelector.Text != "全部")
|
|
{
|
|
var checkedStatus = (bool)checkStatusSelector.SelectedValue;
|
|
query = query.Where(o => o.HasChecked == checkedStatus);
|
|
}
|
|
if (cardStatusSelector.Text != "全部")
|
|
{
|
|
var cardStatus = (bool)cardStatusSelector.SelectedValue;
|
|
query = query.Where(o => o.HasIdCard == cardStatus);
|
|
}
|
|
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<object>();
|
|
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) =>
|
|
{
|
|
this.pageIndexSelector.SelectedValue = Convert.ToInt32((s as Button).Tag);
|
|
};
|
|
}
|
|
}
|
|
}
|
|
|
|
private void pageIndexSelector_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
this.RunWithLoading(RefreshData);
|
|
}
|
|
|
|
private void classSelector_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
this.RunWithLoading(RefreshData);
|
|
}
|
|
|
|
private void pageSizeSelector_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
this.RunWithLoading(RefreshData);
|
|
}
|
|
|
|
private void searchBtn_Click(object sender, EventArgs e)
|
|
{
|
|
this.RunWithLoading(RefreshData);
|
|
}
|
|
|
|
private void pull_Click(object sender, EventArgs e)
|
|
{
|
|
var progress = new ProgressForm("更新中", "正在下载数据", 0, 100);
|
|
this.Run(() => progress.ShowDialog());
|
|
Task.Run(() =>
|
|
{
|
|
try
|
|
{
|
|
MainForm.LoadData(progress);
|
|
progress.CloseForm();
|
|
this.RunWithLoading(RefreshData);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
progress.CloseForm();
|
|
MessageBox.Show(ex.Message);
|
|
}
|
|
});
|
|
}
|
|
|
|
private void save_Click(object sender, EventArgs e)
|
|
{
|
|
using (var db = new MyDbContext())
|
|
{
|
|
var student = db.Students.FirstOrDefault(o => o.IdCardNo == this.idCard.idcIdCardNoValue.Text);
|
|
if (student != null)
|
|
{
|
|
student.HasImage = true;
|
|
student.Image = this.photo.Image.ToBase64();
|
|
db.SaveChanges();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void imageStatusSelctor_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
this.RunWithLoading(RefreshData);
|
|
}
|
|
|
|
private void uploadStatusSelector_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
this.RunWithLoading(RefreshData);
|
|
}
|
|
|
|
private void checkStatusSelector_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
this.RunWithLoading(RefreshData);
|
|
}
|
|
|
|
private void cardStatusSelector_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
this.RunWithLoading(RefreshData);
|
|
}
|
|
|
|
private void push_Click(object sender, EventArgs e)
|
|
{
|
|
var progress = new ProgressForm("更新中", "正在上传", 0, 100);
|
|
this.Run(() => progress.ShowDialog());
|
|
Task.Run(() =>
|
|
{
|
|
try
|
|
{
|
|
this.UploadData(progress);
|
|
progress.CloseForm();
|
|
this.RunWithLoading(RefreshData);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
progress.CloseForm();
|
|
MessageBox.Show(ex.Message);
|
|
}
|
|
});
|
|
}
|
|
|
|
private void UploadData(ProgressForm progress)
|
|
{
|
|
try
|
|
{
|
|
using (var db = new MyDbContext())
|
|
{
|
|
var query = db.Set<Student>().AsQueryable();//.Where(o => o.HasImage);
|
|
if (classSelector.Text != "全部")
|
|
{
|
|
var classValue = imageStatusSelector.SelectedValue as string;
|
|
query = query.Where(o => o.Class == classValue);
|
|
}
|
|
if (imageStatusSelector.Text != "全部")
|
|
{
|
|
var imageStatus = (bool)imageStatusSelector.SelectedValue;
|
|
query = query.Where(o => o.HasImage == imageStatus);
|
|
}
|
|
if (uploadStatusSelector.Text != "全部")
|
|
{
|
|
var uploadStatus = (bool)uploadStatusSelector.SelectedValue;
|
|
query = query.Where(o => o.HasUploaded == uploadStatus);
|
|
}
|
|
if (checkStatusSelector.Text != "全部")
|
|
{
|
|
var checkedStatus = (bool)checkStatusSelector.SelectedValue;
|
|
query = query.Where(o => o.HasChecked == checkedStatus);
|
|
}
|
|
if (cardStatusSelector.Text != "全部")
|
|
{
|
|
var cardStatus = (bool)cardStatusSelector.SelectedValue;
|
|
query = query.Where(o => o.HasIdCard == cardStatus);
|
|
}
|
|
var total = query.Count();
|
|
var url = ConfigurationManager.AppSettings["push"];
|
|
int i = 1;
|
|
foreach (var item in query)
|
|
{
|
|
try
|
|
{
|
|
var client = HttpClientFactory.Create();
|
|
var content = new StringContent(JsonConvert.SerializeObject(item), Encoding.UTF8, "application/json");
|
|
var response = client.PostAsync(url, content).Result;
|
|
var result = JsonConvert.DeserializeObject<PullResponse>(response.Content.ReadAsStringAsync().Result);
|
|
if (result.code == 0)
|
|
{
|
|
progress?.SetProgress($"进度{i}/{total}", i * 100 / total);
|
|
item.HasUploaded = true;
|
|
db.SaveChanges();
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show($"错误代码:{result.code},错误消息:{result.message}");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message);
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message);
|
|
}
|
|
}
|
|
|
|
private void homepageLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
Process.Start(ConfigurationManager.AppSettings["home"]);
|
|
}
|
|
|
|
private void serviceLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
|
{
|
|
Process.Start(ConfigurationManager.AppSettings["service"]);
|
|
}
|
|
|
|
private void radioButton1_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
var redioButton = sender as RadioButton;
|
|
if (redioButton.Checked)
|
|
{
|
|
Configuration configuration = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
|
|
configuration.AppSettings.Settings["check"].Value = redioButton.Text;
|
|
configuration.Save();
|
|
ConfigurationManager.RefreshSection("appSettings");
|
|
}
|
|
}
|
|
}
|
|
} |