using Learun.Application.Base.SystemModule;
using Learun.Application.TwoDevelopment.ZZDT_EC;
using Learun.Util;
using Learun.Util.SqlSugar;
using log4net.Config;
using Newtonsoft.Json;
using NPOI.POIFS.Properties;
using Pipelines.Sockets.Unofficial.Arenas;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using System.Web.Http.Description;
namespace Learun.Application.Web.AppApi
{
///
/// 分电箱、开关等(By YuXH)
///
[HandlerApiLogin(FilterMode.Enforce)]
[TokenAuthorize]
public class PDBApiController : WebApiControllerBase
{
#region 模块对象
private ec_CircuitBreakerBLL ec_CircuitBreakerBLL = new ec_CircuitBreakerBLL();
private ec_CircuitBreakerService serv = new ec_CircuitBreakerService();
#endregion
#region 开关相关
///
/// 查询某个分电箱下的所有开关
///
///
/// 分电箱的工程ID EngineerDataID
///
[HttpGet]
public IHttpActionResult GetBreakers(string projId, string PDBId)
{
var panelTb = ProjectSugar.TableName(projId);
var res2 = SqlSugarHelper.Db.Queryable().AS(panelTb).First(x => x.EngineerDataID == PDBId);
if (res2 == null)
{
return Success(null);
}
else
{
var res = ec_CircuitBreakerBLL.GetBreakersUnderPDB(projId, PDBId);
res2.Breakers = res;
var settings = new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
return Success(res2);
}
}
///
/// 批量保存(增、改)开关。传入集合。同时建立和rel。
/// 只会在开关箱界面里调用(新建)
///
///
/// 分电箱的工程ID
///
[HttpPost]
public IHttpActionResult SaveBreakers(string projId, string PDBId, [FromBody] List CBs)
{
try
{
ec_enginedata_relBLL ec_Enginedata_RelBLL = new ec_enginedata_relBLL();
var ec_RelTypeBll = new ec_reltypeBLL();
var asyncContent = Request.Content.ReadAsStringAsync().Result;
//var CBs = asyncContent.ToObject>();
//var RelType = ec_RelTypeBll.GetList("{\"ProjectId\":\"" + projId + "\", \"RelType\": \"" + (int)enum_RelType.开关_电缆 + "\"}").FirstOrDefault();
if (CBs == null)
{
return Success(null);
}
foreach (var CB in CBs)
{
var id = CB.EngineerDataID;
if (CB.CableIDs != null && CB.CableIDs.Count > 0)//目前就只考虑一个
{
CB.CableID = CB.CableIDs.First(); //string.Join(",", CB.CableIDs);
}
ec_CircuitBreakerBLL.SaveEntity(projId, ref id, CB, PDBId); //开关箱管理界面,创建
CB.EngineerDataID = id;
//if (CB.CableIDs != null)
//{
// ec_Enginedata_RelBLL.SaveEntitys(projId, RelType.RelTypeID, item.EngineerDataID, item.CableIDs); // 建立关系(开关 和 电缆)
//}
//感觉都不需要存。因为知道开关和设备的关系,设备和
}
//2024 04 11 改为 ec circuit breaker里的PDBID属性来存
//var NewIDs = entity.Select(x => x.EngineerDataID).ToList();
//RelType = null;
//RelType = ec_RelTypeBll.GetList("{\"ProjectId\":\"" + projId + "\", \"RelType\": \"" + (int)enum_RelType.分电箱_开关 + "\"}").FirstOrDefault();
//if (RelType != null)
//{
//ec_Enginedata_RelBLL.SaveEntitys(projId, RelType.RelTypeID, PDBId, NewIDs); // 建立关系(分电箱 和 开关)
//}
return Success(CBs);
}
catch (Exception e)
{
return Fail(e.Message);
}
}
///
/// 批量保存开关箱内部开关和电缆的关联关系(也属于的一部分)。
/// 设备和电缆的关联关系走的是RelApi下的那个SaveCableConn.
/// 开关箱管理界面里不用这个。绘制照明系统图会用到这个
///
///
/// 集合(CableID和EngineerDataID)
///
[HttpPost]
public IHttpActionResult SaveCableConn(string projId, [FromBody] IEnumerable Breakers)
{
try
{
if (Breakers == null) { return Success("OK"); }
var tb_Break = ProjectSugar.TableName(projId);
var tb_Enginee = ProjectSugar.TableName(projId);
foreach (var objFromHttp in Breakers)
{
var id = objFromHttp.EngineerDataID;
var CB = SqlSugarHelper.Db.Queryable().AS(tb_Break).First(x => x.EngineerDataID == id);//已有的
if (CB != null)
{
if (!string.IsNullOrEmpty(objFromHttp.CableName))//目前就只考虑一个
{
var cable = SqlSugarHelper.Db.Queryable().AS(tb_Enginee).First(x => x.TagNumber == objFromHttp.CableName);//已有的
if (cable != null)
{
CB.CableID = cable.EngineDataID;
ec_CircuitBreakerBLL.SaveEntity(projId, ref id, CB, CB.PDBId); //保存开关本身
}
}
}
}
return Success("OK");
}
catch (Exception e)
{
return Fail(e.Message);
}
}
///
/// 删除开关
///
///
/// 删除多个
///
[HttpPost]
public IHttpActionResult Delete(string projId, string RelTypeId, string PDBId, string BreakerIDs)
{
try
{
var IDs = BreakerIDs.Split(',');
ec_enginedata_relBLL ec_Enginedata_RelBLL = new ec_enginedata_relBLL();
foreach (var Id in IDs)
{
ec_CircuitBreakerBLL.DeleteEntity(projId, Id);
//ec_Enginedata_RelBLL.DeleteEntity(projId, RelTypeId, PDBId, BreakerIDs); 关联关系直接在CB里,不通过rel这个表存储
}
return Success("OK");
}
catch (Exception e)
{
return Fail(e.Message);
}
}
#endregion
}
}