PriorityAppService.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using Business.ResourceExamineManagement.Dto;
  2. using Business.Model.MES.IC;
  3. using Business.Model.Sale;
  4. using Business.MongoModel.MES.IC;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using Volo.Abp.Application.Services;
  11. namespace Business.PriorityManagement
  12. {
  13. /// <summary>
  14. /// 优先级算法
  15. /// </summary>
  16. public class PriorityAppService : ApplicationService
  17. {
  18. /// <summary>
  19. /// 计算订单优先级
  20. /// </summary>
  21. /// <param name="seorders">订单数据</param>
  22. /// <param name="sentrys">订单行数据</param>
  23. /// <returns></returns>
  24. public List<crm_seorder> CalcOrderPriority(List<crm_seorder> seorders, List<crm_seorderentry> sentrys)
  25. {
  26. //数据处理:取主表数据
  27. var dtos = seorders.Select(p=>new PriorityDto {
  28. id = p.Id,
  29. urgent = p.urgent,
  30. level = p.custom_level.GetValueOrDefault()
  31. }).AsQueryable<PriorityDto>().ToList();
  32. //子表数据处理:根据订单id分组取出客户要求交期交期最小的数据
  33. var entrys = from t in sentrys
  34. group t by t.seorder_id into temp
  35. select new
  36. {
  37. id = temp.Key,
  38. plan_date = temp.Min(x => x.plan_date.GetValueOrDefault())
  39. };
  40. foreach (var item in dtos)
  41. {
  42. var entry = entrys.FirstOrDefault(p => p.id == item.id);
  43. if (entry != null)
  44. {
  45. item.plan_date = entry.plan_date;
  46. }
  47. }
  48. //根据紧急级别倒序,客户级别升序,交期升序排序
  49. dtos = dtos.OrderByDescending(p => p.urgent).ThenBy(m => m.level).ThenBy(n => n.plan_date).ToList();
  50. List<crm_seorder> rtnOrders = new List<crm_seorder>();
  51. foreach (var item in dtos)
  52. {
  53. var order = seorders.First(p=>p.Id == item.id);
  54. rtnOrders.Add(order);
  55. }
  56. return rtnOrders;
  57. }
  58. /// <summary>
  59. /// 计算订单行优先级
  60. /// </summary>
  61. /// <param name="seorders">订单数据</param>
  62. /// <param name="sentrys">订单行数据</param>
  63. /// <returns></returns>
  64. public List<crm_seorderentry> CalcOrderEntryPriority(List<crm_seorder> seorders, List<crm_seorderentry> sentrys)
  65. {
  66. //数据处理:取主表数据
  67. var dtos = seorders.Select(p => new PriorityDto
  68. {
  69. id = p.Id,
  70. urgent = p.urgent,
  71. level = p.custom_level.GetValueOrDefault()
  72. }).AsQueryable<PriorityDto>().ToList();
  73. //子表数据处理:根据订单id分组取出客户要求交期交期最小的数据
  74. var entrys = from t in sentrys
  75. group t by t.seorder_id into temp
  76. select new
  77. {
  78. id = temp.Key,
  79. plan_date = temp.Min(x => x.plan_date.GetValueOrDefault())
  80. };
  81. foreach (var item in dtos)
  82. {
  83. var entry = entrys.FirstOrDefault(p => p.id == item.id);
  84. if (entry != null)
  85. {
  86. item.plan_date = entry.plan_date;
  87. }
  88. }
  89. //根据紧急级别倒序,客户级别升序,交期升序排序
  90. dtos = dtos.OrderByDescending(p => p.urgent).ThenBy(m => m.level).ThenBy(n => n.plan_date).ToList();
  91. List<crm_seorderentry> rtnEntrys = new List<crm_seorderentry>();
  92. foreach (var item in dtos)
  93. {
  94. var curEntrys = sentrys.Where(p => p.seorder_id == item.id).ToList();
  95. rtnEntrys.AddRange(curEntrys);
  96. }
  97. return rtnEntrys;
  98. }
  99. }
  100. }