using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.Extras.iWare.Wms.Util.LowCode.Front.Code;
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
{
///
/// 工件出库下线信息服务
///
//[Route("api")]
[ApiDescriptionSettings("自己的业务", Name = "WorkPieceUnLine", Order = 100)]
[Route("api/[Controller]")]
[DisableOpLog]
public class WorkPieceUnLineService : IWorkPieceUnLineService, IDynamicApiController, ITransient
{
private readonly IRepository _WorkPieceUnLineRep;
private readonly IRepository _workPieceInfoRep;
public WorkPieceUnLineService(
IRepository workPieceInfoRep,
IRepository WorkPieceUnLineRep
)
{
_workPieceInfoRep = workPieceInfoRep;
_WorkPieceUnLineRep = WorkPieceUnLineRep;
}
///
/// 分页查询工件出库下线信息
///
///
///
[HttpGet("page")]
public async Task> Page([FromQuery] WorkPieceUnLineSearch input)
{
var WorkPieceUnLines = await _WorkPieceUnLineRep.DetachedEntities
.Where(!string.IsNullOrEmpty(input.WorkPieceID), u => u.WorkPieceID.Contains(input.WorkPieceID))
.Where(!string.IsNullOrEmpty(input.OP80NewCode), u => u.OP80NewCode.Contains(input.OP80NewCode))
.Where(!string.IsNullOrEmpty(input.StartTimeBeginTime.ToString()), u => u.CreatedTime >= input.StartTimeBeginTime)
.Where(!string.IsNullOrEmpty(input.StartTimeEndTime.ToString()), u => u.CreatedTime <= input.StartTimeEndTime)
.OrderBy(PageInputOrder.OrderBuilder(input))
.ProjectToType()
.ToADPagedListAsync(input.PageNo, input.PageSize);
return WorkPieceUnLines;
}
///
/// 获取工件出库下线信息
///
///
///
[HttpGet("detail")]
public async Task Get([FromQuery] QueryeWorkPieceUnLineInput input)
{
return (await _WorkPieceUnLineRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt();
}
///
/// 获取工件出库下线信息列表
///
///
///
[HttpGet("list")]
public async Task> List([FromQuery] WorkPieceUnLineInput input)
{
return await _WorkPieceUnLineRep.DetachedEntities.ProjectToType().ToListAsync();
}
///
/// 撤销工件出库下线信息
///
///
///
[HttpPost("revoke")]
[UnitOfWork]
public async Task Revoke(List input)
{
foreach (var item in input)
{
var WorkPieceUnLine = await _WorkPieceUnLineRep.FirstOrDefaultAsync(u => u.Id == item.Id);
if (WorkPieceUnLine == null)
{
throw Oops.Oh("工件出库下线信息不存在");
}
WorkPieceUnLine.IsDeleted = true;
WorkPieceUnLine.Remark = WorkPieceUnLine.Remark ?? "" + "撤销发货";
await _WorkPieceUnLineRep.UpdateAsync(WorkPieceUnLine);
var workPiece = await _workPieceInfoRep.FirstOrDefaultAsync(u => u.WorkPieceID == WorkPieceUnLine.WorkPieceID);
if (workPiece != null)
{
workPiece.OutPerson = CurrentUserInfo.Name;
workPiece.OutRemark = "撤销工件出库下线";
workPiece.OutTime = DateTime.Now;
workPiece.IsOut = false;
await _workPieceInfoRep.UpdateAsync(workPiece);
}
}
}
}
}