using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Text;
using System.Threading.Tasks;
using Dm;
using Model.ModelDto.SysDto;
using Model.ModelVm.SysVm;
using NetTaste;
using SqlSugar;
using Utility.Tools;
using WMS.Entity.Context;
using WMS.Entity.SysEntity;
using WMS.IDAL.ISysInterface;

namespace WMS.DAL.SystemService
{
    public class UserInforRepository : BaseRepository<SysUserInfor>, IUserInforRepository
    {
        private static readonly SqlSugarScope Db = DataContext.Db;
        public UserInforRepository() : base(Db)
        {
        }
        /// <summary>
        /// 测试方法
        /// </summary>
        /// <returns></returns>
        public SysUserInfor ceshi()
        {
            var dt = Db.Ado.GetDataTable("select Id,UserCode,UserName,UserPassword from WmsSysUser");
            var a = dt.Rows[0][0];
            var b = dt.Rows[0][1];
            //new List<SugarParameter>(){
            //    new SugarParameter("@id", 1),
            //    new SugarParameter("@name", "% %") //执行sql语句
            //}
            var data = Db.Queryable<SysUserInfor>().First();
            return data;
        }

        /// <summary>
        /// 获取用户角色信息
        /// </summary>
        /// <returns></returns>
        public List<UserInfoDto> GetUserRoleList(string str)
        {
            //string str = "select user1.Id Id,user1.UserNo UserNo,user1.UserName UserName,user1.RealName RealName,user1.PassWord PassWord,user1.JobNo JobNo,user1.Status Status,user1.Sex Sex,user1.Nationality Nationality,user1.Paper Paper,user1.Phone Phone,user1.Email Email,user1.Addres Addres,user1.Demo Demo,role.RoleName from SysUserInfor user1 left join SysRoles role on user1.RoleNo = role.RoleNo where user1.IsDel = '0'";
            List<UserInfoDto> userInfoDtos = Db.Ado.SqlQuery<UserInfoDto>(str);
            return userInfoDtos;
        }

        /// <summary>
        /// 根据编号获取用户信息列表
        /// </summary>
        /// <param name="str">str</param>
        /// <returns></returns>
        public List<SysUserInfor> GetUserInfoByNo(string str)
        {
            List<SysUserInfor> userlist = Db.Ado.SqlQuery<SysUserInfor>(str);
            return userlist;
        }

        /// <summary>
        /// 新增用户信息
        /// </summary>
        /// <param name="userinfo">用户实体模型</param>
        /// <returns></returns>
        public async Task<int> InsertUserInfo(SysUserInfor userinfo)
        {
            string str = "insert into SysUserInfor values(@userno, @username, @realname, @password, @jobno, @status, @sex, @nationality, @paper, @phone, @email, @addres, @logintime, @setpasswordtime, @roleno, @departmentno, @demo, @isdel, @createtime, @createuser, null, null)";
            int i = await Db.Ado.ExecuteCommandAsync(str, new
            {
                userno = userinfo.UserNo, //用户
                username = userinfo.UserName, //登录名称
                realname = userinfo.RealName, //真实姓名
                password = Md5Tools.CalcMd5("boxline"), //密码(默认密码boxline)
                jobno = userinfo.JobNo, //职工号
                status = userinfo.Status, //状态
                sex = userinfo.Sex, //性别
                nationality = userinfo.Nationality, //国籍
                paper = userinfo.Paper, //证件号
                phone = userinfo.Phone, //手机号
                email = userinfo.Email, //邮箱
                addres = userinfo.Addres, //地址
                logintime = userinfo.LoginTime, //最后登录时间
                setpasswordtime = Db.GetDate(), //密码设置时间
                roleno = userinfo.RoleNo, //角色号
                departmentno = userinfo.DepartmentNo, //部门号
                demo = userinfo.Demo, //备注
                isdel = "0", //是否删除
                createtime = Db.GetDate(), //创建时间
                createuser = userinfo.CreateUser //创建人
            });
            return i;
        }

        /// <summary>
        /// 删除\批删用户信息
        /// </summary>
        /// <param name="userinfo">用户实体模型</param>
        /// <returns></returns>
        public async Task<int> DeleteUserinfo(SysUserInfor userinfo)
        {
            string str = "update SysUserInfor set IsDel = @isdel, UpdateTime = @updatetime, UpdateUser = @updateuser where Id = @id";
            //删除
            int i = await Db.Ado.ExecuteCommandAsync(str, new
            {
                isdel = "1", //是否删除
                updatetime = Db.GetDate(), //更改时间
                updateuser = userinfo.UpdateUser, //更改人
                id = userinfo.Id //id
            });
            //返回数据
            return i;
        }

        /// <summary>
        /// 编辑用户信息
        /// </summary>
        /// <param name="userinfo"></param>
        /// <returns></returns>
        public async Task<int> UpdateUserinfo(SysUserInfor userinfo)
        {
            string str = "update SysUserInfor set UserName = @username, RealName = @realname, JobNo = @jobno, Status = @status, Sex = @sex, Nationality = @nationality, Paper = @paper, Phone = @phone, Email = @email, Addres = @addres, RoleNo = @roleno, DepartmentNo = @departmentno, Demo = @demo, UpdateTime = @updatetime, UpdateUser = @updateuser where Id = @id";
            //编辑
            int i = await Db.Ado.ExecuteCommandAsync(str, new
            {
                username = userinfo.UserName, //登录名称
                realname = userinfo.RealName, //真实姓名
                jobno = userinfo.JobNo, //职工号
                status = userinfo.Status, //状态
                sex = userinfo.Sex, //性别
                nationality = userinfo.Nationality, //国籍
                paper = userinfo.Paper, //证件号
                phone = userinfo.Phone, //手机号
                email = userinfo.Email, //邮箱
                addres = userinfo.Addres, //地址
                roleno = userinfo.RoleNo, //角色号
                departmentno = userinfo.DepartmentNo, //部门号
                demo = userinfo.Demo, //备注
                updatetime = Db.GetDate(), //更改时间
                updateuser = userinfo.UpdateUser, //更改人
                id = userinfo.Id //id
            });
            return i;
        }

        /// <summary>
        /// 根据id获取用户信息列表
        /// </summary>
        /// <param name="userids"></param>
        /// <returns></returns>
        public SysUserInfor GetUserInfoById(int userids)
        {
            string str = "select * from SysUserInfor where Id = @id and IsDel = @isdel";
            SysUserInfor userlist = Db.Ado.SqlQuerySingle<SysUserInfor>(str, new
            {
                id = userids, //用户id
                isdel = "0" //是否删除
            });
            return userlist;
        }

        /// <summary>
        /// 修改用户密码
        /// </summary>
        /// <param name="pwdOld">原密码</param>
        /// <param name="pwdNew">新密码</param>
        /// <param name="pwdNewTwo">确认密码</param>
        /// <param name="userId">用户id</param>
        /// <returns></returns>
        public async Task<int> UptUserPassWord(string pwdOld, string pwdNew, string pwdNewTwo, int userId)
        {
            string str = "update SysUserInfor set PassWord = @password,UpdateUser = @updateuser,UpdateTime = @updatetime,SetPasswordTime = @setPasswordTime where Id = @id";
            int i = await Db.Ado.ExecuteCommandAsync(str, new
            {
                password = pwdNew, //新密码
                updateuser = userId, //更改人
                updatetime = Db.GetDate(), //更改时间
                setPasswordTime= Db.GetDate(),//密码设置时间
                id = userId //id
            });
            return i;
        }

        /// <summary>
        /// 最后登陆时间
        /// </summary>
        /// <param name="uid"></param>
        /// <returns></returns>
        public async Task<int> UptUserLoginTime(int uid)
        {
            string str = "Update SysUserInfor set LoginTime = @logintime where Id = @id";
            int i = await Db.Ado.ExecuteCommandAsync(str, new
            {
                logintime = Db.GetDate(), //最后登录时间
                id = uid //用户id
            });
            return i;
        }
    }
}