| | |
| | | /// <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) |
| | | { |
| | | //优先先进先出(快过期的先出) |
| | | //优先零箱、零托(出完零箱出整箱) |
| | |
| | | } |
| | | } |
| | | #endregion |
| | | var list = palletList; |
| | | decimal qty = 0; //分配的总数量 |
| | | var list = GetDataListOrderByDept(palletList); |
| | | |
| | | if (house == "W01") //仓库是密集库先进行排序 |
| | | { |
| | | list = GetDataListOrder(palletList); |
| | | } |
| | | |
| | | if (fullPalletQty == 0)//无包装物料分配 |
| | | { |
| | |
| | | //散托 |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | } |
| | | |
| | | } |
| | | |
| | | /// <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 = list.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> |