using Admin.NET.Application.Common.FindEmptyLocationFactory;
using Admin.NET.Application.Common;
using Furion;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using iWare.Wms.Core;
using iWare.Wms.Core.Enum;
using Mapster;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using System.Transactions;
using Microsoft.CodeAnalysis;
using System.Threading.Tasks;
namespace iWare.Wms.Application
{
///
/// 任务管理
///
[ApiDescriptionSettings("仓库作业", Name = "WmsTask", Order = 100)]
[Route("api/[Controller]")]
public class WmsTaskService : IWmsTaskService, IDynamicApiController, ITransient
{
private readonly IRepository _wmsContainerRep;
private readonly IRepository _wmsMaterialRep;
private readonly IRepository _wmsMaterialContainerRep;
private readonly IRepository _wmsAreaRep;
private readonly IRepository _wmsPlaceRep;
private readonly IRepository _wmsTaskRep;
private readonly IRepository _wmsMaterialStockRep;
private readonly IRepository _wmsContainerPlaceRep;
private readonly IRepository _sysUser;
private readonly IRepository _wareSite;
private readonly IRepository _wareTask;
private readonly IRepository _wareTaskSub;
private readonly IRepository _wareTaskBak;
private readonly IRepository _wareTaskSubBak;
private readonly IRepository _v_EmptyLocationRep;
private readonly IRepository _inventoryByContainer;
private readonly IRepository _wmsContainerType;
private readonly IRepository _wareLocationVsContainer;
private readonly IRepository _wmsPart;
public WmsTaskService(
IRepository wmsContainerRep,
IRepository wmsMaterialRep,
IRepository wmsMaterialContainerRep,
IRepository wmsAreaRep,
IRepository wmsPlaceRep,
IRepository wmsTaskRep,
IRepository wmsMaterialStockRep,
IRepository wmsContainerPlaceRep,
IRepository sysUser,
IRepository wareSite,
IRepository wareTask,
IRepository wareTaskSub,
IRepository wareTaskBak,
IRepository wareTaskSubBak,
IRepository v_EmptyLocationRep,
IRepository v_ware_inventory_by_container,
IRepository wmsContainerType,
IRepository wareLocationVsContainer,
IRepository wmsPart
)
{
_wmsContainerRep = wmsContainerRep;
_wmsMaterialRep = wmsMaterialRep;
_wmsMaterialContainerRep = wmsMaterialContainerRep;
_wmsAreaRep = wmsAreaRep;
_wmsPlaceRep = wmsPlaceRep;
_wmsTaskRep = wmsTaskRep;
_wmsMaterialStockRep = wmsMaterialStockRep;
_wmsContainerPlaceRep = wmsContainerPlaceRep;
_sysUser = sysUser;
_wareSite = wareSite;
_wareTask = wareTask;
_wareTaskSub = wareTaskSub;
_wareTaskBak = wareTaskBak;
_wareTaskSubBak = wareTaskSubBak;
_v_EmptyLocationRep = v_EmptyLocationRep;
_inventoryByContainer = v_ware_inventory_by_container;
_wmsContainerType = wmsContainerType;
_wareLocationVsContainer = wareLocationVsContainer;
_wmsPart = wmsPart;
}
///
/// 分页查询任务管理
///
///
///
[HttpGet("page")]
public async Task> Page([FromQuery] WmsTaskSearch input)
{
//var wmsTasks = await _wmsTaskRep.DetachedEntities
// .Where(!string.IsNullOrEmpty(input.Taskno), u => EF.Functions.Like(u.TaskNo, $"%{input.Taskno.Trim()}%"))
// .Where(input.Taskmodel != null, u => u.TaskModel == input.Taskmodel)
// .Where(input.Tasktype != null, u => u.TaskType == input.Tasktype)
// .Where(input.Taskstatus != null, u => u.TaskStatus == input.Taskstatus)
// .Where(!string.IsNullOrEmpty(input.ContainerCode), u => EF.Functions.Like(u.ContainerCode, $"%{input.ContainerCode.Trim()}%"))
// .Where(!string.IsNullOrEmpty(input.Sourceplace), u => EF.Functions.Like(u.SourcePlace, $"%{input.Sourceplace.Trim()}%"))
// .Where(!string.IsNullOrEmpty(input.Toplace), u => EF.Functions.Like(u.ToPlace, $"%{input.Toplace.Trim()}%"))
// .Where(input.Aisle != null, u => u.Aisle == input.Aisle)
// .Where(!string.IsNullOrEmpty(input.AreaName), u => u.AreaName == input.AreaName)
// .OrderBy(PageInputOrder.OrderBuilder(input))
// .ProjectToType()
// .ToADPagedListAsync(input.PageNo, input.PageSize);
var wmsTasks = await _wareTask.DetachedEntities
.Where(!string.IsNullOrEmpty(input.TaskNo), u => EF.Functions.Like(u.TaskNo, $"%{input.TaskNo.Trim()}%"))
.Where(input.TaskCategory != null, u => u.TaskCategory == input.TaskCategory)
.Where(input.TaskState != null, u => u.TaskState == input.TaskState)
.Where(!string.IsNullOrEmpty(input.ContainerCode), u => EF.Functions.Like(u.ContainerCode, $"%{input.ContainerCode.Trim()}%"))
.OrderBy(PageInputOrder.OrderBuilder(input))
.ProjectToType()
.ToADPagedListAsync(input.PageNo, input.PageSize);
return wmsTasks;
}
///
/// 查看详情
///
///
///
[HttpGet("detail")]
public async Task> ManualWare([FromQuery] WmsTaskDetailSearch input)
{
return await _wareTaskSub.Where(n => n.TaskId == input.Id).ToListAsync();
}
///
/// 强制完成
///
///
///
[HttpGet("FinishWare")]
public async Task FinishWare([FromQuery] UpdateFinishTaskDto input)
{
var taskModel = await _wareTask.FirstOrDefaultAsync(p => p.Id == input.Id);
if (taskModel == null)
{
throw Oops.Oh("查询异常");
}
taskModel.TaskState = TaskStateEnum.已完成;
using (var tran = await _wareTask.Database.BeginTransactionAsync())
{
try
{
await _wareTask.UpdateAsync(taskModel);
await tran.CommitAsync();
}
catch
{
await tran.RollbackAsync();
}
}
}
///
/// 更改优先级别
///
///
///
[HttpGet("UpdateTasklevel")]
[UnifyResult(typeof(object))]
public async Task