using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using iWare.Wms.Core;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
namespace iWare.Wms.Application
{
///
/// 设备刀具实时监控信息服务
///
[ApiDescriptionSettings("刀具相关", Name = "KnifeToolEquipmentMonitor", Order = 102)]
[Route("api/[Controller]")]
public class KnifeToolEquipmentMonitorService : IKnifeToolEquipmentMonitorService, IDynamicApiController, ITransient
{
private readonly IRepository _knifeToolEquipmentMonitorRep;
private readonly IRepository _equipmentBaseInfoRep;
private readonly IRepository _knifeToolEquipmentInfoRep;
public KnifeToolEquipmentMonitorService(
IRepository knifeToolEquipmentMonitorRep,
IRepository equipmentBaseInfoRep,
IRepository knifeToolEquipmentInfoRep
)
{
_knifeToolEquipmentMonitorRep = knifeToolEquipmentMonitorRep;
_equipmentBaseInfoRep = equipmentBaseInfoRep;
_knifeToolEquipmentInfoRep = knifeToolEquipmentInfoRep;
}
///
/// 分页查询设备刀具实时监控信息
///
///
///
[HttpGet("page")]
public async Task> Page([FromQuery] KnifeToolEquipmentMonitorSearch input)
{
var knifeToolEquipmentMonitors = await (from knife in _knifeToolEquipmentMonitorRep.DetachedEntities
join eqbaseinfo in _equipmentBaseInfoRep.DetachedEntities on knife.EquipmentID equals eqbaseinfo.EquipmentId into eqjoinEmpty
from eqbaseinfo2 in eqjoinEmpty.DefaultIfEmpty()
join info in _knifeToolEquipmentInfoRep.DetachedEntities on knife.EquipmentID equals info.EquipmentID into infoempty
from infoempty2 in infoempty.DefaultIfEmpty()
where knife.EquipmentID == (string.IsNullOrEmpty(input.EquipmentID)? knife.EquipmentID: input.EquipmentID)
where knife.WorkingProcedure == (string.IsNullOrEmpty(input.WorkingProcedure) ? knife.WorkingProcedure : input.WorkingProcedure)
where infoempty2.KnifeToolID == (string.IsNullOrEmpty(input.KnifeToolID) ? infoempty2.KnifeToolID : input.KnifeToolID)
select new KnifeToolEquipmentMonitorOutput
{
EquipmentID= knife.EquipmentID,
EquipmentName= eqbaseinfo2.EquipmentName,
WorkingProcedure = knife.WorkingProcedure,
Remarks1 = knife.Remarks1,
Remarks2 = knife.Remarks2,
Remarks3 = knife.Remarks3,
Id = knife.Id,
}).Distinct()
.OrderBy(PageInputOrder.OrderBuilder(input))
.ProjectToType()
.ToADPagedListAsync(input.PageNo, input.PageSize);
return knifeToolEquipmentMonitors;
}
///
/// 增加设备刀具实时监控信息
///
///
///
[HttpPost("add")]
public async Task Add(AddKnifeToolEquipmentMonitorInput input)
{
var isExist = await _knifeToolEquipmentMonitorRep.AnyAsync(u => u.EquipmentID == input.EquipmentID&&u.WorkingProcedure==input.WorkingProcedure, false);
if (isExist) throw Oops.Oh($"设备[{input.EquipmentID}]工序[{input.WorkingProcedure}]在系统中已存在,不允许重复添加!");
var knifeToolEquipmentMonitor = input.Adapt();
await _knifeToolEquipmentMonitorRep.InsertAsync(knifeToolEquipmentMonitor);
}
///
/// 删除设备刀具实时监控信息
///
///
///
[HttpPost("delete")]
public async Task Delete(DeleteKnifeToolEquipmentMonitorInput input)
{
var knifeToolEquipmentMonitor = await _knifeToolEquipmentMonitorRep.FirstOrDefaultAsync(u => u.Id == input.Id);
await _knifeToolEquipmentMonitorRep.DeleteAsync(knifeToolEquipmentMonitor);
}
///
/// 更新设备刀具实时监控信息
///
///
///
[HttpPost("edit")]
public async Task Update(UpdateKnifeToolEquipmentMonitorInput input)
{
var isExist = await _knifeToolEquipmentMonitorRep.AnyAsync(u => u.Id == input.Id, false);
if (!isExist) throw Oops.Oh(ErrorCode.D3000);
var knifeToolEquipmentMonitor = input.Adapt();
await _knifeToolEquipmentMonitorRep.UpdateAsync(knifeToolEquipmentMonitor,ignoreNullValues:true);
}
///
/// 获取设备刀具实时监控信息
///
///
///
[HttpGet("detail")]
public async Task Get([FromQuery] QueryeKnifeToolEquipmentMonitorInput input)
{
return (await _knifeToolEquipmentMonitorRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt();
}
///
/// 获取设备刀具实时监控信息列表
///
///
///
[HttpGet("list")]
public async Task> List([FromQuery] KnifeToolEquipmentMonitorInput input)
{
return await _knifeToolEquipmentMonitorRep.DetachedEntities.ProjectToType().ToListAsync();
}
}
}