using CommonModel; using Dapr.Actors; using Dapr.Actors.Client; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ZhongLianInterface; using ZhongLianModel; namespace ZhongLianService { /// /// 工程服务 /// public class ProjectService : IProjectService { public ProjectService(IServiceProvider services, ISqlSugarClient sqlSugarClient) { Services = services; Db = sqlSugarClient; //创建表 Db.CodeFirst.SetStringDefaultLength(200).InitTables(typeof(ProjectDO)); //Db.CodeFirst.InitTables(typeof(GroupDO), typeof(CompanyDO), typeof(DeviceDO)); } private readonly IServiceProvider Services; private readonly ISqlSugarClient Db; /// /// 插入 /// /// 工程实体 /// 工程实体 public Task Insert(ProjectDO project) { try { Db.Ado.BeginTran(); var group = new GroupDO { Id = Guid.NewGuid().ToString(), Name = project.Name, System = "ZL", Type = 0, PId = project.CompanyId }; if (string.IsNullOrEmpty(group.Code)) { var _MaxCode = Db.Queryable().MaxAsync(x => x.Code).Result; if (string.IsNullOrEmpty(_MaxCode)) { group.Code = "GP00001"; } else { group.Code = $"GP{(Convert.ToInt32(_MaxCode.Substring(2, 5)) + 1).ToString().PadLeft(5, '0')}"; } } group.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); group.Deleted = 0; Db.Insertable(group).ExecuteCommand(); project.Id = group.Id; if (string.IsNullOrEmpty(project.Code)) { //生成用户编号 var _MaxCode = Db.Queryable().MaxAsync(x => x.Code).Result; if (string.IsNullOrEmpty(_MaxCode)) { project.Code = "PJ00001"; } else { project.Code = $"PJ{(Convert.ToInt32(_MaxCode.Substring(2, 5)) + 1).ToString().PadLeft(5, '0')}"; } } project.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); project.Deleted = 0; Db.Insertable(project).ExecuteCommand(); Db.Ado.CommitTran(); return Task.FromResult(project); } catch { Db.Ado.RollbackTran(); throw; } } /// /// 更新 /// /// 工程实体 /// 工程实体 public Task Update(ProjectDO project) { try { Db.Ado.BeginTran(); Db.Updateable(new GroupDO { Id = project.Id, Name = project.Name, System = "ZL", Type = 0, PId = project.CompanyId }).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand(); Db.Updateable(project) .IgnoreColumns(ignoreAllNullColumns: true) .ExecuteCommand(); Db.Ado.CommitTran(); return Task.FromResult(project); } catch { Db.Ado.RollbackTran(); throw; } } /// /// 删除 /// /// Id数组 /// public Task Delete(string[] ids) { try { Db.Ado.BeginTran(); Db.Deleteable().In(ids).ExecuteCommand(); Db.Deleteable().In(ids).ExecuteCommand(); Db.Ado.CommitTran(); return Task.CompletedTask; } catch { Db.Ado.RollbackTran(); throw; } } /// /// 根据编号查询 /// /// 编号 /// 工程 public Task Get(string id) { var result = Db.Queryable() .LeftJoin((a, b) => a.CompanyId == b.Id) .Select((a, b) => new ProjectDO { Id = a.Id.SelectAll(), CompanyName = b.Name }).First(); return Task.FromResult(result); } /// /// 分页查询 /// /// 分页对象 /// 分页对象 public Task> List(PageSearch page) { RefAsync total = 0; string _Search = page.Search!; string _Code = page.Mode!.Code!; string _Name = page.Mode!.Name!; string _CompanyId = page.Mode!.CompanyId!; string _Area = page.Mode!.Area!; string _AddressName = page.Mode!.AddressName!; string _CU = page.Mode!.CU!; string _SU = page.Mode!.SU!; string _PM = page.Mode!.PM!; var result = Db.Queryable() .LeftJoin((x, y) => x.CompanyId == y.Id) .Where(x => x.Deleted == 0) .WhereIF(!string.IsNullOrEmpty(_Search), x => x.Name!.Contains(_Search) || x.Code!.Contains(_Search) ) .WhereIF(!string.IsNullOrEmpty(_Code), x => x.Code!.Contains(_Code)) .WhereIF(!string.IsNullOrEmpty(_Name), x => x.Name!.Contains(_Name)) .WhereIF(!string.IsNullOrEmpty(_CompanyId), x => x.CompanyId!.Contains(_CompanyId)) .WhereIF(!string.IsNullOrEmpty(_Area), x => x.Area!.Contains(_Area)) .WhereIF(!string.IsNullOrEmpty(_AddressName), x => x.AddressName!.Contains(_AddressName)) .WhereIF(!string.IsNullOrEmpty(_CU), x => x.CU!.Contains(_CU)) .WhereIF(!string.IsNullOrEmpty(_SU), x => x.SU!.Contains(_SU)) .WhereIF(!string.IsNullOrEmpty(_PM), x => x.PM!.Contains(_PM)) .Select((x, y) => new ProjectDO { Id = x.Id.SelectAll(), CompanyName = y.Name }) .OrderBy((x) => new { NameF = "CONVERT(Name USING GBK) ASC", x.Name }) .ToPageListAsync(page.Index!, page.Size!, total).Result; return Task.FromResult(new PageData { Data = result, Total = total.Value }); } /// /// 3D地图设备数量获取 /// /// public Task> GeoCount() { var Province = Db.Queryable() .LeftJoin((x, y) => x.Id == y.ProjectId) .Where((x,y)=>x.Deleted == 0 && y.Deleted == 0) .GroupBy((x, y) => x.ProvinceCode) .Select((x, y) => new GeoProjectDTO { Code = x.ProvinceCode, ParentCode = "100000", Count = SqlFunc.AggregateCount(y.ProjectId) }); var City = Db.Queryable() .LeftJoin((x, y) => x.Id == y.ProjectId) .Where((x, y) => x.Deleted == 0 && y.Deleted == 0) .GroupBy((x, y) => new { x.CityCode, x.ProvinceCode }) .Select((x, y) => new GeoProjectDTO { Code = x.CityCode, ParentCode = x.ProvinceCode, Count = SqlFunc.AggregateCount(y.ProjectId) }); var Area = Db.Queryable() .LeftJoin((x, y) => x.Id == y.ProjectId) .Where((x, y) => x.Deleted == 0 && y.Deleted == 0) .GroupBy((x, y) => new { x.AreaCode, x.CityCode }) .Select((x, y) => new GeoProjectDTO { Code = x.AreaCode, ParentCode = x.CityCode, Count = SqlFunc.AggregateCount(y.ProjectId) }); return Task.FromResult(Db.Union(Province, City, Area).ToList()); } } }