namespace Yw.Application
{
///
/// HealthMultiEvaluationRecord
///
[Route("Health/Multi/Evaluation/Record/Logic")]
[ApiDescriptionSettings("Health", Name = "综合健康评价记录(业务)", Order = 700)]
public class HealthMultiEvaluationRecord_LogicController : IDynamicApiController
{
///
/// 通过 EquipmentID 获取最近一条树记录
///
[Route("GetLastTreeRecordByEquipmentID@V1.0")]
[HttpGet]
public HealthMultiEvaluationTreeRecordLogicDto GetLastTreeRecordByEquipmentID([FromQuery][Required] EquipmentIDInput input)
{
var equipmentId = input.EquipmentID;
var resultList = new Yw.Service.HealthResult().GetAll();
if (resultList == null || resultList.Count < 1)
{
throw Oops.Oh(ErrorCodes.V001, "评价状态", "未配置评价状态");
}
#region 获取父级及自身设备
var serviceEquipment = new Service.Equipment();
var allEquipmentList = serviceEquipment.GetParentAndSelfByID(equipmentId);
if (allEquipmentList == null || allEquipmentList.Count < 1)
{
throw Oops.Oh(ErrorCodes.D001, $"EquipmentID:{equipmentId}");
}
var currentEquipment = allEquipmentList.Find(x => x.ID == equipmentId);
if (currentEquipment == null)
{
return default;
}
#endregion
#region 获取综合模型绑定
Model.HealthMultiEvaluationModelBinding currentBinding = null;
var serviceModelBinding = new Service.HealthMultiEvaluationModelBinding();
allEquipmentList.Reverse();
foreach (var equipment in allEquipmentList)
{
currentBinding = serviceModelBinding.GetValidByEquipmentID(equipment.ID);
if (currentBinding != null)
{
break;
}
}
if (currentBinding == null)
{
return default;
}
#endregion
#region 获取所有综合模型
var serviceMultiModel = new Service.HealthMultiEvaluationModel();
var allMultiModelList = serviceMultiModel.GetChildAndSelfByID(currentBinding.ModelID);
if (allMultiModelList == null || allMultiModelList.Count < 1)
{
return default;
}
#endregion
#region 获取综合评价模型记录
var allMultiModelIds = allMultiModelList.Select(x => x.ID).Distinct().ToList();
var serviceMultiRecord = new Service.HealthMultiEvaluationRecord();
var allMultiRecordList = serviceMultiRecord.GetLastRecord(currentBinding.ID, allMultiModelIds);
if (allMultiRecordList == null || allMultiRecordList.Count < 1)
{
return default;
}
var currentRecord = allMultiRecordList.Find(x => x.EvaluateEquipmentID == equipmentId);
if (currentRecord == null)
{
return default;
}
var currentModel = allMultiModelList.Find(x => x.ID == currentRecord.ModelID);
if (currentModel == null)
{
return default;
}
#endregion
#region 获取当前设备对应的所有模型
allMultiModelList = serviceMultiModel.GetChildAndSelfByID(currentModel.ID);
if (allMultiModelList == null || allMultiModelList.Count < 1)
{
return default;
}
#endregion
#region 获取所有评价项
allMultiModelIds = allMultiModelList.Select(x => x.ID).Distinct().ToList();
var serviceMultiItem = new Service.HealthMultiEvaluationModelItem();
var allMultiItemList = serviceMultiItem.GetByModelIds(allMultiModelIds);
if (allMultiItemList == null)
{
allMultiItemList = new List();
}
#endregion
#region 获取所有评价项记录
var allItemIds = allMultiItemList.Select(x => x.ID).Distinct().ToList();
var serviceMultiItemRecord = new Service.HealthMultiItemEvaluationRecord();
var allItemRecordList = serviceMultiItemRecord.GetLastRecord(currentBinding.ID, allItemIds);
if (allItemRecordList == null)
{
allItemRecordList = new List();
}
#endregion
//记录树
var vmTree = new HealthMultiEvaluationTreeRecordLogicDto(currentModel, currentRecord, currentEquipment, resultList);
var serviceSignal = new Service.Signal();
var serviceMonitor = new Service.MonitorPoint();
var serviceQuotaModel = new Service.HealthQuotaEvaluationModel();
var vmTempList = new List();
allMultiModelList = allMultiModelList.Where(x => x.ParentIds.Contains(currentModel.ID)).ToList();
foreach (var multiModel in allMultiModelList)
{
var multiModelRecord = allMultiRecordList.Find(x => x.ModelID == multiModel.ID);
var equipment = serviceEquipment.GetByID(multiModelRecord.EvaluateEquipmentID);
var vm = new HealthMultiEvaluationTreeRecordLogicDto(multiModel, multiModelRecord, equipment, resultList);
var items = allMultiItemList.Where(x => x.ModelID == multiModel.ID).ToList();
if (items != null && items.Count > 0)
{
foreach (var item in items)
{
var itemRecord = allItemRecordList.Find(x => x.ItemID == item.ID);
var signal = serviceSignal.GetByID(itemRecord.EvaluateSignalID);
Model.MonitorPointExSignalList monitor = null;
if (signal != null)
{
monitor = serviceMonitor.GetExSignalListByID(signal.MonitorPointID);
}
var quotaModel = serviceQuotaModel.GetByID(itemRecord.EvaluateModelID);
var vmItem = new HealthMultiEvaluationTreeRecordLogicDto(item, itemRecord, signal, monitor, quotaModel, resultList);
vm.Children.Add(vmItem);
}
}
var vmParent = vmTempList.Find(x => x.Id == vm.ParentId);
if (vmParent == null)
{
if (vm.ParentId == vmTree.Id)
{
vmTree.Children.Add(vm);
}
}
else
{
vmParent.Children.Add(vm);
}
vmTempList.Add(vm);
}
return vmTree;
}
///
/// 获取评价树列表
///
[Route("GetEvaluateTreeRecord@V1.0")]
[HttpGet]
public HealthMultiEvaluationTreeRecordLogicDto GetEvaluateTreeRecord([FromQuery][Required] QueryHealthMultiEvaluationTreeRecordLogicInput input)
{
var bindingId = input.BindingID;
var modelId = input.ModelID;
var evaluateTime = input.EvaluateTime;
#region 获取评价状态
var resultList = new Service.HealthResult().GetAll();
if (resultList == null || resultList.Count < 1)
{
throw Oops.Oh(ErrorCodes.V001, "Result", "未配置评价状态");
}
#endregion
#region 获取所有评价记录
var serviceMultiRecord = new Service.HealthMultiEvaluationRecord();
var allMultiRecordList = serviceMultiRecord.GetByBindingIDOfTime(bindingId, evaluateTime);
if (allMultiRecordList == null || allMultiRecordList.Count < 1)
{
return default;
}
#endregion
#region 获取所有评价项记录
var serviceItemRecord = new Service.HealthMultiItemEvaluationRecord();
var allItemRecordList = new Service.HealthMultiItemEvaluationRecord().GetByBindingIDOfTime(bindingId, evaluateTime);
if (allItemRecordList == null)
{
allItemRecordList = new List();
}
#endregion
#region 获取所有模型
var serviceMultiModel = new Service.HealthMultiEvaluationModel();
var allModelList = serviceMultiModel.GetChildAndSelfByID(modelId);
if (allModelList == null || allModelList.Count < 1)
{
throw Oops.Oh(ErrorCodes.D001, $"ModelID:{modelId}");
}
var allModelIds = allModelList.Select(x => x.ID).Distinct().ToList();
#endregion
#region 获取所有评价项
var serviceMultiItem = new Service.HealthMultiEvaluationModelItem();
var allItemList = serviceMultiItem.GetByModelIds(allModelIds);
if (allItemList == null)
{
allItemList = new List();
}
#endregion
HealthMultiEvaluationTreeRecordLogicDto vm = null;
var tempList = new List();
var serviceEquipment = new Service.Equipment();
var serviceSignal = new Service.Signal();
var serviceMonitor = new Service.MonitorPoint();
var serviceQuotaModel = new Service.HealthQuotaEvaluationModel();
foreach (var model in allModelList)
{
var record = allMultiRecordList.Find(x => x.ModelID == model.ID);
if (record == null)
{
continue;
}
var equipment = serviceEquipment.GetByID(record.EvaluateEquipmentID);
var treeRecord = new HealthMultiEvaluationTreeRecordLogicDto(model, record, equipment, resultList);
var parentTreeRecord = tempList.Find(x => x.Id == treeRecord.ParentId);
if (parentTreeRecord == null)
{
if (model.ID == modelId)
{
vm = treeRecord;
}
}
else
{
parentTreeRecord.Children.Add(treeRecord);
}
tempList.Add(treeRecord);
var itemList = allItemList.Where(x => x.ModelID == model.ID).ToList();
foreach (var item in itemList)
{
var itemRecord = allItemRecordList.Find(x => x.ItemID == item.ID);
if (itemRecord == null)
{
continue;
}
Yw.Model.Signal signal = serviceSignal.GetByID(itemRecord.EvaluateSignalID);
Yw.Model.MonitorPointExSignalList monitor = null;
if (signal != null)
{
monitor = serviceMonitor.GetExSignalListByID(signal.MonitorPointID);
}
Model.HealthQuotaEvaluationModel quotaModel = serviceQuotaModel.GetByID(itemRecord.EvaluateModelID);
var vmItem = new HealthMultiEvaluationTreeRecordLogicDto(item, itemRecord, signal, monitor, quotaModel, resultList);
treeRecord.Children.Add(vmItem);
}
}
return vm;
}
}
}