using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.StockEnum; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_IOutboundRepository; using WIDESEA_IRecordService; using WIDESEA_IStockService; using WIDESEA_Model.Models; namespace WIDESEA_IOutboundService { public partial class OutStockLockInfoService : ServiceBase, IOutStockLockInfoService { private readonly IStockService _stockService; private readonly IRecordService _recordService; public IOutStockLockInfoRepository Repository => BaseDal; public IUnitOfWorkManage _unitOfWorkManage; public OutStockLockInfoService(IOutStockLockInfoRepository BaseDal, IStockService stockService, IRecordService recordService, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal) { _recordService = recordService; _stockService = stockService; _unitOfWorkManage = unitOfWorkManage; } public List GetOutStockLockInfos(Dt_OutboundOrder outboundOrder, Dt_OutboundOrderDetail outboundOrderDetail, List outStocks, int? taskNum = null) { List outStockLockInfos = new List(); foreach (var item in outStocks) { Dt_OutStockLockInfo outStockLockInfo = new Dt_OutStockLockInfo() { PalletCode = item.PalletCode, AssignQuantity = item.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).Sum(x => x.OutboundQuantity), MaterielCode = outboundOrderDetail.MaterielCode, BatchNo = outboundOrderDetail.BatchNo, LocationCode = item.LocationCode, MaterielName = outboundOrderDetail.MaterielName, OrderDetailId = outboundOrderDetail.Id, OrderNo = outboundOrder.OrderNo, OrderType = outboundOrder.OrderType, OriginalQuantity = item.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).Sum(x => x.StockQuantity), Status = taskNum == null ? OutLockStockStatusEnum.已分配.ObjToInt() : OutLockStockStatusEnum.出库中.ObjToInt(), StockId = item.Id, TaskNum = taskNum }; outStockLockInfos.Add(outStockLockInfo); } return outStockLockInfos; } public Dt_OutStockLockInfo GetOutStockLockInfo(Dt_OutboundOrder outboundOrder, Dt_OutboundOrderDetail outboundOrderDetail, Dt_StockInfo outStock, float assignQuantity, int? taskNum = null) { Dt_OutStockLockInfo outStockLockInfo = new Dt_OutStockLockInfo() { PalletCode = outStock.PalletCode, AssignQuantity = assignQuantity, MaterielCode = outboundOrderDetail.MaterielCode, BatchNo = outboundOrderDetail.BatchNo ?? outStock.Details.FirstOrDefault()?.BatchNo, LocationCode = outStock.LocationCode, MaterielName = outboundOrderDetail.MaterielName, OrderDetailId = outboundOrderDetail.Id, OrderNo = outboundOrder.OrderNo, OrderType = outboundOrder.OrderType, OriginalQuantity = outStock.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).Sum(x => x.StockQuantity), Status = taskNum == null ? OutLockStockStatusEnum.已分配.ObjToInt() : OutLockStockStatusEnum.出库中.ObjToInt(), StockId = outStock.Id, TaskNum = taskNum, OrderQuantity = outboundOrderDetail.OrderQuantity, Unit = outboundOrderDetail.Unit, }; return outStockLockInfo; } public Dt_OutStockLockInfo GetOutStockLockInfo(Dt_MesOutboundOrder mesOutboundOrder, Dt_StockInfo outStock, float assignQuantity, int? taskNum = null) { Dt_OutStockLockInfo outStockLockInfo = new Dt_OutStockLockInfo() { PalletCode = outStock.PalletCode, AssignQuantity = assignQuantity, MaterielCode = mesOutboundOrder.MaterialCode, BatchNo = outStock.Details.FirstOrDefault()?.BatchNo ?? "", LocationCode = outStock.LocationCode, MaterielName = mesOutboundOrder.MaterialName, OrderDetailId = mesOutboundOrder.Id, OrderNo = mesOutboundOrder.OrderNo, OrderType = mesOutboundOrder.OrderType, OriginalQuantity = outStock.Details.Where(x => x.MaterielCode == mesOutboundOrder.MaterialCode).Sum(x => x.StockQuantity), Status = taskNum == null ? OutLockStockStatusEnum.已分配.ObjToInt() : OutLockStockStatusEnum.出库中.ObjToInt(), StockId = outStock.Id, TaskNum = taskNum, OrderQuantity = mesOutboundOrder.OrderQuantity, Unit = mesOutboundOrder.Unit }; return outStockLockInfo; } public List OutStockLockInfos(string OrderNo) { return BaseDal.QueryData(x => x.OrderNo == OrderNo); } public List GetByOrderDetailId(int orderDetailId, OutLockStockStatusEnum? outStockStatus) { return BaseDal.QueryData(x => x.OrderDetailId == orderDetailId && outStockStatus == null ? true : x.Status == outStockStatus.ObjToInt()); } public List GetStockOutboundOrder(SaveModel saveModel) { try { var palletCode = saveModel.MainData["barcode"].ToString(); var warehouseId = saveModel.MainData["warehouseId"].ObjToInt(); Dt_StockInfo stockInfo = BaseDal.Db.Queryable().Where(x => x.PalletCode == palletCode && x.WarehouseId == warehouseId).Includes(x => x.Details).First(); if (stockInfo.StockStatus != StockStatusEmun.出库完成.ObjToInt()) { throw new Exception($"该托盘还未出库完成"); } if (stockInfo == null) { throw new Exception($"未找到库存信息"); } Dt_StockInfoDetail stockInfoDetail = stockInfo.Details.FirstOrDefault(); if (stockInfoDetail == null) { throw new Exception($"未找到库存详情"); } List stockLockInfos = BaseDal.QueryData(x => x.StockId == stockInfo.Id && x.Status == OutLockStockStatusEnum.出库完成.ObjToInt()); return stockLockInfos; } catch (Exception ex) { return null; } } } }