From 23f7d0e0cf31ea6a7cde81bf23ef07091bd4f3a7 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期一, 03 十一月 2025 14:22:35 +0800
Subject: [PATCH] 添加人工触发调拨单
---
新建文件夹/WMS/src/extension/stock/Dt_Inventory_Batch.js | 4
新建文件夹/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/extend/Allocat.cs | 135 ++++++++++++++++++---------
新建文件夹/WMS/src/views/stock/Dt_Inventory_Batch.vue | 2
新建文件夹/WIDESEA_WMSServer/ClassLibrary2/Inventory_BatchServices.cs.cs | 133 ++++++++++++++++++++++++++
4 files changed, 223 insertions(+), 51 deletions(-)
diff --git "a/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/ClassLibrary2/Inventory_BatchServices.cs.cs" "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/ClassLibrary2/Inventory_BatchServices.cs.cs"
index 7f8f0d0..0db452a 100644
--- "a/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/ClassLibrary2/Inventory_BatchServices.cs.cs"
+++ "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/ClassLibrary2/Inventory_BatchServices.cs.cs"
@@ -1,9 +1,15 @@
-锘縰sing System;
+锘縰sing 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()
{
diff --git "a/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/extend/Allocat.cs" "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/extend/Allocat.cs"
index caa7125..5b88b7e 100644
--- "a/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/extend/Allocat.cs"
+++ "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/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 娣诲姞璋冩嫧鍏ュ簱鍗�
diff --git "a/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WMS/src/extension/stock/Dt_Inventory_Batch.js" "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WMS/src/extension/stock/Dt_Inventory_Batch.js"
index 317cbac..c9b708b 100644
--- "a/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WMS/src/extension/stock/Dt_Inventory_Batch.js"
+++ "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WMS/src/extension/stock/Dt_Inventory_Batch.js"
@@ -101,10 +101,10 @@
//(3)this.editFormFields.瀛楁='xxx';
//濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
//鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.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
diff --git "a/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WMS/src/views/stock/Dt_Inventory_Batch.vue" "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WMS/src/views/stock/Dt_Inventory_Batch.vue"
index ed656f8..3671b21 100644
--- "a/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WMS/src/views/stock/Dt_Inventory_Batch.vue"
+++ "b/\346\226\260\345\273\272\346\226\207\344\273\266\345\244\271/WMS/src/views/stock/Dt_Inventory_Batch.vue"
@@ -69,7 +69,7 @@
{
title: "璋冩嫧鏁伴噺",
required: true,
- field: "stockQuantity",
+ field: "availableQuantity",
type: "number",
},
],
--
Gitblit v1.9.3