.NETAdmin/ZR.Service/Business/OdfRoomsService.cs
2025-08-14 11:24:46 +08:00

180 lines
6.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
{
/// <summary>
/// 机房列表Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IOdfRoomsService), ServiceLifetime = LifeTime.Transient)]
public class OdfRoomsService : BaseService<OdfRooms>, IOdfRoomsService
{
/// <summary>
/// 查询机房列表列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<OdfRoomsDto> GetList(OdfRoomsQueryDto parm)
{
var predicate = QueryExp(parm);
var response = Queryable()
//.OrderBy("Id desc")
.Where(predicate.ToExpression())
.ToPage<OdfRooms, OdfRoomsDto>(parm);
return response;
}
/// <summary>
/// 获取详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public OdfRooms GetInfo(int Id)
{
var response = Queryable()
.Where(x => x.Id == Id)
.First();
return response;
}
/// <summary>
/// 添加机房列表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public OdfRooms AddOdfRooms(OdfRooms model)
{
return Insertable(model).ExecuteReturnEntity();
}
/// <summary>
/// 修改机房列表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public int UpdateOdfRooms(OdfRooms model)
{
return Update(model, true, "修改机房列表");
}
/// <summary>
/// 导入机房列表
/// </summary>
/// <returns></returns>
public (string, object, object) ImportOdfRooms(List<OdfRooms> 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);
}
/// <summary>
/// 导出机房列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<OdfRoomsDto> 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;
}
/// <summary>
/// 查询导出表达式
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
private static Expressionable<OdfRooms> QueryExp(OdfRoomsQueryDto parm)
{
var predicate = Expressionable.Create<OdfRooms>();
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<long>(sql);
predicate = predicate.And(it => list.Contains(it.DeptId ?? 0));
}
return predicate;
}
/// <summary>
/// 查询导出表达式
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
private static Expressionable<OdfRooms> QueryExp(OdfRoomsTreeQueryDto parm)
{
var predicate = Expressionable.Create<OdfRooms>();
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<long>(sql);
predicate = predicate.And(it => list.Contains(it.DeptId ?? 0));
}
}
return predicate;
}
public List<OdfRooms> GetList(OdfRoomsTreeQueryDto parm)
{
var predicate = QueryExp(parm);
var response = Queryable()
.Where(predicate.ToExpression())
.ToList();
return response;
}
}
}