SysUserApp.cs 4.53 KB
using Infrastructure;
using System;
using System.Collections.Generic;
using System.Linq;
using WebRepository;

namespace WebApp
{
    public class SysUserApp : WebApp<SysUser>
    {
        private SysRevelanceApp _revelanceApp;

        private IAuth _auth;

        public SysUserApp(IUnitWork unitWork, IRepository<SysUser> repository,
            SysRevelanceApp app, IAuth auth) : base(unitWork, repository)
        {
            _revelanceApp = app;
            _auth = auth;
        }

        public SysUserApp SetLoginInfo(LoginInfo loginInfo)
        {
            Repository._loginInfo = loginInfo;
            _revelanceApp = _revelanceApp.SetLoginInfo(Repository._loginInfo);
            return this;
        }

        /// <summary>
        /// 加载当前登录用户可访问的一个部门及子部门全部用户
        /// </summary>
        public TableData Load(PageReq request)
        {
            var users = Repository.Find(u => u.Account != "System")
                   .OrderBy(u => u.Name)
                   .Skip((request.page - 1) * request.limit)
                   .Take(request.limit);

            var records = Repository.GetCount(u => u.Account != "System");

            var userviews = users.MapToList<SysUserView>(); 
            return new TableData
            {
                count = records,
                data = userviews,
            };
        }

        public void Add(SysUserView view)
        {
            SysUser user = view;

            if (Repository.IsExist(u => u.Account == view.Account))
            {
                throw new Exception("账号已存在");
            }
            if (Repository.IsExist(u => u.Name == view.Name))
            {
                throw new Exception("用户名已存在");
            }

            user.Password = Encryption.Encrypt("123456"); //初始密码加密
            user.IsAssignRole = false;
            user.IsAssignModule = false;
            Repository.Add(user);
            view.Id = user.Id;   //要把保存后的ID存入view
            UnitWork.Save();
        }

        public void Update(SysUserView view)
        {
            SysUser user = view;
            SysUser sysUser = Repository.FindSingle(u => u.Id == view.Id);
            sysUser.Account = user.Account;
            sysUser.Name = user.Name;
            sysUser.Sex = user.Sex;
            sysUser.Status = user.Status;
            sysUser.Expirydate = user.Expirydate;
            sysUser.UpdateBy = Repository._loginInfo.Account;
            sysUser.UpdateTime = DateTime.Now;
            Repository.Update(sysUser);
            //Repository.Update(u => u.Id == view.Id, u => new SysUser
            //{
            //    Account = user.Account,
            //    Name = user.Name,
            //    Sex = user.Sex,
            //    Status = user.Status,
            //    Expirydate = user.Expirydate,
            //    UpdateBy = Repository._loginInfo.Account,
            //    UpdateTime = DateTime.Now
            //});
        }

        /// <summary>
        /// 加载用户的所有机构
        /// </summary>
        public IEnumerable<SysDept> LoadByUser(int userId)
        {
            var result = from userorg in UnitWork.Find<SysRelevance>(null)
                         join org in UnitWork.Find<SysDept>(null) on userorg.SecondId equals org.Id
                         where userorg.FirstId == userId && userorg.RelKey == Define.USERORG
                         select org;
            return result;
        }

        //修改个人密码
        public void ChangeUserPassword(string OldPassword, string Password, SysUser CurrentUser)
        {
            SysUser user = CurrentUser;

            if (user.Password.Equals(Encryption.Encrypt(OldPassword)))
            {
                if (OldPassword == Password)
                {
                    throw new Exception("新密码不应与旧密码相同");
                }
                else
                {
                    user.Password = Encryption.Encrypt(Password);
                    Repository.Update(user);
                }

            }
            else
            {
                throw new Exception("旧密码不正确");
            }
        }

        //重设用户密码
        public void ResetPassword(SysUser CurrentUser)
        {
            SysUser user = CurrentUser;

            user.Password = Encryption.Encrypt("123456");
            Repository.Update(user);
        }

        public SysUser GetByAccount(string account)
        {
            return Repository.FindSingle(u => u.Account == account);
        }
    }
}