| | |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using Model.ModelDto.DataDto; |
| | | using SqlSugar; |
| | | using WMS.Entity.Context; |
| | | using WMS.Entity.DataEntity; |
| | | using WMS.Entity.SysEntity; |
| | |
| | | /// 分配货物 |
| | | /// </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) |
| | | { |
| | | //优先先进先出(快过期的先出) |
| | | //优先零箱、零托(出完零箱出整箱) |
| | |
| | | } |
| | | } |
| | | #endregion |
| | | var qty = 0; //分配的总数量 |
| | | decimal qty = 0; //分配的总数量 |
| | | var ztNum = needQty / fullPalletQty;//需要整托数 |
| | | |
| | | var zps = palletList.Where(s => s.Qty >= fullPalletQty).ToList();//整托 |
| | | var sps = palletList.Where(s => s.Qty < fullPalletQty).ToList();//散托(有可能是被锁定了数量的) |
| | | var list = GetDataListOrderByDept(palletList); |
| | | |
| | | var zps = list.Where(s => s.Qty >= fullPalletQty).ToList();//整托 |
| | | var sps = list.Where(s => s.Qty < fullPalletQty).ToList();//散托(有可能是被锁定了数量的) |
| | | |
| | | if (allotSet == 0)//优先零箱(出完零箱出整箱) |
| | | { |
| | |
| | | //散托 |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | /// <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)) |
| | | { |
| | |
| | | |
| | | //-------------------------------------------------------------------------------------------------------------- |
| | | |
| | | #region MyRegion |
| | | |
| | | ///// <summary> |
| | | ///// 获得背包承重w,装货物o,从第k件向后考虑,得到的最大价值 |
| | |
| | | // return a > b ? a : b; |
| | | //} |
| | | |
| | | #endregion |
| | | |
| | | |
| | | private List<StockDetailDto> GetDataListOrderByDept(List<DataStockDetail> palletList) |
| | | { |
| | | try |
| | | { |
| | | var Db = DataContext.Db; |
| | | var data = new List<StockDetailDto>(); |
| | | |
| | | var list = palletList.Select(m => new StockDetailDto() |
| | | { |
| | | Id = m.Id, |
| | | LotNo = m.LotNo, |
| | | LotText = m.LotText, |
| | | SupplierLot = m.SupplierLot, |
| | | OwnerNo = m.OwnerNo, |
| | | OwnerName = m.OwnerName, |
| | | SupplierNo = m.SupplierNo, |
| | | SupplierName = m.SupplierName, |
| | | SkuNo = m.SkuNo, |
| | | SkuName = m.SkuName, |
| | | Standard = m.Standard, |
| | | Qty = m.Qty, |
| | | LockQty = m.LockQty, |
| | | FrozenQty = m.FrozenQty, |
| | | InspectQty = m.InspectQty, |
| | | ASNNo = m.ASNNo, |
| | | ASNDetailNo = m.ASNDetailNo, |
| | | WareHouseNo = m.WareHouseNo, |
| | | RoadwayNo = m.RoadwayNo, |
| | | AreaNo = m.AreaNo, |
| | | LocatNo = m.LocatNo, |
| | | PalletNo = m.PalletNo, |
| | | PalletNo2 = m.PalletNo2, |
| | | PalletNo3 = m.PalletNo3, |
| | | CompleteTime = m.CompleteTime, |
| | | ProductionTime = m.ProductionTime, |
| | | ExpirationTime = m.ExpirationTime, |
| | | Status = m.Status, |
| | | InspectMark = m.InspectMark, |
| | | BitPalletMark = m.BitPalletMark, |
| | | InspectStatus = m.InspectStatus, |
| | | InspectTime = m.InspectTime, |
| | | PackagNo = m.PackagNo, |
| | | IsBale = m.IsBale, |
| | | IsBelt = m.IsBelt, |
| | | Demo = m.Demo, |
| | | |
| | | }).ToList(); |
| | | //库外托盘 |
| | | var detail1 = list.Where(m => string.IsNullOrWhiteSpace(m.LocatNo)).ToList(); |
| | | //平库内托盘 |
| | | var detail2 = list.Where(m => m.WareHouseNo == "W02").ToList(); |
| | | //立库内托盘 |
| | | var detail3 = list.Where(m => m.WareHouseNo == "W01").ToList(); |
| | | |
| | | foreach (var item in detail2) |
| | | { |
| | | var dept = item.LocatNo.Substring(5,2); |
| | | |
| | | item.Dept = int.Parse(dept); |
| | | } |
| | | foreach (var item in detail3) |
| | | { |
| | | var dept = item.LocatNo.Substring(6, 2); |
| | | |
| | | item.Dept = int.Parse(dept); |
| | | } |
| | | data.AddRange(detail1); |
| | | data.AddRange(detail2.OrderBy(m => m.Dept).ToList()); |
| | | data.AddRange(detail3.OrderBy(m => m.Dept).ToList()); |
| | | |
| | | return data; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | } |