diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/CarryMaterialInventoryInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/CarryMaterialInventoryInput.cs
index 9326e0ce..e7fac74c 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/CarryMaterialInventoryInput.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/CarryMaterialInventoryInput.cs
@@ -5,6 +5,14 @@
///
public class CarryMaterialInventoryInput
{
+ ///
+ /// 业务类型
+ ///
+ public string? biz_type { get; set; }
+ ///
+ /// 来源单据id
+ ///
+ public string? source_id { get; set; }
///
/// 仓库编码
///
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/RawmatTransferoutstockInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/RawmatTransferoutstockInput.cs
index d256999c..a7136991 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/RawmatTransferoutstockInput.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/RawmatTransferoutstockInput.cs
@@ -24,6 +24,11 @@ namespace Tnb.WarehouseMgr.Entities.Dto
///
/// 载具
///
- public List carrys { get; set; }
+ public List carrys { get; set; }
+ }
+
+ public class RawmatTransferoutstockDetailInput
+ {
+ public string carry_code { get; set; }
}
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryCode.part.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryCode.part.cs
index 4a5c092c..64f3ebe4 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryCode.part.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsCarryCode.part.cs
@@ -48,5 +48,10 @@ public partial class WmsCarryCode
///
[SugarColumn(IsIgnore = true)]
public string carry_code { get; set; }
+ ///
+ /// 签收数量
+ ///
+ [SugarColumn(IsIgnore = true)]
+ public decimal? sign_qty { get; set; }
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferoutstockC.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferoutstockC.cs
new file mode 100644
index 00000000..a9ba1b45
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferoutstockC.cs
@@ -0,0 +1,77 @@
+using JNPF.Common.Contracts;
+using JNPF.Common.Security;
+using SqlSugar;
+
+namespace Tnb.WarehouseMgr.Entities.Entity;
+
+///
+/// 原材料调拨出库载具表
+///
+[SugarTable("wms_rawmat_transferoutstock_c")]
+public partial class WmsRawmatTransferoutstockC : BaseEntity
+{
+ public WmsRawmatTransferoutstockC()
+ {
+ id = SnowflakeIdHelper.NextId();
+ }
+ ///
+ /// 原材料调拨出库单id
+ ///
+ public string? bill_id { get; set; }
+
+ ///
+ /// 载具ID
+ ///
+ public string? carry_id { get; set; }
+
+ ///
+ /// 载具编号
+ ///
+ public string? carry_code { get; set; }
+
+ ///
+ /// 创建用户
+ ///
+ public string? create_id { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ public DateTime? create_time { get; set; }
+
+ ///
+ /// 终点库位id
+ ///
+ public string? endlocation_id { get; set; }
+
+ ///
+ /// 终点库位编码
+ ///
+ public string? endlocation_code { get; set; }
+
+ ///
+ /// 起点库位id
+ ///
+ public string? startlocation_id { get; set; }
+
+ ///
+ /// 起点库位编码
+ ///
+ public string? startlocation_code { get; set; }
+
+ ///
+ /// 原材料调拨出库明细id
+ ///
+ public string? mat_bill_id { get; set; }
+
+ ///
+ /// 载具数量
+ ///
+ public decimal? qty { get; set; }
+
+ ///
+ /// 签收数量
+ ///
+ public decimal? sign_qty { get; set; }
+
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
index 743501b0..c199d2ec 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
@@ -3692,22 +3692,33 @@ namespace Tnb.WarehouseMgr
{
try
{
+ if (string.IsNullOrEmpty(input.biz_type))
+ throw new AppFriendlyException("业务类型不可为空", 500);
+ if (string.IsNullOrEmpty(input.source_id))
+ throw new AppFriendlyException("来源单据id不可为空", 500);
if (string.IsNullOrEmpty(input.warehouse_code))
- {
throw new AppFriendlyException("出库仓库不可为空", 500);
- }
-
if (string.IsNullOrEmpty(input.material_id))
- {
throw new AppFriendlyException("物料id不可为空", 500);
- }
if (string.IsNullOrEmpty(input.code_batch))
- {
throw new AppFriendlyException("批号不可为空", 500);
- }
BasWarehouse basWarehouse = await _db.Queryable().Where(r => r.whcode == input.warehouse_code).FirstAsync();
+ // 下发数量
+ decimal? qty = 0;
+ switch (input.biz_type)
+ {
+ case WmsWareHouseConst.BIZTYPE_WmsRawmatTransferoutstock_ID:
+ {
+ WmsRawmatTransferoutstockD wmsRawmatTransferoutstockD = await _db.Queryable().Where(r => r.id == input.source_id).FirstAsync();
+ if (wmsRawmatTransferoutstockD == null)
+ throw new AppFriendlyException($"来源单据{input.source_id}不存在", 500);
+ qty = wmsRawmatTransferoutstockD.qty - wmsRawmatTransferoutstockD.actual_qty;
+ break;
+ }
+ }
+
switch (basWarehouse.id)
{
case WmsWareHouseConst.WAREHOUSE_YCL_ID:
@@ -3743,23 +3754,58 @@ namespace Tnb.WarehouseMgr
})
.ToListAsync();
- var wmsCarryCodesSum = wmsCarryCodes.GroupBy(r => new { r.carry_id, r.material_id, r.code_batch }).Select(g =>
+
+ var wmsCarryCodesOrderByQty = wmsCarryCodes.GroupBy(r => new { r.carry_id, r.material_id, r.code_batch })
+ .Select(g =>
+ {
+ var list = g.ToList();
+ decimal sumqty = g.Sum(r => r.qty);
+
+ var newg = new
+ {
+ carry_id = list[0].carry_id,
+ carry_code = list[0].carry_code,
+ material_id = list[0].material_id,
+ material_code = list[0].material_code,
+ material_name = list[0].material_name,
+ material_specification = list[0].material_specification,
+ barcode = list[0].barcode,
+ code_batch = list[0].code_batch,
+ qty = sumqty
+ };
+ return newg;
+ });
+
+
+ bool isFindSortCarry = false;
+ var wmsCarryCodesSum = wmsCarryCodesOrderByQty.OrderBy(r => r.qty).Select(g =>
{
- var list = g.ToList();
+ decimal sumqty = g.qty;
+
+ decimal? remainQty = qty - sumqty;
+
+ // 首次小于0则需要分拣
+ if (remainQty < 0 && !isFindSortCarry)
+ isFindSortCarry = true;
+ else
+ isFindSortCarry = false;
var newg = new
{
- carry_id = list[0].carry_id,
- carry_code = list[0].carry_code,
- material_id = list[0].material_id,
- material_code = list[0].material_code,
- material_name = list[0].material_name,
- material_specification = list[0].material_specification,
- barcode = list[0].barcode,
- code_batch = list[0].code_batch,
- qty = g.Sum(r => r.qty)
+ carry_id = g.carry_id,
+ carry_code = g.carry_code,
+ material_id = g.material_id,
+ material_code = g.material_code,
+ material_name = g.material_name,
+ material_specification = g.material_specification,
+ barcode = g.barcode,
+ code_batch = g.code_batch,
+ qty = sumqty,
+ sign_qty = isFindSortCarry ? qty : sumqty,
+ isSortCarry = isFindSortCarry, // 是否为分拣载具
+ isSelect = isFindSortCarry || remainQty > 0, // 是否勾选
};
-
+ qty -= sumqty;
return newg;
});
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs
index 1fb64888..658884e6 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs
@@ -379,8 +379,51 @@ namespace Tnb.WarehouseMgr
throw new AppFriendlyException($"【MaterialByCarry】托盘{input.carry_code}不存在", 500);
}
+ WmsDistaskH wmsDistaskH = await _db.Queryable().Where(r => r.carry_id == wmsCarryH.id).OrderByDescending(r => r.id).FirstAsync();
+ if (wmsDistaskH == null)
+ {
+ throw new AppFriendlyException($"【MaterialSign】无法找到载具{input.carry_code}的执行任务", 500);
+ }
+
+ if (string.IsNullOrEmpty(wmsDistaskH.biz_type))
+ {
+ throw new AppFriendlyException($"【MaterialSign】载具{input.carry_code}任务{wmsDistaskH.bill_code}的业务类型异常", 500);
+ }
List wmsCarryCodes = _db.Queryable().Where(r => r.carry_id == wmsCarryH.id && r.codeqty > 0).ToList();
+ switch (wmsDistaskH.biz_type)
+ {
+ case WmsWareHouseConst.BIZTYPE_WmsRawmatTransferoutstock_ID:
+ {
+ WmsRawmatTransferoutstockC wmsRawmatTransferoutstockC = await _db.Queryable()
+ .Where(r => r.mat_bill_id == wmsDistaskH.source_id && r.carry_id == wmsCarryH.id).FirstAsync();
+ if (wmsRawmatTransferoutstockC != null)
+ {
+ // 返回默认签收数量
+ if (wmsRawmatTransferoutstockC.sign_qty > 0)
+ {
+ List _wmsCarryCodes = wmsCarryCodes.Where(r => r.carry_id == wmsCarryH.id).ToList();
+ foreach (WmsCarryCode wmsCarryCode in _wmsCarryCodes)
+ {
+ wmsCarryCode.carry_code = wmsCarryH.carry_code;
+ if (wmsCarryCode.codeqty < wmsRawmatTransferoutstockC.sign_qty)
+ {
+ wmsCarryCode.sign_qty = wmsCarryCode.codeqty;
+ wmsRawmatTransferoutstockC.sign_qty -= wmsCarryCode.codeqty;
+ }
+ else
+ {
+ wmsCarryCode.sign_qty = wmsRawmatTransferoutstockC.sign_qty;
+ }
+ }
+ }
+ }
+
+ break;
+ }
+ }
+
+
return await ToApiResult(HttpStatusCode.OK, "成功", wmsCarryCodes);
}
catch (Exception ex)
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialSignHService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialSignHService.cs
index 14436abc..d1d0937d 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialSignHService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialSignHService.cs
@@ -162,6 +162,7 @@ namespace Tnb.WarehouseMgr
{
CarryCodeUnbindCodeInput carryCodeUnbindCodeInput = new CarryCodeUnbindCodeInput();
await _wmsCarryUnbindService.CarryCodeUnbindCode(carryCodeUnbindCodeInput, _db);
+ await _db.Updateable().SetColumns(r => r.carry_status == "0").Where(r => r.id == wmsCarryH.id).ExecuteCommandAsync();
}
//await _db.Updateable().SetColumns(r => r.codeqty == wmsCarryCode.codeqty)
// .Where(r => r.barcode == wmsCarryCode.barcode).ExecuteCommandAsync();
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs
index e8f6b111..d3aa5979 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseService.cs
@@ -34,6 +34,7 @@ using Tnb.BasicData;
using Tnb.ProductionMgr.Entities.Entity;
using Tnb.WarehouseMgr.Entities.Entity;
using Microsoft.Extensions.Logging;
+using Microsoft.AspNetCore.Authorization;
namespace Tnb.WarehouseMgr
{
@@ -390,5 +391,9 @@ namespace Tnb.WarehouseMgr
throw;
}
}
+
+
+
+
}
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatTransferoutstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatTransferoutstockService.cs
index f4a155ea..53642c0f 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatTransferoutstockService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsRawmatTransferoutstockService.cs
@@ -96,8 +96,18 @@ namespace Tnb.WarehouseMgr
WmsRawmatTransferoutstockD wmsRawmatTransferoutstockD = await _db.Queryable().FirstAsync(it => it.id == input.source_id);
WmsRawmatTransferoutstockH wmsRawmatTransferoutstockH = await _db.Queryable().FirstAsync(it => it.id == wmsRawmatTransferoutstockD.bill_id);
- List items = await _db.Queryable().Where(r => input.carrys.Contains(r.carry_code)).ToListAsync();
+ List _items = await _db.Queryable().Where(r => input.carrys.Select(c => c.carry_code).Contains(r.carry_code)).ToListAsync();
+ List wmsCarryCodes = await _db.Queryable().Where(r => _items.Select(c => c.id).Contains(r.carry_id)
+ && r.material_id == wmsRawmatTransferoutstockD.matcode_id && r.code_batch == wmsRawmatTransferoutstockD.code_batch).ToListAsync();
+
+ List items = new List();
+
+ foreach (var carry in input.carrys.Select(c => c.carry_code))
+ {
+ items.Add(_items.Where(r => r.carry_code == carry).First());
+ }
+
foreach (var item in items)
{
if (item.is_lock == 1)
@@ -111,13 +121,20 @@ namespace Tnb.WarehouseMgr
}
}
- List wmsCarryCodes = await _db.Queryable().Where(r => items.Select(c => c.id).Contains(r.carry_id)
- && r.material_id == wmsRawmatTransferoutstockD.matcode_id && r.code_batch == wmsRawmatTransferoutstockD.code_batch).ToListAsync();
+ decimal? sign_qty = 0;
decimal qty = wmsCarryCodes.Sum(c => c.codeqty);
if (wmsRawmatTransferoutstockD.actual_qty + qty > wmsRawmatTransferoutstockD.qty)
{
- throw new AppFriendlyException($"本次出库数量{qty}已超过可出库数量{wmsRawmatTransferoutstockD.qty - wmsRawmatTransferoutstockD.actual_qty}", 500);
+ // 最后一个托盘的数量
+ decimal lastCarryQty = wmsCarryCodes.Where(r => r.carry_id == items[items.Count - 1].id).Sum(r => r.codeqty);
+ // 如果最后一个托盘数量小于超出的出库数量
+ if (lastCarryQty < wmsRawmatTransferoutstockD.actual_qty + qty - wmsRawmatTransferoutstockD.qty)
+ {
+ throw new AppFriendlyException($"本次出库数量{qty}已超过可出库数量{wmsRawmatTransferoutstockD.qty - wmsRawmatTransferoutstockD.actual_qty} 且无需选择{items[items.Count - 1].carry_code}", 500);
+ }
+ // 签收数量
+ sign_qty = lastCarryQty - (wmsRawmatTransferoutstockD.actual_qty + qty - wmsRawmatTransferoutstockD.qty);
}
await _db.Ado.BeginTranAsync();
@@ -145,6 +162,23 @@ namespace Tnb.WarehouseMgr
throw new AppFriendlyException($@"没有可用的终点库位!请检查终点库位的锁定和占用状态", 500);
}
+ WmsRawmatTransferoutstockC wmsRawmatTransferoutstockC = new WmsRawmatTransferoutstockC();
+ wmsRawmatTransferoutstockC.bill_id = wmsRawmatTransferoutstockH.id;
+ wmsRawmatTransferoutstockC.mat_bill_id = wmsRawmatTransferoutstockD.id;
+ wmsRawmatTransferoutstockC.carry_id = wmsCarryH.id;
+ wmsRawmatTransferoutstockC.carry_code = wmsCarryH.carry_code;
+ wmsRawmatTransferoutstockC.create_id = input.create_id;
+ wmsRawmatTransferoutstockC.create_time = DateTime.Now;
+ wmsRawmatTransferoutstockC.startlocation_id = startLocation.id;
+ wmsRawmatTransferoutstockC.startlocation_code = startLocation.location_code;
+ wmsRawmatTransferoutstockC.endlocation_id = endLocation.id;
+ wmsRawmatTransferoutstockC.endlocation_code = endLocation.location_code;
+ decimal carryQty = wmsCarryCodes.Where(r => r.carry_id == wmsCarryH.id).Sum(r => r.codeqty);
+ wmsRawmatTransferoutstockC.qty = carryQty;
+ wmsRawmatTransferoutstockC.sign_qty = wmsCarryH.id == items[items.Count - 1].id && sign_qty > 0 ? sign_qty : carryQty;
+
+ await _db.Insertable(wmsRawmatTransferoutstockC).ExecuteCommandAsync();
+
CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput();
commonCreatePretaskInput.startlocation_id = startLocation.id;
commonCreatePretaskInput.endlocation_id = endLocation.id;