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, 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; } /// /// 接收ERP成品出库单 /// /// 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); } } /// /// 新增成品出库单 /// /// 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 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 proOutOrderDetails = new List(); 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(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; } /// /// 更新成品出库单 /// /// public WebResponseContent UpdateDeliveryOrder(ErpProOutOrderDTO outOrderDTO) { WebResponseContent content = new WebResponseContent(); try { } catch (Exception ex) { content.Error(ex.Message); } return content; } /// /// 删除成品出库单 /// /// public WebResponseContent DeleteDeliveryOrder(ErpProOutOrderDTO outOrderDTO) { WebResponseContent content = new WebResponseContent(); try { Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable().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; } /// /// 成品出待发货区(平库)+同步ERP出库(绑定了出库单库存) /// /// public WebResponseContent OutProductPK(SaveModel saveModel, string ProOutNo) { WebResponseContent content = new WebResponseContent(); try { List OutPKCodes = saveModel.DelKeys.Select(x => x.ToString()).ToList(); if (OutPKCodes.IsNullOrEmpty()) { return content.Error("不能为空"); } Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable().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 AllproStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable() .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 proStockInfos = new List(); List proStockInfoDetails = new List(); List 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 stockOutItems = new List(); List 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 AllOutStocks = _stockRepository.ProStockInfoRepository.Db.Queryable() .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(); 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; } /// /// 获取出库所有的外内包明细 /// /// /// public WebResponseContent SaveOutProPKInfos(List proStockInfos) { WebResponseContent content = new WebResponseContent(); try { List outProPKStockInfos = new List(); 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; } /// /// 成品出待发货区(平库)+同步ERP出库(未绑定出库单库存) /// /// 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().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 AllproStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable() .Where(x => OutPKCodes.Contains(x.PalletCode) && x.StockStatus == StockStatusEmun.平库入库完成.ObjToInt()) .Includes(x => x.proStockInfoDetails).ToList(); List proStockInfos = new List(); List proStockInfoDetails = new List(); List 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 stockOutItems = new List(); List 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 AllOutStocks = _stockRepository.ProStockInfoRepository.Db.Queryable() .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(); 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; } /// /// PDA获取出库单据 /// /// /// 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 proOutOrders = new List(); if (string.IsNullOrEmpty(orderNo)) { proOutOrders = Db.Queryable().Where(x => x.ProOrderStatus == OutOrderStatusEnum.出库中.ObjToInt() && x.WarehouseId == warehouseId).Includes(x=>x.Details).OrderByDescending(x => x.Id).ToPageList(pageNo, 5); } else { proOutOrders = Db.Queryable().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; } /// /// 获取扫码获取订单明细信息 /// 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 outBags = _stockRepository.ProStockInfoRepository.QueryData(x => x.StockStatus == StockStatusEmun.平库待发货.ObjToInt() && x.ShipmentOrder== proOutOrder.ProOutOrderNo).Select(x=>x.PalletCode).ToList(); //获取明细 List 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; } } }