From c2f35e0495140f826d23256a05b765aaa016d91e Mon Sep 17 00:00:00 2001 From: xingheng Date: Tue, 2 Sep 2025 16:14:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E6=9D=90=E6=96=99=E8=A1=A8=E7=9A=84=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AppApi/PlotBOMApiController.cs | 198 ++++++++++++++++++ .../Learun.Application.Web.csproj | 1 + .../ZZDT_EC/ProjectSugar.cs | 2 +- .../ec_enginedata/ec_enginedataEntity.cs | 2 + .../ZZDT_EC/ec_panel/ec_PanelEntity.cs | 2 +- 5 files changed, 203 insertions(+), 2 deletions(-) create mode 100644 Learun.Application.Web/AppApi/PlotBOMApiController.cs diff --git a/Learun.Application.Web/AppApi/PlotBOMApiController.cs b/Learun.Application.Web/AppApi/PlotBOMApiController.cs new file mode 100644 index 00000000..4130353c --- /dev/null +++ b/Learun.Application.Web/AppApi/PlotBOMApiController.cs @@ -0,0 +1,198 @@ +using Learun.Application.TwoDevelopment.ZZDT_EC; +using Learun.Util; +using Learun.Util.SqlSugar; +using NPOI.SS.Formula.Functions; +using NPOI.SS.Formula.PTG; +using NPOI.Util.Collections; +using Pipelines.Sockets.Unofficial.Arenas; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Runtime; +using System.Web; +using System.Web.Http; +using System.Windows.Controls; + +namespace Learun.Application.Web.AppApi +{ + /// + /// 绘制材料表相关的(By YuXH) + /// + [HandlerApiLogin(FilterMode.Ignore)] + public class PlotBOMApiController : WebApiControllerBase + { + /// + /// 获取材料表绘制所需的分组信息、symbol信息 + /// + /// + /// + /// + [HttpGet] + public IHttpActionResult GetBOMGroupInfo(string ProjectId = "c151f5d4-cbe1-4522-945c-501b1ad990d5", string drawingId = "277d883d-e271-45e4-990b-926585321fa8") + { + var res = new List(); + + var typeTbName = ProjectSugar.TableName(ProjectId); + var pixelTbName = ProjectSugar.TableName(ProjectId); + var tagTbName = ProjectSugar.TableName(ProjectId); + var propTbName = ProjectSugar.TableName(ProjectId); + + + + var allTag = SqlSugarHelper.Db.Queryable().AS(tagTbName) + .InnerJoin((t, p) => t.EngineDataID == p.EngineDataID && p.DrawingFileID == drawingId) + .AS(pixelTbName) + .GroupBy(t => t.ObjectTypeID) + .ToList(); + + var allProp = SqlSugarHelper.Db.Queryable().AS(propTbName) + .Where(x => allTag.Select(t => t.EngineDataID).Contains(x.EngineDataID)) + .ToList(); + + //1.先按类型分组 + //2.去除tagnumber下的右侧数字 + + + //3.再按几个属性分组 + //设备型号 和 厂商 + + + var TagsInBOM = new List(); + foreach (ec_enginedataEntity tag in allTag) + { + var matchedTypes = new List(); + + //???特定类型的,还需要额外根据”中文名称“来分组,比如照明设备类型下的所有设备 + if (matchedTypes.Contains(tag.ObjectTypeID)) + { + //如照明下的。比如10个照明的灯,4个中文名称是“顶灯”,6个中文名称是“壁灯” + TagsInBOM.Add(new TagInBOM() + { + objectTypeId = tag.ObjectTypeID, + TagNumber = TrimTagNubmer(tag.TagNumber),// 如 A-B1,A-B2, + vendor = allProp.FirstOrDefault(x => x.EngineDataID == tag.EngineDataID && x.PropertyName == "厂商")?.PropertyValue ?? "", + model = allProp.FirstOrDefault(x => x.EngineDataID == tag.EngineDataID && x.PropertyName == "设备型号")?.PropertyValue ?? "", + Name = allProp.FirstOrDefault(x => x.EngineDataID == tag.EngineDataID && x.PropertyName == GlobalObject.propName_NameCN)?.PropertyValue ?? "" + }); + } + else + { + TagsInBOM.Add(new TagInBOM() + { + objectTypeId = tag.ObjectTypeID, + TagNumber = TrimTagNubmer(tag.TagNumber),// 如 A-B1,A-B2, + vendor = allProp.FirstOrDefault(x => x.EngineDataID == tag.EngineDataID && x.PropertyName == "厂商")?.PropertyValue ?? "", + model = allProp.FirstOrDefault(x => x.EngineDataID == tag.EngineDataID && x.PropertyName == "设备型号")?.PropertyValue ?? "", + Name = "" + }); + } + + + } + var groups = TagsInBOM.GroupBy(x => new { x.objectTypeId, x.TagNumber, x.vendor, x.model, x.Name }).ToList(); + + foreach (var group in groups) + { + var text = group.Key.TagNumber; //A-ABC, 正常情况下A是system,放下面;B是tag,放上面 + var upper_text_Part1 = text.Split('-')[1];//ABC + var upper_text_Part2 = "";//seq + #region seq的不同情况 + //TAG如果一样的就取这个TAG就行??? + + //数里小于等于2个 + if (group.Count() <= 2) + { + //遍历每一个group下的原始 ec_enginedataEntity.TagNumber里的数字。比如2个分别是 1 2 那么就显示1,2 + upper_text_Part2 = "1,2"; + } + else + { + //遍历每一个group下的原始 ec_enginedataEntity.TagNumber里的数字 + bool isContinue = true;//是否是连续的 + if (isContinue) + { + //如果是连续的就显示 1~5 + upper_text_Part2 = "1~5"; + } + else + { + //还要分段去判断是否有部分连续的。如1~3,5,7~9 + + upper_text_Part2 = "1~3,5,7~9"; + } + } + #endregion + + + + var BOMGroupInfo = new BOMGroupInfo + { + upper_text = upper_text_Part1 + upper_text_Part2, + lower_text = text.Split('-')[0],//A + Count = group.Count(), + Remark = group.Key.vendor, + Spec = group.Key.model, + FileId = GetSymbolForBOM(group.Key.objectTypeId) + }; + + if (BOMGroupInfo.upper_text == BOMGroupInfo.lower_text) + { + //如果SYSTEM等于TAG,那么隐藏SYSTEM + BOMGroupInfo.lower_text = "";// + } + res.Add(BOMGroupInfo); + } + + return Success(res); + } + /// + /// 决定应该用哪个symbol + /// + /// + /// + string GetSymbolForBOM(string objectTypeId) + { + //马达,圆形 + //通讯设备-外通设备-天线,三角形 + return ""; + } + /// + /// 去除tagnumber下的右侧数字 + /// + /// + /// + string TrimTagNubmer(string tagNumber) + { + //1MAC-PT1 和 1MAC-PT2 归为一组,剩下的是1MAC-PT ,而不是MAC-PT + // 还要考虑1A 1B这种后缀情况 + //1MAC-PT1A 1MAC-PT1B 归为一组,剩下的是1MAC-PT,而不是变成1MAC-PT1A 和 1MAC-PT1B + return tagNumber; + } + } + public class TagInBOM + { + public string objectTypeId { set; get; } + public string TagNumber { set; get; } + public string vendor { set; get; } + public string model { set; get; } + /// + /// 中文名称 + /// + public string Name { set; get; } + } + public class BOMGroupInfo + { + public string upper_text { set; get; } + public string lower_text { set; get; } + /// + /// 每一行用的symbol是什么 + /// + public string FileId { set; get; } + public int Count { set; get; } + public string Remark { set; get; } + public string Spec { set; get; } + + } + +} \ No newline at end of file diff --git a/Learun.Application.Web/Learun.Application.Web.csproj b/Learun.Application.Web/Learun.Application.Web.csproj index 1b760ec1..11ae6f30 100644 --- a/Learun.Application.Web/Learun.Application.Web.csproj +++ b/Learun.Application.Web/Learun.Application.Web.csproj @@ -370,6 +370,7 @@ + diff --git a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ProjectSugar.cs b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ProjectSugar.cs index fc0bc1d5..216475c6 100644 --- a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ProjectSugar.cs +++ b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ProjectSugar.cs @@ -14,7 +14,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC private static string redisKey = "_ec_project";//不需要后缀 /// - /// 按项目取表名公用方法 + /// 按项目取表名 /// /// 实体类Entity /// 项目ID或Index diff --git a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_enginedata/ec_enginedataEntity.cs b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_enginedata/ec_enginedataEntity.cs index 329b9db5..803efd84 100644 --- a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_enginedata/ec_enginedataEntity.cs +++ b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_enginedata/ec_enginedataEntity.cs @@ -101,6 +101,8 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC } #endregion #region 扩展字段 + + /// /// import Drawing用 /// diff --git a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_panel/ec_PanelEntity.cs b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_panel/ec_PanelEntity.cs index e94a0c83..3f5c04df 100644 --- a/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_panel/ec_PanelEntity.cs +++ b/Learun.Framework.Module/Learun.Application.Module/Learun.Application.TwoDevelopment/ZZDT_EC/ec_panel/ec_PanelEntity.cs @@ -31,7 +31,7 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC public string Panel_Loc_ID { get; set; } = ""; /// - /// 可用的IO类型 + /// 可用的IO类型。多个类型逗号分开?然后新建端子排时,就会出现对应的IO背后的模板信息(projSetting_IOCardProfile) /// /// public string allowedIOTypes { get; set; } = "";