odf_new/server/ZR.Service/Business/OdfCablesService.cs
zpc 992e42a5ae
Some checks failed
continuous-integration/drone/push Build is failing
21
2026-04-21 23:16:26 +08:00

159 lines
5.6 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 ZR.Model;
using ZR.Model.Business;
using ZR.Model.Business.Dto;
using ZR.Repository;
using ZR.Service.Business.IBusinessService;
namespace ZR.Service.Business
{
/// <summary>
/// 光缆管理Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IOdfCablesService), ServiceLifetime = LifeTime.Transient)]
public class OdfCablesService : BaseService<OdfCables>, IOdfCablesService
{
/// <summary>
/// 按 DeptId 过滤光缆列表(支持分页和 CableName 模糊查询),应用部门数据隔离
/// </summary>
/// <param name="parm"></param>
/// <param name="deptId">当前用户所属部门ID用于数据隔离</param>
/// <returns></returns>
public PagedInfo<OdfCables> GetList(OdfCablesQueryDto parm, long deptId)
{
var predicate = Expressionable.Create<OdfCables>();
if (parm.DeptId.HasValue && parm.DeptId.Value > 0)
{
// 前端指定了公司,精确过滤该公司的光缆
predicate = predicate.And(it => it.DeptId == parm.DeptId.Value);
}
else
{
// 未指定公司,按部门数据隔离查询本级及所有下级部门的数据
var visibleDeptIds = DeptDataScopeHelper.GetVisibleDeptIds(Context, deptId);
predicate = predicate.And(it => visibleDeptIds.Contains(it.DeptId));
}
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.CableName), it => it.CableName.Contains(parm.CableName));
var response = Queryable()
.Where(predicate.ToExpression())
.OrderByDescending(it => it.CreatedAt)
.ToPage(parm);
return response;
}
/// <summary>
/// 在指定公司范围内搜索光缆、故障和标石/杆号牌
/// </summary>
/// <param name="deptId"></param>
/// <param name="keyword"></param>
/// <returns></returns>
public object Search(long deptId, string keyword)
{
// 搜索光缆:按 DeptId 过滤CableName LIKE keyword
var cables = Queryable()
.Where(c => c.DeptId == deptId)
.WhereIF(!string.IsNullOrEmpty(keyword), c => c.CableName.Contains(keyword))
.Select(c => new { c.Id, c.CableName })
.ToList();
// 搜索故障:联查 odf_cables 按 DeptId 过滤,对 FaultReason/Mileage/Location LIKE keyword
var faults = Context.Queryable<OdfCableFaults>()
.LeftJoin<OdfCables>((f, c) => f.CableId == c.Id)
.Where((f, c) => c.DeptId == deptId)
.WhereIF(!string.IsNullOrEmpty(keyword), (f, c) =>
f.FaultReason.Contains(keyword) ||
f.Mileage.Contains(keyword) ||
f.Location.Contains(keyword))
.OrderByDescending((f, c) => f.FaultTime)
.Select((f, c) => new
{
f.Id,
f.FaultTime,
f.FaultReason,
f.Mileage,
CableName = c.CableName
})
.ToList();
// 搜索标石/杆号牌:联查 odf_cables 按 DeptId 过滤,按 Name LIKE keyword
var markerPoles = Context.Queryable<OdfMarkerPoles>()
.LeftJoin<OdfCables>((m, c) => m.CableId == c.Id)
.Where((m, c) => c.DeptId == deptId)
.WhereIF(!string.IsNullOrEmpty(keyword), (m, c) => m.Name.Contains(keyword))
.OrderByDescending((m, c) => m.RecordTime)
.Select((m, c) => new
{
m.Id,
m.Name,
m.RecordTime,
m.Personnel,
m.CableId,
CableName = c.CableName
})
.ToList();
return new { cables, faults, markerPoles };
}
/// <summary>
/// 新增光缆
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public OdfCables Add(OdfCables model)
{
model.CreatedAt = DateTime.Now;
model.UpdatedAt = DateTime.Now;
return Insertable(model).ExecuteReturnEntity();
}
/// <summary>
/// 修改光缆
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public int Update(OdfCables model)
{
model.UpdatedAt = DateTime.Now;
return base.Update(model, true);
}
/// <summary>
/// 删除光缆
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public int Delete(int id)
{
return base.Delete(id);
}
/// <summary>
/// 获取光缆详情
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public OdfCables GetDetail(int id)
{
return GetFirst(x => x.Id == id);
}
/// <summary>
/// 导出光缆列表
/// </summary>
/// <param name="parm"></param>
/// <param name="deptId">当前用户所属部门ID用于数据隔离</param>
/// <returns></returns>
public PagedInfo<OdfCables> ExportList(OdfCablesQueryDto parm, long deptId)
{
parm.PageNum = 1;
parm.PageSize = 100000;
return GetList(parm, deptId);
}
}
}