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
{
///
/// 优先级算法
///
public class PriorityAppService : ApplicationService
{
///
/// 计算订单优先级
///
/// 订单数据
/// 订单行数据
///
public List CalcOrderPriority(List seorders, List sentrys)
{
//数据处理:取主表数据
var dtos = seorders.Select(p=>new PriorityDto {
id = p.Id,
urgent = p.urgent,
level = p.custom_level.GetValueOrDefault()
}).AsQueryable().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 rtnOrders = new List();
foreach (var item in dtos)
{
var order = seorders.First(p=>p.Id == item.id);
rtnOrders.Add(order);
}
return rtnOrders;
}
///
/// 计算订单行优先级
///
/// 订单数据
/// 订单行数据
///
public List CalcOrderEntryPriority(List seorders, List sentrys)
{
//数据处理:取主表数据
var dtos = seorders.Select(p => new PriorityDto
{
id = p.Id,
urgent = p.urgent,
level = p.custom_level.GetValueOrDefault()
}).AsQueryable().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 rtnEntrys = new List();
foreach (var item in dtos)
{
var curEntrys = sentrys.Where(p => p.seorder_id == item.id).ToList();
rtnEntrys.AddRange(curEntrys);
}
return rtnEntrys;
}
}
}