using AutoMapper; using Castle.Core.Resource; using Org.BouncyCastle.Asn1.Cmp; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; 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_DTO.Outbound; 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 ProCollectOutOrderService : ServiceBase, IProCollectOutOrderService { private readonly IUnitOfWorkManage _unitOfWorkManage; private readonly IBasicRepository _basicRepository; private readonly IMapper _mapper; private readonly IInvokeERPService _invokeERPService; private readonly IProCollectOutOrderDetailRepository _proCollectOutOrderDetailRepository; public IProCollectOutOrderRepository Repository => BaseDal; public ProCollectOutOrderService(IProCollectOutOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository, IMapper mapper, IInvokeERPService invokeERPService,IProCollectOutOrderDetailRepository proCollectOutOrderDetailRepository) : base(BaseDal) { _unitOfWorkManage = unitOfWorkManage; _basicRepository = basicRepository; _mapper = mapper; _invokeERPService = invokeERPService; _proCollectOutOrderDetailRepository = proCollectOutOrderDetailRepository; } public WebResponseContent ProductOutOrder(ErpProOutLingOrder erpProOutLingOrder) { WebResponseContent content = new WebResponseContent(); try { Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == erpProOutLingOrder.WaType); if (warehouse == null) { return content.Error($"未找到该仓库信息"); } Dt_ProCollectOutOrder proCollectOutOrder = BaseDal.Db.Queryable().Where(x=>x.ProCollectOutOrderNo==erpProOutLingOrder.OrderNo).Includes(x=>x.Details).First(); if (_proCollectOutOrderDetailRepository.QueryFirst(x=>x.RowId==erpProOutLingOrder.RowId)!=null) { return content.Error($"成品领料单,行号{erpProOutLingOrder.RowId}已存在"); } if (proCollectOutOrder!=null) { if (proCollectOutOrder.ProOrderStatus!= OutOrderStatusEnum.未开始.ObjToInt()) { return content.Error($"当前单据已开始执行"); } else { Dt_ProCollectOutOrderDetail proCollectOutOrderDetail = _mapper.Map(erpProOutLingOrder); proCollectOutOrderDetail.ProCollectOrderId = proCollectOutOrder.Id; _proCollectOutOrderDetailRepository.AddData(proCollectOutOrderDetail); return content.OK("接收成功"); } } else { Dt_ProCollectOutOrderDetail proCollectOutOrderDetail = _mapper.Map(erpProOutLingOrder); Dt_ProCollectOutOrder collectOutOrder = new Dt_ProCollectOutOrder() { WarehouseId = warehouse.WarehouseId, ProCollectOutOrderNo = erpProOutLingOrder.OrderNo, ProOrderType = ErpProOutTypeEnum.ProCollect.ObjToInt(), ProOrderStatus = OutOrderStatusEnum.未开始.ObjToInt(), Details=new List { proCollectOutOrderDetail } }; BaseDal.Db.InsertNav(collectOutOrder).Include(x=>x.Details).ExecuteCommand(); return content.OK("接收成功"); } } catch (Exception ex) { content.Error(ex.Message); } return content; } } }