Demo
2024-02-24 1543e640a8867fa7c8a99fae43402b81876a95a8
Wms/WMS.BLL/Logic/AllotSku.cs
@@ -14,14 +14,12 @@
        /// 分配货物
        /// </summary>
        /// <param name="palletList">库存明细集合</param>
        /// <param name="goodCode">物料编码</param>
        /// <param name="lotNo">批次</param>
        /// <param name="needQty">需要分配的数量</param>
        /// <param name="fullPalletQty">满托数量</param>
        /// <param name="fullBoxQty">满箱数量</param>
        /// <param name="stockQtyDic">托出库物品数 key:库存托盘表的ID、val:托盘上的数量</param>
        /// <returns></returns>
        public int AllotPallets(List<DataStockDetail> palletList, int needQty, int fullPalletQty, int fullBoxQty, Dictionary<int, int> stockQtyDic)
        public decimal AllotPallets(List<DataStockDetail> palletList, decimal needQty, int fullPalletQty, int fullBoxQty, Dictionary<int, decimal> stockQtyDic)
        {
            //优先先进先出(快过期的先出)
            //优先零箱、零托(出完零箱出整箱)
@@ -53,7 +51,7 @@
                    }
                }
                #endregion
                var qty = 0; //分配的总数量
                decimal qty = 0; //分配的总数量
                var ztNum = needQty / fullPalletQty;//需要整托数
                var zps = palletList.Where(s => s.Qty >= fullPalletQty).ToList();//整托
@@ -66,7 +64,7 @@
                    //散托
                    foreach (var s in st)
                    {
                        var detailQty = int.Parse((s.Qty - s.LockQty - s.FrozenQty).ToString());
                        var detailQty = decimal.Parse((s.Qty - s.LockQty - s.FrozenQty).ToString());
                        if (needQty - qty < detailQty)
                        {
                            var num = needQty - qty;
@@ -89,7 +87,7 @@
                        var zt = zps.OrderBy(s => s.ExpirationTime).ToList();//所有未使用的托盘(未被分配的)
                        foreach (var ss in zt)
                        {
                            var detailQty = int.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                            var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                            if (needQty - qty < detailQty)
                            {
                                var num = needQty - qty;
@@ -123,7 +121,7 @@
                        var zt = zps.OrderBy(s => s.ExpirationTime).ToList();//所有未使用的托盘(未被分配的)
                        foreach (var ss in zt)
                        {
                            var detailQty = int.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                            var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                            if (needQty - qty < detailQty)
                            {
                                break;
@@ -144,7 +142,7 @@
                        foreach (var ss in zt)
                        {
                            var detailQty = int.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                            var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                            if (needQty - qty < detailQty)
                            {
                                var num = needQty - qty;
@@ -167,7 +165,7 @@
                        var zt = zps.Where(s => !sIds.Contains(s.Id)).OrderBy(s => s.ExpirationTime).ThenBy(m => m.Qty - m.LockQty - m.FrozenQty).ToList();//所有未使用(未被分配的)
                        foreach (var ss in zt)
                        {
                            var detailQty = int.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                            var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                            if (needQty - qty < detailQty)
                            {
                                var num = needQty - qty;
@@ -206,7 +204,7 @@
        /// <param name="dic"></param>
        /// <param name="key"></param>
        /// <param name="v"></param>
        private void SaveDic(Dictionary<int, int> dic, int key, int v)
        private void SaveDic(Dictionary<int, decimal> dic, int key, decimal v)
        {
            if (dic.ContainsKey(key))
            {