| 新建文件夹/WIDESEA_WMSServer/ClassLibrary2/Inventory_BatchServices.cs.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 新建文件夹/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/extend/Allocat.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 新建文件夹/WMS/src/extension/stock/Dt_Inventory_Batch.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| 新建文件夹/WMS/src/views/stock/Dt_Inventory_Batch.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
н¨Îļþ¼Ð/WIDESEA_WMSServer/ClassLibrary2/Inventory_BatchServices.cs.cs
@@ -1,9 +1,15 @@ using System; using SqlSugar.Extensions; using System; using System.Collections.Generic; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common; using WIDESEA_Common.OrderEnum; using WIDESEA_Common.StockEnum; using WIDESEA_Common.TaskEnum; using WIDESEA_Common.WareHouseEnum; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; @@ -16,15 +22,136 @@ public class Inventory_BatchServices : ServiceBase<Dt_Inventory_Batch, IRepository<Dt_Inventory_Batch>>, IInventory_BatchServices { private IMessageInfoService _messageInfoService; public Inventory_BatchServices(IRepository<Dt_Inventory_Batch> BaseDal, IMessageInfoService messageInfoService) : base(BaseDal) private IMaterielInfoService _materielInfoService; private IInventoryInfoService _inventoryInfoService; private ISupplyTaskService _supplyTaskService; public Inventory_BatchServices(IRepository<Dt_Inventory_Batch> BaseDal, IMessageInfoService messageInfoService, IMaterielInfoService materielInfoService, IInventoryInfoService inventoryInfoService, ISupplyTaskService supplyTaskService) : base(BaseDal) { _messageInfoService = messageInfoService; _materielInfoService = materielInfoService; _inventoryInfoService = inventoryInfoService; _supplyTaskService = supplyTaskService; } public IRepository<Dt_Inventory_Batch> Repository => BaseDal; public override WebResponseContent UpdateData(SaveModel saveModel) { return base.UpdateData(saveModel); try { string WareCode = WarehouseEnum.大件åº.ObjToInt().ToString("000"); var qty = saveModel.MainData["stockQuantity"].ObjToInt(); var id = saveModel.MainData["id"].ObjToInt(); var materielCode = saveModel.MainData["materielCode"].ToString(); var batchNo = saveModel.MainData["batchNo"].ToString(); //var Inventory_Batch = BaseDal.QueryFirst(x => x.Id == id); //if (qty > Inventory_Batch.AvailableQuantity) throw new Exception("è°æ¨æ°éä¸å¯å¤§äºå¯ç¨æ°é"); var materielInfo = _materielInfoService.Repository.QueryFirst(x => x.MaterielCode == materielCode); if (materielInfo == null) return WebResponseContent.Instance.Error($"请维æ¤è¯åç¼å·ã{materielCode}ãçä¿¡æ¯"); if (!Enum.IsDefined(typeof(MaterielSourceTypeEnum), materielInfo.MaterielSourceType)) return WebResponseContent.Instance.Error($"请设置è¯åç¼å·ã{materielCode}ãç屿§åç±»"); if (materielInfo.MaterielSourceType == MaterielSourceTypeEnum.PurchasePart) return WebResponseContent.Instance.Error($"è¯åç¼å·ã{materielCode}ãç屿§å类为大件,ä¸å¯è°æ¨"); List<Dt_InventoryInfo> dt_InventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == materielInfo.MaterielCode && x.BatchNo == batchNo && x.StockStatus == StockStatusEmun.å ¥åºå®æ.ObjToInt() && x.AvailableQuantity > 0 && x.WarehouseCode == WareCode).OrderBy(x => x.InDate).ToList(); if (dt_InventoryInfos.Count < 1) return WebResponseContent.Instance.Error($"ç©æç¼å·ã{materielInfo.MaterielCode}ãå¤§ä»¶åºæ åºåï¼è¯·åæ¶è¡¥å åºåï¼"); var StockQty = dt_InventoryInfos.Sum(x => x.AvailableQuantity); if (StockQty < qty) return WebResponseContent.Instance.Error($"è°æ¨æ°éä¸å¯å¤§äºå¤§ä»¶åºå¯ç¨æ°é,大件åºå¯ç¨æ°é为ã{StockQty}ã"); var zx = qty / materielInfo.BoxQty; var ys = qty % materielInfo.BoxQty; if (ys > 0) zx++; decimal Qty = 0; List<Dt_SupplyTask> supplyTasks = new List<Dt_SupplyTask>(); Dt_DeliveryOrder deliveryOrder = new Dt_DeliveryOrder() { Out_no = DateTime.Now.ToString("yyMMddHHmmss"), Warehouse_no = WareCode, Out_type = OutOrderTypeEnum.Allocate.ObjToInt().ToString(), OutStatus = "æ°å»º", Details = new List<Dt_DeliveryOrderDetail>() }; foreach (var item in dt_InventoryInfos) { decimal taskQty = 0; if (zx < 1) break; while (item.AvailableQuantity > 0 && zx > 0) { zx--; Qty += materielInfo.BoxQty; taskQty += materielInfo.BoxQty; materielInfo.Business_qty += materielInfo.BoxQty; item.OutboundQuantity += materielInfo.BoxQty; item.AvailableQuantity -= materielInfo.BoxQty; } #region æ·»å è°æ¨åºåºä»»å¡ Dt_SupplyTask supplyTask = new Dt_SupplyTask() { WarehouseCode = item.WarehouseCode, BatchNo = item.BatchNo, MaterielName = item.MaterielName, MaterielCode = item.MaterielCode, MaterielSpec = item.MaterielSpec, TaskStatus = SupplyStatusEnum.NewOut.ObjToInt(), TaskType = TaskTypeEnum.AllocatOut.ObjToInt(), CreateDate = DateTime.Now, Creater = App.User.UserName ?? "System", LocationCode = item.LocationCode, OrderNo = deliveryOrder.Out_no, StockQuantity = taskQty, SupplyQuantity = 0, Remark = "è°æ¨åºåº" }; supplyTasks.Add(supplyTask); #endregion } Dt_DeliveryOrderDetail deliveryOrderDetail = new Dt_DeliveryOrderDetail() { Batch_num = batchNo, Order_Outqty = 0, Order_qty = Qty, CreateDate = DateTime.Now, Creater = App.User.UserName ?? "System", Goods_no = materielCode, OotDetailStatus = "æ°å»º", Status = 2, Reservoirarea = WareCode }; deliveryOrder.Details.Add(deliveryOrderDetail); #region æ·»å è°æ¨å ¥åºå Dt_CabinOrder cabinOrder = new Dt_CabinOrder() { Order_no = deliveryOrder.Out_no, Order_type = InOrderTypeEnum.Allocat.ObjToInt().ToString(), Warehouse_no = "001", OdrderStatus = "æ°å»º", Details = new List<Dt_CabinOrderDetail>() }; foreach (var item in deliveryOrder.Details) { Dt_CabinOrderDetail orderDetail = new Dt_CabinOrderDetail() { Reservoirarea = cabinOrder.Warehouse_no, Goods_no = item.Goods_no, Order_qty = item.Order_qty, Batch_num = item.Batch_num, OrderDetailStatus = "æ°å»º", Status = 0 }; cabinOrder.Details.Add(orderDetail); } #endregion Db.Ado.BeginTran(); _materielInfoService.UpdateData(materielInfo); _inventoryInfoService.Repository.UpdateData(dt_InventoryInfos); _supplyTaskService.AddData(supplyTasks); if (deliveryOrder.Details.Count > 1) Db.InsertNav(deliveryOrder).Include(x => x.Details).ExecuteCommand(); if (cabinOrder.Details.Count > 1) Db.InsertNav(cabinOrder).Include(x => x.Details).ExecuteCommand(); Db.Ado.CommitTran(); return WebResponseContent.Instance.OK(); } catch (Exception ex) { Db.Ado.RollbackTran(); return WebResponseContent.Instance.Error(ex.Message); } } public WebResponseContent GetExpiredAndlow() { н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/extend/Allocat.cs
@@ -42,9 +42,17 @@ dt_InventoryInfos = dt_InventoryInfos.OrderBy(x => x.ValidityPeriod).ToList(); else dt_InventoryInfos = dt_InventoryInfos.OrderBy(x => x.InDate).ToList(); decimal Qty = 0; Dt_DeliveryOrder deliveryOrder = new Dt_DeliveryOrder() { Out_no = DateTime.Now.ToString("yyMMddHHmmss"), Warehouse_no = WareCode, Out_type = OutOrderTypeEnum.Allocate.ObjToInt().ToString(), OutStatus = "æ°å»º", Details = new List<Dt_DeliveryOrderDetail>() }; foreach (var item in dt_InventoryInfos) { decimal Qty = 0; if (materielInfo.Business_qty >= materielInfo.MinQty) break; //item.StockStatus = StockStatusEmun.åºåºéå®.ObjToInt(); while (item.StockQuantity > item.OutboundQuantity && materielInfo.Business_qty < materielInfo.MinQty) @@ -54,49 +62,31 @@ item.OutboundQuantity += materielInfo.BoxQty; } item.AvailableQuantity = item.StockQuantity - item.OutboundQuantity; } #region 大件åºè¡¥ç«åºåç«åºä¸å¡åºåæ°è¿æ¯å°äºç«åºæå°åºåæ°ï¼æ·»å æç¤ºä¿¡æ¯ //æ·»å æ¥è¦ä¿¡æ¯ if (materielInfo.Business_qty < materielInfo.MinQty) { _messageInfoService.AddMessageInfo(MessageGroupByEnum.InventoryLowAlarm, $"ç©æåç§°:{materielInfo.MaterielName}", $"ãç©æç¼ç {materielInfo.MaterielCode}å·²çæè°æ¨åºå ¥åºåï¼è¯·è¿è¡åºå ¥åºæµç¨ã大件åºåºåè¿ä½ï¼è¯·åæ¶è¡¥å åºåï¼ã"); } else { _messageInfoService.AddMessageInfo(MessageGroupByEnum.InventoryLowAlarm, $"ç©æåç§°:{materielInfo.MaterielName}", $"ãç©æç¼ç {materielInfo.MaterielCode}å·²çæè°æ¨åºå ¥åºåï¼è¯·è¿è¡åºå ¥åºæµç¨ã"); } #endregion #region æ·»å è°æ¨åºåºå Dt_DeliveryOrder deliveryOrder = new Dt_DeliveryOrder() { Out_no = DateTime.Now.ToString("yyMMddHHmmss"), Out_type = OutOrderTypeEnum.Allocate.ObjToInt().ToString(), OutStatus = "æ°å»º", Details = new List<Dt_DeliveryOrderDetail>() }; dt_InventoryInfos = dt_InventoryInfos.Where(X => X.StockStatus == StockStatusEmun.åºåºéå®.ObjToInt()).ToList(); foreach (var item in dt_InventoryInfos.GroupBy(x => x.BatchNo)) //è¿éææ¹æ¬¡åç»äº { Dt_DeliveryOrderDetail deliveryOrderDetail = new Dt_DeliveryOrderDetail() #region æ·»å è°æ¨åºåºå Dt_DeliveryOrderDetail? deliveryOrderDetail = deliveryOrder.Details.FirstOrDefault(x => x.Batch_num == item.BatchNo); if (deliveryOrderDetail == null) { Batch_num = item.Key, Order_Outqty = 0, Order_qty = item.Select(x => x.OutboundQuantity).Sum(), CreateDate = DateTime.Now, Creater = App.User.UserName ?? "System", Goods_no = item.First().MaterielCode, OotDetailStatus = "æ°å»º", Status = 2, Reservoirarea = item.First().WarehouseCode }; deliveryOrder.Warehouse_no = item.First().WarehouseCode; deliveryOrder.Details.Add(deliveryOrderDetail); } #endregion #region æ·»å è°æ¨åºåºä»»å¡ foreach (var item in dt_InventoryInfos) { deliveryOrderDetail = new Dt_DeliveryOrderDetail() { Batch_num = item.BatchNo, Order_Outqty = 0, Order_qty = Qty, CreateDate = DateTime.Now, Creater = App.User.UserName ?? "System", Goods_no = item.MaterielCode, OotDetailStatus = "æ°å»º", Status = 2, Reservoirarea = WareCode }; deliveryOrder.Details.Add(deliveryOrderDetail); } else { deliveryOrderDetail.Order_qty += Qty; } deliveryOrder.Details.Add(deliveryOrderDetail); #endregion #region æ·»å è°æ¨åºåºä»»å¡ Dt_SupplyTask supplyTask = new Dt_SupplyTask() { WarehouseCode = item.WarehouseCode, @@ -110,12 +100,67 @@ Creater = App.User.UserName ?? "System", LocationCode = item.LocationCode, OrderNo = deliveryOrder.Out_no, StockQuantity = item.OutboundQuantity, StockQuantity = Qty, SupplyQuantity = 0, Remark = "è°æ¨åºåº" }; supplyTasks.Add(supplyTask); supplyTasks.Add(supplyTask); #endregion } #region 大件åºè¡¥ç«åºåç«åºä¸å¡åºåæ°è¿æ¯å°äºç«åºæå°åºåæ°ï¼æ·»å æç¤ºä¿¡æ¯ //æ·»å æ¥è¦ä¿¡æ¯ if (materielInfo.Business_qty < materielInfo.MinQty) { _messageInfoService.AddMessageInfo(MessageGroupByEnum.InventoryLowAlarm, $"ç©æåç§°:{materielInfo.MaterielName}", $"ãç©æç¼ç {materielInfo.MaterielCode}å·²çæè°æ¨åºå ¥åºåï¼è¯·è¿è¡åºå ¥åºæµç¨ã大件åºåºåè¿ä½ï¼è¯·åæ¶è¡¥å åºåï¼ã"); } else { _messageInfoService.AddMessageInfo(MessageGroupByEnum.InventoryLowAlarm, $"ç©æåç§°:{materielInfo.MaterielName}", $"ãç©æç¼ç {materielInfo.MaterielCode}å·²çæè°æ¨åºå ¥åºåï¼è¯·è¿è¡åºå ¥åºæµç¨ã"); } #endregion #region æ·»å è°æ¨åºåºå //dt_InventoryInfos = dt_InventoryInfos.Where(X => X.StockStatus == StockStatusEmun.åºåºéå®.ObjToInt()).ToList(); //foreach (var item in dt_InventoryInfos.GroupBy(x => x.BatchNo)) //è¿éææ¹æ¬¡åç»äº //{ // Dt_DeliveryOrderDetail deliveryOrderDetail = new Dt_DeliveryOrderDetail() // { // Batch_num = item.Key, // Order_Outqty = 0, // Order_qty = item.Select(x => x.OutboundQuantity).Sum(), // CreateDate = DateTime.Now, // Creater = App.User.UserName ?? "System", // Goods_no = item.First().MaterielCode, // OotDetailStatus = "æ°å»º", // Status = 2, // Reservoirarea = item.First().WarehouseCode // }; // deliveryOrder.Warehouse_no = item.First().WarehouseCode; // deliveryOrder.Details.Add(deliveryOrderDetail); //} #endregion #region æ·»å è°æ¨åºåºä»»å¡ //foreach (var item in dt_InventoryInfos) //{ // Dt_SupplyTask supplyTask = new Dt_SupplyTask() // { // WarehouseCode = item.WarehouseCode, // BatchNo = item.BatchNo, // MaterielName = item.MaterielName, // MaterielCode = item.MaterielCode, // MaterielSpec = item.MaterielSpec, // TaskStatus = SupplyStatusEnum.NewOut.ObjToInt(), // TaskType = TaskTypeEnum.AllocatOut.ObjToInt(), // CreateDate = DateTime.Now, // Creater = App.User.UserName ?? "System", // LocationCode = item.LocationCode, // OrderNo = deliveryOrder.Out_no, // StockQuantity = item.OutboundQuantity, // SupplyQuantity = 0, // Remark = "è°æ¨åºåº" // }; // supplyTasks.Add(supplyTask); //} #endregion #region æ·»å è°æ¨å ¥åºå н¨Îļþ¼Ð/WMS/src/extension/stock/Dt_Inventory_Batch.js
@@ -101,10 +101,10 @@ //(3)this.editFormFields.åæ®µ='xxx'; //妿éè¦ç»ä¸ææ¡è®¾ç½®é»è®¤å¼ï¼è¯·éåthis.editFormOptionsæ¾å°å段é 置对åºdata屿§çkeyå¼ //ç䏿就æè¾åºçï¼console.log(this.editFormOptions) this.editFormFields.stockQuantity = 1; // this.editFormFields.availableQuantity = 1; this.editFormOptions.forEach((editForm) => { editForm.forEach((x) => { if (x.field == "stockQuantity") { if (x.field == "availableQuantity") { } else { x.readonly = true н¨Îļþ¼Ð/WMS/src/views/stock/Dt_Inventory_Batch.vue
@@ -69,7 +69,7 @@ { title: "è°æ¨æ°é", required: true, field: "stockQuantity", field: "availableQuantity", type: "number", }, ],