using Microsoft.EntityFrameworkCore; using Ropin.Inspection.Model; using Ropin.Inspection.Model.Entities; using Ropin.Inspection.Model.SearchModel; using Ropin.Inspection.Model.ViewModel; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Ropin.Inspection.Repository { public class TsysUserRepository : RepositoryBase, ITsysUserRepository { public TsysUserRepository(InspectionDbContext dbContext) : base(dbContext) { } public void CheckUser(TsysUserCreateViewModel user) { if (DbContext.TSYS_User.Where(i => i.C_Mobile == user.C_Mobile).Any()) throw new Exception("用户手机号已存在数据库中"); if (DbContext.TSYS_User.Where(i => null != i.C_IDNum && i.C_IDNum == user.C_IDNum).Any()) throw new Exception("用户身份证号已存在数据库中"); } public TSYS_User GetUser(TsysUserSearchModel searchModel) { return DbContext.Set().SingleOrDefault(user => user.C_UserID == searchModel.C_UserID || user.C_WechatID == searchModel.WxOpenId); } public async Task LoginByAsync(LoginModel loginModel) { return await DbContext.Set().FirstOrDefaultAsync(user => user.C_Mobile == loginModel.Mobile && user.C_Password == loginModel.Password.ToLower()); } //public async Task GetUserAsync(Guid userId) //{ // return await DbContext.Set().SingleOrDefaultAsync(user => user.C_UserID == userId); //} public Task> GetByStoreCodeAsync(string storeCode) { MySqlConnector.MySqlParameter[] parameters = new[] { new MySqlConnector.MySqlParameter("storeCode", storeCode) }; string sql = @"SELECT B.* FROM TPNT_StoreOrg A INNER JOIN TSYS_User B ON A.C_OrgCode = B.C_OrgCode WHERE A.C_StoreCode = @storeCode "; var contentlist = EntityFrameworkCoreExtensions.GetList(DbContext.Database, sql, parameters); return Task.FromResult(contentlist); } public Task> GetByRecordItemCodeAsync(string itemCode) { MySqlConnector.MySqlParameter[] parameters = new[] { new MySqlConnector.MySqlParameter("itemCode", itemCode) }; string sql = @"SELECT E.* FROM TISP_RecordItem A INNER JOIN TISP_Record B ON B.C_ID = A.C_RecordCode INNER JOIN TISP_Spot C ON C.C_Code = B.C_SpotCode INNER JOIN TPNT_StoreOrg D ON D.C_StoreCode = C.C_StoreCode INNER JOIN TSYS_User E ON D.C_OrgCode = E.C_OrgCode WHERE A.C_ID = @itemCode "; var contentlist = EntityFrameworkCoreExtensions.GetList(DbContext.Database, sql, parameters); return Task.FromResult(contentlist); } public Task> GetByNameAsync(TsysUserSearchByNameModel searchModel) { //var v = EntityFrameworkCoreExtensions.GetList(DbContext.Database, "Select * from V_PRD_Product_Info", null); MySqlConnector.MySqlParameter[] parameters = new[] { new MySqlConnector.MySqlParameter("Mobile", searchModel.C_Mobile), new MySqlConnector.MySqlParameter("Name", searchModel.C_Name), new MySqlConnector.MySqlParameter("OrganizeCode", searchModel.G_OrganizeCode.ToString()), new MySqlConnector.MySqlParameter("Status", searchModel.C_Status), new MySqlConnector.MySqlParameter("UserId", searchModel.G_UserId?.ToString()) }; string sql = @"SELECT A.*,C.C_Code AS RoleId, C.C_Name AS RoleName,D.C_Name AS OrgName,D.C_SName AS OrgSName,D.C_LName AS OrgLName,D.C_Type From TSYS_User A LEFT JOIN TSYS_UserRole B ON A.C_UserID = B.C_UserCode LEFT JOIN TSYS_Role C ON C.C_Code = B.C_RoleCode INNER JOIN TSYS_Org D ON D.C_Code = A.C_OrgCode ";// WHERE A.C_Status = '1' AND C.C_Status = '1' AND D.C_Status = '1' if (!string.IsNullOrEmpty(searchModel.C_Status)) { sql += " WHERE A.C_Status = @Status AND C.C_Status = '1' AND D.C_Status = '1' "; } if (!string.IsNullOrEmpty(searchModel.C_Mobile)) { sql += " AND A.C_Mobile LIKE '%"+ searchModel.C_Mobile + "%' "; } if (!string.IsNullOrEmpty(searchModel.C_Name)) { sql += " AND A.C_Name LIKE '%"+ searchModel.C_Name + "%' "; } if (Guid.Empty != searchModel.G_OrganizeCode) { sql += " AND D.C_Code =@OrganizeCode "; } if (Guid.Empty != searchModel.G_UserId && null != searchModel.G_UserId) { sql += " AND A.C_UserID =@UserId "; } //if (searchModel.Start != Convert.ToDateTime("0001-01-01 00:00:00") && searchModel.End != Convert.ToDateTime("0001-01-01 00:00:00")) //{ // sql += " AND D.D_CreateOn between @start and @end"; //} sql += " ORDER BY A.I_Sort ASC "; //IEnumerable recordItemlist = EntityFrameworkCoreExtensions.GetList2(DbContext.Database, sql, parameters); var contentlist = EntityFrameworkCoreExtensions.GetList(DbContext.Database, sql, parameters); if (null == contentlist || contentlist.First() == null) { PageData contentlistDetail = null; return Task.FromResult(contentlistDetail); } var q = from b in contentlist group b by b.C_UserID into g select new TsysUserDetailWithOrgRoleViewModel { C_UserID = g.First().C_UserID, C_LicenseCode = g.First().C_LicenseCode, C_Post = g.First().C_Post, C_UserName = g.First().C_UserName, C_WechatID = g.First().C_WechatID, C_ProgramID = g.First().C_ProgramID, C_Name = g.First().C_Name, I_Render = g.First().I_Render, C_IDNum = g.First().C_IDNum, C_OrgCode = g.First().C_OrgCode, C_ImagePath = g.First().C_ImagePath, D_BirthDay = g.First().D_BirthDay, C_Address = g.First().C_Address, I_Sort = g.First().I_Sort, C_Mobile = g.First().C_Mobile, C_Phone = g.First().C_Phone, C_Email = g.First().C_Email, C_Remark = g.First().C_Remark, C_Status = g.First().C_Status, OrgName = g.First().OrgName, OrgSName = g.First().OrgSName, OrgLName = g.First().OrgLName, C_Type = g.First().C_Type, Roles = from d in g group d by d.RoleId into f where !f.First().RoleId.Equals(Guid.Empty) select new RoleDto { RoleId = f.First().RoleId, RoleName = f.First().RoleName, } }; PageData pageData = new PageData { Totals = q.ToList().Count, Rows = searchModel.IsPagination ? q.Skip((searchModel.PageIndex - 1) * searchModel.PageSize).Take(searchModel.PageSize).ToList() : q.ToList() }; return Task.FromResult(pageData); } public Task GetUserDetailByAsync(LoginModel loginModel) { MySqlConnector.MySqlParameter[] parameters = new[] { new MySqlConnector.MySqlParameter("Mobile", loginModel.Mobile), new MySqlConnector.MySqlParameter("Password", loginModel.Password) }; string sql = @"SELECT A.*,GROUP_CONCAT(C.C_Name SEPARATOR ',') as RoleNames,GROUP_CONCAT(C.C_Code SEPARATOR ',') as RoleIds ,cast(G.C_Code as char) AS LicenseTypeCode, G.C_Name AS LicenseTypeName From TSYS_User A LEFT JOIN TSYS_UserRole B ON A.C_UserID = B.C_UserCode LEFT JOIN TSYS_Role C ON C.C_Code = B.C_RoleCode LEFT JOIN TSYS_License F ON F.C_Code = A.C_LicenseCode LEFT JOIN TSYS_LicenseType G ON G.C_Code = F.C_TypeCode WHERE A.C_Mobile = @Mobile AND A.C_Password = @Password GROUP BY A.C_UserID "; sql = @"SELECT A.*,GROUP_CONCAT(C.C_Name SEPARATOR ',') as RoleNames,GROUP_CONCAT(C.C_Code SEPARATOR ',') as RoleIds ,cast(G.C_Code as char) AS LicenseTypeCode, G.C_Name AS LicenseTypeName ,H.C_Type AS OrgTypeCode,H.C_Name AS OrgTypeName From TSYS_User A LEFT JOIN TSYS_UserRole B ON A.C_UserID = B.C_UserCode LEFT JOIN TSYS_Role C ON C.C_Code = B.C_RoleCode LEFT JOIN TSYS_License F ON F.C_Code = A.C_LicenseCode LEFT JOIN TSYS_LicenseType G ON G.C_Code = F.C_TypeCode INNER JOIN TSYS_Org H ON H.C_Code = A.C_OrgCode WHERE A.C_Mobile = @Mobile AND A.C_Password = @Password GROUP BY A.C_UserID"; // sql = @"SELECT A.C_UserID,A.C_LicenseCode,A.C_Post,A.C_UserName,A.C_WechatID,A.C_ProgramID,A.C_Name,A.I_Render,A.C_IDNum,A.C_OrgCode,A.C_ImagePath,A.D_Birthday,A.C_Address,A.C_Mobile,A.C_Phone,A.C_Email,A.C_Remark, //B.C_Name AS LicenseName,B.D_EndDate AS LicenseEndDate, //C.C_Name AS LicenseTypeName, //E.C_Code AS PrivCode, //E.C_ParentCode AS PrivParentCode, //E.C_Module AS PrivModule, //E.C_Type AS PrivType, //E.C_Name AS PrivName, //E.I_Sort AS Privort, //E.C_ImageUrl AS PrivImageUrl, //E.C_PageUrl AS PrivPageUrl, //E.C_Remark AS PrivRemark //FROM TSYS_User A //LEFT JOIN TSYS_License B ON B.C_Code = A.C_LicenseCode //LEFT JOIN TSYS_LicenseType C ON C.C_Code = B.C_TypeCode //LEFT JOIN TSYS_LicenseTypePriv D ON D.C_LicenseTypeCode = C.C_Code //LEFT JOIN TSYS_Priv E ON E.C_Code = D.C_PrivilegeCode //LEFT JOIN TSYS_Org F ON F.C_Code = A.C_OrgCode //WHERE A.C_Mobile = '13636678098' AND A.C_Password = 'e10adc3949ba59abbe56e057f20f883e' //AND A.C_Status = '1' AND B.C_Status = '1' AND C.C_Status = '1' AND E.C_Status = '1' AND F.C_Status = '1'"; TsysUserDetailViewModel model = EntityFrameworkCoreExtensions.SqlQuery(DbContext.Database, sql, parameters).FirstOrDefault(); if(model == null) return Task.FromResult(model); //var query = from p in DbContext.TBDM_Prov // join pp in DbContext.TSYS_LicenseTypePriv // on p.C_Code equals pp.C_PrivilegeCode // where p.NickName == "" // select new // { // pp.Id, // pp.PlayerId, // PetName = pp.NickName, // PlayerName = p.NickName // }; // string userLicenseTypePrivSql = @"SELECT E.* //FROM TSYS_User A //JOIN TSYS_License B ON B.C_Code = A.C_LicenseCode // JOIN TSYS_LicenseType C ON C.C_Code = B.C_TypeCode // JOIN TSYS_LicenseTypePriv D ON D.C_LicenseTypeCode = C.C_Code // JOIN TSYS_Priv E ON E.C_Code = D.C_PrivilegeCode //WHERE A.C_Mobile = @Mobile AND A.C_Password = @Password //AND A.C_Status = '1' AND B.C_Status = '1' AND C.C_Status = '1' AND E.C_Status = '1' //"; // model.LicenseTypePrivS = EntityFrameworkCoreExtensions.GetList(DbContext.Database, userLicenseTypePrivSql, parameters); string userRoleTypePrivPrivSql = @"SELECT E.* From TSYS_User A LEFT JOIN TSYS_UserRole B ON A.C_UserID = B.C_UserCode LEFT JOIN TSYS_Role C ON C.C_Code = B.C_RoleCode LEFT JOIN TSYS_RolePriv D ON D.C_RoleCode = C.C_Code LEFT JOIN TSYS_Priv E ON E.C_Code = D.C_PrivilegeCode WHERE A.C_Mobile = @Mobile AND A.C_Password = @Password AND A.C_Status = '1' AND C.C_Status = '1' AND E.C_Status = '1' ORDER BY E.I_Sort ASC "; var roleTypePrivList = EntityFrameworkCoreExtensions.GetList(DbContext.Database, userRoleTypePrivPrivSql, parameters).ToList(); if (roleTypePrivList[0] == null) { return Task.FromResult(model); } if (!string.IsNullOrEmpty(loginModel.PrivModule)) { if (!roleTypePrivList.Any(t => t.C_Module == loginModel.PrivModule)) { return Task.FromResult(model); } } var treeList = new List(); var SysPriv = DbContext.TSYS_Priv.OrderBy(c => c.I_Sort).ToList(); foreach (var item in SysPriv.Where(m => m.C_ParentCode == null)) { List Part2Children = new List(); foreach (var item2 in SysPriv.Where(m => m.C_ParentCode == item.C_Code)) { List Part3Children = new List(); foreach (var item3 in SysPriv.Where(m => m.C_ParentCode == item2.C_Code)) { List Part4Children = new List(); foreach (var item4 in SysPriv.Where(m => m.C_ParentCode == item3.C_Code)) { var treeList4 = new List(); List v3 = RecursionRoleTypePriv(roleTypePrivList.Where(m => m.C_ParentCode != null).ToList(), new List(), item4.C_Code); var query4 = from p in SysPriv join pp in roleTypePrivList on p.C_Code equals pp.C_Code where p.C_Code == item4.C_Code select new { pp.C_Code }; if (v3.Count >0 || query4.Any()) treeList4.Add(new RoleTypePrivTree() { C_Code = item4.C_Code, C_Name = item4.C_Name, C_ParentCode = item4.C_ParentCode, C_Type = item4.C_Type, I_Sort = item4.I_Sort, C_Remark = item4.C_Remark, C_ImageUrl = item4.C_ImageUrl, C_PageUrl = item4.C_PageUrl, C_Module = item4.C_Module, Open = v3.Count > 0, Children = v3.Count == 0 ? null : v3 }); Part4Children.AddRange(treeList4); } var treeList3 = new List(); //List v2 = RecursionRoleTypePriv(roleTypePrivList.Where(m => m.C_ParentCode != null).ToList(), new List(), item3.C_Code); var query3 = from p in SysPriv join pp in roleTypePrivList on p.C_Code equals pp.C_Code where p.C_Code == item3.C_Code select new { pp.C_Code }; if (Part4Children.Count>0 || query3.Any()) treeList3.Add(new RoleTypePrivTree() { C_Code = item3.C_Code, C_Name = item3.C_Name, C_ParentCode = item3.C_ParentCode, C_Type = item3.C_Type, I_Sort = item3.I_Sort, C_Remark = item3.C_Remark, C_ImageUrl = item3.C_ImageUrl, C_PageUrl = item3.C_PageUrl, C_Module = item3.C_Module, Open = Part4Children.Count > 0, Children = Part4Children.Count == 0 ? null : Part4Children }); Part3Children.AddRange(treeList3); } var treeList2 = new List(); //List v = RecursionRoleTypePriv(roleTypePrivList.Where(m => m.C_ParentCode != null).ToList(), new List(), item2.C_Code); var query2 = from p in SysPriv join pp in roleTypePrivList on p.C_Code equals pp.C_Code where p.C_Code == item2.C_Code select new { pp.C_Code }; if (Part3Children.Count>0 || query2.Any()) treeList2.Add(new RoleTypePrivTree() { C_Code = item2.C_Code, C_Name = item2.C_Name, C_ParentCode = item2.C_ParentCode, C_Type = item2.C_Type, I_Sort = item2.I_Sort, C_Remark = item2.C_Remark, //LicenseTypeCode = item.LicenseTypeCode, //LicenseTypeName = item.LicenseTypeName, C_ImageUrl = item2.C_ImageUrl, C_PageUrl = item2.C_PageUrl, C_Module = item2.C_Module, Open = Part3Children.Count > 0, Children = Part3Children.Count == 0 ? null : Part3Children }); Part2Children.AddRange(treeList2); } //获得子级 //var children = RecursionRoleTypePriv(roleTypePrivList.Where(m => m.C_ParentCode != null).ToList(), new List(), item.C_Code); //if (children == null) //{ // foreach (var childItem in SysPriv.Where(m => m.C_ParentCode == item.C_Code)) // { // children = RecursionRoleTypePriv(roleTypePrivList.Where(m => m.C_ParentCode != null).ToList(), new List(), childItem.C_Code); // } //} var query = from p in SysPriv join pp in roleTypePrivList on p.C_Code equals pp.C_Code where p.C_Code == item.C_Code select new { pp.C_Code }; if (Part2Children.Count>0 || query.Any()) treeList.Add(new RoleTypePrivTree() { C_Code = item.C_Code, C_Name = item.C_Name, C_ParentCode = item.C_ParentCode, C_Type = item.C_Type, I_Sort = item.I_Sort, C_Remark = item.C_Remark, //LicenseTypeCode = item.LicenseTypeCode, //LicenseTypeName = item.LicenseTypeName, C_ImageUrl = item.C_ImageUrl, C_PageUrl = item.C_PageUrl, C_Module = item.C_Module, Open = Part2Children.Count > 0, Children = Part2Children.Count == 0 ? null : Part2Children }); } model.RoleTypePrivS = treeList; return Task.FromResult(model); } List RecursionRoleTypePriv(List sourceList, List list, string guid) { foreach (var item in sourceList.Where(m => m.C_ParentCode.Equals(guid))) { var res = RecursionRoleTypePriv(sourceList, new List(), item.C_Code); list.Add(new RoleTypePrivTree() { C_Code = item.C_Code, C_Name = item.C_Name, C_ParentCode = item.C_ParentCode, C_Type = item.C_Type, I_Sort = item.I_Sort, C_Remark = item.C_Remark, //LicenseTypeCode = item.LicenseTypeCode, //LicenseTypeName = item.LicenseTypeName, C_ImageUrl = item.C_ImageUrl, C_PageUrl = item.C_PageUrl, C_Module = item.C_Module, Open = res.Count > 0, Children = res.Count > 0 ? res : null }); } return list; } List SysRoleTypePriv(List sysList, List sourceList, List list, string guid) { foreach (var item in sourceList.Where(m => m.C_ParentCode.Equals(guid))) { var res = SysRoleTypePriv(sysList,sourceList, new List(), item.C_Code); list.Add(new RoleTypePrivTree() { C_Code = item.C_Code, C_Name = item.C_Name, C_ParentCode = item.C_ParentCode, C_Type = item.C_Type, I_Sort = item.I_Sort, C_Remark = item.C_Remark, C_ImageUrl = item.C_ImageUrl, C_PageUrl = item.C_PageUrl, C_Module = item.C_Module, Open = res.Count > 0, Children = res.Count > 0 ? res : null }); } return list; } public TsysUserDetailViewModel GetUserDetail(LoginModel loginModel) { MySqlConnector.MySqlParameter[] parameters = new[] { new MySqlConnector.MySqlParameter("Mobile", loginModel.Mobile), new MySqlConnector.MySqlParameter("Password", loginModel.Password) }; string sql = "SELECT A.*,GROUP_CONCAT(C.C_Name SEPARATOR ',') as RoleNames,GROUP_CONCAT(C.C_Code SEPARATOR ',') as RoleIds From TSYS_User A LEFT JOIN TSYS_UserRole B ON A.C_UserID = B.C_UserCode LEFT JOIN TSYS_Role C ON C.C_Code = B.C_RoleCode WHERE A.C_Mobile = @Mobile AND A.C_Password = @Password GROUP BY A.C_UserID"; TsysUserDetailViewModel model = EntityFrameworkCoreExtensions.SqlQuery(DbContext.Database, sql, parameters).FirstOrDefault(); return model; } public Task> GetUserDetailByRole(TsysUserByRoleSearchModel roleSearchModel) { MySqlConnector.MySqlParameter[] parameters = new[] { new MySqlConnector.MySqlParameter("Roles", "\'" + string.Join("\',\'", roleSearchModel.Roles.ToArray()) + "\'") }; string sql = "SELECT B.* FROM TSYS_UserRole A LEFT JOIN TSYS_User B ON B.C_UserID = A.C_UserCode WHERE A.C_RoleCode IN (@Roles) AND B.C_Status = '1'"; //string sql = "SELECT B.* FROM TSYS_UserRole A LEFT JOIN TSYS_User B ON B.C_UserID = A.C_UserCode WHERE A.C_RoleCode IN ('72d5b5f5-3008-49b7-b0d6-cc337f1a3333','72d5b5f5-3008-49b75b0d6-cc337f1a3333') AND B.C_Status = '1'"; IEnumerable model = EntityFrameworkCoreExtensions.GetList(DbContext.Database, sql, parameters); return Task.FromResult(model); } } }