LocationForStrategyInfoComparer.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace wms.service.Service.StrategyService
  6. {
  7. public class LocationForStrategyInfoComparer : IComparer<LocationForStrategyInfo>
  8. {
  9. private string _fieldName { get; set; }
  10. public LocationForStrategyInfoComparer(string fieldName)
  11. {
  12. _fieldName = fieldName;
  13. }
  14. public int Compare(LocationForStrategyInfo x, LocationForStrategyInfo y)
  15. {
  16. switch (_fieldName)
  17. {
  18. case "InTime":
  19. x.StockList.Sort(new LocationForStrategyInfoStockComparer(_fieldName));
  20. y.StockList.Sort(new LocationForStrategyInfoStockComparer(_fieldName));
  21. return x.StockList.First().InTime.Date.CompareTo(y.StockList.First().InTime.Date);
  22. case "ProductionTime":
  23. x.StockList.Sort(new LocationForStrategyInfoStockComparer(_fieldName));
  24. y.StockList.Sort(new LocationForStrategyInfoStockComparer(_fieldName));
  25. return x.StockList.First().ProductionTime.Date.CompareTo(y.StockList.First().ProductionTime.Date);
  26. case "LastInTime":
  27. x.StockList.Sort(new LocationForStrategyInfoStockComparer(_fieldName));
  28. y.StockList.Sort(new LocationForStrategyInfoStockComparer(_fieldName));
  29. return x.StockList.First().LastInTime.Date.CompareTo(y.StockList.First().LastInTime.Date);
  30. case "MixCount":
  31. var temp = x.StockList.Select(q => q.MaterialId).Distinct().Count().CompareTo(y.StockList.Select(q => q.MaterialId).Distinct().Count()) * (-1);
  32. if (temp == 0)
  33. {
  34. x.StockList.Sort(new LocationForStrategyInfoStockComparer("ProductionTime"));
  35. y.StockList.Sort(new LocationForStrategyInfoStockComparer("ProductionTime"));
  36. return x.StockList.First().ProductionTime.Date.CompareTo(y.StockList.First().ProductionTime.Date);
  37. }
  38. return temp;
  39. default:
  40. return x.Id.CompareTo(y.Id);
  41. }
  42. }
  43. }
  44. public class LocationForStrategyInfoStockComparer : IComparer<LocationForStrategyInfoStock>
  45. {
  46. private string _fieldName { get; set; }
  47. public LocationForStrategyInfoStockComparer(string fieldName)
  48. {
  49. _fieldName = fieldName;
  50. }
  51. public int Compare(LocationForStrategyInfoStock x, LocationForStrategyInfoStock y)
  52. {
  53. switch (_fieldName)
  54. {
  55. case "InTime":
  56. return x.InTime.Date.CompareTo(y.InTime.Date);
  57. case "ProductionTime":
  58. return x.ProductionTime.Date.CompareTo(y.ProductionTime.Date);
  59. case "LastInTime":
  60. return x.LastInTime.Date.CompareTo(y.LastInTime.Date);
  61. default:
  62. return x.GroupStockDetailId.CompareTo(y.GroupStockDetailId);
  63. }
  64. }
  65. }
  66. }