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 arguments = []; + foreach (var parameter in parameters) + { + object par = _componentContext.Resolve(parameter.ParameterType); + arguments.Add(par); + } + return Activator.CreateInstance(type, [.. arguments]); + } + return Activator.CreateInstance(type); + } + + +} diff --git a/WcsMain/Business/Convey/HistoryDataHandler/Readme.txt b/WcsMain/Business/Convey/HistoryDataHandler/Readme.txt new file mode 100644 index 0000000..2e93c5b --- /dev/null +++ b/WcsMain/Business/Convey/HistoryDataHandler/Readme.txt @@ -0,0 +1,3 @@ + + +该文件夹是传统扫码方式的处理逻辑 (0001)NoRead \ No newline at end of file diff --git a/WcsMain/DataBase/Dao/AppRouterMethodDao.cs b/WcsMain/DataBase/Dao/AppRouterMethodDao.cs index cd23609..4a3e3be 100644 --- a/WcsMain/DataBase/Dao/AppRouterMethodDao.cs +++ b/WcsMain/DataBase/Dao/AppRouterMethodDao.cs @@ -18,9 +18,13 @@ public class AppRouterMethodDao try { var sqlFuc = CommonTool.DbServe.Queryable() - .WhereIF(routerMethod.Area == default, w => w.Area == routerMethod.Area) - .WhereIF(routerMethod.ClassName == default, w => w.ClassName == routerMethod.ClassName) - .WhereIF(routerMethod.Remark == default, w => w.Remark == routerMethod.Remark); + .WhereIF(routerMethod.Area != default, w => w.Area == routerMethod.Area) + .WhereIF(routerMethod.ClassName != default, w => w.ClassName == routerMethod.ClassName) + .WhereIF(routerMethod.RouterStatus != default, w => w.RouterStatus == routerMethod.RouterStatus) + .WhereIF(routerMethod.ReadFailRouter != default, w => w.ReadFailRouter == routerMethod.ReadFailRouter) + .WhereIF(routerMethod.ErrRouter != default, w => w.ErrRouter == routerMethod.ErrRouter) + .WhereIF(routerMethod.AllowDirection != default, w => w.AllowDirection == routerMethod.AllowDirection) + .WhereIF(routerMethod.Remark != default, w => w.Remark == routerMethod.Remark); return sqlFuc.ToList(); } catch(Exception ex) diff --git a/WcsMain/DataBase/TableEntity/AppConveyTask.cs b/WcsMain/DataBase/TableEntity/AppConveyTask.cs index ead067d..4582824 100644 --- a/WcsMain/DataBase/TableEntity/AppConveyTask.cs +++ b/WcsMain/DataBase/TableEntity/AppConveyTask.cs @@ -75,6 +75,12 @@ public class AppConveyTask [SugarColumn(ColumnName = "complete_time")] public DateTime? CompleteTime { get; set; } + /// + /// 备注信息 + /// + [SugarColumn(ColumnName = "remark")] + public string? Remark { get; set; } + diff --git a/WcsMain/DataBase/TableEntity/AppRouterMethod.cs b/WcsMain/DataBase/TableEntity/AppRouterMethod.cs index 7b2cc2e..7ec2139 100644 --- a/WcsMain/DataBase/TableEntity/AppRouterMethod.cs +++ b/WcsMain/DataBase/TableEntity/AppRouterMethod.cs @@ -5,6 +5,10 @@ namespace WcsMain.DataBase.TableEntity; /// /// tbl_app_router_method /// +/// +/// +/// 箱式线每个请求点位的处理逻辑 +/// [SugarTable("tbl_app_router_method")] public class AppRouterMethod { @@ -20,6 +24,30 @@ public class AppRouterMethod [SugarColumn(ColumnName = "class_name")] public string? ClassName { get; set; } + /// + /// 路由状态 + /// + [SugarColumn(ColumnName = "router_status")] + public int? RouterStatus { get; set; } + + /// + /// 读码失败时的路向 + /// + [SugarColumn(ColumnName = "read_fail_router")] + public int? ReadFailRouter { get; set; } + + /// + /// 异常时的路向 + /// + [SugarColumn(ColumnName = "err_router")] + public int? ErrRouter { get; set; } + + /// + /// 允许的方向 + /// + [SugarColumn(ColumnName = "allow_direction")] + public string? AllowDirection { get; set; } + /// /// 备注 /// diff --git a/WcsMain/EquipOperation/Convey/ConveyOperation.cs b/WcsMain/EquipOperation/Convey/ConveyOperation.cs index 3d92b9a..23a85da 100644 --- a/WcsMain/EquipOperation/Convey/ConveyOperation.cs +++ b/WcsMain/EquipOperation/Convey/ConveyOperation.cs @@ -63,6 +63,48 @@ public class ConveyOperation } + /// + /// 读取扫码点信息 + /// + /// + /// + public (string? errText, short scanOk, string code) ReadScanInfo(string? scanId) + { + if (!CommonData.IsConnectPlc || CommonTool.Siemens == default) return ("PLC尚未连接。", 0, ""); + var readResult = CommonTool.Siemens.ReadByteWithName($"扫码读取{scanId}", 22); + if (!readResult.Success || readResult.Value == default) return (readResult.Message, 0, "");// 读取失败 + try + { + var readData = readResult.Value; + short status = Convert.ToInt16(CommonTool.Siemens.Trans(readData, 0)); // PLC 返回任务状态 + string code = Regex.Replace(Encoding.ASCII.GetString(readData, 2, 20), "\\W", ""); + return (string.Empty, status, code); + } + catch (Exception ex) + { + return (ex.Message, 0, ""); + } + } + + /// + /// 清除扫码状态 + /// + /// + /// + public string ClearScanStatus(string? scanId) + { + if (!CommonData.IsConnectPlc || CommonTool.Siemens == default) return "PLC尚未连接。"; + var (writeResult, _) = CommonTool.Siemens.WritePlcWhithName($"扫码读取{scanId}", (short)0); + if (!writeResult.Success) return writeResult.Message ?? "写入失败"; + return string.Empty; + } + + + + + + + @@ -207,61 +249,5 @@ public class ConveyOperation } - /// - /// 读取扫码点信息 - /// - /// - /// - public (string? errText, short scanOk, string code) ReadScanInfo(string scanId) - { - if (!CommonData.IsConnectPlc || CommonTool.Siemens == default) - { - // 未连接PLC - return ("PLC尚未连接。", 0, ""); - } - var readResult = CommonTool.Siemens.ReadByteWithName($"扫码读取{scanId}", 22); - if (!readResult.Success || readResult.Value == default) // 读取失败 - { - return (readResult.Message, 0, ""); - } - try - { - var readData = readResult.Value; - short status = Convert.ToInt16(CommonTool.Siemens.Trans(readData, 0)); // PLC 返回任务状态 - string code = Regex.Replace(Encoding.ASCII.GetString(readData, 2, 20), "\\W", ""); - return (string.Empty, status, code); - } - catch (Exception ex) - { - return (ex.Message, 0, ""); - } - } - - /// - /// 清除扫码状态 - /// - /// - /// - public string ClearScanStatus(string scanId) - { - if (!CommonData.IsConnectPlc || CommonTool.Siemens == default) - { - // 未连接PLC - return "PLC尚未连接。"; - } - var (writeResult, _) = CommonTool.Siemens.WritePlcWhithName($"扫码读取{scanId}", (short)0); - if (!writeResult.Success) // 读取失败 - { - return writeResult.Message ?? "写入失败"; - } - try - { - return string.Empty; - } - catch (Exception ex) - { - return ex.Message; - } - } } \ No newline at end of file diff --git a/WcsMain/ExtendMethod/StringExtendMethod.cs b/WcsMain/ExtendMethod/StringExtendMethod.cs index 966cc43..9543725 100644 --- a/WcsMain/ExtendMethod/StringExtendMethod.cs +++ b/WcsMain/ExtendMethod/StringExtendMethod.cs @@ -1,4 +1,5 @@ -using System.Text.RegularExpressions; +using HslCommunication; +using System.Text.RegularExpressions; namespace WcsMain.ExtendMethod; @@ -58,6 +59,21 @@ public static partial class StringExtendMethod } } + /// + /// 格式化条码,返回条码和方位码 + /// + /// + /// + public static (string code, string direction) FormatDir(this string? value) + { + if (string.IsNullOrEmpty(value)) return (string.Empty, string.Empty); + string[] vals = value.Split('-'); + if (vals.Length < 2) return (value, string.Empty); + string direction = vals[^1]; + string code = value.RemoveLast(direction.Length + 1); + return (code, direction); + } + /// diff --git a/WcsMain/WcsMain.csproj b/WcsMain/WcsMain.csproj index 9c233f6..cc027c9 100644 --- a/WcsMain/WcsMain.csproj +++ b/WcsMain/WcsMain.csproj @@ -40,7 +40,6 @@ -