| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- using Business.ResourceExamineManagement.Dto;
- using Business.Model.MES.IC;
- using Business.Model.Sale;
- using Business.MongoModel.MES.IC;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Volo.Abp.Application.Services;
- namespace Business.PriorityManagement
- {
- /// <summary>
- /// 优先级算法
- /// </summary>
- public class PriorityAppService : ApplicationService
- {
- /// <summary>
- /// 计算订单优先级
- /// </summary>
- /// <param name="seorders">订单数据</param>
- /// <param name="sentrys">订单行数据</param>
- /// <returns></returns>
- public List<crm_seorder> CalcOrderPriority(List<crm_seorder> seorders, List<crm_seorderentry> sentrys)
- {
- //数据处理:取主表数据
- var dtos = seorders.Select(p=>new PriorityDto {
- id = p.Id,
- urgent = p.urgent,
- level = p.custom_level.GetValueOrDefault()
- }).AsQueryable<PriorityDto>().ToList();
-
- //子表数据处理:根据订单id分组取出客户要求交期交期最小的数据
- var entrys = from t in sentrys
- group t by t.seorder_id into temp
- select new
- {
- id = temp.Key,
- plan_date = temp.Min(x => x.plan_date.GetValueOrDefault())
- };
- foreach (var item in dtos)
- {
- var entry = entrys.FirstOrDefault(p => p.id == item.id);
- if (entry != null)
- {
- item.plan_date = entry.plan_date;
- }
- }
- //根据紧急级别倒序,客户级别升序,交期升序排序
- dtos = dtos.OrderByDescending(p => p.urgent).ThenBy(m => m.level).ThenBy(n => n.plan_date).ToList();
- List<crm_seorder> rtnOrders = new List<crm_seorder>();
- foreach (var item in dtos)
- {
- var order = seorders.First(p=>p.Id == item.id);
- rtnOrders.Add(order);
- }
- return rtnOrders;
- }
- /// <summary>
- /// 计算订单行优先级
- /// </summary>
- /// <param name="seorders">订单数据</param>
- /// <param name="sentrys">订单行数据</param>
- /// <returns></returns>
- public List<crm_seorderentry> CalcOrderEntryPriority(List<crm_seorder> seorders, List<crm_seorderentry> sentrys)
- {
- //数据处理:取主表数据
- var dtos = seorders.Select(p => new PriorityDto
- {
- id = p.Id,
- urgent = p.urgent,
- level = p.custom_level.GetValueOrDefault()
- }).AsQueryable<PriorityDto>().ToList();
- //子表数据处理:根据订单id分组取出客户要求交期交期最小的数据
- var entrys = from t in sentrys
- group t by t.seorder_id into temp
- select new
- {
- id = temp.Key,
- plan_date = temp.Min(x => x.plan_date.GetValueOrDefault())
- };
- foreach (var item in dtos)
- {
- var entry = entrys.FirstOrDefault(p => p.id == item.id);
- if (entry != null)
- {
- item.plan_date = entry.plan_date;
- }
- }
- //根据紧急级别倒序,客户级别升序,交期升序排序
- dtos = dtos.OrderByDescending(p => p.urgent).ThenBy(m => m.level).ThenBy(n => n.plan_date).ToList();
- List<crm_seorderentry> rtnEntrys = new List<crm_seorderentry>();
- foreach (var item in dtos)
- {
- var curEntrys = sentrys.Where(p => p.seorder_id == item.id).ToList();
- rtnEntrys.AddRange(curEntrys);
- }
- return rtnEntrys;
- }
- }
- }
|