2025-08-13 11:14:39 +08:00
using DocumentFormat.OpenXml.Drawing.Spreadsheet ;
using DocumentFormat.OpenXml.Office2010.Excel ;
using DocumentFormat.OpenXml.Spreadsheet ;
using Learun.Application.TwoDevelopment.ZZDT_EC ;
using Learun.Util ;
using Learun.Util.SqlSugar ;
using NPOI.XWPF.UserModel ;
using SqlSugar.DistributedSystem.Snowflake ;
using System ;
using System.Collections.Generic ;
using System.Diagnostics ;
using System.Globalization ;
using System.IO ;
using System.Linq ;
using System.Text.RegularExpressions ;
using System.Threading.Tasks ;
using System.Web.Http ;
using System.Web.Http.Description ;
using static Learun . Application . TwoDevelopment . ZZDT_EC . ec_enginedataBLL ;
using ec_projectEntity = Learun . Application . TwoDevelopment . ZZDT_EC . ec_projectEntity ;
namespace Learun.Application.Web.AppApi
{
/// <summary>
/// 工程数据
/// </summary>
[RoutePrefix("api/EnginedataApi")]
[HandlerApiLogin(FilterMode.Enforce)]
[TokenAuthorize]
public class EnginedataApiController : WebApiControllerBase
{
/// <summary>
/// 更新工程数据属性默认值
/// </summary>
/// <returns></returns>
[HttpPost]
public IHttpActionResult UpdateEnginedataPropertyByDefaultValue ( )
{
try
{
new ec_enginedataBLL ( ) . UpdateEngineDataByDefaultValue ( ) ;
return Success ( "更新成功" ) ;
}
catch ( Exception ex )
{
return Fail ( ex . Message ) ;
}
}
/// <summary>
/// 获取位号的pixel对象( 仅有位号) .
/// 插件端的设计浏览处用到
/// </summary>
/// <param name="projectId">项目ID</param>
/// <param name="EngineDataID">对象类型ID</param>
/// <returns></returns>
[HttpGet]
[ResponseType(typeof(TreeModelLite))]
public IHttpActionResult GetTagPixelsById ( string projectId , string EngineDataID )
{
try
{
List < TreeModelLite > res = new List < TreeModelLite > ( ) ;
var ec_enginedata_pixelBLL = new ec_enginedata_pixelBLL ( ) ;
2025-09-15 20:28:38 +08:00
var data = ec_enginedata_pixelBLL . GetList ( "{\"ProjectId\":\"" + projectId + "\",\"EngineDataID\":\"" + EngineDataID + "\"}" , projectId ) ;
2025-08-13 11:14:39 +08:00
return Success ( data ) ;
}
catch ( Exception ex )
{
return Fail ( ex . Message ) ;
}
}
/// <summary>
/// 查询一个系统内的所有设备的所有电缆连接关系,用于如系统图的绘制
/// </summary>
/// <param name="projectId"></param>
/// <param name="systemName">所属系统的名字</param>
/// <param name="breakerType">开关类型</param>
/// <param name="StyleType">需要绘制的图纸风格, 0( 电力一次) , 1( 驾控台) , 2( 集控台) </param>
/// <returns></returns>
[HttpPost]
public async Task < IHttpActionResult > GetTagCableConnsBySystemAsync ( string projectId , string systemName , string breakerType , string StyleType , [ FromBody ] string DwgIDs )
{
var res = new List < ec_enginedataEquipBrief > ( ) ;
if ( DwgIDs = = null )
{
return Success ( null ) ;
}
var relBll = new ec_enginedata_relBLL ( ) ;
switch ( StyleType )
{
case "0" :
break ;
case "1" :
breakerType = "" ;
break ;
case "2" :
breakerType = "" ;
break ;
default :
break ;
}
res = await relBll . GetTagCableConnsBySystem ( projectId , systemName , breakerType , DwgIDs ) ;
return Success ( res ) ;
}
/// <summary>
/// 查询一个“设备单元”内的所有设备的所有电缆连接关系,用于如系统图的绘制
/// </summary>
/// <param name="projectId"></param>
/// <param name="unitName">设备单元 wcc ecc</param>
/// <param name="breakerType">开关类型</param>
/// <param name="StyleType">需要绘制的图纸风格, 0( 电力一次) , 1( 驾控台) , 2( 集控台) </param>
/// <returns></returns>
[HttpPost]
public async Task < IHttpActionResult > GetTagCableConnsByUnitAsync ( string projectId , string unitName , string breakerType , string StyleType , [ FromBody ] string DwgIDs )
{
var res = new List < ec_enginedataEquipBrief > ( ) ;
var relBll = new ec_enginedata_relBLL ( ) ;
unitName = WebHelper . UrlDecode ( unitName ) ;
Stopwatch stopwatch = Stopwatch . StartNew ( ) ;
stopwatch . Start ( ) ;
switch ( StyleType )
{
case "0" :
break ;
case "1" :
breakerType = "" ;
break ;
case "2" :
breakerType = "" ;
break ;
default :
break ;
}
res = await relBll . GetTagCableConnsByUnit ( projectId , unitName , breakerType , DwgIDs ) ;
stopwatch . Stop ( ) ;
var time = stopwatch . ElapsedMilliseconds . ToString ( ) ;
return Success ( res ) ;
}
/// <summary>
/// 查询多个设备上的所有电缆连接关系,用于如系统图的绘制
/// </summary>
/// <param name="projectId"></param>
/// <param name="breakerType">开关类型</param>
/// <param name="StyleType">需要绘制的图纸风格, 0( 电力一次) , 1( 驾控台) , 2( 集控台) </param>
/// <returns></returns>
[HttpPost]
public async Task < IHttpActionResult > GetTagCableConnsByIdsAsync ( string projectId , string breakerType , string StyleType , [ FromBody ] List < string > Ids )
{
// var asyncContent = Request.Content.ReadAsStringAsync().Result;
// List<string> body = asyncContent.ToObject<List<string>>();
string Enginedataids = Ids [ 0 ] ;
var DwgIds = Ids [ 1 ] ;
var res = new List < ec_enginedataEquipBrief > ( ) ;
var relBll = new ec_enginedata_relBLL ( ) ;
var propTbName = ProjectSugar . TableName < ec_enginedata_propertyEntity > ( projectId ) ;
var TbName = ProjectSugar . TableName < ec_enginedataEntity > ( projectId ) ;
var allTag = SqlSugarHelper . Db . Queryable < ec_enginedataEntity > ( ) . AS ( TbName ) . ToList ( ) ;
var RefCBs = SqlSugarHelper . Db . Queryable < ec_RefCircuitBreakerEntity > ( ) .
Where ( x = > x . breakerType = = "MCCB" ) .
OrderBy ( x = > x . Capacity_Max ) . ToList ( ) ;
var cbTbName = ProjectSugar . TableName < ec_CircuitBreakerEntity > ( projectId ) ;
var allCBs = SqlSugarHelper . Db . Queryable < ec_CircuitBreakerEntity > ( ) . AS ( cbTbName ) . ToList ( ) ;
var relTbName = ProjectSugar . TableName < ec_enginedata_relEntity > ( projectId ) ;
var allRels = SqlSugarHelper . Db . Queryable < ec_enginedata_relEntity > ( ) . AS ( relTbName ) . ToList ( ) ;
var pixelTbName = ProjectSugar . TableName < ec_enginedata_pixelEntity > ( projectId ) ;
var allPixels = SqlSugarHelper . Db . Queryable < ec_enginedata_pixelEntity > ( ) . AS ( pixelTbName ) .
Where ( x = > x . DeleteFlg ! = 1 ) . ToList ( ) ;
var relTypeTbName = ProjectSugar . TableName < ec_reltypeEntity > ( projectId ) ;
2025-09-18 00:04:25 +08:00
var relType = SqlSugarHelper . Db . Queryable < ec_reltypeEntity > ( ) . AS ( relTypeTbName ) . ToList ( ) . FirstOrDefault ( x = > x . RelType = = enum_RelType . 设 备 _电缆 ) ;
2025-08-13 11:14:39 +08:00
var propBll = new ec_enginedata_propertyBLL ( ) ;
var allTagProps = SqlSugarHelper . Db . Queryable < ec_enginedata_propertyEntity > ( ) . AS ( propTbName ) . ToList ( ) ;
var tagIds = new List < string > ( ) ;
tagIds . AddRange ( Enginedataids . Split ( ',' ) ) ;
#region 图 纸 过 滤
var tagsOnDwgRange = new List < string > ( ) ;
if ( ! string . IsNullOrEmpty ( DwgIds ) & & DwgIds . Split ( ',' ) . Count ( ) > 0 )
{
tagsOnDwgRange = allPixels . Where ( x = > DwgIds . Split ( ',' ) . Contains ( x . DrawingFileID ) ) . Select ( x = > x . EngineDataID ) . Distinct ( ) . ToList ( ) ;
tagIds = tagIds . Intersect ( tagsOnDwgRange ) . ToList ( ) ;
}
#endregion
switch ( StyleType )
{
case "0" :
break ;
case "1" :
breakerType = "" ;
break ;
case "2" :
breakerType = "" ;
break ;
default :
break ;
}
var dataitembll = new ec_dataitemBLL ( ) ;
var systems = dataitembll . GetDetailList ( GlobalObject . enumlist_System , "" , projectId ) ;
foreach ( var id in tagIds )
{
var CBs = allCBs . Where ( x = > x . PDBId = = id ) . ToList ( ) ;
var res2 = await relBll . GetTagCableConns ( projectId , id , breakerType , RefCBs , allTag , CBs , allRels , allPixels , relType , allTagProps , tagsOnDwgRange , systems ) ;
res . Add ( res2 ) ;
}
return Success ( res . OrderBy ( X = > X . SystemName ) . ToList ( ) ) ;
}
/// <summary>
/// 查询多个设备上的所有电缆连接关系,用于如系统图的绘制
/// </summary>
/// <param name="projectId"></param>
/// <param name="Pixels"></param>
/// <param name="dwgId"></param>
/// <returns></returns>
public async Task < IHttpActionResult > GetTagCableConnsByPixelsAsync ( string projectId , string Pixels , string dwgId )
{
var res = new List < ec_enginedataEquipBrief > ( ) ;
var relBll = new ec_enginedata_relBLL ( ) ;
var pixelTbName = ProjectSugar . TableName < ec_enginedata_pixelEntity > ( projectId ) ;
var list_pixel = Pixels . Split ( ',' ) . ToList ( ) ;
var Ids = SqlSugarHelper . Db . Queryable < ec_enginedata_pixelEntity > ( ) . AS ( pixelTbName ) .
Where ( x = > x . DrawingFileID = = dwgId & & list_pixel . Contains ( x . PixelCode ) ) .
Select ( X = > X . EngineDataID ) . Distinct ( ) . ToList ( ) ;
var propTBName = ProjectSugar . TableName < ec_enginedata_propertyEntity > ( projectId ) ;
var TbName = ProjectSugar . TableName < ec_enginedataEntity > ( projectId ) ;
var allTag = SqlSugarHelper . Db . Queryable < ec_enginedataEntity > ( ) . AS ( TbName ) . ToList ( ) ;
var RefCBs = SqlSugarHelper . Db . Queryable < ec_RefCircuitBreakerEntity > ( ) .
Where ( x = > x . breakerType = = "MCCB" ) .
OrderBy ( x = > x . Capacity_Max ) . ToList ( ) ;
var cbTbName = ProjectSugar . TableName < ec_CircuitBreakerEntity > ( projectId ) ;
var allCBs = SqlSugarHelper . Db . Queryable < ec_CircuitBreakerEntity > ( ) . AS ( cbTbName ) . ToList ( ) ;
var relTbName = ProjectSugar . TableName < ec_enginedata_relEntity > ( projectId ) ;
var allRels = SqlSugarHelper . Db . Queryable < ec_enginedata_relEntity > ( ) . AS ( relTbName ) . ToList ( ) ;
var allPixels = SqlSugarHelper . Db . Queryable < ec_enginedata_pixelEntity > ( ) . AS ( pixelTbName ) .
Where ( x = > x . DeleteFlg ! = 1 ) . ToList ( ) ;
var relTypeTbName = ProjectSugar . TableName < ec_reltypeEntity > ( projectId ) ;
2025-09-18 00:04:25 +08:00
var relType = SqlSugarHelper . Db . Queryable < ec_reltypeEntity > ( ) . AS ( relTypeTbName ) . ToList ( ) . FirstOrDefault ( x = > x . RelType = = enum_RelType . 设 备 _电缆 ) ;
2025-08-13 11:14:39 +08:00
//var propBll = new ec_enginedata_propertyBLL();
var allTagProps = SqlSugarHelper . Db . Queryable < ec_enginedata_propertyEntity > ( ) . AS ( propTBName ) . ToList ( ) ;
var dataitembll = new ec_dataitemBLL ( ) ;
var systems = dataitembll . GetDetailList ( GlobalObject . enumlist_System , "" , projectId ) ;
foreach ( var id in Ids )
{
var CBs = allCBs . Where ( x = > x . PDBId = = id ) . ToList ( ) ;
var res2 = await relBll . GetTagCableConns ( projectId , id , "" , RefCBs , allTag , CBs , allRels , allPixels , relType , allTagProps , null , systems ) ;
res . Add ( res2 ) ;
}
return Success ( res . OrderBy ( X = > X . SystemName ) . ToList ( ) ) ;
}
/// <summary>
/// 查询一个设备上的所有电缆连接关系,用于如系统图的绘制
/// </summary>
/// <param name="projectId"></param>
/// <param name="Enginedataid"></param>
/// <returns></returns>
public async Task < IHttpActionResult > GetTagCableConnsByIdAsync ( string projectId , string Enginedataid , string breakerType )
{
var res = new ec_enginedataEquipBrief ( ) ;
var relBll = new ec_enginedata_relBLL ( ) ;
var propTbName = ProjectSugar . TableName < ec_enginedataEntity > ( projectId ) ;
var TbName = ProjectSugar . TableName < ec_enginedataEntity > ( projectId ) ;
var allTag = SqlSugarHelper . Db . Queryable < ec_enginedataEntity > ( ) . AS ( TbName ) . ToList ( ) ;
var RefCBs = SqlSugarHelper . Db . Queryable < ec_RefCircuitBreakerEntity > ( ) .
Where ( x = > x . breakerType = = "MCCB" ) .
OrderBy ( x = > x . Capacity_Max ) . ToList ( ) ;
var cbTbName = ProjectSugar . TableName < ec_CircuitBreakerEntity > ( projectId ) ;
var allCBs = SqlSugarHelper . Db . Queryable < ec_CircuitBreakerEntity > ( ) . AS ( cbTbName ) . ToList ( ) ;
var relTbName = ProjectSugar . TableName < ec_enginedata_relEntity > ( projectId ) ;
var allRels = SqlSugarHelper . Db . Queryable < ec_enginedata_relEntity > ( ) . AS ( relTbName ) . ToList ( ) ;
var pixelTbName = ProjectSugar . TableName < ec_enginedata_pixelEntity > ( projectId ) ;
var allPixels = SqlSugarHelper . Db . Queryable < ec_enginedata_pixelEntity > ( ) . AS ( pixelTbName ) .
Where ( x = > x . DeleteFlg ! = 1 ) . ToList ( ) ;
var relTypeTbName = ProjectSugar . TableName < ec_reltypeEntity > ( projectId ) ;
2025-09-18 00:04:25 +08:00
var relType = SqlSugarHelper . Db . Queryable < ec_reltypeEntity > ( ) . AS ( relTypeTbName ) . ToList ( ) . FirstOrDefault ( x = > x . RelType = = enum_RelType . 设 备 _电缆 ) ;
2025-08-13 11:14:39 +08:00
var propBll = new ec_enginedata_propertyBLL ( ) ;
var CBs = allCBs . Where ( x = > x . PDBId = = Enginedataid ) . ToList ( ) ;
var allTagProps = SqlSugarHelper . Db . Queryable < ec_enginedata_propertyEntity > ( ) . AS ( propTbName ) . ToList ( ) ;
var dataitembll = new ec_dataitemBLL ( ) ;
var systems = dataitembll . GetDetailList ( GlobalObject . enumlist_System , "" , projectId ) ;
res = await relBll . GetTagCableConns ( projectId , Enginedataid , breakerType , RefCBs , allTag , CBs , allRels , allPixels , relType , allTagProps , null , systems ) ;
return Success ( res ) ;
}
/// <summary>
/// 查询所有
/// </summary>
/// <param name="projectId"></param>
/// <returns></returns>
public IHttpActionResult GetAllTagsAsync ( string projectId )
{
var bll = new ec_enginedataBLL ( ) ;
var res = bll . GetList ( "{\"ProjectId\":\"" + projectId + "\"}" ) ;
return Success ( res ) ;
}
/// <summary>
/// 查询多个设备上的所有端子连接关系,用于如端子图的绘制
/// </summary>
/// <param name="projectId"></param>
/// <param name="Enginedataids">逗号分开</param>
/// <param name="IsAlarmSystem">是否为监测系统</param>
/// <returns></returns>
public async Task < IHttpActionResult > GetTagTermConnsByIdsAsync ( string projectId , string Enginedataids , string dwgId , bool IsAlarmSystem = true )
{
var res = new List < object > ( ) ;
var relBll = new ec_enginedata_relBLL ( ) ;
foreach ( var id in Enginedataids . Split ( ',' ) )
{
var res2 = await relBll . GetTagTermConns ( projectId , id , dwgId , IsAlarmSystem ) ;
res . Add ( res2 ) ;
}
return Success ( res ) ;
}
/// <summary>
/// 解锁、加锁
/// </summary>
/// <param name="projectId"></param>
/// <param name="Enginedataids">逗号分开</param>
/// <param name="action">加锁1或解锁0</param>
/// <returns></returns>
public async Task < IHttpActionResult > LockTag ( string projectId , string Enginedataids , string action )
{
var res = new List < object > ( ) ;
var Bll = new ec_enginedataBLL ( ) ;
foreach ( var id in Enginedataids . Split ( ',' ) )
{
await Bll . LockTag ( projectId , id , action ) ;
}
return Success ( "OK" ) ;
}
/// <summary>
/// 查询多个设备上的所有端子连接关系,用于如端子图的绘制
/// </summary>
/// <param name="projectId"></param>
/// <param name="Enginedataids">逗号分开</param>
/// <param name="IsAlarmSystem">是否为监测系统</param>
/// <returns></returns>
public async Task < IHttpActionResult > GetTagTermConnsByPixelsAsync ( string projectId , string pixels , string dwgId , bool IsAlarmSystem = true )
{
var res = new List < object > ( ) ;
var relBll = new ec_enginedata_relBLL ( ) ;
//
var pixelTbName = ProjectSugar . TableName < ec_enginedata_pixelEntity > ( projectId ) ;
var list_pixel = pixels . Split ( ',' ) . ToList ( ) ;
var Ids = SqlSugarHelper . Db . Queryable < ec_enginedata_pixelEntity > ( ) . AS ( pixelTbName ) .
Where ( x = > x . DrawingFileID = = dwgId & & list_pixel . Contains ( x . PixelCode ) ) .
Select ( X = > X . EngineDataID ) . Distinct ( ) . ToList ( ) ;
foreach ( var id in Ids )
{
var res2 = await relBll . GetTagTermConns ( projectId , id , dwgId , IsAlarmSystem ) ;
res . Add ( res2 ) ;
}
return Success ( res ) ;
}
/// <summary>
/// 获取最新流水号
/// </summary>
/// <param name="projectId">项目ID</param>
/// <param name="TagLeftPart">位号前面的内容</param>
/// <returns></returns>
[HttpGet]
public IHttpActionResult GetLatestSerialNumber ( string projectId , string TagLeftPart , int Number = 1 )
{
try
{
// && Regex.IsMatch(x.TagNumber.Substring(TagLeftPart.Length), @"^\d+$")
// Select(x => int.Parse(x.TagNumber.ToUpper().Substring(TagLeftPart.Length))).
var res = new List < string > ( ) ;
TagLeftPart = TagLeftPart . ToUpper ( ) + "-" ;
var tbName = ProjectSugar . TableName < ec_enginedataEntity > ( projectId ) ;
var existTagsNumber = SqlSugarHelper . Db . Queryable < ec_enginedataEntity > ( ) . AS ( tbName ) .
Where ( x = > x . TagNumber . ToUpper ( ) . StartsWith ( TagLeftPart ) ) .
Select ( x = > x . TagNumber ) .
ToList ( ) ;
List < int > seqs = new List < int > ( ) ;
foreach ( var id in existTagsNumber )
{
var RightPart = id . Substring ( TagLeftPart . Length ) ;
if ( int . TryParse ( RightPart , out int seq ) )
{
seqs . Add ( seq ) ;
}
}
int minMissingNumber = 1 ;
for ( int i = 0 ; i < Number ; i + + )
{
while ( seqs . Contains ( minMissingNumber ) )
{
minMissingNumber + + ; //已有这个序号
} ;
res . Add ( minMissingNumber . ToString ( "D5" ) ) ;
minMissingNumber + + ; //本来需要循环+1
}
// 将最小缺失数字格式化为5位数字字符串, 前面补0
return Success ( res ) ;
}
catch ( Exception ex )
{
return Fail ( ex . Message ) ;
}
}
/// <summary>
/// 获取位号的工程属性(根据位号)
/// </summary>
/// <param name="projectId">项目ID</param>
/// <param name="tagNumber">位号</param>
/// <returns></returns>
[HttpGet]
[ResponseType(typeof(ec_enginedataEntity))]
public IHttpActionResult GetTagsByTag ( string projectId , string tagNumber , string caseId = "" )
{
try
{
var ec_enginedataIBLL = new ec_enginedataBLL ( ) ;
var ec_enginedata_propertyIBLL = new ec_enginedata_propertyBLL ( ) ;
var data = ec_enginedataIBLL . GetList ( "{\"ProjectId\":\"" + projectId + "\",\"TagNumber\":\"" + tagNumber + "\"}" ) . ToList ( ) ;
if ( data ! = null & & data . Count > 0 )
{
//获取工程数据属性
data [ 0 ] . EngineDataProperty = ec_enginedata_propertyIBLL . GetEnginePropById ( projectId , data [ 0 ] . EngineDataID ) . ToList ( ) ;
}
return Success ( data ) ;
}
catch ( Exception ex )
{
return Fail ( ex . Message ) ;
}
}
/// <summary>
/// 获取某个图上的所有pixel对象
/// </summary>
/// <param name="projectId"></param>
/// <param name="drawingFileID"></param>
/// <returns></returns>
[HttpGet]
public IHttpActionResult GetTagPixelsByDrawing ( string projectId , string drawingFileID )
{
try
{
//var engineData = new ec_enginedataBLL().GetList("{\"ProjectId\":\"" + projectId + "\",\"DrawingFileID\":\"" + drawingFileID + "\",\"PixelCodes\":\"" + pixels + "\"}").ToList();
var res = new ec_enginedata_pixelBLL ( ) . GetDrawingEnginePixel ( "{\"ProjectId\":\"" + projectId + "\",\"DrawingFileID\":\"" + drawingFileID + "\"}" ) . ToList ( ) ;
return Success ( res ) ;
}
catch ( Exception ex )
{
return Fail ( ex . Message ) ;
}
}
/// <summary>
/// 成品导出( xlsx)
/// </summary>
/// <param name="projectId">项目编号</param>
/// <param name="drawingId">图纸ID</param>
/// <param name="mode">0=web,1=app</param>
/// <returns></returns>
[HttpGet]
public IHttpActionResult CheckIsRequiredPropsByDrawing ( string projectId , string drawingId , int mode = 1 )
{
try
{
var BLL = new ec_enginedataBLL ( ) ;
var bytes = BLL . CheckIsRequiredPropsByDrawing ( projectId , drawingId ) ;
if ( mode = = 1 )
{
//app
var stream = new MemoryStream ( bytes ) ;
FileDownHelper . DownLoad ( stream , $"必填属性缺失检查{DateTime.Now.ToString(" yyyyMMddHHmmss ")}.xlsx" ) ; //自动化平台导出excel
}
else
{
//web
ExcelHelper . DownloadIWorkbook ( bytes , $"必填属性缺失检查{DateTime.Now.ToString(" yyyyMMddHHmmss ")}" ) ;
}
return Success ( "数据已导出" ) ;
}
catch ( Exception ex )
{
return Fail ( ex . Message ) ;
}
}
/// <summary>
/// 获取某个图上的所有位号(前端再根据情况进行过滤)
/// </summary>
/// <param name="projectId"></param>
/// <param name="drawingFileID"></param>
/// <returns></returns>
[HttpGet]
public IHttpActionResult GetTagsByDrawing ( string projectId , string drawingFileID )
{
try
{
//var engineData = new ec_enginedataBLL().GetList("{\"ProjectId\":\"" + projectId + "\",\"DrawingFileID\":\"" + drawingFileID + "\",\"PixelCodes\":\"" + pixels + "\"}").ToList();
var res = new ec_enginedataBLL ( ) . GetListByDrawing ( projectId , drawingFileID ) ;
return Success ( res ) ;
}
catch ( Exception ex )
{
return Fail ( ex . Message ) ;
}
}
/// <summary>
/// 根据图纸ID, CAD图元句柄获取该图元在数据库中对应的位号、对象类型ID、对象类型名称、对象EngineDataID。
/// 系统图识别,和求设备连接关系时会用到。
/// </summary>
/// <param name="projId"></param>
/// <param name="drawingFileID"></param>
/// <param name="pixelIds">多个逗号隔开</param>
/// <returns></returns>
public IHttpActionResult GetTagInfoByPixels ( string projId , string drawingFileID , string pixelIds )
{
try
{
var res2 = new List < object > ( ) ;
var Ids = pixelIds . Split ( ',' ) ;
var pixelTbName = ProjectSugar . TableName < ec_enginedata_pixelEntity > ( projId ) ;
var tagTbName = ProjectSugar . TableName < ec_enginedataEntity > ( projId ) ;
var typeTbName = ProjectSugar . TableName < ec_objecttypeEntity > ( projId ) ;
var propTbName = ProjectSugar . TableName < ec_enginedata_propertyEntity > ( projId ) ;
var allPixels = SqlSugarHelper . Db . Queryable < ec_enginedata_pixelEntity > ( ) . AS ( pixelTbName ) .
Where ( x = > x . DrawingFileID = = drawingFileID & & Ids . Contains ( x . PixelCode ) ) . ToList ( ) ;
var TagIds = allPixels . Select ( x = > x . EngineDataID ) . Distinct ( ) . ToList ( ) ;
var allProps = SqlSugarHelper . Db . Queryable < ec_enginedata_propertyEntity > ( ) . AS ( propTbName ) .
Where ( x = > TagIds . Contains ( x . EngineDataID ) ) . ToList ( ) ;
if ( TagIds ! = null )
{
foreach ( var TagId in TagIds )
{
//对应的句柄有哪些
var tagPixelsOnThisDwg = allPixels . Where ( x = > x . EngineDataID = = TagId ) . Select ( x = > x . PixelCode ) . ToList ( ) ;
if ( tagPixelsOnThisDwg = = null )
{
tagPixelsOnThisDwg = new List < string > ( ) ;
}
var stringPixels = string . Join ( "," , tagPixelsOnThisDwg ) ;
var desc = allProps . FirstOrDefault ( x = > x . EngineDataID = = TagId & & x . PropertyName = = "中文名称" ) ? . PropertyValue ;
var descEN = allProps . FirstOrDefault ( x = > x . EngineDataID = = TagId & & x . PropertyName = = "英文名称" ) ? . PropertyValue ;
var supplyBy = allProps . FirstOrDefault ( x = > x . EngineDataID = = TagId & & x . PropertyName = = "电缆供货类型" ) ? . PropertyValue ;
var TagObj = SqlSugarHelper . Db . Queryable < ec_enginedataEntity > ( ) . AS ( tagTbName ) .
LeftJoin < ec_objecttypeEntity > ( ( a , b ) = > a . ObjectTypeID = = b . ObjectTypeID ) . AS < ec_objecttypeEntity > ( typeTbName ) .
Select ( ( a , b ) = > new
{
a . TagNumber ,
a . EngineDataID ,
a . ObjectTypeID ,
b . ObjectTypeName ,
stringPixels ,
desc ,
descEN ,
supplyBy
} ) .
First ( a = > a . EngineDataID = = TagId ) ;
//var allPixels = SqlSugarHelper.Db.Queryable<ec_enginedata_pixelEntity>().AS(pixelTbName).
//Where(x => x.EngineDataID == TagId).
//Select(x => new
//{
// x.PixelCode,
// x.DrawingFileID
//}).
//ToList();
if ( TagObj ! = null )
{
res2 . Add ( TagObj ) ;
}
}
return Success ( res2 ) ;
}
else
{
return Success ( null ) ;
}
}
catch ( Exception )
{
return Success ( null ) ;
}
}
/// <summary>
/// 获取某个所属系统的所有位号
/// </summary>
/// <param name="projectId"></param>
/// <param name="system"></param>
/// <returns></returns>
[HttpGet]
public IHttpActionResult GetTagsBySystem ( string projectId , string system )
{
try
{
//var engineData = new ec_enginedataBLL().GetList("{\"ProjectId\":\"" + projectId + "\",\"DrawingFileID\":\"" + drawingFileID + "\",\"PixelCodes\":\"" + pixels + "\"}").ToList();
var res = new object ( ) ;
return Success ( res ) ;
}
catch ( Exception ex )
{
return Fail ( ex . Message ) ;
}
}
/// <summary>
/// 获取某个设备单元( 如wcc、ecc) 的所有位号
/// </summary>
/// <param name="projectId"></param>
/// <param name="system"></param>
/// <returns></returns>
[HttpGet]
public IHttpActionResult GetTagsByUnit ( string projectId , string unit )
{
try
{
var res = new object ( ) ;
return Success ( res ) ;
}
catch ( Exception ex )
{
return Fail ( ex . Message ) ;
}
}
/// <summary>
/// 批量反向关联
/// </summary>
/// <param name="projId"></param>
/// <param name="entity">ID是设备的, 而不是开关的</param>
/// <returns></returns>
[HttpPost]
public IHttpActionResult QuickAssign ( string projId , [ FromBody ] IEnumerable < ec_enginedata_pixelEntity > entity )
{
#region 根 据 传 过 来 的 图 元 集 合
if ( entity = = null )
{
return Success ( "OK" ) ;
}
var ProjectEntity = SqlSugarHelper . Db . Queryable < ec_projectEntity > ( ) . Single ( x = > x . ProjectId = = projId ) ;
foreach ( var pixel in entity )
{
var existPixel = SqlSugarHelper . Db . Queryable < ec_enginedata_pixelEntity > ( ) . AS ( $"ec_enginedata_pixel_{ProjectEntity.ProjectIndex}" ) .
First ( x = > x . DrawingFileID = = pixel . DrawingFileID & & x . PixelCode = = pixel . PixelCode ) ;
if ( existPixel ! = null )
{
existPixel . Modify ( existPixel . EngineDataPixelID ) ;
existPixel . DeleteFlg = 0 ;
existPixel . EngineDataID = pixel . EngineDataID ;
existPixel . LibraryFileID = pixel . LibraryFileID ;
existPixel . MaxPointX = pixel . MaxPointX ;
existPixel . MinPointX = pixel . MinPointX ;
existPixel . MaxPointY = pixel . MaxPointY ;
existPixel . MinPointY = pixel . MinPointY ;
SqlSugarHelper . Db . Updateable ( existPixel ) . AS ( $"ec_enginedata_pixel_{ProjectEntity.ProjectIndex}" ) . ExecuteCommand ( ) ;
}
else
{
pixel . Create ( ) ;
pixel . DeleteFlg = 0 ;
pixel . EngineDataID = pixel . EngineDataID ;
SqlSugarHelper . Db . Insertable ( pixel ) . AS ( $"ec_enginedata_pixel_{ProjectEntity.ProjectIndex}" ) . ExecuteCommand ( ) ;
}
//SqlSugarHelper.Db.Ado.ExecuteCommand($" DELETE FROM ec_enginedata_pixel_{ProjectEntity.ProjectIndex} WHERE DrawingFileID = '{pixel.DrawingFileID}' AND PixelCode = '{pixel.PixelCode}';");
}
return Success ( "OK" ) ;
//db.InsertByNoMap(entity.EngineDataPixel, $"ec_enginedata_pixel_{ProjectEntity.ProjectIndex}");
#endregion
}
/// <summary>
/// 成品导出( xlsx) ,用于二三维联动用的,三维坐标信息。
/// </summary>
/// <param name="projectId">项目编号</param>
/// <param name="exportType"></param>
/// <returns></returns>
[HttpGet]
public void ExportExcel ( string projectId , ExportType exportType )
{
var BLL = new ec_enginedataBLL ( ) ;
var bytes = BLL . ExportExcel ( projectId , exportType ) ;
var stream = new MemoryStream ( bytes ) ;
FileDownHelper . DownLoad ( stream , $"BricsCAD_Coordinates_{DateTime.Now.ToString(" yyyyMMddHHmmss ")}.xlsx" ) ;
}
/// <summary>
/// 批量的去判断位号是否存在
/// </summary>
/// <param name="projId"></param>
/// <param name="tagInfo">每个元素都是aaa,BBB。aaa为位号, bbb为对象类型ID</param>
/// <returns></returns>
public IHttpActionResult CheckTagsExist ( string projId , List < string > tagInfo )
{
var tagBll = new ec_enginedataBLL ( ) ;
var resAll = new List < string > ( ) ;
foreach ( string tag in tagInfo )
{
int lastCommaIndex = tag . LastIndexOf ( ',' ) ;
if ( lastCommaIndex ! = - 1 )
{
}
else
{
return Fail ( "http请求格式错误。没有逗号" ) ;
}
}
var allDistinctTag = tagInfo . Select ( x = > x . Split ( ',' ) [ 0 ] ) . Distinct ( ) . ToList ( ) ;
foreach ( string tag in allDistinctTag )
{
var type = tagInfo . Where ( x = > x . Split ( ',' ) [ 0 ] = = tag ) . Select ( x = > x . Split ( ',' ) [ 1 ] ) . Distinct ( ) . ToList ( ) ;
if ( type . Count > 1 )
{
return Fail ( $"不同类型对象位号有重复,如{tag}" ) ;
}
}
foreach ( string tag in tagInfo )
{
int lastCommaIndex = tag . LastIndexOf ( ',' ) ;
if ( lastCommaIndex ! = - 1 )
{
Console . WriteLine ( $"最右侧的逗号位置是: {lastCommaIndex}" ) ;
string LeftPart = tag . Substring ( 0 , lastCommaIndex ) ;
string lastPart = tag . Substring ( lastCommaIndex + 1 ) ;
if ( LeftPart . Length = = 0 | | lastPart . Length = = 0 )
{
return Fail ( "http请求格式错误。逗号两侧的长度有为0的" ) ;
}
var res = "" ;
var res2 = tagBll . CheckTagExist ( projId , LeftPart , lastPart , out res ) ;
if ( res2 )
{
resAll . Add ( LeftPart + "," + res ) ;
}
}
else
{
return Fail ( "http请求格式错误。没有逗号" ) ;
}
}
return Success ( resAll ) ;
}
/// <summary>
/// 检查同一根电缆是否存在于2份图纸中
/// </summary>
/// <param name="projectId">项目编号</param>
/// <param name="drawingFileID">图纸编号</param>
/// <returns></returns>
[HttpGet]
public IHttpActionResult CheckIsNotExistInOtherDrawings ( string projectId , string drawingFileID )
{
try
{
var res = new ec_enginedata_pixelBLL ( ) . CheckTagIsNotExistInOtherDrawings ( projectId , drawingFileID ) ;
if ( res . IsEmpty ( ) )
{
return Fail ( "没有错误数据" ) ;
}
var stream = new MemoryStream ( res ) ;
FileDownHelper . DownLoad ( stream , $"BricsCAD_ShortageOfCables_{DateTime.Now.ToString(" yyyyMMddHHmmss ")}.xlsx"
, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ) ;
return Success ( "数据已导出" ) ;
}
catch ( Exception ex )
{
return Fail ( ex . Message ) ;
}
}
}
}