yanjinhui
2025-06-05 fcd49db2ee33ee2e1d33e5a41e53d9897a8a3b0f
project/WCS/WIDESEAWCS_Server/WIDESEAWCS_SystemServices/Sys_UserService.cs
@@ -16,6 +16,8 @@
using WIDESEAWCS_Common;
using FaceAI;
using System.Runtime.InteropServices;
using System.IO;
using WIDESEAWCS_DTO.Telescopic;
namespace WIDESEAWCS_SystemServices
{
@@ -26,14 +28,20 @@
        private readonly ISys_MenuService _menuService;
        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)
        private readonly IRepository<Dt_Maintenance> _MainServer;
        private readonly IRepository<Sys_Role> _RoleServer;
        private readonly IRepository<Dt_AuthorizationRecord> _AuthorizatRecServer;
        public Sys_UserService(IRepository<Dt_AuthorizationRecord> AuthorizatRecServer,IRepository<Sys_Role> RoleServer,IRepository<Dt_Loginhsy> LoginhsyServer,IRepository<Dt_FaceRecognition> faceServer, IRepository<Sys_User> repository, IUnitOfWorkManage unitOfWorkManage, ICacheService cacheService, ISys_MenuService menuService, IRepository<Dt_Maintenance> MainServer) : base(repository)
        {
            _faceServer = faceServer;
            _LoginhsyServer = LoginhsyServer;
            _unitOfWorkManage = unitOfWorkManage;
            _cacheService = cacheService;
            _menuService = menuService;
            _MainServer = MainServer;
            _RoleServer = RoleServer;
            _AuthorizatRecServer = AuthorizatRecServer;
        }
@@ -521,23 +529,25 @@
                {
                    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
                });
                //人脸识别先注释掉后期开启
                //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 };
                //// 判断百度返回是否成功
                //if (baiduResult == null || baiduResult.error_code != 0)
                //{
                //    return new WebResponseContent { Status = false, Data = "人脸注册失败:" + baiduResult.error_msg };
                }
                //}
                // 创建用户数据
                var sys = new Sys_User
@@ -545,16 +555,31 @@
                    UserName = addUserDTO.username,
                    UserTrueName = addUserDTO.usertruename,
                    HeadImageUrl = addUserDTO.path,
                    Log_id = baiduResult.log_id,
                    Face_token = baiduResult.result.face_token,
                    //Log_id = baiduResult.log_id,
                    //Face_token = baiduResult.result.face_token,
                    PhoneNo = addUserDTO.phoneno,
                    Role_Id = addUserDTO.roleid,
                    IsLeader=addUserDTO.IsLeader,
                    RoleName = addUserDTO.rolename,
                    Enable = addUserDTO.enable,
                    Unit=addUserDTO.userunit,
                    UserPwd = "j79rYYvCz4vdhcboB1Ausg==",
                    Userteam=addUserDTO.userteam,
                    Dept_Id=addUserDTO.dept_Id,
                    //CardNumber=addUserDTO.carnuber,
                    CreateDate = DateTime.Now
                };
                BaseDal.AddData(sys);
                //创建Dt_Maintenance表中的数据
                var Main = new Dt_Maintenance
                {
                    UserAccount = addUserDTO.username,
                    Roleid = addUserDTO.roleid,
                    IsLeader =addUserDTO.IsLeader,//是否是组长
                };
                _MainServer.AddData(Main);
                return new WebResponseContent { Status = true, Data = sys };
            }
            catch (Exception ex)
@@ -582,6 +607,13 @@
                {
                    return new WebResponseContent { Status = false, Message = "没找到该用户" };
                }
                //查找Dt_MaintenanceTeam中的数据
                var team = _MainServer.QueryData(x => x.UserAccount == sys.UserName).FirstOrDefault();
                if (team == null)
                {
                    return new WebResponseContent { Status = false, Message = "没找到该用户的维护组信息" };
                }
                // 2. 检查账号是否修改,并判断是否重复//StringComparison.OrdinalIgnoreCase:表示忽略大小写进行比较,比如 "admin" 和 "ADMIN" 也认为是相等的
                if (!string.Equals(sys.UserName ,addUserDTO.username))
@@ -599,35 +631,75 @@
                sys.PhoneNo = addUserDTO.phoneno;
                sys.Role_Id = addUserDTO.roleid;
                sys.RoleName = addUserDTO.rolename;
                sys.Enable = addUserDTO.enable;
                //sys.CardNumber = addUserDTO.carnuber;
                sys.Userteam = addUserDTO.userteam;
                sys.Unit = addUserDTO.userunit;
                sys.Dept_Id = addUserDTO.dept_Id;
                //sys.Enable = addUserDTO.enable;
                sys.IsLeader = addUserDTO.IsLeader;//更新用户表的是否是组长
                //如果人脸识别添加了这里就注释掉
                sys.HeadImageUrl = addUserDTO.path;
                // 4. 查询人脸库分组 ID
                var faceGroupID = _faceServer.QueryData().Select(x => x.GroupID).FirstOrDefault();
                // 5. 判断是否需要更新人脸信息
                if (!string.Equals(sys.HeadImageUrl,addUserDTO.path)) // 有新图片才处理人脸注册
                {
                    var baiduResult = BaiDuFaceHelper.AddUser(new BDUserInfo
                    {
                        ImgPath = addUserDTO.path,
                        user_id = sys.UserName,
                        group_id = faceGroupID
                    });
                //if (!string.Equals(sys.HeadImageUrl,addUserDTO.path)) // 有新图片才处理人脸注册
                //{
                //    var baiduResult = BaiDuFaceHelper.AddUser(new BDUserInfo
                //    {
                //        ImgPath = addUserDTO.path,
                //        user_id = sys.UserName,
                //        group_id = faceGroupID
                //    });
                    // 6. 判断百度 API 是否成功
                    if (baiduResult == null || baiduResult.error_code != 0)
                    {
                        return new WebResponseContent { Status = false, Message = "人脸更新失败:" + baiduResult.error_msg };
                    }
                //    // 6. 判断百度 API 是否成功
                //    if (baiduResult == null || baiduResult.error_code != 0)
                //    {
                //        return new WebResponseContent { Status = false, Message = "人脸更新失败:" + baiduResult.error_msg };
                //    }
                    // 7. 更新人脸相关字段
                    sys.Log_id = baiduResult.log_id;
                    sys.HeadImageUrl = addUserDTO.path;
                    sys.Face_token = baiduResult.result.face_token;
                }
                //    // 7. 更新人脸相关字段
                //    sys.Log_id = baiduResult.log_id;
                //    sys.HeadImageUrl = addUserDTO.path;
                //    sys.Face_token = baiduResult.result.face_token;
                //}
                // 8. 更新数据库
                //更新Dt_Maintenance表中的数据和user表中修改的一样
                team.UserAccount = addUserDTO.username;//账号
                team.Roleid = addUserDTO.roleid;//更新权限
                team.IsLeader = addUserDTO.IsLeader;
                var existAuthority = userList.FirstOrDefault(a => a.UserName == addUserDTO.username);
                // 先缓存旧的 enable 值
                var oldEnable = sys.Enable;
                // 修改 enable
                sys.Enable = addUserDTO.enable;
                // 然后比较旧值和新值
                if (oldEnable != addUserDTO.enable)
                {
                    var authority = new Dt_AuthorizationRecord
                    {
                        Account = addUserDTO.username,
                        UserName = addUserDTO.usertruename,
                        UerUnit = addUserDTO.userunit,
                        UserTeam = addUserDTO.userteam,
                        EnableTime = addUserDTO.enable == 1 ? DateTime.Now : (DateTime?)null, //启用
                        DisableTime = addUserDTO.enable == 0 ? DateTime.Now : (DateTime?)null,//不启用
                    };
                    _AuthorizatRecServer.AddData(authority);
                }
                BaseDal.UpdateData(sys);
                _MainServer.UpdateData(team);
                return new WebResponseContent { Status = true, Data = sys };
            }
@@ -652,30 +724,32 @@
            {
                // 2. 查询人脸库分组 ID
                var faceGroupID = _faceServer.QueryData().Select(x => x.GroupID).FirstOrDefault();
                //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;
                //WIDESEAWCS_Common.DeleteUserImg deleteUserImg = new WIDESEAWCS_Common.DeleteUserImg();
                //deleteUserImg.group_id = faceGroupID;
                //deleteUserImg.user_id = account;
                string apiResult = BaiDuFaceHelper.DeleteUser(deleteUserImg);//只要给token和log_id
                //string apiResult = BaiDuFaceHelper.DeleteUser(deleteUserImg);//只要给token和log_id
                // 2. 解析返回结果,判断删除是否成功
                dynamic resultObj = JsonConvert.DeserializeObject(apiResult);
                if (resultObj.error_code == 0)
                {
                //// 2. 解析返回结果,判断删除是否成功
                //dynamic resultObj = JsonConvert.DeserializeObject(apiResult);
                //if (resultObj.error_code == 0)
                //{
                    // 百度删除成功后,删除数据库中的用户
                    var user = BaseDal.QueryData(x => x.UserName == account);
                    if (user != null)
                  var user = BaseDal.QueryData(x => x.UserName == account).FirstOrDefault();
                var main = _MainServer.QueryData(x => x.UserAccount == account).FirstOrDefault();
                if (user != null&&main!=null)
                    {
                        BaseDal.DeleteData(user);
                    }
                    _MainServer.DeleteData(main);
                }
                    return WebResponseContent.Instance.OK("用户删除成功");
                }
                else
                {
                    return WebResponseContent.Instance.Error("百度 API 删除失败:" + resultObj.error_msg);
                }
                //}
                //else
                //{
                //    return WebResponseContent.Instance.Error("百度 API 删除失败:" + resultObj.error_msg);
                //}
            }
            catch (Exception ex)
            {
@@ -848,5 +922,99 @@
                return new WebResponseContent { Status = false, Message="失败"};
            }
        }
        /// <summary>
        /// 表连接角色表,展示数据
        /// </summary>
        /// <returns></returns>
        public WebResponseContent YShowUserList(PaginationDTO pagination)
        {
            try
            {
                int totalCount = 0;
                var Role = _RoleServer.Db.Queryable<Sys_Role>();
                var query = Role.InnerJoin<Sys_User>((a, b) => a.RoleId == b.Role_Id);
                //搜索关键字
                if (!string.IsNullOrEmpty(pagination.searchKeyword))
                {
                    query = query.Where((a, b) =>
                    b.UserName.Contains(pagination.searchKeyword) ||
                    b.UserTrueName.Contains(pagination.searchKeyword) ||
                    b.PhoneNo.Contains(pagination.searchKeyword) ||
                    a.RoleName.Contains(pagination.searchKeyword));
                }
                //时间查询
                if (pagination.startDate.HasValue && pagination.endDate.HasValue)
                {
                    query = query.Where((a, b) => b.CreateDate >= pagination.startDate.Value && b.CreateDate <= pagination.endDate.Value);
                }
                //排序
                if (!string.IsNullOrEmpty(pagination.sortField))
                {
                    var isAcs = pagination.sortOrder?.ToLower() == "asc";
                    query = pagination.sortField.ToLower() switch
                    {
                        "CreateDate" => isAcs ? query.OrderBy((a, b) => b.CreateDate) : query.OrderByDescending((a, b) => b.CreateDate),
                        _ => query.OrderByDescending((a, b) => b.Creater) // 默认按创建时间降序
                    };
                }
                else
                {
                    query = query.OrderByDescending((a, b) => b.Creater);
                }
                var reslut = query.Select((a, b) => new
                {
                  b.User_Id,
                  b.UserName,
                  b.UserTrueName,
                  b.Unit,
                  b.Userteam,
                  b.Role_Id,
                  b.IsLeader,
                  //b.RoleName,
                  b.CardNumber,
                  b.PhoneNo,
                  b.UserPwd,
                  b.DeptName,
                  b.Dept_Id,
                  b.Email,
                  b.Enable,
                  b.Gender,
                  b.HeadImageUrl,
                  b.Address,
                  b.CreateDate,
                  b.Creater,
                  a.RoleName,
                }).ToPageList(pagination.pageIndex, pagination.pageSize, ref totalCount);
                return new WebResponseContent
                {
                    Status = true,
                    Data = new
                    {
                        totalCount = totalCount,
                        PageIndex = pagination.pageIndex,
                        PageSize = pagination.pageSize,
                        Items = reslut
                    }
                };
            }
            catch (Exception ex)
            {
                return new WebResponseContent { Status = false, Message = ex.Message };
                }
            }
    }
}