using Infrastructure.Attribute; using Infrastructure.Extensions; using ZR.Model.Business.Dto; using ZR.Model.Business; using ZR.Repository; using ZR.Service.Business.IBusinessService; using Infrastructure; using SqlSugar.IOC; namespace ZR.Service.Business { /// /// 机房列表Service业务层处理 /// [AppService(ServiceType = typeof(IOdfRoomsService), ServiceLifetime = LifeTime.Transient)] public class OdfRoomsService : BaseService, IOdfRoomsService { /// /// 查询机房列表列表 /// /// /// public PagedInfo GetList(OdfRoomsQueryDto parm) { var predicate = QueryExp(parm); var response = Queryable() //.OrderBy("Id desc") .Where(predicate.ToExpression()) .ToPage(parm); return response; } /// /// 获取详情 /// /// /// public OdfRooms GetInfo(int Id) { var response = Queryable() .Where(x => x.Id == Id) .First(); return response; } /// /// 添加机房列表 /// /// /// public OdfRooms AddOdfRooms(OdfRooms model) { return Insertable(model).ExecuteReturnEntity(); } /// /// 修改机房列表 /// /// /// public int UpdateOdfRooms(OdfRooms model) { return Update(model, true, "修改机房列表"); } /// /// 导入机房列表 /// /// public (string, object, object) ImportOdfRooms(List list) { var x = Context.Storageable(list) .SplitInsert(it => !it.Any()) .SplitError(x => x.Item.RoomName.IsEmpty(), "机房名称不能为空") .SplitError(x => x.Item.RoomAddress.IsEmpty(), "机房位置不能为空") //.WhereColumns(it => it.UserName)//如果不是主键可以这样实现(多字段it=>new{it.x1,it.x2}) .ToStorage(); var result = x.AsInsertable.ExecuteCommand();//插入可插入部分; string msg = $"插入{x.InsertList.Count} 更新{x.UpdateList.Count} 错误数据{x.ErrorList.Count} 不计算数据{x.IgnoreList.Count} 删除数据{x.DeleteList.Count} 总共{x.TotalList.Count}"; Console.WriteLine(msg); //输出错误信息 foreach (var item in x.ErrorList) { Console.WriteLine("错误" + item.StorageMessage); } foreach (var item in x.IgnoreList) { Console.WriteLine("忽略" + item.StorageMessage); } return (msg, x.ErrorList, x.IgnoreList); } /// /// 导出机房列表 /// /// /// public PagedInfo ExportList(OdfRoomsQueryDto parm) { parm.PageNum = 1; parm.PageSize = 100000; var predicate = QueryExp(parm); var response = Queryable() .Where(predicate.ToExpression()) .Select((it) => new OdfRoomsDto() { }, true) .ToPage(parm); return response; } /// /// 查询导出表达式 /// /// /// private static Expressionable QueryExp(OdfRoomsQueryDto parm) { var predicate = Expressionable.Create(); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.RoomName), it => it.RoomName.Contains(parm.RoomName)); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.RoomAddress), it => it.RoomAddress.Contains(parm.RoomAddress)); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Remarks), it => it.Remarks.Contains(parm.Remarks)); predicate = predicate.AndIF(parm.DeptIds != null && parm.DeptIds.Count > 0, it => parm.DeptIds.Contains(it.DeptId ?? 0)); if (parm.DeptId > 0) { var db = DbScoped.SugarScope.GetConnectionScope("0"); string sql = "WITH DeptCTE AS( SELECT DeptId, ParentId, DeptName FROM sys_dept WHERE DeptId =" + parm.DeptId + " UNION ALL SELECT d.DeptId, d.ParentId, d.DeptName FROM sys_dept d INNER JOIN DeptCTE cte ON d.ParentId = cte.DeptId WHERE d.DelFlag = 0) SELECT DeptId FROM DeptCTE ORDER BY DeptId"; var list = db.Ado.SqlQuery(sql); predicate = predicate.And(it => list.Contains(it.DeptId ?? 0)); } return predicate; } /// /// 查询导出表达式 /// /// /// private static Expressionable QueryExp(OdfRoomsTreeQueryDto parm) { var predicate = Expressionable.Create(); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Name), it => (it.RoomName.Contains(parm.Name) || it.RoomAddress.Contains(parm.Name) || it.DeptName.Contains(parm.Name))); if (parm.DeptId != null) { if (parm.DeptId == 0) { predicate = predicate.AndIF(parm.DeptId != null, it => parm.DeptId == (it.DeptId ?? 0)); } else { var db = DbScoped.SugarScope.GetConnectionScope("0"); string sql = "WITH DeptCTE AS( SELECT DeptId, ParentId, DeptName FROM sys_dept WHERE DeptId =" + parm.DeptId + " UNION ALL SELECT d.DeptId, d.ParentId, d.DeptName FROM sys_dept d INNER JOIN DeptCTE cte ON d.ParentId = cte.DeptId WHERE d.DelFlag = 0) SELECT DeptId FROM DeptCTE ORDER BY DeptId"; var list = db.Ado.SqlQuery(sql); predicate = predicate.And(it => list.Contains(it.DeptId ?? 0)); } } return predicate; } public List GetList(OdfRoomsTreeQueryDto parm) { var predicate = QueryExp(parm); var response = Queryable() .Where(predicate.ToExpression()) .ToList(); return response; } } }