This commit is contained in:
xingheng 2025-09-15 22:58:22 +08:00
parent e96f397f4f
commit 1f6ac157b7
9 changed files with 143 additions and 63 deletions

View File

@ -373,7 +373,7 @@ namespace Learun.Application.Web.AppApi
/// </summary>
/// <param name="projectId">项目ID</param>
/// <param name="drawingFileID">图纸文件ID</param>
/// <param name="pixelCodes">图元编号集合(用,连接)</param>
/// <param name="pixelCodes">图元编号集合(用,连接)。正常就1个</param>
/// <param name="caseID">工况ID</param>
/// <returns></returns>
[HttpGet]
@ -552,7 +552,7 @@ namespace Learun.Application.Web.AppApi
{
TagProp.PropertyValue = CableConn.End1Tag;
}
else if (TagProp.PropertyName ==GlobalObject.propName_To)
else if (TagProp.PropertyName == GlobalObject.propName_To)
{
TagProp.PropertyValue = CableConn.End2Tag;
}
@ -591,44 +591,55 @@ namespace Learun.Application.Web.AppApi
var propTbName = ProjectSugar.TableName<ec_enginedata_propertyEntity>(projectId);
var allUser = SqlSugarHelper.Db.Queryable<UserEntity>().ToList();
var userDict = allUser.ToDictionary(x => x.F_UserId, x => x.F_RealName);
var pixelAll = SqlSugarHelper.Db.Queryable<ec_enginedata_pixelEntity>().AS(pixelTbName).Where(x => x.DrawingFileID == drawingFileID && x.DeleteFlg != 1).ToList();
var pixelDictByTag = pixelAll.GroupBy(x => x.EngineDataID).ToDictionary(x => x.Key, x => x.ToList());
var pixelObjs = pixelAll.Where(x => pixelCodes.Split(',').ToList().Contains(x.PixelCode)).ToList();
var tagIds = pixelObjs.Select(x => x.EngineDataID).Distinct().ToList();
var tagAll = SqlSugarHelper.Db.Queryable<ec_enginedataEntity>().AS(tagTbName).OrderBy(x => x.TagNumber).ToList();
// 提前分组按ObjectTypeID分组并为每个组预生成字典仅执行一次O(m)时间)
var preGrouped = tagAll
.GroupBy(tag => tag.ObjectTypeID)
.ToDictionary(
group => group.Key, // 键ObjectTypeID
group => group.ToDictionary( // 值该组内的EngineDataID→TagNumber字典
item => item.EngineDataID,
item => item.TagNumber
)
);
var tagObjs = tagAll.Where(x => tagIds.Contains(x.EngineDataID)).ToList();
var tagDictByType = tagObjs.GroupBy(x => x.ObjectTypeID).ToDictionary(x => x.Key, x => x.ToList());
var typeIds = tagObjs.Select(x => x.ObjectTypeID).Distinct().ToList();
var typeAll = SqlSugarHelper.Db.Queryable<ec_objecttypeEntity>().AS(typeTbName).ToList();
var typeObjs = typeAll.Where(x => typeIds.Contains(x.ObjectTypeID)).ToList();
var tagPropAll = SqlSugarHelper.Db.Queryable<ec_enginedata_propertyEntity>().AS(propTbName).Where(x => tagIds.Contains(x.EngineDataID)).ToList();
var tagPropDictByTag = tagPropAll.GroupBy(x => x.EngineDataID).ToDictionary(x => x.Key, x => x.ToList());
//所有类别的属性信息
var objectTypeProps2 = objectTypePBll.GetObjectTypePById(string.Join(",", typeIds), projectId, true);//最频繁的那个接口
var typePropDictByType = objectTypeProps2.GroupBy(x => x.ObjectTypeID).ToDictionary(g => g.Key, g => g.ToList());
try
{
foreach (var objectType in typeObjs)
{
//该类型下的属性信息
objectType.props = objectTypeProps2.Where(x => x.ObjectTypeID == objectType.ObjectTypeID).ToList();
objectType.props = typePropDictByType[objectType.ObjectTypeID];// objectTypeProps2.Where(x => x.ObjectTypeID == objectType.ObjectTypeID).ToList();
//该类型下的位号基础信息
objectType.tags = tagObjs.Where(x => x.ObjectTypeID == objectType.ObjectTypeID).ToList();
foreach (var item in objectType.tags)
{
item.CreateUserName = allUser.FirstOrDefault(x => x.F_UserId == item.CreateUserID)?.F_RealName;
}
objectType.tags = tagDictByType[objectType.ObjectTypeID]; // tagObjs.Where(x => x.ObjectTypeID == objectType.ObjectTypeID).ToList();
//每个位号的属性信息
foreach (var tag in objectType.tags)
{
tag.CreateUserName = userDict[tag.CreateUserID];// allUser.FirstOrDefault(x => x.F_UserId == item.CreateUserID)?.F_RealName;
tag.EngineDataID = tag.EngineDataID;
tag.EngineDataProperty = tagPropAll.Where(x => x.EngineDataID == tag.EngineDataID).ToList();
tag.EngineDataProperty = tagPropDictByTag[tag.EngineDataID];// tagPropAll.Where(x => x.EngineDataID == tag.EngineDataID).ToList();
tag.ObjectTypeName = objectType.ObjectTypeName;
if (objectType.ObjectTypeName.EndsWith("电缆"))
{
//电缆from to
var CableConn = relBll.GetCableConn(tag.EngineDataID, projectId);
var CableConn = relBll.GetCableConn(tag.EngineDataID, projectId);//此时就根据rel里的id拿到了新的tagNumber
if (!tag.EngineDataProperty.Any(X => X.PropertyName == GlobalObject.propName_From))
{
@ -640,7 +651,7 @@ namespace Learun.Application.Web.AppApi
};
newProp.Create();
ec_enginedata_propertyBLL.InsertTagProp(projectId, tag.EngineDataID, newProp);
ec_enginedata_propertyBLL.InsertTagProp(projectId, tag.EngineDataID, newProp);//增加 起始设备
tag.EngineDataProperty.Add(newProp);
}
if (!tag.EngineDataProperty.Any(X => X.PropertyName == GlobalObject.propName_To))
@ -653,7 +664,7 @@ namespace Learun.Application.Web.AppApi
};
newProp.Create();
ec_enginedata_propertyBLL.InsertTagProp(projectId, tag.EngineDataID, newProp);
ec_enginedata_propertyBLL.InsertTagProp(projectId, tag.EngineDataID, newProp);////增加 终止设备
tag.EngineDataProperty.Add(newProp);
}
@ -671,10 +682,10 @@ namespace Learun.Application.Web.AppApi
}
//查一下每个位号的图元信息
tag.EngineDataPixel = pixelAll.Where(x => x.EngineDataID == tag.EngineDataID).ToList();
tag.EngineDataPixel = pixelDictByTag[tag.EngineDataID];// pixelAll.Where(x => x.EngineDataID == tag.EngineDataID).ToList();
}
//taglist
objectType.tagsListDropDown = tagAll.Where(X => X.ObjectTypeID == objectType.ObjectTypeID).ToDictionary(x => x.EngineDataID, x => x.TagNumber);
objectType.tagsListDropDown = preGrouped[objectType.ObjectTypeID]; //tagAll.Where(X => X.ObjectTypeID == objectType.ObjectTypeID).ToDictionary(x => x.EngineDataID, x => x.TagNumber);
//该类型下的流水
if (objectType.IsSerialNumber == 1)

View File

@ -77,7 +77,7 @@ namespace Learun.Application.Web.AppApi
relData.RelEngineData2ID
};
}
ec_relDataBLL.SaveEntitys(ProjectId, relData.RelTypeID, relData.RelEngineData1ID, relData.End2IDs);
ec_relDataBLL.SaveEntitys(ProjectId, relData.RelTypeID, relData.RelEngineData1ID, relData.End2IDs,relData.OPCPixel);
}
@ -487,7 +487,7 @@ namespace Learun.Application.Web.AppApi
}
}
relDataCol = relDataColNotOPC;
}
else
@ -536,7 +536,7 @@ namespace Learun.Application.Web.AppApi
{
//根据句柄和图纸先把工程id查出来先
//获取工程数据图元数据
var EngineDataIDs = pixelServ.GetList("{\"ProjectId\":\"" + ProjectId + "\",\"PixelCode\":\"" + relData.TagPixelID + "\",\"DrawingFileID\":\"" + relData.DrawingID + "\"}",ProjectId).
var EngineDataIDs = pixelServ.GetList("{\"ProjectId\":\"" + ProjectId + "\",\"PixelCode\":\"" + relData.TagPixelID + "\",\"DrawingFileID\":\"" + relData.DrawingID + "\"}", ProjectId).
Select(x => x.EngineDataID).Distinct();
var CableIDs = pixelServ.GetList("{\"ProjectId\":\"" + ProjectId + "\",\"PixelCode\":\"" + relData.CablePixelID + "\",\"DrawingFileID\":\"" + relData.DrawingID + "\"}", ProjectId).
Select(x => x.EngineDataID).Distinct();
@ -547,13 +547,13 @@ namespace Learun.Application.Web.AppApi
if (relData.IsEnd1)
if (relData.IsEnd1)//电缆的起始端连接信息设备在end1电缆在end2
{
ec_relDataBLL.SaveEntitys(ProjectId, RelTypeID, new List<string> { TagID }, CableID, true);
ec_relDataBLL.SaveEntitys(ProjectId, RelTypeID, new List<string> { TagID }, CableID, relData.TagPixelID, true);
}
else
{
ec_relDataBLL.SaveEntitys(ProjectId, RelTypeID, CableID, new List<string> { TagID }, true);
ec_relDataBLL.SaveEntitys(ProjectId, RelTypeID, CableID, new List<string> { TagID }, relData.TagPixelID, true);
}
}

View File

@ -99,7 +99,7 @@ namespace Learun.Application.Web.Areas.ZZDT_EC.Controllers
public ActionResult SaveForm(string ProjectId, string RelTypeID, string RelEngineData1ID, string strEntity)
{
List<string> relEngineData2IDs = strEntity.ToList<string>();
ec_enginedata_relIBLL.SaveEntitys(ProjectId, RelTypeID, RelEngineData1ID, relEngineData2IDs);
ec_enginedata_relIBLL.SaveEntitys(ProjectId, RelTypeID, RelEngineData1ID, relEngineData2IDs,"");
return Success("保存成功!");
}
#endregion

View File

@ -1123,7 +1123,7 @@ namespace Learun.Application.Web.Areas.ZZDT_EC.Controllers
//电缆的from to是根据甲板号的order顺序来的高优先级的就属于from
int? FromOrder = -1; int? ToOrder = -1;
#region From
var cableFromId = relDatas?.FirstOrDefault(x => x?.RelEngineData2ID == cable?.EngineDataID && x?.RelEngDataObjType1?.Contains("OPC")==false)?.RelEngineData1ID;
var cableFromId = relDatas?.FirstOrDefault(x => x?.RelEngineData2ID == cable?.EngineDataID && x?.RelEngDataObjType1?.Contains(GlobalObject.objectType_OPC)==false)?.RelEngineData1ID;
if (!string.IsNullOrEmpty(cableFromId))
{
var cableFromObj = Equips.FirstOrDefault(x => x.EngineDataID == cableFromId);
@ -1174,7 +1174,7 @@ namespace Learun.Application.Web.Areas.ZZDT_EC.Controllers
}
#endregion
#region To
var cableEndId = relDatas?.FirstOrDefault(x => x?.RelEngineData1ID == cable?.EngineDataID && x?.RelEngDataObjType2?.Contains("OPC")==false)?.RelEngineData2ID;
var cableEndId = relDatas?.FirstOrDefault(x => x?.RelEngineData1ID == cable?.EngineDataID && x?.RelEngDataObjType2?.Contains(GlobalObject.objectType_OPC)==false)?.RelEngineData2ID;
if (!string.IsNullOrEmpty(cableEndId))
{
var cableEndObj = Equips.FirstOrDefault(x => x.EngineDataID == cableEndId);
@ -1570,8 +1570,8 @@ namespace Learun.Application.Web.Areas.ZZDT_EC.Controllers
(eep, ee, eo, edf, edc, edp) => eep.EngineDataID == edp.EngineDataID
)
.LeftJoin(subQuery, (eep, ee, eo, edf, edc, edp,dde)=> edp. == dde.DataItemName)
.WhereIF(selectModel == 0, (eep, ee, eo, edf, edc, edp, dde) => !eo.FullPathCN.EndsWith("电缆") && !eo.FullPathCN.EndsWith("图框") && !eo.FullPathCN.EndsWith(GlobalObject.objectType_Base) && !eo.FullPathCN.EndsWith("OPC") && eep.DeleteFlg == 0)
.WhereIF(selectModel == 1, (eep, ee, eo, edf, edc, edp, dde) => !eo.FullPathCN.EndsWith("电缆") && !eo.FullPathCN.EndsWith("图框") && !eo.FullPathCN.EndsWith(GlobalObject.objectType_Base) && !eo.FullPathCN.EndsWith("OPC") && dwgIdCos.Contains(eep.DrawingFileID) && eep.DeleteFlg == 0)
.WhereIF(selectModel == 0, (eep, ee, eo, edf, edc, edp, dde) => !eo.FullPathCN.EndsWith("电缆") && !eo.FullPathCN.EndsWith("图框") && !eo.FullPathCN.EndsWith(GlobalObject.objectType_Base) && !eo.FullPathCN.EndsWith(GlobalObject.objectType_OPC) && eep.DeleteFlg == 0)
.WhereIF(selectModel == 1, (eep, ee, eo, edf, edc, edp, dde) => !eo.FullPathCN.EndsWith("电缆") && !eo.FullPathCN.EndsWith("图框") && !eo.FullPathCN.EndsWith(GlobalObject.objectType_Base) && !eo.FullPathCN.EndsWith(GlobalObject.objectType_OPC) && dwgIdCos.Contains(eep.DrawingFileID) && eep.DeleteFlg == 0)
.GroupBy((eep, ee, eo, edf, edc, edp, dde) => new
{
edc.DrawingCatalogueNO,

View File

@ -131,7 +131,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
Where(x => allTag.Select(y => y.ObjectTypeID).Contains(x.ObjectTypeID)
&& !x.FullPathCN.EndsWith("图框")
&& !x.FullPathCN.EndsWith(GlobalObject.objectType_Base)
&& !x.FullPathCN.EndsWith("OPC")).Distinct().ToList();
&& !x.FullPathCN.EndsWith(GlobalObject.objectType_OPC)).Distinct().ToList();
var allPropDef = Db.Queryable<ec_propertyEntity>().AS(propT).ToList();
//var allObjectTypeP = Db.Queryable<ec_objecttypepEntity>().AS(objectTypeP_T).ToList();
var allObjectTypeP = new ec_objecttypepBLL().GetObjectTypePById("", projectId, true).ToList();
@ -1816,10 +1816,29 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
var relObj = Db.Queryable<ec_reltypeEntity>().AS(relTableName).First(x => x.RelType == "0");
if (relObj != null) {
var existCableConns = Db.Queryable<ec_enginedata_relEntity>().AS(reldataTableName).
Where(x => x.RelTypeID == relObj.RelTypeID && (x.RelEngineData1ID == oldTagId || x.RelEngineData2ID == oldTagId)).ToList();
Where(x => x.RelTypeID == relObj.RelTypeID && x.OPCPixel == pixel.PixelCode && (x.RelEngineData1ID == oldTagId || x.RelEngineData2ID == oldTagId)).ToList();
//这里有问题。
//比如设备B在多个图上多有句柄P1 P2 P3且这些句柄都关联了多个电缆C1 C2 C3那么在rel表里就有3个B的记录
//这时如果进行提交,句柄P1的主体变为了设备BBB那么B的所有句柄P1 P2 P3都变为BBB了没有单独分离出来 C1 C2 C3中的某一个
//解决在进行saveconnection把设备的句柄存入
if (existCableConns != null)
{
//更新rel表
foreach (var existConn in existCableConns)
{
if (existConn.RelEngineData1ID == oldTagId)
{
existConn.RelEngineData1ID = newTagId;
}
else if (existConn.RelEngineData2ID == oldTagId)
{
existConn.RelEngineData2ID = newTagId;
}
}
//更新电缆属性里的 起始设备 和 终止设备
}
}
}
#endregion
@ -2549,7 +2568,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
// 筛选出“真实设备”这里排除OPC、通讯器等中转对象
var deviceTags = endpointInfo
.Where(x => !x.objectType.Contains("OPC"))
.Where(x => !x.objectType.Contains(GlobalObject.objectType_OPC))
.Select(x => x.tagNumber)
.Distinct()
.Take(2) // 只取前两个设备

View File

@ -400,7 +400,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
.LeftJoin<ec_enginedataEntity>((edp, ede) => edp.EngineDataID == ede.EngineDataID).AS<ec_enginedataEntity>(enginedataTableName)
.LeftJoin<ec_objecttypeEntity>((edp, ede, eot) => ede.ObjectTypeID == eot.ObjectTypeID).AS<ec_objecttypeEntity>(objectTypeTableName)
.Where((edp, ede, eot) => edp.DeleteFlg == 0 && edp.DrawingFileID == drawingFileID && pixelEntities.Select(y => y.PixelCode).Contains(edp.PixelCode)
&& !eot.FullPathCN.EndsWith("图框") && !eot.FullPathCN.EndsWith(GlobalObject.objectType_Base) && !eot.FullPathCN.EndsWith("OPC"))
&& !eot.FullPathCN.EndsWith("图框") && !eot.FullPathCN.EndsWith(GlobalObject.objectType_Base) && !eot.FullPathCN.EndsWith(GlobalObject.objectType_OPC))
.Select((edp, ede, eot) => edp.EngineDataID)
.Distinct()
.ToList();
@ -753,7 +753,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
.LeftJoin<ec_enginedataEntity>((edp, ede) => edp.EngineDataID == ede.EngineDataID).AS<ec_enginedataEntity>(enginedataTableName)
.LeftJoin<ec_objecttypeEntity>((edp, ede, eot) => ede.ObjectTypeID == eot.ObjectTypeID).AS<ec_objecttypeEntity>(objectTypeTableName)
.Where((edp, ede, eot) => edp.DeleteFlg == 0 && edp.DrawingFileID == drawingFileID
&& !eot.FullPathCN.EndsWith("图框") && !eot.FullPathCN.EndsWith(GlobalObject.objectType_Base) && !eot.FullPathCN.EndsWith("OPC"))
&& !eot.FullPathCN.EndsWith("图框") && !eot.FullPathCN.EndsWith(GlobalObject.objectType_Base) && !eot.FullPathCN.EndsWith(GlobalObject.objectType_OPC))
.Select((edp, ede, eot) => edp.EngineDataID)
.Distinct()
.ToList();
@ -1212,7 +1212,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
// 筛选出“真实设备”这里排除OPC、通讯器等中转对象
var deviceTags = endpointInfo
.Where(x => !x.objectType?.Contains("OPC") ?? false)
.Where(x => !x.objectType?.Contains(GlobalObject.objectType_OPC) ?? false)
.Select(x => x.tagNumber)
.Where(tag => !string.IsNullOrWhiteSpace(tag))
.Distinct()

View File

@ -13,7 +13,7 @@ using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Threading.Tasks;
using static Learun.Application.TwoDevelopment.ZZDT_EC.ProjectSugar;
using static Learun.Util.SqlSugar.SqlSugarHelper;
@ -1348,7 +1348,7 @@ Select((a, b, c) => new
//根据句柄和图纸先把工程id查出来先
var drawingID = CablePixelID.DrawingID;
var pixelID = CablePixelID.CablePixelID;
var EngineDataIDs = pixelServ.GetList("{\"ProjectId\":\"" + ProjectId + "\",\"PixelCode\":\"" + pixelID + "\",\"DrawingFileID\":\"" + drawingID + "\"}").
var EngineDataIDs = pixelServ.GetList("{\"ProjectId\":\"" + ProjectId + "\",\"PixelCode\":\"" + pixelID + "\",\"DrawingFileID\":\"" + drawingID + "\"}", ProjectId).
Select(x => x.EngineDataID).Distinct();
if (EngineDataIDs != null && EngineDataIDs.Count() == 1)
{
@ -1395,7 +1395,19 @@ Select((a, b, c) => new
var End2 = new ec_enginedata_relEntity();
//查单一记录
var existRel = this.GetList("{ProjectId:\"" + ProjectId + "\",RelType:\"" + (int)enum_RelType._电缆 + "\",RelEngineDataID:\"" + CableID + "\"}").ToList();
if (existRel.Any(x => !string.IsNullOrEmpty(x.OPCPixel)))
//需要换判断了,现在所有东西都有存这个
var tagIds = existRel.Select(x => x.RelEngineData1ID).ToList();
tagIds.AddRange(existRel.Select(x => x.RelEngineData2ID).ToList());
tagIds = tagIds.Where(X => X != CableID).Distinct().ToList();
var tbName = ProjectSugar.TableName<ec_enginedataEntity>(ProjectId);
var typeTbName = ProjectSugar.TableName<ec_objecttypeEntity>(ProjectId);
var tags = SqlSugarHelper.Db.Queryable<ec_enginedataEntity>().AS(tbName).
InnerJoin<ec_objecttypeEntity>((t, t2) => t.ObjectTypeID == t2.ObjectTypeID).AS<ec_objecttypeEntity>(typeTbName).
Where(t => tagIds.Contains(t.EngineDataID)).
Select((t, t2) => new { t.EngineDataID, t.TagNumber, t2.ObjectTypeName }).ToList();
if (tags.Any(x => x.ObjectTypeName == GlobalObject.objectType_OPC))
{
//OPC
var tb = ProjectSugar.TableName<ec_enginedata_pixelEntity>(ProjectId);
@ -1420,6 +1432,7 @@ Select((a, b, c) => new
}
else
{
//正常情况
existRel = existRel.Where(X => X.RelEngineData1ID != opcId.EngineDataID && X.RelEngineData2ID != opcId.EngineDataID).ToList();//排除opc的留下电缆的
}
}
@ -1444,11 +1457,11 @@ Select((a, b, c) => new
}
public class ec_enginedataEntity_2: ec_enginedataEntity
public class ec_enginedataEntity_2 : ec_enginedataEntity
{
}
public class ec_objecttypeEntity_2: ec_objecttypeEntity
public class ec_objecttypeEntity_2 : ec_objecttypeEntity
{
}
@ -1491,7 +1504,7 @@ Select((a, b, c) => new
.WhereIF(!string.IsNullOrEmpty(RelEngineData2ID), a => a.RelEngineData2ID == RelEngineData2ID)
.WhereIF(!string.IsNullOrEmpty(RelTypeName), (a, b) => b.RelTypeName == RelTypeName)
.WhereIF(!string.IsNullOrEmpty(RelType), (a, b) => b.RelType == RelType)
.Select((a, b, t1,t2,o1,o2) => new ec_enginedata_relEntity
.Select((a, b, t1, t2, o1, o2) => new ec_enginedata_relEntity
{
EngineDataRelID = a.EngineDataRelID,
RelTypeID = a.RelTypeID,
@ -1529,7 +1542,7 @@ Select((a, b, c) => new
// dataIds.Add(x.RelEngineData1ID);
// dataIds.Add(x.RelEngineData2ID);
//});
//dataIds.AddRange(list?.Select(x => x.RelEngineData1ID).Distinct());
//dataIds.AddRange(list?.Select(x => x.RelEngineData2ID).Distinct());
//dataIds = dataIds.Distinct().ToList();
@ -1633,7 +1646,7 @@ Select((a, b, c) => new
/// <param name="NeedRemove">是否移除已有的true的话基本就是确保一对一的这种rel关系</param>
/// <summary>
/// <returns></returns>
public void SaveEntitys(string ProjectId, string RelTypeID, string RelEngineData1ID, List<string> relEngineData2IDs, bool NeedRemove = false)
public void SaveEntitys(string ProjectId, string RelTypeID, string RelEngineData1ID, List<string> relEngineData2IDs, string tagPixelId, bool NeedRemove = false)
{
try
{
@ -1688,7 +1701,7 @@ Select((a, b, c) => new
}
//engineDataRelDel = engineDataRel.Except(engineDataRelExcept).ToList();
List<string> delEngineDataRelIDs = new List<string>(); //engineDataRelDel.Select(x => x.EngineDataRelID).ToList();
ec_enginedata_relService.SaveEntity(ProjectId, engineDataRelAdd, delEngineDataRelIDs);
ec_enginedata_relService.SaveEntity(ProjectId, engineDataRelAdd, delEngineDataRelIDs); //电缆在end1进行最后的保存
}
catch (Exception ex)
{
@ -1711,7 +1724,7 @@ Select((a, b, c) => new
/// <param name="RelEngineData1IDs"></param>
/// <param name="relEngineData2ID">电缆ID大概率</param>
/// <param name="NeedRemove"></param>
public void SaveEntitys(string ProjectId, string RelTypeID, List<string> RelEngineData1IDs, string relEngineData2ID, bool NeedRemove = false)
public void SaveEntitys(string ProjectId, string RelTypeID, List<string> RelEngineData1IDs, string relEngineData2ID, string tagPixelId, bool NeedRemove = false)
{
try
{
@ -1726,7 +1739,6 @@ Select((a, b, c) => new
foreach (var item in RelEngineData1IDs)
{
//判断下是否为OPC
if (NeedRemove)
{
@ -1759,6 +1771,7 @@ Select((a, b, c) => new
model.RelTypeID = RelTypeID;
model.RelEngineData1ID = item;
model.RelEngineData2ID = relEngineData2ID;
model.OPCPixel = tagPixelId;
engineDataRelAdd.Add(model);
continue;
}
@ -1775,7 +1788,7 @@ Select((a, b, c) => new
}
//engineDataRelDel = engineDataRel.Except(engineDataRelExcept).ToList();
List<string> delEngineDataRelIDs = new List<string>(); //engineDataRelDel.Select(x => x.EngineDataRelID).ToList();
ec_enginedata_relService.SaveEntity(ProjectId, engineDataRelAdd, delEngineDataRelIDs);
ec_enginedata_relService.SaveEntity(ProjectId, engineDataRelAdd, delEngineDataRelIDs);//电缆在end2进行最后的保存
}
catch (Exception ex)
{

View File

@ -35,10 +35,10 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
/// <param name="keyValue">主键</param>
/// <summary>
/// <returns></returns>
void SaveEntitys(string ProjectId, string RelTypeID, string RelEngineData1ID, List<string> relEngineData2IDs, bool NeedRemove = false);
void SaveEntitys(string ProjectId, string RelTypeID, string RelEngineData1ID, List<string> relEngineData2IDs, string tagPixeId, bool NeedRemove = false);
void SaveEntitys(string ProjectId, string RelTypeID, List<string> RelEngineData1IDs, string relEngineData2ID, string tagPixeId, bool NeedRemove = false);
void SaveEntitys(string ProjectId, string RelTypeID, List<string> RelEngineData1IDs, string relEngineData2ID, bool NeedRemove = false);
#endregion

View File

@ -116,29 +116,54 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
if (!string.IsNullOrEmpty(objectTypeID))
{
RES = RES.Where(X => objectTypeID.Split(',').ToList().Contains(X.ObjectTypeID)).ToList();
RES = RES.Where(X => objectTypeID.Split(',').Contains(X.ObjectTypeID)).ToList();
}
var propBll = new ec_propertyBLL();
var allProp = propBll.GetListRedis(ProjectId);
// 提前构建Dictionary键为PropertyID值为对应的AllProp对象
var allPropDict = allProp.ToDictionary(x => x.PropertyID);
var propGroupBll = new ec_propertygBLL();
var allGroup = propGroupBll.GetList("{ProjectId:\"" + ProjectId + "\"}");
var allGroupDict = allGroup.ToDictionary(x => x.PropertyGID);
var unitTypeBll = new ec_measuring_unittypeBLL();
var allUnitType = unitTypeBll.GetList("{ProjectId:\"" + ProjectId + "\"}");
var allUnitTypeDict = allUnitType.ToDictionary(x => x.MeasuringUnitTypeID);
var unitBll = new ec_measuring_unitBLL();
var allUnit = unitBll.GetListRedis(ProjectId);
var allUnitDict = allUnit.ToDictionary(x => x.MeasuringUnitID);
var detailBll = new ec_dataitemBLL();
var allDics = detailBll.GetList("{ProjectId:\"" + ProjectId + "\"}");
var allDetails = detailBll.GetDetailList("", "", ProjectId);
var detailsDictGrouped = allDetails.GroupBy(x => x.DataItemID).ToDictionary(g => g.Key, g => g.ToList());//按照DataItemID分组
//strSql.Append($" FROM ec_objecttypep_{ProjectEntity.ProjectIndex} t1 ");
if (isLoadExtraData)
{
foreach (var objectTypeProp in RES)
{
var t2 = allProp.FirstOrDefault(x => x.PropertyID == objectTypeProp.PropertyID);
if (t2 == null) { continue; }
var t3 = allGroup.FirstOrDefault(x => x.PropertyGID == t2.PropertyGID);
if (t3 == null) { continue; }
;
// 用TryGetValue快速查询O(1)时间)
if (allPropDict.TryGetValue(objectTypeProp.PropertyID, out var t2))
{
// 找到匹配项处理t2
}
else
{
// 未找到匹配项的处理逻辑
continue;
}
//var t2 = allProp.FirstOrDefault(x => x.PropertyID == objectTypeProp.PropertyID);
//if (t2 == null) { continue; }
if (allGroupDict.TryGetValue(t2.PropertyGID, out var t3))
{
// 找到匹配项处理t2
}
else
{
// 未找到匹配项的处理逻辑
continue;
}
//var t3 = allGroup.FirstOrDefault(x => x.PropertyGID == t2.PropertyGID);
//if (t3 == null) { continue; }
//;
objectTypeProp.PropertyName = t2.PropertyName;
objectTypeProp.PropertyNameEN = t2.PropertyNameEN;
objectTypeProp.PropertyType = t2.PropertyType;
@ -158,17 +183,26 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
objectTypeProp.PropertyGroupName = t3.PropertyGroupName;
objectTypeProp.PropertyGID = t3.PropertyGID;
if (allUnitTypeDict.TryGetValue(t2.MeasuringUnitTypeID, out var t4))
{
// 找到匹配项处理t2
objectTypeProp.MeasuringUnitTypeName = t4.MeasuringUnitTypeName;
objectTypeProp.MeasuringUnitTypeName = allUnitType.FirstOrDefault(x => x.MeasuringUnitTypeID == t2.MeasuringUnitTypeID)?.MeasuringUnitTypeName;
objectTypeProp.DefaultUnitName = allUnit.FirstOrDefault(x => x.MeasuringUnitID == t2.DefaultUnit)?.MeasuringUnitName;
}
if (allUnitDict.TryGetValue(t2.DefaultUnit, out var t5))
{
objectTypeProp.DefaultUnitName = t5.MeasuringUnitName;
}
if (!string.IsNullOrEmpty(t2.EnumData))
{
var Dic = allDics.FirstOrDefault(X => t2.EnumData == X.DataItemName || t2.EnumData == X.DataItemCode);
var Dic = allDics.FirstOrDefault(X => t2.EnumData == X.DataItemName || t2.EnumData == X.DataItemCode);//不是按照id来找
if (Dic != null)
{
foreach (var detail in allDetails.Where(x => x.DataItemID == Dic.DataItemID))
foreach (ec_dataitemdetailEntity detail in detailsDictGrouped[Dic.DataItemID])// allDetails.Where(x => x.DataItemID == Dic.DataItemID))
{
if (!string.IsNullOrEmpty(detail.DataItemNameEN) && Dic.ShowEN == 1)
{
@ -215,16 +249,19 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
{
var tObjectType = ProjectSugar.TableName<ec_objecttypeEntity>(ProjectId);
var tobjTypeAll = SqlSugarHelper.Db.Queryable<ec_objecttypeEntity>().AS(tObjectType).ToList();
var tobjTypeDict = tobjTypeAll.ToDictionary(x => x.ObjectTypeID);
foreach (var item in objectTypeID.Split(','))
{
var pObjectType = RES.Where(x => x.ObjectTypeID == item).ToList();
var tobjType = tobjTypeAll.First(x => x.ObjectTypeID == item);
var pObjectType = RES.Where(x => x.ObjectTypeID == item).ToList();//每种类型下的属性
var tobjType = tobjTypeDict[item];//每种类型的名字
// 提前提取所有PropertyName到HashSet仅需一次遍历
var propertyNames = new HashSet<string>(pObjectType.Select(x => x.PropertyName));//每种类型下的属性的名字
if (tobjType.ObjectTypeName.EndsWith("电缆"))
{
if (!pObjectType.Any(X => X.PropertyName == GlobalObject.propName_parallelCableCombineName))
if (!propertyNames.Any(X => X == GlobalObject.propName_parallelCableCombineName))
{
ec_objecttypepEntity UDF_01 = new ec_objecttypepEntity();
UDF_01.ObjectTypePID = Guid.NewGuid().ToString();
@ -236,7 +273,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
RES.Add(UDF_01);
}
if (!pObjectType.Any(X => X.PropertyName == GlobalObject.propName_parallelCableList))
if (!propertyNames.Any(X => X == GlobalObject.propName_parallelCableList))
{
ec_objecttypepEntity UDF_02 = new ec_objecttypepEntity();
UDF_02.ObjectTypePID = Guid.NewGuid().ToString();