From efaf0b8aeb26aca6536a4b384c912cc3cac4d070 Mon Sep 17 00:00:00 2001 From: wangxinhui <wangxinhui@hnkhzn.com> Date: 星期六, 15 三月 2025 16:07:45 +0800 Subject: [PATCH] 成品代码,其他仓优化,前端优化界面增加 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs | 491 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 461 insertions(+), 30 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" index 20e9990..252b4b0 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" @@ -2,8 +2,10 @@ using HslCommunication.WebSocket; using Microsoft.AspNetCore.Mvc.RazorPages; using Newtonsoft.Json; +using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; using SqlSugar; using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; @@ -41,6 +43,7 @@ using WIDESEA_ITaskInfoService; using WIDESEA_Model.Models; using WIDESEA_StockRepository; +using static Org.BouncyCastle.Pqc.Crypto.Utilities.PqcOtherInfoGenerator; namespace WIDESEA_InboundService { @@ -71,43 +74,158 @@ _palletTypeInfoRepository = palletTypeInfoRepository; } /// <summary> - /// 鍏朵粬鍏ュ簱鍗曞垱寤� + /// 鍏朵粬鍏ュ簱鍗曟帴鏀�(璋冩嫈鍏ヤ粨,瀹緵鍥炴敹,鐗╂枡閿�鍞��璐�) /// </summary> /// <returns></returns> - public WebResponseContent ReceiveWarehousingOrder(ErpInOrderDTO erpInOrder) + public WebResponseContent ReceiveWarehousingOrder(ErpInOrderDTO model) + { + try + { + return model.Way switch + { + 1 => AddSingOrder(model), + 2 => UpdateSingOrder(model), + 3 => DeleteSingOrder(model), + _ => WebResponseContent.Instance.Error($"鎿嶄綔绫诲瀷涓嶅瓨鍦�,Way:{model.Way}"), + }; + } + catch (Exception ex) + { + return WebResponseContent.Instance.Error(ex.Message); + } + } + /// <summary> + /// 鏂板鍗曟嵁 + /// </summary> + public WebResponseContent AddSingOrder(ErpInOrderDTO model) { WebResponseContent content = new WebResponseContent(); try { - //鑾峰彇浠撳簱淇℃伅 - Dt_Warehouse warehouse = _warehouseService.Repository.QueryFirst(x => x.WarehouseCode == erpInOrder.WaId); + //鑾峰彇鐗╂枡淇℃伅 + Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x=>x.MaterielCode==model.MCode); + if (materielInfo==null) + { + return content.Error($"鐗╂枡{model.MCode}涓嶅瓨鍦�!"); + } + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == model.WaId); if (warehouse == null) { - return content.Error("鏈壘鍒颁粨搴撲俊鎭�"); + return content.Error($"鏈壘鍒颁粨搴撲俊鎭�"); } - //鑾峰彇鏄惁瀛樺湪璁㈠崟 - Dt_InboundOrder inboundOrder = BaseDal.QueryFirst(x => x.InboundOrderNo == erpInOrder.OrderNo); - if (erpInOrder.Way == 1) + Dt_InboundOrder inboundOrderOld = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.UpperOrderNo == model.OrderNo).Includes(x=>x.Details).First(); + if (inboundOrderOld!=null) { - if (inboundOrder != null) + if (inboundOrderOld.OrderStatus!= OrderDetailStatusEnum.New.ObjToInt()) { - + return content.Error($"{model.OrderNo}鍗曟嵁宸插紑濮�!"); } - } - else if (erpInOrder.Way == 2) - { - + Dt_InboundOrderDetail? inboundOrderDetailOld = inboundOrderOld.Details?.FirstOrDefault(x => x.RowNo == model.RowNo.ObjToInt() && x.MaterielCode == model.MCode); + if (inboundOrderDetailOld!=null) + { + inboundOrderDetailOld.OrderQuantity += model.Qty; + _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetailOld); + } + else + { + Dt_InboundOrderDetail orderDetail = new Dt_InboundOrderDetail() + { + OrderId= inboundOrderOld.Id, + MaterielCode = model.MCode, + BatchNo = "", + OrderQuantity = model.Qty, + ReceiptQuantity = 0, + OverInQuantity = 0, + OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(), + Unit = materielInfo.MaterielUnit, + RowNo = model.RowNo.ObjToInt(), + MaterielName = materielInfo.MaterielName, + MaterielSpec = materielInfo.MaterielSpec + }; + _inboundRepository.InboundOrderDetailRepository.AddData(orderDetail); + } } else { + Dt_InboundOrderDetail orderDetail = new Dt_InboundOrderDetail() + { + MaterielCode = model.MCode, + BatchNo = "", + OrderQuantity = model.Qty, + ReceiptQuantity = 0, + OverInQuantity = 0, + OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(), + Unit = materielInfo.MaterielUnit, + RowNo = model.RowNo.ObjToInt(), + MaterielName = materielInfo.MaterielName, + MaterielSpec = materielInfo.MaterielSpec + }; + Dt_InboundOrder inboundOrder = new Dt_InboundOrder() + { + UpperOrderNo = model.OrderNo, + WarehouseId = warehouse.WarehouseId, + SupplierId = "", + OrderStatus = InOrderStatusEnum.鏈紑濮�.ObjToInt(), + CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(), + Remark = model.Note, + Details = new List<Dt_InboundOrderDetail> { orderDetail } + }; + switch (model.OType) + { + case 1: + inboundOrder.OrderType = InOrderTypeEnum.Allocat.ObjToInt(); + break; + case 3: + inboundOrder.OrderType = InOrderTypeEnum.CustomerRecovery.ObjToInt(); + break; + case 6: + inboundOrder.OrderType = InOrderTypeEnum.SaleReturn.ObjToInt(); + break; + default: + break; + }; + Db.InsertNav(inboundOrder).Include(x => x.Details).ExecuteCommand(); } - return content.OK(); + return content.OK("鎴愬姛"); } catch (Exception ex) { content.Error(ex.Message); } + return content; + } + /// <summary> + /// 淇敼鍗曟嵁 + /// </summary> + public WebResponseContent UpdateSingOrder(ErpInOrderDTO model) + { + WebResponseContent content = new WebResponseContent(); + try + { + //鑾峰彇鍗曟嵁淇℃伅 + Dt_InboundOrder inboundOrder = Db.Queryable<Dt_InboundOrder>().Where(x => x.UpperOrderNo == model.OrderNo).First(); + if (inboundOrder == null) + { + return content.Error($"鍗曟嵁{model.OrderNo}涓嶅瓨鍦�!"); + } + if (inboundOrder.OrderStatus>=InOrderStatusEnum.鍏ュ簱涓�.ObjToInt()) + { + return content.Error($"鍗曟嵁{model.OrderNo}鍏ュ簱涓垨宸插畬鎴�"); + } + } + catch (Exception ex) + { + content.Error(ex.Message); + } + return content; + } + /// <summary> + /// 鍒犻櫎鍗曟嵁 + /// </summary> + public WebResponseContent DeleteSingOrder(ErpInOrderDTO model) + { + WebResponseContent content = new WebResponseContent(); return content; } public WebResponseContent GetInboundOrders(SaveModel saveModel) @@ -289,16 +407,16 @@ int oldCount = inboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count; Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == inboundOrder.UpperOrderNo).Includes(x => x.Details).First(); - if (receiveOrder == null) + if (receiveOrder == null && inboundOrder.OrderType==InOrderTypeEnum.Purchase.ObjToInt()) { return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鏀惰揣鍗�"); } - if (receiveOrder.Details == null || receiveOrder.Details.Count <= 0) + if ((receiveOrder?.Details == null || receiveOrder?.Details.Count <= 0) && inboundOrder.OrderType == InOrderTypeEnum.Purchase.ObjToInt()) { return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鏀惰揣鍗曟槑缁�"); } - List<string> purchaseOrderNos = receiveOrder.Details.Select(x => x.PurchaseOrderNo).ToList(); + List<string> purchaseOrderNos = receiveOrder?.Details.Select(x => x.PurchaseOrderNo).ToList(); List<MatSerNumAnalysisModel> models = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNums); @@ -325,7 +443,7 @@ if (!inboundOrderDetails.Any(x => x.BatchNo == model.LotNo)) return WebResponseContent.Instance.Error($"鏈湪鍏ュ簱鍗曟槑缁嗕腑鎵惧埌璇ョ墿鏂欐壒娆°�恵model.LotNo}銆�"); } - if (receiveOrder.Details.FirstOrDefault(x => x.MaterielCode == materielCode) == null) + if (receiveOrder?.Details.FirstOrDefault(x => x.MaterielCode == materielCode) == null && inboundOrder.OrderType == InOrderTypeEnum.Purchase.ObjToInt()) { return WebResponseContent.Instance.Error($"鏈湪鏀惰揣鍗曟槑缁嗕腑鎵惧埌璇ョ墿鏂欎俊鎭�"); } @@ -342,9 +460,10 @@ List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>(); List<int> detailKeys = new List<int>(); + Dt_ReturnOrder? returnOrder = null; foreach (var model in models) { - if (purchaseOrderNos.FirstOrDefault(x => x == model.PurchaseOrderNo) == null) + if (purchaseOrderNos?.FirstOrDefault(x => x == model.PurchaseOrderNo) == null && inboundOrder.OrderType == InOrderTypeEnum.Purchase.ObjToInt()) { return WebResponseContent.Instance.Error($"鏈湪鏀惰揣鍗曟槑缁嗕腑鎵惧埌璇ラ噰璐崟"); } @@ -362,6 +481,7 @@ BatchNo = model.LotNo, MaterielCode = materielInfo.MaterielCode, MaterielName = materielInfo.MaterielName, + MaterielSpec=materielInfo.MaterielSpec, OrderNo = inboundOrder.InboundOrderNo, SerialNumber = model.SerialNumber, StockQuantity = model.Quantity, @@ -391,6 +511,21 @@ if (inboundOrder.Details.Count == oldCount) { inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt(); + //鍒ゆ柇鏄惁涓洪��鏂欏叆搴撳崟 + if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt()) + { + returnOrder = _inboundRepository.ReturnOrderRepository.Db.Queryable<Dt_ReturnOrder>().Where(x => x.OrderNo == inboundOrder.UpperOrderNo).Includes(x => x.Details).First(); + returnOrder.ReturnOrderStatus = ReturnOrderStatusEnum.Returned.ObjToInt(); + foreach (var item in inboundOrder.Details) + { + Dt_ReturnOrderDetail returnOrderDetail = returnOrder.Details?.FirstOrDefault(x => x.MCode == item.MaterielCode); + if (returnOrderDetail != null) + { + returnOrderDetail.OverReturnQty = item.OverInQuantity; + returnOrderDetail.OrderDetailStatus = ReturnOrderStatusEnum.Returned.ObjToInt(); + } + } + } } else inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱涓�.ObjToInt(); @@ -407,12 +542,26 @@ } _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetails); _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder); + if (returnOrder != null) + { + _inboundRepository.ReturnOrderRepository.UpdateData(returnOrder); + _inboundRepository.ReturnOrderDetailRepository.UpdateData(returnOrder.Details); + } _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.Inbound); _unitOfWorkManage.CommitTran(); #region 鍏ュ簱瀹屾垚涓婃姤ERP - if (inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt()) - FeedbackInboundOrder(inboundOrder); + if (inboundOrder != null && inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && inboundOrder.OrderType != InOrderTypeEnum.Allocat.ObjToInt()) + { + if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt()) + { + FeedbackReturnOrder(inboundOrder, returnOrder); + } + else + { + FeedbackInboundOrder(inboundOrder.Id); + } + } #endregion content.OK(); } @@ -469,6 +618,7 @@ BatchNo = model.LotNo, MaterielCode = materielInfo.MaterielCode, MaterielName = materielInfo.MaterielName, + MaterielSpec = materielInfo.MaterielSpec, SerialNumber = model.SerialNumber, StockQuantity = model.Quantity, OutboundQuantity = 0, @@ -539,7 +689,12 @@ { return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅"); } - + List<MatSerNumAnalysisModel> models = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNums); + //闄ら噰璐叆搴撳崟浠ュ鍏朵粬鍏ュ簱鍗曠粍鐩樻暟鎹鐞� + if (inboundOrder.OrderType != InOrderTypeEnum.Purchase.ObjToInt()) + { + return OtherInGroup(inboundOrder, palletCode, Initiallife, warehouse, models); + } Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == inboundOrder.UpperOrderNo).Includes(x => x.Details).First(); if (receiveOrder == null) { @@ -551,8 +706,6 @@ } List<string> purchaseOrderNos = receiveOrder.Details.Select(x => x.PurchaseOrderNo).ToList(); - - List<MatSerNumAnalysisModel> models = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNums); if (models.Select(x => x.MaterielCode).Distinct().Count() > 1) { @@ -622,16 +775,23 @@ stockInfo.PalletType = PalletTypeEnum.LargestPallet.ObjToInt(); } } + else if(warehouse.WarehouseCode == WarehouseEnum.HA57.ToString()) + { + if (models.Count >= 2) + { + return WebResponseContent.Instance.Error($"缁勭洏鏄庣粏涓嶅敮涓�"); + } + } List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>(); foreach (var model in models) { if (purchaseOrderNos.FirstOrDefault(x => x == model.PurchaseOrderNo) == null) { - return WebResponseContent.Instance.Error($"鏈湪鏀惰揣鍗曟槑缁嗕腑鎵惧埌璇ラ噰璐崟"); + return WebResponseContent.Instance.Error($"鏈湪閲囪喘鍗曟槑缁嗕腑鎵惧埌璇ラ噰璐崟"); } - Dt_InboundOrderDetail? notGroupDetail = inboundOrderDetails.Where(x => x.OrderDetailStatus < OrderDetailStatusEnum.Inbounding.ObjToInt() && x.MaterielCode==model.MaterielCode && x.BatchNo==model.LotNo && x.OrderQuantity > x.ReceiptQuantity).FirstOrDefault(); + Dt_InboundOrderDetail? notGroupDetail = inboundOrderDetails.Where(x => x.OrderDetailStatus <= OrderDetailStatusEnum.Inbounding.ObjToInt() && x.MaterielCode==model.MaterielCode && x.BatchNo==model.LotNo && x.OrderQuantity > x.ReceiptQuantity).FirstOrDefault(); if (notGroupDetail == null) { @@ -642,6 +802,7 @@ BatchNo = model.LotNo, MaterielCode = materielInfo.MaterielCode, MaterielName = materielInfo.MaterielName, + MaterielSpec = materielInfo.MaterielSpec, OrderNo = inboundOrder.InboundOrderNo, SerialNumber = model.SerialNumber, StockQuantity = model.Quantity, @@ -694,7 +855,149 @@ } return content; } + public WebResponseContent OtherInGroup(Dt_InboundOrder inboundOrder,string? palletCode,int Initiallife,Dt_Warehouse warehouse,List<MatSerNumAnalysisModel> models) + { + WebResponseContent content = new WebResponseContent(); + try + { + if (models.Select(x => x.MaterielCode).Distinct().Count() > 1) + { + return content.Error($"鐗╂枡涓嶅彲娣锋斁"); + } + string materielCode = models.FirstOrDefault()?.MaterielCode ?? ""; + Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materielCode); + if (materielInfo == null) + { + return content.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�"); + } + + List<Dt_InboundOrderDetail> inboundOrderDetails = inboundOrder.Details.Where(x => x.MaterielCode == materielCode).ToList(); + + if (inboundOrderDetails == null || inboundOrderDetails.Count <= 0) + { + return content.Error($"鏈湪鍏ュ簱鍗曟槑缁嗕腑鎵惧埌璇ョ墿鏂欎俊鎭�"); + } + + float beforeQuantity = 0; + + Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First(); + if (stockInfo == null) + { + stockInfo = new Dt_StockInfo() + { + PalletCode = palletCode, + StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(), + WarehouseId = inboundOrder.WarehouseId, + PalletType = GetPalletType(warehouse, palletCode), + Details = new List<Dt_StockInfoDetail>() + }; + } + else + { + if (stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt()) + { + return content.Error($"鎵樼洏鍙烽噸澶�"); + } + beforeQuantity = stockInfo.Details.Sum(x => x.StockQuantity); + } + + if (warehouse.WarehouseCode == WarehouseEnum.HA64.ToString()) + { + stockInfo.Remark = Initiallife.ToString(); + string batchNo = models.FirstOrDefault()?.LotNo ?? ""; + Dt_StockInfoDetail existDetail = _stockRepository.StockInfoDetailRepository.QueryFirst(x => x.BatchNo == batchNo); + if (existDetail != null) + { + return content.Error($"{batchNo}娴嬭瘯鏋跺凡瀛樺湪"); + } + if (models.Count >= 2) + { + return content.Error($"缁勭洏鏄庣粏涓嶅敮涓�"); + } + if (palletCode.Substring(0, 1) == "6") + { + stockInfo.PalletType = PalletTypeEnum.MediumPallet.ObjToInt(); + } + else + { + stockInfo.PalletType = PalletTypeEnum.LargestPallet.ObjToInt(); + } + } + else if (warehouse.WarehouseCode == WarehouseEnum.HA57.ToString()) + { + if (models.Count >= 2) + { + return content.Error($"缁勭洏鏄庣粏涓嶅敮涓�"); + } + } + + List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>(); + foreach (var model in models) + { + Dt_InboundOrderDetail? notGroupDetail = inboundOrderDetails.Where(x => x.OrderDetailStatus <= OrderDetailStatusEnum.Inbounding.ObjToInt() && x.MaterielCode == model.MaterielCode && x.OrderQuantity > x.ReceiptQuantity).FirstOrDefault(); + + if (notGroupDetail == null) + { + return WebResponseContent.Instance.Error($"璇ョ墿鏂欏湪璇ュ叆搴撳崟涓凡鍏ㄩ儴缁勭洏瀹屾垚"); + } + Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail() + { + BatchNo = model.LotNo, + MaterielCode = materielInfo.MaterielCode, + MaterielName = materielInfo.MaterielName, + MaterielSpec = materielInfo.MaterielSpec, + OrderNo = inboundOrder.InboundOrderNo, + SerialNumber = model.SerialNumber, + StockQuantity = model.Quantity, + OutboundQuantity = 0, + Unit = materielInfo.MaterielUnit, + Status = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(), + ProductionDate = model.ProductionDate, + EffectiveDate = model.EffectiveDate, + InboundOrderRowNo = notGroupDetail.RowNo, + }; + + if (stockInfo.Id > 0) + { + stockInfoDetail.StockId = stockInfo.Id; + } + stockInfo.Details.Add(stockInfoDetail); + + stockInfoDetails.Add(stockInfoDetail); + + notGroupDetail.ReceiptQuantity += model.Quantity; + if (notGroupDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) + { + notGroupDetail.OrderDetailStatus = OrderDetailStatusEnum.GroupAndInbound.ObjToInt(); + } + } + + float totalQuantity = stockInfo.Details.Sum(x => x.StockQuantity); + + inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱涓�.ObjToInt(); + + _unitOfWorkManage.BeginTran(); + if (stockInfo.Id == 0) + { + _stockRepository.StockInfoRepository.Db.InsertNav(stockInfo).Include(x => x.Details).ExecuteCommand(); + } + else + { + _stockRepository.StockInfoRepository.Db.UpdateNav(stockInfo).Include(x => x.Details, new UpdateNavOptions() { OneToManyInsertOrUpdate = true }).ExecuteCommand(); + } + _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetails); + _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder); + _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.MaterielGroup); + _unitOfWorkManage.CommitTran(); + content.OK(); + } + catch (Exception ex) + { + content.Error(ex.Message); + } + return content; + } public WebResponseContent MaterielGroup(string palletCode, int Initiallife, int warehouseId, List<string> serNums) { @@ -767,6 +1070,13 @@ stockInfo.PalletType = PalletTypeEnum.LargestPallet.ObjToInt(); } } + else if (warehouse.WarehouseCode == WarehouseEnum.HA57.ToString()) + { + if (models.Count >= 2) + { + return WebResponseContent.Instance.Error($"缁勭洏鏄庣粏涓嶅敮涓�"); + } + } List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>(); List<int> detailKeys = new List<int>(); @@ -777,6 +1087,7 @@ BatchNo = model.LotNo, MaterielCode = materielInfo.MaterielCode, MaterielName = materielInfo.MaterielName, + MaterielSpec = materielInfo.MaterielSpec, OrderNo = "", SerialNumber = model.SerialNumber, StockQuantity = model.Quantity, @@ -823,11 +1134,12 @@ /// 鍏ュ簱瀹屾垚涓婃姤ERP /// </summary> /// <returns></returns> - public WebResponseContent FeedbackInboundOrder(Dt_InboundOrder inboundOrder) + public WebResponseContent FeedbackInboundOrder(int inboundOrderId) { WebResponseContent content = new WebResponseContent(); try { + Dt_InboundOrder inboundOrder = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.Id == inboundOrderId).Includes(x => x.Details).First(); if (inboundOrder.Details.Count == 0) { return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅"); @@ -891,6 +1203,125 @@ } return content; } + /// <summary> + /// 閫�鏂欏畬鎴愪笂鎶ヨ嚦ERP + /// </summary> + public WebResponseContent FeedbackReturnOrder(Dt_InboundOrder inboundOrder,Dt_ReturnOrder returnOrder) + { + WebResponseContent content= new WebResponseContent(); + try + { + if (returnOrder==null) + { + return content.OK(); + } + //鑾峰彇浠撳簱缂栫爜 + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseId==inboundOrder.WarehouseId); + + var groupedDetails = returnOrder.Details.GroupBy(d => new { d.PickCode, d.RowId }) + .Select(g => new + { + PickCode = returnOrder.OrderNo, + RowIndex = g.Key.RowId, + Details = g.ToList() + }) + .ToList(); + // 鏋勫缓宓屽缁撴瀯 + var issitems = groupedDetails.Select(g => new ReturnItem + { + Pickcode = g.PickCode, + Rowindex = g.RowIndex, + PickList = g.Details + .GroupBy(d => d.MCode) + .Select(mg => new ReturnPickItem + { + Material = mg.Key, + Qty = mg.Sum(x => x.ReturnQty), + Dataitem = mg.Select(d => new ReturnDataItem + { + Lotno = d.BatchNo, + Qty = d.ReturnQty, + Location = warehouse.WarehouseCode, + Msfpart = d.Code + }).ToList() + }).ToList() + }).ToList(); + //鑾峰彇瀵瑰簲閫�鏂欏崟 + ERPReturnModel returnModel = new ERPReturnModel() + { + Way = 1, + UniqueTag = returnOrder.Id.ToString(), + Code = CreateCodeByRule(nameof(RuleCodeEnum.TLCodeRule)), + WarehouseCode = warehouse.WarehouseCode, + Createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + Createuser=inboundOrder.Creater, + IsDev=returnOrder.IsDev, + Issitem= issitems + }; + _invokeERPService.InvokeReturnApi(returnModel); + return content.OK(); + } + catch (Exception ex) + { + content.Error(ex.Message); + } + return content; + } + /// <summary> + /// 鎴愬搧鍏ュ簱涓婁紶ERP + /// </summary> + public WebResponseContent FeedbackProIn(Dt_MesProInOrder mesProInOrder) + { + WebResponseContent content = new WebResponseContent(); + try + { + List<ERPProItemsItem> proItemsItems = new List<ERPProItemsItem>(); + foreach (var item in mesProInOrder.Details) + { + ERPProItemsItem proItemsItem = new ERPProItemsItem() + { + PartNum = item.ProductCode, + Rev=item.ProductVersion, + DateCode=item.DateCode, + BatchNumber= item.BagNo, + XLocation=item.XSite, + Xqty=item.XQty, + QtySet=item.SETQty, + QtyPcs=item.OKPCSQTY, + WoList=new List<ERPProListItem>() + { + new ERPProListItem() + { + moNumber=item.MoNumber, + WoNumber=item.ERPOrder, + QtyPcs=item.OKPCSQTY, + QtySet=item.SETQty + } + } + }; + proItemsItems.Add(proItemsItem); + } + ERPProInboundModel proInboundModel = new ERPProInboundModel() + { + Way = 1, + Code = mesProInOrder.ProInOrderNo, + CreatorCode = "GSWMS", + CompanyCode = "HATC", + FactoryCode = "HA02", + WarehouseCode = "HA71", + LocationCode = "HA71", + StockDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + StockFormType= "Production", + StockFormItems= proItemsItems + }; + _invokeERPService.InvokeProInApi(proInboundModel); + } + catch (Exception ex) + { + content.Error(ex.Message); + } + return content; + } static object lock_code = new object(); public string CreateCodeByRule(string ruleCode) { @@ -950,7 +1381,7 @@ return code; } } - + #region 寮冪敤 /// <summary> /// 鍏ュ簱瀹屾垚鍥炰紶鍒癊RP /// </summary> @@ -1033,7 +1464,7 @@ // return WebResponseContent.Instance.Error(ex.Message); // } //} - + #endregion public int GetPalletType(Dt_Warehouse warehouse, string palletCode) { if (warehouse.WarehouseCode == WarehouseEnum.HA64.ToString()) -- Gitblit v1.9.3