diff --git a/WcsMain/ApiServe/Controllers/WcsController/ConveyTaskController.cs b/WcsMain/ApiServe/Controllers/WcsController/ConveyTaskController.cs
new file mode 100644
index 0000000..f9dc2a4
--- /dev/null
+++ b/WcsMain/ApiServe/Controllers/WcsController/ConveyTaskController.cs
@@ -0,0 +1,33 @@
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using WcsMain.ApiServe.ControllerFilter.ExceptionFilter;
+using WcsMain.ApiServe.Controllers.Dto;
+using WcsMain.ApiServe.Factory;
+using WcsMain.DataBase.TableEntity;
+
+namespace WcsMain.ApiServe.Controllers.WcsController;
+
+
+
+[Route("api/wcs/conveyTask")]
+[ApiController]
+[WcsExceptionFilter]
+public class ConveyTaskController : ControllerBase
+{
+ ///
+ /// 分页查询箱式线任务
+ ///
+ ///
+ [HttpPost("queryConveyTaskWithPage")]
+ public WcsApiResponse> QueryConveyTaskWithPage()
+ {
+ // TODO
+ return WcsApiResponseFactory.Fail>();
+
+
+
+ }
+
+
+
+}
diff --git a/WcsMain/Business/CirculationTask/Convey/ReadScanCode.cs b/WcsMain/Business/CirculationTask/Convey/ReadScanCode.cs
new file mode 100644
index 0000000..082882e
--- /dev/null
+++ b/WcsMain/Business/CirculationTask/Convey/ReadScanCode.cs
@@ -0,0 +1,66 @@
+using CirculateTool;
+using WcsMain.Business.Convey.HistoryDataHandler;
+using WcsMain.DataBase.Dao;
+using WcsMain.DataBase.TableEntity;
+using WcsMain.Enum.General;
+using WcsMain.EquipOperation.Convey;
+
+namespace WcsMain.Business.CirculationTask.Convey;
+
+
+///
+/// 箱式线读取扫码信息
+///
+[Circulation]
+public class ReadScanCode(AppRouterMethodDao routerMethodDao, ConveyOperation conveyOperation, HistoryConveyDataHander historyConveyDataHander)
+{
+ private readonly ConveyOperation _conveyOperation = conveyOperation;
+ private readonly AppRouterMethodDao _routerMethodDao = routerMethodDao;
+ private readonly HistoryConveyDataHander _historyConveyDataHander = historyConveyDataHander;
+
+
+ private static List? routers;
+
+ ///
+ /// 读取扫码数据
+ ///
+ ///
+ [Circulation("读取扫码数据", 300)]
+ public bool ReadData()
+ {
+ if(routers == default)
+ {
+ routers = _routerMethodDao.Query(new AppRouterMethod() { RouterStatus = (int)TrueFalseEnum.TRUE });
+ return true;
+ }
+ List tasks = [];
+ foreach(AppRouterMethod router in routers)
+ {
+ (var readErrText, var scanOk, var code) = _conveyOperation.ReadScanInfo(router.Area);
+ if(!string.IsNullOrEmpty(readErrText))
+ {
+ ConsoleLog.Exception($"【异常】读取扫码:{router.Area} 数据异常,信息:{readErrText}");
+ Thread.Sleep(5000);
+ return true; // 不读了,估计网断了
+ }
+ if(scanOk != (int)TrueFalseEnum.TRUE) { continue; }
+ tasks.Add(Task.Factory.StartNew(() =>
+ {
+ _historyConveyDataHander.GetData("-", code, router.Area ?? "");
+ string clearErrText = _conveyOperation.ClearScanStatus(router.Area);
+ if(!string.IsNullOrEmpty(clearErrText))
+ {
+ ConsoleLog.Exception($"【异常】扫码:{router.Area} 清理读码信号异常,信息:{clearErrText}");
+ }
+ }));
+ }
+ Task.WaitAll([.. tasks]);
+ return true;
+ }
+
+
+
+
+
+
+}
diff --git a/WcsMain/Business/Convey/DataHandler/BaseConveyDataHandler.cs b/WcsMain/Business/Convey/DataHandler/BaseConveyDataHandler.cs
index e4af11a..7e5518e 100644
--- a/WcsMain/Business/Convey/DataHandler/BaseConveyDataHandler.cs
+++ b/WcsMain/Business/Convey/DataHandler/BaseConveyDataHandler.cs
@@ -1,5 +1,6 @@
-using System.Reflection;
-using WcsMain.Business.Convey.DataHandler.GetRouter;
+using Autofac;
+using System.Reflection;
+using WcsMain.Business.Convey.DataHandler.GetRouter.I;
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.Tcp.Entity.Convey;
@@ -11,11 +12,12 @@ namespace WcsMain.Business.Convey.DataHandler;
/// 输送线收到的数据处理基础类
///
[Component]
-public class BaseConveyDataHandler(AppRouterMethodDao routerMethodDao)
+public class BaseConveyDataHandler(AppRouterMethodDao routerMethodDao, IComponentContext componentContext)
{
+ private readonly IComponentContext _componentContext = componentContext;
private readonly AppRouterMethodDao _routerMethodDao = routerMethodDao;
- private Dictionary? methodConfig;
+ private Dictionary? methodConfig;
///
/// 处理 PLC 请求分拣路向逻辑
@@ -44,7 +46,7 @@ public class BaseConveyDataHandler(AppRouterMethodDao routerMethodDao)
}
if(routerData.Code == "NoRead")
{
- instance.NoRead(routerData, displayName, msg);
+ instance.ReadFail(routerData, displayName, msg);
}
else
{
@@ -64,7 +66,7 @@ public class BaseConveyDataHandler(AppRouterMethodDao routerMethodDao)
if (appRouters == default) return;
methodConfig = [];
// 扫描创建继承 BaseGetRouter 的类的实例
- Dictionary classInstances = [];
+ Dictionary classInstances = [];
var assembly = Assembly.GetExecutingAssembly();
var assTypes = assembly.GetTypes();
foreach (var assType in assTypes)
@@ -72,10 +74,10 @@ public class BaseConveyDataHandler(AppRouterMethodDao routerMethodDao)
var interfaces = assType.GetInterfaces();
foreach (var inteface in interfaces)
{
- if (inteface.GetType() != typeof(BaseGetRouter)) continue;
+ if (inteface.GetType() != typeof(IBaseGetRouter)) continue;
var instance = Activator.CreateInstance(inteface.GetType());
if (instance == default) continue;
- classInstances.Add(assType.Name, (BaseGetRouter)instance);
+ classInstances.Add(assType.Name, (IBaseGetRouter)instance);
}
}
// 将实例和请求点位绑定
diff --git a/WcsMain/Business/Convey/DataHandler/GetRouter/DeliverGetRouter.cs b/WcsMain/Business/Convey/DataHandler/GetRouter/DeliverGetRouter.cs
index 6c63f84..e18e299 100644
--- a/WcsMain/Business/Convey/DataHandler/GetRouter/DeliverGetRouter.cs
+++ b/WcsMain/Business/Convey/DataHandler/GetRouter/DeliverGetRouter.cs
@@ -1,8 +1,20 @@
-namespace WcsMain.Business.Convey.DataHandler.GetRouter;
+using WcsMain.Business.Convey.DataHandler.GetRouter.I;
+using WcsMain.Tcp.Entity.Convey;
+
+namespace WcsMain.Business.Convey.DataHandler.GetRouter;
///
/// 发货获取路向
///
-public class DeliverGetRouter : BaseGetRouter
+public class DeliverGetRouter : IBaseGetRouter
{
+ public void ReadFail(GetRouterData routerData, string? disPlayName, string msg)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void ReadSuccess(GetRouterData routerData, string? disPlayName, string msg)
+ {
+ throw new NotImplementedException();
+ }
}
diff --git a/WcsMain/Business/Convey/DataHandler/GetRouter/BaseGetRouter.cs b/WcsMain/Business/Convey/DataHandler/GetRouter/I/IBaseGetRouter.cs
similarity index 58%
rename from WcsMain/Business/Convey/DataHandler/GetRouter/BaseGetRouter.cs
rename to WcsMain/Business/Convey/DataHandler/GetRouter/I/IBaseGetRouter.cs
index 0604022..80f4766 100644
--- a/WcsMain/Business/Convey/DataHandler/GetRouter/BaseGetRouter.cs
+++ b/WcsMain/Business/Convey/DataHandler/GetRouter/I/IBaseGetRouter.cs
@@ -1,8 +1,8 @@
using WcsMain.Tcp.Entity.Convey;
-namespace WcsMain.Business.Convey.DataHandler.GetRouter;
+namespace WcsMain.Business.Convey.DataHandler.GetRouter.I;
-public class BaseGetRouter
+public interface IBaseGetRouter
{
///
/// 读码失败
@@ -11,10 +11,7 @@ public class BaseGetRouter
///
///
///
- public virtual void NoRead(GetRouterData routerData, string? disPlayName, string msg)
- {
- throw new NotImplementedException();
- }
+ void ReadFail(GetRouterData routerData, string? disPlayName, string msg);
///
/// 不是读码失败
@@ -23,8 +20,5 @@ public class BaseGetRouter
///
///
///
- public virtual void ReadSuccess(GetRouterData routerData, string? disPlayName, string msg)
- {
- throw new NotImplementedException();
- }
+ void ReadSuccess(GetRouterData routerData, string? disPlayName, string msg);
}
diff --git a/WcsMain/Business/Convey/DataHandler/GetRouter/LoginGetRouter.cs b/WcsMain/Business/Convey/DataHandler/GetRouter/LoginGetRouter.cs
index c6e24a5..761b4f6 100644
--- a/WcsMain/Business/Convey/DataHandler/GetRouter/LoginGetRouter.cs
+++ b/WcsMain/Business/Convey/DataHandler/GetRouter/LoginGetRouter.cs
@@ -1,9 +1,20 @@
-namespace WcsMain.Business.Convey.DataHandler.GetRouter;
+using WcsMain.Business.Convey.DataHandler.GetRouter.I;
+using WcsMain.Tcp.Entity.Convey;
+
+namespace WcsMain.Business.Convey.DataHandler.GetRouter;
///
/// 注册口获取路向
///
-public class LoginGetRouter : BaseGetRouter
+public class LoginGetRouter : IBaseGetRouter
{
+ public void ReadFail(GetRouterData routerData, string? disPlayName, string msg)
+ {
+ throw new NotImplementedException();
+ }
+ public void ReadSuccess(GetRouterData routerData, string? disPlayName, string msg)
+ {
+ throw new NotImplementedException();
+ }
}
diff --git a/WcsMain/Business/Convey/DataHandler/GetRouter/PickGetRouter.cs b/WcsMain/Business/Convey/DataHandler/GetRouter/PickGetRouter.cs
index f3bc597..9de528f 100644
--- a/WcsMain/Business/Convey/DataHandler/GetRouter/PickGetRouter.cs
+++ b/WcsMain/Business/Convey/DataHandler/GetRouter/PickGetRouter.cs
@@ -1,8 +1,20 @@
-namespace WcsMain.Business.Convey.DataHandler.GetRouter;
+using WcsMain.Business.Convey.DataHandler.GetRouter.I;
+using WcsMain.Tcp.Entity.Convey;
+
+namespace WcsMain.Business.Convey.DataHandler.GetRouter;
///
/// 拣选请求获取路向
///
-public class PickGetRouter : BaseGetRouter
+public class PickGetRouter : IBaseGetRouter
{
+ public void ReadFail(GetRouterData routerData, string? disPlayName, string msg)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void ReadSuccess(GetRouterData routerData, string? disPlayName, string msg)
+ {
+ throw new NotImplementedException();
+ }
}
diff --git a/WcsMain/Business/Convey/DataHandler/GetRouter/RecheckGetRouter.cs b/WcsMain/Business/Convey/DataHandler/GetRouter/RecheckGetRouter.cs
index ab00e82..290cd64 100644
--- a/WcsMain/Business/Convey/DataHandler/GetRouter/RecheckGetRouter.cs
+++ b/WcsMain/Business/Convey/DataHandler/GetRouter/RecheckGetRouter.cs
@@ -1,8 +1,20 @@
-namespace WcsMain.Business.Convey.DataHandler.GetRouter;
+using WcsMain.Business.Convey.DataHandler.GetRouter.I;
+using WcsMain.Tcp.Entity.Convey;
+
+namespace WcsMain.Business.Convey.DataHandler.GetRouter;
///
/// 复核获取路向
///
-public class RecheckGetRouter : BaseGetRouter
+public class RecheckGetRouter : IBaseGetRouter
{
+ public void ReadFail(GetRouterData routerData, string? disPlayName, string msg)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void ReadSuccess(GetRouterData routerData, string? disPlayName, string msg)
+ {
+ throw new NotImplementedException();
+ }
}
diff --git a/WcsMain/Business/Convey/DataHandler/GetRouter/ReplenishGetRouter.cs b/WcsMain/Business/Convey/DataHandler/GetRouter/ReplenishGetRouter.cs
index 0588de3..b44bd1f 100644
--- a/WcsMain/Business/Convey/DataHandler/GetRouter/ReplenishGetRouter.cs
+++ b/WcsMain/Business/Convey/DataHandler/GetRouter/ReplenishGetRouter.cs
@@ -1,8 +1,20 @@
-namespace WcsMain.Business.Convey.DataHandler.GetRouter;
+using WcsMain.Business.Convey.DataHandler.GetRouter.I;
+using WcsMain.Tcp.Entity.Convey;
+
+namespace WcsMain.Business.Convey.DataHandler.GetRouter;
///
/// 补货获取路向
///
-public class ReplenishGetRouter : BaseGetRouter
+public class ReplenishGetRouter : IBaseGetRouter
{
+ public void ReadFail(GetRouterData routerData, string? disPlayName, string msg)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void ReadSuccess(GetRouterData routerData, string? disPlayName, string msg)
+ {
+ throw new NotImplementedException();
+ }
}
diff --git a/WcsMain/Business/Convey/DataHandler/Readme.txt b/WcsMain/Business/Convey/DataHandler/Readme.txt
new file mode 100644
index 0000000..cceefff
--- /dev/null
+++ b/WcsMain/Business/Convey/DataHandler/Readme.txt
@@ -0,0 +1,3 @@
+
+
+该文件夹是给 TCP 通讯的 PLC 预留的功能
\ No newline at end of file
diff --git a/WcsMain/Business/Convey/HistoryDataHandler/HisGetData/I/IBaseGetData.cs b/WcsMain/Business/Convey/HistoryDataHandler/HisGetData/I/IBaseGetData.cs
new file mode 100644
index 0000000..12a6811
--- /dev/null
+++ b/WcsMain/Business/Convey/HistoryDataHandler/HisGetData/I/IBaseGetData.cs
@@ -0,0 +1,28 @@
+using WcsMain.DataBase.TableEntity;
+using WcsMain.Tcp.Entity.Convey;
+
+namespace WcsMain.Business.Convey.HistoryDataHandler.HisGetData.I;
+
+///
+/// 传统读码方式
+///
+public interface IBaseGetData
+{
+ ///
+ /// 读码失败
+ ///
+ ///
+ ///
+ ///
+ ///
+ void ReadFail(string? disPlayName, string msg, string? area, AppRouterMethod routerMethodData );
+
+ ///
+ /// 读码成功
+ ///
+ ///
+ ///
+ ///
+ ///
+ void ReadSuccess(string? disPlayName, string msg, string? area, AppRouterMethod routerMethodData);
+}
diff --git a/WcsMain/Business/Convey/HistoryDataHandler/HisGetData/LoginGetData.cs b/WcsMain/Business/Convey/HistoryDataHandler/HisGetData/LoginGetData.cs
new file mode 100644
index 0000000..36a6aaf
--- /dev/null
+++ b/WcsMain/Business/Convey/HistoryDataHandler/HisGetData/LoginGetData.cs
@@ -0,0 +1,72 @@
+using WcsMain.ApiClient.DataEntity.WmsEntity;
+using WcsMain.Business.Convey.HistoryDataHandler.HisGetData.I;
+using WcsMain.Common;
+using WcsMain.DataBase.TableEntity;
+using WcsMain.ExtendMethod;
+using WcsMain.Plugins;
+
+namespace WcsMain.Business.Convey.HistoryDataHandler.HisGetData;
+
+///
+/// 注册口逻辑
+///
+public class LoginGetData(WmsWebApiPost wmsWebApiPost) : IBaseGetData
+{
+
+ private readonly WmsWebApiPost _wmsWebApiPost = wmsWebApiPost;
+
+ ///
+ /// 读码失败
+ ///
+ ///
+ ///
+ ///
+ ///
+ public void ReadFail(string? disPlayName, string msg, string? area, AppRouterMethod routerMethodData)
+ {
+ ConsoleLog.Warning($"【警告】注册口:{area} 读码失败");
+ }
+
+ ///
+ /// 读码成功
+ ///
+ ///
+ ///
+ ///
+ ///
+ public void ReadSuccess(string? disPlayName, string msg, string? area, AppRouterMethod routerMethodData)
+ {
+ (string code, string direction) = msg.FormatDir();
+ /* 判断方向是否正确 */
+ string? routerDirection = routerMethodData.AllowDirection;
+ if(!string.IsNullOrEmpty(routerDirection))
+ {
+ string[] dirs = routerDirection.Split(',');
+ if(!dirs.Contains(direction))
+ {
+ ConsoleLog.Warning($"【警告】注册口:{area} 箱码:{code} 方向:{direction} 方向不正确,允许的方向为:{routerDirection}");
+ return;
+ }
+ }
+ /* 发送 WMS 请求入库 */
+ ApplyInRequest applyInRequest = new()
+ {
+ Point = area,
+ VehicleNo = code,
+ CodeMessage = msg
+ };
+ var postResult = _wmsWebApiPost.HttpPost(applyInRequest, CommonData.AppConfig.ApplyEnterApiAddress ?? "");
+ if(!postResult.IsSend || postResult.ResponseEntity == default)
+ {
+ ConsoleLog.Exception($"【异常】注册口:{area} 箱码:{msg} 请求入库发生异常,异常信息:{postResult.RequestException}");
+ return;
+ }
+ if( postResult.ResponseEntity.Code == 0)
+ {
+ ConsoleLog.Success($"注册口:{area} 箱码:{msg} 请求入库成功 {postResult.ResponseEntity.Message}");
+ return;
+ }
+ ConsoleLog.Warning($"【警告】注册口:{area} 箱码:{msg} 请求入库失败,信息:{postResult.ResponseEntity.Message}");
+ return;
+ }
+}
diff --git a/WcsMain/Business/Convey/HistoryDataHandler/HisGetData/PickStandGetData.cs b/WcsMain/Business/Convey/HistoryDataHandler/HisGetData/PickStandGetData.cs
new file mode 100644
index 0000000..757624e
--- /dev/null
+++ b/WcsMain/Business/Convey/HistoryDataHandler/HisGetData/PickStandGetData.cs
@@ -0,0 +1,20 @@
+using WcsMain.Business.Convey.HistoryDataHandler.HisGetData.I;
+using WcsMain.DataBase.TableEntity;
+
+namespace WcsMain.Business.Convey.HistoryDataHandler.HisGetData;
+
+///
+/// 拣选站台的逻辑
+///
+public class PickStandGetData : IBaseGetData
+{
+ public void ReadFail(string? disPlayName, string msg, string? area, AppRouterMethod routerMethodData)
+ {
+
+ }
+
+ public void ReadSuccess(string? disPlayName, string msg, string? area, AppRouterMethod routerMethodData)
+ {
+
+ }
+}
diff --git a/WcsMain/Business/Convey/HistoryDataHandler/HisGetData/StackerInErr.cs b/WcsMain/Business/Convey/HistoryDataHandler/HisGetData/StackerInErr.cs
new file mode 100644
index 0000000..a3aa637
--- /dev/null
+++ b/WcsMain/Business/Convey/HistoryDataHandler/HisGetData/StackerInErr.cs
@@ -0,0 +1,20 @@
+using WcsMain.Business.Convey.HistoryDataHandler.HisGetData.I;
+using WcsMain.DataBase.TableEntity;
+
+namespace WcsMain.Business.Convey.HistoryDataHandler.HisGetData;
+
+///
+/// 入库异常异常口判定 ---- 卡特专用 ---- 苏州卡特
+///
+public class StackerInErr : IBaseGetData
+{
+ public void ReadFail(string? disPlayName, string msg, string? area, AppRouterMethod routerMethodData)
+ {
+
+ }
+
+ public void ReadSuccess(string? disPlayName, string msg, string? area, AppRouterMethod routerMethodData)
+ {
+
+ }
+}
diff --git a/WcsMain/Business/Convey/HistoryDataHandler/HisGetData/StackerInSpliter.cs b/WcsMain/Business/Convey/HistoryDataHandler/HisGetData/StackerInSpliter.cs
new file mode 100644
index 0000000..b162bbb
--- /dev/null
+++ b/WcsMain/Business/Convey/HistoryDataHandler/HisGetData/StackerInSpliter.cs
@@ -0,0 +1,23 @@
+using WcsMain.Business.Convey.HistoryDataHandler.HisGetData.I;
+using WcsMain.DataBase.TableEntity;
+
+namespace WcsMain.Business.Convey.HistoryDataHandler.HisGetData;
+
+///
+/// 入库分流 ---- 卡特专用 ---- 苏州卡特
+///
+///
+/// R2
+///
+public class StackerInSpliter : IBaseGetData
+{
+ public void ReadFail(string? disPlayName, string msg, string? area, AppRouterMethod routerMethodData)
+ {
+
+ }
+
+ public void ReadSuccess(string? disPlayName, string msg, string? area, AppRouterMethod routerMethodData)
+ {
+
+ }
+}
diff --git a/WcsMain/Business/Convey/HistoryDataHandler/HistoryConveyDataHander.cs b/WcsMain/Business/Convey/HistoryDataHandler/HistoryConveyDataHander.cs
new file mode 100644
index 0000000..6eeea69
--- /dev/null
+++ b/WcsMain/Business/Convey/HistoryDataHandler/HistoryConveyDataHander.cs
@@ -0,0 +1,132 @@
+using Autofac;
+using System.Collections.Generic;
+using System.Reflection;
+using WcsMain.Business.Convey.HistoryDataHandler.HisGetData.I;
+using WcsMain.DataBase.Dao;
+using WcsMain.DataBase.TableEntity;
+using WcsMain.Tcp.Entity.Convey;
+using WcsMain.WcsAttribute.AutoFacAttribute;
+
+namespace WcsMain.Business.Convey.HistoryDataHandler;
+
+
+///
+/// 传统版本的箱式线数据处理
+///
+///
+[Component]
+public class HistoryConveyDataHander(AppRouterMethodDao routerMethodDao, IComponentContext componentContext)
+{
+ private readonly IComponentContext _componentContext = componentContext;
+ private readonly AppRouterMethodDao _routerMethodDao = routerMethodDao;
+
+ private Dictionary? methodConfig;
+ private Dictionary? areaBaseData;
+
+ ///
+ /// 处理 PLC 请求分拣路向逻辑
+ ///
+ ///
+ ///
+ ///
+ public void GetData(string? displayName, string msg, string area)
+ {
+ LoadingMethodConfig(); // 加载配置信息,仅第一次加载
+ if (methodConfig == default || areaBaseData == default)
+ {
+ ConsoleLog.Warning("路由处理参数尚未加载,可能是和数据库服务连接存在异常");
+ return;
+ }
+ var getInstance = methodConfig.TryGetValue(area ?? "", out var instance);
+ if (!getInstance || instance == default)
+ {
+ ConsoleLog.Warning($"点位:{area} 未配置处理逻辑或者处理逻辑不可用");
+ return;
+ }
+ var areaInfo = areaBaseData.TryGetValue(area ?? "", out AppRouterMethod? routerMethodData);
+ if(!areaInfo || routerMethodData == default)
+ {
+ ConsoleLog.Warning($"点位:{area} 无可用配置信息");
+ return;
+ }
+ if (msg == "NoRead")
+ {
+ instance.ReadFail(displayName, msg, area, routerMethodData);
+ }
+ else
+ {
+ instance.ReadSuccess(displayName, msg, area, routerMethodData);
+ }
+ }
+
+ /*************************/
+
+ private static readonly object loadLock = new();
+ ///
+ /// 加载获取路由的参数
+ ///
+ private void LoadingMethodConfig()
+ {
+ lock (loadLock)
+ {
+ if (methodConfig != default && areaBaseData != default) return;
+ List? appRouters = _routerMethodDao.Query();
+ if (appRouters == default) return;
+ methodConfig = [];
+ areaBaseData = [];
+ // 扫描创建继承 BaseGetRouter 的类的实例
+ Dictionary classInstances = [];
+ var assembly = Assembly.GetExecutingAssembly();
+ var assTypes = assembly.GetTypes();
+ foreach (var assType in assTypes)
+ {
+ var interfaces = assType.GetInterfaces();
+ foreach (var inteface in interfaces)
+ {
+ var type = inteface.GetType();
+ if (type != typeof(IBaseGetData)) continue;
+ var instance = CreateInstance(type);
+ if (instance == default) continue;
+ classInstances.Add(assType.Name, (IBaseGetData)instance);
+ }
+ }
+ // 将实例和请求点位绑定
+ foreach (var appRouter in appRouters)
+ {
+ if (string.IsNullOrEmpty(appRouter.ClassName)) continue;
+ bool isGetInstance = classInstances.TryGetValue(appRouter.ClassName, out var inst);
+ if (!isGetInstance) continue;
+ methodConfig.TryAdd(appRouter.Area ?? "", inst);
+ areaBaseData.TryAdd(appRouter.Area ?? "", appRouter);
+ }
+ }
+ }
+
+
+ ///
+ /// 创建实例。自动注入参数
+ ///
+ ///
+ ///
+ private object? CreateInstance(Type type)
+ {
+ var constructors = type.GetConstructors();
+ var constructorList = constructors.ToList();
+ constructorList = [.. constructorList.OrderByDescending(s => s.GetParameters().Length)];
+ foreach (var constructor in constructorList)
+ {
+ var parameters = constructor.GetParameters();
+ if (parameters.Length == 0) return Activator.CreateInstance(type);
+ List