using Ropin.Inspection.Common; using Ropin.Inspection.Model.Entities; using Ropin.Inspection.Model.ViewModel; using Ropin.Inspection.Repository.Interface; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Ropin.Inspection.Repository { public class TsysOrganizeRepository : RepositoryBase, ITsysOrganizeRepository { public TsysOrganizeRepository(InspectionDbContext dbContext) : base(dbContext) { } public int GetMaxKid() { //int iMax = from q in DbContext.TSYS_Org orderby q.K_ID descending select (q.K_ID); //DbContext.Database.SqlQuery("SELECT MAX(K_ID) From TSYS_Org"); var table = DbContext.Database.SqlQuery("SELECT MAX(K_ID) From TSYS_Org"); int iMax = Convert.ToInt32(table.Rows[0][0]) ; return iMax; } public async Task> GetListTreeAsync(string licenseTypeCode,string licenseCode, Guid? orgCode, string status) { //C_LicenseCode //MySqlConnector.MySqlParameter[] parameters = new[] { new MySqlConnector.MySqlParameter("qRCode", "") }; //string sql = "SELECT * From TSYS_Org"; //List model = EntityFrameworkCoreExtensions.GetList(DbContext.Database, sql, parameters).ToList(); //var v = DbContext.TSYS_Org.ToList(); if (string.IsNullOrEmpty(licenseTypeCode)) throw new Exception("没有许可证"); IEnumerable orgs = null; //if (licenseCode.StartsWith("SYSTEM")) if (licenseTypeCode == TsysLicenseType.SYSTEM) orgs = this.GetAll(); else orgs = await this.GetByConditionAsync(a => a.C_LicenseCode == licenseCode); //IEnumerable orgs = await this.GetByConditionAsync(a => a.C_LicenseCode == licenseCode); //.GetAll().ToList(); List list = null; var treeList = new List(); if(status!=null) list = orgs.Where(i=>i.C_Status ==status).ToList(); else list = orgs.ToList(); if (Guid.Empty.Equals(orgCode) || orgCode == null|| licenseCode.StartsWith("SYSTEM")) { foreach (var item in list.Where(m => m.C_ParentCode == null).OrderBy(m => m.I_Sort)) //&& m.C_Status == "1" { //获得子级 var children = RecursionOrganize(list, new List(), item.C_Code); treeList.Add(new TsysOrganizeTree() { K_ID = item.K_ID, C_LicenseCode = item.C_LicenseCode, //C_LicenseName = item.C_LicenseName, C_Code = item.C_Code, C_Name = item.C_Name, C_SName = item.C_SName, C_LName = item.C_LName, C_Level = item.C_Level, C_ParentCode = item.C_ParentCode, C_Type = item.C_Type, C_Phone = item.C_Phone, C_Linker = item.C_Linker, C_GIS = item.C_GIS, I_Sort = item.I_Sort, C_Remark = item.C_Remark, C_CreateBy = item.C_CreateBy, D_CreateOn = item.D_CreateOn, C_LastUpdatedBy = item.C_LastUpdatedBy, D_LastUpdatedOn = item.D_LastUpdatedOn, C_Status = item.C_Status, Open = children.Count > 0, Children = children.Count == 0 ? null : children }); } } else { foreach (var item in list.Where(m => m.C_Code.Equals(orgCode) && m.C_Status == "1").OrderBy(m => m.I_Sort)) { //获得子级 var children = RecursionOrganize(list, new List(), orgCode); treeList.Add(new TsysOrganizeTree() { K_ID = item.K_ID, C_LicenseCode = item.C_LicenseCode, C_Code = item.C_Code, C_Name = item.C_Name, C_SName = item.C_SName, C_LName = item.C_LName, C_Level = item.C_Level, C_ParentCode = item.C_ParentCode, C_Type = item.C_Type, C_Phone = item.C_Phone, C_Linker = item.C_Linker, C_GIS = item.C_GIS, I_Sort = item.I_Sort, C_Remark = item.C_Remark, C_CreateBy = item.C_CreateBy, D_CreateOn = item.D_CreateOn, C_LastUpdatedBy = item.C_LastUpdatedBy, D_LastUpdatedOn = item.D_LastUpdatedOn, C_Status = item.C_Status, Open = children.Count > 0, Children = children.Count == 0 ? null : children }); } } return await Task.Run(() => treeList); } public async Task GetOrgsByAsync(string licenseCode) { if (string.IsNullOrEmpty(licenseCode)) throw new Exception("没有许可证"); IEnumerable orgs = null; if ("SYSTEM_001" == licenseCode) orgs = this.GetAll(); else orgs = await this.GetByConditionAsync(a => a.C_LicenseCode == licenseCode); //.GetAll().ToList(); List list = orgs.ToList(); TsysOrg tysOrg = new TsysOrg(); tysOrg.OwnerOrgList = await GetOrganizeByTypeAsync(list, "PARTY_TYPE_001"); tysOrg.PlatformOrgList = await GetOrganizeByTypeAsync(list, "PARTY_TYPE_004"); tysOrg.SuperviseOrgList = await GetOrganizeByTypeAsync(list, "PARTY_TYPE_002"); tysOrg.SupplierOrgList = await GetOrganizeByTypeAsync(list, "PARTY_TYPE_003"); return await Task.Run(() => tysOrg); } async Task> GetOrganizeByTypeAsync(List list,string type) { var treeList = new List(); foreach (var item in list.Where(m => m.C_ParentCode == null && m.C_Type == type).OrderBy(m => m.I_Sort)) { //获得子级 var children = RecursionOrganize(list, new List(), item.C_Code); treeList.Add(new TsysOrganizeTree() { K_ID = item.K_ID, C_LicenseCode = item.C_LicenseCode, C_Code = item.C_Code, C_Name = item.C_Name, C_SName = item.C_SName, C_LName = item.C_LName, C_Level = item.C_Level, C_ParentCode = item.C_ParentCode, C_Type = item.C_Type, C_Phone = item.C_Phone, C_Linker = item.C_Linker, C_GIS = item.C_GIS, I_Sort = item.I_Sort, C_Remark = item.C_Remark, C_CreateBy = item.C_CreateBy, D_CreateOn = item.D_CreateOn, C_LastUpdatedBy = item.C_LastUpdatedBy, D_LastUpdatedOn = item.D_LastUpdatedOn, C_Status = item.C_Status, Open = children.Count > 0, Children = children.Count == 0 ? null : children }); } return await Task.Run(() => treeList); } public async Task> GetByOrganizeCodeAsync(Guid id) { List list = this.GetAll().ToList().OrderBy(m => m.I_Sort).ToList(); var treeList = new List(); var item = list.Where(m => m.C_ParentCode.Equals(id)).FirstOrDefault(); //&& m.C_Status == "1" if (item != null) { //获得子级 var children = RecursionOrganize(list, new List(), item.C_Code); treeList.Add(new TsysOrganizeTree() { K_ID = item.K_ID, C_LicenseCode = item.C_LicenseCode, C_Code = item.C_Code, C_Name = item.C_Name, C_SName = item.C_SName, C_LName = item.C_LName, C_Level = item.C_Level, C_ParentCode = item.C_ParentCode, C_Type = item.C_Type, C_Phone = item.C_Phone, C_Linker = item.C_Linker, C_GIS = item.C_GIS, I_Sort = item.I_Sort, C_Remark = item.C_Remark, C_CreateBy = item.C_CreateBy, D_CreateOn = item.D_CreateOn, C_LastUpdatedBy = item.C_LastUpdatedBy, D_LastUpdatedOn = item.D_LastUpdatedOn, C_Status = item.C_Status, Open = children.Count > 0, Children = children.Count == 0 ? null : children }); } return await Task.Run(() => treeList); } List RecursionOrganize(List sourceList, List list, Guid? guid) { foreach (var row in sourceList.Where(m => m.C_ParentCode.Equals(guid) ).OrderBy(m => m.I_Sort))// && m.C_Status == "1" { var res = RecursionOrganize(sourceList, new List(), row.C_Code); list.Add(new TsysOrganizeTree() { K_ID = row.K_ID, C_LicenseCode = row.C_LicenseCode, C_Code = row.C_Code, C_Name = row.C_Name, C_SName = row.C_SName, C_LName = row.C_LName, C_Level = row.C_Level, C_ParentCode = row.C_ParentCode, C_Type = row.C_Type, C_Phone = row.C_Phone, C_Linker = row.C_Linker, C_GIS = row.C_GIS, I_Sort = row.I_Sort, C_Remark = row.C_Remark, C_CreateBy = row.C_CreateBy, D_CreateOn = row.D_CreateOn, C_LastUpdatedBy = row.C_LastUpdatedBy, D_LastUpdatedOn = row.D_LastUpdatedOn, C_Status = row.C_Status, Open = res.Count > 0, Children = res.Count > 0 ? res : null }); } return list; } } }