yanjinhui
2025-04-01 8ea14f10bfd3ed7a6b445d53feeb399b6bcf5d78
ÏîÄ¿´úÂë/WIDESEAWCS_Server Õýʽ/WIDESEAWCS_SystemServices/Sys_UserService.cs
@@ -17,6 +17,9 @@
using ICacheService = WIDESEAWCS_Core.Caches.ICacheService;
using Microsoft.AspNetCore.Builder;
using WIDESEAWCS_DTO.SerialPort;
using WIDESEAWCS_DTO.Telescopic;
using WIDESEAWCS_Common;
using Newtonsoft.Json;
namespace WIDESEAWCS_SystemServices
{
@@ -28,8 +31,11 @@
        private readonly ISys_RoleRepository _RoleRepository;
        private readonly ILoginHistoryRepository _loginHistoryRepository;
        private readonly IPutakeRepository _putakeRepository;
        private readonly IFaceRecognitionRepository _faceRecognitionRepository;
        public Sys_UserService(ISys_UserRepository repository, IUnitOfWorkManage unitOfWorkManage,
        public Sys_UserService(IFaceRecognitionRepository faceRecognitionRepository, ISys_UserRepository repository, IUnitOfWorkManage unitOfWorkManage,
            ICacheService cacheService, ISys_MenuService menuService, ISys_RoleRepository roleRepository, ILoginHistoryRepository loginHistoryRepository, IPutakeRepository putakeRepository) : base(repository)
        {
            _unitOfWorkManage = unitOfWorkManage;
@@ -39,6 +45,8 @@
            _RoleRepository = roleRepository;
            _loginHistoryRepository = loginHistoryRepository;
            _putakeRepository = putakeRepository;
            _faceRecognitionRepository = faceRecognitionRepository;
        }
        public WebResponseContent Login(LoginInfo loginInfo)
@@ -60,7 +68,25 @@
                }
                #endregion
                if (!string.IsNullOrEmpty(loginInfo.path))
                {
                    var faceResult = BaiDuFaceHelper.FaceSearch(loginInfo.path);
                    if (faceResult != null && faceResult.error_code == 0)
                    {
                        // èŽ·å–æœ€é«˜åŒ¹é…åº¦çš„ç”¨æˆ·
                        var bestMatch = faceResult.result.user_list.OrderByDescending(u => u.score).FirstOrDefault();//拿第一个最高的
                        if (bestMatch != null && double.TryParse(bestMatch.score, out double score) && score > 80) // è®¾å®š80分为可信度阈值
                        {
                            return new WebResponseContent { Data = true };
                        }
                    }
                    return WebResponseContent.Instance.Error("人脸识别失败,请重试");
                }
                else
                {
                UserInfo user = BaseDal.GetUserInfo(loginInfo.UserName, loginInfo.Password);
                var disbled = BaseDal.QueryFirst(x => x.UserName == loginInfo.UserName);//根据这个用户名来查看用户
                if (user != null)
@@ -105,6 +131,8 @@
                    content = WebResponseContent.Instance.Error("账号或密码错误");
                }
            }
            }
            catch (Exception ex)
            {
                content = WebResponseContent.Instance.Error(ex.Message);
@@ -415,6 +443,201 @@
            }
        }
        /// <summary>
        /// æŸ¥çœ‹ç”¨æˆ·ä¿¡æ¯å’Œäººè„¸è¯†åˆ«è¡¨
        /// </summary>
        /// <param name="paginationDTO"></param>
        /// <returns></returns>
        public WebResponseContent GetUserFace(PaginationDTO paginationDTO)
        {
            try
            {
                int totalCount = 0;
                var sys = Db.Queryable<Sys_User>();
                var face = _faceRecognitionRepository.Db.Queryable<Dt_FaceRecognition>();
                if (face == null)
                {
                    return new WebResponseContent { Status = false, Message = "数据为空" };
                }
                var query = sys.LeftJoin<Dt_FaceRecognition>((a, b) => a.Log_id == b.ID);
                if (!string.IsNullOrEmpty(paginationDTO.searchKeyword))
                {
                    query = query.Where((a, b) =>
                        a.UserName.Contains(paginationDTO.searchKeyword) ||
                        a.UserTrueName.Contains(paginationDTO.searchKeyword) ||
                        a.PhoneNo.Contains(paginationDTO.searchKeyword) ||
                        a.RoleName.Contains(paginationDTO.searchKeyword) ||
                        a.Role_Id.ToString().Contains(paginationDTO.searchKeyword)
                    );
                }
                if (paginationDTO.startDate.HasValue && paginationDTO.endDate.HasValue)
                {
                    query = query.Where((a, b) => a.CreateDate >= paginationDTO.startDate && a.CreateDate <= paginationDTO.endDate);
                }
                var result = query.Select((a, b) => new
                {
                    a.User_Id,
                    a.UserName,
                    a.UserTrueName,
                    a.PhoneNo,
                    a.Role_Id,
                    a.RoleName,
                    a.HeadImageUrl,
                    a.Enable,
                    a.CreateDate,
                    a.Face_token,
                    b.GroupID,
                }).ToPageList(paginationDTO.pageIndex, paginationDTO.pageSize, ref totalCount);
                return new WebResponseContent
                {
                    Status = true,
                    Data = new
                    {
                        TotalCount = totalCount,//总数
                        PageIndex = paginationDTO.pageIndex,//页数
                        PaseSize = paginationDTO.pageSize,//一页多少数据
                        Items = result//返回字段
                    }
                };
            }
            catch (Exception)
            {
                throw;
            }
        }
        public WebResponseContent AdduserData(AddUserDTO addUserDTO)
        {
            try
            {
                var baiduResult = BaiDuFaceHelper.AddUser(new BDUserInfo
                {
                    ImgPath = addUserDTO.path,
                    user_id = addUserDTO.username,
                    group_id = addUserDTO.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,
                    HeadImageUrl=addUserDTO.path,
                    Log_id = addUserDTO.log_id,
                    Face_token = baiduResult.result.face_token,
                    PhoneNo = addUserDTO.phoneno,
                    Role_Id = addUserDTO.roleid,
                    RoleName = addUserDTO.rolename,
                    Enable = addUserDTO.enable,
                    UserPwd= "j79rYYvCz4vdhcboB1Ausg=="
                };
                BaseDal.AddData(sys);
                return new WebResponseContent { Status = true, Data = sys };
            }
            catch (Exception ex)
            {
                return new WebResponseContent { Status = false, Message = "失败" + ex };
            }
        }
        public WebResponseContent UpuserData(AddUserDTO addUserDTO)
        {
            try
            {
                var baiduResult = BaiDuFaceHelper.AddUser(new BDUserInfo
                {
                    ImgPath = addUserDTO.path,
                    user_id = addUserDTO.username,
                    group_id = addUserDTO.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,
                    HeadImageUrl = addUserDTO.path,
                    Log_id = addUserDTO.log_id,
                    Face_token = baiduResult.result.face_token,
                    PhoneNo = addUserDTO.phoneno,
                    Role_Id = addUserDTO.roleid,
                    RoleName = addUserDTO.rolename,
                    Enable = addUserDTO.enable,
                };
                BaseDal.UpdateData(sys);
                return new WebResponseContent { Status = true, Data = sys };
            }
            catch (Exception ex)
            {
                return new WebResponseContent { Status = false, Message = "失败" + ex };
            }
        }
        /// <summary>
        /// åˆ é™¤
        /// </summary>
        /// <param name="deleteUserDTO"></param>
        /// <returns></returns>
        public WebResponseContent DeleteUserData(DeleteUserImg deleteUserDTO)
        {
            try
            {
                string apiResult = BaiDuFaceHelper.DeleteUser(deleteUserDTO);
                // 2. è§£æžè¿”回结果,判断删除是否成功
                dynamic resultObj = JsonConvert.DeserializeObject(apiResult);
                if (resultObj.error_code == 0)
                {
                   // ç™¾åº¦åˆ é™¤æˆåŠŸåŽï¼Œåˆ é™¤æ•°æ®åº“ä¸­çš„ç”¨æˆ·
                    var user = BaseDal.QueryData(deleteUserDTO.user_id);
                    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);
            }
        }
    }
}