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; } } }