1
helongyang
2025-06-12 25cb7cd50d12f48e93d6cde47420ca3458e9c47a
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/PurchaseOrderService.cs
@@ -3,6 +3,7 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_BasicRepository;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
@@ -10,6 +11,8 @@
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_DTO;
using WIDESEA_DTO.Basic;
using WIDESEA_IBasicRepository;
using WIDESEA_IInboundRepository;
using WIDESEA_IInboundService;
using WIDESEA_InboundRepository;
@@ -21,13 +24,31 @@
    {
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly IPurchaseOrderDetailRepository _purchaseOrderDetailRepository;
        private readonly IBasicRepository _basicRepository;
        private readonly ISupplierInfoRepository _supplierInfoRepository;
        private readonly IMaterielInfoRepository _materielInfoRepository;
        public PurchaseOrderService(IPurchaseOrderRepository BaseDal, IPurchaseOrderDetailRepository purchaseOrderDetailRepository, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
        public PurchaseOrderService(IPurchaseOrderRepository BaseDal, IPurchaseOrderDetailRepository purchaseOrderDetailRepository, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository, ISupplierInfoRepository supplierInfoRepository, IMaterielInfoRepository materielInfoRepository) : base(BaseDal)
        {
            _purchaseOrderDetailRepository = purchaseOrderDetailRepository;
            _unitOfWorkManage = unitOfWorkManage;
            _basicRepository = basicRepository;
            _supplierInfoRepository = supplierInfoRepository;
            _materielInfoRepository = materielInfoRepository;
        }
        public WebResponseContent GetPurchaseOrderInfo(string purchaseOrderNo)
        {
            try
            {
                Dt_PurchaseOrder purchaseOrder = BaseDal.Db.Queryable<Dt_PurchaseOrder>().Where(x => x.PurchaseOrderNo == purchaseOrderNo).Includes(x => x.Details).First();
                List<string> MaterielCodes = purchaseOrder.Details.Where(x => x.PurchaseDetailStatus != PurchaseOrderDetailStatusEnum.Received.ObjToInt()).Select(x => x.MaterielCode).ToList();
                return WebResponseContent.Instance.OK(data: MaterielCodes);
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        public WebResponseContent ReceivePurchaseOrder(PurchaseOrderModel model)
        {
            try
@@ -55,17 +76,35 @@
                {
                    return WebResponseContent.Instance.Error($"采购单号重复");
                }
                if (_supplierInfoRepository.QueryFirst(x => x.SupplierCode == model.SCode) == null)
                {
                    return WebResponseContent.Instance.Error($"未找到供应商编码【{model.SCode}】的信息");
                }
                List<Dt_Warehouse> warehouses = _basicRepository.WarehouseRepository.QueryData();
                List<Dt_MaterielInfo> materielInfos = _materielInfoRepository.QueryData();
                List<Dt_PurchaseOrderDetail> purchaseOrderDetails = new List<Dt_PurchaseOrderDetail>();
                foreach (var item in model.MList)
                {
                    Dt_Warehouse? warehouse = warehouses.FirstOrDefault(x => x.WarehouseCode == item.WaId);
                    if (warehouse == null)
                    {
                        return WebResponseContent.Instance.Error($"未找到仓库信息");
                    }
                    Dt_MaterielInfo? materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MCode);
                    if (materielInfo == null)
                    {
                        return WebResponseContent.Instance.Error($"未找到物料编码【{item.MCode}】的信息");
                    }
                    Dt_PurchaseOrderDetail purchaseOrderDetail = new Dt_PurchaseOrderDetail()
                    {
                        MaterielCode = item.MCode,
                        MaterielName = materielInfo.MaterielName,
                        MaterielSpec = materielInfo.MaterielSpec,
                        PurchaseDetailQuantity = item.Qty,
                        PurchaseDetailReceiveQty = 0,
                        PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt(),
                        Unit = item.Unit,
                        WarehouseId = item.WaId,
                        WarehouseId = warehouse.WarehouseId,
                        RowNo = item.RowId,
                    };
                    purchaseOrderDetails.Add(purchaseOrderDetail);
@@ -96,7 +135,7 @@
        {
            try
            {
                Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().First(x => x.PurchaseOrderNo == model.OrderNo);
                Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().Where(x => x.PurchaseOrderNo == model.OrderNo).Includes(x => x.Details).First();
                if (purchaseOrder == null)
                {
                    return WebResponseContent.Instance.Error($"未找到采购单信息");
@@ -105,12 +144,27 @@
                {
                    return WebResponseContent.Instance.Error($"未找到采购单明细信息");
                }
                if (_supplierInfoRepository.QueryFirst(x => x.SupplierCode == model.SCode) == null)
                {
                    return WebResponseContent.Instance.Error($"未找到供应商编码【{model.SCode}】的信息");
                }
                List<Dt_Warehouse> warehouses = _basicRepository.WarehouseRepository.QueryData();
                List<Dt_MaterielInfo> materielInfos = _materielInfoRepository.QueryData();
                List<Dt_PurchaseOrderDetail> purchaseOrderDetails = new List<Dt_PurchaseOrderDetail>();
                List<Dt_PurchaseOrderDetail> updatePurchaseOrderDetails = new List<Dt_PurchaseOrderDetail>();
                List<int> detailIds = new List<int>();
                foreach (var item in model.MList)
                {
                    Dt_Warehouse? warehouse = warehouses.FirstOrDefault(x => x.WarehouseCode == item.WaId);
                    if (warehouse == null)
                    {
                        return WebResponseContent.Instance.Error($"未找到仓库信息");
                    }
                    Dt_MaterielInfo? materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MCode);
                    if (materielInfo == null)
                    {
                        return WebResponseContent.Instance.Error($"未找到物料编码【{item.MCode}】的信息");
                    }
                    Dt_PurchaseOrderDetail? purchaseOrderDetail = purchaseOrder.Details.FirstOrDefault(x => x.RowNo == item.RowId);
                    if (purchaseOrderDetail == null)
                    {
@@ -118,9 +172,10 @@
                        {
                            MaterielCode = item.MCode,
                            PurchaseDetailQuantity = item.Qty,
                            PurchaseDetailReceiveQty = 0,
                            PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt(),
                            Unit = item.Unit,
                            WarehouseId = item.WaId,
                            WarehouseId = warehouse.WarehouseId,
                            RowNo = item.RowId,
                        };
                        purchaseOrderDetails.Add(purchaseOrderDetail);
@@ -131,7 +186,7 @@
                        purchaseOrderDetail.PurchaseDetailQuantity = item.Qty;
                        purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt();
                        purchaseOrderDetail.Unit = item.Unit;
                        purchaseOrderDetail.WarehouseId = item.WaId;
                        purchaseOrderDetail.WarehouseId = warehouse.WarehouseId;
                        purchaseOrderDetail.RowNo = item.RowId;
                        updatePurchaseOrderDetails.Add(purchaseOrderDetail);
                        detailIds.Add(purchaseOrderDetail.Id);
@@ -172,7 +227,7 @@
        {
            try
            {
                Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().First(x => x.PurchaseOrderNo == model.OrderNo);
                Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().Where(x => x.PurchaseOrderNo == model.OrderNo).Includes(x => x.Details).First();
                if (purchaseOrder == null)
                {
                    return WebResponseContent.Instance.Error($"未找到采购单信息");
@@ -194,7 +249,7 @@
        {
            try
            {
                Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().First(x => x.PurchaseOrderNo == model.OrderNo);
                Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().Where(x=>x.PurchaseOrderNo== model.OrderNo).Includes(x=>x.Details).First();
                if (purchaseOrder == null)
                {
                    return WebResponseContent.Instance.Error($"未找到采购单信息");
@@ -203,12 +258,15 @@
                {
                    return WebResponseContent.Instance.Error($"未找到采购单明细信息");
                }
                purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Closed.ObjToInt();
                _unitOfWorkManage.BeginTran();
                BaseDal.DeleteAndMoveIntoHty(purchaseOrder, OperateTypeEnum.关闭);
                BaseDal.UpdateData(purchaseOrder);
                //BaseDal.DeleteAndMoveIntoHty(purchaseOrder, OperateTypeEnum.关闭);
                foreach (var item in purchaseOrder.Details)
                {
                    _purchaseOrderDetailRepository.DeleteAndMoveIntoHty(item, OperateTypeEnum.关闭);
                    item.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Closed.ObjToInt();
                    //_purchaseOrderDetailRepository.DeleteAndMoveIntoHty(item, OperateTypeEnum.关闭);
                    _purchaseOrderDetailRepository.UpdateData(item);
                }
                _unitOfWorkManage.CommitTran();
                return WebResponseContent.Instance.OK();