完善了材料表的接口逻辑
This commit is contained in:
parent
6351a1dab3
commit
1242b32386
@ -4,12 +4,14 @@ using Learun.Util.SqlSugar;
|
|||||||
using NPOI.SS.Formula.Functions;
|
using NPOI.SS.Formula.Functions;
|
||||||
using NPOI.SS.Formula.PTG;
|
using NPOI.SS.Formula.PTG;
|
||||||
using NPOI.Util.Collections;
|
using NPOI.Util.Collections;
|
||||||
|
using OfficeOpenXml.Drawing.Vml;
|
||||||
using Pipelines.Sockets.Unofficial.Arenas;
|
using Pipelines.Sockets.Unofficial.Arenas;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Runtime;
|
using System.Runtime;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
using System.Web.Http;
|
using System.Web.Http;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
@ -31,15 +33,18 @@ namespace Learun.Application.Web.AppApi
|
|||||||
[HttpGet]
|
[HttpGet]
|
||||||
public IHttpActionResult GetBOMGroupInfo(string ProjectId = "c151f5d4-cbe1-4522-945c-501b1ad990d5", string drawingId = "277d883d-e271-45e4-990b-926585321fa8")
|
public IHttpActionResult GetBOMGroupInfo(string ProjectId = "c151f5d4-cbe1-4522-945c-501b1ad990d5", string drawingId = "277d883d-e271-45e4-990b-926585321fa8")
|
||||||
{
|
{
|
||||||
var res = new List<BOMGroupInfo>();
|
var res = new List<BOMGroupInfo>();//声明结果
|
||||||
|
|
||||||
|
#region 表名
|
||||||
var typeTbName = ProjectSugar.TableName<ec_objecttypeEntity>(ProjectId);
|
var typeTbName = ProjectSugar.TableName<ec_objecttypeEntity>(ProjectId);
|
||||||
var pixelTbName = ProjectSugar.TableName<ec_enginedata_pixelEntity>(ProjectId);
|
var pixelTbName = ProjectSugar.TableName<ec_enginedata_pixelEntity>(ProjectId);
|
||||||
var tagTbName = ProjectSugar.TableName<ec_enginedataEntity>(ProjectId);
|
var tagTbName = ProjectSugar.TableName<ec_enginedataEntity>(ProjectId);
|
||||||
var propTbName = ProjectSugar.TableName<ec_enginedata_propertyEntity>(ProjectId);
|
var propTbName = ProjectSugar.TableName<ec_enginedata_propertyEntity>(ProjectId);
|
||||||
|
var fileTbName = ProjectSugar.TableName<ec_library_fileEntity>(ProjectId);
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
#region 全局数据
|
||||||
var allTag = SqlSugarHelper.Db.Queryable<ec_enginedataEntity>().AS(tagTbName)
|
var allTag = SqlSugarHelper.Db.Queryable<ec_enginedataEntity>().AS(tagTbName)
|
||||||
.InnerJoin<ec_enginedata_pixelEntity>((t, p) => t.EngineDataID == p.EngineDataID && p.DrawingFileID == drawingId)
|
.InnerJoin<ec_enginedata_pixelEntity>((t, p) => t.EngineDataID == p.EngineDataID && p.DrawingFileID == drawingId)
|
||||||
.AS<ec_enginedata_pixelEntity>(pixelTbName)
|
.AS<ec_enginedata_pixelEntity>(pixelTbName)
|
||||||
@ -50,6 +55,15 @@ namespace Learun.Application.Web.AppApi
|
|||||||
.Where(x => allTag.Select(t => t.EngineDataID).Contains(x.EngineDataID))
|
.Where(x => allTag.Select(t => t.EngineDataID).Contains(x.EngineDataID))
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
|
var allType = SqlSugarHelper.Db.Queryable<ec_objecttypeEntity>().AS(typeTbName)
|
||||||
|
.Where(x => allTag.Select(t => t.ObjectTypeID).Contains(x.ObjectTypeID))
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
var allLib = SqlSugarHelper.Db.Queryable<ec_library_fileEntity>().AS(fileTbName)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
//1.先按类型分组
|
//1.先按类型分组
|
||||||
//2.去除tagnumber下的右侧数字
|
//2.去除tagnumber下的右侧数字
|
||||||
|
|
||||||
@ -58,82 +72,84 @@ namespace Learun.Application.Web.AppApi
|
|||||||
//设备型号 和 厂商
|
//设备型号 和 厂商
|
||||||
|
|
||||||
|
|
||||||
var TagsInBOM = new List<TagInBOM>();
|
var TagsInBOM = new List<BOMTagInfo>();
|
||||||
|
|
||||||
|
#region 预处理每个位号,然后进行分组
|
||||||
foreach (ec_enginedataEntity tag in allTag)
|
foreach (ec_enginedataEntity tag in allTag)
|
||||||
{
|
{
|
||||||
var matchedTypes = new List<string>();
|
var matchedTypes = new List<string>();
|
||||||
|
var idx = 0;
|
||||||
|
var GroupName = TrimTagNubmer(tag.TagNumber, out idx);// 如 A-B1,A-B2,取出来的group就是A-B,idx为0
|
||||||
|
var seq = tag.TagNumber.Substring(idx).Replace(GroupName, "");// 1,2
|
||||||
|
|
||||||
|
var BOMTagInfo = new BOMTagInfo()
|
||||||
|
{
|
||||||
|
objectTypeId = tag.ObjectTypeID,
|
||||||
|
TagNumber = tag.TagNumber,
|
||||||
|
Group = GroupName,// 如 A-B1,A-B2,
|
||||||
|
vendor = allProp.FirstOrDefault(x => x.EngineDataID == tag.EngineDataID && x.PropertyName == "厂商")?.PropertyValue ?? "",
|
||||||
|
Spec = allProp.FirstOrDefault(x => x.EngineDataID == tag.EngineDataID && x.PropertyName == "设备型号")?.PropertyValue ?? "",
|
||||||
|
Name = "",
|
||||||
|
Seq = seq
|
||||||
|
};
|
||||||
//???特定类型的,还需要额外根据”中文名称“来分组,比如照明设备类型下的所有设备
|
//???特定类型的,还需要额外根据”中文名称“来分组,比如照明设备类型下的所有设备
|
||||||
if (matchedTypes.Contains(tag.ObjectTypeID))
|
if (matchedTypes.Contains(tag.ObjectTypeID))
|
||||||
{
|
{
|
||||||
//如照明下的。比如10个照明的灯,4个中文名称是“顶灯”,6个中文名称是“壁灯”
|
//如照明下的。比如10个照明的灯,4个中文名称是“顶灯”,6个中文名称是“壁灯”
|
||||||
TagsInBOM.Add(new TagInBOM()
|
BOMTagInfo.Name = allProp.FirstOrDefault(x => x.EngineDataID == tag.EngineDataID && x.PropertyName == GlobalObject.propName_NameCN)?.PropertyValue ?? "";
|
||||||
{
|
|
||||||
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 = ""
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TagsInBOM.Add(BOMTagInfo);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
var groups = TagsInBOM.GroupBy(x => new { x.objectTypeId, x.TagNumber, x.vendor, x.model, x.Name }).ToList();
|
var groups = TagsInBOM.GroupBy(x => new { x.objectTypeId, x.Group, x.vendor, x.Spec, x.Name }).ToList();
|
||||||
|
#endregion
|
||||||
foreach (var group in groups)
|
foreach (var group in groups)
|
||||||
{
|
{
|
||||||
var text = group.Key.TagNumber; //A-ABC, 正常情况下A是system,放下面;B是tag,放上面
|
List<BOMTagInfo> allTagsInThisGroup = group.ToList();
|
||||||
var upper_text_Part1 = text.Split('-')[1];//ABC
|
var GroupName = group.Key.Group; //A-ABC, 正常情况下A是system,放下面;B是tag,放上面
|
||||||
|
var upper_text_Part1 = GroupName.Split('-')[1];//ABC
|
||||||
var upper_text_Part2 = "";//seq
|
var upper_text_Part2 = "";//seq
|
||||||
#region seq的不同情况
|
#region seq的不同情况
|
||||||
//TAG如果一样的就取这个TAG就行???
|
//得到每个位号下的seq
|
||||||
|
|
||||||
|
var allSeqText = allTagsInThisGroup.OrderBy(x => x.Seq).Select(x => x.Seq).ToList();
|
||||||
|
var allSeq = ExtractNumbers(allSeqText);//把1A 1B 这种情况也处理了,变成1,1
|
||||||
|
if (allSeq.Distinct().Count() == 1)
|
||||||
|
{
|
||||||
|
//TAG如果一样的就取这个TAG就行???
|
||||||
|
upper_text_Part2 = allSeqText.First();
|
||||||
|
}
|
||||||
//数里小于等于2个
|
//数里小于等于2个
|
||||||
if (group.Count() <= 2)
|
else if (allTagsInThisGroup.Count <= 2)
|
||||||
{
|
{
|
||||||
//遍历每一个group下的原始 ec_enginedataEntity.TagNumber里的数字。比如2个分别是 1 2 那么就显示1,2
|
//遍历每一个group下的原始 ec_enginedataEntity.TagNumber里的数字。比如2个分别是 1 2 那么就显示1,2
|
||||||
upper_text_Part2 = "1,2";
|
//就是这里就是2个,因为1个的话第一个if已经处理了
|
||||||
|
upper_text_Part2 = allSeqText[0] + "," + allSeqText[1];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//遍历每一个group下的原始 ec_enginedataEntity.TagNumber里的数字
|
//遍历每一个group下的原始 ec_enginedataEntity.TagNumber里的数字
|
||||||
bool isContinue = true;//是否是连续的
|
//有一种情况还需要明确 1A 1B 1C这种???????
|
||||||
if (isContinue)
|
upper_text_Part2 = ec_enginedataEntity.FindConsecutiveSequences(allSeq).ToString();
|
||||||
{
|
|
||||||
//如果是连续的就显示 1~5
|
|
||||||
upper_text_Part2 = "1~5";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//还要分段去判断是否有部分连续的。如1~3,5,7~9
|
|
||||||
|
|
||||||
upper_text_Part2 = "1~3,5,7~9";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
var typeInfo = allType.FirstOrDefault(x => x.ObjectTypeID == group.Key.objectTypeId);
|
||||||
|
|
||||||
var BOMGroupInfo = new BOMGroupInfo
|
var BOMGroupInfo = new BOMGroupInfo
|
||||||
{
|
{
|
||||||
upper_text = upper_text_Part1 + upper_text_Part2,
|
upper_text = upper_text_Part1 + upper_text_Part2,
|
||||||
lower_text = text.Split('-')[0],//A
|
lower_text = GroupName.Split('-')[0],//A
|
||||||
Count = group.Count(),
|
Count = group.Count(),
|
||||||
Remark = group.Key.vendor,
|
Remark = group.Key.vendor,
|
||||||
Spec = group.Key.model,
|
Spec = group.Key.Spec,
|
||||||
FileId = GetSymbolForBOM(group.Key.objectTypeId)
|
FileId = GetSymbolForBOM(typeInfo, allLib)
|
||||||
};
|
};
|
||||||
|
|
||||||
if (BOMGroupInfo.upper_text == BOMGroupInfo.lower_text)
|
if (BOMGroupInfo.upper_text == BOMGroupInfo.lower_text)
|
||||||
@ -147,35 +163,82 @@ namespace Learun.Application.Web.AppApi
|
|||||||
return Success(res);
|
return Success(res);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// 从字符串中提取数字(可能出现1A 1B这样的情况)
|
||||||
|
/// </summary>
|
||||||
|
private static List<int> ExtractNumbers(List<string> stringNumbers)
|
||||||
|
{
|
||||||
|
var numbers = new List<int>();
|
||||||
|
if (stringNumbers == null || !stringNumbers.Any())
|
||||||
|
return numbers;
|
||||||
|
|
||||||
|
// 正则表达式:匹配字符串中的所有数字
|
||||||
|
var regex = new Regex(@"\d+");
|
||||||
|
|
||||||
|
foreach (var str in stringNumbers)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(str))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// 提取字符串中的第一个数字(如"1a"提取1,"a2b3"提取2)
|
||||||
|
var match = regex.Match(str);
|
||||||
|
if (match.Success && int.TryParse(match.Value, out int num))
|
||||||
|
{
|
||||||
|
numbers.Add(num);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return numbers;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
/// 决定应该用哪个symbol
|
/// 决定应该用哪个symbol
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="objectTypeId"></param>
|
/// <param name="objectTypeId"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
string GetSymbolForBOM(string objectTypeId)
|
string GetSymbolForBOM(ec_objecttypeEntity T, List<ec_library_fileEntity> allLib)
|
||||||
{
|
{
|
||||||
|
var fileId = "default";
|
||||||
|
//3个level,
|
||||||
|
//1.插件端文件夹下的某个默认symbol
|
||||||
|
var fileIdOnType = allLib.FirstOrDefault(x => x.LibraryFileID == T.DefaultBOMFileID);
|
||||||
|
if (fileIdOnType != null)
|
||||||
|
{
|
||||||
|
return fileIdOnType.LibraryFileID;
|
||||||
|
}
|
||||||
|
//2.对象类型下的默认symbol
|
||||||
|
//3.满足某个细分类型的symbol(比如按中文名称来分组的一些特别东西)
|
||||||
//马达,圆形
|
//马达,圆形
|
||||||
//通讯设备-外通设备-天线,三角形
|
//通讯设备-外通设备-天线,三角形
|
||||||
return "";
|
|
||||||
|
|
||||||
|
return fileId;
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 去除tagnumber下的右侧数字
|
/// 去除tagnumber下的右侧数字
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="tagNumber"></param>
|
/// <param name="tagNumber"></param>
|
||||||
|
/// <param name="replaceStartIdx">去除数字后的段落,是整个tagNumber的第几位</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
string TrimTagNubmer(string tagNumber)
|
string TrimTagNubmer(string tagNumber, out int replaceStartIdx)
|
||||||
{
|
{
|
||||||
//1MAC-PT1 和 1MAC-PT2 归为一组,剩下的是1MAC-PT ,而不是MAC-PT
|
//1MAC-PT1 和 1MAC-PT2 归为一组,剩下的是1MAC-PT ,而不是MAC-PT
|
||||||
// 还要考虑1A 1B这种后缀情况
|
// 还要考虑1A 1B这种后缀情况
|
||||||
//1MAC-PT1A 1MAC-PT1B 归为一组,剩下的是1MAC-PT,而不是变成1MAC-PT1A 和 1MAC-PT1B
|
//1MAC-PT1A 1MAC-PT1B 归为一组,剩下的是1MAC-PT,而不是变成1MAC-PT1A 和 1MAC-PT1B
|
||||||
|
|
||||||
|
replaceStartIdx = 0;
|
||||||
return tagNumber;
|
return tagNumber;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public class TagInBOM
|
public class BOMTagInfo
|
||||||
{
|
{
|
||||||
public string objectTypeId { set; get; }
|
public string objectTypeId { set; get; }
|
||||||
public string TagNumber { set; get; }
|
public string TagNumber { set; get; }
|
||||||
|
public string Group { set; get; }
|
||||||
|
/// <summary>
|
||||||
|
/// 正常情况下 Group + Seq = TagNumber
|
||||||
|
/// </summary>
|
||||||
|
public string Seq { set; get; }
|
||||||
public string vendor { set; get; }
|
public string vendor { set; get; }
|
||||||
public string model { set; get; }
|
public string Spec { set; get; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 中文名称
|
/// 中文名称
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -26,9 +26,13 @@
|
|||||||
<input id="ObjectTypeNameEN" type="text" class="form-control input_right" />
|
<input id="ObjectTypeNameEN" type="text" class="form-control input_right" />
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-12 lr-form-item" data-table="ec_objecttype">
|
<div class="col-xs-12 lr-form-item" data-table="ec_objecttype">
|
||||||
<div class="lr-form-item-title">默认的布置图图例(库文件)</div>
|
<div class="lr-form-item-title">默认布置图图例</div>
|
||||||
<div id="DefaultLayoutLibFileID" class="input_right"></div>
|
<div id="DefaultLayoutLibFileID" class="input_right"></div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-xs-12 lr-form-item" data-table="ec_objecttype">
|
||||||
|
<div class="lr-form-item-title">默认材料表图例</div>
|
||||||
|
<div id="DefaultBOMFileID" class="input_right"></div>
|
||||||
|
</div>
|
||||||
<div class="col-xs-12 lr-form-item" data-table="ec_objecttype">
|
<div class="col-xs-12 lr-form-item" data-table="ec_objecttype">
|
||||||
<div class="lr-form-item-title">排序<font face="宋体">*</font></div>
|
<div class="lr-form-item-title">排序<font face="宋体">*</font></div>
|
||||||
<input id="OrderID" type="text" class="form-control input_right" isvalid="yes" checkexpession="NotNull" onkeyup="value=value.replace(/[^\d]/g,'')" />
|
<input id="OrderID" type="text" class="form-control input_right" isvalid="yes" checkexpession="NotNull" onkeyup="value=value.replace(/[^\d]/g,'')" />
|
||||||
@ -46,20 +50,20 @@
|
|||||||
<div id="specialType" class="input_right"></div>
|
<div id="specialType" class="input_right"></div>
|
||||||
</div>
|
</div>
|
||||||
@*<div class="col-xs-12 lr-form-item" data-table="ec_objecttype">
|
@*<div class="col-xs-12 lr-form-item" data-table="ec_objecttype">
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<label>
|
<label>
|
||||||
<input id="SystemPanel" type="checkbox" />
|
<input id="SystemPanel" type="checkbox" />
|
||||||
是否属于系统柜
|
是否属于系统柜
|
||||||
</label>
|
</label>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="col-xs-12 lr-form-item" data-table="ec_objecttype">
|
||||||
<div class="col-xs-12 lr-form-item" data-table="ec_objecttype">
|
<div class="checkbox">
|
||||||
<div class="checkbox">
|
<label>
|
||||||
<label>
|
<input id="IsElecFirstLevel" type="checkbox" />
|
||||||
<input id="IsElecFirstLevel" type="checkbox" />
|
是否属于电力一次
|
||||||
是否属于电力一次
|
</label>
|
||||||
</label>
|
</div>
|
||||||
</div>
|
</div>*@
|
||||||
</div>*@
|
|
||||||
</div>
|
</div>
|
||||||
@Html.AppendJsFile("/Areas/ZZDT_EC/Views/ec_objecttype/Form.js")
|
@Html.AppendJsFile("/Areas/ZZDT_EC/Views/ec_objecttype/Form.js")
|
||||||
|
@ -8,6 +8,7 @@ var acceptClick;
|
|||||||
var keyValue = request('keyValue');
|
var keyValue = request('keyValue');
|
||||||
var UpObjectTypeID = request('UpObjectTypeID');
|
var UpObjectTypeID = request('UpObjectTypeID');
|
||||||
var ProjectId = request('ProjectId');
|
var ProjectId = request('ProjectId');
|
||||||
|
var DefaultBOMFileID = '';
|
||||||
var selectedSpecialType = '';
|
var selectedSpecialType = '';
|
||||||
var bootstrap = function ($, learun) {
|
var bootstrap = function ($, learun) {
|
||||||
"use strict";
|
"use strict";
|
||||||
@ -32,6 +33,13 @@ var bootstrap = function ($, learun) {
|
|||||||
allowSearch: true,
|
allowSearch: true,
|
||||||
maxHeight: 225
|
maxHeight: 225
|
||||||
}).lrselectSet(DefaultLayoutLibFileID);//lrselectSet获取下拉框选择的值,传入UpObjectTypeID
|
}).lrselectSet(DefaultLayoutLibFileID);//lrselectSet获取下拉框选择的值,传入UpObjectTypeID
|
||||||
|
$('#DefaultBOMFileID').lrselect({
|
||||||
|
url: top.$.rootUrl + '/ZZDT_EC/ec_library_file/GetTreeDataByObjectType',//获取数据地址
|
||||||
|
param: { ProjectId: ProjectId, ObjectTypeID: keyValue }, //请求后台参数
|
||||||
|
type: 'tree',//数据展示类型: 1.default:普通;2.tree:树形数据;3. treemultiple:树形多选;multiple:普通多选
|
||||||
|
allowSearch: true,
|
||||||
|
maxHeight: 225
|
||||||
|
}).lrselectSet(DefaultBOMFileID);
|
||||||
},
|
},
|
||||||
initData: function () {
|
initData: function () {
|
||||||
// 初始化下拉列表并配置数据
|
// 初始化下拉列表并配置数据
|
||||||
|
@ -3434,6 +3434,7 @@
|
|||||||
<Content Include="SQL\250307\Project\ec_archive_enginedata_3.sql" />
|
<Content Include="SQL\250307\Project\ec_archive_enginedata_3.sql" />
|
||||||
<Content Include="SQL\250307\Project\ec_archive_property_3.sql" />
|
<Content Include="SQL\250307\Project\ec_archive_property_3.sql" />
|
||||||
<Content Include="SQL\250307\Project\ec_archive_rel_3.sql" />
|
<Content Include="SQL\250307\Project\ec_archive_rel_3.sql" />
|
||||||
|
<Content Include="SQL\250902\Project\ec_objecttype.sql" />
|
||||||
<Content Include="SQL\250829\Project\ec_dataItem.sql" />
|
<Content Include="SQL\250829\Project\ec_dataItem.sql" />
|
||||||
<Content Include="SQL\250829\NoProject\ec_project.sql" />
|
<Content Include="SQL\250829\NoProject\ec_project.sql" />
|
||||||
<Content Include="SQL\250825\Project\DWG_PUBLISH.sql" />
|
<Content Include="SQL\250825\Project\DWG_PUBLISH.sql" />
|
||||||
@ -3661,6 +3662,7 @@
|
|||||||
<Folder Include="SQL\250328\NoProject\" />
|
<Folder Include="SQL\250328\NoProject\" />
|
||||||
<Folder Include="SQL\250728\NoProject\" />
|
<Folder Include="SQL\250728\NoProject\" />
|
||||||
<Folder Include="SQL\250825\NoProject\" />
|
<Folder Include="SQL\250825\NoProject\" />
|
||||||
|
<Folder Include="SQL\250902\NoProject\" />
|
||||||
<Folder Include="Views\PlotLayout\" />
|
<Folder Include="Views\PlotLayout\" />
|
||||||
<Folder Include="Views\Property\" />
|
<Folder Include="Views\Property\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
ALTER TABLE ec_objecttype ADD DefaultBOMFileID varchar(100) NULL;
|
@ -1,7 +1,9 @@
|
|||||||
using Learun.Util;
|
using DocumentFormat.OpenXml.EMMA;
|
||||||
|
using Learun.Util;
|
||||||
using SqlSugar;
|
using SqlSugar;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace Learun.Application.TwoDevelopment.ZZDT_EC
|
namespace Learun.Application.TwoDevelopment.ZZDT_EC
|
||||||
{
|
{
|
||||||
@ -15,6 +17,57 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
|
|||||||
[SugarTable(TableName = "ec_enginedata")]
|
[SugarTable(TableName = "ec_enginedata")]
|
||||||
public class ec_enginedataEntity
|
public class ec_enginedataEntity
|
||||||
{
|
{
|
||||||
|
#region 处理seq
|
||||||
|
/// <summary>
|
||||||
|
/// 找出数字集合中所有连续的子序列
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="numbers">输入的数字集合</param>
|
||||||
|
/// <returns>连续子序列的列表,每个元素是一个包含起始和结束的数组</returns>
|
||||||
|
public static List<string> FindConsecutiveSequences(IEnumerable<int> numbers)
|
||||||
|
{
|
||||||
|
var result = new List<int[]>();
|
||||||
|
|
||||||
|
// 处理空集合或null
|
||||||
|
if (numbers == null || !numbers.Any())
|
||||||
|
return new List<string>();
|
||||||
|
|
||||||
|
// 去重并排序
|
||||||
|
var sortedNumbers = numbers.Distinct().OrderBy(n => n).ToList();
|
||||||
|
|
||||||
|
// 初始化第一个区间
|
||||||
|
int start = sortedNumbers[0];
|
||||||
|
int end = sortedNumbers[0];
|
||||||
|
|
||||||
|
// 遍历剩余数字
|
||||||
|
for (int i = 1; i < sortedNumbers.Count; i++)
|
||||||
|
{
|
||||||
|
// 检查当前数字是否与上一个连续
|
||||||
|
if (sortedNumbers[i] == end + 1)
|
||||||
|
{
|
||||||
|
// 连续则扩展当前区间
|
||||||
|
end = sortedNumbers[i];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 不连续则结束当前区间,并开始新区间
|
||||||
|
result.Add(new[] { start, end });
|
||||||
|
start = sortedNumbers[i];
|
||||||
|
end = sortedNumbers[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加最后一个区间
|
||||||
|
result.Add(new[] { start, end });
|
||||||
|
|
||||||
|
|
||||||
|
return result.Select(seq =>
|
||||||
|
seq[0] == seq[1] ? $"{seq[0]}" : $"{seq[0]}~{seq[1]}"
|
||||||
|
).ToList();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
public ec_enginedataEntity()
|
public ec_enginedataEntity()
|
||||||
{
|
{
|
||||||
CaseID = "0";
|
CaseID = "0";
|
||||||
|
@ -31,6 +31,12 @@ namespace Learun.Application.TwoDevelopment.ZZDT_EC
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public string DefaultLayoutLibFileID { get; set; } = "";
|
public string DefaultLayoutLibFileID { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 默认的材料表的图例
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public string DefaultBOMFileID { get; set; } = "";
|
||||||
///// <summary>
|
///// <summary>
|
||||||
///// 默认为0。1代表属于Panel类,要处理ec_panel
|
///// 默认为0。1代表属于Panel类,要处理ec_panel
|
||||||
///// </summary>
|
///// </summary>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user