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<Dt_OutStockLockInfo, IOutStockLockInfoRepository>, 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<Dt_OutStockLockInfo> GetOutStockLockInfos(Dt_OutboundOrder outboundOrder, Dt_OutboundOrderDetail outboundOrderDetail, List<Dt_StockInfo> outStocks, int? taskNum = null)
|
{
|
List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
|
|
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,
|
ProductionDate = item.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).FirstOrDefault()?.ProductionDate,
|
EffectiveDate = item.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).FirstOrDefault()?.EffectiveDate
|
|
};
|
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,
|
ProductionDate = outStock.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).FirstOrDefault()?.ProductionDate,
|
EffectiveDate = outStock.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).FirstOrDefault()?.EffectiveDate
|
};
|
|
return outStockLockInfo;
|
}
|
/// <summary>
|
/// PP大卷出库
|
/// </summary>
|
/// <param name="mesOutboundOrder"></param>
|
/// <param name="outStock"></param>
|
/// <param name="assignQuantity"></param>
|
/// <param name="taskNum"></param>
|
/// <returns></returns>
|
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,
|
ProductionDate = outStock.Details.Where(x => x.MaterielCode == mesOutboundOrder.MaterialCode).FirstOrDefault()?.ProductionDate,
|
EffectiveDate = outStock.Details.Where(x => x.MaterielCode == mesOutboundOrder.MaterialCode).FirstOrDefault()?.EffectiveDate
|
|
};
|
|
return outStockLockInfo;
|
}
|
/// <summary>
|
/// PP小卷出库
|
/// </summary>
|
/// <param name="mesPPCutOutboundOrderDetail"></param>
|
/// <param name="outStock"></param>
|
/// <param name="assignQuantity"></param>
|
/// <param name="taskNum"></param>
|
/// <returns></returns>
|
public List<Dt_OutStockLockInfo> GetOutStockLockInfos(Dt_MesPPCutOutboundOrder mesPPCutOutboundOrder, Dt_MesPPCutOutboundOrderDetail mesPPCutOutboundOrderDetail, List<Dt_StockInfo> outStock, int? taskNum = null)
|
{
|
List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
|
|
foreach (var item in outStock)
|
{
|
Dt_OutStockLockInfo outStockLockInfo = new Dt_OutStockLockInfo()
|
{
|
PalletCode = item.PalletCode,
|
AssignQuantity = item.Details.Where(x => x.MaterielCode == mesPPCutOutboundOrderDetail.MaterielCode).Sum(x => x.OutboundQuantity),
|
MaterielCode = mesPPCutOutboundOrderDetail.MaterielCode,
|
BatchNo = item.Details.FirstOrDefault().BatchNo,
|
LocationCode = item.LocationCode,
|
MaterielName = mesPPCutOutboundOrderDetail.MaterielName,
|
OrderDetailId = mesPPCutOutboundOrderDetail.Id,
|
OrderNo = mesPPCutOutboundOrder.OrderNo,
|
OrderType = mesPPCutOutboundOrder.OrderType,
|
OriginalQuantity = item.Details.Where(x => x.MaterielCode == mesPPCutOutboundOrderDetail.MaterielCode).Sum(x => x.StockQuantity),
|
Status = taskNum == null ? OutLockStockStatusEnum.已分配.ObjToInt() : OutLockStockStatusEnum.出库中.ObjToInt(),
|
StockId = item.Id,
|
TaskNum = taskNum,
|
OrderQuantity = mesPPCutOutboundOrderDetail.OrderQuantity,
|
Unit = mesPPCutOutboundOrderDetail.Unit,
|
ProductionDate = item.Details.Where(x => x.MaterielCode == mesPPCutOutboundOrderDetail.MaterielCode).FirstOrDefault()?.ProductionDate,
|
EffectiveDate = item.Details.Where(x => x.MaterielCode == mesPPCutOutboundOrderDetail.MaterielCode).FirstOrDefault()?.EffectiveDate
|
};
|
outStockLockInfos.Add(outStockLockInfo);
|
}
|
|
return outStockLockInfos;
|
}
|
|
public Dt_OutStockLockInfo GetOutStockLockInfo(Dt_MesPPOutboundOrder mesPPOutboundOrder, Dt_StockInfo outStock, float assignQuantity, int? taskNum = null)
|
{
|
|
Dt_OutStockLockInfo outStockLockInfo = new Dt_OutStockLockInfo()
|
{
|
PalletCode = outStock.PalletCode,
|
AssignQuantity = assignQuantity,
|
MaterielCode = mesPPOutboundOrder.MaterialCode,
|
BatchNo = outStock.Details.FirstOrDefault()?.BatchNo ?? "",
|
LocationCode = outStock.LocationCode,
|
MaterielName = mesPPOutboundOrder.MaterialName,
|
OrderDetailId = mesPPOutboundOrder.Id,
|
OrderNo = mesPPOutboundOrder.OrderNo,
|
OrderType = mesPPOutboundOrder.OrderType,
|
OriginalQuantity = outStock.Details.Where(x => x.MaterielCode == mesPPOutboundOrder.MaterialCode).Sum(x => x.StockQuantity),
|
Status = taskNum == null ? OutLockStockStatusEnum.已分配.ObjToInt() : OutLockStockStatusEnum.出库中.ObjToInt(),
|
StockId = outStock.Id,
|
TaskNum = taskNum,
|
OrderQuantity = mesPPOutboundOrder.OrderQuantity,
|
Unit = mesPPOutboundOrder.Unit,
|
ProductionDate = outStock.Details.Where(x => x.MaterielCode == mesPPOutboundOrder.MaterialCode).FirstOrDefault()?.ProductionDate,
|
EffectiveDate = outStock.Details.Where(x => x.MaterielCode == mesPPOutboundOrder.MaterialCode).FirstOrDefault()?.EffectiveDate
|
};
|
|
return outStockLockInfo;
|
}
|
|
public List<Dt_OutStockLockInfo> OutStockLockInfos(string OrderNo)
|
{
|
return BaseDal.QueryData(x => x.OrderNo == OrderNo);
|
}
|
|
public List<Dt_OutStockLockInfo> GetByOrderDetailId(int orderDetailId, OutLockStockStatusEnum? outStockStatus)
|
{
|
return BaseDal.QueryData(x => x.OrderDetailId == orderDetailId && outStockStatus == null ? true : x.Status == outStockStatus.ObjToInt());
|
}
|
public List<Dt_OutStockLockInfo> GetByMesOrderDetail(string taskNo)
|
{
|
return BaseDal.QueryData(x => x.OrderNo == taskNo);
|
}
|
|
public List<Dt_OutStockLockInfo> GetStockOutboundOrder(SaveModel saveModel)
|
{
|
try
|
{
|
var palletCode = saveModel.MainData["barcode"].ToString();
|
var warehouseId = saveModel.MainData["warehouseId"].ObjToInt();
|
Dt_StockInfo stockInfo = BaseDal.Db.Queryable<Dt_StockInfo>().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<Dt_OutStockLockInfo> stockLockInfos = BaseDal.QueryData(x => x.StockId == stockInfo.Id && x.Status == OutLockStockStatusEnum.出库完成.ObjToInt());
|
return stockLockInfos;
|
}
|
catch (Exception ex)
|
{
|
return null;
|
}
|
}
|
}
|
}
|