From ce2fc1b29b2e1d00ae6e0d75ca23fb50fb7d681c Mon Sep 17 00:00:00 2001 From: "yang.lee" Date: Mon, 27 Nov 2023 15:01:48 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E7=94=B5=E6=A2=AFAgv=E5=BF=83=E8=B7=B3?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Configs/ElevatorControlConfiguration.cs | 4 + .../IElevatorControlService.cs | 2 + .../Tnb.WarehouseMgr/DeviceProviderService.cs | 3 +- .../ElevatorControlService.cs | 21 +++- .../TimedTaskBackgroundService.cs | 117 +++++++----------- .../Tnb.WarehouseMgr/WareHouseService.cs | 2 - .../WmsPurchaseAndSaleCommonService.cs | 3 +- .../ElevatorControlSettings.json | 1 + apihost/Tnb.API.Entry/Startup.cs | 2 + 9 files changed, 80 insertions(+), 75 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Configs/ElevatorControlConfiguration.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Configs/ElevatorControlConfiguration.cs index 32689bf4..0b9f0528 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Configs/ElevatorControlConfiguration.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Configs/ElevatorControlConfiguration.cs @@ -10,6 +10,10 @@ /// 4#梯设备名称 /// public string DevName4 { get; set; } + /// + /// 心跳检测设备名称集合 + /// + public List HeartbeatDevNames { get; set; } public string token { get; set; } /// /// 获取设备标签列表url diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IElevatorControlService.cs b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IElevatorControlService.cs index 8e6cff4a..f42aacde 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IElevatorControlService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IElevatorControlService.cs @@ -33,6 +33,8 @@ /// 获取到的状态值 Task<(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus)> GetElevatorStatus(string devName,IEnumerable tags, CancellationToken token); + + Task> GetELevatorStatusMap(string devName,IEnumerable tags, CancellationToken token); /// /// 检查Agv状态 /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs index 40430005..86a60422 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs @@ -222,7 +222,7 @@ namespace Tnb.WarehouseMgr { try { - Logger.Information($"任务链编号:{input.taskChainCode},状态:{input.status},设备ID:{input.deviceID}"); + Logger.Information($"任务链上报->任务链编号:{input.taskChainCode},状态:{input.status},设备ID:{input.deviceID}"); /*switch (input.status) { case "CREATED": break; @@ -318,6 +318,7 @@ namespace Tnb.WarehouseMgr { disTaskIds = disTasks.Select(x => x.id).ToList() }; + Logger.Information($"设备取返回输入参数:{JsonConvert.SerializeObject(taskExecuteAfterUpInput)}"); await _wareHouseService.TaskExecuteAfter(taskExecuteAfterUpInput); Logger.Information($"Agv取货完成,任务Id:{string.Join(",", disTasks.Select(x => x.id))}"); WmsElevatorUnexecute elevatorQueueItem = await _db.Queryable().FirstAsync(it => disTasks.Select(x => x.id).Contains(it.distask_id) && it.task_status == "执行中"); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs index f19b7cfc..7a54fecc 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs @@ -1,5 +1,6 @@ using System.Diagnostics.CodeAnalysis; using System.Dynamic; +using DingTalk.Api.Request; using JNPF; using JNPF.Common.Extension; using Microsoft.AspNetCore.Mvc; @@ -324,11 +325,29 @@ namespace Tnb.WarehouseMgr } } } - return (sysStatus: sysStatus, runStatus: runStatus, floorNo: floorNo, doorStatus: doorStatus, agvStatus: agvStatus); + return (sysStatus, runStatus, floorNo, doorStatus, agvStatus); } + public async Task> GetELevatorStatusMap(string devName, IEnumerable tags, CancellationToken token) + { + Task GetTag(string tag) + { + var dicCommand = new Dictionary + { + ["DevName"] = devName, + ["token"] = _elevatorCtlCfg.token, + ["TagName"] = tag + }; + return HttpClientHelper.GetAsync(_elevatorCtlCfg.GetTagUrl, pars: dicCommand); + } + + var tasks = tags.Select(tag => GetTag(tag)); + var results = await Task.WhenAll(tasks); + var statusMap = results?.Select(x => JObject.Parse(x)).ToDictionary(x => x.Value("Name"), x => x.Value("V")) ?? default; + return statusMap; + } /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs index 8c8a275b..b1717e98 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs @@ -10,6 +10,7 @@ using NPOI.OpenXmlFormats.Dml.Diagram; using Tnb.Common.Extension; using Tnb.Common.Utils; using Tnb.WarehouseMgr.Entities.Configs; +using Tnb.WarehouseMgr.Entities.Consts; using Tnb.WarehouseMgr.Entities.Enums; using Tnb.WarehouseMgr.Entities.Exceptions; @@ -42,43 +43,21 @@ namespace Tnb.WarehouseMgr //电梯Agv心跳检测 _ = TimedTask(async token => { - Dictionary parameter = new() + foreach (var devName in _elevatorControlConfiguration.HeartbeatDevNames) { - ["DevName"] = _elevatorControlConfiguration.DevName3, - ["TagName"] = "AGVKeepalive", - ["Value"] = "123", - ["token"] = _elevatorControlConfiguration.token - }; - string result = await HttpClientHelper.GetAsync(_elevatorControlConfiguration.WriteTagUrl, pars: parameter); - await Console.Out.WriteLineAsync($"{_elevatorControlConfiguration.DevName3.Match(@"\d+")}#梯, 心跳检测结果:{result}"); - }, stoppingToken, 30, TimeSpanUnit.Seconds); - _ = TimedTask(async token => - { - Dictionary parameter = new() - { - ["DevName"] = _elevatorControlConfiguration.DevName4, - ["TagName"] = "AGVKeepalive", - ["Value"] = "123", - ["token"] = _elevatorControlConfiguration.token - }; - string result = await HttpClientHelper.GetAsync(_elevatorControlConfiguration.WriteTagUrl, pars: parameter); - await Console.Out.WriteLineAsync($"{_elevatorControlConfiguration.DevName4.Match(@"\d+")}#梯,心跳检测结果:{result}"); - }, stoppingToken, 30, TimeSpanUnit.Seconds); - ////齐套出库 - /*var kittingOutService = App.GetRequiredService(); - TimedTask(token => kittingOutService.KittingOutByAdd(token), stoppingToken, 1); - TimedTask(token => kittingOutService.KittingOutByIsToBeShipped(token), stoppingToken, 1); - //齐套分拣 - var setSortingService = App.GetRequiredService(); - TimedTask(token => setSortingService.PackSortingByAdd(token), stoppingToken, 2); - + Dictionary parameter = new() + { + ["DevName"] = devName, + ["TagName"] = ElevatorConsts.AGVKeepalive, + ["Value"] = "123", + ["token"] = _elevatorControlConfiguration.token + }; + string result = await HttpClientHelper.GetAsync(_elevatorControlConfiguration.WriteTagUrl, pars: parameter); + await Console.Out.WriteLineAsync($"{devName.Match(@"\d+")}#梯, 心跳检测结果:{result}"); + } + }, stoppingToken, 30); - //最低库存检查 - var transferSignService = App.GetRequiredService(); - TimedTask(token => transferSignService.IsMinStorage(token), stoppingToken, 30, TimeSpanUnit.Minutes);*/ - - }, stoppingToken); - + }); return timedTask; } @@ -86,14 +65,42 @@ namespace Tnb.WarehouseMgr private Task TimedTask(Func action, CancellationToken ct, int interval, TimeSpanUnit timeType = TimeSpanUnit.Seconds) { - CancellationToken token = ct; - return Task.Factory.StartNew(async () => + // CancellationToken token = ct; + // return Task.Factory.StartNew(async () => + // { + // while (!token.IsCancellationRequested) + // { + // await action(ct).Catch(async ex => + // { + + // if (ex is TimedTaskException timedTaskEx and not null) + // { + // await _eventPublisher.PublishAsync(new LogEventSource("Log:CreateExLog", timedTaskEx.options!, new SysLogEntity + // { + // Id = SnowflakeIdHelper.NextId(), + // Category = 4, + // UserId = timedTaskEx.UserId, + // UserName = timedTaskEx.UserName, + // IPAddress = NetHelper.Ip, + // RequestURL = timedTaskEx.RequestURL, + // RequestMethod = timedTaskEx.RequestMethod, + // Json = timedTaskEx + "\n" + timedTaskEx.InnerException?.StackTrace + "\n" + timedTaskEx?.TargetSite?.GetParameters().ToString(), + // //PlatForm = string.Format("{0}-{1}", userAgent.OS.ToString(), userAgent.RawValue), + // CreatorTime = DateTime.Now + // })); + // } + // }); + // await TaskDelay(timeType, interval); + // } + // }, ct, TaskCreationOptions.None, new CustomerTaskScheduler()); + + return Task.Run(async () => { - while (!token.IsCancellationRequested) + while (!ct.IsCancellationRequested) { + await action(ct).Catch(async ex => { - if (ex is TimedTaskException timedTaskEx and not null) { await _eventPublisher.PublishAsync(new LogEventSource("Log:CreateExLog", timedTaskEx.options!, new SysLogEntity @@ -113,37 +120,7 @@ namespace Tnb.WarehouseMgr }); await TaskDelay(timeType, interval); } - }, ct, TaskCreationOptions.None, new CustomerTaskScheduler()); - - #region ThreadPool 线程运行会导致线程饥饿 - //return Task.Run(async () => - //{ - // while (!token.IsCancellationRequested) - // { - - // await action(cts).Catch(async ex => - // { - // if (ex is TimedTaskException timedTaskEx and not null) - // { - // await _eventPublisher.PublishAsync(new LogEventSource("Log:CreateExLog", timedTaskEx.options!, new SysLogEntity - // { - // Id = SnowflakeIdHelper.NextId(), - // Category = 4, - // UserId = timedTaskEx.UserId, - // UserName = timedTaskEx.UserName, - // IPAddress = NetHelper.Ip, - // RequestURL = timedTaskEx.RequestURL, - // RequestMethod = timedTaskEx.RequestMethod, - // Json = timedTaskEx + "\n" + timedTaskEx.InnerException?.StackTrace + "\n" + timedTaskEx?.TargetSite?.GetParameters().ToString(), - // //PlatForm = string.Format("{0}-{1}", userAgent.OS.ToString(), userAgent.RawValue), - // CreatorTime = DateTime.Now - // })); - // } - // }); - // await TaskDelay(timeType, interval); - // } - //}, token); - #endregion + }, ct); } public override Task StopAsync(CancellationToken cancellationToken) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 1c8b1275..b4519d93 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -838,9 +838,7 @@ namespace Tnb.WarehouseMgr { upInput.loginType = "web"; }*/ - Logger.Information("loginType赋值前"); upInput.loginType = "web";//(!string.IsNullOrEmpty(_userManager?.LoginType) ? "app" : "web") ?? "web"; - Logger.Information($"upInput.loginType={upInput.loginType}"); if (dt.is_sign == 1 && dt.chain_type == "3") { Logger.Information("执行业务回更操作....."); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseAndSaleCommonService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseAndSaleCommonService.cs index 9ec854e7..eaef030d 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseAndSaleCommonService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseAndSaleCommonService.cs @@ -111,7 +111,8 @@ namespace Tnb.WarehouseMgr { if (s_materialMap.Count == 0) { - s_materialMap = await _db.Queryable().ToDictionaryAsync(x => x.id, x => x.name); + //物料+规格型号+批次+箱号 + //s_materialMap = await _db.Queryable().ToDictionaryAsync(x => $"{}{}{}{}", x => x.name); } var list = await _db.Queryable().Where(it => it.bill_id == pkId) .Mapper(it => it.material_name = s_materialMap.ContainsKey(it.material_id) ? s_materialMap[it.material_id]?.ToString() ?? "" : "") diff --git a/apihost/Tnb.API.Entry/Configurations/ElevatorControlSettings.json b/apihost/Tnb.API.Entry/Configurations/ElevatorControlSettings.json index fb0a3e53..80c31cd7 100644 --- a/apihost/Tnb.API.Entry/Configurations/ElevatorControlSettings.json +++ b/apihost/Tnb.API.Entry/Configurations/ElevatorControlSettings.json @@ -1,6 +1,7 @@ { "DevName3": "Elevator3", "DevName4": "Elevator4", + "HeartbeatDevNames": [ "Elevator3", "Elevator4" ], "token": "780BE4144636CF47DDF3920B0F1D069B", "GetTagListUrl": "http://192.168.11.110:9100/Dev/GetTagList", "GetTagUrl": "http://192.168.11.110:9100/Dev/GetTag", diff --git a/apihost/Tnb.API.Entry/Startup.cs b/apihost/Tnb.API.Entry/Startup.cs index 1efe0fb4..2196fe41 100644 --- a/apihost/Tnb.API.Entry/Startup.cs +++ b/apihost/Tnb.API.Entry/Startup.cs @@ -58,6 +58,8 @@ public class Startup : AppStartup //定时任务 services.AddHostedService(); //services.AddHostedService(); + + } From 64d0a9bf9a677800018bf8d9952a2f3f8598b5a1 Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Tue, 28 Nov 2023 09:37:27 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=8F=90=E6=8A=A5=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B7=A5=E5=8D=95=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dto/PrdManage/ReportRecordListOutput.cs | 2 ++ .../Entity/PrdMoTaskDefectRecord.cs | 5 +++++ .../Tnb.ProductionMgr.Entities/Entity/PrdReportRecord.cs | 6 ++++++ ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs | 4 +++- .../Tnb.ProductionMgr/ProductionReportRecordService.cs | 1 + 5 files changed, 17 insertions(+), 1 deletion(-) diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/ReportRecordListOutput.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/ReportRecordListOutput.cs index 09f3aeb3..fafb4e0d 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/ReportRecordListOutput.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/ReportRecordListOutput.cs @@ -15,6 +15,8 @@ namespace Tnb.ProductionMgr.Entities.Dto public string? plan_start_date { get; set; } = string.Empty; public int? reported_work_qty { get; set; } public string? status { get; set; } = string.Empty; + + public string mo_code { get; set; } public List? tablefield107 { get; set; } = new List(); diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMoTaskDefectRecord.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMoTaskDefectRecord.cs index 6d06db85..b463b200 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMoTaskDefectRecord.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMoTaskDefectRecord.cs @@ -82,5 +82,10 @@ public partial class PrdMoTaskDefectRecord : BaseEntity /// 任务类型 /// public string mo_task_type { get; set; } + /// + /// 工单号 + /// + public string? mo_code { get; set; } + } diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdReportRecord.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdReportRecord.cs index 7ed330d8..271f13fa 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdReportRecord.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdReportRecord.cs @@ -69,4 +69,10 @@ public partial class PrdReportRecord : BaseEntity /// 已报工数量 /// public int reported_work_qty { get; set; } + + /// + /// 工单号 + /// + public string? mo_code { get; set; } + } diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs index 7ec20099..6251fdc3 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs @@ -1287,6 +1287,7 @@ namespace Tnb.ProductionMgr record.mo_task_type = mo?.mo_type; record.status = taskInfo.mo_task_status; record.mo_task_id = taskInfo.id; + record.mo_code = mo?.mo_code ?? ""; //record.completed_qty = (await db.Queryable().Where(it => it.mo_task_code == taskInfo.mo_task_code).SumAsync(it => it.reported_work_qty)).Value; prdReportLogs.Add(record); @@ -1307,7 +1308,8 @@ namespace Tnb.ProductionMgr create_time = DateTime.Now, mo_task_id = taskInfo.id, mo_task_code = taskInfo.mo_task_code, - mo_task_type = mo?.mo_type + mo_task_type = mo?.mo_type, + mo_code = mo?.mo_code ?? "", }; sacipRecord.status = taskInfo.mo_task_status; prdTaskDefectLogs.Add(sacipRecord); diff --git a/ProductionMgr/Tnb.ProductionMgr/ProductionReportRecordService.cs b/ProductionMgr/Tnb.ProductionMgr/ProductionReportRecordService.cs index aef57906..5a81dfe0 100644 --- a/ProductionMgr/Tnb.ProductionMgr/ProductionReportRecordService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/ProductionReportRecordService.cs @@ -98,6 +98,7 @@ namespace Tnb.ProductionMgr { id = a.id, masterial_code = a.masterial_code, + mo_code = a.mo_code, masterial_name = a.masterial_name, mo_task_code = a.mo_task_code, mo_task_id = a.mo_task_code, From 92397afcc0464d50c28d5a9abf2884ae0833da86 Mon Sep 17 00:00:00 2001 From: "yang.lee" Date: Tue, 28 Nov 2023 11:27:23 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=87=BD=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E6=94=AF=E6=8C=81=E6=8C=89=E4=BB=BD=E6=95=B0=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dto/Inputs/CarryBarCodeInput.cs | 20 +++++++++++++ .../Tnb.WarehouseMgr/BaseWareHouseService.cs | 20 ++++++++----- .../Tnb.WarehouseMgr/DeviceProviderService.cs | 9 +++++- .../ElevatorControlService.cs | 11 ++----- .../Tnb.WarehouseMgr/WmsCarryService.cs | 29 ++++++++++++------- .../Tnb.WarehouseMgr/WmsFeedingService.cs | 2 +- .../WmsPurchaseAndSaleCommonService.cs | 8 ++--- apihost/Tnb.API.Entry/Startup.cs | 2 +- 8 files changed, 68 insertions(+), 33 deletions(-) create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/CarryBarCodeInput.cs diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/CarryBarCodeInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/CarryBarCodeInput.cs new file mode 100644 index 00000000..667cc688 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/CarryBarCodeInput.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tnb.WarehouseMgr.Entities.Dto.Inputs +{ + public class CarryBarCodeInput + { + /// + /// 打印条码集合 + /// + public List barCodes { get; set; } + /// + /// 打印份数 + /// + public int copies { get; set; } = 2; + } +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs index 2154f966..a51c8936 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs @@ -213,9 +213,10 @@ namespace Tnb.WarehouseMgr /// 条码打印 /// /// 条码 + /// 打印份数 /// [NonAction] - protected void BarCodePrint(List barCodes) + protected void BarCodePrint(List barCodes,int copies) { TaskCompletionSource tcs = new(); // open port. @@ -308,18 +309,21 @@ namespace Tnb.WarehouseMgr foreach (string code in barCodes) { - //print text, true type text. - _ = PPLBUtility.B_Prn_Text(200, 50, 0, 2, 2, 2, 'N', code); - //barcode. - _ = PPLBUtility.B_Prn_Barcode(50, 100, 0, "1", 3, 5, 70, 'B', code);//have a counter - // output. - _ = PPLBUtility.B_Print_Out(1);// copy 2. + for (int i = 0; i < copies; i++) + { + //print text, true type text. + _ = PPLBUtility.B_Prn_Text(150, 50, 0, 2, 2, 2, 'N', code); + //barcode. + _ = PPLBUtility.B_Prn_Barcode(50, 100, 0, "1", 3, 5, 70, 'N', code);//have a counter + // output. + _ = PPLBUtility.B_Print_Out(1);// copy 2. + } } } catch (Exception ex) { tcs.SetException(ex); - JNPF.Logging.Log.Error("条码打印时出现错误", ex); + Logger.Error("条码打印时出现错误", ex); } finally { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs index 86a60422..d1e943df 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs @@ -307,13 +307,15 @@ namespace Tnb.WarehouseMgr [HttpPost, NonUnify, AllowAnonymous] public async Task TaskCallback(TaskCallBackInput input) { - Log.Information($"接收参数:{JsonConvert.SerializeObject(input)}"); + Log.Information($"任务状态上报->接收参数:{JsonConvert.SerializeObject(input)}"); try { List disTasks = await _db.Queryable().Where(it => it.bill_code.Contains(input.taskCode)).ToListAsync(); if (input.action == "LOAD") { + Logger.Information("----------Load Begin----------"); + TaskExecuteAfterUpInput taskExecuteAfterUpInput = new() { disTaskIds = disTasks.Select(x => x.id).ToList() @@ -333,9 +335,13 @@ namespace Tnb.WarehouseMgr } } + Logger.Information("----------Load End----------"); + } else if (input.action == "UNLOAD") { + Logger.Information("----------UnLoad Begin----------"); + TaskCompleUpInput taskCompleUpInput = new() { disTaskIds = disTasks.Select(x => x.id).ToList() @@ -343,6 +349,7 @@ namespace Tnb.WarehouseMgr Logger.Information($"taskCompleUpInput json parameter:{JsonConvert.SerializeObject(taskCompleUpInput)}"); await _wareHouseService.TaskComplate(taskCompleUpInput); + Logger.Information("----------UnLoad end----------"); } } catch (Exception ex) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs index 7a54fecc..9aefd605 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs @@ -39,7 +39,8 @@ namespace Tnb.WarehouseMgr public async Task CallLiftTest(string devName, int floor) { bool isSuccefuly = false; - (int sysStatus, int runStatus, _, int doorStatus, int agvStatus) = await GetElevatorStatus(devName, CancellationToken.None); + var tags = new[] { "SysStatus", "RunStatus", "FloorNo", "DoorStatus", "AGVStatus" }; + (int sysStatus, int runStatus, _, int doorStatus, int agvStatus) = await GetElevatorStatus(devName, tags, CancellationToken.None); //判断当前楼层是否是放货楼层,如不是则呼叫电梯到当前楼层 if (sysStatus.ToEnum() == EnumSysStatus.正常状态 && runStatus.ToEnum() == EnumRunStatus.停梯 && agvStatus.ToEnum() != EnumAgvStatus.AGV运行状态) @@ -364,7 +365,7 @@ namespace Tnb.WarehouseMgr { dynamic result = await WriteTagAsync(devName, ElevatorConsts.AGVControl, 1); JObject jo = JObject.Parse(result); - if (jo != null && jo.Value("Result").Equals("Ok", StringComparison.OrdinalIgnoreCase)) + if (jo != null && jo!.Value("Result")!.Equals("Ok", StringComparison.OrdinalIgnoreCase)) { isInAgvStatus = true; } @@ -402,10 +403,4 @@ namespace Tnb.WarehouseMgr return isSuccefuly; } } - - public class ElevatorData - { - public string? name { get; set; } - public string? value { get; set; } - } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs index 6718c9fd..8288169b 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs @@ -236,8 +236,9 @@ namespace Tnb.WarehouseMgr [HttpPost, AllowAnonymous] public async Task BatchAdd(CarryBatchAddInput input) { - int i = 0, r = 0, num = 0; - var nonZeroPattern = @"[1-9]+"; + int r = 0, num = 0; + //var nonZeroPattern = @"[1-9]+"; + var nonZeroPattern = @"\d+"; var code = input.carry_code.Match(@"\D+"); if (input.carry_code.IsMatch(@"\d+")) { @@ -246,26 +247,33 @@ namespace Tnb.WarehouseMgr var carrys = await _db.Queryable().Where(it => it.carry_code.Contains(code)).ToListAsync(); if (carrys?.Count < 1) { - i = Math.Max(num, 1); + num = Math.Max(num, 1); } else { var lastCarry = carrys?.OrderByDescending(o => o.carry_code).FirstOrDefault() ?? default; num = lastCarry?.carry_code.Match(nonZeroPattern).ParseToInt() ?? -1; - i = num + 1; + num = num + 1; } - var batchCarrys = new List(); - for (; i <= input.quantity; i++) + var batchCarrys = new List(input.quantity); + + for (var i = 1; i <= input.quantity; i++) { + if (i != 1) + { + num += 1; + } var sb = new StringBuilder(); sb.Append(code); - sb.Append(i.ToString().PadLeft(4, '0')); + sb.Append(num.ToString().PadLeft(5, '0')); var carryCode = sb.ToString(); WmsCarryH carry = input.Adapt(); carry.id = SnowflakeIdHelper.NextId(); carry.carry_name = carryCode; carry.carry_code = carryCode; + carry.is_check = 1; + carry.status = 1; carry.create_id = "25398501929509"; carry.create_time = DateTime.Now; batchCarrys.Add(carry); @@ -280,10 +288,11 @@ namespace Tnb.WarehouseMgr /// /// [HttpPost] - public new void BarCodePrint(List barCodes) + public new void BarCodePrint(CarryBarCodeInput input) { - base.BarCodePrint(barCodes); - + if (input.barCodes == null || input.barCodes.Count < 1) throw new ArgumentNullException(nameof(input.barCodes)); + input.barCodes = input.barCodes.OrderBy(o => o).ToList(); + base.BarCodePrint(input.barCodes, input.copies); } } } \ No newline at end of file diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsFeedingService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsFeedingService.cs index 098f8871..e773e92b 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsFeedingService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsFeedingService.cs @@ -46,7 +46,7 @@ namespace Tnb.WarehouseMgr .Mapper(it => it.material_name = (it.material_id != null && dicMaterial.ContainsKey(it.material_id)) ? dicMaterial[it.material_id].ToString() : "") .ToListAsync(); - return items ?? Enumerable.Empty(); + return items ?? Enumerable.Empty(); } } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseAndSaleCommonService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseAndSaleCommonService.cs index eaef030d..a558483d 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseAndSaleCommonService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseAndSaleCommonService.cs @@ -47,8 +47,8 @@ namespace Tnb.WarehouseMgr if (input == null) throw new ArgumentNullException("input"); if (input.details == null) throw new ArgumentNullException(nameof(input.details)); - var materialIds = input.details.Select(x => x.material_id).ToList(); - var purchaseDs = await _db.Queryable().Where(it => materialIds.Contains(it.material_id)).ToListAsync(); + var ids = input.details.Select(x => x.id).ToList(); + var purchaseDs = await _db.Queryable().Where(it => ids.Contains(it.id)).ToListAsync(); if (purchaseDs?.Count > 0) { @@ -56,7 +56,7 @@ namespace Tnb.WarehouseMgr foreach (var pd in purchaseDs) { - var pdInput = input.details.Find(x => x.material_id == pd.material_id); + var pdInput = input.details.Find(x => x.id == pd.id); if (pdInput != null) { pd.purchase_prqty += pdInput.purchase_arriveqty; @@ -112,7 +112,7 @@ namespace Tnb.WarehouseMgr if (s_materialMap.Count == 0) { //物料+规格型号+批次+箱号 - //s_materialMap = await _db.Queryable().ToDictionaryAsync(x => $"{}{}{}{}", x => x.name); + ////s_materialMap = await _db.Queryable().ToDictionaryAsync(x => x.id, x => x.name); } var list = await _db.Queryable().Where(it => it.bill_id == pkId) .Mapper(it => it.material_name = s_materialMap.ContainsKey(it.material_id) ? s_materialMap[it.material_id]?.ToString() ?? "" : "") diff --git a/apihost/Tnb.API.Entry/Startup.cs b/apihost/Tnb.API.Entry/Startup.cs index 2196fe41..049b470c 100644 --- a/apihost/Tnb.API.Entry/Startup.cs +++ b/apihost/Tnb.API.Entry/Startup.cs @@ -59,7 +59,7 @@ public class Startup : AppStartup services.AddHostedService(); //services.AddHostedService(); - + }