From a7ceaaa38a4394b82501ca60230e97d25a6871e3 Mon Sep 17 00:00:00 2001 From: wangxinhui <wangxinhui@hnkhzn.com> Date: 星期六, 18 一月 2025 17:30:33 +0800 Subject: [PATCH] 1 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs | 318 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 294 insertions(+), 24 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs" index 75675e0..7c60c3d 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs" @@ -1,4 +1,5 @@ -锘縰sing MailKit.Search; +锘縰sing AutoMapper; +using MailKit.Search; using System; using System.Collections.Generic; using System.Linq; @@ -7,8 +8,15 @@ using WIDESEA_Common.CommonEnum; using WIDESEA_Common.OrderEnum; using WIDESEA_Core; +using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Helper; +using WIDESEA_DTO; +using WIDESEA_DTO.Basic; +using WIDESEA_DTO.ERP; +using WIDESEA_External.ERPService; +using WIDESEA_External.Model; +using WIDESEA_IBasicRepository; using WIDESEA_ICheckRepository; using WIDESEA_IInboundRepository; using WIDESEA_IInboundService; @@ -18,13 +26,21 @@ { public class ReceiveOrderService : ServiceBase<Dt_ReceiveOrder, IReceiveOrderRepository>, IReceiveOrderService { + private readonly IUnitOfWorkManage _unitOfWorkManage; + private readonly IMapper _mapper; private readonly ICheckOrderRepository _checkOrderRepository; private readonly IInboundRepository _inboundRepository; + private readonly IBasicRepository _basicRepository; + private readonly IInvokeERPService _invokeERPService; - public ReceiveOrderService(IReceiveOrderRepository BaseDal, ICheckOrderRepository checkOrderRepository, IInboundRepository inboundRepository) : base(BaseDal) + public ReceiveOrderService(IReceiveOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IMapper mapper, ICheckOrderRepository checkOrderRepository, IInboundRepository inboundRepository, IBasicRepository basicRepository, IInvokeERPService invokeERPService) : base(BaseDal) { + _mapper = mapper; + _unitOfWorkManage = unitOfWorkManage; _checkOrderRepository = checkOrderRepository; _inboundRepository = inboundRepository; + _basicRepository = basicRepository; + _invokeERPService = invokeERPService; } public override WebResponseContent AddData(SaveModel saveModel) @@ -65,6 +81,87 @@ return base.AddData(saveModel); } + /// <summary> + /// 鏀惰揣瀹屾垚骞跺洖浼燛RP + /// </summary> + /// <param name="orderId"></param> + /// <returns></returns> + public WebResponseContent FeedbackReceiveOrder(int orderId) + { + try + { + Dt_ReceiveOrder receiveOrder = BaseDal.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderId == orderId).Includes(x => x.Details).First(); + if (receiveOrder == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒版敹璐у崟"); + } + if (receiveOrder.ReceiveOrderStatus == ReceiveOrderStatusEnum.Completed.ObjToInt()) + { + return WebResponseContent.Instance.Error($"鏀惰揣鍗曞凡瀹屾垚"); + } + if (receiveOrder.Details == null || receiveOrder.Details.Count == 0) + { + return WebResponseContent.Instance.Error($"鏈壘鍒版敹璐у崟鏄庣粏"); + } + + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == receiveOrder.WarehouseId); + if (warehouse == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒颁粨搴撲俊鎭�"); + } + + List<RecevieOrderDetailModel> recevieOrderDetails = new List<RecevieOrderDetailModel>(); + foreach (var item in receiveOrder.Details) + { + RecevieOrderDetailModel recevieOrderDetail = new RecevieOrderDetailModel() + { + Currcode = "", + IfInspection = item.IfInspection, + Lotno = item.LotNo, + MaterialsId = item.MaterielCode, + PriceInTax = 0, + PurchaseOrderCode = item.PurchaseOrderNo, + PurchaseOrderSerno = item.PurchaseOrderDetailRowNo, + QtyRecieved = item.ReceivedQuantity.ObjToInt(), + Serno = item.RowNo, + Supplotno = "", + Taxrate = "", + + }; + recevieOrderDetails.Add(recevieOrderDetail); + } + + ERPReceiveModel receiveModel = new ERPReceiveModel() + { + Code = receiveOrder.ReceiveOrderNo, + DeliveryCode = receiveOrder.DeliveryCode, + CustomerId = receiveOrder.CustomerId, + CreatorId = receiveOrder.Creater, + EntDate = receiveOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"), + ReceiveDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + SuppliersId = receiveOrder.SuppliersId, + Type = Enum.GetName(typeof(ReceiveOrderTypeEnum), receiveOrder.ReceiveOrderType) ?? throw new Exception($"閲囪喘鍗曠被鍨嬮敊璇�"), + UniqueTag = receiveOrder.ReceiveOrderId.ToString(), + WarehouseCode = warehouse.WarehouseCode, + Way = 1, + Details = recevieOrderDetails + }; + + //鏇存柊鏀惰揣鍗曚俊鎭� + receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Completed.ObjToInt(); + receiveOrder.UploadStatus = WhetherEnum.True.ObjToInt(); + BaseDal.UpdateData(receiveOrder); + //鍒涘缓鍏ュ簱鍗� + CreateInboundOrder(orderId); + //鏀惰揣鎺ㄩ�佽嚦ERP 娴嬭瘯娉ㄩ噴 + _invokeERPService.InvokeMatReceiveApi(receiveModel); + return WebResponseContent.Instance.OK(); + } + catch (Exception ex) + { + return WebResponseContent.Instance.Error(ex.Message); + } + } public WebResponseContent GetReceiveOrders(SaveModel saveModel) { @@ -72,15 +169,16 @@ try { int pageNo = saveModel.MainData["pageNo"].ObjToInt(); + int warehouseId = saveModel.MainData["warehouseId"].ObjToInt(); string orderNo = saveModel.MainData["orderNo"].ToString(); List<Dt_ReceiveOrder> dt_ReceiveOrders = new List<Dt_ReceiveOrder>(); if (string.IsNullOrEmpty(orderNo)) { - dt_ReceiveOrders = Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderStatus < ReceiveOrderStatusEnum.Completed.ObjToInt()).ToPageList(pageNo, 5); + dt_ReceiveOrders = Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderStatus < ReceiveOrderStatusEnum.Completed.ObjToInt() && x.WarehouseId == warehouseId).ToPageList(pageNo, 5); } else { - dt_ReceiveOrders = Db.Queryable<Dt_ReceiveOrder>().Where(x => (x.ReceiveOrderNo.Contains(orderNo) || x.SuppliersId.Contains(orderNo)) && x.ReceiveOrderStatus < ReceiveOrderStatusEnum.Completed.ObjToInt()).ToPageList(pageNo, 5); + dt_ReceiveOrders = Db.Queryable<Dt_ReceiveOrder>().Where(x => (x.ReceiveOrderNo.Contains(orderNo) || x.SuppliersId.Contains(orderNo)) && x.ReceiveOrderStatus < ReceiveOrderStatusEnum.Completed.ObjToInt() && x.WarehouseId == warehouseId).ToPageList(pageNo, 5); } content.OK(data: dt_ReceiveOrders); @@ -92,7 +190,11 @@ } return content; } - + /// <summary> + /// 鍒涘缓鍏ュ簱鍗� + /// </summary> + /// <param name="receiveOrderId">鏀惰揣鍗曠紪鍙�</param> + /// <returns></returns> public WebResponseContent CreateInboundOrder(int receiveOrderId) { try @@ -110,17 +212,18 @@ { return WebResponseContent.Instance.Error($"璇ユ敹璐у崟鏈畬鎴�"); } + #region 娉ㄩ噴 + //List<Dt_CheckOrder> checkOrders = _checkOrderRepository.QueryData(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo); + //if (checkOrders.FirstOrDefault(x => x.CheckOrderStatus == CheckOrderStatusEnum.NotCheck.ObjToInt()) != null) + //{ + // return WebResponseContent.Instance.Error($"璇ユ敹璐у崟鏈川妫�瀹屾垚"); + //} - List<Dt_CheckOrder> checkOrders = _checkOrderRepository.QueryData(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo); - if (checkOrders.FirstOrDefault(x => x.CheckOrderStatus == CheckOrderStatusEnum.NotCheck.ObjToInt()) != null) - { - return WebResponseContent.Instance.Error($"璇ユ敹璐у崟鏈川妫�瀹屾垚"); - } - - if (checkOrders.FirstOrDefault(x => x.AuditStatus != AuditStatusEnum.Agree.ObjToInt()) != null) - { - return WebResponseContent.Instance.Error($"璇ユ敹璐у崟璐ㄦ缁撴灉瀹℃壒鏈畬鎴�"); - } + //if (checkOrders.FirstOrDefault(x => x.AuditStatus != AuditStatusEnum.Agree.ObjToInt()) != null) + //{ + // return WebResponseContent.Instance.Error($"璇ユ敹璐у崟璐ㄦ缁撴灉瀹℃壒鏈畬鎴�"); + //} + #endregion Dt_InboundOrder inboundOrder = new Dt_InboundOrder() { @@ -136,15 +239,17 @@ foreach (var item in receiveOrder.Details) { float quantity = item.ReceivedQuantity; - if (item.IfInspection == WhetherEnum.True.ObjToInt()) - { - Dt_CheckOrder? checkOrder = checkOrders.FirstOrDefault(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo && x.ReceiveDetailRowNo == item.RowNo); - if (checkOrder == null) - { - return WebResponseContent.Instance.Error($"璐ㄦ鍗曟暟鎹敊璇�"); - } - quantity = checkOrder.QualifiedQuantity.GetValueOrDefault() + checkOrder.DefectedQuantity.GetValueOrDefault(); - } + #region 娉ㄩ噴 + //if (item.IfInspection == WhetherEnum.True.ObjToInt()) + //{ + // Dt_CheckOrder? checkOrder = checkOrders.FirstOrDefault(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo && x.ReceiveDetailRowNo == item.RowNo); + // if (checkOrder == null) + // { + // return WebResponseContent.Instance.Error($"璐ㄦ鍗曟暟鎹敊璇�"); + // } + // quantity = checkOrder.QualifiedQuantity.GetValueOrDefault() + checkOrder.DefectedQuantity.GetValueOrDefault(); + //} + #endregion Dt_InboundOrderDetail detail = new Dt_InboundOrderDetail() { MaterielCode = item.MaterielCode, @@ -168,5 +273,170 @@ return WebResponseContent.Instance.Error(ex.Message); } } + + public WebResponseContent ReceiveAllOrder(int purchaseOrderId, string lotNo) + { + try + { + Dt_PurchaseOrder purchaseOrder = Db.Queryable<Dt_PurchaseOrder>().Where(x => x.Id == purchaseOrderId).Includes(x => x.Details).First(); + if (purchaseOrder == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒拌閲囪喘鍗�"); + } + if (purchaseOrder.Details.Count == 0) + { + return WebResponseContent.Instance.Error($"鏈壘鍒伴噰璐崟鏄庣粏淇℃伅"); + } + if (purchaseOrder.PurchaseOrderStatus == PurchaseOrderStatusEnum.Received.ObjToInt()) + { + return WebResponseContent.Instance.Error($"宸叉敹璐у畬鎴�"); + } + if (purchaseOrder.Details.FirstOrDefault(x => x.PurchaseDetailStatus == PurchaseOrderStatusEnum.NotReceived.ObjToInt()) == null) + { + return WebResponseContent.Instance.Error($"宸叉敹璐у畬鎴�"); + } + List<Dt_CheckOrder> checkOrders = new List<Dt_CheckOrder>(); + List<Dt_MaterielInfo> materielInfos = new List<Dt_MaterielInfo>(); + List<Dt_ReceiveOrderDetail> receiveOrderDetails = new List<Dt_ReceiveOrderDetail>(); + Dt_ReceiveOrder receiveOrder = BaseDal.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.SuppliersId == purchaseOrder.SupplierCode && x.ReceiveOrderStatus != ReceiveOrderStatusEnum.Completed.ObjToInt()).Includes(x => x.Details).First(); + if (receiveOrder == null) + { + int rowNo = 0; + foreach (var item in purchaseOrder.Details) + { + Dt_MaterielInfo? materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode); + if (materielInfo == null) + { + materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == item.MaterielCode); + if (materielInfo == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�"); + } + materielInfos.Add(materielInfo); + } + Dt_ReceiveOrderDetail receiveOrderDetail = new Dt_ReceiveOrderDetail() + { + PurchaseOrderNo = purchaseOrder.PurchaseOrderNo, + ReceivedQuantity = item.PurchaseDetailQuantity, + MaterielCode = item.MaterielCode, + LotNo = lotNo, + PurchaseOrderDetailRowNo = item.RowNo, + IfInspection = materielInfo.IsCheck.ObjToInt(), + CurrCode = "", + PriceInTax = 0, + TaxRate = "", + RowNo = rowNo + 1, + Unit = item.Unit + }; + rowNo += 1; + receiveOrderDetails.Add(receiveOrderDetail); + #region 娉ㄩ噴 + //if (materielInfo.IsCheck == WhetherEnum.True) + //{ + // Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail); + // checkOrder.CheckOrderNo = "TestCheckNo21";//娴嬭瘯 + // checkOrder.ReceiveOrderNo = ""; + // checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity; + // checkOrder.ScrappedQuantity = 0; + // checkOrder.ReturnQuantity = 0; + // checkOrder.DefectedQuantity = 0; + // checkOrder.ReceiveDetailRowNo = rowNo; + // checkOrder.UploadStatus = CheckUploadEnum.UploadNo.ObjToInt(); + // checkOrders.Add(checkOrder); + //} + #endregion + } + receiveOrder = new Dt_ReceiveOrder() + { + ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt(), + CustomerId = "", + DeliveryCode = "/", + ReceiveDate = DateTime.Now, + ReceiveOrderType = ReceiveOrderTypeEnum.PO.ObjToInt(), + SuppliersId = purchaseOrder.SupplierCode, + WarehouseId = purchaseOrder.Details.FirstOrDefault()?.WarehouseId ?? 0, + UploadStatus = WhetherEnum.False.ObjToInt(), + Details = receiveOrderDetails + }; + } + else + { + int rowNo = receiveOrder.Details.Count > 0 ? receiveOrder.Details.Max(x => x.RowNo) : 0; + + foreach (var item in purchaseOrder.Details) + { + Dt_MaterielInfo? materielInfo = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode); + if (materielInfo == null) + { + materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == item.MaterielCode); + if (materielInfo == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�"); + } + materielInfos.Add(materielInfo); + } + Dt_ReceiveOrderDetail receiveOrderDetail = new Dt_ReceiveOrderDetail() + { + PurchaseOrderNo = purchaseOrder.PurchaseOrderNo, + ReceivedQuantity = item.PurchaseDetailQuantity, + MaterielCode = item.MaterielCode, + LotNo = lotNo, + ReceiveOrderId = receiveOrder.ReceiveOrderId, + PurchaseOrderDetailRowNo = item.RowNo, + IfInspection = materielInfo.IsCheck.ObjToInt(), + CurrCode = "", + PriceInTax = 0, + TaxRate = "", + RowNo = rowNo + 1, + Unit = item.Unit, + + }; + rowNo += 1; + receiveOrderDetails.Add(receiveOrderDetail); + + //if (materielInfo.IsCheck == WhetherEnum.True) + //{ + // Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail); + // checkOrder.CheckOrderNo = "Test-CheckNo1";//娴嬭瘯 + // checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity; + // checkOrder.ScrappedQuantity = 0; + // checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo; + // checkOrder.ReturnQuantity = 0; + // checkOrder.DefectedQuantity = 0; + // checkOrder.ReceiveDetailRowNo = rowNo; + // checkOrder.UploadStatus = CheckUploadEnum.UploadNo.ObjToInt(); + // checkOrders.Add(checkOrder); + //} + } + } + + purchaseOrder.Details.ForEach(x => x.PurchaseDetailStatus = PurchaseOrderStatusEnum.Received.ObjToInt()); + purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Received.ObjToInt(); + + _unitOfWorkManage.BeginTran(); + if (receiveOrder.ReceiveOrderId > 0) + { + Db.Insertable(receiveOrderDetails).ExecuteCommand(); + } + else + { + Db.InsertNav(receiveOrder).Include(x => x.Details).ExecuteCommand(); + checkOrders.ForEach(x => x.ReceiveOrderNo = receiveOrder.ReceiveOrderNo); + } + //if (checkOrders.Count > 0) + //{ + // _checkOrderRepository.AddData(checkOrders); + //} + _inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder); + _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrder.Details); + _unitOfWorkManage.CommitTran(); + return WebResponseContent.Instance.OK(); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + return WebResponseContent.Instance.Error(ex.Message); + } + } } } -- Gitblit v1.9.3