using Dapper; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Threading.Tasks; using VueWebCoreApi.DLL.BLL; using VueWebCoreApi.Models; using VueWebCoreApi.Models.RolePermission; using VueWebCoreApi.Tools; namespace VueWebCoreApi.DLL.DAL { public class LoginDAL { public static DataTable dt; //定义全局变量dt public static bool res; //定义全局变量dt public static ToMessage mes = new ToMessage(); //定义全局返回信息对象 public static SqlParameter[] parameters; //定义全局SqlParameter参数数组 public static string fileip = AppSetting.GetAppSetting("FileIP"); //获取企业配置Enterprise private static readonly string Enterprise = AppSetting.GetAppSetting("Enterprise"); #region [登录查询] public static ToMessage LoginSearch(string usercode, string password) { string strProcName = ""; //定义局部sql变量 List listStr = new List(); //定义参数集合 try { //查询账号是否存在 strProcName = @"select U.id,U.usercode,U.username,U.password,U.storg_code,T.torg_name as storg_name,U.role_code,U.role_datapermissions,U.post_code,U.is_system_admin,U.status from TUser U left join TOrganization T on U.storg_code=T.torg_code where usercode =@usercode and password=@password"; //创建参数 listStr.Add(new SqlParameter("@usercode", usercode)); listStr.Add(new SqlParameter("@password", password)); parameters = listStr.ToArray(); listStr.Clear(); DataTable dt_ = DBHelper.GetTable(strProcName, parameters); if (dt_.Rows.Count <= 0) { mes.code = "300"; mes.Message = "账号密码不正确!"; mes.data = null; return mes; } if (dt_.Rows[0]["status"].ToString() == "N") { mes.code = "300"; mes.Message = "当前账号已停用!"; mes.data = null; return mes; } //判断账号是否系统管理员账号 if (dt_.Rows[0]["is_system_admin"].ToString() == "Y") { mes.code = "200"; mes.data = dt_; return mes; } //执行sql查询用户是否指定组织 if (dt_.Rows[0]["storg_code"].ToString() == "" || dt_.Rows[0]["storg_code"].ToString() == null) { mes.code = "300"; mes.Message = "当前用户未指定组织!"; mes.data = null; return mes; } //执行sql查询用户是否指定岗位 if (dt_.Rows[0]["post_code"].ToString() == "" || dt_.Rows[0]["post_code"].ToString() == null) { mes.code = "300"; mes.Message = "当前用户未指定岗位!"; mes.data = null; return mes; } //执行sql查询用户是否指定角色 if (dt_.Rows[0]["role_code"].ToString() == "" || dt_.Rows[0]["role_code"].ToString() == null) { mes.code = "300"; mes.Message = "当前用户未指定角色!"; mes.data = null; return mes; } mes.code = "200"; mes.data = dt_; return mes; } catch (Exception e) { mes.code = "300"; mes.Message = e.Message; mes.data = null; return mes; } } #endregion #region [写入登录记录表] public static ToMessage LoginBas(string usercode, string oper_type, string description, string type) { var sql = ""; var cont = 0; var dynamicParams = new DynamicParameters(); try { sql = @"insert into T_Bas_User_Operlog(usercode,oper_date,oper_type,description,origin) values(@usercode,@oper_date,@oper_type,@description,@origin)"; dynamicParams.Add("@usercode", usercode); dynamicParams.Add("@oper_date", DateTime.Now.ToString()); dynamicParams.Add("@oper_type", oper_type); dynamicParams.Add("@description", description); dynamicParams.Add("@origin", type); cont = DapperHelper.SQL(sql, dynamicParams); if (cont > 0) { mes.code = "200"; mes.count = 0; mes.Message = "记录成功!"; mes.data = null; } else { mes.code = "300"; mes.count = 0; mes.Message = "记录失败!"; mes.data = null; } } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; } return mes; } #endregion #region[查询菜单功能] public static ToMessage LoginMenu(string usercode, string usertype, User us) { string sql = ""; string strProcName = ""; string result = ""; //定义局部sql变量 var dynamicParams = new DynamicParameters(); List listStr = new List(); //定义参数集合 try { listStr.Clear(); //查询所有的组织数据 sql = @"select * from TOrganization where status='Y' and parent_id<>'0'"; var dattorg = DapperHelper.selecttable(sql); if (us.is_system_admin == "Y") //管理员账号 { //获取权限关联表数据(管理员账号) sql = @"select jsondate from TRole TR inner join TAuthority TA on TR.rolecode=TA.rolecode where TR.identifying='0' and TA.type=@usertype"; dynamicParams.Add("@usertype", usertype); var data = DapperHelper.selectdata(sql, dynamicParams); if (data.Rows.Count > 0) { List items = JsonConvert.DeserializeObject>(data.Rows[0]["jsondate"].ToString()); // 获取所有的menucode List menuCodes = items.Select(item => item.MenuCode).ToList(); string codeString = string.Join(",", menuCodes); //查询菜单数据 sql = @"select menucode,menuname,menu_seq,imgurl,'0' as flag,parent_id,is_show from TMenu where is_show='Y' and Type=@usertype order by menu_seq"; dynamicParams.Add("@usertype", usertype); var data0 = DapperHelper.selectdata(sql, dynamicParams); if (data0.Rows.Count > 0) { string[] codes = codeString.Split(','); // 使用lambda表达式查询对应父级编码的父级菜单数据添加到List List parentMenus = data0.AsEnumerable() .Where(row => codes.Contains(row.Field("menucode"))) .Select(row => row.Field("parent_id")) .Distinct() .Select(parentMenuCode => data0.AsEnumerable() .FirstOrDefault(row => row.Field("menucode") == parentMenuCode)) .Where(row => row != null).Select(row => new TreeOne { code = row.Field("menucode"), name = row.Field("menuname"), flag = "0", imgurl = fileip + row.Field("imgurl"), is_show= row.Field("is_show") }).ToList(); //.CopyToDataTable(); //添加子菜单数据 for (int i = 0; i < parentMenus.Count; i++) { parentMenus[i].children = data0.AsEnumerable().Where(row => codes.Contains(row.Field("menucode")) && row.Field("parent_id") == parentMenus[i].code) .Select(row => new TreeTwo { code = row.Field("menucode"), name = row.Field("menuname"), flag = "0", imgurl = fileip + row.Field("imgurl"), buttoncode = items.Where(m => m.MenuCode == row.Field("menucode")).Select(m => m.ButtonCode).FirstOrDefault(), datacode = items.Where(m => m.MenuCode == row.Field("menucode")).Select(m => m.DataCode).FirstOrDefault(), is_show = row.Field("is_show") }).ToList(); } mes.code = "200"; mes.Message = "查询成功!"; mes.data = parentMenus; return mes; } else { mes.code = "300"; mes.Message = "系统未设置菜单资料,请联系管理员!"; mes.data = null; return mes; } } else { mes.code = "300"; mes.Message = "当前账号对应角色未设置功能权限!"; mes.data = null; return mes; } } else { string[] rolecode = Array.ConvertAll(us.role_code.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries), s => s.ToString()); //string分割转string[] //获取当前用户所属岗位对应的角色关联表数据 sql = @"select TD.jsondate from TRole R inner join TAuthority TD on R.rolecode=TD.rolecode where R.rolecode in @rolecode and TD.type=@usertype"; dynamicParams.Add("@rolecode", rolecode); dynamicParams.Add("@usertype", usertype); var data = DapperHelper.selectdata(sql, dynamicParams); if (data.Rows.Count > 0) { List item = new List(); for (int i = 0; i < data.Rows.Count; i++) { var aa = JsonConvert.DeserializeObject>(data.Rows[i]["jsondate"].ToString()); for (int j = 0; j < aa.Count; j++) { item.Add(aa[j]); } } // 取并集 var items = item.GroupBy(m => m.MenuCode).Select(g => new MenuItem { MenuCode = g.Key, ButtonCode = string.Join(",", string.Join(",", g.Select(m => m.ButtonCode)).Split(',').Distinct()), DataCode = string.Join(",", string.Join(",", g.Select(m => m.DataCode=="LEVEL"?us.storg_code:m.DataCode == "PERSON"?us.usercode:m.DataCode)).Split(',') .Distinct().Contains("ALL") ? "ALL": string.Join(",", string.Join(",", g.Select(m => m.DataCode == "LEVEL" ? us.storg_code : m.DataCode == "PERSON" ? us.usercode : m.DataCode)).Split(',').Distinct())) //DataCode = string.Join(",", string.Join(",", g.Select(m => m.DataCode)).Split(',').Distinct().Contains("ALL") ? "ALL" : (string.Join(",", string.Join(",", g.Select(m => m.DataCode)).Split(',').Distinct().Contains("DEPT") ? "DEPT" : (string.Join(",", string.Join(",", g.Select(m => m.DataCode)).Split(',').Distinct().Contains("PERSON") ? "PERSON" : ""))))) }).ToList(); // 获取所有的menucode List menuCodes = items.Select(item => item.MenuCode).ToList(); string codeString = string.Join(",", menuCodes); //查询菜单数据 sql = @"select menucode,menuname,menu_seq,imgurl,'0' as flag,parent_id,is_show from TMenu where is_show='Y' and Type=@usertype order by CAST(menu_seq as int) ASC"; dynamicParams.Add("@usertype", usertype); var data0 = DapperHelper.selectdata(sql, dynamicParams); if (data0.Rows.Count > 0) { string[] codes = codeString.Split(','); // 使用lambda表达式查询对应父级编码的父级菜单数据添加到List List parentMenus = data0.AsEnumerable() .Where(row => codes.Contains(row.Field("menucode"))) .Select(row => row.Field("parent_id")) .Distinct() .Select(parentMenuCode => data0.AsEnumerable() .FirstOrDefault(row => row.Field("menucode") == parentMenuCode)) .Where(row => row != null).Select(row => new TreeOne { code = row.Field("menucode"), name = row.Field("menuname"), flag = "0", imgurl = fileip + row.Field("imgurl"), is_show = row.Field("is_show") }).ToList(); //.CopyToDataTable(); //添加子菜单数据 for (int i = 0; i < parentMenus.Count; i++) { parentMenus[i].children = data0.AsEnumerable().Where(row => codes.Contains(row.Field("menucode")) && row.Field("parent_id") == parentMenus[i].code) .Select(row => new TreeTwo { code = row.Field("menucode"), name = row.Field("menuname"), flag = "0", imgurl = fileip + row.Field("imgurl"), buttoncode = items.Where(m => m.MenuCode == row.Field("menucode")).Select(m => m.ButtonCode).FirstOrDefault(), datacode = items.Where(m => m.MenuCode == row.Field("menucode")).Select(m => m.DataCode).FirstOrDefault(), is_show = row.Field("is_show") }).ToList(); } mes.code = "200"; mes.Message = "查询成功!"; mes.data = parentMenus; return mes; } else { mes.code = "300"; mes.Message = "系统未设置菜单资料,请联系管理员!"; mes.data = null; return mes; } } else { mes.code = "300"; mes.Message = "当前账号对应角色未设置功能权限!"; mes.data = null; return mes; } } } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; } return mes; } #endregion #region[修改密码] public static ToMessage UpdateUserPassword(User us, string password, string newpassword) { var sql = ""; List list = new List(); var dynamicParams = new DynamicParameters(); sql = @"select * from [dbo].[TUser] where usercode=@usercode and password=@password"; dynamicParams.Add("@usercode", us.usercode); dynamicParams.Add("@password", password); var data = DapperHelper.selectdata(sql, dynamicParams); if (data.Rows.Count <= 0) { mes.code = "300"; mes.count = 0; mes.Message = "输入的密码不正确,请重新输入!"; mes.data = null; } else { //修改密码 sql = @"update [dbo].[TUser] set password=@newpassword where usercode=@usercode and password=@password"; list.Add(new { str = sql, parm = new { usercode = us.usercode, password = password, newpassword = newpassword } }); bool aa = DapperHelper.DoTransaction(list); if (aa) { //写入日志 LogHelper.DbOperateLog(us.usercode, "修改", "修改了密码", us.usertype); mes.code = "200"; mes.count = 0; mes.Message = "修改密码成功!"; mes.data = null; } else { mes.code = "300"; mes.count = 0; mes.Message = "修改密码失败!"; mes.data = null; } } return mes; } #endregion #region[登出] public static ToMessage LoginOut(User us) { RedisHelper redis = new RedisHelper(); try { //删除redis redis.Remove(Enterprise + "LoginUserID" + us.usertype + us.usercode, 0); //写入日志 LogHelper.DbOperateLog(us.usercode, "退出", "退出了系统", us.usertype); mes.code = "200"; mes.count = 0; mes.Message = "登出成功!"; mes.data = null; } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; } return mes; } #endregion #region[密码重置] public static ToMessage ResettUserPassword(string usercode, string username, string usertype) { var sql = ""; List list = new List(); var dynamicParams = new DynamicParameters(); //重置密码 sql = @"update [dbo].[TUser] set password=@newpassword where usercode=@usercode and username=@username"; list.Add(new { str = sql, parm = new { usercode = usercode, username = username, newpassword = "123456" } }); //写入操作记录表 LogHelper.DbOperateLog(usercode, "重置", "重置了密码", usertype); bool aa = DapperHelper.DoTransaction(list); if (aa) { mes.code = "200"; mes.count = 0; mes.Message = "重置密码成功!"; mes.data = null; } else { mes.code = "300"; mes.count = 0; mes.Message = "重置密码失败!"; mes.data = null; } return mes; } #endregion #region[App登录查询安灯呼叫信息] public static ToMessage LoginAppAnDonMessage(string rid, string usercode, string username, string usertype, string stu_torgcode, string stu_torgtypecode) { var sql = ""; string search = ""; var dynamicParams = new DynamicParameters(); try { switch (stu_torgtypecode) { case "": search += "and T.description=@description "; dynamicParams.Add("@description", "W"); break; case "D": search += "and child.org_code=@stu_torgcode "; dynamicParams.Add("@stu_torgcode", stu_torgcode); break; case "W": search += "and T.org_code=@stu_torgcode "; dynamicParams.Add("@stu_torgcode", stu_torgcode); break; default: break; } sql = @"select B.eqp_code,E.name as eqp_name,B.wkshp_code,T.org_name as wkshp_name, A.type as typecode,D.name as typename,B.start_user,B.start_date from TAnDnMessagePush A inner join TAnDon_Task_Info B on A.m_id=B.id left join TEqpInfo E on B.eqp_code=E.code left join TOrganization T on B.wkshp_code=T.org_code left join TAnDonType D on A.type=d.code left join TUser U on A.resp_user=U.usercode left join TOrganization as child on T.parent_id=child.id where A.resp_user=@usercode and B.status='START' and U.rid=@rid " + search; dynamicParams.Add("@usercode", usercode); dynamicParams.Add("@rid", rid); var data = DapperHelper.selectdata(sql, dynamicParams); mes.code = "200"; mes.count = 0; mes.Message = "查询成功!"; mes.data = data; } catch (Exception e) { mes.code = "300"; mes.count = 0; mes.Message = e.Message; mes.data = null; } return mes; } #endregion } }