using AutoMapper;
|
using Castle.Core.Resource;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
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.CodeConfigEnum;
|
using WIDESEA_Core.Enums;
|
using WIDESEA_Core.Helper;
|
using WIDESEA_DTO.ERP;
|
using WIDESEA_External.ERPService;
|
using WIDESEA_External.Model;
|
using WIDESEA_IBasicRepository;
|
using WIDESEA_IBasicService;
|
using WIDESEA_IOutboundRepository;
|
using WIDESEA_IOutboundService;
|
using WIDESEA_IRecordService;
|
using WIDESEA_IStockRepository;
|
using WIDESEA_IStockService;
|
using WIDESEA_Model.Models;
|
|
namespace WIDESEA_OutboundService
|
{
|
public partial class ProOutOrderService : ServiceBase<Dt_ProOutOrder, IProOutOrderRepository>, IProOutOrderService
|
{
|
private readonly IUnitOfWorkManage _unitOfWorkManage;
|
private readonly IBasicRepository _basicRepository;
|
private readonly IMapper _mapper;
|
private readonly IStockRepository _stockRepository;
|
private readonly IOutboundRepository _outboundRepository;
|
private readonly IOutboundOrderService _outboundOrderService;
|
private readonly IInvokeERPService _invokeERPService;
|
|
public IProOutOrderRepository Repository => BaseDal;
|
|
public ProOutOrderService(IProOutOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository, IMapper mapper, IStockRepository stockRepository, IOutboundRepository outboundRepository, IOutboundOrderService outboundOrderService,IInvokeERPService invokeERPService) : base(BaseDal)
|
{
|
_unitOfWorkManage = unitOfWorkManage;
|
_basicRepository = basicRepository;
|
_mapper = mapper;
|
_stockRepository = stockRepository;
|
_outboundRepository = outboundRepository;
|
_outboundOrderService = outboundOrderService;
|
_invokeERPService = invokeERPService;
|
}
|
/// <summary>
|
/// 接收ERP成品出库单
|
/// </summary>
|
/// <returns></returns>
|
public WebResponseContent ProductDeliveryOrder(ErpProOutOrderDTO outOrderDTO)
|
{
|
try
|
{
|
return outOrderDTO.Way switch
|
{
|
1 => AddDeliveryOrder(outOrderDTO),
|
2 => UpdateDeliveryOrder(outOrderDTO),
|
3 => DeleteDeliveryOrder(outOrderDTO),
|
_ => WebResponseContent.Instance.Error($"操作类型不存在,Way:{outOrderDTO.Way}"),
|
};
|
}
|
catch (Exception ex)
|
{
|
return WebResponseContent.Instance.Error(ex.Message);
|
}
|
}
|
/// <summary>
|
/// 新增成品出库单
|
/// </summary>
|
/// <returns></returns>
|
public WebResponseContent AddDeliveryOrder(ErpProOutOrderDTO outOrderDTO)
|
{
|
WebResponseContent content=new WebResponseContent();
|
try
|
{
|
if (BaseDal.QueryFirst(x => x.ProOutOrderNo == outOrderDTO.OrderNo) != null)
|
{
|
return content.Error($"出库单号{outOrderDTO.OrderNo}已存在!");
|
}
|
Dt_Warehouse warehouse=null;
|
List<Dt_CustomerInfo> customerInfos = _basicRepository.CustomerInfoRepository.QueryData();
|
if (outOrderDTO.OType==1 && string.IsNullOrEmpty(outOrderDTO.WaType))
|
{
|
warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseCode==WarehouseEnum.HA71.ToString());
|
}
|
else if (outOrderDTO.OType==2)
|
{
|
warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString());
|
}
|
List<Dt_ProOutOrderDetail> proOutOrderDetails = new List<Dt_ProOutOrderDetail>();
|
foreach (var item in outOrderDTO.OrderDetails)
|
{
|
//判断客户是否存在
|
Dt_CustomerInfo? customerInfo = customerInfos.Where(x=>x.Code== item.Customer).FirstOrDefault();
|
if (customerInfo==null)
|
{
|
return content.Error($"客户{item.Customer}不存在!");
|
}
|
proOutOrderDetails.Add(_mapper.Map<Dt_ProOutOrderDetail>(item));
|
}
|
Dt_ProOutOrder proOutOrder= new Dt_ProOutOrder()
|
{
|
ProOutOrderNo= outOrderDTO.OrderNo,
|
WarehouseId= warehouse.WarehouseId,
|
ProOrderType= outOrderDTO.OType,
|
ProOrderStatus=OutOrderStatusEnum.未开始.ObjToInt(),
|
PlantShipDate= outOrderDTO.PlantShipDate.ObjToDate(),
|
Remark= outOrderDTO.Note,
|
Details= proOutOrderDetails
|
};
|
Db.InsertNav(proOutOrder).Include(x => x.Details).ExecuteCommand();
|
content.OK("成功");
|
}
|
catch (Exception ex)
|
{
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
/// <summary>
|
/// 更新成品出库单
|
/// </summary>
|
/// <returns></returns>
|
public WebResponseContent UpdateDeliveryOrder(ErpProOutOrderDTO outOrderDTO)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
|
}
|
catch (Exception ex)
|
{
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
/// <summary>
|
/// 删除成品出库单
|
/// </summary>
|
/// <returns></returns>
|
public WebResponseContent DeleteDeliveryOrder(ErpProOutOrderDTO outOrderDTO)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == outOrderDTO.OrderNo).Includes(x => x.Details).First();
|
if (proOutOrder==null)
|
{
|
return content.Error($"未找到出库单{outOrderDTO.OrderNo}");
|
}
|
if (proOutOrder.ProOrderStatus==OutOrderStatusEnum.出库完成.ObjToInt() || proOutOrder.ProOrderStatus == OutOrderStatusEnum.出库中.ObjToInt())
|
{
|
return content.Error("出库单执行中");
|
}
|
_unitOfWorkManage.BeginTran();
|
_outboundRepository.ProOutOrderRepository.DeleteData(proOutOrder);
|
_outboundRepository.ProOutOrderDetailRepository.DeleteData(proOutOrder.Details);
|
_unitOfWorkManage.CommitTran();
|
content.OK("成功");
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
/// <summary>
|
/// 成品出待发货区(平库)+同步ERP出库(绑定了出库单库存)
|
/// </summary>
|
/// <returns></returns>
|
public WebResponseContent OutProductPK(SaveModel saveModel, string ProOutNo)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
List<string> OutPKCodes = saveModel.DelKeys.Select(x => x.ToString()).ToList();
|
if (OutPKCodes.IsNullOrEmpty())
|
{
|
return content.Error("不能为空");
|
}
|
Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == ProOutNo).Includes(x => x.Details).First();
|
if (proOutOrder == null)
|
{
|
return content.Error($"出库单{ProOutNo}不存在");
|
}
|
if (proOutOrder.ProOrderStatus==OutOrderStatusEnum.出库完成.ObjToInt())
|
{
|
return content.Error($"出库单{ProOutNo}已完成");
|
}
|
string? userName = App.User.UserName;//GSWMS
|
//获取所有外箱的数据
|
List<Dt_ProStockInfo> AllproStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>()
|
.Where(x => OutPKCodes.Contains(x.PalletCode) && x.ShipmentOrder == proOutOrder.ProOutOrderNo && x.StockStatus == StockStatusEmun.平库入库完成.ObjToInt())
|
.Includes(x => x.proStockInfoDetails).ToList();
|
if (AllproStockInfos.Count<=0)
|
{
|
return content.Error($"出库单{ProOutNo}已无绑定库存");
|
}
|
List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>();
|
List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>();
|
List<Dt_Warehouse> warehouses = _basicRepository.WarehouseRepository.QueryData(x => x.WarehouseType == WarehouseTypEnum.成品.ToString());
|
foreach (var item in OutPKCodes)
|
{
|
//获取库存
|
Dt_ProStockInfo? proStockInfo = AllproStockInfos.Where(x => x.PalletCode == item).FirstOrDefault();
|
if (proStockInfo == null)
|
{
|
return content.Error($"未找到{item}库存");
|
}
|
Dt_Warehouse? dt_Warehouse = warehouses.Where(x=>x.WarehouseId== proStockInfo.WarehouseId).FirstOrDefault();
|
if (dt_Warehouse==null)
|
{
|
return content.Error($"外箱号{item},不属于成品仓");
|
}
|
if (proStockInfo.ShipmentOrder!= proOutOrder.ProOutOrderNo)
|
{
|
return content.Error($"外箱号{item},不属于出库订单{proOutOrder.ProOutOrderNo}");
|
}
|
proStockInfos.Add(proStockInfo);
|
proStockInfoDetails.AddRange(proStockInfo.proStockInfoDetails);
|
}
|
|
if (proOutOrder.Details.Sum(x=>x.LockQtyPcs-x.OverQtyPcs)< proStockInfoDetails.Sum(x=>x.StockPcsQty))
|
{
|
return content.Error($"出库数量{proStockInfoDetails.Sum(x => x.StockPcsQty)}>所剩订单数量{proOutOrder.Details.Sum(x => x.LockQtyPcs - x.OverQtyPcs)}");
|
}
|
List<StockOutItemsItem> stockOutItems = new List<StockOutItemsItem>();
|
List<Dt_ProOutOrderDetail> proOutOrderDetails = proOutOrder.Details.Where(x=> proStockInfoDetails.Select(x=>x.SaleOrder).Contains(x.SaleOrder) && proStockInfoDetails.Select(x=>x.ProductCode).Contains(x.PCode) && proStockInfoDetails.Select(x => x.ProductVersion).Contains(x.PVer)).ToList();
|
if (proOutOrderDetails==null || proOutOrderDetails.Count<=0)
|
{
|
return content.Error("对应出库订单明细为空");
|
}
|
int OldOverCount = proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
|
foreach (var item in proStockInfoDetails)
|
{
|
//获取对应明细处理出库数据
|
Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrderDetails.Where(x => x.SaleOrder == item.SaleOrder && x.PVer == item.ProductVersion && x.PCode == item.ProductCode).FirstOrDefault();
|
if (proOutOrderDetail==null)
|
{
|
return content.Error("未找到对应出库订单明细");
|
}
|
proOutOrderDetail.OverQtyPcs += item.StockPcsQty;
|
if (proOutOrderDetail.OverQtyPcs> proOutOrderDetail.QtyPcs)
|
{
|
return content.Error($"出库订单明细行{proOutOrderDetail.RowId},溢出{proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs}");
|
}
|
if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs)
|
{
|
proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
|
}
|
|
}
|
|
int AddOverCount = proOutOrderDetails.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
|
if (proOutOrder.Details.Count == (AddOverCount + OldOverCount))
|
{
|
proOutOrder.ProOrderStatus = OutOrderStatusEnum.出库完成.ObjToInt();
|
//获取所有已扫码待发货的库存
|
List<Dt_ProStockInfo> AllOutStocks = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>()
|
.Where(x => x.ShipmentOrder== ProOutNo && x.StockStatus == StockStatusEmun.平库待发货.ObjToInt())
|
.Includes(x => x.proStockInfoDetails).ToList();
|
AllOutStocks.ForEach(x =>
|
{
|
proStockInfoDetails.AddRange(x.proStockInfoDetails);
|
});
|
proStockInfos.AddRange(AllOutStocks);
|
foreach (var item in proStockInfoDetails)
|
{
|
StockOutItemsItem outItemsItem = new StockOutItemsItem()
|
{
|
PartNum = item.ProductCode,
|
Rev = item.ProductVersion,
|
SoNumber = item.SaleOrder,
|
BatchNumber = item.BagNo,
|
QtyPcs = item.StockPcsQty,
|
QtySet = item.SETQty
|
};
|
stockOutItems.Add(outItemsItem);
|
}
|
}
|
_unitOfWorkManage.BeginTran();
|
Dt_Warehouse warehouse = warehouses.Where(x => x.WarehouseId == proOutOrder.WarehouseId).FirstOrDefault();
|
//处理库存数据和上传ERP
|
if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.出库完成.ObjToInt())
|
{
|
//成品库存记录变动待加入
|
ERPProOutOrderModel proOutOrderModel = new ERPProOutOrderModel()
|
{
|
Way = 1,
|
StockOutCode = _outboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)),
|
ConfirmedUserNo = "admin",
|
AssignUserNo = "admin",
|
WarehouseCode = warehouse.WarehouseCode,
|
ShipDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
|
DeliverplanCode = proOutOrder.ProOutOrderNo,
|
Remark = proOutOrder.Remark,
|
StockOutItems = stockOutItems
|
};
|
_stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfos, OperateTypeEnum.自动完成);
|
_stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfoDetails, OperateTypeEnum.自动完成);
|
WebResponseContent contentSaveInfos = SaveOutProPKInfos(proStockInfos);
|
if (!contentSaveInfos.Status)
|
{
|
throw new Exception(contentSaveInfos.Message);
|
};
|
string response = _invokeERPService.InvokeProOutApi(proOutOrderModel);
|
ErpRequestContent erpRequestContent = response.DeserializeObject<ErpRequestContent>();
|
if (erpRequestContent.res != 1)
|
{
|
throw new Exception("同步ERP失败,错误信息:" + erpRequestContent.Data);
|
}
|
}
|
else
|
{
|
proStockInfos.ForEach(x =>
|
{
|
x.StockStatus = StockStatusEmun.平库待发货.ObjToInt();
|
});
|
proStockInfoDetails.ForEach(x =>
|
{
|
x.ProOutDetailStatus = StockStatusEmun.平库待发货.ObjToInt();
|
});
|
_stockRepository.ProStockInfoRepository.UpdateData(proStockInfos);
|
_stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails);
|
}
|
_outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrderDetails);
|
BaseDal.UpdateData(proOutOrder);
|
_unitOfWorkManage.CommitTran();
|
content.OK();
|
}
|
catch (Exception ex)
|
{
|
_unitOfWorkManage.RollbackTran();
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
/// <summary>
|
/// 获取出库所有的外内包明细
|
/// </summary>
|
/// <param name="proStockInfos"></param>
|
/// <returns></returns>
|
public WebResponseContent SaveOutProPKInfos(List<Dt_ProStockInfo> proStockInfos)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
List<Dt_OutProPKStockInfo> outProPKStockInfos = new List<Dt_OutProPKStockInfo>();
|
foreach (var fromItem in proStockInfos)
|
{
|
foreach (var lordItem in fromItem.proStockInfoDetails)
|
{
|
Dt_OutProPKStockInfo outProPKStockInfo = new Dt_OutProPKStockInfo()
|
{
|
PCode = lordItem.ProductCode,
|
PVer=lordItem.ProductVersion,
|
PLot=lordItem.ProductVersion,
|
DateCode=lordItem.DateCode,
|
StockId=fromItem.Id,
|
OriginalQuantity=lordItem.StockPcsQty,
|
AssignQuantity=lordItem.StockPcsQty,
|
PalletCode=fromItem.PalletCode,
|
Unit="PCS"
|
};
|
outProPKStockInfos.Add(outProPKStockInfo);
|
}
|
}
|
Db.InsertNav(outProPKStockInfos).Include(x=>x).ExecuteCommand();
|
content.OK();
|
}
|
catch (Exception ex)
|
{
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
//根据内包出库
|
public WebResponseContent BagProductPK(SaveModel saveModel)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
var outOrder = saveModel.MainData["proOutNo"].ToString();
|
var outBags = saveModel.DelKeys.Select(x => x.ToString()).ToList();
|
if (outBags.Count<=0)
|
{
|
return content.Error("内包信息获取失败");
|
}
|
|
}
|
catch (Exception ex)
|
{
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
/// <summary>
|
/// 成品出待发货区(平库)+同步ERP出库(未绑定出库单库存)
|
/// </summary>
|
/// <returns></returns>
|
public WebResponseContent OutProductNoPK(string[] OutPKCodes, string ProOutNo)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
if (OutPKCodes.IsNullOrEmpty())
|
{
|
return content.Error("不能为空");
|
}
|
Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == ProOutNo).Includes(x => x.Details).First();
|
if (proOutOrder == null)
|
{
|
return content.Error($"出库单{ProOutNo}不存在");
|
}
|
if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.出库完成.ObjToInt())
|
{
|
return content.Error($"出库单{ProOutNo}已完成");
|
}
|
string? userName = App.User.UserName;//GSWMS
|
//获取所有外箱的数据
|
List<Dt_ProStockInfo> AllproStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>()
|
.Where(x => OutPKCodes.Contains(x.PalletCode) && x.StockStatus == StockStatusEmun.平库入库完成.ObjToInt())
|
.Includes(x => x.proStockInfoDetails).ToList();
|
List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>();
|
List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>();
|
List<Dt_Warehouse> warehouses = _basicRepository.WarehouseRepository.QueryData(x => x.WarehouseType == WarehouseTypEnum.成品.ToString());
|
foreach (var item in OutPKCodes)
|
{
|
//获取库存
|
Dt_ProStockInfo? proStockInfo = AllproStockInfos.Where(x => x.PalletCode == item).FirstOrDefault();
|
if (proStockInfo == null)
|
{
|
return content.Error($"未找到{item}库存");
|
}
|
if (proStockInfo.ShipmentOrder!=null)
|
{
|
return content.Error($"外箱号{item}为出库单{proStockInfo.ShipmentOrder}指定库存!");
|
}
|
Dt_Warehouse? dt_Warehouse = warehouses.Where(x => x.WarehouseId == proStockInfo.WarehouseId).FirstOrDefault();
|
if (dt_Warehouse == null)
|
{
|
return content.Error($"外箱号{item},不属于成品仓");
|
}
|
proStockInfos.Add(proStockInfo);
|
proStockInfoDetails.AddRange(proStockInfo.proStockInfoDetails);
|
}
|
|
if (proOutOrder.Details.Sum(x => x.QtyPcs - x.OverQtyPcs) < proStockInfoDetails.Sum(x => x.StockPcsQty))
|
{
|
return content.Error($"出库数量{proStockInfoDetails.Sum(x => x.StockPcsQty)}>所剩订单数量{proOutOrder.Details.Sum(x => x.QtyPcs - x.OverQtyPcs)}");
|
}
|
List<StockOutItemsItem> stockOutItems = new List<StockOutItemsItem>();
|
List<Dt_ProOutOrderDetail> proOutOrderDetails = proOutOrder.Details.Where(x => proStockInfoDetails.Select(x => x.SaleOrder).Contains(x.SaleOrder) && proStockInfoDetails.Select(x => x.ProductCode).Contains(x.PCode) && proStockInfoDetails.Select(x => x.ProductVersion).Contains(x.PVer)).ToList();
|
if (proOutOrderDetails == null || proOutOrderDetails.Count <= 0)
|
{
|
return content.Error("对应出库订单明细为空");
|
}
|
int OldOverCount = proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
|
foreach (var item in proStockInfoDetails)
|
{
|
//获取对应明细处理出库数据
|
Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrderDetails.Where(x => x.SaleOrder == item.SaleOrder && x.PVer == item.ProductVersion && x.PCode == item.ProductCode).FirstOrDefault();
|
if (proOutOrderDetail == null)
|
{
|
return content.Error("未找到对应出库订单明细");
|
}
|
proOutOrderDetail.OverQtyPcs += item.StockPcsQty;
|
if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs)
|
{
|
return content.Error($"出库订单明细行{proOutOrderDetail.RowId},溢出{proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs}");
|
}
|
if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs)
|
{
|
proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
|
}
|
|
}
|
proStockInfos.ForEach(x =>
|
{
|
x.StockStatus = StockStatusEmun.平库待发货.ObjToInt();
|
});
|
proStockInfoDetails.ForEach(x =>
|
{
|
x.ProOutDetailStatus = StockStatusEmun.平库待发货.ObjToInt();
|
});
|
int AddOverCount = proOutOrderDetails.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
|
if (proOutOrder.Details.Count == (AddOverCount + OldOverCount))
|
{
|
proOutOrder.ProOrderStatus = OutOrderStatusEnum.出库完成.ObjToInt();
|
//获取所有已扫码待发货的库存
|
List<Dt_ProStockInfo> AllOutStocks = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>()
|
.Where(x => x.ShipmentOrder == ProOutNo && x.StockStatus == StockStatusEmun.平库待发货.ObjToInt())
|
.Includes(x => x.proStockInfoDetails).ToList();
|
AllOutStocks.ForEach(x =>
|
{
|
proStockInfoDetails.AddRange(x.proStockInfoDetails);
|
});
|
proStockInfos.AddRange(AllOutStocks);
|
foreach (var item in proStockInfoDetails)
|
{
|
StockOutItemsItem outItemsItem = new StockOutItemsItem()
|
{
|
PartNum = item.ProductCode,
|
Rev = item.ProductVersion,
|
SoNumber = item.SaleOrder,
|
BatchNumber = item.BagNo,
|
QtyPcs = item.StockPcsQty,
|
QtySet = item.SETQty
|
};
|
stockOutItems.Add(outItemsItem);
|
}
|
}
|
_unitOfWorkManage.BeginTran();
|
Dt_Warehouse warehouse = warehouses.Where(x => x.WarehouseId == proOutOrder.WarehouseId).FirstOrDefault();
|
//处理库存数据和上传ERP
|
if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.出库完成.ObjToInt())
|
{
|
//成品库存记录变动待加入
|
ERPProOutOrderModel proOutOrderModel = new ERPProOutOrderModel()
|
{
|
Way = 1,
|
StockOutCode = _outboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)),
|
ConfirmedUserNo = App.User.UserName,
|
AssignUserNo = App.User.UserName,
|
WarehouseCode = warehouse.WarehouseCode,
|
ShipDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
|
DeliverplanCode = proOutOrder.ProOutOrderNo,
|
Remark = proOutOrder.Remark,
|
StockOutItems = stockOutItems
|
};
|
_stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfos, OperateTypeEnum.自动完成);
|
_stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfoDetails, OperateTypeEnum.自动完成);
|
string response = _invokeERPService.InvokeProOutApi(proOutOrderModel);
|
ErpRequestContent erpRequestContent = response.DeserializeObject<ErpRequestContent>();
|
if (erpRequestContent.res != 1)
|
{
|
throw new Exception("同步ERP失败,错误信息:" + erpRequestContent.Data);
|
}
|
}
|
else
|
{
|
_stockRepository.ProStockInfoRepository.UpdateData(proStockInfos);
|
_stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails);
|
}
|
_outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrderDetails);
|
BaseDal.UpdateData(proOutOrder);
|
_unitOfWorkManage.CommitTran();
|
content.OK();
|
}
|
catch (Exception ex)
|
{
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
/// <summary>
|
/// PDA获取出库单据
|
/// </summary>
|
/// <param name="saveModel"></param>
|
/// <returns></returns>
|
public WebResponseContent GetProOutOrders(SaveModel saveModel)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
int pageNo = saveModel.MainData["pageNo"].ObjToInt();
|
int warehouseId = saveModel.MainData["warehouseId"].ObjToInt();
|
string orderNo = saveModel.MainData["orderNo"].ToString();
|
List<Dt_ProOutOrder> proOutOrders = new List<Dt_ProOutOrder>();
|
if (string.IsNullOrEmpty(orderNo))
|
{
|
proOutOrders = Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOrderStatus == OutOrderStatusEnum.出库中.ObjToInt() && x.WarehouseId == warehouseId).Includes(x=>x.Details).OrderByDescending(x => x.Id).ToPageList(pageNo, 5);
|
}
|
else
|
{
|
proOutOrders = Db.Queryable<Dt_ProOutOrder>().Where(x => (x.ProOutOrderNo.Contains(orderNo) || x.ProOutOrderNo.Contains(orderNo)) && x.ProOrderStatus == OutOrderStatusEnum.出库中.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.Id).Includes(x => x.Details).ToPageList(pageNo, 5);
|
}
|
|
content.OK(data: proOutOrders);
|
}
|
catch (Exception)
|
{
|
|
throw;
|
}
|
return content;
|
}
|
/// <summary>
|
/// 获取扫码获取订单明细信息
|
/// </summary>
|
public WebResponseContent GetOrderDetails(int keyId)
|
{
|
WebResponseContent content=new WebResponseContent();
|
try
|
{
|
//获取出库单号
|
Dt_ProOutOrder proOutOrder = BaseDal.QueryFirst(x => x.Id == keyId);
|
if (proOutOrder == null)
|
{
|
return content.Error($"未找到出库单{proOutOrder.ProOutOrderNo}");
|
}
|
//获取当前已绑定的外包码(出库状态)
|
List<string> outBags = _stockRepository.ProStockInfoRepository.QueryData(x => x.StockStatus == StockStatusEmun.平库待发货.ObjToInt() && x.ShipmentOrder== proOutOrder.ProOutOrderNo).Select(x=>x.PalletCode).ToList();
|
//获取明细
|
List<Dt_ProOutOrderDetail> proOutOrderDetails = _outboundRepository.ProOutOrderDetailRepository.QueryData(x=>x.ProOrderId==keyId).OrderBy(x=>x.ProOrderDetailStatus).ThenBy(x=>x.Id).ToList();
|
content.OK("成功", new { outBags, proOutOrderDetails });
|
}
|
catch (Exception ex)
|
{
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
}
|
}
|