ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/v17/HierarchyCache.v1.txtBinary files differ
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/BaiDuFaceHelper.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,369 @@ using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace WIDESEAWCS_Common { public class BaiDuFaceHelper { /// <summary> /// è·åAccessToken /// </summary> /// <returns></returns> public static string GetAccessToken() { //string url = string.Format("https://aip.baidubce.com/oauth/2.0/token?client_id={0}&client_secret={1}&grant_type={2}", "TqFQHXSNt6Z7cPQ4vDBfBNjq", "0cli6I6s8JFz3qM1Czi5ciRpDqrJuVvm", "client_credentials"); //string returnStr = BDWebRequest(url, "", "POST"); //NLog.LogManager.GetCurrentClassLogger().Trace("ç¾åº¦äººè¸è¯å«è¿åï¼" + returnStr); //BDToken token = JsonConvert.DeserializeObject<BDToken>(returnStr); //token.getdate = DateTime.Now.ToString(); //return token.access_token; var str = "24.83aee44079e5a27530bc72d5ec7049a3.2592000.1746152354.282335-118294290"; return str; } public static string BDWebRequest(string url, string data, string method) { try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = string.IsNullOrEmpty(method) ? "POST" : method.ToUpper(); request.UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22"; request.ServicePoint.Expect100Continue = false; request.Timeout = 1000 * 60; request.ContentType = "application/x-www-form-urlencoded"; if (!string.IsNullOrEmpty(method) && method.ToUpper() == "POST" && !string.IsNullOrEmpty(data)) { byte[] byteArray = Encoding.UTF8.GetBytes(data); request.ContentLength = byteArray.Length; using (Stream myRequestStream = request.GetRequestStream()) { myRequestStream.Write(byteArray, 0, byteArray.Length); } } HttpWebResponse myHttpWebResponse = (HttpWebResponse)request.GetResponse(); using (Stream response = myHttpWebResponse.GetResponseStream()) { using (StreamReader reader = new StreamReader(response, Encoding.UTF8)) { return reader.ReadToEnd(); } } } catch { return ""; } } /// <summary> /// äººè¸æ£æµä¸å±æ§åæ /// </summary> /// <returns></returns> public static string FaceDetect(string path) { string token = GetAccessToken(); string host = "https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=" + token; var imgbase64 = GetFileContentAsBase64(path); Encoding encoding = Encoding.Default; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host); request.Method = "POST"; request.KeepAlive = true; String str = "{\"image\":\""+ imgbase64 + "\",\"image_type\":\"BASE64\"}"; byte[] buffer = encoding.GetBytes(str); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default); string result = reader.ReadToEnd(); NLog.LogManager.GetCurrentClassLogger().Trace("äººè¸æ£æµä¸å±æ§åæï¼" + result); return result; } /// <summary> /// åå»ºç¨æ·äººè¸è¯å«ç» /// </summary> /// <returns></returns> public static string GroupAdd(string group) { string token = GetAccessToken(); string host = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/group/add?access_token=" + token; Encoding encoding = Encoding.Default; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host); request.Method = "post"; request.KeepAlive = true; String str = "{\"group_id\":\""+ group + "\"}"; byte[] buffer = encoding.GetBytes(str); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default); string result = reader.ReadToEnd(); NLog.LogManager.GetCurrentClassLogger().Trace("åå»ºç¨æ·ç»ï¼" + result); return result; } /// <summary> /// è·åæä»¶base64ç¼ç /// </summary> /// <param name="path">æä»¶è·¯å¾</param> /// <returns>base64ç¼ç ä¿¡æ¯ï¼ä¸å¸¦æä»¶å¤´</returns> //public static string GetFileContentAsBase64(string path) //{ // using (FileStream filestream = new FileStream(path, FileMode.Open)) // { // byte[] arr = new byte[filestream.Length]; // filestream.Read(arr, 0, (int)filestream.Length); // string base64 = Convert.ToBase64String(arr); // return base64; // } //} public static string GetFileContentAsBase64(string filePath) { // åªä¿çæä»¶åï¼é¿å è·¯å¾é误 string fileName = Path.GetFileName(filePath); // è·åæä»¶ç宿´è·¯å¾ string fullPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "image", fileName); if (!File.Exists(fullPath)) { throw new FileNotFoundException("æä»¶ä¸åå¨ï¼" + fullPath); } using (FileStream filestream = new FileStream(fullPath, FileMode.Open, FileAccess.Read)) { byte[] arr = new byte[filestream.Length]; filestream.Read(arr, 0, arr.Length); return Convert.ToBase64String(arr); } } /// <summary> /// äººè¸æ³¨å /// </summary> /// <returns></returns> public static CreateUserResult AddUser(BDUserInfo info) { string token = GetAccessToken(); var imgbase64 = GetFileContentAsBase64(info.ImgPath); string host = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add?access_token=" + token; Encoding encoding = Encoding.Default; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host); request.Method = "POST"; request.KeepAlive = true; String str = "{\"image\":\"" + imgbase64 + "\",\"image_type\":\"BASE64\",\"group_id\":\"" + info.group_id + "\",\"user_id\":\"" + info.user_id + "\",\"quality_control\":\"LOW\",\"liveness_control\":\"NORMAL\"}"; byte[] buffer = encoding.GetBytes(str); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default); string result = reader.ReadToEnd(); NLog.LogManager.GetCurrentClassLogger().Trace("äººè¸æ³¨åï¼" + result); CreateUserResult res= JsonConvert.DeserializeObject<CreateUserResult>(result);//éè¦å°log_idåface_tokenä¿åå°ç¨æ·è¡¨ä¸ï¼å¨äººè¸å é¤ä¸éè¦ç¨å° return res; } /// <summary> /// 人è¸å é¤ï¼å é¤ç¨æ·çæä¸å¼ 人è¸ï¼å¦æè¯¥ç¨æ·åªæä¸å¼ 人è¸å¾çï¼ååæ¶å é¤ç¨æ·ãï¼ /// </summary> /// <returns></returns> public static string DeleteUserImg(DeleteUserImg info) { string token = GetAccessToken(); string host = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/delete?access_token=" + token; Encoding encoding = Encoding.Default; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host); request.Method = "POST"; request.KeepAlive = true; String str = "{\"face_token\":\"" + info.face_token + "\",\"log_id\":\"" + info.log_id + "\",\"group_id\":\"" + info.group_id + "\",\"user_id\":\"" + info.user_id + "\"}"; byte[] buffer = encoding.GetBytes(str); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default); string result = reader.ReadToEnd(); NLog.LogManager.GetCurrentClassLogger().Trace("人è¸å é¤ï¼" + result); return result; } /// <summary> /// ç¨æ·å é¤ /// </summary> /// <returns></returns> public static string DeleteUser(DeleteUserImg info) { string token = GetAccessToken(); string host = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/delete?access_token=" + token; Encoding encoding = Encoding.Default; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host); request.Method = "POST"; request.KeepAlive = true; String str = "{\"group_id\":\"" + info.group_id + "\",\"user_id\":\"" + info.user_id + "\"}"; byte[] buffer = encoding.GetBytes(str); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default); string result = reader.ReadToEnd(); NLog.LogManager.GetCurrentClassLogger().Trace("ç¨æ·å é¤ï¼" + result); return result; } /// <summary> /// äººè¸æç´¢ /// </summary> /// <returns></returns> public static SearchResult FaceSearch(string path,string group_id_list) { string token = GetAccessToken(); var imgbase64 = GetFileContentAsBase64(path); string host = "https://aip.baidubce.com/rest/2.0/face/v3/search?access_token=" + token; Encoding encoding = Encoding.Default; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host); request.Method = "POST"; request.KeepAlive = true; String str = "{\"image\":\"" + imgbase64 + "\",\"image_type\":\"BASE64\",\"group_id_list\":\""+ group_id_list + "\",\"quality_control\":\"LOW\",\"liveness_control\":\"NORMAL\"}"; byte[] buffer = encoding.GetBytes(str); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default); string result = reader.ReadToEnd(); NLog.LogManager.GetCurrentClassLogger().Trace("äººè¸æç´¢ï¼" + result); SearchResult searchResult = JsonConvert.DeserializeObject<SearchResult>(result); return searchResult; } } /// <summary> /// tokenè·åä¿¡æ¯ /// </summary> public class BDToken { /// <summary> /// 认è¯token /// </summary> public string access_token { get; set; } /// <summary> /// Access Tokençæææ(ç§ä¸ºåä½ï¼æææ30天) /// </summary> public int expires_in { get; set; } /// <summary> /// è·åæ¶é´ /// </summary> public string getdate { get; set; } } /// <summary> /// äººè¸æ³¨åä¿¡æ¯ /// </summary> public class BDUserInfo { /// <summary> /// å¾çè·¯å¾(æ»æ°æ®å¤§å°åºå°äº10Mï¼å辨çåºå°äº1920*1080) /// </summary> public string ImgPath { get; set; } /// <summary> /// ç¨æ·ç»idï¼æ è¯ä¸ç»ç¨æ·ï¼ç±æ°åã忝ãä¸åçº¿ç»æï¼ï¼é¿åº¦éå¶48B /// </summary> public string group_id { get; set; } /// <summary> /// ç¨æ·idï¼ç±æ°åã忝ãä¸åçº¿ç»æï¼ï¼å¯¹åºç³»ç»è´¦å· /// </summary> public string user_id { get; set; } } /// <summary> /// äººè¸æ³¨åæ¶è¿å对象 /// </summary> public class CreateUserResult { /// <summary> /// æ£ç´¢æåè¿å0 /// </summary> public int error_code { get; set; } public string error_msg { get; set; } /// <summary> /// è¯·æ±æ è¯ç ï¼éæºæ°ï¼å¯ä¸ /// </summary> public string log_id { get; set; } public CreateUser result { get; set; } } public class CreateUser { /// <summary> /// 人è¸å¾ççå¯ä¸æ è¯ /// </summary> public string face_token { get; set; } } /// <summary> /// äººè¸æç´¢æ¶è¿åç对象 /// </summary> public class SearchResult { /// <summary> /// æ£ç´¢æåè¿å0 /// </summary> public int error_code { get; set; } public string error_msg { get; set;} public UserResult result { get; set;} } public class UserResult { public string face_token { get; set; } public List<User_List> user_list { get; set;} } public class User_List { public string user_id { get; set; } /// <summary> /// ç¨æ·çå¹é å¾å,80å以ä¸å¯ä»¥å¤æä¸ºåä¸äºº /// </summary> public string score { get; set;} } /// <summary> /// 人è¸å é¤çå ¥å对象ï¼åªå 餿ä¸å¼ å¾çï¼å¦æè¯¥ç¨æ·åªæä¸å¼ å¾çï¼é£è¯¥ç¨æ·æ´ä½å é¤ /// </summary> public class DeleteUserImg { /// <summary> /// è¯·æ±æ è¯ç ï¼éæºæ°ï¼å¯ä¸ /// </summary> public int log_id { get; set;} /// <summary> /// ç¨æ·idï¼ç±æ°åã忝ãä¸åçº¿ç»æï¼ï¼é¿åº¦éå¶48B /// </summary> //public string user_id { get; set;} public string user_id { get; set;} /// <summary> /// ç¨æ·ç»idï¼ç±æ°åã忝ãä¸åçº¿ç»æï¼ é¿åº¦éå¶48Bï¼å 餿å®group_idä¸çuser_idä¿¡æ¯ /// </summary> public string group_id { get; set;} /// <summary> /// éè¦å é¤ç人è¸å¾çtokenï¼ï¼ç±æ°åã忝ãä¸åçº¿ç»æï¼é¿åº¦éå¶64B /// </summary> public string face_token { get; set;} } } ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/WIDESEAWCS_Common.csproj
@@ -8,6 +8,7 @@ <ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="NLog" Version="5.4.0" /> </ItemGroup> </Project> ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/System/AddUserDTO.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,57 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEAWCS_DTO.SerialPort { public class AddUserDTO { /// <summary> /// ç¨æ·idç¨æ¥ä¿®æ¹ /// </summary> public int id { get; set; } public string username { get; set; } public string usertruename { get; set; } /// <summary> /// ç¾åº¦äºåç» /// </summary> // public int log_id { get; set; } public string phoneno { get; set; } /// <summary> /// ç»å« /// </summary> public int roleid { get; set; } /// <summary> /// ç¨æ·ç±»å« /// </summary> public string rolename { get; set; } /// <summary> /// æ¯å¦å¯ç¨ /// </summary> public byte enable { get; set; } /// <summary> /// ä¸ä¼ å¾çå /// </summary> public string?path { get; set; } /// <summary> /// å¾çtoken /// </summary> //public string ?face_token { get; set; } } } ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_UserService.cs
@@ -45,5 +45,31 @@ /// <param name="files"></param> /// <returns></returns> WebResponseContent SaveFiles(IFormCollection files); /// <summary> /// æ·»å ç¨æ· /// </summary> /// <param name="addUserDTO"></param> /// <returns></returns> WebResponseContent AdduserData(AddUserDTO addUserDTO); WebResponseContent UpuserData(AddUserDTO addUserDTO); WebResponseContent DeleteUserData(string userAccount); /// <summary> /// æ¸ çæ°æ®åºä¸æ²¡æä½¿ç¨çå¾ç /// </summary> /// <returns></returns> WebResponseContent CleanUnusedImages(); /// <summary> /// ä¿å人è¸ç»å ¥æ¶çå¾ç /// </summary> /// <param name="files"></param> /// <returns></returns> WebResponseContent SaveFaceFiles(IFormCollection files); } } ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITelescopicService/IFaceRecognitionServer .cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseRepository; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_DTO.Telescopic; using WIDESEAWCS_Model.Models; namespace WIDESEAWCS_ITaskInfoService { public interface IFaceRecognitionServer : IService<Dt_FaceRecognition> { IRepository<Dt_FaceRecognition> Repository { get; } } } ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/LoginInfo.cs
@@ -11,5 +11,16 @@ public string UserName { get; set; } public string Password { get; set; } /// <summary> /// 人è¸è¯å« /// </summary> public string? path { get; set; } /// <summary> /// ç¾åº¦äºåç»face表ä¸çGroupid /// </summary> //public string? groupid { get; set; } } } ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/System/Sys_User.cs
@@ -29,6 +29,17 @@ public string UserName { get; set; } /// <summary> /// 人è¸è¯å«ç» /// </summary> [SugarColumn(IsNullable = true, ColumnDescription = "人è¸è¯å«ç»")] public string Log_id { get; set; } /// <summary> /// 人è¸è¯å«token /// </summary> [SugarColumn(Length = 100, IsNullable = true, ColumnDescription = "人è¸è¯å«token")] public string Face_token { get; set; } /// <summary> ///å¡å· /// </summary> [SugarColumn( IsNullable = true, ColumnDescription = "å¡å·")] ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Model/Models/Telescopic/Dt_FaceRecognition.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using SqlSugar; using WIDESEAWCS_Core.DB.Models; using WIDESEAWCS_Core.Tenants; namespace WIDESEAWCS_Model.Models { [SugarTable("Dt_FaceRecognition", "人è¸è¯å«è¡¨"), MultiTenant] public class Dt_FaceRecognition:BaseEntity { /// <summary> /// id /// </summary> [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主é®")] public int ID { get; set; } /// <summary> /// 人è¸è¯å«ç» /// </summary> [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "人è¸è¯å«ç»")] public string GroupID { get; set; } } } ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/System/Sys_UserController.cs
@@ -65,6 +65,8 @@ return new { result = false }; } [HttpPost, Route("login"), AllowAnonymous] public IActionResult Login([FromBody] LoginInfo loginInfo) { @@ -169,6 +171,61 @@ } /// <summary> /// æ·»å ç¨æ· /// </summary> /// <param name="addUserDTO"></param> /// <returns></returns> [HttpPost, Route("AdduserData"), AllowAnonymous] public WebResponseContent AdduserData([FromBody] AddUserDTO addUserDTO) { return Service.AdduserData(addUserDTO); } /// <summary> /// æ´æ°ç¨æ· /// </summary> /// <param name="addUserDTO"></param> /// <returns></returns> [HttpPost, Route("UpuserData"), AllowAnonymous] public WebResponseContent UpuserData([FromBody] AddUserDTO addUserDTO) { return Service.UpuserData(addUserDTO); } /// <summary> /// å é¤ç¨æ· /// </summary> /// <param name="deleteUserDTO"></param> /// <returns></returns> [HttpPost, Route("DeleteUserData"), AllowAnonymous] public WebResponseContent DeleteUserData(string userAccount) { return Service.DeleteUserData(userAccount); } /// <summary> /// ç»å ¥åæ¸ é¤è¿æ¬¡å ¨é¨è°ç¨SaveFaceFilesæ¹æ³çå¾ç /// </summary> /// <returns></returns> [HttpGet, Route("CleanUnusedImages"), AllowAnonymous] public WebResponseContent CleanUnusedImages() { return Service.CleanUnusedImages(); } /// <summary> ///人è¸ç»å ¥æ¶è°ç¨è¯¥æ¹æ³ä¸ä¼ å¾ç /// </summary> /// <param name="files"></param> /// <returns></returns> [HttpPost, Route("SaveFaceFiles"), AllowAnonymous] public WebResponseContent SaveFaceFiles(IFormCollection files) { return Service.SaveFaceFiles(files); } } public class SwaggerLoginRequest ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/Telescopic/FaceRecognitionController .cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,28 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseController; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_DTO.Telescopic; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_TaskInfoService; namespace WIDESEAWCS_Server.Controllers.SerialPort { [Route("api/[controller]")] [ApiController] public class FaceRecognitionController : ApiBaseController<IFaceRecognitionServer, Dt_FaceRecognition> { public FaceRecognitionController(IFaceRecognitionServer service) : base(service) { } } } ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/image/logo1.png
ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs
@@ -12,6 +12,8 @@ using WIDESEAWCS_Core.Caches; using WIDESEAWCS_DTO.SerialPort; using Microsoft.AspNetCore.Http; using Newtonsoft.Json; using WIDESEAWCS_Common; namespace WIDESEAWCS_SystemServices { @@ -20,21 +22,91 @@ private readonly IUnitOfWorkManage _unitOfWorkManage; private readonly ICacheService _cacheService; private readonly ISys_MenuService _menuService; public Sys_UserService(IRepository<Sys_User> repository, IUnitOfWorkManage unitOfWorkManage, ICacheService cacheService, ISys_MenuService menuService) : base(repository) private readonly IRepository<Dt_FaceRecognition> _faceServer; private readonly IRepository<Dt_Loginhsy> _LoginhsyServer; public Sys_UserService(IRepository<Dt_Loginhsy> LoginhsyServer,IRepository<Dt_FaceRecognition> faceServer, IRepository<Sys_User> repository, IUnitOfWorkManage unitOfWorkManage, ICacheService cacheService, ISys_MenuService menuService) : base(repository) { _faceServer = faceServer; _LoginhsyServer = LoginhsyServer; _unitOfWorkManage = unitOfWorkManage; _cacheService = cacheService; _menuService = menuService; } #region //public WebResponseContent Login(LoginInfo loginInfo) //{ // WebResponseContent content = new WebResponseContent(); // try // { // //BaseDal.QueryFirst(x => x.UserName == loginInfo.UserName); // string msg = string.Empty; // #region 临æ¶ä½¿ç¨ // try // { // loginInfo.Password = loginInfo.Password.EncryptDES(AppSecret.User); // } // catch // { // } // #endregion // UserInfo user = BaseDal.QueryFirst(x => x.UserName == loginInfo.UserName && x.UserPwd == loginInfo.Password, x => new UserInfo { HeadImageUrl = x.HeadImageUrl, RoleId = x.Role_Id, TenantId = x.TenantId, UserId = x.User_Id, UserName = x.UserName, UserTrueName = x.UserTrueName }); // if (user != null) // { // object obj = _menuService.GetMenuActionList(user.RoleId); // if (obj is not IEnumerable<object> list) // { // return WebResponseContent.Instance.Error("æ ç»å½æé"); // } // if (!list.Any()) // { // return WebResponseContent.Instance.Error("æ ç»å½æé"); // } // string token = JwtHelper.IssueJwt(new TokenModelJwt() // { // UserId = user.UserId, // RoleId = user.RoleId, // UserName = user.UserName, // TenantId = user.TenantId, // }); // _cacheService.AddOrUpdate(user.UserId.ToString(), token); // content = WebResponseContent.Instance.OK(data: new { token, userName = user.UserTrueName, img = user.HeadImageUrl,ID=user.UserId }); // } // else // { // content = WebResponseContent.Instance.Error("è´¦å·æå¯ç é误"); // } // } // catch (Exception ex) // { // content = WebResponseContent.Instance.Error(ex.Message); // } // return content; //} #endregion /// <summary> /// 人è¸è¯å«ç»å ¥æ¥å£ /// </summary> /// <param name="loginInfo"></param> /// <returns></returns> public WebResponseContent Login(LoginInfo loginInfo) { WebResponseContent content = new WebResponseContent(); try { //BaseDal.QueryFirst(x => x.UserName == loginInfo.UserName); string msg = string.Empty; //string msg = string.Empty; #region 临æ¶ä½¿ç¨ try @@ -43,23 +115,74 @@ } catch { } #endregion // å è·åç¨æ·ä¿¡æ¯ UserInfo user = null; if (!string.IsNullOrEmpty(loginInfo.path)) { // 人è¸è¯å«ç»å½ var groupId = _faceServer.QueryData().Select(x => x.GroupID).FirstOrDefault(); if (groupId == null) { return WebResponseContent.Instance.Error("没æ¾å°è¯¥äººè¸è¯å«åç»"); } UserInfo user = BaseDal.QueryFirst(x => x.UserName == loginInfo.UserName && x.UserPwd == loginInfo.Password, x => new UserInfo { HeadImageUrl = x.HeadImageUrl, RoleId = x.Role_Id, TenantId = x.TenantId, UserId = x.User_Id, UserName = x.UserName, UserTrueName = x.UserTrueName }); var faceResult = BaiDuFaceHelper.FaceSearch(loginInfo.path, groupId); if (faceResult != null && faceResult.error_code == 0) { var bestMatch = faceResult.result.user_list.OrderByDescending(u => u.score).FirstOrDefault(); string usercount = bestMatch.user_id; if (bestMatch != null && double.TryParse(bestMatch.score, out double score) && score > 80) { //ç¨è¯å«å°ç user_id æ¥è·åç¨æ·ä¿¡æ¯ var faceuser = BaseDal.QueryData(x => x.UserName == usercount).FirstOrDefault(); // è·åå¹é ç第ä¸ä¸ªç¨æ· if (faceuser != null) { // æå¨å° Sys_User æ å°å° UserInfo user = new UserInfo { UserId = faceuser.User_Id, UserName = faceuser.UserName, UserTrueName = faceuser.UserTrueName, HeadImageUrl = faceuser.HeadImageUrl, RoleId = faceuser.Role_Id, TenantId = faceuser.TenantId, }; } } if (user == null) { return WebResponseContent.Instance.Error("人è¸è¯å«å¤±è´¥ï¼è¯·éè¯"); } loginInfo.UserName = user.UserName; } } else { // å¯ç ç»å½ user = GetUserInfo(loginInfo.UserName, loginInfo.Password); } // 妿æ¾å°ç¨æ· if (user != null) { object obj = _menuService.GetMenuActionList(user.RoleId); if (obj is not IEnumerable<object> list) var disbled = BaseDal.QueryFirst(x => x.UserName == loginInfo.UserName); if (disbled.Enable != 1) { return WebResponseContent.Instance.Error("æ ç»å½æé"); return WebResponseContent.Instance.Error("ä½ çè´¦å·å·²è¢«ç¦ç¨ï¼è¯·è系管çå"); } if (!list.Any()) // è·åè§è²æé object obj = _menuService.GetMenuActionList(user.RoleId); if (obj is not IEnumerable<object> list || !list.Any()) { return WebResponseContent.Instance.Error("æ ç»å½æé"); } // çæ JWT Token string token = JwtHelper.IssueJwt(new TokenModelJwt() { UserId = user.UserId, @@ -68,9 +191,27 @@ TenantId = user.TenantId, }); _cacheService.AddOrUpdate(user.UserId.ToString(), token); // è®°å½ç»å½åå² var loghis = new Dt_Loginhsy { UserName = user.UserName, LoginTiem =DateTime.Now, CreateDate = DateTime.Now }; content = WebResponseContent.Instance.OK(data: new { token, userName = user.UserTrueName, img = user.HeadImageUrl,ID=user.UserId }); // ä¿åç¨æ·ç»å½ä¿¡æ¯ _cacheService.AddOrUpdate(user.UserId.ToString(), token); _LoginhsyServer.AddData(loghis); // è¿åååº content = WebResponseContent.Instance.OK(data: new { token, userName = user.UserTrueName, img = user.HeadImageUrl, ID = user.UserId, RoleId = user.RoleId }); } else { @@ -303,5 +444,277 @@ return new WebResponseContent { Status = false, Message = "ä¸ä¼ æä»¶å¤±è´¥ï¼" + ex.Message }; } } /// <summary> /// æ·»å ç¨æ· /// </summary> /// <param name="addUserDTO"></param> /// <returns></returns> public WebResponseContent AdduserData(AddUserDTO addUserDTO) { try { if (addUserDTO == null) { return new WebResponseContent { Status = false, Message = "è¯·æ±æ°æ®ä¸ºç©ºï¼å¯è½æ¯ JSON è§£æå¤±è´¥" }; } var list = BaseDal.QueryData(a => a.UserName == addUserDTO.username).FirstOrDefault(); if (list != null) { return new WebResponseContent { Status = false, Message = "è´¦å·éå¤ï¼è¯·éæ°å½å ¥" }; } var face = _faceServer.QueryData().Select(x => x.GroupID).FirstOrDefault(); ; var baiduResult = BaiDuFaceHelper.AddUser(new BDUserInfo { ImgPath = addUserDTO.path, user_id = addUserDTO.username, group_id = face // è¿éåºè¯¥å¡«ç¾åº¦äººè¸åºåç» // group_id = baiduResult.result.log_id }); // 夿ç¾åº¦è¿åæ¯å¦æå if (baiduResult == null || baiduResult.error_code != 0) { return new WebResponseContent { Status = false, Data = "äººè¸æ³¨å失败ï¼" + baiduResult.error_msg }; } // åå»ºç¨æ·æ°æ® var sys = new Sys_User { UserName = addUserDTO.username, UserTrueName = addUserDTO.usertruename, HeadImageUrl = addUserDTO.path, Log_id = baiduResult.log_id, Face_token = baiduResult.result.face_token, PhoneNo = addUserDTO.phoneno, Role_Id = addUserDTO.roleid, RoleName = addUserDTO.rolename, Enable = addUserDTO.enable, UserPwd = "j79rYYvCz4vdhcboB1Ausg==", CreateDate = DateTime.Now }; BaseDal.AddData(sys); return new WebResponseContent { Status = true, Data = sys }; } catch (Exception ex) { return new WebResponseContent { Status = false, Message = "失败" + ex }; } } /// <summary> /// æ´æ°ç¨æ· /// </summary> /// <param name="addUserDTO"></param> /// <returns></returns> public WebResponseContent UpuserData(AddUserDTO addUserDTO) { try { // 1. æ¥è¯¢ç¨æ· var sys = BaseDal.QueryData(x => x.User_Id == addUserDTO.id).FirstOrDefault(); if (sys == null) { return new WebResponseContent { Status = false, Message = "没æ¾å°è¯¥ç¨æ·" }; } // 2. æ¥è¯¢äººè¸åºåç» ID var faceGroupID = _faceServer.QueryData().Select(x => x.GroupID).FirstOrDefault(); // 3. 夿æ¯å¦éè¦æ´æ°äººè¸ä¿¡æ¯ string faceToken = null; if (!string.IsNullOrEmpty(addUserDTO.path)) // åªæä¼ äºæ°å¾çï¼ææ´æ°äººè¸ä¿¡æ¯ { var baiduResult = BaiDuFaceHelper.AddUser(new BDUserInfo { ImgPath = addUserDTO.path, user_id = addUserDTO.username, group_id = faceGroupID // è¿éåºè¯¥å¡«ç¾åº¦äººè¸åºåç» }); // 4. 夿ç¾åº¦ API æ¯å¦æå if (baiduResult == null || baiduResult.error_code != 0) { return new WebResponseContent { Status = false, Message = "该å¾çä¹åå¨ï¼ä¸è¦éå¤ä¸ä¼ ï¼" + baiduResult.error_msg }; } // 5. åªæå½ä¸ä¼ äºæ°å¾çå¹¶æåæ¶ï¼ææ´æ°è¿äºå段 faceToken = baiduResult.result.face_token; sys.Log_id = baiduResult.log_id; sys.HeadImageUrl = addUserDTO.path; } // 6. æ´æ°ç¨æ·å ¶ä»ä¿¡æ¯ sys.UserName = addUserDTO.username; sys.UserTrueName = addUserDTO.usertruename; sys.Face_token = faceToken ?? sys.Face_token; // åªæå½ faceToken æå¼æ¶ææ´æ°ï¼å¦åä¿æåå¼ sys.PhoneNo = addUserDTO.phoneno; sys.Role_Id = addUserDTO.roleid; sys.RoleName = addUserDTO.rolename; sys.Enable = addUserDTO.enable; // 7. æ´æ°æ°æ®åº BaseDal.UpdateData(sys); return new WebResponseContent { Status = true, Data = sys }; } catch (Exception ex) { return new WebResponseContent { Status = false, Message = "失败ï¼" + ex.Message }; } } /// <summary> /// å é¤ /// </summary> /// <param name="deleteUserDTO"></param> /// <returns></returns> public WebResponseContent DeleteUserData(string account) { try { // 2. æ¥è¯¢äººè¸åºåç» ID var faceGroupID = _faceServer.QueryData().Select(x => x.GroupID).FirstOrDefault(); WIDESEAWCS_Common.DeleteUserImg deleteUserImg = new WIDESEAWCS_Common.DeleteUserImg(); deleteUserImg.group_id = faceGroupID; deleteUserImg.user_id = account; string apiResult = BaiDuFaceHelper.DeleteUser(deleteUserImg);//åªè¦ç»tokenålog_id // 2. è§£æè¿åç»æï¼å¤æå 餿¯å¦æå dynamic resultObj = JsonConvert.DeserializeObject(apiResult); if (resultObj.error_code == 0) { // ç¾åº¦å 餿ååï¼å 餿°æ®åºä¸çç¨æ· var user = BaseDal.QueryData(x => x.UserName == account); if (user != null) { BaseDal.DeleteData(user); } return WebResponseContent.Instance.OK("ç¨æ·å 餿å"); } else { return WebResponseContent.Instance.Error("ç¾åº¦ API å é¤å¤±è´¥ï¼" + resultObj.error_msg); } } catch (Exception ex) { return WebResponseContent.Instance.Error("å é¤ç¨æ·å¤±è´¥ï¼" + ex.Message); } } public WebResponseContent SaveFaceFiles(IFormCollection files) { if (files == null || files.Files.Count == 0) return new WebResponseContent { Status = false, Message = "请ä¸ä¼ æä»¶" }; // 1. ç¡®ä¿åå¨ç®å½åå¨ string baseDirectory = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "UploadfaceImage"); if (!Directory.Exists(baseDirectory)) Directory.CreateDirectory(baseDirectory); try { var file = files.Files[0]; // åªå¤ç第ä¸ä¸ªæä»¶ string fileName = file.FileName; // ç´æ¥ä½¿ç¨å端çæä»¶å string fullFilePath = Path.Combine(baseDirectory, fileName); // 2. ä¿åæä»¶ï¼å¦æåå¨ï¼åè¦çï¼ using (var stream = new FileStream(fullFilePath, FileMode.Create)) { file.CopyTo(stream); } // 3. è¿åæä»¶å return new WebResponseContent { Status = true, Message = "æä»¶ä¸ä¼ æå", Data = fileName }; } catch (Exception ex) { return new WebResponseContent { Status = false, Message = "ä¸ä¼ æä»¶å¤±è´¥ï¼" + ex.Message }; } } /// <summary> /// å 餿°æ®åºä¸æ²¡æä½¿ç¨çå¾ç /// </summary> /// <returns></returns> /// <exception cref="NotImplementedException"></exception> public WebResponseContent CleanUnusedImages() { try { // è·åæä»¶ç宿´è·¯å¾ string pathimage = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "image"); // 妿æä»¶å¤¹ä¸åå¨ï¼è¿åéè¯¯ä¿¡æ¯ if (!Directory.Exists(pathimage)) { return new WebResponseContent { Status = false, Message = "å¾çæä»¶å¤¹ä¸åå¨" }; } // **ä½¿ç¨ HashSet æé«æ¥æ¾æç** var userImageSet = BaseDal.QueryData(x => !string.IsNullOrEmpty(x.HeadImageUrl)) .Select(x => x.HeadImageUrl) .ToHashSet(); // **æåæ¥è¯¢é度** // è·åæä»¶å¤¹ä¸çææå¾çæä»¶ï¼æä»¶åï¼ var imageFiles = Directory.GetFiles(pathimage) .Select(Path.GetFileName) .ToList(); int deletedCount = 0; foreach (var file in imageFiles) { // **HashSet æ¥è¯¢ O(1)** if (!userImageSet.Contains(file)) { string filePath = Path.Combine(pathimage, file); try { File.Delete(filePath); deletedCount++; } catch (Exception ex) { Console.WriteLine($"æ æ³å 餿件 {file}: {ex.Message}"); } } } return new WebResponseContent { Status = true, Message = $"æ¸ ç宿ï¼å é¤äº {deletedCount} å¼ æªä½¿ç¨çå¾ç" }; } catch (Exception ex) { return new WebResponseContent { Status = false, Message = $"æ¸ ç失败: {ex.Message}" }; } } /// <summary> /// GetUserInfoç»å ¥æ¹æ³ /// </summary> /// <param name="userName"></param> /// <param name="password"></param> /// <returns></returns> public UserInfo GetUserInfo(string userName, string password) { return BaseDal.QueryFirst(x => x.UserName == userName && x.UserPwd == password, x => new UserInfo { HeadImageUrl = x.HeadImageUrl, RoleId = x.Role_Id, TenantId = x.TenantId, UserId = x.User_Id, UserName = x.UserName, UserTrueName = x.UserTrueName }); } } } ÏîÄ¿´úÂë/WCS/WIDESEAWCS_Server/WIDESEAWCS_TelescopicService/FaceRecognitionServer.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseRepository; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; namespace WIDESEAWCS_TelescopicService { public class FaceRecognitionServer : ServiceBase<Dt_FaceRecognition, IRepository<Dt_FaceRecognition>>, IFaceRecognitionServer { public IRepository<Dt_FaceRecognition> Repository => BaseDal; public FaceRecognitionServer(IRepository<Dt_FaceRecognition> BaseDal) : base(BaseDal) { } } }