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; } } }