diff --git a/Tnb.BasicData.Entitys/Class1.cs b/Tnb.BasicData.Entitys/Class1.cs
new file mode 100644
index 00000000..0264ac3e
--- /dev/null
+++ b/Tnb.BasicData.Entitys/Class1.cs
@@ -0,0 +1,7 @@
+namespace Tnb.BasicData.Entitys
+{
+ public class Class1
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/Tnb.BasicData.Entitys/Entity/BasRoute.cs b/Tnb.BasicData.Entitys/Entity/BasRoute.cs
new file mode 100644
index 00000000..64c0d56a
--- /dev/null
+++ b/Tnb.BasicData.Entitys/Entity/BasRoute.cs
@@ -0,0 +1,88 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using JNPF.Common.Contracts;
+using SqlSugar;
+using Tnb.Common.Contracts;
+
+namespace Tnb.BasicData.Entitys.Entity
+{
+ ///
+ /// 工艺路线资料
+ ///
+ [SugarTable("bas_route")]
+ public class BasRoute : BaseEntity
+ {
+ ///
+ /// 工艺路线代码
+ ///
+ [SugarColumn(ColumnName = "route_code")]
+ public string RouteCode { get; set; }
+ ///
+ /// 工艺路线名称
+ ///
+ [SugarColumn(ColumnName = "route_name")]
+ public string RouteName { get; set; }
+ ///
+ /// 工艺路线版本
+ ///
+ [SugarColumn(ColumnName = "version")]
+ public string Version { get; set; }
+ ///
+ /// 工艺路线类型: 标准途程:Standard 返工途程:Rework 试制途程:Trial 返修途程:RMA
+ ///
+ [SugarColumn(ColumnName = "route_type")]
+ public string RouteType { get; set; }
+ ///
+ /// 创建时间
+ ///
+ [SugarColumn(ColumnName = "create_time")]
+ public DateTime CreateTime { get; set; }
+ ///
+ /// 修改时间
+ ///
+ [SugarColumn(ColumnName = "modify_time")]
+ public DateTime? ModifyTime { get; set; }
+ ///
+ /// 扩展字段
+ ///
+ [SugarColumn(ColumnName = "extras")]
+ public string? Extras { get; set; }
+ ///
+ /// 租户ID
+ /// 默认值: NULL::character varying
+ ///
+ [SugarColumn(ColumnName = "tenant_id")]
+ public string? TenantId { get; set; }
+ ///
+ /// 所属组织ID
+ /// 默认值: NULL::character varying
+ ///
+ [SugarColumn(ColumnName = "org_id")]
+ public string? OrgId { get; set; }
+ ///
+ /// 备注
+ /// 默认值: NULL::character varying
+ ///
+ [SugarColumn(ColumnName = "remark")]
+ public string? Remark { get; set; }
+ ///
+ /// 时间戳(用于并发控制)
+ /// 默认值: NULL::character varying
+ ///
+ [SugarColumn(ColumnName = "timestamp")]
+ public string? Timestamp { get; set; }
+ ///
+ /// 创建用户
+ /// 默认值: NULL::character varying
+ ///
+ [SugarColumn(ColumnName = "create_id")]
+ public string? CreateId { get; set; }
+ ///
+ /// 修改用户
+ /// 默认值: NULL::character varying
+ ///
+ [SugarColumn(ColumnName = "modify_id")]
+ public string? ModifyId { get; set; }
+ }
+}
diff --git a/Tnb.BasicData.Entitys/Model/RouteModel.cs b/Tnb.BasicData.Entitys/Model/RouteModel.cs
new file mode 100644
index 00000000..83c5553a
--- /dev/null
+++ b/Tnb.BasicData.Entitys/Model/RouteModel.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tnb.BasicData.Entitys.Model
+{
+ public class RouteTree
+ {
+ ///
+ /// 工艺路线类型
+ ///
+ public string RouteType { get; set; }
+ ///
+ /// 工艺路线名称
+ ///
+ public List RouteName { get; set; }
+
+ }
+
+ public class RouteName
+ {
+ public string Tag { get; set; }
+ ///
+ /// 工艺路线版本
+ ///
+ public List RouteVersion { get; set; }
+ }
+
+
+
+}
diff --git a/Tnb.BasicData.Entitys/Tnb.BasicData.Entitys.csproj b/Tnb.BasicData.Entitys/Tnb.BasicData.Entitys.csproj
new file mode 100644
index 00000000..c2fc7cb8
--- /dev/null
+++ b/Tnb.BasicData.Entitys/Tnb.BasicData.Entitys.csproj
@@ -0,0 +1,18 @@
+
+
+
+ net6.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tnb.BasicData.Interfaces/Tnb.BasicData.Interfaces.csproj b/Tnb.BasicData.Interfaces/Tnb.BasicData.Interfaces.csproj
new file mode 100644
index 00000000..c8883128
--- /dev/null
+++ b/Tnb.BasicData.Interfaces/Tnb.BasicData.Interfaces.csproj
@@ -0,0 +1,14 @@
+
+
+
+ net6.0
+ enable
+ enable
+ True
+
+
+
+
+
+
+
diff --git a/Tnb.BasicData/RouteTreeService.cs b/Tnb.BasicData/RouteTreeService.cs
new file mode 100644
index 00000000..ba86e629
--- /dev/null
+++ b/Tnb.BasicData/RouteTreeService.cs
@@ -0,0 +1,76 @@
+using System.CodeDom;
+using Aspose.Cells;
+using JNPF.Common.Core.Manager;
+using JNPF.DependencyInjection;
+using JNPF.DynamicApiController;
+using JNPF.Systems.Entitys.System;
+using JNPF.Systems.Interfaces.System;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Spire.Presentation;
+using SqlSugar;
+using Tnb.BasicData.Entitys.Entity;
+using Tnb.BasicData.Entitys.Model;
+
+namespace Tnb.BasicData
+{
+ ///
+ /// MOM基础数据服务
+ ///
+ [ApiDescriptionSettings(Tag = "BasicData", Name = "RouteLineTemplate", Order = 700)]
+ [Route("api/Route/[controller]")]
+ public class RouteTreeService : IDynamicApiController, ITransient
+ {
+ private readonly ISqlSugarRepository _repository;
+ private readonly DataBaseManager _dbManager;
+ private readonly IDictionaryDataService _dictionaryDataService;
+
+ public RouteTreeService(
+ IDictionaryDataService dictionaryDataService,
+ ISqlSugarRepository repository,
+ DataBaseManager dbManager)
+ {
+ _dictionaryDataService = dictionaryDataService;
+ _repository = repository;
+ _dbManager = dbManager;
+ }
+ ///
+ /// 返回工艺路线树形结构
+ ///
+ /// 工艺路线模版树形结构
+ [AllowAnonymous]
+ [HttpGet("route-tree")]
+ public async Task> GetRouteTreeList()
+ {
+ var dictaryDataList = await _dictionaryDataService.GetList("24950639717653");
+ var dictaryData = dictaryDataList.ToDictionary(x => x.EnCode, x => x.FullName);
+ SqlSugarScope sugarClient = null!;
+ var result = new List();
+ var momDbLink = await _repository.AsSugarClient().Queryable().FirstAsync(x => x.FullName == "tnb_mom");
+ if (momDbLink != null)
+ {
+ sugarClient = _dbManager.ChangeDataBase(momDbLink);
+ }
+
+ var list = await sugarClient.Queryable().ToListAsync();
+ if (list?.Count > 0)
+ {
+ var routeGroups = list.GroupBy(g => g.RouteType);
+ foreach (var routeGroup in routeGroups)
+ {
+ var routeTree = new RouteTree();
+ routeTree.RouteType = dictaryData.ContainsKey(routeGroup.Key) ? dictaryData[routeGroup.Key] : "";
+ var routeNameGroup = routeGroup.GroupBy(g => new { g.RouteName, g.RouteCode });
+
+ routeTree.RouteName = routeNameGroup.Select(x => new RouteName
+ {
+ Tag = $"{x.Key.RouteName}|{x.Key.RouteCode}",
+ RouteVersion = x.Select(t => t.Version).ToList(),
+ }).ToList();
+ result.Add(routeTree);
+ }
+ }
+ return result;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Tnb.BasicData/Tnb.BasicData.csproj b/Tnb.BasicData/Tnb.BasicData.csproj
new file mode 100644
index 00000000..68439026
--- /dev/null
+++ b/Tnb.BasicData/Tnb.BasicData.csproj
@@ -0,0 +1,17 @@
+
+
+
+ net6.0
+ enable
+ enable
+ True
+
+
+
+
+
+
+
+
+
+
diff --git a/Tnb.Server.sln b/Tnb.Server.sln
index ac6da3f3..f30f130d 100644
--- a/Tnb.Server.sln
+++ b/Tnb.Server.sln
@@ -89,6 +89,14 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tnb.Extend.Interfaces", "ex
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tnb.SqlSugar", "common\Tnb.SqlSugar\Tnb.SqlSugar.csproj", "{E600E59F-18EE-4DBC-8298-BEF4307F69D9}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "09-BasicData", "09-BasicData", "{52B19E13-6B04-444C-A38A-B9955B199A98}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tnb.BasicData.Entitys", "Tnb.BasicData.Entitys\Tnb.BasicData.Entitys.csproj", "{1E09E797-7DFF-49B1-ABB8-290660DB4451}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tnb.BasicData.Interfaces", "Tnb.BasicData.Interfaces\Tnb.BasicData.Interfaces.csproj", "{12A5A0D3-C608-46AB-AC4C-5D5EF729AF8E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tnb.BasicData", "Tnb.BasicData\Tnb.BasicData.csproj", "{C37798AB-AF09-4260-BEF5-92F7D373A4EA}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -215,6 +223,18 @@ Global
{E600E59F-18EE-4DBC-8298-BEF4307F69D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E600E59F-18EE-4DBC-8298-BEF4307F69D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E600E59F-18EE-4DBC-8298-BEF4307F69D9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1E09E797-7DFF-49B1-ABB8-290660DB4451}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1E09E797-7DFF-49B1-ABB8-290660DB4451}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1E09E797-7DFF-49B1-ABB8-290660DB4451}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1E09E797-7DFF-49B1-ABB8-290660DB4451}.Release|Any CPU.Build.0 = Release|Any CPU
+ {12A5A0D3-C608-46AB-AC4C-5D5EF729AF8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {12A5A0D3-C608-46AB-AC4C-5D5EF729AF8E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {12A5A0D3-C608-46AB-AC4C-5D5EF729AF8E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {12A5A0D3-C608-46AB-AC4C-5D5EF729AF8E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C37798AB-AF09-4260-BEF5-92F7D373A4EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C37798AB-AF09-4260-BEF5-92F7D373A4EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C37798AB-AF09-4260-BEF5-92F7D373A4EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C37798AB-AF09-4260-BEF5-92F7D373A4EA}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -249,6 +269,9 @@ Global
{08A36D02-DC53-4895-9E1C-E02BC1BBA890} = {A5AB62A9-B65A-4348-BC4A-60EF67FC1B9D}
{2E9F8B23-37B9-42BD-A62F-140A38C43A89} = {A5AB62A9-B65A-4348-BC4A-60EF67FC1B9D}
{E600E59F-18EE-4DBC-8298-BEF4307F69D9} = {E4872924-2348-4E06-881A-08625ED98E9F}
+ {1E09E797-7DFF-49B1-ABB8-290660DB4451} = {52B19E13-6B04-444C-A38A-B9955B199A98}
+ {12A5A0D3-C608-46AB-AC4C-5D5EF729AF8E} = {52B19E13-6B04-444C-A38A-B9955B199A98}
+ {C37798AB-AF09-4260-BEF5-92F7D373A4EA} = {52B19E13-6B04-444C-A38A-B9955B199A98}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {646DDD1C-F143-42C2-894F-F5C7B3A0CE74}
diff --git a/apihost/Tnb.API.Entry/Tnb.API.Entry.csproj b/apihost/Tnb.API.Entry/Tnb.API.Entry.csproj
index 43f19f9b..64149742 100644
--- a/apihost/Tnb.API.Entry/Tnb.API.Entry.csproj
+++ b/apihost/Tnb.API.Entry/Tnb.API.Entry.csproj
@@ -38,6 +38,7 @@
+
diff --git a/common/Tnb.Common/Contracts/BaseEntity`1.cs b/common/Tnb.Common/Contracts/BaseEntity`1.cs
new file mode 100644
index 00000000..8ed80155
--- /dev/null
+++ b/common/Tnb.Common/Contracts/BaseEntity`1.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using JNPF.Common.Contracts;
+using SqlSugar;
+
+namespace Tnb.Common.Contracts
+{
+ public class BaseEntity : IEntity where TKey : IEquatable
+ {
+ ///
+ /// 获取或设置 编号.
+ ///
+ [SugarColumn(ColumnName = "id", ColumnDescription = "主键", IsPrimaryKey = true)]
+ public TKey Id { get; set; }
+ }
+
+}
diff --git a/common/Tnb.Common/Enums/RouteType.cs b/common/Tnb.Common/Enums/RouteType.cs
new file mode 100644
index 00000000..4580837b
--- /dev/null
+++ b/common/Tnb.Common/Enums/RouteType.cs
@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tnb.Common.Enums
+{
+ ///
+ /// 工艺路线类型
+ ///
+ public enum RouteType
+ {
+ ///
+ /// 标准途程
+ ///
+ [Description("标准途程")]
+ Standard=1,
+ ///
+ /// 返工途程
+ ///
+ [Description("返工途程")]
+ Rework=2,
+ ///
+ /// 试制途程
+ ///
+ [Description("试制途程")]
+ Trial=4,
+ ///
+ /// 返修途程
+ ///
+ [Description("返修途程")]
+ RMA =8,
+ }
+}