diff --git a/CommonLibrary/AccountSupport/ServerAccount.cs b/CommonLibrary/AccountSupport/ServerAccount.cs
new file mode 100644
index 0000000..3c6928e
--- /dev/null
+++ b/CommonLibrary/AccountSupport/ServerAccount.cs
@@ -0,0 +1,288 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.IO;
+using Newtonsoft.Json.Linq;
+
+namespace CommonLibrary
+{
+ ///
+ /// 服务器的账户管理类,如果你采用这种方式存储,必须仔细阅读说明手册
+ ///
+ /// 账户类,该类必须派生自UserAccount类
+ public class ServerAccounts where T : UserAccount, new()
+ {
+ ///
+ /// 初始化構造方法
+ ///
+ public ServerAccounts()
+ {
+
+ }
+ ///
+ /// 初始化構造方法,将添加几个初始化账户
+ ///
+ public ServerAccounts(IEnumerable accounts)
+ {
+ all_list_accounts.AddRange(accounts);
+ }
+
+ ///
+ /// 所有的帳戶信息存儲的位置,只有設置了才進行保存
+ ///
+ public string FileSavePath { get; set; } = "";
+
+ private List all_list_accounts = new List();
+
+ private object lock_list_accounts = new object();
+
+
+ ///
+ /// 更新指定账户的密码
+ ///
+ ///
+ ///
+ public void UpdatePassword(string name, string password)
+ {
+ lock (lock_list_accounts)
+ {
+ for (int i = 0; i < all_list_accounts.Count; i++)
+ {
+ if (name == all_list_accounts[i].UserName)
+ {
+ all_list_accounts[i].Password = password;
+ break;
+ }
+ }
+ }
+ }
+
+ ///
+ /// 筛选特定的账户信息
+ ///
+ ///
+ ///
+ public List WhereAccounts(Func selector)
+ {
+ return all_list_accounts.Where(selector).ToList();
+ }
+
+ ///
+ /// 将所有账户信息转换成另一种元素,并返回列表
+ ///
+ /// 目标类型
+ /// 转换方法
+ /// 转换后的结果列表
+ public List ConvertAll(Converter converter)
+ {
+ return all_list_accounts.ConvertAll(converter);
+ }
+
+ ///
+ /// 检查账户信息,并返回账户对象
+ ///
+ /// 需要验证的用户名
+ /// 需要验证的密码
+ /// 登录的ip地址
+ /// 验证的结果对象
+ public T CheckAccount(string name, string code, string ipAddress)
+ {
+ T result = new T()
+ {
+ UserName = name,
+ Password = code,
+ ForbidMessage = "用户名不存在!",
+ };
+
+ lock (lock_list_accounts)
+ {
+ for (int i = 0; i < all_list_accounts.Count; i++)
+ {
+ T item = all_list_accounts[i];
+ if (item.UserName == name)
+ {
+ if (item.Password != code)
+ {
+ result.ForbidMessage = "密码错误!";
+ break;
+ }
+ else
+ {
+ //说明已经登录成功,需要进行进一步操作
+ item.LoginFrequency++;
+ result = item.DeepCopy();
+ //下面两个数据应该是旧的数据
+ item.LastLoginIpAddress = ipAddress;
+ item.LastLoginTime = DateTime.Now;
+ break;
+ }
+ }
+ }
+ }
+ return result;
+ }
+ ///
+ /// 新增一个账户,如果账户名称已经存在,则返回False,注册成功返回True
+ ///
+ /// 账户对象的JSON表示方式
+ /// 成功True,失败False
+ public bool AddNewAccount(string json_account)
+ {
+ try
+ {
+ T account = JObject.Parse(json_account).ToObject();
+ return AddNewAccount(account);
+ }
+ catch
+ {
+ return false;
+ }
+ }
+ ///
+ /// 新增一个账户,如果账户名称已经存在,则返回False,注册成功返回True
+ ///
+ /// 账户对象
+ /// 成功True,失败False
+ public bool AddNewAccount(T account)
+ {
+ lock (lock_list_accounts)
+ {
+ for (int i = 0; i < all_list_accounts.Count; i++)
+ {
+ if (all_list_accounts[i].UserName == account.UserName)
+ {
+ return false;
+ }
+ }
+ all_list_accounts.Add(account);
+ }
+ return true;
+ }
+
+ ///
+ /// 删除一个账户信息,
+ ///
+ /// 需要删除的账户的名称
+ public void DeleteAccount(string name)
+ {
+ lock (lock_list_accounts)
+ {
+ for (int i = 0; i < all_list_accounts.Count; i++)
+ {
+ if (name == all_list_accounts[i].UserName)
+ {
+ all_list_accounts.RemoveAt(i);
+ break;
+ }
+ }
+ }
+ }
+
+ ///
+ /// 检查账户对象并返回账户的JSON字符串
+ ///
+ /// 登录的用户名
+ /// 登录的密码
+ /// 检查的客户端的登录的ip地址
+ ///
+ public string CheckAccountJson(string name, string code, string ipAddress)
+ {
+ T result = CheckAccount(name, code, ipAddress);
+ return JObject.FromObject(result).ToString();
+ }
+
+ ///
+ /// 获取所有的账户的JSON字符串
+ ///
+ ///
+ public string GetAllAccountsJson()
+ {
+ string result = string.Empty;
+ lock (lock_list_accounts)
+ {
+ result = JArray.FromObject(all_list_accounts).ToString();
+ }
+ return result;
+ }
+
+ ///
+ /// 从所有的账户的json数据加载账户
+ ///
+ ///
+ public void LoadAllAccountsJson(string json)
+ {
+ lock (lock_list_accounts)
+ {
+ try
+ {
+ all_list_accounts = JArray.Parse(json).ToObject>();
+ }
+ catch
+ {
+
+ }
+ }
+ }
+
+ ///
+ /// 使用Base64编码將所有的帳戶信息保存到文件
+ ///
+ public void SaveFile()
+ {
+ SaveFile(m => Convert.ToBase64String(Encoding.Unicode.GetBytes(m)));
+ }
+
+ ///
+ /// 使用自定义的加密方法将所有账户信息保存到文件
+ ///
+ public void SaveFile(Converter encrypt)
+ {
+ if (FileSavePath != "")
+ {
+ string result = GetAllAccountsJson();
+ StreamWriter sw = new StreamWriter(FileSavePath, false, Encoding.Default);
+ sw.Write(encrypt(result));
+ sw.Flush();
+ sw.Dispose();
+ }
+ }
+
+ ///
+ /// 使用Base64编码从文件加载所有的账户
+ ///
+ public void LoadByFile()
+ {
+ LoadByFile(m => Encoding.Unicode.GetString(Convert.FromBase64String(m)));
+ }
+ ///
+ /// 使用自定义的解密方法加载所有的账户
+ ///
+ public void LoadByFile(Converter decrypt)
+ {
+ if (FileSavePath != "")
+ {
+ if (File.Exists(FileSavePath))
+ {
+ StreamReader sr = new StreamReader(FileSavePath, Encoding.Default);
+ string result = sr.ReadToEnd();
+ sr.Close();
+ sr.Dispose();
+ result = decrypt(result);
+ LoadAllAccountsJson(result);
+ }
+ }
+ }
+
+
+ /**************************************************************
+ *
+ * 日志记录块,保存运行中的所有的异常信息,方便追踪系统异常
+ *
+ *************************************************************/
+ ///
+ /// 日志记录对象
+ ///
+ public HslCommunication.Enthernet.HslLogHelper LogHelper { get; set; }
+ }
+}
diff --git a/CommonLibrary/AccountSupport/UserAccount.cs b/CommonLibrary/AccountSupport/UserAccount.cs
new file mode 100644
index 0000000..8a0cd93
--- /dev/null
+++ b/CommonLibrary/AccountSupport/UserAccount.cs
@@ -0,0 +1,163 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Newtonsoft.Json.Linq;
+
+namespace CommonLibrary
+{
+ ///
+ /// 本系統的用账户类,包含了一些常用的数据信息,如果你想添加额外属性,请继承此类
+ ///
+ public class UserAccount
+ {
+ ///
+ /// 用户名称,该名称唯一
+ ///
+ public string UserName { get; set; } = "";
+ ///
+ /// 用户名称的别名,也不可以不使用
+ ///
+ public string NameAlias { get; set; } = "";
+ ///
+ /// 用户登录的密码
+ ///
+ public string Password { get; set; } = "";
+ ///
+ /// 账户所属的工厂名称或类别名称
+ ///
+ public string Factory { get; set; } = "";
+ ///
+ /// 用户的权限等级,目前配置了4个等级
+ ///
+ public int Grade { get; set; } = 0;
+ ///
+ /// 该用户的注册日期,一旦注册,应该固定
+ ///
+ public DateTime RegisterTime { get; set; } = DateTime.Now;
+ ///
+ /// 该用户是否允许登录
+ ///
+ public bool LoginEnable { get; set; } = false;
+ ///
+ /// 该用户不允许被登录的原因
+ ///
+ public string ForbidMessage { get; set; } = "该账户被管理员禁止登录!";
+ ///
+ /// 该用户自注册以来登录的次数
+ ///
+ public int LoginFrequency { get; set; } = 0;
+ ///
+ /// 该用户上次登录的时间
+ ///
+ public DateTime LastLoginTime { get; set; } = DateTime.Now;
+ ///
+ /// 该用户上次登录的IP地址
+ ///
+ public string LastLoginIpAddress { get; set; } = "";
+ ///
+ /// 该用户连续登录失败的计数,可以用来连续五次失败禁止账户登录
+ ///
+ public int LoginFailedCount { get; set; } = 0;
+ ///
+ /// 用于存储和传送的名称
+ ///
+ public static string UserNameText { get { return "UserName"; } }
+ ///
+ /// 用于存储和传送的名称
+ ///
+ public static string PasswordText { get { return "Password"; } }
+ ///
+ /// 深度拷贝当前的账户信息
+ ///
+ /// 返回的类型,应该为继承后的类型
+ /// 新的对象
+ public T DeepCopy() where T : UserAccount
+ {
+ return JObject.FromObject(this).ToObject();
+ }
+ ///
+ /// 获取账号的用户名
+ ///
+ ///
+ public override string ToString()
+ {
+ return UserName;
+ }
+ ///
+ /// 获取本账号的JSON字符串,用于在网络中数据传输
+ ///
+ ///
+ public string ToJsonString()
+ {
+ return JObject.FromObject(this).ToString();
+ }
+ }
+
+
+
+ ///
+ /// 账户的等级
+ ///
+ public class AccountGrade
+ {
+ ///
+ /// 超级管理员
+ ///
+ public static int SuperAdministrator { get; private set; } = 10000;
+ ///
+ /// 管理员
+ ///
+ public static int Admin { get; private set; } = 1000;
+ ///
+ /// 技术员
+ ///
+ public static int Technology { get; private set; } = 100;
+ ///
+ /// 一般
+ ///
+ public static int General { get; private set; } = 10;
+
+ ///
+ /// 获取对应等级的文本描述
+ ///
+ /// 等级数据
+ /// 等级描述
+ public static string GetDescription(int grade)
+ {
+ if (grade >= SuperAdministrator)
+ {
+ return "超级管理员";
+ }
+ else if (grade >= Admin)
+ {
+ return "管理员";
+ }
+ else if (grade >= Technology)
+ {
+ return "技术员";
+ }
+ else
+ {
+ return "普通";
+ }
+ }
+ ///
+ /// 获取权限的数组
+ ///
+ ///
+ public static string[] GetDescription()
+ {
+ return new string[]
+ {
+ GetDescription(SuperAdministrator),
+ GetDescription(Admin),
+ GetDescription(Technology),
+ GetDescription(General),
+ };
+ }
+
+ }
+
+
+}
diff --git a/CommonLibrary/CommonLibrary.csproj b/CommonLibrary/CommonLibrary.csproj
index 14fd9d7..3e2b024 100644
--- a/CommonLibrary/CommonLibrary.csproj
+++ b/CommonLibrary/CommonLibrary.csproj
@@ -30,6 +30,12 @@
4
+
+ ..\Public\HslCommunication.dll
+
+
+ ..\packages\Newtonsoft.Json.10.0.2\lib\net35\Newtonsoft.Json.dll
+
@@ -38,6 +44,8 @@
+
+
@@ -45,6 +53,9 @@
+
+
+