using AutoMapper;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEA_Common.CommonEnum;
|
using WIDESEA_Common.MaterielEnum;
|
using WIDESEA_Common.OrderEnum;
|
using WIDESEA_Common.StockEnum;
|
using WIDESEA_Common.WareHouseEnum;
|
using WIDESEA_Core;
|
using WIDESEA_Core.BaseRepository;
|
using WIDESEA_Core.BaseServices;
|
using WIDESEA_Core.Helper;
|
using WIDESEA_DTO.ERP;
|
using WIDESEA_IBasicRepository;
|
using WIDESEA_IInboundRepository;
|
using WIDESEA_IInboundService;
|
using WIDESEA_InboundRepository;
|
using WIDESEA_IStockRepository;
|
using WIDESEA_Model.Models;
|
|
namespace WIDESEA_InboundService
|
{
|
public class ReturnBSTOrderService : ServiceBase<Dt_ReturnBSTOrder, IReturnBSTOrderRepository>, IReturnBSTOrderService
|
{
|
public IReturnBSTOrderRepository Repository => BaseDal;
|
private IUnitOfWorkManage _unitOfWorkManage;
|
private IBasicRepository _basicRepository;
|
private IStockInfoRepository _stockInfoRepository;
|
private IReturnBSTOrderDetailRepository _returnBSTOrderDetailRepository;
|
private IMapper _mapper;
|
|
public ReturnBSTOrderService(IReturnBSTOrderRepository BaseDal,IUnitOfWorkManage unitOfWorkManage,IBasicRepository basicRepository, IStockInfoRepository stockInfoRepository, IReturnBSTOrderDetailRepository returnBSTOrderDetailRepository, IMapper mapper) : base(BaseDal)
|
{
|
_unitOfWorkManage = unitOfWorkManage;
|
_basicRepository = basicRepository;
|
_stockInfoRepository = stockInfoRepository;
|
_returnBSTOrderDetailRepository = returnBSTOrderDetailRepository;
|
_mapper = mapper;
|
}
|
/// <summary>
|
/// 接收博思通退料信息
|
/// </summary>
|
/// <returns></returns>
|
public WebResponseContent ReceiveReturnOrder(List<BSTReturnOrderDTO> bSTReturnOrderDTOs)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
List<Dt_StockInfo> ExiststockInfos = _stockInfoRepository.QueryData(x=>x.WarehouseId==WarehouseEnum.LLDOldCache.ObjToInt());
|
//新增
|
List<BSTReturnOrderDTO> bSTReturnOrderDTOsAdd = bSTReturnOrderDTOs.Where(x => x.Way == 1).ToList();
|
List<BSTReturnOrderDTOItem>? bSTReturnOrderDTOItemsAdd = null;
|
//修改
|
List<BSTReturnOrderDTO> bSTReturnOrderDTOsUpdate = bSTReturnOrderDTOs.Where(x => x.Way == 2).ToList();
|
List<BSTReturnOrderDTOItem>? bSTReturnOrderDTOItemsUp = null;
|
//获取所有物料
|
List<Dt_MaterielInfo> materielInfos = _basicRepository.MaterielInfoRepository.QueryData(x => x.WarehouseId == WarehouseEnum.LLDYL.ObjToInt() && x.MaterielInvOrgId == MaterielInvOrgEnum.老厂.ObjToInt() && x.MaterialSourceId != 0);
|
if (bSTReturnOrderDTOsAdd!=null && bSTReturnOrderDTOsAdd.Count>0)
|
{
|
bSTReturnOrderDTOItemsAdd = bSTReturnOrderDTOsAdd.SelectMany(x => x.BstPaperWreturnDetails).ToList();
|
}
|
if (bSTReturnOrderDTOsUpdate != null && bSTReturnOrderDTOsUpdate.Count > 0)
|
{
|
bSTReturnOrderDTOItemsUp = bSTReturnOrderDTOsUpdate.SelectMany(x => x.BstPaperWreturnDetails).ToList();
|
}
|
List<Dt_StockInfo> stockInfosUpdate = new List<Dt_StockInfo>();
|
//新增
|
if (bSTReturnOrderDTOItemsAdd!=null && bSTReturnOrderDTOItemsAdd.Count > 0)
|
{
|
//判断是否存在物料
|
BSTReturnOrderDTOItem? bSTReturnOrderDTOItem = bSTReturnOrderDTOItemsAdd.FirstOrDefault(x => !materielInfos.Select(x => x.MaterialSourceId).Contains(x.MaterialId));
|
if (bSTReturnOrderDTOItem != null)
|
{
|
return content.Error($"退料{nameof(bSTReturnOrderDTOItem.Barcode)}:{bSTReturnOrderDTOItem.Barcode}物料{nameof(BSTReturnOrderDTOItem.MaterialId)}:{bSTReturnOrderDTOItem.MaterialId}不存在");
|
}
|
foreach (var item in bSTReturnOrderDTOItemsAdd)
|
{
|
//将不存在的库存跳过
|
Dt_StockInfo? stockReturn = ExiststockInfos.FirstOrDefault(x => x.PalletCode == item.Barcode);
|
if (stockReturn == null)
|
{
|
continue;
|
}
|
if (bSTReturnOrderDTOItemsUp!=null && bSTReturnOrderDTOItemsUp.FirstOrDefault(x => x.Barcode == item.Barcode) != null)
|
{
|
continue;
|
}
|
stockReturn.MaterielId = item.MaterialId;
|
stockReturn.MaterielCode = item.MaterialNo;
|
stockReturn.MaterielWide = item.W;
|
stockReturn.MaterielThickness = item.Thick;
|
stockReturn.MaterielWeight = item.Qty;
|
stockReturn.StockLength = item.ProcurementLength;
|
stockReturn.StockOutLength = 0;
|
stockReturn.IsPick = WhetherEnum.False.ObjToInt();
|
stockReturn.IsFull = WhetherEnum.True.ObjToInt();
|
stockReturn.StockStatus = StockStatusEmun.老厂退料暂存.ObjToInt();
|
stockInfosUpdate.Add(stockReturn);
|
}
|
}
|
//更新
|
if (bSTReturnOrderDTOItemsUp != null && bSTReturnOrderDTOItemsUp.Count > 0)
|
{
|
//获取对应库存修正库存数量
|
List<Dt_StockInfo> returnStockinfos = ExiststockInfos.Where(x => bSTReturnOrderDTOItemsUp.Select(x => x.Barcode).Contains(x.PalletCode)).ToList();
|
foreach (var item in bSTReturnOrderDTOItemsUp)
|
{
|
Dt_StockInfo? returnUpdate = stockInfosUpdate.FirstOrDefault(x => x.PalletCode == item.Barcode);
|
//如果修改已存在,在原基础上更新
|
if (returnUpdate != null)
|
{
|
//更新
|
returnUpdate.MaterielThickness = item.Thick;
|
returnUpdate.MaterielWeight = item.Qty;
|
returnUpdate.StockLength = item.ProcurementLength;
|
}
|
else
|
{
|
//将不存在的库存跳过
|
Dt_StockInfo? stockReturn = ExiststockInfos.FirstOrDefault(x => x.PalletCode == item.Barcode);
|
if (stockReturn == null)
|
{
|
continue;
|
}
|
stockReturn.MaterielId = item.MaterialId;
|
stockReturn.MaterielCode = item.MaterialNo;
|
stockReturn.MaterielWide = item.W;
|
stockReturn.MaterielThickness = item.Thick;
|
stockReturn.MaterielWeight = item.Qty;
|
stockReturn.StockLength = item.ProcurementLength;
|
stockReturn.StockOutLength = 0;
|
stockReturn.IsPick = WhetherEnum.False.ObjToInt();
|
stockReturn.IsFull = WhetherEnum.True.ObjToInt();
|
stockReturn.StockStatus = StockStatusEmun.老厂退料暂存.ObjToInt();
|
stockInfosUpdate.Add(stockReturn);
|
}
|
}
|
}
|
//更新数据
|
_unitOfWorkManage.BeginTran();
|
_stockInfoRepository.UpdateData(stockInfosUpdate);
|
_unitOfWorkManage.CommitTran();
|
content.OK("接收成功");
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
}
|
}
|