齐套开发
This commit is contained in:
@@ -2729,6 +2729,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
List<PrdMoTask> prdMoTasks = await db_WmsMaterialkit.Queryable<PrdMoTask>().Where(r => r.mo_task_status == DictConst.InProgressEnCode
|
List<PrdMoTask> prdMoTasks = await db_WmsMaterialkit.Queryable<PrdMoTask>().Where(r => r.mo_task_status == DictConst.InProgressEnCode
|
||||||
&& !string.IsNullOrEmpty(r.parent_id)).ToListAsync();
|
&& !string.IsNullOrEmpty(r.parent_id)).ToListAsync();
|
||||||
|
LoggerWmsMaterialkit.LogInformation($"*********************************************************************************");
|
||||||
LoggerWmsMaterialkit.LogInformation($"查找到进行中的任务单:{string.Join(',', prdMoTasks.Select(r => r.mo_task_code))}");
|
LoggerWmsMaterialkit.LogInformation($"查找到进行中的任务单:{string.Join(',', prdMoTasks.Select(r => r.mo_task_code))}");
|
||||||
|
|
||||||
Dictionary<string, object> workstaiondic = db_WmsMaterialkit.Queryable<OrganizeEntity>().ToDictionary(k => k.Id, v => v.EnCode);
|
Dictionary<string, object> workstaiondic = db_WmsMaterialkit.Queryable<OrganizeEntity>().ToDictionary(k => k.Id, v => v.EnCode);
|
||||||
@@ -2814,6 +2815,25 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
codeqty = d.codeqty,
|
codeqty = d.codeqty,
|
||||||
unit_code = d.unit_id
|
unit_code = d.unit_id
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
|
LoggerWmsMaterialkit.LogWarning($"物料齐套计划{wmsMaterialkitRecordH.bill_code} 绑定工位{workstaiondic[prdMoTask.workstation_id].ToString()}的料箱物料{material.code}在暂存仓库存为{zccinventory.Sum(r => r.codeqty)}");
|
||||||
|
|
||||||
|
// 输送线库存
|
||||||
|
var ssxinventory = await db_WmsMaterialkit.Queryable<WmsCarryH>()
|
||||||
|
.InnerJoin<BasLocation>((a, b) => a.location_id == b.id)
|
||||||
|
.InnerJoin<WmsCarryCode>((a, b, c) => a.id == c.carry_id)
|
||||||
|
.InnerJoin<BasMaterial>((a, b, c, d) => d.id == c.material_id)
|
||||||
|
.Where((a, b, c, d) => (b.id == WmsWareHouseConst.ZZCSSX121009 || b.id == WmsWareHouseConst.ZZCSSX121010) && d.id == material.id
|
||||||
|
&& a.work_station == workstaiondic[prdMoTask.workstation_id].ToString())
|
||||||
|
.Select((a, b, c, d) => new customInventoryEntity
|
||||||
|
{
|
||||||
|
material_id = d.id,
|
||||||
|
material_code = d.code,
|
||||||
|
material_name = d.name,
|
||||||
|
material_specification = d.material_specification,
|
||||||
|
codeqty = c.codeqty,
|
||||||
|
unit_code = c.unit_id
|
||||||
|
}).ToListAsync();
|
||||||
|
LoggerWmsMaterialkit.LogWarning($"物料齐套计划{wmsMaterialkitRecordH.bill_code} 绑定工位{workstaiondic[prdMoTask.workstation_id].ToString()}的料箱物料{material.code}在输送线库存为{ssxinventory.Sum(r => r.codeqty)}");
|
||||||
|
|
||||||
// 正在配送
|
// 正在配送
|
||||||
var inroadinventory = await db_WmsMaterialkit.Queryable<WmsPretaskH>()
|
var inroadinventory = await db_WmsMaterialkit.Queryable<WmsPretaskH>()
|
||||||
@@ -2833,11 +2853,12 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
codeqty = c.codeqty,
|
codeqty = c.codeqty,
|
||||||
unit_code = c.unit_id
|
unit_code = c.unit_id
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
|
LoggerWmsMaterialkit.LogWarning($"物料齐套计划{wmsMaterialkitRecordH.bill_code} 绑定工位{workstaiondic[prdMoTask.workstation_id].ToString()}的料箱物料{material.code}正在配送中的数量为{inroadinventory.Sum(r => r.codeqty)}");
|
||||||
|
|
||||||
|
|
||||||
List<customInventoryEntity> inventory = new List<customInventoryEntity>();
|
List<customInventoryEntity> inventory = new List<customInventoryEntity>();
|
||||||
inventory.AddRange(zccinventory);
|
inventory.AddRange(zccinventory);
|
||||||
|
inventory.AddRange(ssxinventory);
|
||||||
inventory.AddRange(inroadinventory);
|
inventory.AddRange(inroadinventory);
|
||||||
|
|
||||||
inventory.GroupBy(g => new { g.material_id, g.material_code, g.material_name, g.material_specification, g.unit_code }).Select(g =>
|
inventory.GroupBy(g => new { g.material_id, g.material_code, g.material_name, g.material_specification, g.unit_code }).Select(g =>
|
||||||
@@ -2935,7 +2956,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
};
|
};
|
||||||
List<WmsCarryH> items = await _wareHouseService.OutStockStrategy(outStockStrategyInput);
|
List<WmsCarryH> items = await _wareHouseService.OutStockStrategy(outStockStrategyInput);
|
||||||
List<WmsCarryCode> wmsCarryCodes = await db_WmsMaterialkit.Queryable<WmsCarryCode>()
|
List<WmsCarryCode> wmsCarryCodes = await db_WmsMaterialkit.Queryable<WmsCarryCode>()
|
||||||
.Where(r => r.material_id == _wmsMaterialTransferD.material_id && r.code_batch == _wmsMaterialTransferD.code_batch).ToListAsync();
|
.Where(r => r.material_id == _wmsMaterialTransferD.material_id && r.code_batch == _wmsMaterialTransferD.code_batch
|
||||||
|
&& items.Select(x => x.id).Contains(r.carry_id)).ToListAsync();
|
||||||
decimal? inv_qty = wmsCarryCodes.Sum(r => r.codeqty);
|
decimal? inv_qty = wmsCarryCodes.Sum(r => r.codeqty);
|
||||||
can_qty = inv_qty > can_qty ? can_qty : inv_qty;
|
can_qty = inv_qty > can_qty ? can_qty : inv_qty;
|
||||||
LoggerWmsMaterialkit.LogWarning($"转库单id{_wmsMaterialTransferD.bill_id} 明细id{_wmsMaterialTransferD.id} 物料{_wmsMaterialTransferD.material_code} 批次{_wmsMaterialTransferD.code_batch} 中储仓出库时可出数量为{can_qty}");
|
LoggerWmsMaterialkit.LogWarning($"转库单id{_wmsMaterialTransferD.bill_id} 明细id{_wmsMaterialTransferD.id} 物料{_wmsMaterialTransferD.material_code} 批次{_wmsMaterialTransferD.code_batch} 中储仓出库时可出数量为{can_qty}");
|
||||||
@@ -2981,7 +3003,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
List<WmsMaterialkitRecordD> WmsMaterialkitRecordDs = db_WmsMaterialkit.Queryable<WmsMaterialkitRecordD>()
|
List<WmsMaterialkitRecordD> WmsMaterialkitRecordDs = db_WmsMaterialkit.Queryable<WmsMaterialkitRecordD>()
|
||||||
.Where(a => a.bill_id == wmsMaterialkitRecord.id && a.yxf_qty < a.plan_qty).ToList();
|
.Where(a => a.bill_id == wmsMaterialkitRecord.id && a.yxf_qty < a.plan_qty).ToList();
|
||||||
if (wmsMaterialTransferDs.Count == 0)
|
if (WmsMaterialkitRecordDs.Count == 0)
|
||||||
{
|
{
|
||||||
await db_WmsMaterialkit.Updateable<WmsMaterialkitRecordH>().SetColumns(it => new WmsMaterialkitRecordH { status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID })
|
await db_WmsMaterialkit.Updateable<WmsMaterialkitRecordH>().SetColumns(it => new WmsMaterialkitRecordH { status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID })
|
||||||
.Where(it => it.id == wmsMaterialkitRecord.id).ExecuteCommandHasChangeAsync();
|
.Where(it => it.id == wmsMaterialkitRecord.id).ExecuteCommandHasChangeAsync();
|
||||||
@@ -3055,7 +3077,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
elevatorTimer = new Timer(ElevatorTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10));
|
elevatorTimer = new Timer(ElevatorTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10));
|
||||||
agvelevatorTimer = new Timer(AgvelevatorTimerTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10));
|
agvelevatorTimer = new Timer(AgvelevatorTimerTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10));
|
||||||
|
|
||||||
//WmsMaterialkittimer = new Timer(WmsMaterialkit, null, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(3600));
|
//WmsMaterialkittimer = new Timer(WmsMaterialkit, null, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(20));
|
||||||
|
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -598,12 +598,6 @@ namespace Tnb.WarehouseMgr
|
|||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
string ss = cyDb.Queryable<WmsCarryH>().LeftJoin<WmsCarryCode>((a, b) => a.id == b.carry_id)
|
|
||||||
.LeftJoin<BasLocation>((a, b, c) => a.location_id == c.id)
|
|
||||||
.Where(whereExpr)
|
|
||||||
//.OrderByIF((a,b,c)=>SqlFunc.IsNullOrEmpty())
|
|
||||||
.OrderBy(policy.policy).ToSqlString();
|
|
||||||
|
|
||||||
items = items.DistinctBy(r => r.id).ToList();
|
items = items.DistinctBy(r => r.id).ToList();
|
||||||
return input.Size > 0 ? items.Take(input.Size).ToList() : items;
|
return input.Size > 0 ? items.Take(input.Size).ToList() : items;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
.Where((a, b, c, d, e) => ((!string.IsNullOrEmpty(b.carry_code) && b.carry_status != "0" && b.carry_status != "6") || string.IsNullOrEmpty(b.carry_code)))
|
.Where((a, b, c, d, e) => ((!string.IsNullOrEmpty(b.carry_code) && b.carry_status != "0" && b.carry_status != "6") || string.IsNullOrEmpty(b.carry_code)))
|
||||||
.WhereIF(!string.IsNullOrEmpty(warehouse_id), (a, b, c, d) => c.id == warehouse_id)
|
.WhereIF(!string.IsNullOrEmpty(warehouse_id), (a, b, c, d) => c.id == warehouse_id)
|
||||||
.WhereIF(!string.IsNullOrEmpty(carry_code), (a, b, c, d) => b.carry_code.Contains(carry_code))
|
.WhereIF(!string.IsNullOrEmpty(carry_code), (a, b, c, d) => b.carry_code.Contains(carry_code))
|
||||||
.WhereIF(!string.IsNullOrEmpty(material_code), (a, b, c, d, e, f) => e.material_code.Contains(material_code))
|
.WhereIF(!string.IsNullOrEmpty(material_code), (a, b, c, d, e, f) => f.code.Contains(material_code))
|
||||||
.WhereIF(!string.IsNullOrEmpty(code_batch), (a, b, c, d, e, f) => e.code_batch.Contains(code_batch))
|
.WhereIF(!string.IsNullOrEmpty(code_batch), (a, b, c, d, e, f) => e.code_batch.Contains(code_batch))
|
||||||
.WhereIF(!string.IsNullOrEmpty(container_no), (a, b, c, d, e, f) => f.container_no.Contains(container_no))
|
.WhereIF(!string.IsNullOrEmpty(container_no), (a, b, c, d, e, f) => f.container_no.Contains(container_no))
|
||||||
.OrderByDescending((a, b, c, d, e, f) => b.carry_code)
|
.OrderByDescending((a, b, c, d, e, f) => b.carry_code)
|
||||||
|
|||||||
@@ -598,7 +598,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Logger.LogWarning($"【WmsInStockService Modify】 {ex.Message}");
|
Logger.LogWarning($"【WmsInStockService Modify】 {ex.Message}");
|
||||||
Logger.LogWarning($"【MaterialSign Modify】 {ex.StackTrace}");
|
Logger.LogWarning($"【WmsInStockService Modify】 {ex.StackTrace}");
|
||||||
await _db.Ado.RollbackTranAsync();
|
await _db.Ado.RollbackTranAsync();
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1378,6 +1378,8 @@ namespace Tnb.WarehouseMgr
|
|||||||
wmsMaterialTransferCarry.mat_bill_id = wmsMaterialTransferD.id;
|
wmsMaterialTransferCarry.mat_bill_id = wmsMaterialTransferD.id;
|
||||||
wmsMaterialTransferCarry.qty = codeqty;
|
wmsMaterialTransferCarry.qty = codeqty;
|
||||||
wmsMaterialTransferCarrys.Add(wmsMaterialTransferCarry);
|
wmsMaterialTransferCarrys.Add(wmsMaterialTransferCarry);
|
||||||
|
|
||||||
|
await _db.Updateable<WmsCarryH>().SetColumns(r => r.work_station == wmsMaterialTransferD.station_code).Where(r => r.id == wmsCarryH.id).ExecuteCommandAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1413,7 +1415,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
JObject keyValuePairs = JObject.Parse(res.data.ToString());
|
JObject keyValuePairs = JObject.Parse(res.data.ToString());
|
||||||
JArray array = JArray.Parse(keyValuePairs["pretaskids"].ToString());
|
JArray array = JArray.Parse(keyValuePairs["pretaskids"].ToString());
|
||||||
wmsMaterialTransferCarry.pretask_id = array[0].ToString();
|
wmsMaterialTransferCarry.pretask_id = array[0].ToString();
|
||||||
|
|
||||||
await _db.Updateable<WmsMaterialTransferD>().SetColumns(r => r.yxfqty == r.yxfqty + wmsMaterialTransferCarry.qty).Where(r => r.id == wmsMaterialTransferCarry.mat_bill_id).ExecuteCommandAsync();
|
await _db.Updateable<WmsMaterialTransferD>().SetColumns(r => r.yxfqty == r.yxfqty + wmsMaterialTransferCarry.qty).Where(r => r.id == wmsMaterialTransferCarry.mat_bill_id).ExecuteCommandAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1508,6 +1510,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
wmsMaterialTransferCarry.mat_bill_id = wmsMaterialTransferD.id;
|
wmsMaterialTransferCarry.mat_bill_id = wmsMaterialTransferD.id;
|
||||||
wmsMaterialTransferCarry.qty = codeqty;
|
wmsMaterialTransferCarry.qty = codeqty;
|
||||||
wmsMaterialTransferCarrys.Add(wmsMaterialTransferCarry);
|
wmsMaterialTransferCarrys.Add(wmsMaterialTransferCarry);
|
||||||
|
await _db.Updateable<WmsCarryH>().SetColumns(r => r.work_station == wmsMaterialTransferD.station_code).Where(r => r.id == wmsCarryH.id).ExecuteCommandAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
await db.Ado.BeginTranAsync();
|
await db.Ado.BeginTranAsync();
|
||||||
@@ -1521,8 +1524,6 @@ namespace Tnb.WarehouseMgr
|
|||||||
}).Where(r => r.id == input.source_id).ExecuteCommandAsync();
|
}).Where(r => r.id == input.source_id).ExecuteCommandAsync();
|
||||||
Logger.LogInformation($"【DistributeToZCC】更新转库单{wmsMaterialTransfer.bill_code}主表的数据");
|
Logger.LogInformation($"【DistributeToZCC】更新转库单{wmsMaterialTransfer.bill_code}主表的数据");
|
||||||
|
|
||||||
await db.Insertable(wmsMaterialTransferCarrys).ExecuteCommandAsync();
|
|
||||||
Logger.LogInformation($"【DistributeToZCC】插入转库单{wmsMaterialTransfer.bill_code}载具表的数据");
|
|
||||||
|
|
||||||
foreach (WmsMaterialTransferCarry wmsMaterialTransferCarry in wmsMaterialTransferCarrys)
|
foreach (WmsMaterialTransferCarry wmsMaterialTransferCarry in wmsMaterialTransferCarrys)
|
||||||
{
|
{
|
||||||
@@ -1542,9 +1543,14 @@ namespace Tnb.WarehouseMgr
|
|||||||
Logger.LogInformation($"【DistributeToZCC生成预任务失败 载具 {wmsMaterialTransferCarry.carry_code}");
|
Logger.LogInformation($"【DistributeToZCC生成预任务失败 载具 {wmsMaterialTransferCarry.carry_code}");
|
||||||
throw new AppFriendlyException($"生成预任务失败 载具 {wmsMaterialTransferCarry.carry_code}", 500);
|
throw new AppFriendlyException($"生成预任务失败 载具 {wmsMaterialTransferCarry.carry_code}", 500);
|
||||||
}
|
}
|
||||||
|
JObject keyValuePairs = JObject.Parse(res.data.ToString());
|
||||||
|
JArray array = JArray.Parse(keyValuePairs["pretaskids"].ToString());
|
||||||
|
wmsMaterialTransferCarry.pretask_id = array[0].ToString();
|
||||||
|
|
||||||
await db.Updateable<WmsMaterialTransferD>().SetColumns(r => r.yxfqty == r.yxfqty + wmsMaterialTransferCarry.qty).Where(r => r.id == wmsMaterialTransferCarry.mat_bill_id).ExecuteCommandAsync();
|
await db.Updateable<WmsMaterialTransferD>().SetColumns(r => r.yxfqty == r.yxfqty + wmsMaterialTransferCarry.qty).Where(r => r.id == wmsMaterialTransferCarry.mat_bill_id).ExecuteCommandAsync();
|
||||||
}
|
}
|
||||||
|
await db.Insertable(wmsMaterialTransferCarrys).ExecuteCommandAsync();
|
||||||
|
Logger.LogInformation($"【DistributeToZCC】插入转库单{wmsMaterialTransfer.bill_code}载具表的数据");
|
||||||
Logger.LogInformation($"转库单{wmsMaterialTransfer.bill_code}预任务{wmsMaterialTransferCarrys.Count}条全部生成成功");
|
Logger.LogInformation($"转库单{wmsMaterialTransfer.bill_code}预任务{wmsMaterialTransferCarrys.Count}条全部生成成功");
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
.Select((a, b, c, d, e, f, g, h) => new WmsStockReportH
|
.Select((a, b, c, d, e, f, g, h) => new WmsStockReportH
|
||||||
{
|
{
|
||||||
org_id = e.org_id,
|
org_id = e.org_id,
|
||||||
warehouse_id = a.warehouse_id,
|
warehouse_id = c.wh_id,
|
||||||
warehouse_code = d.whcode,
|
warehouse_code = d.whcode,
|
||||||
warehouse_name = d.whname,
|
warehouse_name = d.whname,
|
||||||
material_name = f.name,
|
material_name = f.name,
|
||||||
@@ -82,7 +82,12 @@ namespace Tnb.WarehouseMgr
|
|||||||
supplier_name = "",
|
supplier_name = "",
|
||||||
}, true).ToListAsync();
|
}, true).ToListAsync();
|
||||||
|
|
||||||
List<WmsCarryCode> carryCodes = await _db.Queryable<WmsCarryCode>().ToListAsync();
|
List<WmsCarryCode> carryCodes = await _db.Queryable<WmsCarryCode>()
|
||||||
|
.InnerJoin<WmsCarryH>((a, b) => a.carry_id == b.id)
|
||||||
|
.InnerJoin<BasLocation>((a, b, c) => b.location_id == c.id).Select((a, b, c) => new WmsCarryCode
|
||||||
|
{
|
||||||
|
warehouse_id = c.wh_id
|
||||||
|
}, true).ToListAsync();
|
||||||
var storeMap = items.DistinctBy(x => new { x.warehouse_id, x.material_id, x.code_batch }).ToDictionary(x => new { x.warehouse_id, x.material_id, x.code_batch }, x => x);
|
var storeMap = items.DistinctBy(x => new { x.warehouse_id, x.material_id, x.code_batch }).ToDictionary(x => new { x.warehouse_id, x.material_id, x.code_batch }, x => x);
|
||||||
|
|
||||||
var group = items.GroupBy(g => new { g.warehouse_id, g.material_id, g.code_batch });
|
var group = items.GroupBy(g => new { g.warehouse_id, g.material_id, g.code_batch });
|
||||||
@@ -134,7 +139,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
.Select((a, b, c, d, e, f, g, h) => new WmsStockReportH
|
.Select((a, b, c, d, e, f, g, h) => new WmsStockReportH
|
||||||
{
|
{
|
||||||
org_id = e.org_id,
|
org_id = e.org_id,
|
||||||
warehouse_id = a.warehouse_id,
|
warehouse_id = c.wh_id,
|
||||||
warehouse_code = d.whcode,
|
warehouse_code = d.whcode,
|
||||||
warehouse_name = d.whname,
|
warehouse_name = d.whname,
|
||||||
material_name = f.name,
|
material_name = f.name,
|
||||||
@@ -147,7 +152,12 @@ namespace Tnb.WarehouseMgr
|
|||||||
supplier_name = h.supplier_name,
|
supplier_name = h.supplier_name,
|
||||||
}, true).ToListAsync();
|
}, true).ToListAsync();
|
||||||
|
|
||||||
List<WmsCarryCode> carryCodes = await _db.Queryable<WmsCarryCode>().ToListAsync();
|
List<WmsCarryCode> carryCodes = await _db.Queryable<WmsCarryCode>()
|
||||||
|
.InnerJoin<WmsCarryH>((a, b) => a.carry_id == b.id)
|
||||||
|
.InnerJoin<BasLocation>((a, b, c) => b.location_id == c.id).Select((a, b, c) => new WmsCarryCode
|
||||||
|
{
|
||||||
|
warehouse_id = c.wh_id
|
||||||
|
}, true).ToListAsync();
|
||||||
var storeMap = items.DistinctBy(x => new { x.warehouse_id, x.material_id, x.code_batch, x.supplier_code }).ToDictionary(x => new { x.warehouse_id, x.material_id, x.code_batch, x.supplier_code }, x => x);
|
var storeMap = items.DistinctBy(x => new { x.warehouse_id, x.material_id, x.code_batch, x.supplier_code }).ToDictionary(x => new { x.warehouse_id, x.material_id, x.code_batch, x.supplier_code }, x => x);
|
||||||
|
|
||||||
var group = items.GroupBy(g => new { g.warehouse_id, g.material_id, g.code_batch, g.supplier_code });
|
var group = items.GroupBy(g => new { g.warehouse_id, g.material_id, g.code_batch, g.supplier_code });
|
||||||
|
|||||||
Reference in New Issue
Block a user