WMS/WIDESEA_WMSServer/WIDESEA_Common/HouseInbound.cs
@@ -31,8 +31,11 @@ /// <summary> /// åºå ¥åºç±»å /// </summary> public int InoutType { get; set; } public decimal InoutType { get; set; } /// <summary> /// å建è /// </summary> public string CreateBy { get; set; } /// <summary> /// æ¨åç³»ç» /// </summary> @@ -88,7 +91,7 @@ public class BoxList { public float BoxId { get; set; } public double BoxId { get; set; } public string BoxCode { get; set; } @@ -96,10 +99,14 @@ public string PartNum { get; set; } public float JobId { get; set; } public decimal JobId { get; set; } public float QtyOfpcs { get; set; } public decimal QtyOfpcs { get; set; } public float QtyOfxout { get; set; } public decimal QtyOfxout { get; set; } public string LPNNO { get; set; } public string OrinalLocation { get; set; } } } WMS/WIDESEA_WMSServer/WIDESEA_Common/NewHouseInboundPassBack.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,89 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static WIDESEA_Common.NewHouseInboundPassBack.Parame.Syncretism; namespace WIDESEA_Common { public class NewHouseInboundPassBack { public List<Parame> Parameters = new List<Parame>(); public string ApiType { get; set; } public string Method { get; set; } public Dictionary<string, string> Context { get; set; } public class Parame { public Syncretism Value = new Syncretism(); public class Syncretism { public string OrderNo { get; set; } public List<details> Details = new List<details>(); public class details { /// <summary> /// åå§LPN /// </summary> public string Lpn { get; set; } /// <summary> /// ç§»åºåç±»å /// </summary> public int MoveType { get; set; } /// <summary> /// ä»åº (åè´§ä»åº) /// </summary> public string WareHouseCode { get; set; } /// <summary> /// ç©æç¼ç /// </summary> public string ItemCode { get; set; } /// <summary> /// ç§»åºæ°é /// </summary> public decimal MoveNumber { get; set; } /// <summary> /// ç©ææ¹æ¬¡ /// </summary> public string LotNo { get; set; } /// <summary> /// çäº§æ¹æ¬¡ /// </summary> public string WipBatch { get; set; } /// <summary> /// æ¥æºåºä½ /// </summary> public string LocationName { get; set; } /// <summary> /// ç®æ åºä½ /// </summary> public string TargetLocName { get; set; } /// <summary> /// ç®æ LPN /// </summary> public string TargetLpn { get; set; } } } } } } WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/OrderEnum.cs
@@ -225,6 +225,12 @@ /// </summary> [Description("çäº§å ¥åºå")] works = 2, /// <summary> /// è°æ¨åºåºå /// </summary> [Description("è°æ¨åºåºå")] Allocate = 4, /// <summary> /// ç产è¿å·¥å /// </summary> @@ -243,11 +249,7 @@ [Description("éè´éè´§å")] ProcureReturn = 210, /// <summary> /// è°æ¨åºåºå /// </summary> [Description("è°æ¨åºåºå")] Allocate = 215, /// <summary> /// éå®åºåºå WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderService.cs
@@ -20,6 +20,7 @@ WebResponseContent CancelOut(HouseCancelOut houseCancelOut); WebResponseContent NewCancelOut(HouseCancelOut houseCancelOut); WebResponseContent Save(OutboundOrderAddDTO orderAddDTO); WebResponseContent GetCodeByWarehouse(int warehouseId); WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Base/InboundOrderService.cs
@@ -553,7 +553,7 @@ /// <param name="materielGroupDTO"></param> /// <returns></returns> #region public WebResponseContent CP1MaterielGroup(SaveModel saveModel) public WebResponseContent CPMaterielGroup(SaveModel saveModel) { WebResponseContent content = new WebResponseContent(); try @@ -762,6 +762,8 @@ QtyOfpcs = item.QtyOfpcs, QtyOfxout = item.QtyOfxout, CPStockDetailStatus = (int)StockStatusEmun.ç»çæå, LPNNO = item.LPNNO, OrinalLocation = item.OrinalLocation, Creater = "䏿¸¸WMS", }; stockInfoDetailCP.Add(stockInfoDetailCP1); @@ -854,7 +856,7 @@ #endregion public WebResponseContent CPMaterielGroup(SaveModel saveModel) public WebResponseContent CP1MaterielGroup(SaveModel saveModel) { WebResponseContent content = new WebResponseContent(); try @@ -1127,6 +1129,7 @@ } public string ReceiveWMSTaskin = WIDESEA_Core.Helper.AppSettings.Configuration["ReceiveWMSTaskin"]; /// <summary> /// ç»çåæ /// </summary> @@ -1407,10 +1410,6 @@ } if (warehouse.WarehouseCode.Contains("CP")) { if (item.SupplierBatch == null) { return content.Error("ä¾åºåæ¹æ¬¡ä¸å¯ä¸ºç©º"); } Dt_InboundOrder inboundOrderOld = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.UpperOrderNo == model.AsnNo).Includes(x => x.Details).First(); if (inboundOrderOld != null) @@ -1442,6 +1441,8 @@ QtyOfpcs = (float)list.QtyOfpcs, QtyOfxout = (float)list.QtyOfxout, CPOrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(), LPNNO = list.LPNNO, OrinalLocation = list.OrinalLocation, Creater = "䏿¸¸WMS", }; cPInboundOrderDetail.Add(cPInboundOrderDetail1); @@ -1484,6 +1485,8 @@ QtyOfpcs = (float)list.QtyOfpcs, QtyOfxout = (float)list.QtyOfxout, CPOrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(), LPNNO = list.LPNNO, OrinalLocation = list.OrinalLocation, Creater = "䏿¸¸WMS", }; cPInboundOrderDetail.Add(cPInboundOrderDetail1); @@ -1506,7 +1509,6 @@ OrinalLocation = item.OrinalLocation, CPDetails = cPInboundOrderDetail }; Dt_InboundOrder inboundOrder = new Dt_InboundOrder() { OrderNo = model.AsnNo, @@ -1544,10 +1546,10 @@ } else { if (item.SupplierBatch == null) { return content.Error("ä¾åºåæ¹æ¬¡ä¸å¯ä¸ºç©º"); } //if (item.SupplierBatch == null) //{ // return content.Error("ä¾åºåæ¹æ¬¡ä¸å¯ä¸ºç©º"); //} Dt_InboundOrder inboundOrderOld = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.UpperOrderNo == model.AsnNo).Includes(x => x.Details).First(); if (inboundOrderOld != null) @@ -1974,119 +1976,119 @@ _unitOfWorkManage.BeginTran(); foreach (var item in houseReturnOrder) { int randomNum = random.Next(1, 1000); string datePart = DateTime.Now.ToString("yyyyMMdd"); Dt_ReturnOrder returnOrder = _returnOrderRepository.QueryFirst(x => x.LPNNo == item.LPNNo && x.OrderStatus == InOrderStatusEnum.æªå¼å§.ObjToInt()); if (returnOrder == null) { Dt_ReturnOrder newReturnOrder = new Dt_ReturnOrder int randomNum = random.Next(1, 1000); string datePart = DateTime.Now.ToString("yyyyMMdd"); Dt_ReturnOrder returnOrder = _returnOrderRepository.QueryFirst(x => x.LPNNo == item.LPNNo && x.OrderStatus == InOrderStatusEnum.æªå¼å§.ObjToInt()); if (returnOrder == null) { OrderType = OrderTypeEnum.忣ååºå.ObjToInt(), MaterielCode = item.MaterielCode, MaterielName = item.MaterielName, Dt_ReturnOrder newReturnOrder = new Dt_ReturnOrder { OrderType = OrderTypeEnum.忣ååºå.ObjToInt(), MaterielCode = item.MaterielCode, MaterielName = item.MaterielName, MaterieSpec = item.MaterieSpec, BatchNo = item.BatchNo, OrderQuantity = item.OrderQuantity, BatchNo = item.BatchNo, OrderQuantity = item.OrderQuantity, Remark = item.Remark, LinId = item.LinId, LPNNo = item.LPNNo, LinId = item.LinId, LPNNo = item.LPNNo, LocationCode = item.LocationCode, WarehouseCode = item.WarehouseCode, System = item.System, OrderStatus = InOrderStatusEnum.æªå¼å§.ObjToInt(), Creater = "SMOM", CreateDate = DateTime.Now }; _returnOrderRepository.AddData(newReturnOrder); Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo, Dt_StockInfoDetail>((stock, detail) => stock.Id == detail.StockId).Where((stock, detail) => stock.PalletCode == item.LPNNo && stock.LocationCode == item.LocationCode).First(); Dt_OutboundOrderDetail outboundOrderDetail = new Dt_OutboundOrderDetail(); Dt_OutboundOrder outboundOrder = new Dt_OutboundOrder(); if (stockInfo == null) { Dt_Warehouse warehouse = _warehouseService.Repository.QueryData(x => x.WarehouseCode == item.WarehouseCode).FirstOrDefault(); if (warehouse == null) { return WebResponseContent.Instance.Error($"该ä»åºç¼å·{item.WarehouseCode}æªé ç½®"); } Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail { MaterielCode = item.MaterielCode, MaterielName = item.MaterielName, MaterieSpec = item.MaterieSpec, BatchNo = item.BatchNo, LinId = item.LinId, Status = StockStatusEmun.ç»çæå.ObjToInt(), OrderStatus = InOrderStatusEnum.æªå¼å§.ObjToInt(), Creater = "SMOM", CreateDate = DateTime.Now, OrderNo = newReturnOrder.OrderNo, StockQuantity = item.OrderQuantity, CreateDate = DateTime.Now }; Dt_StockInfo stockInfo1 = new Dt_StockInfo { PalletCode = item.LPNNo, WarehouseId = warehouse.WarehouseId, BatchNo = item.BatchNo, PalletType = GetPalletType(warehouse, item.LPNNo), IsFull = true, StockStatus = (int)StockStatusEmun.åæ£å ¥åº, Creater = "WMS", CreateDate = DateTime.Now, MaterialType = (int)InventoryMaterialType.åææ, Materialweight = 0, Wlstatus = (int)InventoryMaterialStatus.åæ ¼, Mgeneratetime = DateTime.Now, Details = new List<Dt_StockInfoDetail> { stockInfoDetail } }; Db.InsertNav(stockInfo1).Include(x => x.Details).ExecuteCommand(); _returnOrderRepository.AddData(newReturnOrder); Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo, Dt_StockInfoDetail>((stock, detail) => stock.Id == detail.StockId).Where((stock, detail) => stock.PalletCode == item.LPNNo && stock.LocationCode == item.LocationCode).First(); Dt_OutboundOrderDetail outboundOrderDetail = new Dt_OutboundOrderDetail(); Dt_OutboundOrder outboundOrder = new Dt_OutboundOrder(); if (stockInfo == null) { Dt_Warehouse warehouse = _warehouseService.Repository.QueryData(x => x.WarehouseCode == item.WarehouseCode).FirstOrDefault(); if (warehouse == null) { return WebResponseContent.Instance.Error($"该ä»åºç¼å·{item.WarehouseCode}æªé ç½®"); } Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail { MaterielCode = item.MaterielCode, MaterielName = item.MaterielName, MaterieSpec = item.MaterieSpec, BatchNo = item.BatchNo, LinId = item.LinId, Status = StockStatusEmun.ç»çæå.ObjToInt(), Creater = "SMOM", CreateDate = DateTime.Now, OrderNo = newReturnOrder.OrderNo, StockQuantity = item.OrderQuantity, }; Dt_StockInfo stockInfo1 = new Dt_StockInfo { PalletCode = item.LPNNo, WarehouseId = warehouse.WarehouseId, BatchNo = item.BatchNo, PalletType = GetPalletType(warehouse, item.LPNNo), IsFull = true, StockStatus = (int)StockStatusEmun.åæ£å ¥åº, Creater = "WMS", CreateDate = DateTime.Now, MaterialType = (int)InventoryMaterialType.åææ, Materialweight = 0, Wlstatus = (int)InventoryMaterialStatus.åæ ¼, Mgeneratetime = DateTime.Now, Details = new List<Dt_StockInfoDetail> { stockInfoDetail } }; Db.InsertNav(stockInfo1).Include(x => x.Details).ExecuteCommand(); } else { outboundOrderDetail = new Dt_OutboundOrderDetail { MaterielCode = item.MaterielCode, MaterielName = item.MaterielName, MaterieSpec = item.MaterieSpec, BatchNo = item.BatchNo, OrderQuantity = stockInfo.Details.Sum(x => x.StockQuantity), Remark = item.Remark, LinId = item.LinId, LPNNo = item.LPNNo, Creater = "SMOM", CreateDate = DateTime.Now, LocationName = item.LocationCode }; outboundOrder = new Dt_OutboundOrder { OrderNo = "FJCK" + $"{datePart}{randomNum}", UpperOrderNo = "WMSFJCK" + $"{datePart}{randomNum}", OrderStatus = OutOrderStatusEnum.æªå¼å§.ObjToInt(), OrderType = OrderTypeEnum.忣åºåºå.ObjToInt(), InoutType = InoutTypeEnum.OtherOut.ToString(), System = item.System, Creater = "SMOM", CreateDate = DateTime.Now, CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(), Details = new List<Dt_OutboundOrderDetail> { outboundOrderDetail } }; Db.InsertNav(outboundOrder).Include(x => x.Details).ExecuteCommand(); } } else { outboundOrderDetail = new Dt_OutboundOrderDetail { MaterielCode = item.MaterielCode, MaterielName = item.MaterielName, MaterieSpec = item.MaterieSpec, BatchNo = item.BatchNo, OrderQuantity = stockInfo.Details.Sum(x => x.StockQuantity), Remark = item.Remark, LinId = item.LinId, LPNNo = item.LPNNo, Creater = "SMOM", CreateDate = DateTime.Now, LocationName = item.LocationCode }; outboundOrder = new Dt_OutboundOrder { OrderNo = "FJCK" + $"{datePart}{randomNum}", UpperOrderNo = "WMSFJCK" + $"{datePart}{randomNum}", OrderStatus = OutOrderStatusEnum.æªå¼å§.ObjToInt(), OrderType = OrderTypeEnum.忣åºåºå.ObjToInt(), InoutType = InoutTypeEnum.OtherOut.ToString(), System = item.System, Creater = "SMOM", CreateDate = DateTime.Now, CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(), Details = new List<Dt_OutboundOrderDetail> { outboundOrderDetail } }; Db.InsertNav(outboundOrder).Include(x => x.Details).ExecuteCommand(); } } else { Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo, Dt_StockInfoDetail>((stock, detail) => stock.Id == detail.StockId).Where((stock, detail) => stock.PalletCode == item.LPNNo && stock.StockStatus == StockStatusEmun.使éåº.ObjToInt()).First(); stockInfo.StockStatus = StockStatusEmun.åæ£å ¥åº.ObjToInt(); returnOrder.LinId = item.LinId; Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo, Dt_StockInfoDetail>((stock, detail) => stock.Id == detail.StockId).Where((stock, detail) => stock.PalletCode == item.LPNNo && stock.StockStatus == StockStatusEmun.使éåº.ObjToInt()).First(); stockInfo.StockStatus = StockStatusEmun.åæ£å ¥åº.ObjToInt(); returnOrder.LinId = item.LinId; returnOrder.System = item.System; returnOrder.WarehouseCode = item.WarehouseCode; returnOrder.LocationCode = item.LocationCode; returnOrder.OrderType = OrderTypeEnum.忣ååºå.ObjToInt(); returnOrder.OrderQuantity += item.OrderQuantity; returnOrder.ReceiptQuantity += item.OrderQuantity; _returnOrderRepository.UpdateData(returnOrder); _stockRepository.StockInfoRepository.UpdateData(stockInfo); returnOrder.OrderType = OrderTypeEnum.忣ååºå.ObjToInt(); returnOrder.OrderQuantity += item.OrderQuantity; returnOrder.ReceiptQuantity += item.OrderQuantity; _returnOrderRepository.UpdateData(returnOrder); _stockRepository.StockInfoRepository.UpdateData(stockInfo); } } } _unitOfWorkManage.CommitTran(); return WebResponseContent.Instance.OK(); WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_CPInboundOrderDetail.cs
@@ -40,5 +40,11 @@ [SugarColumn(IsNullable = false, ColumnDescription = "ç¶æ")] public int CPOrderDetailStatus { get; set; } [SugarColumn(IsNullable = true, ColumnDescription = "LPNNO")] public string LPNNO { get; set; } [SugarColumn(IsNullable = true, ColumnDescription = "WMSæºåºä½")] public string OrinalLocation { get; set; } } } WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfoDetailCP.cs
@@ -40,6 +40,12 @@ [SugarColumn(IsNullable = false, ColumnDescription = "ç¶æ")] public int CPStockDetailStatus { get; set; } [SugarColumn(IsNullable = true, ColumnDescription = "LPNNO")] public string LPNNO { get; set; } [SugarColumn(IsNullable = true, ColumnDescription = "WMSæºåºä½")] public string OrinalLocation { get; set; } } } WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderService.cs
@@ -187,6 +187,7 @@ return WebResponseContent.Instance.Error("æ¤åæ®å·²å¼å§æ§è¡ï¼ä¸å è®¸åæ¶"); } oldOutboundOrder.OrderStatus = OutboundStatusEnum.åæ¶.ObjToInt(); _unitOfWorkManage.BeginTran(); BaseDal.UpdateData(oldOutboundOrder); Dt_OutboundOrder_Hty inboundOrder_Hty = new Dt_OutboundOrder_Hty @@ -223,31 +224,134 @@ } BaseDal.DeleteData(oldOutboundOrder); } Dt_NewOutboundOrder dt_NewOutboundOrder = BaseDal.Db.Queryable<Dt_NewOutboundOrder>().Where(x => x.OrderNo == orderAddDTO1.OrderNo).Includes(x => x.Details).First(); if (dt_NewOutboundOrder == null) { return WebResponseContent.Instance.Error("æªæ¾å°æ¤åºåºåæ®"); } if (dt_NewOutboundOrder != null) { _unitOfWorkManage.CommitTran(); //Dt_NewOutboundOrder dt_NewOutboundOrder = BaseDal.Db.Queryable<Dt_NewOutboundOrder>().Where(x => x.OrderNo == orderAddDTO1.OrderNo).Includes(x => x.Details).First(); //if (dt_NewOutboundOrder == null) //{ // return WebResponseContent.Instance.Error("æªæ¾å°æ¤åºåºåæ®"); //} //if (dt_NewOutboundOrder != null) //{ if (dt_NewOutboundOrder.OrderStatus > OutOrderStatusEnum.æªå¼å§.ObjToInt()) { return WebResponseContent.Instance.Error("æ¤åæ®å·²å¼å§æ§è¡ï¼ä¸å è®¸åæ¶"); } List<Dt_NewOutboundOrderDetail> newOutboundOrderDetail = BaseDal.Db.Queryable<Dt_NewOutboundOrderDetail>().Where(x => x.OrderId == dt_NewOutboundOrder.Id).ToList(); dt_NewOutboundOrder.OrderStatus = OutboundStatusEnum.åæ¶.ObjToInt(); foreach (var item in newOutboundOrderDetail) { item.OrderDetailStatus = OutboundStatusEnum.åæ¶.ObjToInt(); } _newOutboundOrderService.UpdateData(dt_NewOutboundOrder); _newOutboundOrderDetailService.UpdateData(newOutboundOrderDetail); } // if (dt_NewOutboundOrder.OrderStatus > OutOrderStatusEnum.æªå¼å§.ObjToInt()) // { // return WebResponseContent.Instance.Error("æ¤åæ®å·²å¼å§æ§è¡ï¼ä¸å è®¸åæ¶"); // } // List<Dt_NewOutboundOrderDetail> newOutboundOrderDetail = BaseDal.Db.Queryable<Dt_NewOutboundOrderDetail>().Where(x => x.OrderId == dt_NewOutboundOrder.Id).ToList(); // dt_NewOutboundOrder.OrderStatus = OutboundStatusEnum.åæ¶.ObjToInt(); // foreach (var item in newOutboundOrderDetail) // { // item.OrderDetailStatus = OutboundStatusEnum.åæ¶.ObjToInt(); // } // _newOutboundOrderService.UpdateData(dt_NewOutboundOrder); // _newOutboundOrderDetailService.UpdateData(newOutboundOrderDetail); //} content = WebResponseContent.Instance.OK(); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); content = WebResponseContent.Instance.Error(ex.Message); } finally { } return content; } /// <summary> /// æååºåºåæ®åæ¶ /// </summary> /// <param name="houseCancelOut"></param> /// <returns></returns> public WebResponseContent NewCancelOut(HouseCancelOut houseCancelOut) { WebResponseContent content = new(); try { OutboundOrderAddDTO orderAddDTO1 = new OutboundOrderAddDTO(); orderAddDTO1.OrderNo = houseCancelOut.No; orderAddDTO1.Details = houseCancelOut.DetailList.DicToIEnumerable<OutboundOrderDetailAddDTO>(); Dt_NewOutboundOrder? oldOutboundOrder = BaseDal.Db.Queryable<Dt_NewOutboundOrder>().Where(x => x.OrderNo == orderAddDTO1.OrderNo).Includes(x => x.Details).First(); if (oldOutboundOrder == null) { return WebResponseContent.Instance.Error("æªæ¾å°æ¤åºåºåæ®"); } if (oldOutboundOrder != null) { Dt_NewOutboundOrderDetail OutboundOrderDetail = BaseDal.Db.Queryable<Dt_NewOutboundOrderDetail>().Where(x => x.OrderId == oldOutboundOrder.Id).First(); if (oldOutboundOrder.OrderStatus > OutOrderStatusEnum.æªå¼å§.ObjToInt()) { return WebResponseContent.Instance.Error("æ¤åæ®å·²å¼å§æ§è¡ï¼ä¸å è®¸åæ¶"); } oldOutboundOrder.OrderStatus = OutboundStatusEnum.åæ¶.ObjToInt(); _unitOfWorkManage.BeginTran(); _newOutboundOrderService.UpdateData(oldOutboundOrder); Dt_OutboundOrder_Hty inboundOrder_Hty = new Dt_OutboundOrder_Hty { OrderStatus = oldOutboundOrder.OrderStatus, CreateType = oldOutboundOrder.CreateType, //SourceId = oldOutboundOrder.SourceId, UpperOrderNo = oldOutboundOrder.UpperOrderNo, OrderNo = oldOutboundOrder.OrderNo, OutWareHouse = oldOutboundOrder.OutWareHouse, TransactionCode = oldOutboundOrder.TransactionCode, InoutType = oldOutboundOrder.InoutType, OrderType = oldOutboundOrder.OrderType, Creater = "WMS", CreateDate = DateTime.Now, }; _outboundOrder_HtyService.AddData(inboundOrder_Hty); foreach (var item in oldOutboundOrder.Details) { Dt_OutboundOrderDetail_Hty dt_InboundOrderDetail_Hty = new Dt_OutboundOrderDetail_Hty { OrderId = OutboundOrderDetail.OrderId, MaterielCode = OutboundOrderDetail.MaterielCode, MaterielName = OutboundOrderDetail.MaterielName, BatchNo = OutboundOrderDetail.BatchNo, OrderQuantity = OutboundOrderDetail.OrderQuantity, OrderDetailStatus = OutboundOrderDetail.OrderDetailStatus, Creater = "WMS", CreateDate = DateTime.Now, }; _outboundOrderDetail_HtyService.AddData(dt_InboundOrderDetail_Hty); _newOutboundOrderDetailService.DeleteData(item); } _newOutboundOrderService.DeleteData(oldOutboundOrder); } _unitOfWorkManage.CommitTran(); //Dt_NewOutboundOrder dt_NewOutboundOrder = BaseDal.Db.Queryable<Dt_NewOutboundOrder>().Where(x => x.OrderNo == orderAddDTO1.OrderNo).Includes(x => x.Details).First(); //if (dt_NewOutboundOrder == null) //{ // return WebResponseContent.Instance.Error("æªæ¾å°æ¤åºåºåæ®"); //} //if (dt_NewOutboundOrder != null) //{ // if (dt_NewOutboundOrder.OrderStatus > OutOrderStatusEnum.æªå¼å§.ObjToInt()) // { // return WebResponseContent.Instance.Error("æ¤åæ®å·²å¼å§æ§è¡ï¼ä¸å è®¸åæ¶"); // } // List<Dt_NewOutboundOrderDetail> newOutboundOrderDetail = BaseDal.Db.Queryable<Dt_NewOutboundOrderDetail>().Where(x => x.OrderId == dt_NewOutboundOrder.Id).ToList(); // dt_NewOutboundOrder.OrderStatus = OutboundStatusEnum.åæ¶.ObjToInt(); // foreach (var item in newOutboundOrderDetail) // { // item.OrderDetailStatus = OutboundStatusEnum.åæ¶.ObjToInt(); // } // _newOutboundOrderService.UpdateData(dt_NewOutboundOrder); // _newOutboundOrderDetailService.UpdateData(newOutboundOrderDetail); //} content = WebResponseContent.Instance.OK(); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); content = WebResponseContent.Instance.Error(ex.Message); } finally WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Service/NewOutboundOrderDetailService.cs
@@ -64,7 +64,7 @@ foreach (var stockInfoDetail in dt_StockInfoDetails) { dt_StockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.Id == stockInfoDetail.StockId && x.StockStatus == StockStatusEmun.å ¥åºå®æ.ObjToInt()); if (dt_StockInfo != null) if (dt_StockInfo != null && !PalletCodes.Any(x => x == dt_StockInfo.PalletCode)) { PalletCodes.Add(dt_StockInfo.PalletCode); } @@ -127,7 +127,7 @@ decimal needQuantity = originalNeedQuantity - item.LockQuantity; item.LockQuantity += needQuantity - residueQuantity.NewNeendQuantity; //item.LockQuantity += needQuantity - residueQuantity.NewNeendQuantity; decimal assignQuantity = needQuantity - residueQuantity.NewNeendQuantity; WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs
@@ -342,10 +342,12 @@ { List<Dt_StockInfo> outStocks = new List<Dt_StockInfo>(); List<IStockInfoService.residueQuantity> newresidueQantity = new List<IStockInfoService.residueQuantity>(); List<Dt_StockInfo> notStocks = new List<Dt_StockInfo>(); ; List<Dt_StockInfo> notStocks = new List<Dt_StockInfo>(); foreach (var dt_OutboundOrderDetail in dt_OutboundOrderDetails) { notStocks = stockInfos.Where(x => x.Details.Any(x =>x.MaterielCode == dt_OutboundOrderDetail.MaterielCode)).OrderBy(x => x.Id).ToList(); if (notStocks.Count > 0) { decimal stockTotalQuantity = stockInfos.SelectMany(x => x.Details).Where(d => d.MaterielCode == dt_OutboundOrderDetail.MaterielCode).Sum(v => v.StockQuantity - v.OutboundQuantity); @@ -357,48 +359,51 @@ { Dt_StockInfo stockInfo = stockInfos[index]; Dt_StockInfoDetail dt_StockInfoDetail = new Dt_StockInfoDetail(); List<Dt_StockInfoDetail> dt_StockInfoDetails = new List<Dt_StockInfoDetail>(); foreach (var detail in stockInfo.Details) { if (detail.MaterielCode == dt_OutboundOrderDetail.MaterielCode) { dt_StockInfoDetail = detail; dt_StockInfoDetails.Add(detail); } } decimal useableStockQuantity = dt_StockInfoDetail.StockQuantity - dt_StockInfoDetail.OutboundQuantity; if (useableStockQuantity < needQuantity) foreach(var dt_StockInfoDetail in dt_StockInfoDetails) { stockInfo.Details.ForEach(x => decimal useableStockQuantity = dt_StockInfoDetail.StockQuantity - dt_StockInfoDetail.OutboundQuantity; if (useableStockQuantity < needQuantity) { if (x.MaterielCode == dt_OutboundOrderDetail.MaterielCode) foreach (var item in stockInfo.Details) { x.OutboundQuantity = x.StockQuantity; } }); needQuantity -= useableStockQuantity; } else { stockInfo.Details.ForEach(x => { if (x.StockQuantity > x.OutboundQuantity && x.MaterielCode == dt_OutboundOrderDetail.MaterielCode) { if (x.StockQuantity - x.OutboundQuantity >= needQuantity) if(item.MaterielCode == dt_OutboundOrderDetail.MaterielCode && dt_StockInfoDetail.BatchNo == item.BatchNo) { x.OutboundQuantity += needQuantity; needQuantity = 0; } else { needQuantity -= (x.StockQuantity - x.OutboundQuantity); x.OutboundQuantity = x.StockQuantity; item.OutboundQuantity = item.StockQuantity; } } }); needQuantity -= useableStockQuantity; } else { foreach (var item in stockInfo.Details) { if(item.StockQuantity > item.OutboundQuantity && item.MaterielCode == dt_StockInfoDetail.MaterielCode && item.BatchNo == dt_StockInfoDetail.BatchNo) { if (item.StockQuantity - item.OutboundQuantity >= needQuantity) { dt_StockInfoDetail.OutboundQuantity += needQuantity; needQuantity = 0; } else { needQuantity -= (item.StockQuantity - item.OutboundQuantity); item.OutboundQuantity = item.StockQuantity; } } } } outStocks.Add(stockInfo); index++; if (needQuantity == 0) break; } outStocks.Add(stockInfo); index++; } } else @@ -411,7 +416,7 @@ { if (detail.MaterielCode == dt_OutboundOrderDetail.MaterielCode) { useableStockQuantity = detail.StockQuantity - detail.OutboundQuantity; useableStockQuantity += detail.StockQuantity - detail.OutboundQuantity; } } @@ -427,22 +432,22 @@ } else { stockInfo.Details.ForEach(x => foreach (var detail in stockInfo.Details) { if (x.StockQuantity > x.OutboundQuantity && x.MaterielCode == dt_OutboundOrderDetail.MaterielCode) if(detail.StockQuantity > detail.OutboundQuantity && detail.MaterielCode == dt_OutboundOrderDetail.MaterielCode) { if (x.StockQuantity - x.OutboundQuantity >= needQuantity) if(detail.StockQuantity - detail.OutboundQuantity >= needQuantity) { x.OutboundQuantity += needQuantity; detail.OutboundQuantity += needQuantity; needQuantity = 0; } else { needQuantity -= (x.StockQuantity - x.OutboundQuantity); x.OutboundQuantity = x.StockQuantity; needQuantity -= (detail.StockQuantity - detail.OutboundQuantity); detail.OutboundQuantity = detail.StockQuantity; } } }); } } outStocks.Add(stockInfo); } WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/NewPartialTaskService_Outbound.cs
@@ -39,7 +39,7 @@ { throw new Exception("æéåºåºåæç»åå¨åºåºä¸æå·²å®æ"); } if (outboundOrderDetails.FirstOrDefault()?.LPNNo == null) if (outboundOrderDetails.FirstOrDefault()?.LPNNo == null || outboundOrderDetails.FirstOrDefault()?.LPNNo == "") { outboundOrderDetails.Clear(); try @@ -405,16 +405,46 @@ //} var stockdetailbox = BaseDal.Db.Queryable<Dt_StockInfo>().LeftJoin<Dt_StockInfoDetail>((s, d) => s.Id == d.StockId).LeftJoin<Dt_StockInfoDetailCP>((s, d, cp) => d.Id == cp.StockDetailId).Where((s, d, cp) => allBoxCodes.Contains(cp.BoxCode)).Select((s, d, cp) => cp.BoxCode) .Distinct() .ToList(); .Distinct() .ToList(); var stockInfoDetailCPList = _stockInfoDetailCPRepository.QueryData(x => stockdetailbox.Contains(x.BoxCode)).ToList(); if (stockInfoDetailCPList != null) { _stockInfoDetailCPRepository.DeleteAndMoveIntoHty(stockInfoDetailCPList, App.User.UserId == 0 ? OperateType.èªå¨å®æ : OperateType.äººå·¥å®æ); foreach(var stockLPNO in houseStockDetail.DetailList) { Dt_StockInfo dt_StockInfo = BaseDal.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == stockLPNO.LPNNo).Includes(x => x.Details).First(); for (int i = 0; i<stockInfoDetailCPList.Count(); i++) { foreach (var item1 in dt_StockInfo.Details) { foreach (var batchNos in houseStockDetail.DetailList) { if (stockInfoDetailCPList[i].PartNum == item1.MaterielCode && batchNos.BatchNo == item.BatchNo) { item1.StockQuantity-=(decimal)stockInfoDetailCPList[i].QtyOfpcs; item1.OutboundQuantity = 0; _stockInfoDetailRepository.UpdateData(item1); } if (item1.StockQuantity == 0) { _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(item1, App.User.UserId == 0 ? OperateType.èªå¨å®æ : OperateType.äººå·¥å®æ); } //å ¨é¨é½åºåº å é¤åºå if (dt_StockInfo.Details.Sum(x => x.StockQuantity) == 0) { _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(dt_StockInfo, App.User.UserId == 0 ? OperateType.èªå¨å®æ : OperateType.äººå·¥å®æ); } } } } } } _unitOfWorkManage.CommitTran(); } _unitOfWorkManage.CommitTran(); } catch (Exception ex) { @@ -466,11 +496,17 @@ }); result.Item2.ForEach(x => { x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); foreach(var item in result.Item2) { if(item.LockQuantity > 0) { item.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); } } }); result.Item3.ForEach(x => { x.Status = OutStockStatus.åºåºä¸.ObjToInt(); }); WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs
@@ -26,6 +26,7 @@ public partial class TaskService { /// <summary> /// ä» ç³è¯·ä»»å¡ï¼è®©WCSæ ¹æ®è·¯ç±ç¡®å®ä¸ä¸å°å /// </summary> WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs
@@ -311,7 +311,7 @@ } if (warehouse.WarehouseCode.Contains("CP")) { Dt_Production production1 = new Dt_Production(); OutboundOrderAddDTO orderAddDTO1 = new OutboundOrderAddDTO(); orderAddDTO1.OrderNo = orderAddDTO.No; @@ -333,6 +333,16 @@ inboundOrder.CreateDate = DateTime.Now; inboundOrder.CreateType = CreateType.UpperSystemPush.ObjToInt(); _unitOfWorkManage.BeginTran(); Dt_NewOutboundOrder dt_NewOutboundOrder = BaseDal.Db.Queryable<Dt_NewOutboundOrder>().Where(x => x.OrderNo == inboundOrder.OrderNo).Includes(x => x.Details).First(); if(dt_NewOutboundOrder != null) { if (dt_NewOutboundOrder.OrderStatus > 0) { return WebResponseContent.Instance.Error($"该åºåºåå¨è¿è¡ä¸ï¼æ æ³æ´æ°è¯¥åºåºå"); } Db.DeleteNav(dt_NewOutboundOrder).Include(x => x.Details).ExecuteCommand(); } bool a = BaseDal.Db.InsertNav(inboundOrder).Include(x => x.Details).ExecuteCommand(); foreach (var item in orderAddDTO1.Details) @@ -684,7 +694,7 @@ } } /// <summary> /// çæåºåºä»»å¡ /// çæâä»»å¡ /// </summary> /// <param name="orderDetailId"></param> /// <param name="stockSelectViews"></param> WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -20,20 +20,30 @@ using Microsoft.AspNetCore.SignalR; using Newtonsoft.Json; using OfficeOpenXml.FormulaParsing.Excel.Functions.Database; using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; using Org.BouncyCastle.Asn1.Tsp; using Spire.Pdf; using SqlSugar; using System; using System; using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Diagnostics.CodeAnalysis; using System.Drawing.Printing; using System.IO; using System.Linq; using System.Net.Http; using System.Reflection; using System.Reflection.Metadata; using System.Text; using System.Threading.Tasks; using System.Threading.Tasks; using WIDESEA_BasicRepository; using WIDESEA_Common; using WIDESEA_Common.Log; using WIDESEA_Common.OrderEnum; using WIDESEA_Common.TaskEnum; using WIDESEA_Core; @@ -43,6 +53,7 @@ using WIDESEA_Core.Helper; using WIDESEA_Core.TaskEnum; using WIDESEA_DTO.Basic; using WIDESEA_DTO.ERP; using WIDESEA_DTO.Inbound; using WIDESEA_DTO.Stock; using WIDESEA_DTO.Task; @@ -50,6 +61,7 @@ using WIDESEA_IBasicService; using WIDESEA_IInboundRepository; using WIDESEA_IInboundService; using WIDESEA_InboundRepository; using WIDESEA_IOutboundRepository; using WIDESEA_IOutboundService; using WIDESEA_IRecordService; @@ -59,28 +71,19 @@ using WIDESEA_ITaskInfoService; using WIDESEA_Model.Models; using WIDESEA_Model.Models.Inbound; using WIDESEA_OutboundRepository; using WIDESEA_StockRepository; using WIDESEA_TaskInfoRepository; using static WIDESEA_Common.Authentication; using static WIDESEA_Common.HouseBackboundPassBack; using static WIDESEA_Common.HouseInboundPassBack; using static WIDESEA_Common.HouseInboundPassBack.data.data1; using static WIDESEA_Common.HouseoutboundPassBack; using static WIDESEA_Common.InventoryAllocate; using static WIDESEA_Common.NewHouseInboundPassBack; using static WIDESEA_Common.NewHouseInboundPassBack.Parame.Syncretism; using static WIDESEA_ITaskInfoService.ITaskService; using Parameter = WIDESEA_Common.Parameter; using WIDESEA_DTO.ERP; using WIDESEA_OutboundRepository; using System.ComponentModel.DataAnnotations; using System; using System.IO; using System.Net.Http; using System.Threading.Tasks; using Spire.Pdf; using WIDESEA_InboundRepository; using System.Drawing.Printing; using System; using WIDESEA_Common.Log; using static WIDESEA_Common.HouseInboundPassBack.data.data1; namespace WIDESEA_TaskInfoService { @@ -720,6 +723,7 @@ } if (inboundOrder.OrderStatus == InboundStatusEnum.å ¥åºå®æ.ObjToInt() && inboundOrder.OrderType == 0 && inboundOrder.System.Equals("SMOM")) { List<Dt_StockInfo> StockInfos = _stockRepository.StockInfoRepository.Db .Queryable<Dt_StockInfo>() .Includes(x => x.Details, d => d.StockDetails) @@ -872,7 +876,79 @@ } } } else if (inboundOrder.OrderStatus == InboundStatusEnum.å ¥åºå®æ.ObjToInt() && inboundOrder.OrderType == 5 && inboundOrder.System.Equals("SMOM")) { List<Dt_StockInfo> StockInfos = _stockRepository.StockInfoRepository.Db .Queryable<Dt_StockInfo>() .Includes(x => x.Details, d => d.StockDetails) .Where(x => x.WarehouseId == task.WarehouseId && x.Details.Any(v => v.OrderNo == inboundOrder.OrderNo)) .ToList(); Dt_InboundOrder? dt_InboundOrder = _inboundService.InbounOrderService.Db.Queryable<Dt_InboundOrder>().Where(x => x.OrderNo == inboundOrder.OrderNo).Includes(x => x.Details).First(); if (StockInfos.Count == 0) throw new Exception("æªæ¾å°åºåä¿¡æ¯"); var houseSyncretism = new NewHouseInboundPassBack { ApiType = "InventoryMoveController", Method = "AsrsUnPickingDatas", Parameters = new List<NewHouseInboundPassBack.Parame> { new NewHouseInboundPassBack.Parame { Value = new Parame.Syncretism { OrderNo = inboundOrder.OrderNo, Details = StockInfos.SelectMany(stockInfo => stockInfo.Details.Select(g => { //var InboundOrderde1=dt_InboundOrder.Details.FirstOrDefault; return new Parame.Syncretism.details { MoveType = 0, WareHouseCode = warehouse.WarehouseCode, ItemCode = g.MaterielCode, MoveNumber = g.StockQuantity, LotNo = g.BatchNo, WipBatch = g.BatchNo, Lpn = g.StockDetails.FirstOrDefault().LPNNO, LocationName = g.StockDetails.FirstOrDefault().OrinalLocation, TargetLocName = stockInfo.LocationCode, // æ·»å nullæ£æ¥ TargetLpn = stockInfo.PalletCode, // æ·»å nullæ£æ¥ }; })).ToList() } } } }; var authResult = AuthenticateWithWMS(); if (authResult.IsSuccess) { houseSyncretism.Context = new Dictionary<string, string> { { "Ticket", authResult.Ticket }, { "InvOrgId", authResult.InvOrgId } }; var response = HttpHelper.Post<MomRequestContent>(ReceiveWMSTaskin, houseSyncretism, "ç«åºå ¥åºæ°éåä¼ WMS"); if (!response.Success) { throw new Exception($"æä½å¤±è´¥: {response.Message ?? "æªæä¾é误信æ¯"}"); } } } _unitOfWorkManage.CommitTran(); return WebResponseContent.Instance.OK(); } @@ -1686,10 +1762,13 @@ x.LocationName == stockInfo.LocationCode && x.LPNNo == stockInfo.PalletCode) .ToList(); List<Dt_NewOutboundOrderDetail> outboundOrderDetails1 = _outboundService.NewOutboundOrderDetailService.Db.Queryable<Dt_NewOutboundOrderDetail>() .Where(x => x.OrderId == outboundOrder.Id) .ToList(); List<Dt_NewOutboundOrderDetail> outboundOrderDetails1 = new List<Dt_NewOutboundOrderDetail>(); if (outboundOrderDetails == null || outboundOrderDetails.Count == 0) { outboundOrderDetails1 = _outboundService.NewOutboundOrderDetailService.Db.Queryable<Dt_NewOutboundOrderDetail>() .Where(x => x.OrderId == outboundOrder.Id) .ToList(); } if ((outboundOrderDetails == null && outboundOrderDetails1 == null) || (outboundOrderDetails.Count == 0 && outboundOrderDetails1.Count == 0)) { throw new Exception($"æªæ¾å°æç {stockInfo.PalletCode} å¨è´§ä½ {stockInfo.LocationCode} ä¸çåºåºåæç»"); @@ -1698,6 +1777,7 @@ var stockInfoDetails = stockInfo.Details.ToList(); int overCount = outboundOrder.Details.Count(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()); if (outboundOrderDetails == null || outboundOrderDetails.Count == 0) { foreach (var stockDetail in stockInfoDetails) @@ -1858,7 +1938,7 @@ } // è°æ¨åºåº if (outboundOrder.OrderType == 2) if (outboundOrder.OrderType == 4) { var allocate = new InventoryAllocate { @@ -2090,7 +2170,7 @@ } // è°æ¨åºåº if (outboundOrder.OrderType == 2) if (outboundOrder.OrderType == 4) { var allocate = new InventoryAllocate { @@ -2177,14 +2257,14 @@ if (inboundOrder == null) return WebResponseContent.Instance.Error("æªæ¾å°åºåºåä¿¡æ¯"); List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>(); foreach(var detail in stockInfo.Details) foreach (var detail in stockInfo.Details) { Dt_OutboundOrderDetail outboundOrderDetail = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrderDetail>() .Where(x => x.OrderId == inboundOrder.Id && x.BatchNo == detail.BatchNo).First(); outboundOrderDetails.Add(outboundOrderDetail); } for(var i = 0; i<outboundOrderDetails.Count; i++) for (var i = 0; i<outboundOrderDetails.Count; i++) { if (outboundOrderDetails[i].LocationName != null && outboundOrderDetails[i].LocationName != "") { @@ -2297,9 +2377,9 @@ // æ´æ°åºåç¶æ ååºå AddRetrueOrder(stockInfo, inboundOrder); AddRetrueOrder(stockInfo, inboundOrder); // åºååæ®æ°æ®æ¥æºæ´æ°è´§ä½ç¶æ if (inboundOrder.System == null) { @@ -2394,7 +2474,7 @@ var outboundOrder = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrder>() .Where(x => x.OrderNo == inboundOrder.OrderNo).First(); foreach(var outboundOrderDetail in outboundOrderDetails) foreach (var outboundOrderDetail in outboundOrderDetails) { var outDetail = _outboundService.OutboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>() .Where(x => x.OrderId == outboundOrder.Id && x.BatchNo == outboundOrderDetail.BatchNo).First(); @@ -2498,7 +2578,7 @@ inboundOrder.OrderStatus = OutboundStatusEnum.åºåºå®æ.ObjToInt(); } } } private void DeleteAndMoveIntoHtStockStatus(Dt_StockInfo stockInfo) @@ -2954,9 +3034,9 @@ } } // åªåå»åæ®æç»ä¸çæ°é matchedStockDetail.OutboundQuantity = 0; matchedStockDetail.StockQuantity = outDetail.OrderQuantity; matchedStockDetail.OrderNo = returnOrder.OrderNo; //matchedStockDetail.OutboundQuantity = 0; //matchedStockDetail.StockQuantity = outDetail.OrderQuantity; //matchedStockDetail.OrderNo = returnOrder.OrderNo; // æ´æ°å¹é çæç» _stockService.StockInfoDetailService.Repository.UpdateData(matchedStockDetail); } @@ -2971,163 +3051,165 @@ else { var groupedDetails = outboundOrderDetails .GroupBy(d => new { d.MaterielCode, d.BatchNo }) .ToList(); .GroupBy(d => new { d.MaterielCode, d.BatchNo }) .ToList(); List<Dt_StockInfoDetail> processedStockDetails = new List<Dt_StockInfoDetail>(); List<Dt_ReturnOrder> returnOrders = new List<Dt_ReturnOrder>(); decimal totalOutboundQuantity = outboundOrderDetails.Sum(x => x.OrderQuantity); decimal totalStockQuantity = stockInfoDetails.Sum(x => x.StockQuantity); foreach (var groupeDetail in groupedDetails) foreach (var detail in stockInfo.Details) { var outboundDetail = groupeDetail.First(); decimal totalOrderQuantity = groupeDetail.Sum(x => x.OrderQuantity); var matchedStockDetail = stockInfoDetails.FirstOrDefault(x => x.MaterielCode == outboundDetail.MaterielCode && x.BatchNo == outboundDetail.BatchNo); if (matchedStockDetail == null) foreach (var groupeDetail in groupedDetails) { matchedStockDetail = stockInfoDetails.FirstOrDefault(x => x.MaterielCode == outboundDetail.MaterielCode); if (matchedStockDetail == null) var outboundDetail = groupeDetail.First(); if (outboundDetail.MaterielCode == detail.MaterielCode) { throw new Exception($"æªæ¾å°å¹é çåºåæç»ä¿¡æ¯ï¼ç©æ:{outboundDetail.MaterielCode}, æ¹æ¬¡:{outboundDetail.BatchNo}"); decimal totalOrderQuantity = groupeDetail.Sum(x => x.OrderQuantity); var matchedStockDetail = stockInfoDetails.FirstOrDefault(x => x.MaterielCode == outboundDetail.MaterielCode && x.BatchNo == outboundDetail.BatchNo); if (matchedStockDetail == null) { matchedStockDetail = stockInfoDetails.FirstOrDefault(x => x.MaterielCode == outboundDetail.MaterielCode); if (matchedStockDetail == null) { throw new Exception($"æªæ¾å°å¹é çåºåæç»ä¿¡æ¯ï¼ç©æ:{outboundDetail.MaterielCode}, æ¹æ¬¡:{outboundDetail.BatchNo}"); } } // 计ç®å½åæ¹æ¬¡çå©ä½æ°é decimal remainingQuantity = matchedStockDetail.StockQuantity - totalOrderQuantity; if (remainingQuantity > 0) { Dt_ReturnOrder returnOrder = new Dt_ReturnOrder { MaterielCode = matchedStockDetail.MaterielCode, MaterielName = matchedStockDetail.MaterielName, BatchNo = matchedStockDetail.BatchNo, OrderQuantity = remainingQuantity, ReceiptQuantity = remainingQuantity, OrderStatus = InOrderStatusEnum.æªå¼å§.ObjToInt(), LinId = matchedStockDetail.LinId, LPNNo = stockInfo.PalletCode, Creater = "LK", CreateDate = DateTime.Now, OrderType = OrderTypeEnum.使ååºå.ObjToInt(), System = "WMS", Remark = "夿¹æ¬¡è¿åº" // æ·»å 夿³¨æ è¯ }; if (outboundOrder.System == "SMOM" && stockInfo.LocationCode != null) { returnOrder.LocationCode = stockInfo.LocationCode; } // æ·»å è¿åºå returnOrders.Add(returnOrder); } if (remainingQuantity < 0 && matchedStockDetail.StockQuantity < matchedStockDetail.OutboundQuantity) { throw new Exception($"åºåºæ°é {outboundDetail.OrderQuantity} 大äºåºåæ°é {matchedStockDetail.StockQuantity}"); } processedStockDetails.Add(matchedStockDetail); // å¤çå ¶ä»æ¹æ¬¡çåºåæç»ï¼å ¨é¨è¿åºï¼ var otherBatchDetails = stockInfoDetails .Where(x => !processedStockDetails.Contains(x) && x.StockQuantity > 0 && x.OutboundQuantity == 0) .ToList(); if (returnOrders == null || returnOrders.Count == 0) { if (otherBatchDetails.Count > 0) { decimal totalOtherQuantity = otherBatchDetails.Sum(x => x.StockQuantity); // ä¸ºå ¶ä»æ¹æ¬¡å建è¿åºåï¼åªå建ä¸ä¸ªï¼å å«æææ¹æ¬¡ï¼ var firstOtherDetail = otherBatchDetails.First(); Dt_ReturnOrder otherReturnOrder = new Dt_ReturnOrder { MaterielCode = firstOtherDetail.MaterielCode, MaterielName = firstOtherDetail.MaterielName, BatchNo = firstOtherDetail.BatchNo, OrderQuantity = totalOtherQuantity, ReceiptQuantity = totalOtherQuantity, OrderStatus = InOrderStatusEnum.æªå¼å§.ObjToInt(), LinId = firstOtherDetail.LinId, LPNNo = stockInfo.PalletCode, Creater = "LK", CreateDate = DateTime.Now, OrderType = OrderTypeEnum.使ååºå.ObjToInt(), System = "WMS", Remark = $"夿¹æ¬¡è¿åºï¼å ±{otherBatchDetails.Count}ä¸ªæ¹æ¬¡" }; if (outboundOrder.System == "SMOM" && !string.IsNullOrEmpty(stockInfo.LocationCode)) { otherReturnOrder.LocationCode = stockInfo.LocationCode; } returnOrders.Add(otherReturnOrder); } } else { decimal totalOtherQuantity = otherBatchDetails.Sum(x => x.StockQuantity); foreach (var item in returnOrders) { item.OrderQuantity = totalOrderQuantity; item.ReceiptQuantity = totalOrderQuantity; item.Remark = $"夿¹æ¬¡è¿åºï¼å ±{otherBatchDetails.Count}ä¸ªæ¹æ¬¡"; } } // æ¹éæ´æ°å·²å¤ççåºåæç» var updateDetails = processedStockDetails.Where(x => x.StockQuantity > 0).ToList(); if (updateDetails.Any()) { _stockService.StockInfoDetailService.Repository.UpdateData(updateDetails); } // æ·»å è¿åºå if (returnOrders.Any()) { _returnOrderRepository.AddData(returnOrders); } // æ´æ°åºåä¸»è¡¨ç¶æ decimal returnQuantity = totalStockQuantity - totalOutboundQuantity; if (returnQuantity == 0 || stockInfo.Details.All(x => x.StockQuantity == x.OutboundQuantity)) { if (outboundOrder.System == "SMOM" && stockInfo.LocationCode != null) { Dt_LocationInfo dt_LocationInfo = _locationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode); dt_LocationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); _basicRepository.LocationInfoRepository.UpdateData(dt_LocationInfo); } //å ¨é¨åºåºï¼å é¤åºå //DeleteAndMoveIntoHtStockStatus(stockInfo); //foreach (var item in stockInfo.Details) //{ // BaseDal.Db.Deleteable(item.StockDetails).ExecuteCommand(); //} } else if (returnQuantity > 0) { // æä½æè¿åº stockInfo.LocationCode = ""; stockInfo.StockStatus = StockStatusEmun.使éåº.ObjToInt(); stockInfo.Remark = $"使éåºï¼å ±{returnOrders.Count}个è¿åºå"; _stockService.StockInfoService.Repository.UpdateData(stockInfo); } } } // 计ç®å½åæ¹æ¬¡çå©ä½æ°é decimal remainingQuantity = matchedStockDetail.StockQuantity - totalOrderQuantity; if (remainingQuantity > 0) { Dt_ReturnOrder returnOrder = new Dt_ReturnOrder { MaterielCode = matchedStockDetail.MaterielCode, MaterielName = matchedStockDetail.MaterielName, BatchNo = matchedStockDetail.BatchNo, OrderQuantity = remainingQuantity, ReceiptQuantity = remainingQuantity, OrderStatus = InOrderStatusEnum.æªå¼å§.ObjToInt(), LinId = matchedStockDetail.LinId, LPNNo = stockInfo.PalletCode, Creater = "LK", CreateDate = DateTime.Now, OrderType = OrderTypeEnum.使ååºå.ObjToInt(), System = "WMS", Remark = "夿¹æ¬¡è¿åº" // æ·»å 夿³¨æ è¯ }; if (outboundOrder.System == "SMOM" && stockInfo.LocationCode != null) { returnOrder.LocationCode = stockInfo.LocationCode; } // æ·»å è¿åºå returnOrders.Add(returnOrder); // æ´æ°å½åæ¹æ¬¡æç»ï¼åªä¿çåºåºæ°éï¼å ¶ä½è¿åº matchedStockDetail.StockQuantity = remainingQuantity; matchedStockDetail.OutboundQuantity = outboundDetail.OrderQuantity; //matchedStockDetail.OrderNo = returnOrder.OrderNo; } else if (remainingQuantity == 0) { // å½åæ¹æ¬¡æ£å¥½åºå® matchedStockDetail.OutboundQuantity = matchedStockDetail.StockQuantity; if (matchedStockDetail.StockQuantity == totalOrderQuantity) { _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty( matchedStockDetail, App.User.UserId == 0 ? OperateType.èªå¨å®æ : OperateType.äººå·¥å®æ); } else { matchedStockDetail.StockQuantity = 0; _stockService.StockInfoDetailService.Repository.UpdateData(matchedStockDetail); } } else { throw new Exception($"åºåºæ°é {outboundDetail.OrderQuantity} 大äºåºåæ°é {matchedStockDetail.StockQuantity}"); } processedStockDetails.Add(matchedStockDetail); } // å¤çå ¶ä»æ¹æ¬¡çåºåæç»ï¼å ¨é¨è¿åºï¼ var otherBatchDetails = stockInfoDetails .Where(x => !processedStockDetails.Contains(x) && x.StockQuantity > 0) .ToList(); if (otherBatchDetails.Count > 0) { decimal totalOtherQuantity = otherBatchDetails.Sum(x => x.StockQuantity); // ä¸ºå ¶ä»æ¹æ¬¡å建è¿åºåï¼åªå建ä¸ä¸ªï¼å å«æææ¹æ¬¡ï¼ var firstOtherDetail = otherBatchDetails.First(); Dt_ReturnOrder otherReturnOrder = new Dt_ReturnOrder { MaterielCode = firstOtherDetail.MaterielCode, MaterielName = firstOtherDetail.MaterielName, BatchNo = firstOtherDetail.BatchNo, OrderQuantity = totalOtherQuantity, ReceiptQuantity = totalOtherQuantity, OrderStatus = InOrderStatusEnum.æªå¼å§.ObjToInt(), LinId = firstOtherDetail.LinId, LPNNo = stockInfo.PalletCode, Creater = "LK", CreateDate = DateTime.Now, OrderType = OrderTypeEnum.使ååºå.ObjToInt(), System = "WMS", Remark = $"夿¹æ¬¡è¿åºï¼å ±{otherBatchDetails.Count}ä¸ªæ¹æ¬¡" }; if (outboundOrder.System == "SMOM" && !string.IsNullOrEmpty(stockInfo.LocationCode)) { otherReturnOrder.LocationCode = stockInfo.LocationCode; } returnOrders.Add(otherReturnOrder); } // æ¹éæ´æ°å·²å¤ççåºåæç» var updateDetails = processedStockDetails.Where(x => x.StockQuantity > 0).ToList(); if (updateDetails.Any()) { _stockService.StockInfoDetailService.Repository.UpdateData(updateDetails); } // æ·»å è¿åºå if (returnOrders.Any()) { _returnOrderRepository.AddData(returnOrders); } // æ´æ°åºåä¸»è¡¨ç¶æ decimal returnQuantity = totalStockQuantity - totalOutboundQuantity; if (returnQuantity == 0) { if (outboundOrder.System == "SMOM" && stockInfo.LocationCode != null) { Dt_LocationInfo dt_LocationInfo = _locationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode); dt_LocationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); _basicRepository.LocationInfoRepository.UpdateData(dt_LocationInfo); } // å ¨é¨åºåºï¼å é¤åºå DeleteAndMoveIntoHtStockStatus(stockInfo); foreach (var item in stockInfo.Details) { BaseDal.Db.Deleteable(item.StockDetails).ExecuteCommand(); } } else if (returnQuantity > 0) { // æä½æè¿åº stockInfo.LocationCode = ""; stockInfo.StockStatus = StockStatusEmun.使éåº.ObjToInt(); stockInfo.Remark = $"使éåºï¼å ±{returnOrders.Count}个è¿åºå"; _stockService.StockInfoService.Repository.UpdateData(stockInfo); } _unitOfWorkManage.CommitTran(); } _unitOfWorkManage.CommitTran(); } catch (Exception ex) { WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderController.cs
@@ -27,6 +27,17 @@ { return Service.CancelOut(houseCancelOut); } /// <summary> /// æååºåºåæ®åæ¶ /// </summary> /// <param name="houseCancelOut"></param> /// <returns></returns> [HttpPost, Route("NewCancelOut"), AllowAnonymous] public WebResponseContent NewCancelOut([FromBody] HouseCancelOut houseCancelOut) { return Service.NewCancelOut(houseCancelOut); } [HttpPost, Route("Save"), AllowAnonymous] public WebResponseContent Save([FromBody] OutboundOrderAddDTO orderAddDTO)