using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace wms.service.Service.StrategyService { public class LocationForStrategyInfoComparer : IComparer { private string _fieldName { get; set; } public LocationForStrategyInfoComparer(string fieldName) { _fieldName = fieldName; } public int Compare(LocationForStrategyInfo x, LocationForStrategyInfo y) { switch (_fieldName) { case "InTime": x.StockList.Sort(new LocationForStrategyInfoStockComparer(_fieldName)); y.StockList.Sort(new LocationForStrategyInfoStockComparer(_fieldName)); return x.StockList.First().InTime.Date.CompareTo(y.StockList.First().InTime.Date); case "ProductionTime": x.StockList.Sort(new LocationForStrategyInfoStockComparer(_fieldName)); y.StockList.Sort(new LocationForStrategyInfoStockComparer(_fieldName)); return x.StockList.First().ProductionTime.Date.CompareTo(y.StockList.First().ProductionTime.Date); case "LastInTime": x.StockList.Sort(new LocationForStrategyInfoStockComparer(_fieldName)); y.StockList.Sort(new LocationForStrategyInfoStockComparer(_fieldName)); return x.StockList.First().LastInTime.Date.CompareTo(y.StockList.First().LastInTime.Date); case "MixCount": var temp = x.StockList.Select(q => q.MaterialId).Distinct().Count().CompareTo(y.StockList.Select(q => q.MaterialId).Distinct().Count()) * (-1); if (temp == 0) { x.StockList.Sort(new LocationForStrategyInfoStockComparer("ProductionTime")); y.StockList.Sort(new LocationForStrategyInfoStockComparer("ProductionTime")); return x.StockList.First().ProductionTime.Date.CompareTo(y.StockList.First().ProductionTime.Date); } return temp; default: return x.Id.CompareTo(y.Id); } } } public class LocationForStrategyInfoStockComparer : IComparer { private string _fieldName { get; set; } public LocationForStrategyInfoStockComparer(string fieldName) { _fieldName = fieldName; } public int Compare(LocationForStrategyInfoStock x, LocationForStrategyInfoStock y) { switch (_fieldName) { case "InTime": return x.InTime.Date.CompareTo(y.InTime.Date); case "ProductionTime": return x.ProductionTime.Date.CompareTo(y.ProductionTime.Date); case "LastInTime": return x.LastInTime.Date.CompareTo(y.LastInTime.Date); default: return x.GroupStockDetailId.CompareTo(y.GroupStockDetailId); } } } }