chengsc
2025-05-25 3a050b4d542dd2aefa65de27a6acecca1d9dda3d
Wms/WMS.BLL/Logic/AllotSku.cs
@@ -23,7 +23,7 @@
        /// <param name="lotNo">批次</param>
        /// <param name="isMixBox">是否接受拼箱 0:否  1:是</param>
        /// <returns></returns>
        public decimal AllotPallets(List<DataStockDetail> palletList, decimal needQty, int fullPalletQty, int fullBoxQty, Dictionary<int, decimal> stockQtyDic,string lotNo,string isMixBox)
        public decimal AllotPallets(List<DataStockDetail> palletList, decimal needQty, int fullPalletQty, int fullBoxQty, Dictionary<int, decimal> stockQtyDic,string house)
        {
            //优先先进先出(快过期的先出)
            //优先零箱、零托(出完零箱出整箱)
@@ -55,8 +55,13 @@
                    }
                }
                #endregion
                var list = palletList;
                decimal qty = 0; //分配的总数量
                var list = GetDataListOrderByDept(palletList);
                if (house == "W01") //仓库是密集库先进行排序
                {
                    list = GetDataListOrder(palletList);
                }
                if (fullPalletQty == 0)//无包装物料分配
                {
@@ -96,14 +101,7 @@
                                                                                                                          //散托
                        foreach (var s in st)
                        {
                            decimal otherLotQty = 0;//混箱中其他批次数量
                            //不接受拼箱
                            if (isMixBox == "0")
                            {
                                //查找出混箱集合
                                otherLotQty = GetMixBoxQty(s.Id, lotNo);
                            }
                            var detailQty = decimal.Parse((s.Qty - s.LockQty - s.FrozenQty - otherLotQty).ToString());
                            var detailQty = decimal.Parse((s.Qty - s.LockQty - s.FrozenQty).ToString());
                            if (needQty - qty < detailQty)
                            {
                                var num = needQty - qty;
@@ -126,14 +124,7 @@
                            var zt = zps.OrderBy(s => s.ExpirationTime).ToList();//所有未使用的托盘(未被分配的)
                            foreach (var ss in zt)
                            {
                                decimal otherLotQty = 0;//混箱中其他批次数量
                                //不接受拼箱
                                if (isMixBox == "0")
                                {
                                    //查找出混箱集合
                                    otherLotQty = GetMixBoxQty(ss.Id, lotNo);
                                }
                                var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty - otherLotQty).ToString());
                                var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                                if (needQty - qty < detailQty)
                                {
                                    var num = needQty - qty;
@@ -164,14 +155,7 @@
                            var zt = zps.OrderBy(s => s.ExpirationTime).ToList();//所有未使用的托盘(未被分配的)
                            foreach (var ss in zt)
                            {
                                decimal otherLotQty = 0;//混箱中其他批次数量
                                //不接受拼箱
                                if (isMixBox == "0")
                                {
                                    //查找出混箱集合
                                    otherLotQty = GetMixBoxQty(ss.Id, lotNo);
                                }
                                var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty - otherLotQty).ToString());
                                var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                                if (needQty - qty < detailQty)
                                {
                                    break;
@@ -192,14 +176,7 @@
                            foreach (var ss in zt)
                            {
                                decimal otherLotQty = 0;//混箱中其他批次数量
                                //不接受拼箱
                                if (isMixBox == "0")
                                {
                                    //查找出混箱集合
                                    otherLotQty = GetMixBoxQty(ss.Id, lotNo);
                                }
                                var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty - otherLotQty).ToString());
                                var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                                if (needQty - qty < detailQty)
                                {
                                    var num = needQty - qty;
@@ -222,14 +199,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)
                            {
                                decimal otherLotQty = 0;//混箱中其他批次数量
                                //不接受拼箱
                                if (isMixBox == "0")
                                {
                                    //查找出混箱集合
                                    otherLotQty = GetMixBoxQty(ss.Id, lotNo);
                                }
                                var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty - otherLotQty).ToString());
                                var detailQty = decimal.Parse((ss.Qty - ss.LockQty - ss.FrozenQty).ToString());
                                if (needQty - qty < detailQty)
                                {
                                    var num = needQty - qty;
@@ -261,6 +231,63 @@
            }
        }
        /// <summary>
        /// 根据储位深度获取分配的优先级别信息(密集库)
        /// </summary>
        /// <param name="palletList"></param>
        /// <returns></returns>
        private List<DataStockDetail> GetDataListOrder(List<DataStockDetail> palletList)
        {
            try
            {
                var Db = DataContext.Db;
                var data = new List<DataStockDetail>();
                var locateList = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.WareHouseNo == "W01").ToList();
                var list = palletList;
                //库外托盘
                var detail1 = list.Where(m => string.IsNullOrWhiteSpace(m.LocatNo)).OrderByDescending(a => a.PalletTags).ToList();
                // 库外
                data.AddRange(detail1);
                //密集库内托盘
                var detail2 = list.Where(m => m.WareHouseNo == "W01").ToList();
                var detail3 = detail2.GroupBy(m=>m.RoadwayNo).OrderBy(m=>m.Key).ToList();
                foreach (var item in detail3)
                {
                    var locates = locateList.Where(m => m.RoadwayNo == item.Key).FirstOrDefault();
                    if (locates == null)
                    {
                        throw new Exception("未查询到巷道内的储位信息");
                    }
                    //如果结果为0,则说明两个字符串相等;  ABC  BCE
                    //如果结果小于0,则说明第一个字符串小于第二个字符串;
                    //如果结果大于0,则说明第一个字符串大于第二个字符串。
                    var bol = String.CompareOrdinal(locates.LocatNo, locates.AisleOne);
                    //储位小于通道口   倒序
                    //储位大于通道口   正序
                    if (bol < 0)
                    {
                        //var s = item.OrderByDescending(m => m.LocatNo).ToList();
                        data.AddRange(item.OrderByDescending(m => m.LocatNo));
                    }
                    if (bol > 0)
                    {
                        data.AddRange(item.OrderBy(m => m.LocatNo));
                    }
                }
                return data;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        /// <summary>
        /// 查找出混箱中其他批次总数量
        /// </summary>