using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using IStation.Model.Api;
using IStation.ViewModel;
using AutoMapper;
using System.Text;
namespace IStation.WebApi.Controllers
{
///
/// 大屏单站点(Bimface 本地加载(松花江用))
///
[RoutePrefix("Demo/StationBimShj")]
public class Demo_StationBimShjController : ApiController
{
private class RecordBase1
{
public string RecordTime { get; set; }
public double RecordValue { get; set; }
}
private class RecordBase1ExSignalID : RecordBase1
{
public long SignalID { get; set; }
}
///
/// 获取泵站主页信息
///
/// 泵站ID
///
[Route("GetInitalInfo")]
[HttpGet]
public Result GetInitalInfo (long StationID)
{
StationID = 14;
string CacheKey = "LargeScreen.Demo.StationBimShj" + StationID;//缓存,就不能加载用户自定义的图层等信息,以后需要用异步加载
object objModel = System.Runtime.Caching.MemoryCache.Default.Get(CacheKey);
if (objModel != null)
{
Dictionary dict2 = (Dictionary)objModel;
return new Result_Object(dict2);
}
var stationBase = IStation.Service.StationBase.GetByStationID(StationID);
if (stationBase == null)
{
return new Result(IStation.Model.Api.Code.Error, "未找到对应泵站");
}
Dictionary dict = new Dictionary();
//搜索BIM
//IStation.Service.BimFileMapperView bllBim = new IStation.Service.BimFileMapperView();
//var bimFileList = IStation.Service.BimFileMapperView.GetDetailByStationID(StationID);
//IStation.Model.BimFileMapperViewDetail defaultBimFile = null;
//if (bimFileList != null && bimFileList.Count > 0)
//{
// defaultBimFile = bimFileList.FirstOrDefault();
//}
//else
{
return new Result(IStation.Model.Api.Code.Alert, "未定义BIM模型") ;
}
//BIM映射ID
dict["BimFileMapperID"] = defaultBimFile.ID;
//摄像头
dict["Cameras"] = IStation.Service.CameraBase.GetAll();
//BIM
dict["BimfaceFileID"] = defaultBimFile.BimfaceID;
//与GetInitalInfo4Remote区别就是这里没有获取
//var token = IStation.BIM.BimFaceHelper.GetFileToken(defaultBimFile.BimfaceID.ToString());
//if (token != null)
//{
// dict["BimfaceViewToken"] = token.Token;
//}
List listComponentMapping = null;//产品映射
#region BIM设置
//
IStation.Model.BimFileMapperSettings mapSettings = defaultBimFile.Settings;
IStation.Model.BimFileSettings fileSettings = defaultBimFile.FileSettings;
if (mapSettings != null)
listComponentMapping = mapSettings.ComponentMappers;
//var bimEmployeeSet = IStation.Service.BimEmployeeSet.GetByEmployeeAndMapperID(EmployeeID, defaultBimFile.ID);
//IStation.Model.BimEmployeeSettings employeeSettings = bimEmployeeSet == null ? null : bimEmployeeSet.Settings;
List bimLayers = new List();
//List bimCameras = new List();
List bimBimWalkThrough = new List();
if (fileSettings != null)
{
#region 图层
var allCustomComponentsLayers = fileSettings.CustomComponentsLayers;
if (allCustomComponentsLayers != null && allCustomComponentsLayers.Count > 0)
{
foreach (var layer in allCustomComponentsLayers)
{
IStation.ViewModel.CommonBimLayer bimLayer = new IStation.ViewModel.CommonBimLayer();
if (layer.ComponentIds == null || layer.ComponentIds.Count() == 0)
continue;
bimLayer.Name = layer.Name;
bimLayer.ID = layer.ID;
bimLayer.ComponentIds = layer.ComponentIds;
bimLayer.Type = 0;//表示 系统添加
bimLayer.IsDisp = true;
bimLayers.Add(bimLayer);
}
}
#endregion
#region 视图
//var viewBimCameras = fileSettings.CustomCameraStatus_3Ds;
//if (viewBimCameras != null && viewBimCameras.Count > 0)
//{
// foreach (var m in viewBimCameras)
// bimCameras.Add(new ViewModel.BimCamera(m));
//}
#endregion
#region 路径漫游
var customWalkThroughs = fileSettings.CustomWalkThroughs;
if (customWalkThroughs != null && customWalkThroughs.Count > 0)
{
foreach (var m in customWalkThroughs)
bimBimWalkThrough.Add(new IStation.ViewModel.BimWalkThrough(m));
}
#endregion
}
#region 暂时不要自定义的视图
//if (employeeSettings != null)
//{
// //
// //var allEmployeeComponentsLayers = employeeSettings.CustomComponentsLayers;
// //if (allEmployeeComponentsLayers != null)
// //{
// // foreach (var layer in allEmployeeComponentsLayers)
// // {
// // IStation.ViewModel.BimLayer bimLayer = new ViewModel.BimLayer();
// // if (layer.ComponentIds == null || layer.ComponentIds.Count() == 0)
// // continue;
// // bimLayer.Name = layer.Name;
// // bimLayer.ID = layer.ID;
// // bimLayer.ComponentIds = layer.ComponentIds;
// // bimLayer.Type = 1;//表示 员工添加
// // bimLayers.Add(bimLayer);
// // }
// //}
//}
#endregion
//
dict["LayerSettingGeneral"] = bimLayers;
if (fileSettings != null)
dict["FileSettingCamera"] = fileSettings.CustomCameraStatus_3Ds;
dict["FileSettingWalkThrough"] = bimBimWalkThrough;
//建筑物外墙
var layer_components_建筑物 = new List() {"1345184", "1345372", "1345386", "1345400", "1345416", "1345430", "1345444", "1345458", "1345472", "1345490",
"1345549", "1345547", "1345545", "1345543", "1345541", "1345539", "1345537", "1345535", "1515102", "1516086", "1391996",
"1391995", "1391994", "1391993", "1391992", "1391991", "1391989", "1391649", "1391896", "1391903", "1391910", "1391917", "1391924", "1391931" };
IStation.ViewModel.SpecBimLayer bimLayer建筑物外墙 = new IStation.ViewModel.SpecBimLayer();
bimLayer建筑物外墙.IsDisp = true;
bimLayer建筑物外墙.ComponentIds = layer_components_建筑物;
dict["LayerSetting4Build"] = bimLayer建筑物外墙;
//if (fileSettings != null && fileSettings.CustomComponentsDivs string.IsNullOrEmpty(defaultBimFile.ViewSettingData))
//{
// IStation.Entity.BimFileMapping.ViewSettings bimViewSettings = null;
// bimViewSettings = IStation.Entity.BimFileMapping.ViewSettings.ToObject(defaultBimFile.ViewSettingData);
// dict["BimViewSettings"] = bimViewSettings;
//}
#endregion
#region 监控面板
//
var allProducts = IStation.Service.ProductBase.GetByStationID(StationID);
if (allProducts != null && mapSettings != null)
{
List allMinitorPanel = new List();
List listMonitorPanelLayer = mapSettings.MonitorPanelLayers;
if (listMonitorPanelLayer != null)
{
//List signalIDs = new List();
foreach (var signalLoc in listMonitorPanelLayer)
{
foreach (var monitorPanel in signalLoc.MonitorPanels)
{
if (monitorPanel.LocationType == IStation.Model.BimMonitorPanel.eLocationType.机泵)
{
#region 机泵
IStation.ViewModel.BimTipPanel panel_minitor_view = new IStation.ViewModel.BimTipPanel();
panel_minitor_view.ProductID = monitorPanel.LocationObjectID;
panel_minitor_view.Name = monitorPanel.Name;
//(from x in allProducts where x.ID == monitorPanel.LocationObjectID select x.Name).FirstOrDefault();
panel_minitor_view.Posi = new IStation.ViewModel.BimPosi() { x = monitorPanel.WorldPostion.x, y = monitorPanel.WorldPostion.y, z = monitorPanel.WorldPostion.z };
panel_minitor_view.IsDispSignal = monitorPanel.ValuesVisible;
if (monitorPanel.ValuesVisible)
{
panel_minitor_view.RunStatus = 1;
panel_minitor_view.SignalList = new List();
foreach (var measure_point_id in monitorPanel.MeasurePointIds)
{
var signal = IStation.Service.SignalInfoHelper.GetDefaultByPointID(measure_point_id);
if (signal == null)
continue;
panel_minitor_view.SignalList.Add(new IStation.ViewModel.RecordBase(signal));
}
}
allMinitorPanel.Add(panel_minitor_view);
#endregion
}
else if (monitorPanel.LocationType == IStation.Model.BimMonitorPanel.eLocationType.总管)
{
#region 总管
IStation.ViewModel.BimTipPanel panel_minitor_view = new IStation.ViewModel.BimTipPanel();
panel_minitor_view.ProductID = monitorPanel.LocationObjectID;
panel_minitor_view.Name = monitorPanel.Name;
//(from x in allProducts where x.ID == monitorPanel.LocationObjectID select x.Name).FirstOrDefault();
panel_minitor_view.Posi = new IStation.ViewModel.BimPosi() { x = monitorPanel.WorldPostion.x, y = monitorPanel.WorldPostion.y, z = monitorPanel.WorldPostion.z };
panel_minitor_view.IsDispSignal = monitorPanel.ValuesVisible;
if (monitorPanel.ValuesVisible)
{
panel_minitor_view.RunStatus = 1;
panel_minitor_view.SignalList = new List();
foreach (var measure_point_id in monitorPanel.MeasurePointIds)
{
var signal = IStation.Service.SignalInfoHelper.GetDefaultByPointID(measure_point_id);
if (signal == null)
continue;
panel_minitor_view.SignalList.Add(new IStation.ViewModel.RecordBase(signal));
}
}
allMinitorPanel.Add(panel_minitor_view);
#endregion
}
}
}
//为了页面加载数据,初始化时不读取数据
//var records = IStation.SignalRecordHelper.GetLastRecordBySignalID(signalIDs, 120);
//if(records != null)
//{
// foreach(var panel in allMinitorPanel)
// {
// foreach(var s in panel.SignalList)
// {
// var r = (from x in records where x.SignalID == s.ID orderby x.RecordTime select x).LastOrDefault();
// if(r != null)
// {
// s.RecordValue = r.RecordValue.ToString();
// s.ReocrdTime = r.RecordTime;
// panel.RunStatus = 1;
// }
// }
// }
//}
}
dict["MinitorPanel"] = allMinitorPanel;
}
#endregion
#region 模型树
int pump_number = 0;
if (allProducts != null)
{
List productTreeList = new List();
IStation.ViewModel.BimMenuTreeNodeGrp grp泵站 = new BimMenuTreeNodeGrp();
grp泵站.NodeID = string.Format("S{0}", IStation.ObjectType.Station_泵站);
grp泵站.Name = "泵站";
grp泵站.ObjectType = IStation.ObjectType.Station_泵站;
grp泵站.Nodes = new List();
IStation.ViewModel.BimMenuTreeNode tree_node_station = new IStation.ViewModel.BimMenuTreeNode();
tree_node_station.NodeID = string.Format("S{0}child", StationID);
tree_node_station.Name = stationBase.Name;
tree_node_station.ObjectID = StationID;
tree_node_station.ObjectType = IStation.ObjectType.Station_泵站;
var all_station_signals = IStation.Service.SignalInfoHelper.GetOnlyByStationID(StationID);
if (all_station_signals != null && all_station_signals.Count > 0)
{
List vm_SignalList = new List();
foreach (var s in all_station_signals)
{
IStation.ViewModel.RecordBase v = new IStation.ViewModel.RecordBase(s);
vm_SignalList.Add(v);
}
tree_node_station.SignalList = vm_SignalList;
}
grp泵站.Nodes.Add(tree_node_station);
productTreeList.Add(grp泵站);
//
IStation.ViewModel.BimMenuTreeNodeGrp grp机组 = new BimMenuTreeNodeGrp();
grp机组.NodeID = string.Format("M{0}", IStation.ObjectType.Machine_机泵);
grp机组.Name = "机泵";
grp机组.ObjectType = IStation.ObjectType.Machine_机泵;
grp机组.Nodes = new List();
var pumpRunInfos = new Service.PumpRunInfoLog().GetByPumpSystemID((from x in allProducts select x.ID));
if (pumpRunInfos == null)
pumpRunInfos = new List();
foreach (var product in allProducts)
{
//if (product.SubType == IStation.ObjectType.Equipment_泵)
//{
// continue;
//}
//else if (product.SubType == IStation.ObjectType.Equipment_电机)
//{
// continue;
//}
//else if (product.SubType == IStation.ObjectType.Machine_机泵组)
//{
// continue;
//}
if (product.SubType != IStation.ObjectType.Machine_机泵)
{//暂时只有机泵
continue;
}
pump_number++;
IStation.ViewModel.BimMenuTreeNode tree_node_product = new IStation.ViewModel.BimMenuTreeNode();
tree_node_product.NodeID = string.Format("P{0}", product.ID);
tree_node_product.Name = product.Name;
tree_node_product.ObjectID = product.ID;
tree_node_product.ObjectType = product.SubType;
if (listComponentMapping != null)
{
tree_node_product.BimID = (from x in listComponentMapping where x.BelongType == IStation.ObjectType.Product_资产 && x.BelongID == product.ID select x.ComponentID).FirstOrDefault();
}
var pumpRunInfo = (from x in pumpRunInfos where x.ObjectID == product.ID select x).FirstOrDefault();
if (pumpRunInfo != null)
{
tree_node_product.RunStatus = (int)pumpRunInfo.RunStatus;
}
List productids = new List();
productids.Add(product.ID);
var childProducts = IStation.Service.ProductBase.GetAllChildByProductID(product.ID);
if (childProducts != null && childProducts.Count() > 0)
{
productids.AddRange(from x in childProducts select x.ID);
}
var all_product_signals = IStation.Service.SignalInfoHelper.GetOnlyByProductID(productids);
if (all_product_signals != null && all_product_signals.Count > 0)
{
List vm_SignalList = new List();
foreach (var s in all_product_signals)
{
IStation.ViewModel.RecordBase v = new IStation.ViewModel.RecordBase(s);
vm_SignalList.Add(v);
}
tree_node_product.SignalList = vm_SignalList;
}
grp机组.Nodes.Add(tree_node_product);
}
productTreeList.Add(grp机组);
dict["ProductTree"] = productTreeList;
}
#endregion
//基本信息
double longitude = 0, latitude = 0;
var pointInfo = Model.Map.PointInfo.ToModel(stationBase.MapPosition);
if (pointInfo != null)
{
longitude = pointInfo.Longitude;
latitude = pointInfo.Latitude;
}
dict["BaseInfo"] = new { ID = StationID, Name = stationBase.Name, Address = stationBase.Address, Longitude = longitude, Latitude = latitude, PumpNumber = pump_number };
System.Runtime.Caching.MemoryCache.Default.Set(CacheKey, dict, DateTimeOffset.Now.AddMinutes(2.3));
return new Result_Model>(dict) ;
}
///
/// 获取产品属性信息
///
/// 产品ID
/// 是否包含基础信息
///
[Route("GetProductPropList")]
[HttpGet]
public Result GetProductPropList(long ProductID, bool IsIncludeBaseInfo)
{
var equipment = IStation.Service.ProductBase.GetByProductID(ProductID);
if (equipment == null)
{
return new Result(IStation.Model.Api.Code.Error, "未检索到设备");
}
string manufacturerName = "";
if (equipment.ManufacturerID > 0)
{
manufacturerName = IStation.Service.Manufacture.GetManufactureNameByID(equipment.ManufacturerID);
}
Dictionary dict = new Dictionary();
var ThumbRealImage = "";
if (!string.IsNullOrEmpty(equipment.RealImage))
{
string[] temp = equipment.RealImage.Split('.');
string ext = "." + temp[temp.Length - 1].ToLower();
ThumbRealImage = equipment.RealImage.Replace(ext, "_th" + ext);
}
List listProp = new List();
if (IsIncludeBaseInfo)
{
listProp.Add(new IStation.ViewModel.ProductProp() { ID = 0, GroupName = "基本信息", PropName = "ID", PropValue = equipment.ID.ToString() });
listProp.Add(new IStation.ViewModel.ProductProp() { ID = 0, GroupName = "基本信息", PropName = "名称", PropValue = equipment.Name });
listProp.Add(new IStation.ViewModel.ProductProp() { ID = 0, GroupName = "基本信息", PropName = "编号", PropValue = equipment.NO });
listProp.Add(new IStation.ViewModel.ProductProp() { ID = 0, GroupName = "基本信息", PropName = "型号", PropValue = equipment.Code });
listProp.Add(new IStation.ViewModel.ProductProp() { ID = 0, GroupName = "基本信息", PropName = "规格", PropValue = equipment.Specification });
listProp.Add(new IStation.ViewModel.ProductProp() { ID = 0, GroupName = "基本信息", PropName = "材质", PropValue = equipment.Material });
listProp.Add(new IStation.ViewModel.ProductProp() { ID = 0, GroupName = "基本信息", PropName = "厂商名称", PropValue = manufacturerName });
listProp.Add(new IStation.ViewModel.ProductProp() { ID = 0, GroupName = "基本信息", PropName = "出厂编号", PropValue = equipment.ManufacturerNO });
listProp.Add(new IStation.ViewModel.ProductProp() { ID = 0, GroupName = "基本信息", PropName = "出厂日期", PropValue = equipment.ManufacturerDay });
listProp.Add(new IStation.ViewModel.ProductProp() { ID = 0, GroupName = "基本信息", PropName = "合同编号", PropValue = equipment.ContractNO });
listProp.Add(new IStation.ViewModel.ProductProp() { ID = -1, GroupName = "基本信息", PropName = "ThumbRealImage", PropValue = ThumbRealImage });
listProp.Add(new IStation.ViewModel.ProductProp() { ID = -1, GroupName = "基本信息", PropName = "RealImage", PropValue = equipment.RealImage });
}
//机泵下的电机和泵额定参数
IStation.Model.RatedParas.Pump ratedParas泵 = null;
IStation.Model.RatedParas.Motor ratedParas电机 = null;
if (equipment.SubType == IStation.ObjectType.Machine_机泵)
{
var childs = IStation.Service.ProductBase.GetAllChildByProductID(equipment.ID);
if (childs != null && childs.Count > 1)
{
var pump = childs.Find(x => x.SubType == IStation.ObjectType.Equipment_泵);
if (pump != null && !string.IsNullOrEmpty(pump.RatedParas))
ratedParas泵 = Model.RatedParas.Pump.ToModel(pump.RatedParas);
var motor = childs.Find(x => x.SubType == IStation.ObjectType.Equipment_电机);
if (motor != null && !string.IsNullOrEmpty(motor.RatedParas))
ratedParas电机 = Model.RatedParas.Motor.ToModel(motor.RatedParas);
}
}
if (equipment.SubType == IStation.ObjectType.Equipment_泵 && !string.IsNullOrEmpty(equipment.RatedParas))
{
ratedParas泵 = Model.RatedParas.Pump.ToModel(equipment.RatedParas);
}
if (equipment.SubType == IStation.ObjectType.Equipment_电机 && !string.IsNullOrEmpty(equipment.RatedParas))
{
ratedParas电机 = Model.RatedParas.Motor.ToModel(equipment.RatedParas);
}
if (ratedParas泵 != null)
{
if (ratedParas泵.Q > 0)
listProp.Add(new IStation.ViewModel.ProductProp() { ID = 0, GroupName = "额定参数", PropName = "额定流量", PropValue = ratedParas泵.Q.ToString() });
if (ratedParas泵.H > 0)
listProp.Add(new IStation.ViewModel.ProductProp() { ID = 0, GroupName = "额定参数", PropName = "额定扬程", PropValue = ratedParas泵.H.ToString() });
if (ratedParas泵.NPSHr > 0)
listProp.Add(new IStation.ViewModel.ProductProp() { ID = 0, GroupName = "额定参数", PropName = "额定汽蚀", PropValue = ratedParas泵.NPSHr.ToString() });
}
if (ratedParas电机 != null)
{
if (ratedParas电机.P > 0)
listProp.Add(new IStation.ViewModel.ProductProp() { ID = 0, GroupName = "额定参数", PropName = "电机功率", PropValue = ratedParas电机.P.ToString() });
if (ratedParas电机.N > 0)
listProp.Add(new IStation.ViewModel.ProductProp() { ID = 0, GroupName = "额定参数", PropName = "电机转速", PropValue = ratedParas电机.N.ToString() });
if (ratedParas电机.I > 0)
listProp.Add(new IStation.ViewModel.ProductProp() { ID = 0, GroupName = "额定参数", PropName = "额定电流", PropValue = ratedParas电机.I.ToString() });
}
//附加属性
var otherProViews = IStation.Service.ProductTypePropView.GetByProductTypeID(equipment.ProductTypeID);
if (otherProViews != null && otherProViews.Count > 0)
{
var dic = new Eventech.Model.LongAndStringDict1(equipment.PropsParas);
foreach (var prop in otherProViews)
{
listProp.Add(new IStation.ViewModel.ProductProp
{
ID = prop.ID,
PropName = prop.PropName,
GroupName = prop.GroupName,
PropValue = dic.ContainsKey(prop.ID) ? dic[prop.ID] : prop.DefaultValue
});
}
}
return new Result_Model>(listProp);
}
///
/// 获取产品属性信息
///
/// 产品ID
/// 是否包含基础信息
///
[Route("GetSignalListByProductID")]
[HttpGet]
public Result GetSignalListByProductID(long ProductID,bool InIncludeChild)
{
List productids = new List();
productids.Add(ProductID);
List signals = null;
if (InIncludeChild)
{
var childProducts = IStation.Service.ProductBase.GetAllChildByProductID(ProductID);
if (childProducts != null && childProducts.Count() > 0)
{
productids.AddRange(from x in childProducts select x.ID);
}
signals = IStation.Service.SignalInfoHelper.GetOnlyByProductID(productids);
}
else
{
signals = IStation.Service.SignalInfoHelper.GetOnlyByProductID(productids);
}
//
if (signals == null || signals.Count() == 0)
{
return new Result(IStation.Model.Api.Code.Error, "未配置监控");
}
List vm_SignalList = new List();
foreach (var s in signals)
{
IStation.ViewModel.RecordBase v = new IStation.ViewModel.RecordBase(s);
vm_SignalList.Add(v);
}
return new Result_Model>(vm_SignalList);
}
#region 多个SignalID的最近记录
///
/// 多个SignalID的最近记录
///
/// 信号ID
/// 最近多少秒
///
[Route("GetMultiSignalLastRecord")]
[HttpGet]
public Result GetMultiSignalLastRecord( string SignalID, int Second)
{
string[] SignalIDs1 = SignalID.Split(',');
if (SignalIDs1 == null || SignalIDs1.Count() == 0)
{
return new Result(IStation.Model.Api.Code.Error, "没有输入 SignalID 参数");
}
List SignalIDs2 = new List();
foreach (var id in SignalIDs1)
{
if (!string.IsNullOrEmpty(id))
SignalIDs2.Add(Convert.ToInt64(id));
}
var signal_array = IStation.Service.SignalInfoHelper.GetBySignalID(SignalIDs2);
if (Second < 1)
Second = 600;
//if (!string.IsNullOrEmpty(request["Second"]))
//{
// Second = Convert.ToInt32(request["Second"]);
//}
var vm_list = new List();
var records = new Service.Signal().GetLastGeneralRecord(signal_array.Select(x=>x.MeasurePointID));
// IStation.LogHelper.Info("StoreObjectID:" + String.Join(",", (from x in signal_array select x.StoreObjectID)));
if (records == null || records.Count() == 0)
{
return new Result_Model>(vm_list);
}
foreach (var r in records)
{
var signal = (from x in signal_array where x.MeasurePointID == r.ObjectId select x).FirstOrDefault();
if (signal == null)
continue;
RecordBase1ExSignalID vm = new RecordBase1ExSignalID();
vm.SignalID = signal.SignalID;
vm.RecordTime = r.DataTime.ToString("yyyy-MM-dd HH:mm:ss");
vm.RecordValue = GetDispValue(signal, r.DataValue);
if (Second > 0)
{
if ((DateTime.Now - r.DataTime).TotalSeconds < Second)
{
vm_list.Add(vm);
}
}
else
{
vm_list.Add(vm);
}
}
return new Result_Model>(vm_list);
}
private static double GetDispValue(IStation.Model.GeneralMonitorPointView signal, double minitorDataValue)
{
//// Math.Round(record.DataValue, signal.DecimalPlaces);
return Math.Round(minitorDataValue, 4);
}
#endregion
}
}