using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEA_Core.BaseServices;
|
using WIDESEA_IBasicRepository;
|
using WIDESEA_IBasicService;
|
using WIDESEA_IOutboundRepository;
|
using WIDESEA_IOutboundService;
|
using WIDESEA_IRecordService;
|
using WIDESEA_IStockService;
|
using WIDESEA_Model.Models;
|
using WIDESEA_OutboundRepository;
|
|
namespace WIDESEA_OutboundService
|
{
|
public class MesPPOutboundOrderService : ServiceBase<Dt_MesPPOutboundOrder, IMesPPOutboundOrderRepository>, IMesPPOutboundOrderService
|
{
|
private readonly IBasicRepository _basicRepository;
|
private readonly IStockService _stockService;
|
private readonly IOutStockLockInfoService _outStockLockInfoService;
|
private readonly IBasicService _basicService;
|
private readonly IRecordService _recordService;
|
|
public IMesPPOutboundOrderRepository Repository => BaseDal;
|
|
public MesPPOutboundOrderService(IMesPPOutboundOrderRepository BaseDal, IBasicRepository basicRepository, IStockService stockService, IOutStockLockInfoService outStockLockInfoService, IBasicService basicService, IRecordService recordService) : base(BaseDal)
|
{
|
_basicRepository = basicRepository;
|
_stockService = stockService;
|
_outStockLockInfoService = outStockLockInfoService;
|
_basicService = basicService;
|
_recordService = recordService;
|
}
|
|
//public (List<Dt_StockInfo>, Dt_MesPPOutboundOrder, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) AssignStockOutbound(Dt_MesPPOutboundOrder mesPPOutboundOrder)
|
//{
|
// List<Dt_StockInfo> outStocks = new List<Dt_StockInfo>();
|
|
// List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
|
// List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
|
|
// float originalNeedQuantity = mesPPOutboundOrder.OrderQuantity;
|
|
// float needQuantity = originalNeedQuantity;
|
|
// List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.GetUseableStocks(mesPPOutboundOrder.MaterialCode, "", mesPPOutboundOrder.Details.FirstOrDefault()?.CarrierCode ?? "",mesPPOutboundOrder.WarehouseId);
|
// if (!stockInfos.Any())
|
// {
|
// throw new Exception($"未找到可分配库存");
|
// }
|
// List<Dt_StockInfo> autoAssignStocks = _stockService.StockInfoService.GetOutboundStocks(stockInfos, mesPPOutboundOrder.MaterialCode, needQuantity, out float residueQuantity);
|
// mesPPOutboundOrder.LockQuantity += needQuantity - residueQuantity;
|
// outStocks.AddRange(autoAssignStocks);
|
// float assignQuantity = needQuantity - residueQuantity;
|
|
// float orderQuantity = mesPPOutboundOrder.OrderQuantity;
|
// for (int j = 0; j < autoAssignStocks.Count; j++)
|
// {
|
// float detailAssignQuantity = outStockLockInfos.Where(x => x.MaterielCode == mesPPOutboundOrder.MaterialCode).Sum(x => x.AssignQuantity);//出库订单明细已分配数量
|
|
// float palletAssignQuantity = outStockLockInfos.Where(x => x.MaterielCode == mesPPOutboundOrder.MaterialCode && x.PalletCode == autoAssignStocks[j].PalletCode).Sum(x => x.AssignQuantity);//出库详情已分配数量
|
|
// float palletOutboundQuantity = autoAssignStocks[j].Details.Sum(x => x.OutboundQuantity);
|
// if (palletAssignQuantity < palletOutboundQuantity)//如果出库详情已分配数量小于托盘已分配数量,则可以继续添加该托盘出库信息
|
// {
|
// float orderDetailNeedQuantity = mesPPOutboundOrder.OrderQuantity - detailAssignQuantity;
|
// if (orderDetailNeedQuantity > autoAssignStocks[j].Details.Sum(x => x.OutboundQuantity) - palletAssignQuantity)
|
// {
|
// mesPPOutboundOrder.LockQuantity += autoAssignStocks[j].Details.Sum(x => x.OutboundQuantity) - palletAssignQuantity;
|
// Dt_OutStockLockInfo outStockLockInfo = _outStockLockInfoService.GetOutStockLockInfo(mesPPOutboundOrder, autoAssignStocks[j], autoAssignStocks[j].Details.Sum(x => x.OutboundQuantity) - palletAssignQuantity);
|
// outStockLockInfos.Add(outStockLockInfo);
|
// }
|
// else
|
// {
|
// Dt_OutStockLockInfo outStockLockInfo = _outStockLockInfoService.GetOutStockLockInfo(mesPPOutboundOrder, autoAssignStocks[j], mesPPOutboundOrder.OrderQuantity - mesPPOutboundOrder.LockQuantity);
|
// outStockLockInfos.Add(outStockLockInfo);
|
// mesPPOutboundOrder.LockQuantity = mesPPOutboundOrder.OrderQuantity;
|
// break;
|
// }
|
// }
|
// }
|
// locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(outStocks.Select(x => x.LocationCode).ToList()));
|
|
// return (outStocks, mesPPOutboundOrder, outStockLockInfos, locationInfos);
|
//}
|
|
|
//public (List<Dt_StockInfo>, Dt_MesPPCutOutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) AssignStockOutbound(Dt_MesPPCutOutboundOrder mesPPOutboundOrder, Dt_MesPPCutOutboundOrderDetail mesPPCutOutboundOrderDetail)
|
//{
|
// List<Dt_StockInfo> outStocks = new List<Dt_StockInfo>();
|
|
// List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
|
// List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
|
// //Dt_MesPPCutOutboundOrder outboundOrder = BaseDal.Db.Queryable<Dt_MesPPCutOutboundOrder>().Where(x=>x.Id==mesPPOutboundOrder.OrderId).First();
|
// float originalNeedQuantity = mesPPCutOutboundOrderDetail.OrderQuantity;
|
|
// float needQuantity = originalNeedQuantity;
|
|
// List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.GetUseableStocks(mesPPCutOutboundOrderDetail.MaterielCode, "", mesPPOutboundOrder.WarehouseId);
|
// if (!stockInfos.Any())
|
// {
|
// throw new Exception($"未找到可分配库存");
|
// }
|
// List<Dt_StockInfo> autoAssignStocks = _stockService.StockInfoService.GetOutboundStocks(stockInfos, mesPPCutOutboundOrderDetail.MaterielCode, needQuantity, out float residueQuantity);
|
// mesPPCutOutboundOrderDetail.LockQuantity += needQuantity - residueQuantity;
|
// outStocks.AddRange(autoAssignStocks);
|
// float assignQuantity = needQuantity - residueQuantity;
|
|
// float orderQuantity = mesPPCutOutboundOrderDetail.OrderQuantity;
|
// for (int j = 0; j < autoAssignStocks.Count; j++)
|
// {
|
// float detailAssignQuantity = outStockLockInfos.Where(x => x.MaterielCode == mesPPCutOutboundOrderDetail.MaterielCode).Sum(x => x.AssignQuantity);//出库订单明细已分配数量
|
|
// float palletAssignQuantity = outStockLockInfos.Where(x => x.MaterielCode == mesPPCutOutboundOrderDetail.MaterielCode && x.PalletCode == autoAssignStocks[j].PalletCode).Sum(x => x.AssignQuantity);//出库详情已分配数量
|
|
// float palletOutboundQuantity = autoAssignStocks[j].Details.Sum(x => x.OutboundQuantity);
|
// if (palletAssignQuantity < palletOutboundQuantity)//如果出库详情已分配数量小于托盘已分配数量,则可以继续添加该托盘出库信息
|
// {
|
// float orderDetailNeedQuantity = mesPPCutOutboundOrderDetail.OrderQuantity - detailAssignQuantity;
|
// if (orderDetailNeedQuantity > autoAssignStocks[j].Details.Sum(x => x.OutboundQuantity) - palletAssignQuantity)
|
// {
|
// mesPPCutOutboundOrderDetail.LockQuantity += autoAssignStocks[j].Details.Sum(x => x.OutboundQuantity) - palletAssignQuantity;
|
// Dt_OutStockLockInfo outStockLockInfo = _outStockLockInfoService.GetOutStockLockInfo(mesPPOutboundOrder, mesPPCutOutboundOrderDetail, autoAssignStocks[j], autoAssignStocks[j].Details.Sum(x => x.OutboundQuantity) - palletAssignQuantity);
|
// outStockLockInfos.Add(outStockLockInfo);
|
// }
|
// else
|
// {
|
// Dt_OutStockLockInfo outStockLockInfo = _outStockLockInfoService.GetOutStockLockInfo(mesPPOutboundOrder, mesPPCutOutboundOrderDetail, autoAssignStocks[j], mesPPCutOutboundOrderDetail.OrderQuantity - mesPPCutOutboundOrderDetail.LockQuantity);
|
// outStockLockInfos.Add(outStockLockInfo);
|
// mesPPCutOutboundOrderDetail.LockQuantity = mesPPCutOutboundOrderDetail.OrderQuantity;
|
// break;
|
// }
|
// }
|
// }
|
// locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(outStocks.Select(x => x.LocationCode).ToList()));
|
|
// return (outStocks, mesPPCutOutboundOrderDetail, outStockLockInfos, locationInfos);
|
//}
|
|
}
|
}
|