using Admin.NET.Core.Helper.ExcelHelper;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using iWare.Wms.Application.Service.WmsCount.WareTaskBak.Dto;
using iWare.Wms.Core;
using Mapster;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
namespace iWare.Wms.Application
{
///
/// 历史任务记录服务
///
[ApiDescriptionSettings("统计查询", Name = "WareTaskBak", Order = 100)]
[Route("api/[Controller]")]
public class WareTaskBakService : ControllerBase, IWareTaskBakService, IDynamicApiController, ITransient
{
private readonly IRepository _wareTaskBakRep;
private readonly IRepository _wareTaskSubBak;
public WareTaskBakService(
IRepository wareTaskBakRep,
IRepository wareTaskSubBak
)
{
_wareTaskBakRep = wareTaskBakRep;
_wareTaskSubBak = wareTaskSubBak;
}
///
/// 分页查询历史任务记录
///
///
///
[HttpGet("page")]
public async Task> Page([FromQuery] WareTaskBakSearch input)
{
if (input.ToLocationCode == "A线")
{
input.ToLocationCode = "A01";
}
if (input.ToLocationCode == "B线")
{
input.ToLocationCode = "B01";
}
if (input.ToLocationCode == "C线")
{
input.ToLocationCode = "C01";
}
if (input.FromLocationCode == "A线")
{
input.FromLocationCode = "A01";
}
if (input.FromLocationCode == "B线")
{
input.FromLocationCode = "B01";
}
if (input.FromLocationCode == "C线")
{
input.FromLocationCode = "C01";
}
var wareTaskBaks = await _wareTaskBakRep.DetachedEntities
.Where(!string.IsNullOrEmpty(input.OrderNo), u => u.OrderNo == input.OrderNo)
.Where(!string.IsNullOrEmpty(input.TaskNo), u => u.TaskNo == input.TaskNo)
.Where(!string.IsNullOrEmpty(input.TaskName), u => u.TaskName == input.TaskName)
.Where(input.TaskCategory != null, u => u.TaskCategory == input.TaskCategory)
.Where(input.TaskType != null, u => u.TaskType == input.TaskType)
.Where(input.TaskState != null, u => u.TaskState == input.TaskState)
.Where(!string.IsNullOrEmpty(input.TaskDescribe), u => u.TaskDescribe == input.TaskDescribe)
.Where(input.TaskPriority != null, u => u.TaskPriority == input.TaskPriority)
.Where(!string.IsNullOrEmpty(input.ContainerCode), u => u.ContainerCode == input.ContainerCode)
.Where(!string.IsNullOrEmpty(input.FromLocationCode), u => u.FromLocationCode == input.FromLocationCode)
.Where(!string.IsNullOrEmpty(input.ToLocationCode), u => u.ToLocationCode == input.ToLocationCode)
.Where(input.FinishedTime != null, u => u.FinishedTime == input.FinishedTime)
.Where(input.Lane != null, u => u.Lane == input.Lane)
.Where(input.MoveFlag != null, u => u.MoveFlag == input.MoveFlag)
.Where(!string.IsNullOrEmpty(input.MoveFromLocation), u => u.MoveFromLocation == input.MoveFromLocation)
.Where(!string.IsNullOrEmpty(input.MoveToLocation), u => u.MoveToLocation == input.MoveToLocation)
.Where(!string.IsNullOrEmpty(input.MoveContainerCode), u => u.MoveContainerCode == input.MoveContainerCode)
.Where(input.ContainerType != null, u => u.ContainerType == input.ContainerType)
.Where(!string.IsNullOrEmpty(input.OperationRemark), u => u.OperationRemark == input.OperationRemark)
.OrderBy(PageInputOrder.OrderBuilder(input))
.ProjectToType()
.ToADPagedListAsync(input.PageNo, input.PageSize);
foreach (var item in wareTaskBaks.Rows)
{
if (item.ToLocationCode.StartsWith("A"))
{
item.ToLocationCode = "A线";
}
if (item.ToLocationCode.StartsWith("B"))
{
item.ToLocationCode = "B线";
}
if (item.ToLocationCode.StartsWith("C"))
{
item.ToLocationCode = "C线";
}
if (item.FromLocationCode.StartsWith("A"))
{
item.FromLocationCode = "A线";
}
if (item.FromLocationCode.StartsWith("B"))
{
item.FromLocationCode = "B线";
}
if (item.FromLocationCode.StartsWith("C"))
{
item.FromLocationCode = "C线";
}
}
return wareTaskBaks;
}
///
/// 增加历史任务记录
///
///
///
[HttpPost("add")]
public async Task Add(AddWareTaskBakInput input)
{
var wareTaskBak = input.Adapt();
await _wareTaskBakRep.InsertAsync(wareTaskBak);
}
///
/// 删除历史任务记录
///
///
///
[HttpPost("delete")]
public async Task Delete(DeleteWareTaskBakInput input)
{
var wareTaskBak = await _wareTaskBakRep.FirstOrDefaultAsync(u => u.Id == input.Id);
await _wareTaskBakRep.DeleteAsync(wareTaskBak);
}
///
/// 更新历史任务记录
///
///
///
[HttpPost("edit")]
public async Task Update(UpdateWareTaskBakInput input)
{
var isExist = await _wareTaskBakRep.AnyAsync(u => u.Id == input.Id, false);
if (!isExist) throw Oops.Oh(ErrorCode.D3000);
var wareTaskBak = input.Adapt();
await _wareTaskBakRep.UpdateAsync(wareTaskBak, ignoreNullValues: true);
}
///
/// 获取历史任务记录
///
///
///
[HttpGet("detail")]
public async Task Get([FromQuery] QueryeWareTaskBakInput input)
{
return (await _wareTaskBakRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt();
}
///
/// 获取历史任务记录列表
///
///
///
[HttpGet("list")]
public async Task> List([FromQuery] WareTaskBakInput input)
{
return await _wareTaskBakRep.DetachedEntities.ProjectToType().ToListAsync();
}
///
/// 查看详情
///
///
///
[HttpGet("details")]
public async Task> ManualWare([FromQuery] WmsTaskDetailSearch input)
{
return await _wareTaskSubBak.Where(n => n.TaskId == input.Id).ToListAsync();
}
///
/// 导出Excel
///
/// 筛选条件
///
[HttpPost("download")]
[AllowAnonymous]
public async Task Download([FromBody] WareTaskBakSearch input)
{
if (input.ToLocationCode == "A线")
{
input.ToLocationCode = "A01";
}
if (input.ToLocationCode == "B线")
{
input.ToLocationCode = "B01";
}
if (input.ToLocationCode == "C线")
{
input.ToLocationCode = "C01";
}
if (input.FromLocationCode == "A线")
{
input.FromLocationCode = "A01";
}
if (input.FromLocationCode == "B线")
{
input.FromLocationCode = "B01";
}
if (input.FromLocationCode == "C线")
{
input.FromLocationCode = "C01";
}
var dataRecords = await _wareTaskBakRep.DetachedEntities
.Where(!string.IsNullOrEmpty(input.OrderNo), u => u.OrderNo == input.OrderNo)
.Where(!string.IsNullOrEmpty(input.TaskNo), u => u.TaskNo == input.TaskNo)
.Where(!string.IsNullOrEmpty(input.TaskName), u => u.TaskName == input.TaskName)
.Where(input.TaskCategory != null, u => u.TaskCategory == input.TaskCategory)
.Where(input.TaskType != null, u => u.TaskType == input.TaskType)
.Where(input.TaskState != null, u => u.TaskState == input.TaskState)
.Where(!string.IsNullOrEmpty(input.TaskDescribe), u => u.TaskDescribe == input.TaskDescribe)
.Where(input.TaskPriority != null, u => u.TaskPriority == input.TaskPriority)
.Where(!string.IsNullOrEmpty(input.ContainerCode), u => u.ContainerCode == input.ContainerCode)
.Where(!string.IsNullOrEmpty(input.FromLocationCode), u => u.FromLocationCode == input.FromLocationCode)
.Where(!string.IsNullOrEmpty(input.ToLocationCode), u => u.ToLocationCode == input.ToLocationCode)
.Where(input.FinishedTime != null, u => u.FinishedTime == input.FinishedTime)
.Where(input.Lane != null, u => u.Lane == input.Lane)
.Where(input.MoveFlag != null, u => u.MoveFlag == input.MoveFlag)
.Where(!string.IsNullOrEmpty(input.MoveFromLocation), u => u.MoveFromLocation == input.MoveFromLocation)
.Where(!string.IsNullOrEmpty(input.MoveToLocation), u => u.MoveToLocation == input.MoveToLocation)
.Where(!string.IsNullOrEmpty(input.MoveContainerCode), u => u.MoveContainerCode == input.MoveContainerCode)
.Where(input.ContainerType != null, u => u.ContainerType == input.ContainerType)
.Where(!string.IsNullOrEmpty(input.OperationRemark), u => u.OperationRemark == input.OperationRemark)
.OrderBy(PageInputOrder.OrderBuilder(input))
.ProjectToType().ToListAsync();
var excelBaseResult = new Excel2003Result(dataRecords, "库位表格" + DateTime.Now.ToString("yyyyMMdd"), false, "生产记录");
return File(excelBaseResult.GetExcelStream(), "application/vnd.ms-excel");
}
}
}