From ee5e3a086a5dc145e7f5df3de32e0e072c183949 Mon Sep 17 00:00:00 2001
From: z8018 <1282578289@qq.com>
Date: 星期五, 06 六月 2025 15:19:40 +0800
Subject: [PATCH] 1

---
 project/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserFaceService.cs |  214 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 214 insertions(+), 0 deletions(-)

diff --git a/project/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserFaceService.cs b/project/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserFaceService.cs
new file mode 100644
index 0000000..71addb8
--- /dev/null
+++ b/project/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserFaceService.cs
@@ -0,0 +1,214 @@
+锘�
+using System.Drawing;
+using System.Drawing.Imaging;
+using WIDESEAWCS_Common.Face;
+using WIDESEAWCS_Core;
+using WIDESEAWCS_Core.Authorization;
+using WIDESEAWCS_Core.BaseRepository;
+using WIDESEAWCS_Core.BaseServices;
+using WIDESEAWCS_Core.Caches;
+using WIDESEAWCS_ISystemServices;
+using WIDESEAWCS_Model.Models;
+using File = System.IO.File;
+
+namespace WIDESEAWCS_SystemServices
+{
+    public class Sys_UserFaceService : ServiceBase<Sys_UserFace, IRepository<Sys_UserFace>>, ISys_UserFaceService
+    {
+        public IRepository<Sys_UserFace> Repository => BaseDal;
+
+        private readonly IRepository<Sys_User> _userRepository;
+        private readonly ICacheService _cacheService;
+
+        public Sys_UserFaceService(IRepository<Sys_UserFace> BaseDal, IRepository<Sys_User> userRepository, ICacheService cacheService) : base(BaseDal)
+        {
+            _userRepository = userRepository;
+            _cacheService = cacheService;
+        }
+
+        public WebResponseContent FaceRecognition(ImageModel model)
+        {
+            string filePath = string.Empty;
+            try
+            {
+                byte[] data = Convert.FromBase64String(model.Base64Image);
+                string sourcePath = AppDomain.CurrentDomain.BaseDirectory + "Record\\";
+                string basePath = AppDomain.CurrentDomain.BaseDirectory + "Current\\";
+                if (!Directory.Exists(basePath))
+                {
+                    Directory.CreateDirectory(basePath);
+                }
+
+                filePath = basePath + $"face_{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.jpg";
+
+                // 浣跨敤瀛楄妭鏁扮粍鍒涘缓MemoryStream
+                using (MemoryStream ms = new MemoryStream(data))
+                {
+                    // 浠嶮emoryStream鍒涘缓Image瀵硅薄
+                    Image image = Image.FromStream(ms);
+                    image.Save(filePath, ImageFormat.Png);
+                }
+
+                var (flag, result) = FaceHelper.FaceRecognition(sourcePath, filePath);
+
+                if (flag)
+                {
+                    Sys_UserFace userFace = BaseDal.QueryFirst(x => x.UserFaceImagePath.Contains(result));
+                    if (userFace != null)
+                    {
+                        Sys_User user = _userRepository.QueryFirst(x => x.User_Id == userFace.User_Id && x.UserName == userFace.UserName);
+                        if (user != null)
+                        {
+                            string token = JwtHelper.IssueJwt(new TokenModelJwt()
+                            {
+                                UserId = user.User_Id,
+                                RoleId = user.Role_Id,
+                                UserName = user.UserName,
+                                TenantId = user.TenantId,
+                            });
+
+                            _cacheService.AddOrUpdate(user.User_Id.ToString(), token);
+
+                            return WebResponseContent.Instance.OK(data: new { token, userName = user.UserTrueName, img = user.HeadImageUrl });
+                        }
+                        else
+                        {
+                            return WebResponseContent.Instance.Error("鏈壘鍒板尮閰嶇殑鐢ㄦ埛淇℃伅");
+                        }
+                    }
+                    else
+                    {
+                        return WebResponseContent.Instance.Error("鏈壘鍒板尮閰嶇殑浜鸿劯淇℃伅");
+                    }
+                }
+                else
+                {
+                    return WebResponseContent.Instance.Error(result);
+                }
+            }
+            finally
+            {
+                // 纭繚閲婃斁璧勬簮
+                GC.Collect();
+                GC.WaitForPendingFinalizers();
+                if (File.Exists(filePath))
+                {
+                    File.Delete(filePath); // 鍒犻櫎褰撳墠浜鸿劯鍥剧墖
+                }
+            }
+        }
+
+        public WebResponseContent FaceEnter(ImageModel model)
+        {
+            try
+            {
+                if (App.User == null || string.IsNullOrEmpty(App.User.UserName) || App.User.UserId == 0)
+                {
+                    return new WebResponseContent
+                    {
+                        Status = false,
+                        Message = "鐢ㄦ埛鏈櫥褰�"
+                    };
+                }
+
+                byte[] data = Convert.FromBase64String(model.Base64Image);
+                string basePath = AppDomain.CurrentDomain.BaseDirectory + "Record\\";
+                if (!Directory.Exists(basePath))
+                {
+                    Directory.CreateDirectory(basePath);
+                }
+
+                string curPath = AppDomain.CurrentDomain.BaseDirectory + "Current\\";
+                if (!Directory.Exists(basePath))
+                {
+                    Directory.CreateDirectory(basePath);
+                }
+
+                string fileName = $"face_{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.jpg";
+                string filePath = basePath + fileName;
+                // 浣跨敤瀛楄妭鏁扮粍鍒涘缓MemoryStream
+                using (MemoryStream ms = new MemoryStream(data))
+                {
+                    // 浠嶮emoryStream鍒涘缓Image瀵硅薄
+                    Image image = Image.FromStream(ms);
+                    
+                    image.Save(curPath + fileName, ImageFormat.Png);
+
+                    {
+                        var (flag, result) = FaceHelper.FaceRecognition(basePath, curPath + fileName);
+                        if (flag)
+                        {
+                            Sys_UserFace userFaceTemp = BaseDal.QueryFirst(x => x.UserFaceImagePath.Contains(result));
+                            if (userFaceTemp != null && userFaceTemp.User_Id != App.User.UserId && userFaceTemp.UserName != App.User.UserName)
+                            {
+                                return new WebResponseContent
+                                {
+                                    Status = false,
+                                    Message = "涓嶅彲娉ㄥ唽澶氫釜璐﹀彿"
+                                };
+                            }
+                        }
+                    }
+
+                    image.Save(filePath, ImageFormat.Png);
+                }
+
+               
+                // 鑾峰彇褰撳墠鐢ㄦ埛淇℃伅
+                Sys_UserFace userFace = BaseDal.QueryFirst(x => x.UserName == App.User.UserName && x.User_Id == App.User.UserId);
+                if (userFace != null)
+                {
+                    if (!string.IsNullOrEmpty(userFace.UserFaceImagePath))
+                    {
+                        string? firstImagePath = userFace.UserFaceImagePath.Split(',').FirstOrDefault();
+                        if (!string.IsNullOrEmpty(firstImagePath))
+                        {
+                            var (flag, result) = FaceHelper.FaceRecognitionOne(firstImagePath, filePath);
+
+                            if (flag)
+                            {
+                                userFace.UserFaceImagePath += "," + filePath;
+
+                                base.UpdateData(userFace);
+
+                                return WebResponseContent.Instance.OK("浜鸿劯褰曞叆鎴愬姛", filePath);
+                            }
+                            else
+                            {
+                                return WebResponseContent.Instance.Error(result);
+                            }
+                        }
+                    }
+                    else
+                    {
+                        userFace.UserFaceImagePath = filePath;
+
+                        base.UpdateData(userFace);
+
+                        return WebResponseContent.Instance.OK("浜鸿劯褰曞叆鎴愬姛", filePath);
+                    }
+                }
+                userFace = new Sys_UserFace
+                {
+                    User_Id = App.User.UserId,
+                    UserName = App.User.UserName,
+                    UserFaceImageName = fileName,
+                    UserFaceImagePath = filePath
+                };
+                base.AddData(userFace);
+
+                return WebResponseContent.Instance.OK(data: filePath);
+            }
+            catch (Exception ex)
+            {
+                return new WebResponseContent
+                {
+                    Status = false,
+                    Message = "浜鸿劯褰曞叆澶辫触锛�" + ex.Message
+                };
+            }
+        }
+
+
+    }
+}

--
Gitblit v1.9.3