123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 |
- /* ==============================================================================
- * 功能描述:通用的请求
- * 创 建 者:Garrett
- * 创建日期:2018/5/17 10:41:38
- * ==============================================================================*/
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- using Newtonsoft.Json.Linq;
- using SAGA.DotNetUtils;
- using SAGA.DotNetUtils.Extend;
- using SAGA.DotNetUtils.Http;
- using SAGA.MBI.Common;
- using SAGA.MBI.DataArrange;
- using SAGA.MBI.Tools;
- namespace SAGA.MBI.RequestData
- {
- /// <summary>
- /// CommonRequest
- /// </summary>
- public class CommonRequest
- {
- /// <summary>
- /// 根据localId来查询物理世界的对象
- /// ly,可能查询不到部件
- /// </summary>
- /// <returns></returns>
- public static string QueryObjectByLocalId(string floorId, string localId)
- {
- JObject localIdJObject = new JObject();
- localIdJObject.Add("EquipLocalID", new JArray(localId));
- return QueryObjectByInfos(floorId, localIdJObject, new[] { "Eq" });
- }
- /// <summary>
- /// 根据物理世界BIMId信息点来查询各物理实体
- /// </summary>
- /// <returns></returns>
- public static string QueryObjectByBIMID(string floorId, string bimId, string[] type = null)
- {
- JObject bimIdJObject = new JObject();
- bimIdJObject.Add("BIMID", new JArray(bimId));
- return QueryObjectByInfos(floorId, bimIdJObject, type);
- }
- /// <summary>
- /// 根据信息点来查询各物理实体,使用in操作
- /// 优点:连接查询,速度快,大概20ms,
- /// 缺点是:首次查询速度慢,大概6000ms,更新信息点值后,再次查询也相当于首次查询,大概6000ms
- /// </summary>
- /// <returns></returns>
- public static string QueryObjectByInfos2(string floorId, JObject infoJObject, string[] type = null)
- {
- string url = MBIConst.DataPlatformLocalHost + $"data-platform-3/fast/object/in_query?secret={MBIControl.ProjectCur.Password}&projectId={MBIControl.ProjectCur.Id}";
- if (type == null)
- {
- type = new string[] { "Eq", "Ec", "Si", "VOBc" };
- }
- infoJObject.Add("type", new JArray(type));
- if (type.FirstOrDefault(t => Regex.IsMatch(t, "VO.*")) != null)
- {
- //信标加BuildingId查不出来
- }
- else if (type.FirstOrDefault(t => new[] { "Eq", "Ec" }.Contains(t)) != null)
- {
- //设备需要加buildingId
- string buildingId = DalProjectTree.GetBuildingIdByFloor(floorId);
- infoJObject.Add("id", buildingId);
- }
- else
- {
- infoJObject.Add("id", floorId);
- }
- JObject updateJObject = new JObject();
- updateJObject.Add("criteria", infoJObject);
- updateJObject.Add("customInfo", true);
- //查询厂商库相关的信息点
- updateJObject.Add("venderInfo", true);
- string postData = updateJObject.ToString();
- RestClient client = new RestClient(url, HttpVerb.POST, postData);
- string request = client.PostRequest();
- return request;
- }
- /// <summary>
- /// 根据信息点来查询各物理实体,速度慢,
- /// 优点缺点:稳定,每次查询都是2000ms;
- /// </summary>
- /// <returns></returns>
- public static string QueryObjectByInfos(string floorId, JObject infosJObject, string[] type = null)
- {
- if (infosJObject.Count == 0) return "";
- string url = MBIConst.DataPlatformLocalHost + $"data-platform-3/object/query_by_info?secret={MBIControl.ProjectCur.Password}&projectId={MBIControl.ProjectCur.Id}";
- string buildingId = DalProjectTree.GetBuildingIdByFloor(floorId);
- JObject criteriaJObject = new JObject();
- criteriaJObject.Add("infos", ConvertInfoJObjectToJArray(infosJObject));
- //求并集
- criteriaJObject.Add("set", false);
- if (type != null)
- criteriaJObject.Add("type", new JArray(type));
- //信标加BuildingId查不出来
- if (buildingId.IsNotNullEmpty())
- criteriaJObject.Add("id", buildingId);
- JObject queryJObject = new JObject();
- queryJObject.Add("criteria", criteriaJObject);
- queryJObject.Add("customInfo", true);
- //查询厂商库相关的信息点
- queryJObject.Add("venderInfo", true);
- string postData = queryJObject.ToString();
- RestClient client = new RestClient(url, HttpVerb.POST, postData);
- string request = client.PostRequest();
- return request;
- }
- /// <summary>
- /// 根据BIMID中的楼层,下载楼层数据
- /// </summary>
- /// <returns></returns>
- public static string DownLoadFloorDataByBIMFloorInfo(string floorId, JArray jArray, string[] type = null)
- {
- string url = MBIConst.DataPlatformLocalHost + $"data-platform-3/object/query_by_info?secret={MBIControl.ProjectCur.Password}&projectId={MBIControl.ProjectCur.Id}";
-
- JObject criteriaJObject = new JObject();
- criteriaJObject.Add("infos", jArray);
- //求并集
- criteriaJObject.Add("set", false);
- if (type != null)
- criteriaJObject.Add("type", new JArray(type));
- //信标加BuildingId查不出来
- //if (buildingId.IsNotNullEmpty())
- // criteriaJObject.Add("id", buildingId);
- JObject queryJObject = new JObject();
- queryJObject.Add("criteria", criteriaJObject);
- queryJObject.Add("customInfo", true);
- //查询厂商库相关的信息点
- queryJObject.Add("venderInfo", true);
- string postData = queryJObject.ToString();
- RestClient client = new RestClient(url, HttpVerb.POST, postData);
- string request = client.PostRequest();
- return request;
- }
- /// <summary>
- /// 根据BIMID中的楼层,下载楼层数据
- /// </summary>
- /// <returns></returns>
- public static string DownLoadFloorDataByBIMFloorInfo(string floorId, string[] type = null)
- {
- JObject bimObjValue = new JObject();
- bimObjValue.Add("$gte", $"{floorId}:");
- bimObjValue.Add("$lte", $"{floorId}:a");
- JObject bimObjItem = new JObject();
- bimObjItem.Add("BIMID", bimObjValue);
- JArray infoArray = new JArray(bimObjItem);
- return DownLoadFloorDataByBIMFloorInfo(floorId, infoArray, type);
- }
- /// <summary>
- /// 由于in操作,按信息点查询,传入参数不同
- /// 将JObject转化为JArray
- /// </summary>
- /// <param name="infoJObject"></param>
- /// <returns></returns>
- private static JArray ConvertInfoJObjectToJArray(JObject infoJObject)
- {
- JArray jArray = new JArray();
- var property = infoJObject.Properties().FirstOrDefault();
- if (property != null)
- {
- string key = property.Name;
- JArray valueArray = (JArray)infoJObject[key];
- if (valueArray != null)
- {
- foreach (JToken token in valueArray)
- {
- var valueObject = new JObject();
- valueObject.Add(key, (string)token);
- jArray.Add(valueObject);
- }
- }
- }
- return jArray;
- }
- /// <summary>
- /// 查询楼层下的设备/部件/信标
- /// </summary>
- /// <returns></returns>
- public static string FloorQuery_GoodHand(string floorId, string[] type)
- {
- if (floorId.IsNullOrEmpty() || type.IsNullOrEmptyExt()) return String.Empty;
- string url = MBIConst.GoodHandLocalHost + $"relation/location/floor/query?secret={MBIControl.ProjectCur.Password}&projectId={MBIControl.ProjectCur.Id}";
- JObject bimObjItem = new JObject();
- bimObjItem.Add("floor_id", floorId);
- bimObjItem.Add("type", new JArray(type));
- string postData = bimObjItem.ToString();
- RestClient client = new RestClient(url, HttpVerb.POST, postData);
- string request = client.PostRequest();
- return request;
- }
- /// <summary>
- /// 缓存设备和部件数据
- /// </summary>
- /// <param name="buildingId"></param>
- /// <returns></returns>
- public static string CacheEqEc(string buildingId)
- {
- return SubsetQuery(buildingId, new JArray() { "Eq", "Ec" });
- }
- /// <summary>
- /// 缓存所有的Revit数据
- /// </summary>
- /// <param name="buildingId"></param>
- /// <returns></returns>
- public static string CacheAllData(string buildingId)
- {
- return SubsetQuery(buildingId, new JArray() { "Eq", "Ec", "Si" });
- }
- /// <summary>
- /// 查询某个object下指定类型的objects (查询项目下的所有类型, 建筑下的设备, 系统, 楼层, 空间. 查询楼层中的空间, 非关系表查询)
- /// </summary>
- /// <param name="id">id只能是project id, building id , floor id 或者 equipment id. 不填id或者null, 则默认是project id</param>
- /// <param name="typeArray">值可以是设备类型:"TDLS", 系统类型: "TD"或者 "Eq", "Sy", "Fl", "Sp", "Bd", "Pj".</param>
- /// <param name="customInfo">选填, 默认为false, true则会把自定义信息点查询出来. false不会查询到自定义信息点</param>
- /// <returns></returns>
- public static string SubsetQuery(string id, JArray typeArray, bool customInfo = false)
- {
- string url = MBIConst.DataPlatformLocalHost + $"data-platform-3/object/subset_query?secret={MBIControl.ProjectCur.Password}&projectId={MBIControl.ProjectCur.Id}";
- JObject criteriaObject = new JObject();
- criteriaObject.Add("id", id);
- criteriaObject.Add("type", typeArray);
- JObject idJObject = new JObject();
- idJObject.Add("criteria", criteriaObject);
- // 选填, 默认为false, true则会把自定义信息点查询出来. false不会查询到自定义信息点
- idJObject.Add("customInfo", customInfo);
- // 选填, 查询岗位时候显示关联资产的信息点, true是显示, false是不显示, 默认true
- idJObject.Add("linkInfos", true);
- //查询厂商库相关的信息点
- idJObject.Add("venderInfo", true);
- string postData = idJObject.ToString();
- RestClient client = new RestClient(url, HttpVerb.POST, postData);
- string request = client.PostRequest();
- return request;
- }
- /// <summary>
- /// 获取项目下指定类型的电气设备
- /// </summary>
- /// <returns></returns>
- public static string GetDistribution(JArray array)
- {
- string request = SubsetQuery(MBIControl.ProjectCur.Id, array, true);
- return request;
- }
- /// <summary>
- /// 由id查询岗位信息
- /// </summary>
- /// <param name="id"></param>
- /// <returns></returns>
- public static string QueryObjectById(string id)
- {
- string url = MBIConst.DataPlatformLocalHost + $"data-platform-3/object/batch_query?secret={MBIControl.ProjectCur.Password}&projectId={MBIControl.ProjectCur.Id}";
- JObject criteriaObject = new JObject();
- criteriaObject.Add("id", id);
- JArray array = new JArray();
- array.Add(criteriaObject);
- JObject idJObject = new JObject();
- idJObject.Add("criterias", array);
- idJObject.Add("customInfo", true);
- //查询厂商库相关的信息点
- idJObject.Add("venderInfo", true);
- string postData = idJObject.ToString();
- RestClient client = new RestClient(url, HttpVerb.POST, postData);
- string request = client.PostRequest();
- return request;
- }
- /// <summary>
- /// 查询某个建筑/项目内没有绑定某种图类型/图实例, 关系类型的指定类型
- /// </summary>
- /// <returns></returns>
- public static string QueryOutsideObject(string id, string graphId, string graphType, string relType, int side, string[] type)
- {
- string url = MBIConst.DataPlatformLocalHost + $"data-platform-3/object/outside_query?secret={MBIControl.ProjectCur.Password}&projectId={MBIControl.ProjectCur.Id}";
- JObject criteriaObject = new JObject();
- criteriaObject.Add("id", id);
- if (graphId.IsNotNullEmpty())
- criteriaObject.Add("graphId", graphId);
- criteriaObject.Add("graphType", graphType);
- criteriaObject.Add("relType", relType);
- criteriaObject.Add("side", side);
- criteriaObject.Add("type", new JArray(type));
- JObject idJObject = new JObject();
- idJObject.Add("criteria", criteriaObject);
- // 选填, 默认为false, true则会把自定义信息点查询出来. false不会查询到自定义信息点
- idJObject.Add("customInfo", true);
- //查询厂商库相关的信息点
- idJObject.Add("venderInfo", true);
- string postData = idJObject.ToString();
- RestClient client = new RestClient(url, HttpVerb.POST, postData);
- string request = client.PostRequest();
- return request;
- }
- /// <summary>
- /// 批量更新
- /// </summary>
- /// <param name="criterias"></param>
- /// <returns></returns>
- public static string BatchUpdate(JArray criterias)
- {
- string url = MBIConst.DataPlatformLocalHost + $"data-platform-3/object/batch_update?secret={MBIControl.ProjectCur.Password}&projectId={MBIControl.ProjectCur.Id}";
- JObject updateJObject = new JObject();
- updateJObject.Add("criterias", criterias);
- string postData = updateJObject.ToString();
- RestClient client = new RestClient(url, HttpVerb.POST, postData);
- string request = client.PostRequest();
- return request;
- }
-
- }
- }
|