using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using Admin.NET.Core;
using Yitter.IdGenerator;
namespace Admin.NET.Application
{
///
/// Pda组盘出库
///
[ApiDescriptionSettings("Pda服务", Name = "GroupDiskOutWarehouse", Order = 100)]
[Route("api/[Controller]")]
public class GroupDiskOutWarehouseService : IDynamicApiController, ITransient
{
private readonly IRepository _wmsOrderDetailsRep;
private readonly IRepository _lesPackWarehouseRep;
private readonly IRepository _wmsTaskRep;
private readonly IRepository _wmsPlaceRep;
private readonly IRepository _wmsAreaRep;
private readonly IRepository _wmsOrderTypeRep;
private readonly IRepository _wmsMaterialContainerRep;
private readonly IRepository _wmsContainerRep;
private readonly IRepository _wmsContainerPlaceRep;
private readonly IRepository _wmsMaterialStockRep;
///
/// 构造函数
///
public GroupDiskOutWarehouseService(
IRepository wmsOrderDetailsRep,
IRepository lesPackWarehouseRep,
IRepository wmsTaskRep,
IRepository wmsPlaceRep,
IRepository wmsAreaRep,
IRepository wmsOrderTypeRep,
IRepository wmsMaterialContainerRep,
IRepository wmsContainerRep,
IRepository wmsContainerPlaceRep,
IRepository wmsMaterialStockRep
)
{
_wmsOrderDetailsRep = wmsOrderDetailsRep;
_lesPackWarehouseRep = lesPackWarehouseRep;
_wmsTaskRep = wmsTaskRep;
_wmsPlaceRep = wmsPlaceRep;
_wmsAreaRep = wmsAreaRep;
_wmsOrderTypeRep = wmsOrderTypeRep;
_wmsMaterialContainerRep = wmsMaterialContainerRep;
_wmsContainerRep = wmsContainerRep;
_wmsContainerPlaceRep = wmsContainerPlaceRep;
_wmsMaterialStockRep = wmsMaterialStockRep;
}
/////
///// 根据出库口获取码垛数据
/////
/////
/////
//[HttpGet("GetPackInfomation")]
//public async Task GetPackInfomation([FromQuery] GetPackInfomationInput input)
//{
// //根据出库口获取打包表数据
// var lesPackWarehouseList = await _lesPackWarehouseRep.DetachedEntities
// .Where(u => u.OutputEntrance == input.OutputEntrance && u.LesPackState == LesPackState.WEICHUKU)
// .ToListAsync();
// if (lesPackWarehouseList.Count==0) throw Oops.Oh("暂无码垛信息!");
// //if(lesPackWarehouseList.Select(p=>p.OrderNo).Count()>=2) throw Oops.Oh("码垛信息存在多条!请到PC端进行处理!");
// //获取当前出库单据中执行中单据明细
// var wmsOrderDetailList = await _wmsOrderDetailsRep
// .Where(u=>u.WareOrder.OrderLargeCategory== 408734100951109 && u.WareOrder.ExitPort==input.OutputEntrance
// && lesPackWarehouseList.Select(n=>n.MaterialNo).ToList().Contains(u.MaterialNo)).ProjectToType().ToListAsync();
// if (wmsOrderDetailList.Count == 0) throw Oops.Oh("暂无出库单据!");
// List groupDiskOutWarehouseList = new List();//打包信息list
// foreach (var item in wmsOrderDetailList)
// {
// GroupDiskOutWarehouse groupDiskOutWarehouse = new GroupDiskOutWarehouse();
// groupDiskOutWarehouse.MaterialNo = item.MaterialNo;
// groupDiskOutWarehouse.Long = item.Long;
// groupDiskOutWarehouse.Wide = item.Wide;
// groupDiskOutWarehouse.High = item.High;
// groupDiskOutWarehouseList.Add(groupDiskOutWarehouse);
// }
// return new GroupDiskOutWarehouseOutput()
// {
// OrderNo = wmsOrderDetailList.FirstOrDefault().WareOrder.OrderNo,
// OrderSubclass = (await _wmsOrderTypeRep.FirstOrDefaultAsync(u => u.Id == wmsOrderDetailList.FirstOrDefault().WareOrder.OrderSubclass)).Name,
// GroupDiskOutWarehouseList = groupDiskOutWarehouseList
// };
//}
/////
///// 确认出库
/////
/////
/////
//[HttpPost("Pack")]
//[UnitOfWork]
//public async Task PackOutWarehouse([FromBody] PackOutWarehouseInput input)
//{
// if (input.PackCode == null) throw Oops.Oh("打包标签不能为空!");
// if (input.MaterialNoList.Count == 0) throw Oops.Oh("物料码不能为空!");
// //循环物料码
// foreach (var item in input.MaterialNoList)
// {
// //更改打包表中物料状态
// var lesPackWarehouse = await _lesPackWarehouseRep.FirstOrDefaultAsync(u => u.MaterialNo == item.MaterialNo && u.LesPackState == LesPackState.WEICHUKU);
// if (lesPackWarehouse == null) throw Oops.Oh("打包表中不存在此物料!");
// lesPackWarehouse.PackCode = input.PackCode;
// lesPackWarehouse.LesPackState = LesPackState.ZHUANYIKU;
// await _lesPackWarehouseRep.UpdateAsync(lesPackWarehouse);
// //更改单据明细的状态
// var wmsOrderDetail = await _wmsOrderDetailsRep.FirstOrDefaultAsync
// (u => u.MaterialNo == item.MaterialNo && u.WareOrder.OrderLargeCategory == 408734100951109);
// if (wmsOrderDetail == null) throw Oops.Oh("单据明细中不存在此物料!");
// wmsOrderDetail.OrderStatus = OrderDetailsStatusEnum.WANCHENG;
// await _lesPackWarehouseRep.UpdateAsync(lesPackWarehouse);
// //更改任务状态
// var wmsTask = await _wmsTaskRep.FirstOrDefaultAsync
// (u => u.OrderDetailsId == wmsOrderDetail.Id && u.TaskStatus == TaskStatusEnum.ZHIXINGZHONG
// && u.TaskType == TaskType.CHUKU);
// if (wmsTask == null) throw Oops.Oh("任务不存在!");
// wmsTask.TaskStatus = TaskStatusEnum.WANCHENG;
// await _wmsTaskRep.UpdateAsync(wmsTask);
// }
// //标签码当托盘码使用
// var oldwmsMaterialContainerList = await _wmsMaterialContainerRep
// .Where(p => p.ContainerCode == input.PackCode && p.BindStatus == CommonStatus.ENABLE).ToListAsync();
// if (oldwmsMaterialContainerList.Count > 0)
// {
// foreach (var item in oldwmsMaterialContainerList)
// {
// await _wmsMaterialContainerRep.DeleteAsync(item);
// }
// }
// //组盘单据 默认空托单据
// var orderNo = "N/A";
// if (input.MaterialNoList.Count > 0) orderNo =YitIdHelper.NextId().ToString();
// //新增组盘数据
// foreach (var item in input.MaterialNoList)
// {
// //获取明细
// var wmsOrderDetail = await _wmsOrderDetailsRep.FirstOrDefaultAsync
// (u => u.MaterialNo == item.MaterialNo && u.WareOrder.OrderLargeCategory == 408734100951109);
// if (wmsOrderDetail == null) throw Oops.Oh("单据信息异常!"+item.MaterialNo);
// WmsMaterialContainer bindentranceModel = new WmsMaterialContainer();
// bindentranceModel.ContainerCode = input.PackCode;
// bindentranceModel.ContainerId = 405636578041925;
// bindentranceModel.MaterialNo = item.MaterialNo;
// bindentranceModel.MaterialBatch = wmsOrderDetail.Batch;
// bindentranceModel.MaterialSpec = wmsOrderDetail.Long.ToString() + "*" + wmsOrderDetail.Wide.ToString() + "*" + wmsOrderDetail.High.ToString();
// bindentranceModel.BindQuantity = 1;
// bindentranceModel.OrderDetailsId = wmsOrderDetail.Id;
// bindentranceModel.MaterialDensity = wmsOrderDetail.MaterialDensity;
// bindentranceModel.BindStatus = CommonStatus.ENABLE;
// bindentranceModel.OrderNo = orderNo;
// bindentranceModel.MaterialName = "N/A";
// await _wmsMaterialContainerRep.InsertNowAsync(bindentranceModel);
// }
// //获取转移库库位
// var zyPlaceModel = await _wmsPlaceRep.DetachedEntities.Where(p => p.WmsArea.AreaType == AreaType.ZHUANYIKU
// && p.Islock == YesOrNot.N && p.PlaceStatus == PlaceStatus.KONGXIAN).FirstOrDefaultAsync();
// //创建任务 目前人工转移无需创建任务
// //创建托盘库位关系表
// var wmsContainerPlaceModel = new WmsContainerPlace()
// {
// PlaceId = zyPlaceModel.Id,
// PlaceCode = zyPlaceModel.PlaceCode,
// ContainerId = 405636578041925, //给予一个特定的值
// ContainerCode = input.PackCode,
// ContainerPlaceStatus = CommonStatus.ENABLE
// };
// await _wmsContainerPlaceRep.InsertAsync(wmsContainerPlaceModel);
// //更新库存
// var wmsMaterialContainerList = await _wmsMaterialContainerRep.DetachedEntities
// .Where(p => p.OrderNo == orderNo && p.BindStatus == CommonStatus.ENABLE).ProjectToType().ToListAsync();
// //物料入库
// foreach (var item in wmsMaterialContainerList)
// {
// var StockModel = await _wmsMaterialStockRep
// .Where(p => p.ContainerCode == input.PackCode
// && p.MaterialName == item.MaterialName && p.MaterialNo == item.MaterialNo && p.MaterialBatch == item.MaterialBatch ).FirstOrDefaultAsync();
// if (StockModel != null)
// {
// StockModel.MaterialDensity = item.MaterialDensity;
// StockModel.PlaceCode = zyPlaceModel.PlaceCode;
// StockModel.AreaId = zyPlaceModel.AreaId;
// StockModel.StockNumber = item.BindQuantity;
// await _wmsMaterialStockRep.UpdateAsync(StockModel);
// }
// else
// {
// StockModel = new WmsMaterialStock()
// {
// MaterialNo = item.MaterialNo,
// //MaterialType = item.MaterialType,
// MaterialName = item.MaterialName,
// MaterialSpec = item.MaterialSpec,
// MaterialBatch = item.MaterialBatch,
// MaterialDensity = item.MaterialDensity,
// //InspectionMethod = item.WmsMaterial.InspectionMethod,
// //UnitType = item.WmsMaterial.UnitType,
// //UnitNo = item.WmsMaterial.UnitNo,
// StockNumber = item.BindQuantity,
// PlaceCode = zyPlaceModel.PlaceCode,
// ContainerCode = input.PackCode,
// AreaId = zyPlaceModel.AreaId,
// };
// await _wmsMaterialStockRep.InsertAsync(StockModel);
// }
// }
// //更新库位
// zyPlaceModel.PlaceStatus = PlaceStatus.CUNHUO;
// await _wmsPlaceRep.UpdateAsync(zyPlaceModel);
//}
}
}