lu
2 天以前 fe3a2210d028a6319e71299b9773a15cb16d6e35
DevApp/Gs.DevApp/DevFrm/FrmLogin.cs
@@ -1,90 +1,261 @@
using Gs.DevApp.ToolBox;
using AutoUpdaterDotNET;
using DevExpress.XtraEditors;
using Gs.DevApp.Entity;
using Gs.DevApp.Properties;
using Gs.DevApp.ToolBox;
using Newtonsoft.Json;
using System;
using System.Windows.Forms;
using Gs.DevApp.Models;
using Newtonsoft.Json.Linq;
using System.Data;
using System;
using System.Configuration;
using System.Linq;
using System.Management;
using System.Net;
using System.Net.Sockets;
using System.Windows.Forms;
namespace Gs.DevApp.DevFrm
{
    public partial class FrmLogin : DevExpress.XtraEditors.XtraForm
    public partial class FrmLogin : XtraForm
    {
        private string _productName = "";
        private string _version = "未知";
        private string _strFont = "";
        private string _webApiUrl = "";
        public FrmLogin()
        {
            InitializeComponent();
            this.Text = lbVersion.Text = System.Configuration.ConfigurationSettings.AppSettings.Get("ProductName").ToString();
            _productName = ConfigurationManager.AppSettings["ProductName"];
            _webApiUrl = ConfigurationManager.AppSettings["WebApiUrl"];
            if (ConfigurationManager.AppSettings["IsAutoUpdater"] == "1")
                _autoUpdate();
            _getFont();
            _getRemember();
            btnLogin.Click += BtnLogin_Click;
            btnCancel.Click += BtnCancel_Click;
            UtilityHelper.SetFont(panel1);
            getTree();
            lbVersion.Text = _productName + ",版本(" + _version + ")" + ",使用字体(" + _strFont + ")" + ",服务地址(" + _webApiUrl + ")";
        }
        private void getTree()
        {
            Models.PageQueryModel pgq = new Models.PageQueryModel(1, 999999, "factory", "asc", "", "and upGuid is not null");
            string json = JsonConvert.SerializeObject(pgq);
            string strReturn = "";
            try
            {
                strReturn = UtilityHelper.HttpPost("", "Organization/GetListPage", json);
                ReturnModel<PageListModel> rtn = UtilityHelper.GetTableByJson(strReturn);
                DataTable dt = rtn.rtnData.list;
                DataRow newRow = dt.NewRow();
                newRow["guid"] = "00000000-0000-0000-0000-000000000000";
                newRow["name"] = "-请选择-";
                dt.Rows.Add(newRow);
                comOrg.DataSource = dt;
                comOrg.DisplayMember = "name";
                comOrg.ValueMember = "guid";
                comOrg.SelectedIndex = dt.Rows.Count - 1;
            }
            catch (Exception ex)
            {
                ToolBox.MsgHelper.Warning("提示:" + ex.Message);
            }
        }
        private void BtnCancel_Click(object sender, EventArgs e)
        {
            if (MsgHelper.AskQuestion("确定要退出系统吗?"))
            {
                Application.Exit();
            }
            if (MsgHelper.AskQuestion("确定要退出系统吗?")) Application.Exit();
        }
        private void BtnLogin_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtUser.Text.Trim()))
            {
                MsgHelper.Warning("登录账号不能为空!");
                txtUser.Focus();
                return;
            }
            if (string.IsNullOrEmpty(txtPwd.Text.Trim()))
            {
                MsgHelper.Warning("密码不能为空!");
                txtUser.Focus();
                return;
            }
            string strLog = GetMacAddress();
            var _obj = new
            {
                accountPwd = txtPwd.Text.Trim(),
                accountNo = txtUser.Text.Trim(),
                orgGuid = comOrg.SelectedValue
                accountLog = strLog
            };
            try
            {
                string strJson = UtilityHelper.HttpPost("", "User/UserLogin", JsonConvert.SerializeObject(_obj));
                ReturnModel<dynamic> _rtn = ToolBox.UtilityHelper.GetDataByJson(strJson);
                var strJson = UtilityHelper.HttpPost("", "User/UserLogin",
                    JsonConvert.SerializeObject(_obj));
                var _rtn = UtilityHelper.ReturnToDynamic(strJson);
                JObject _login = _rtn.rtnData;
                if (_rtn.rtnCode > 0)
                {
                    Settings.Default.userName = ckRemember.Checked ? txtUser.Text.Trim() : "";
                    Settings.Default.userPwd = ckRemember.Checked ? txtPwd.Text.Trim() : "";
                    Settings.Default.remember = ckRemember.Checked;
                    Settings.Default.isWeight = ckWeight.Checked;
                    Settings.Default.Save();
                    LoginInfoModel.CurrentUser.LoginUserGuid = _login["loginGuid"].ToString();
                    LoginInfoModel.CurrentUser.LoginOrgGuid = _login["loginOrgGuid"].ToString();
                    LoginInfoModel.CurrentUser.LoginTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm");
                    LoginInfoModel.CurrentUser.LoginFactory = _login["loginFactory"].ToString();
                    this.DialogResult = DialogResult.OK;
                    DialogResult = DialogResult.OK;
                }
                else
                {
                    ToolBox.MsgHelper.Warning("提示:" + _rtn.rtnMsg);
                    this.DialogResult = DialogResult.None;
                    MsgHelper.Warning("提示:" + _rtn.rtnMsg);
                    DialogResult = DialogResult.None;
                }
            }
            catch (Exception ex)
            {
                ToolBox.MsgHelper.Warning("提示:" + ex.Message);
                DialogResult = DialogResult.Cancel;
                MsgHelper.ShowError("提示:" + ex.Message);
            }
        }
        /// <summary>
        ///  读取记住密码
        /// </summary>
        private void _getRemember()
        {
            try
            {
                txtUser.Text = Settings.Default.userName;
                txtPwd.Text = Settings.Default.userPwd;
                ckRemember.Checked = Settings.Default.remember;
                ckWeight.Checked = Settings.Default.isWeight;
            }
            catch (Exception ex)
            {
                MsgHelper.ShowError("提示:" + ex.Message);
            }
        }
        /// <summary>
        /// 读取字体
        /// </summary>
        private void _getFont()
        {
            try
            {
                _strFont = Settings.Default.fontSizeName;
                if (string.IsNullOrEmpty(_strFont))
                    return;
                string[] ary = _strFont.Split(',');
                if (ary.Length < 2)
                    return;
                float _ft = float.Parse(ary[1]);
                #region 设置默认字体、日期格式、汉化dev
                DevExpress.Utils.AppearanceObject.DefaultFont = new System.Drawing.Font(ary[0], _ft);
                DevExpress.XtraEditors.WindowsFormsSettings.DefaultFont = new System.Drawing.Font(ary[0], _ft);
                DevExpress.XtraEditors.WindowsFormsSettings.DefaultMenuFont = new System.Drawing.Font(ary[0], _ft);
                DevExpress.XtraEditors.WindowsFormsSettings.DefaultPrintFont = new System.Drawing.Font(ary[0], _ft);
                #endregion
            }
            catch (Exception ex)
            {
                MsgHelper.ShowError("提示:" + ex.Message);
            }
        }
        #region 自动更新
        private void _autoUpdate()
        {
            _version = ConfigurationManager.AppSettings["Version"];
            AutoUpdater.InstalledVersion = new Version(_version);
            AutoUpdater.Start(ConfigurationManager.AppSettings["AutoUpdaterXml"]);
            AutoUpdater.CheckForUpdateEvent += AutoUpdater_CheckForUpdateEvent;
        }
        private void AutoUpdater_CheckForUpdateEvent(UpdateInfoEventArgs args)
        {
            if (args == null || string.IsNullOrEmpty(args.DownloadURL))
            {
                MsgHelper.ShowError("读取自动更新失败,无法登录,请联系管理员!");
                Close();
                Application.Exit();
                return;
            }
            if (!args.IsUpdateAvailable)
            {
                return;
            }
            var _strMsg =
                string.Format(
                    $@"有新版本 {args.CurrentVersion} 可用,您使用的是 {args.InstalledVersion}版本,这是必需的更新,按“是(Y)”开始更新应用程序。");
            if (!MsgHelper.AskQuestion(_strMsg))
            {
                Close();
                Application.Exit();
                return;
            }
            try
            {
                if (AutoUpdater.DownloadUpdate(args))
                {
                    var config =
                        ConfigurationManager.OpenExeConfiguration(
                            ConfigurationUserLevel.None);
                    if (config != null)
                    {
                        var appSettings =
                            (AppSettingsSection)config.GetSection(
                                "appSettings");
                        if (appSettings.Settings.AllKeys.Contains("Version"))
                            appSettings.Settings["Version"].Value =
                                args.CurrentVersion;
                        else
                            appSettings.Settings.Add("Version",
                                args.CurrentVersion);
                        config.Save(ConfigurationSaveMode.Modified);
                        ConfigurationManager.RefreshSection("appSettings");
                    }
                    Application.Exit();
                }
                else
                {
                    MsgHelper.ShowError("读取自动更新失败,无法登录,请联系管理员!");
                    Close();
                    Application.Exit();
                }
            }
            catch (Exception exception)
            {
                MsgHelper.ShowError(exception.Message + ":" + exception.GetType());
                Close();
                Application.Exit();
            }
        }
        #endregion
        /// <summary>
        /// 读取mac
        /// </summary>
        /// <returns></returns>
        private string GetMacAddress()
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            try
            {
                sb.Append("主机名: ");
                string hostName = Dns.GetHostName();
                sb.Append(hostName);
                sb.Append(";IPv4: ");
                IPAddress[] addresses = Dns.GetHostAddresses(hostName);
                int i = 0;
                foreach (IPAddress address in addresses)
                {
                    if (address.AddressFamily == AddressFamily.InterNetwork) // 过滤出IPv4地址
                    {
                        if (i > 0)
                            sb.Append(",");
                        sb.Append(address.ToString());
                    }
                }
                i = 0;
                sb.Append(";MAC: ");
                ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection moc = mc.GetInstances();
                string macAddress = string.Empty;
                foreach (ManagementObject mo in moc)
                {
                    if ((bool)mo["IPEnabled"])
                    {
                        if (i > 0)
                            sb.Append(",");
                        macAddress = mo["MacAddress"].ToString();
                        sb.Append(macAddress);
                        break;
                    }
                }
                return sb.ToString();
            }
            catch (Exception ex)
            {
                sb.Append(ex.Message);
            }
            return sb.ToString();
        }
    }
}