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 Microsoft.EntityFrameworkCore.Internal;
using System.Linq.Dynamic.Core;
namespace iWare.Wms.Application
{
///
/// 刀具基本信息服务
///
[ApiDescriptionSettings("基础数据管理", Name = "KnifeToolBaseInfo", Order = 100)]
[Route("api/[Controller]")]
public class KnifeToolBaseInfoService : IKnifeToolBaseInfoService, IDynamicApiController, ITransient
{
private readonly IRepository _knifeToolBaseInfoRep;
private readonly IRepository _equipmentBaseInfoRep;
///
/// 刀具基本信息构造函数
///
///
///
public KnifeToolBaseInfoService(
IRepository knifeToolBaseInfoRep,
IRepository equipmentBaseInfoRep
)
{
_knifeToolBaseInfoRep = knifeToolBaseInfoRep;
_equipmentBaseInfoRep = equipmentBaseInfoRep;
}
///
/// 分页查询刀具基本信息
///
///
///
[HttpGet("page")]
public async Task> Page([FromQuery] KnifeToolBaseInfoSearch input)
{
//var knifeToolBaseInfos = await _knifeToolBaseInfoRep.DetachedEntities
// .GroupJoin(_equipmentBaseInfoRep.DetachedEntities, a => a.EquipmentID, b => b.EquipmentId, (a, b) => new { a = a, b = b.DefaultIfEmpty().FirstOrDefault() })
// .Where(!string.IsNullOrEmpty(input.KnifeToolModel), u => u.KnifeToolModel.Contains(input.KnifeToolModel))
// .Where(!string.IsNullOrEmpty(input.EquipmentID), u => u.EquipmentID == input.EquipmentID)
// .Select(s => new KnifeToolBaseInfoOutput
// {
// Id = s.Id,
// KnifeToolID = s.KnifeToolID,
// KnifeToolModel = s.KnifeToolModel,
// KnifeEdgeNumber = s.KnifeEdgeNumber,
// KnifeToolLife = s.KnifeToolLife,
// KnifeLength = s.KnifeLength,
// EquipmentID = s.EquipmentID,
// //EquipmentName=s.b.EquipmentName,
// CreatedTime = s.CreatedTime,
// Remarks = s.Remarks,
// })
// .OrderBy(PageInputOrder.OrderBuilder(input))
// .ProjectToType()
// .ToADPagedListAsync(input.PageNo, input.PageSize;
var knifeToolBaseInfos = await (from knife in _knifeToolBaseInfoRep.DetachedEntities
join baseinfo in _equipmentBaseInfoRep.DetachedEntities on knife.EquipmentID equals baseinfo.EquipmentId into joinEmpty
from baseinfo2 in joinEmpty.DefaultIfEmpty()
where knife.KnifeToolModel == (input.KnifeToolModel?? knife.KnifeToolModel)
where knife.EquipmentID == (input.EquipmentID?? knife.EquipmentID)
select new KnifeToolBaseInfoOutput
{
Id = knife.Id,
KnifeToolID = knife.KnifeToolID,
KnifeToolModel = knife.KnifeToolModel,
KnifeEdgeNumber = knife.KnifeEdgeNumber,
KnifeToolLife = knife.KnifeToolLife,
KnifeLength = knife.KnifeLength,
EquipmentID = knife.EquipmentID,
EquipmentName= baseinfo2.EquipmentName,
KnifeToolChangeAlertThreshold= knife.KnifeToolChangeAlertThreshold,
CreatedTime = knife.CreatedTime,
Remarks = knife.Remarks,
})
.ProjectToType()
.OrderBy(PageInputOrder.OrderBuilder(input))
.ToADPagedListAsync(input.PageNo, input.PageSize);
return knifeToolBaseInfos;
}
///
/// 增加刀具基本信息
///
///
///
[HttpPost("add")]
public async Task Add(AddKnifeToolBaseInfoInput input)
{
var isExist = await _knifeToolBaseInfoRep.AnyAsync(u => u.KnifeToolID == input.KnifeToolID, false);
if (isExist) throw Oops.Oh($"当前刀具编号已存在,新增失败!");
var knifeToolBaseInfo = input.Adapt();
await _knifeToolBaseInfoRep.InsertAsync(knifeToolBaseInfo);
}
///
/// 删除刀具基本信息
///
///
///
[HttpPost("delete")]
public async Task Delete(DeleteKnifeToolBaseInfoInput input)
{
var knifeToolBaseInfo = await _knifeToolBaseInfoRep.FirstOrDefaultAsync(u => u.Id == input.Id);
knifeToolBaseInfo.IsDeleted = true;
//await _knifeToolBaseInfoRep.DeleteAsync(knifeToolBaseInfo);
}
///
/// 批量删除刀具基础信息
///
///
///
[HttpPost("selectDelete")]
public async Task SelectDelete(List input)
{
foreach (var item in input)
{
var knifeToolBaseInfo = await _knifeToolBaseInfoRep.FirstOrDefaultAsync(u => u.Id == item.Id);
knifeToolBaseInfo.IsDeleted = true;
//await _knifeToolBaseInfoRep.DeleteAsync(knifeToolBaseInfo);
}
}
///
/// 更新刀具基本信息
///
///
///
[HttpPost("edit")]
public async Task Update(UpdateKnifeToolBaseInfoInput input)
{
var isExist = await _knifeToolBaseInfoRep.AnyAsync(u => u.Id == input.Id && u.KnifeToolID == input.KnifeToolID, false);
if (!isExist) throw Oops.Oh($"刀具编号不能进行变更,修改失败!");
var knifeToolBaseInfo = input.Adapt();
await _knifeToolBaseInfoRep.UpdateAsync(knifeToolBaseInfo,ignoreNullValues:true);
}
///
/// 获取刀具基本信息
///
///
///
[HttpGet("detail")]
public async Task Get([FromQuery] QueryeKnifeToolBaseInfoInput input)
{
return (await _knifeToolBaseInfoRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt();
}
///
/// 获取刀具基本信息列表
///
///
///
[HttpGet("list")]
public async Task> List([FromQuery] KnifeToolBaseInfoInput input)
{
return await _knifeToolBaseInfoRep.DetachedEntities.ProjectToType().ToListAsync();
}
}
}