gpt4 book ai didi

c# - 先进先出减数量库存?

转载 作者:行者123 更新时间:2023-11-30 17:32:50 25 4
gpt4 key购买 nike

我有一个数据库详细信息名称 item_detail

No(autoincrement)      Id_Item    qty
--------------------------------------
1 1 10
2 1 20
3 2 20
4 2 20
5 3 30
6 3 40

所以对于第一个在表中排在第一位的项目 1,项目 1 的所有数量总和为 30

如果我有来 self 的交易的 datagridview1 的数据

   Id_Item    qtyOUT
---------------
1 20
2 30

如何从 datagridview1 中减去 qty 到我的数据库,这样我想要的结果是这样的

 No(autoincrement)     Id_Item    qty
--------------------------------------
1 1 0
2 1 10
3 2 0
4 2 10
5 3 30
6 3 40

所以它检查是否没有 1 id item 1 只有 qty 10 减去直到 0 然后移动 id_item 1 谁仍然有值(value),根据先到的交易号。

减去后我想将该交易过程放入表 ITEM_TRANSACTION

 NoTrans(autoincrement) no(from item_detail)      qtyOut
---------------------------------------------------------
1 1 10
2 2 10
3 3 20
4 4 10

尝试代码

private void calculate()
{
// Transaction: Id_Item, qtyOUT
IEnumerable<ItemOut> contextItemOut = null;
// ItemDetail: No, Id_Item, qty
IEnumerable<ItemDetail> contextItemDetails = null;

Dictionary<int, decimal> itemOutQuantities = contextItemOut.ToDictionary(x => x.Id_Item, x => x.qtyOUT);

var itemDetails = contextItemDetails.OrderBy(x => x.No).ToList();

foreach (var item in itemDetails)
{
decimal outQty;
if (itemOutQuantities.TryGetValue(item.Id_Item, out outQty))
{
var qtyChange = Math.Min(outQty, item.qty);
item.qty -= qtyChange;
outQty -= qtyChange;
if (outQty == 0)
{
ITEM_TRANSACTION trans = new ITEM_TRANSACTION();
trans.id_Item = item;
trans.qtyOut = qtyChange; //maybe its wrong
itemOutQuantities.Remove(item.Id_Item);
}
else
{
itemOutQuantities[item.Id_Item] = outQty;
}
}
}

// itemDetails qty values are corrected

所以请帮忙

最佳答案

为简单起见,我假设您的数据可用 IEnumerable<TEntity> (不要像我的代码那样将它们保留为 null),您可以适应数据表或任何值存储。

打开你的qtyOUT将条目放入字典中以进行高效访问,然后在 No 中循环您的 item_detail 条目订单和每个细节,检查是否有要减去的值。

private void calculate()
{
// Transaction: Id_Item, qtyOUT
IEnumerable<ItemOut> contextItemOut = null;
// ItemDetail: No, Id_Item, qty
IEnumerable<ItemDetail> contextItemDetails = null;

Dictionary<int, decimal> itemOutQuantities = contextItemOut.ToDictionary(x => x.Id_Item, x => x.qtyOUT);

var itemDetails = contextItemDetails.OrderBy(x => x.No).ToList();

// Data for ITEM_TRANSACTION
ICollection<ItemTransaction> transactions = new List<ItemTransaction>();

foreach (var item in itemDetails)
{
decimal outQty;
if (itemOutQuantities.TryGetValue(item.Id_Item, out outQty))
{
var qtyChange = Math.Min(outQty, item.qty);
item.qty -= qtyChange;
outQty -= qtyChange;
if (outQty == 0)
{
itemOutQuantities.Remove(item.Id_Item);
}
else
{
itemOutQuantities[item.Id_Item] = outQty;
}

if (qtyChange != 0)
{
transactions.Add(new ItemTransaction { /*No = autoincrement, */ NoTrans = item.No, qtyOUT = qtyChange });
}
}
}

// itemDetails qty values are corrected
}

关于c# - 先进先出减数量库存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45706332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com