From bc3e001d093c3d6cbddc7e008aa99c12f850c1e5 Mon Sep 17 00:00:00 2001 From: wangxinhui <wangxinhui@hnkhzn.com> Date: 星期四, 26 十二月 2024 21:50:35 +0800 Subject: [PATCH] 更新 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs | 308 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 305 insertions(+), 3 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 9f09eff..e309926 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,6 @@ -锘縰sing System; +锘縰sing AutoMapper; +using MailKit.Search; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -6,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; @@ -17,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) @@ -64,7 +81,125 @@ 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, + CompanyId = "HATC", + DeliveryCode = receiveOrder.DeliveryCode, + CustomerId = receiveOrder.CustomerId, + CreatorId = "TC20082",//娴嬭瘯 receiveOrder.Creater + EntDate = receiveOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"), + ReceiveDate = receiveOrder.ReceiveDate.ToString("yyyy-MM-dd HH:mm:ss"), + PlantsId = "HA02", + SuppliersId = receiveOrder.SuppliersId, + Type = Enum.GetName(typeof(ReceiveOrderTypeEnum),receiveOrder.ReceiveOrderType), + UniqueTag = receiveOrder.ReceiveOrderId.ToString(), + WarehouseCode = warehouse.WarehouseCode, + Way = 1, + Details = recevieOrderDetails + }; + //鏀惰揣鎺ㄩ�佽嚦ERP + string Content = _invokeERPService.InvokeMatReceiveApi(receiveModel); + ErpRequestContent erpRequest=Content.DeserializeObject<ErpRequestContent>(); + if (erpRequest.res==0) + { + return WebResponseContent.Instance.Error(erpRequest.Data); + } + receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Completed.ObjToInt(); + receiveOrder.UploadStatus = WhetherEnum.True.ObjToInt(); + //鏇存柊鏀惰揣鍗曚俊鎭� + _unitOfWorkManage.BeginTran(); + BaseDal.UpdateData(receiveOrder); + _unitOfWorkManage.CommitTran(); + return WebResponseContent.Instance.OK(); + } + catch (Exception ex) + { + return WebResponseContent.Instance.Error(ex.Message); + } + } + + public WebResponseContent GetReceiveOrders(SaveModel saveModel) + { + WebResponseContent content = new WebResponseContent(); + try + { + int pageNo = saveModel.MainData["pageNo"].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); + } + 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); + } + + content.OK(data: dt_ReceiveOrders); + } + catch (Exception) + { + + throw; + } + return content; + } + /// <summary> + /// 鍒涘缓鍏ュ簱鍗� + /// </summary> + /// <param name="receiveOrderId">鏀惰揣鍗曠紪鍙�</param> + /// <returns></returns> public WebResponseContent CreateInboundOrder(int receiveOrderId) { try @@ -96,6 +231,7 @@ Dt_InboundOrder inboundOrder = new Dt_InboundOrder() { + InboundOrderNo="TestInboundNo1",//娴嬭瘯 UpperOrderNo = receiveOrder.ReceiveOrderNo, CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(), OrderStatus = InOrderStatusEnum.鏈紑濮�.ObjToInt(), @@ -125,7 +261,8 @@ OverInQuantity = 0, ReceiptQuantity = 0, RowNo = item.RowNo, - Unit = item.Unit + Unit = item.Unit, + BatchNo = item.LotNo }; inboundOrder.Details.Add(detail); } @@ -139,5 +276,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 == null || 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); + + if (materielInfo.IsCheck == WhetherEnum.True) + { + Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail); + checkOrder.CheckOrderNo = "TestCheckNo11";//娴嬭瘯 + 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); + } + } + receiveOrder = new Dt_ReceiveOrder() + { + ReceiveOrderNo= "TestReceiveOrderNo11",//娴嬭瘯 + 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