From a0a59c0ae71498d31803211b948fff9aec3007d2 Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Thu, 26 Oct 2023 14:59:13 +0800 Subject: [PATCH 01/29] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E7=82=B9=E6=A3=80?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=97=B6=E9=97=B4=E5=80=92=E5=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs b/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs index 5dd63d33..fa0bbcc6 100644 --- a/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs +++ b/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs @@ -80,6 +80,7 @@ namespace Tnb.EquipMgr repeat_user_id = d.RealName, repeat_user_id_id = a.repeat_user_id, }) + .OrderByDescending(a=>a.create_time) .Mapper(a => { a.status = a.status=="1" ? "待执行" : a.status=="2" ? "待复核" : "已完成"; From 82017178dd490b05926fa58704e1a0fda9ea97ad Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Thu, 26 Oct 2023 15:56:38 +0800 Subject: [PATCH 02/29] =?UTF-8?q?=E9=87=8D=E5=86=99=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E4=BF=9D=E5=85=BB=E6=89=A7=E8=A1=8C=E5=88=97=E8=A1=A8=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3+bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dto/EqpMaintainRecordListOutput.cs | 25 ++++++++++ .../Dto/EqpSpotInsRecordListOutput.cs | 4 ++ .../Tnb.EquipMgr/EquMaintainRecordService.cs | 48 +++++++++++++++++++ .../Tnb.EquipMgr/EquSpotInsRecordService.cs | 9 ++-- 4 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpMaintainRecordListOutput.cs diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpMaintainRecordListOutput.cs b/EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpMaintainRecordListOutput.cs new file mode 100644 index 00000000..14af7e74 --- /dev/null +++ b/EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpMaintainRecordListOutput.cs @@ -0,0 +1,25 @@ +namespace Tnb.EquipMgr.Entities.Dto +{ + public class EqpMaintainRecordListOutput + { + public string id { get; set; } + public string equip_id { get; set; } + public string equip_id_id { get; set; } + public string status { get; set; } + public string result { get; set; } + public string result_remark { get; set; } + public string repeat_result { get; set; } + public string repeat_remark { get; set; } + public string create_time { get; set; } + public string execute_time { get; set; } + public string repeat_user_id { get; set; } + public string repeat_user_id_id { get; set; } + public string execute_user_id{ get; set; } + public string execute_user_id_id { get; set; } + public string repeat_time { get; set; } + + public DateTime? date_repeat_time { get; set; } + public DateTime? date_create_time { get; set; } + public DateTime? date_execute_time { get; set; } + } +} \ No newline at end of file diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpSpotInsRecordListOutput.cs b/EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpSpotInsRecordListOutput.cs index f09d07ff..97af0a07 100644 --- a/EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpSpotInsRecordListOutput.cs +++ b/EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpSpotInsRecordListOutput.cs @@ -15,5 +15,9 @@ namespace Tnb.EquipMgr.Entities.Dto public string spot_record_user_id{ get; set; } public string spot_record_user_id_id { get; set; } public string repeat_time { get; set; } + + public DateTime? date_repeat_time { get; set; } + public DateTime? date_create_time { get; set; } + public DateTime? date_spot_record_date_time { get; set; } } } \ No newline at end of file diff --git a/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs b/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs index 899d9dbf..c8268edc 100644 --- a/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs +++ b/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs @@ -2,6 +2,7 @@ using JNPF.Common.Core.Manager; using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Filter; +using JNPF.Common.Security; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.FriendlyException; @@ -9,6 +10,7 @@ using JNPF.Systems.Entitys.Permission; using JNPF.Systems.Entitys.System; using JNPF.VisualDev; using JNPF.VisualDev.Entitys; +using JNPF.VisualDev.Entitys.Dto.VisualDevModelData; using JNPF.VisualDev.Interfaces; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; @@ -44,8 +46,54 @@ namespace Tnb.EquipMgr _visualDevService = visualDevService; _runService = runService; _userManager = userManager; + OverideFuncs.GetListAsync = GetList; // OverideFuncs.UpdateAsync = ExecuteSpotIns; } + + private async Task GetList(VisualDevModelListQueryInput input) + { + var db = _repository.AsSugarClient(); + Dictionary? queryJson = (input==null || string.IsNullOrEmpty(input.queryJson)) ? new Dictionary() : input.queryJson.ToObject>(); + string equioInfo = queryJson.ContainsKey("query_info") ? (queryJson["query_info"].ToString() ?? "") : ""; + string status = queryJson.ContainsKey("status") ? (queryJson["status"].ToString() ?? "") : ""; + var list = await db.Queryable((a, b, c,d) => new object[] + { + JoinType.Left, a.equip_id == b.id, + JoinType.Left, a.execute_user_id == c.Id, + JoinType.Left, a.repeat_user_id == d.Id, + }) + .WhereIF(!string.IsNullOrEmpty(status),(a,b,c)=>a.status==status) + .WhereIF(!string.IsNullOrEmpty(equioInfo),(a,b,c)=>b.code.Contains(equioInfo)|| b.name.Contains(equioInfo)) + .Select((a, b, c,d) => new EqpMaintainRecordListOutput + { + id = a.id, + equip_id = b.code+"/"+b.name, + equip_id_id = a.equip_id, + status = a.status, + result = a.result=="1" ? "合格" : "不合格", + repeat_result = a.repeat_result=="1" ? "合格" : "不合格", + date_create_time = a.create_time, + date_execute_time = a.execute_time, + date_repeat_time = a.repeat_time, + execute_user_id = c.RealName, + execute_user_id_id = a.execute_user_id, + repeat_user_id = d.RealName, + repeat_user_id_id = a.repeat_user_id, + result_remark = a.result_remark, + repeat_remark = a.repeat_remark + }) + .OrderByDescending(a=>a.create_time) + .Mapper(a => + { + a.status = a.status=="1" ? "待执行" : a.status=="2" ? "待复核" : "已完成"; + a.create_time = a.date_create_time == null ? "" : a.date_create_time.Value.ToString("yyyy-MM-dd HH:mm:ss"); + a.execute_time = a.date_execute_time == null ? "" : a.date_execute_time.Value.ToString("yyyy-MM-dd HH:mm:ss"); + a.repeat_time = a.date_repeat_time == null ? "" : a.date_repeat_time.Value.ToString("yyyy-MM-dd HH:mm:ss"); + }) + .ToPagedListAsync((input?.currentPage ?? 1), (input?.pageSize ?? 50)); + + return PageResult.SqlSugarPageResult(list); + } /// /// 执行设备保养计划 diff --git a/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs b/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs index fa0bbcc6..343d124a 100644 --- a/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs +++ b/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs @@ -72,9 +72,9 @@ namespace Tnb.EquipMgr status = a.status, result = a.result=="1" ? "合格" : "不合格", repeat_result = a.repeat_result=="1" ? "合格" : "不合格", - create_time = a.create_time==null ? "" : a.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss"), - spot_record_date_time = a.spot_record_date_time==null ? "" : a.spot_record_date_time.Value.ToString("yyyy-MM-dd HH:mm:ss"), - repeat_time = a.repeat_time==null ? "" : a.repeat_time.Value.ToString("yyyy-MM-dd HH:mm:ss"), + date_create_time = a.create_time, + date_spot_record_date_time = a.spot_record_date_time, + date_repeat_time = a.repeat_time, spot_record_user_id = c.RealName, spot_record_user_id_id = a.spot_record_user_id, repeat_user_id = d.RealName, @@ -84,6 +84,9 @@ namespace Tnb.EquipMgr .Mapper(a => { a.status = a.status=="1" ? "待执行" : a.status=="2" ? "待复核" : "已完成"; + a.create_time = a.date_create_time == null ? "" : a.date_create_time.Value.ToString("yyyy-MM-dd HH:mm:ss"); + a.spot_record_date_time = a.date_spot_record_date_time == null ? "" : a.date_spot_record_date_time.Value.ToString("yyyy-MM-dd HH:mm:ss"); + a.repeat_time = a.date_repeat_time == null ? "" : a.date_repeat_time.Value.ToString("yyyy-MM-dd HH:mm:ss"); }) .ToPagedListAsync((input?.currentPage ?? 1), (input?.pageSize ?? 50)); From 8e59b885c65c0128efdb9e5b071a4c312102c10c Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Fri, 27 Oct 2023 11:11:47 +0800 Subject: [PATCH 03/29] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=8A=E6=AC=A1?= =?UTF-8?q?=E4=BF=9D=E5=85=BB=E6=97=B6=E9=97=B4=20=E6=8A=A5=E4=BF=AE?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=88=9B=E5=BB=BA=E6=97=B6=E9=97=B4=E5=80=92?= =?UTF-8?q?=E5=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.EquipMgr.Entities/Dto/EqpMaintainRecordListOutput.cs | 2 ++ EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs | 2 ++ EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs | 4 +++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpMaintainRecordListOutput.cs b/EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpMaintainRecordListOutput.cs index 14af7e74..807b00eb 100644 --- a/EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpMaintainRecordListOutput.cs +++ b/EquipMgr/Tnb.EquipMgr.Entities/Dto/EqpMaintainRecordListOutput.cs @@ -17,9 +17,11 @@ namespace Tnb.EquipMgr.Entities.Dto public string execute_user_id{ get; set; } public string execute_user_id_id { get; set; } public string repeat_time { get; set; } + public string last_execute_time { get; set; } public DateTime? date_repeat_time { get; set; } public DateTime? date_create_time { get; set; } public DateTime? date_execute_time { get; set; } + public DateTime? date_last_execute_time { get; set; } } } \ No newline at end of file diff --git a/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs b/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs index b0d4b5cf..d22e374f 100644 --- a/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs +++ b/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs @@ -270,6 +270,7 @@ namespace Tnb.EquipMgr .LeftJoin((a,b)=>a.apply_user_id==b.Id) .LeftJoin((a,b,c)=>a.repairer_id==c.Id) .Where(a=>a.equip_id==input.equip_id) + .OrderByDescending(a=>a.create_time) .Select((a,b,c) => new EquipRepairRecordQueryOutput { id = a.id, @@ -323,6 +324,7 @@ namespace Tnb.EquipMgr .LeftJoin((a,b,c,d,e,f)=>e.Id==f.DictionaryTypeId && a.status==f.EnCode) .WhereIF(!string.IsNullOrEmpty(input.equip_info),(a,b,c,d)=>d.code.Contains(input.equip_info) || d.name.Contains(input.equip_info)) .WhereIF(!string.IsNullOrEmpty(input.status),(a,b,c,d)=>statusList.Contains(a.status)) + .OrderByDescending(a=>a.create_time) .Select((a,b,c,d,e,f) => new PadRepairListOutput { id = a.id, diff --git a/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs b/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs index c8268edc..2586b191 100644 --- a/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs +++ b/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs @@ -80,7 +80,8 @@ namespace Tnb.EquipMgr repeat_user_id = d.RealName, repeat_user_id_id = a.repeat_user_id, result_remark = a.result_remark, - repeat_remark = a.repeat_remark + repeat_remark = a.repeat_remark, + date_last_execute_time = SqlFunc.Subqueryable().Where(x=>a.equip_id==x.equip_id && a.execute_time!=null).OrderByDesc(x=>x.execute_time).Select(x=>x.execute_time) }) .OrderByDescending(a=>a.create_time) .Mapper(a => @@ -89,6 +90,7 @@ namespace Tnb.EquipMgr a.create_time = a.date_create_time == null ? "" : a.date_create_time.Value.ToString("yyyy-MM-dd HH:mm:ss"); a.execute_time = a.date_execute_time == null ? "" : a.date_execute_time.Value.ToString("yyyy-MM-dd HH:mm:ss"); a.repeat_time = a.date_repeat_time == null ? "" : a.date_repeat_time.Value.ToString("yyyy-MM-dd HH:mm:ss"); + a.last_execute_time = a.date_last_execute_time == null ? "" : a.date_last_execute_time.Value.ToString("yyyy-MM-dd HH:mm:ss"); }) .ToPagedListAsync((input?.currentPage ?? 1), (input?.pageSize ?? 50)); From 85d2a68e98670b3a4fed009ba4342caddb9f1016 Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Fri, 27 Oct 2023 14:41:33 +0800 Subject: [PATCH 04/29] =?UTF-8?q?sqlsugar=E7=9A=84PostgreSQL=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=20=E6=97=B6=E9=97=B4=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E5=8C=96=E5=88=86=E9=92=9Fmm=E6=94=B9=E4=B8=BAmi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Consts/DbTimeFormat.cs | 15 +++++++++++ BasicData/Tnb.BasicData/BasMbomService.cs | 4 +-- EquipMgr/Tnb.EquipMgr/EqpDaqService.cs | 3 ++- .../Tnb.EquipMgr/EqpRepairApplyService.cs | 8 +++--- .../Tnb.EquipMgr/EquMaintainRecordService.cs | 8 +++--- .../Tnb.EquipMgr/EquSpotInsRecordService.cs | 9 ++++--- .../Dto/PrdManage/PADPackageTaskPageOutput.cs | 4 +++ .../PrdCancelCloseDownService.cs | 4 +-- .../Tnb.ProductionMgr/PrdMoService.cs | 22 ++++++++-------- .../PrdMoTaskIssueService.cs | 2 +- .../Tnb.ProductionMgr/PrdMoTaskService.cs | 26 +++++++++++-------- .../Tnb.ProductionMgr/PrdPackReportService.cs | 21 +++++++++------ .../ProductionReportRecordService.cs | 2 +- 13 files changed, 79 insertions(+), 49 deletions(-) create mode 100644 BasicData/Tnb.BasicData.Entities/Consts/DbTimeFormat.cs diff --git a/BasicData/Tnb.BasicData.Entities/Consts/DbTimeFormat.cs b/BasicData/Tnb.BasicData.Entities/Consts/DbTimeFormat.cs new file mode 100644 index 00000000..640564f5 --- /dev/null +++ b/BasicData/Tnb.BasicData.Entities/Consts/DbTimeFormat.cs @@ -0,0 +1,15 @@ +namespace Tnb.BasicData +{ + public static class DbTimeFormat + { + /// + /// 2024-10-27 10:10 + /// + public const string MM = "yyyy-MM-dd HH:mi"; + + /// + /// 2024-10-27 10:10:10 + /// + public const string SS = "yyyy-MM-dd HH:mi:ss"; + } +} \ No newline at end of file diff --git a/BasicData/Tnb.BasicData/BasMbomService.cs b/BasicData/Tnb.BasicData/BasMbomService.cs index dbf68bd7..ace5e263 100644 --- a/BasicData/Tnb.BasicData/BasMbomService.cs +++ b/BasicData/Tnb.BasicData/BasMbomService.cs @@ -229,8 +229,8 @@ namespace Tnb.BasicData bom_id = a.id, material_code = b.code, material_name = b.name, - start_time = a.start_time.HasValue ? a.start_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : null, - end_time = a.end_time.HasValue ? a.end_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : null, + start_time = a.start_time.HasValue ? a.start_time.Value.ToString(DbTimeFormat.SS) : null, + end_time = a.end_time.HasValue ? a.end_time.Value.ToString(DbTimeFormat.SS) : null, version = a.version, route_id = c.id, route_name = c.name, diff --git a/EquipMgr/Tnb.EquipMgr/EqpDaqService.cs b/EquipMgr/Tnb.EquipMgr/EqpDaqService.cs index 6c233f6d..39e605a2 100644 --- a/EquipMgr/Tnb.EquipMgr/EqpDaqService.cs +++ b/EquipMgr/Tnb.EquipMgr/EqpDaqService.cs @@ -9,6 +9,7 @@ using SqlSugar; using Tnb.EquipMgr.Entities; using Tnb.EquipMgr.Entities.Dto; using Tnb.EquipMgr.Interfaces; +using Tnb.BasicData; namespace Tnb.EquipMgr { @@ -48,7 +49,7 @@ namespace Tnb.EquipMgr id = a.id, data_source = a.data_source, create_id = b.RealName, - create_time = a.create_time==null ? null : a.create_time.Value.ToString("yyyy-MM-dd HH:mm"), + create_time = a.create_time==null ? null : a.create_time.Value.ToString(DbTimeFormat.MM), data_type = a.data_type, enabled = a.enabled==1 ? "是" : "否", equip_id = a.equip_id, diff --git a/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs b/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs index d22e374f..883d2bc5 100644 --- a/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs +++ b/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs @@ -281,7 +281,7 @@ namespace Tnb.EquipMgr is_ugent = a.is_ugent==1 ? "是" : "否", description = a.description, repair_description = a.repair_description, - complete_time = a.complete_time==null ? null : a.complete_time.Value.ToString("yyyy-MM-dd HH:mm"), + complete_time = a.complete_time==null ? null : a.complete_time.Value.ToString(DbTimeFormat.MM), repairer_id = c.RealName }).ToPagedListAsync(input.currentPage, input.pageSize); @@ -336,9 +336,9 @@ namespace Tnb.EquipMgr apply_user_id_id =b.Id, is_ugent = a.is_ugent==1 ? "是" : "否", description = a.description, - create_time = a.create_time==null ? "" : a.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss"), - complete_time = a.complete_time==null ? "" : a.complete_time.Value.ToString("yyyy-MM-dd HH:mm:ss"), - expect_complete_time = a.expect_complete_time==null ? "" : a.expect_complete_time.Value.ToString("yyyy-MM-dd HH:mm:ss"), + create_time = a.create_time==null ? "" : a.create_time.Value.ToString(DbTimeFormat.SS), + complete_time = a.complete_time==null ? "" : a.complete_time.Value.ToString(DbTimeFormat.SS), + expect_complete_time = a.expect_complete_time==null ? "" : a.expect_complete_time.Value.ToString(DbTimeFormat.SS), repairer_id = c.RealName, repairer_id_id = c.Id, remark = a.remark, diff --git a/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs b/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs index 2586b191..06a35ca7 100644 --- a/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs +++ b/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs @@ -235,17 +235,17 @@ namespace Tnb.EquipMgr { id = a.id, attachment = a.attachment, - create_time = a.create_time==null ? null : a.create_time.Value.ToString("yyyy-MM-dd HH:mm"), + create_time = a.create_time==null ? null : a.create_time.Value.ToString(DbTimeFormat.MM), equip_id = b.code, equip_id_id = a.equip_id, repeat_remark = a.repeat_remark, repeat_result = a.repeat_result=="1"?"合格":"不合格", - repeat_time = a.repeat_time==null ? null : a.repeat_time.Value.ToString("yyyy-MM-dd HH:mm"), + repeat_time = a.repeat_time==null ? null : a.repeat_time.Value.ToString(DbTimeFormat.MM), repeat_user_id = d.RealName, result = a.result=="1"?"合格":"不合格", result_remark = a.result_remark, maintain_tem_equip_id = a.maintain_tem_equip_id, - execute_time = a.execute_time==null ? null : a.execute_time.Value.ToString("yyyy-MM-dd HH:mm"), + execute_time = a.execute_time==null ? null : a.execute_time.Value.ToString(DbTimeFormat.MM), execute_user_id = c.RealName, status = SqlFunc.IF(a.status.Equals("1")).Return("待执行").ElseIF(a.status.Equals("2")).Return("待复核").ElseIF(a.status.Equals("3")).Return("已完成").End("") }).ToPagedListAsync(input.currentPage, input.pageSize); @@ -272,7 +272,7 @@ namespace Tnb.EquipMgr equip_id = a.equip_id, equip_code = b.code, equip_name = b.name, - create_time = a.create_time==null ? "" : a.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss"), + create_time = a.create_time==null ? "" : a.create_time.Value.ToString(DbTimeFormat.SS), result_remark = a.result_remark, result = a.result, status = a.status, diff --git a/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs b/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs index 343d124a..8f74ae18 100644 --- a/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs +++ b/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs @@ -19,6 +19,7 @@ using Tnb.BasicData.Entities.Dto; using Tnb.EquipMgr.Entities; using Tnb.EquipMgr.Entities.Dto; using Tnb.EquipMgr.Interfaces; +using Tnb.BasicData; namespace Tnb.EquipMgr { @@ -194,16 +195,16 @@ namespace Tnb.EquipMgr { id = a.id, attachment = a.attachment, - create_time = a.create_time==null ? null : a.create_time.Value.ToString("yyyy-MM-dd HH:mm"), + create_time = a.create_time==null ? null : a.create_time.Value.ToString(DbTimeFormat.MM), equip_id = a.equip_id, repeat_remark = a.repeat_remark, repeat_result = a.repeat_result=="1"?"合格":"不合格", - repeat_time = a.repeat_time==null ? null : a.repeat_time.Value.ToString("yyyy-MM-dd HH:mm"), + repeat_time = a.repeat_time==null ? null : a.repeat_time.Value.ToString(DbTimeFormat.MM), repeat_user_id = b.RealName, result = a.result=="1"?"合格":"不合格", result_remark = a.result_remark, spot_ins_tem_equip_id = a.spot_ins_tem_equip_id, - spot_record_date_time = a.spot_record_date_time==null ? null :a.spot_record_date_time.Value.ToString("yyyy-MM-dd HH:mm"), + spot_record_date_time = a.spot_record_date_time==null ? null :a.spot_record_date_time.Value.ToString(DbTimeFormat.MM), spot_record_user_id = a.spot_record_user_id, status = SqlFunc.IF(a.status.Equals("1")).Return("待执行").ElseIF(a.status.Equals("2")).Return("待复核").ElseIF(a.status.Equals("3")).Return("已完成").End("") }).ToPagedListAsync(input.currentPage, input.pageSize); @@ -230,7 +231,7 @@ namespace Tnb.EquipMgr equip_id = a.equip_id, equip_code = b.code, equip_name = b.name, - create_time = a.create_time==null ? "" : a.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss"), + create_time = a.create_time==null ? "" : a.create_time.Value.ToString(DbTimeFormat.SS), result_remark = a.result_remark, result = a.result, status = a.status, diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PADPackageTaskPageOutput.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PADPackageTaskPageOutput.cs index 545a5690..0c618be8 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PADPackageTaskPageOutput.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PADPackageTaskPageOutput.cs @@ -122,5 +122,9 @@ namespace Tnb.ProductionMgr.Entities.Dto.PrdManage /// 预计结束时间 /// public string? plan_end_date { get; set; } + /// + /// 实际完工日期 + /// + public string? act_end_date { get; set; } } } \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdCancelCloseDownService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdCancelCloseDownService.cs index c4ee9108..d2d3806c 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdCancelCloseDownService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdCancelCloseDownService.cs @@ -167,8 +167,8 @@ namespace Tnb.ProductionMgr { eqp_code = it.eqp_code, eqp_name = it.eqp_name, - closedown_start_time = it.closedown_start_time.HasValue ? it.closedown_start_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : null, - closedown_end_time = it.closedown_end_time.HasValue ? it.closedown_end_time.Value.ToString("yyyy-MM-dd HH:mm:ss") : null, + closedown_start_time = it.closedown_start_time.HasValue ? it.closedown_start_time.Value.ToString(DbTimeFormat.SS) : null, + closedown_end_time = it.closedown_end_time.HasValue ? it.closedown_end_time.Value.ToString(DbTimeFormat.SS) : null, closedown_time = it.closedown_time, }) .ToListAsync(); diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs index 593aa663..823e74c8 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs @@ -396,8 +396,8 @@ namespace Tnb.ProductionMgr id = x.id, mo_task_code = x.mo_task_code, mo_task_status = y.FullName, - estimated_start_date = x.estimated_start_date==null ? "" : x.estimated_start_date.Value.ToString("yyyy-MM-dd HH:mm:ss"), - estimated_end_date = x.estimated_end_date==null ? "" : x.estimated_end_date.Value.ToString("yyyy-MM-dd HH:mm:ss"), + estimated_start_date = x.estimated_start_date==null ? "" : x.estimated_start_date.Value.ToString(DbTimeFormat.SS), + estimated_end_date = x.estimated_end_date==null ? "" : x.estimated_end_date.Value.ToString(DbTimeFormat.SS), scheduled_qty = x.scheduled_qty, reported_work_qty = x.reported_work_qty, scrap_qty = x.scrap_qty, @@ -456,8 +456,8 @@ namespace Tnb.ProductionMgr material_code = b.code, material_name = b.name, material_standard = b.material_standard, - act_start_date = a.act_start_date==null ? "" : a.act_start_date.Value.ToString("yyyy-MM-dd HH:mm:ss"), - act_end_date = a.act_end_date==null ? "" : a.act_end_date.Value.ToString("yyyy-MM-dd HH:mm:ss") + act_start_date = a.act_start_date==null ? "" : a.act_start_date.Value.ToString(DbTimeFormat.SS), + act_end_date = a.act_end_date==null ? "" : a.act_end_date.Value.ToString(DbTimeFormat.SS) }).ToPagedListAsync(input.currentPage, input.pageSize); return PageResult.SqlSugarPageResult(result); } @@ -500,8 +500,8 @@ namespace Tnb.ProductionMgr material_code = b.code, material_name = b.name, material_standard = b.material_standard, - act_start_date = a.act_start_date == null ? "" : a.act_start_date.Value.ToString("yyyy-MM-dd HH:mm:ss"), - act_end_date = a.act_end_date == null ? "" : a.act_end_date.Value.ToString("yyyy-MM-dd HH:mm:ss"), + act_start_date = a.act_start_date == null ? "" : a.act_start_date.Value.ToString(DbTimeFormat.SS), + act_end_date = a.act_end_date == null ? "" : a.act_end_date.Value.ToString(DbTimeFormat.SS), workshop_name = e.FullName, station_name = d.FullName, equip_code = f.code @@ -525,8 +525,8 @@ namespace Tnb.ProductionMgr material_code = b.code, material_name = b.name, material_standard = b.material_standard, - act_start_date = a.act_start_date == null ? "" : a.act_start_date.Value.ToString("yyyy-MM-dd HH:mm:ss"), - act_end_date = a.act_end_date == null ? "" : a.act_end_date.Value.ToString("yyyy-MM-dd HH:mm:ss"), + act_start_date = a.act_start_date == null ? "" : a.act_start_date.Value.ToString(DbTimeFormat.SS), + act_end_date = a.act_end_date == null ? "" : a.act_end_date.Value.ToString(DbTimeFormat.SS), workline_name = c.FullName, mbom_version = d.version }).ToListAsync(); @@ -751,8 +751,8 @@ namespace Tnb.ProductionMgr batch = a.batch, supplier_name = d.supplier_name, check_conclusion = c.check_conclusion, - instock_time = c.instock_time.ToString("yyyy-MM-dd HH:mm:ss"), - feeding_time = e.create_time == null ? "" : e.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss"), + instock_time = c.instock_time.ToString(DbTimeFormat.SS), + feeding_time = e.create_time == null ? "" : e.create_time.Value.ToString(DbTimeFormat.SS), }).ToListAsync(); } @@ -984,7 +984,7 @@ namespace Tnb.ProductionMgr feeding_detail_id = x.id, feeding_time = y.create_time == null ? "" - : y.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss"), + : y.create_time.Value.ToString(DbTimeFormat.SS), num = x.num, check_conclusion = mp.check_conclusion, feeding_name = z.RealName, diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskIssueService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskIssueService.cs index 9a07fb20..72fd26ad 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskIssueService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskIssueService.cs @@ -128,7 +128,7 @@ namespace Tnb.ProductionMgr mo_task_status = d.FullName, plan_qty = f.plan_qty, scheduled_qty = a.scheduled_qty, - create_time = a.create_time==null ? "" :a.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss"), + create_time = a.create_time==null ? "" :a.create_time.Value.ToString(DbTimeFormat.SS), }).OrderByDescending(a=>a.create_time).ToPagedListAsync(input.currentPage, input.pageSize); return PageResult.SqlSugarPageResult(result); } diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs index 0bcd8872..e04856d5 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs @@ -320,13 +320,13 @@ namespace Tnb.ProductionMgr eqp_name = e.name, eqp_type_code = SqlFunc.Subqueryable().Where(it => it.id == e.equip_type_id).Select(it => it.code), mo_task_qty = SqlFunc.Subqueryable().Where(a => a.mo_id == moId).Count(), - estimated_start_date = a.estimated_start_date.Value.ToString("yyyy-MM-dd HH:mm:ss"), - estimated_end_date = a.estimated_end_date.Value.ToString("yyyy-MM-dd HH:mm:ss"), + estimated_start_date = a.estimated_start_date.Value.ToString(DbTimeFormat.SS), + estimated_end_date = a.estimated_end_date.Value.ToString(DbTimeFormat.SS), plan_qty = a.scheduled_qty, complete_qty = SqlFunc.IsNull(a.reported_work_qty,0)+SqlFunc.IsNull(a.scrap_qty,0), process_code = SqlFunc.Subqueryable().Where(it => it.id == a.process_id).Select(it => it.process_code), process_name = SqlFunc.Subqueryable().Where(it => it.id == a.process_id).Select(it => it.process_name), - create_time = a.create_time==null ? "" : a.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss"), + create_time = a.create_time==null ? "" : a.create_time.Value.ToString(DbTimeFormat.SS), }) .Mapper(it => { @@ -353,11 +353,11 @@ namespace Tnb.ProductionMgr process_code = e.process_code, process_name = e.process_name, mo_task_qty = SqlFunc.Subqueryable().Where(a => a.mo_id == moId).Count(), - estimated_start_date = a.estimated_start_date.Value.ToString("yyyy-MM-dd HH:mm:ss"), - estimated_end_date = a.estimated_end_date.Value.ToString("yyyy-MM-dd HH:mm:ss"), + estimated_start_date = a.estimated_start_date.Value.ToString(DbTimeFormat.SS), + estimated_end_date = a.estimated_end_date.Value.ToString(DbTimeFormat.SS), plan_qty = a.scheduled_qty, complete_qty = SqlFunc.IsNull(a.reported_work_qty,0)+SqlFunc.IsNull(a.scrap_qty,0), - create_time = a.create_time==null ? "" : a.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss"), + create_time = a.create_time==null ? "" : a.create_time.Value.ToString(DbTimeFormat.SS), }) .Mapper(it => { @@ -399,8 +399,8 @@ namespace Tnb.ProductionMgr scheduled_qty = a.scheduled_qty, plan_qty = SqlFunc.Subqueryable().Where(it => it.id == a.mo_id).Select(it => it.plan_qty), complete_qty = a.last_process_complete_qty, - estimated_start_date = a.estimated_start_date==null ? null : a.estimated_start_date.Value.ToString("yyyy-MM-dd HH:mm"), - estimated_end_date = a.estimated_end_date==null ? null : a.estimated_end_date.Value.ToString("yyyy-MM-dd HH:mm"), + estimated_start_date = a.estimated_start_date==null ? null : a.estimated_start_date.Value.ToString(DbTimeFormat.MM), + estimated_end_date = a.estimated_end_date==null ? null : a.estimated_end_date.Value.ToString(DbTimeFormat.MM), bom_id = d.id, bom_version = d.version }) @@ -436,8 +436,8 @@ namespace Tnb.ProductionMgr plan_qty = d.plan_qty, process_task_qty = a.process_task_qty, complete_qty = SqlFunc.IsNull(a.reported_work_qty,0)+SqlFunc.IsNull(a.scrap_qty,0), - estimated_start_date = a.estimated_start_date==null ? null : a.estimated_start_date.Value.ToString("yyyy-MM-dd HH:mm"), - estimated_end_date = a.estimated_end_date==null ? null : a.estimated_end_date.Value.ToString("yyyy-MM-dd HH:mm"), + estimated_start_date = a.estimated_start_date==null ? null : a.estimated_start_date.Value.ToString(DbTimeFormat.MM), + estimated_end_date = a.estimated_end_date==null ? null : a.estimated_end_date.Value.ToString(DbTimeFormat.MM), process_name = e.process_name, bom_version = SqlFunc.Subqueryable().Where(it => it.material_id == a.material_id).Select(it => it.version) }) @@ -1163,6 +1163,10 @@ namespace Tnb.ProductionMgr { prdTaskList.ForEach(x => x.act_start_date = DateTime.Now); } + if (behavior == PrdTaskBehavior.Compled) + { + prdTaskList.ForEach(x => x.act_end_date = DateTime.Now); + } row = await db.Updateable(prdTaskList).ExecuteCommandAsync(); foreach (var item in prdTaskList) { @@ -2080,7 +2084,7 @@ namespace Tnb.ProductionMgr estimated_end_date = a.estimated_end_date==null ? "" : a.estimated_end_date.Value.ToString("yyyy-MM-dd"), eqp_id = a.eqp_id==null ? "" : h.code+"/"+h.name, eqp_id_id = a.eqp_id, - create_time = a.create_time==null ? "" :a.create_time.Value.ToString("yyyy-MM-dd HH:mm:ss") + create_time = a.create_time==null ? "" :a.create_time.Value.ToString(DbTimeFormat.SS) }).OrderByDescending(a => a.create_time).ToPagedListAsync(input.currentPage, input.pageSize); return PageResult.SqlSugarPageResult(result); } diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs index 4d9a4742..02f4e4c8 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs @@ -276,8 +276,8 @@ namespace Tnb.ProductionMgr scrap_qty = a.scrap_qty, scheduled_qty = a.scheduled_qty, reported_work_qty = a.reported_work_qty, - estimated_start_date = a.estimated_start_date==null ? "" : a.estimated_start_date.Value.ToString("yyyy-MM-dd HH:mm:ss"), - estimated_end_date = a.estimated_end_date==null ? "" : a.estimated_end_date.Value.ToString("yyyy-MM-dd HH:mm:ss"), + estimated_start_date = a.estimated_start_date==null ? "" : a.estimated_start_date.Value.ToString(DbTimeFormat.SS), + estimated_end_date = a.estimated_end_date==null ? "" : a.estimated_end_date.Value.ToString(DbTimeFormat.SS), parent_id = a.parent_id, process_id = a.process_id, process_name = c.process_name, @@ -332,8 +332,8 @@ namespace Tnb.ProductionMgr scrap_qty = a.scrap_qty, scheduled_qty = a.scheduled_qty, reported_work_qty = a.reported_work_qty, - estimated_start_date = a.estimated_start_date==null ? "" : a.estimated_start_date.Value.ToString("yyyy-MM-dd HH:mm:ss"), - estimated_end_date = a.estimated_end_date==null ? "" : a.estimated_end_date.Value.ToString("yyyy-MM-dd HH:mm:ss"), + estimated_start_date = a.estimated_start_date==null ? "" : a.estimated_start_date.Value.ToString(DbTimeFormat.SS), + estimated_end_date = a.estimated_end_date==null ? "" : a.estimated_end_date.Value.ToString(DbTimeFormat.SS), parent_id = a.parent_id, process_id = a.process_id, process_name = c.process_name, @@ -362,6 +362,8 @@ namespace Tnb.ProductionMgr Dictionary queryJson = string.IsNullOrEmpty(input.queryJson) ? new Dictionary() : input.queryJson.ToObject>(); string mo_task_code = queryJson.ContainsKey("mo_task_code") ? queryJson["mo_task_code"].ToString() : ""; string status = queryJson.ContainsKey("status") ? queryJson["status"].ToString() : ""; + DateTime? start_time = queryJson.ContainsKey("start_time") ? (DateTime?)queryJson["start_time"] : null; + DateTime? end_time = queryJson.ContainsKey("end_time") ? (DateTime?)queryJson["end_time"] : null; List statusList = new List(); if (!string.IsNullOrEmpty(status)) { @@ -402,6 +404,8 @@ namespace Tnb.ProductionMgr .WhereIF(!string.IsNullOrEmpty(mo_task_code),a=>a.mo_task_code.Contains(mo_task_code)) //.WhereIF(!string.IsNullOrEmpty(mo_task_status),a=>a.mo_task_status==mo_task_status) .WhereIF(statusList.Count>0,a=>statusList.Contains(a.mo_task_status)) + .WhereIF(status=="3" && start_time!=null,a=>a.act_end_date>=start_time) + .WhereIF(status=="3" && end_time!=null,a=>a.act_end_date<=end_time) .Select((a, b, c, d, e,f,g,h,i,j) => new PADPackageTaskPageOutput { id = a.id, @@ -419,8 +423,8 @@ namespace Tnb.ProductionMgr scrap_qty = a.scrap_qty, scheduled_qty = a.scheduled_qty, reported_work_qty = a.reported_work_qty, - estimated_start_date = a.estimated_start_date==null ? "" : a.estimated_start_date.Value.ToString("yyyy-MM-dd HH:mm:ss"), - estimated_end_date = a.estimated_end_date==null ? "" : a.estimated_end_date.Value.ToString("yyyy-MM-dd HH:mm:ss"), + estimated_start_date = a.estimated_start_date==null ? "" : a.estimated_start_date.Value.ToString(DbTimeFormat.SS), + estimated_end_date = a.estimated_end_date==null ? "" : a.estimated_end_date.Value.ToString(DbTimeFormat.SS), parent_id = a.parent_id, process_id = a.process_id, process_name = c.process_name, @@ -436,8 +440,9 @@ namespace Tnb.ProductionMgr mold_cavity = g.mold_cavity, moulding_cycle = h.moulding_cycle, standard_time = i.standard_time, - act_start_date = a.act_start_date==null ? "" : a.act_start_date.Value.ToString("yyyy-MM-dd HH:mm:ss"), - plan_end_date = a.plan_end_date==null ? "" : a.plan_end_date.Value.ToString("yyyy-MM-dd HH:mm:ss"), + act_start_date = a.act_start_date==null ? "" : a.act_start_date.Value.ToString(DbTimeFormat.SS), + act_end_date = a.act_end_date==null ? "" : a.act_end_date.Value.ToString(DbTimeFormat.SS), + plan_end_date = a.plan_end_date==null ? "" : a.plan_end_date.Value.ToString(DbTimeFormat.SS), }) .MergeTable() .OrderBy($"{input.sidx} {input.sort}") diff --git a/ProductionMgr/Tnb.ProductionMgr/ProductionReportRecordService.cs b/ProductionMgr/Tnb.ProductionMgr/ProductionReportRecordService.cs index 59ac0e14..6ebdb3ce 100644 --- a/ProductionMgr/Tnb.ProductionMgr/ProductionReportRecordService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/ProductionReportRecordService.cs @@ -126,7 +126,7 @@ namespace Tnb.ProductionMgr reported_qty = x.reported_qty, create_id = y.RealName, create_id_id = x.create_id, - create_time = x.create_time==null ? "" : x.create_time.Value.ToString("yyyy-MM-dd HH:mm"), + create_time = x.create_time==null ? "" : x.create_time.Value.ToString(DbTimeFormat.MM), batch = x.barcode }) }).ToPagedListAsync(input.currentPage, input.pageSize); From 79045a61de0f436b49bd0117a291188f1433f679 Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Fri, 27 Oct 2023 15:23:36 +0800 Subject: [PATCH 05/29] =?UTF-8?q?=E7=82=B9=E6=A3=80=E4=BF=9D=E5=85=BB?= =?UTF-8?q?=E6=8A=A5=E4=BF=AE=E6=B7=BB=E5=8A=A0=E6=97=B6=E9=97=B4=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=20=E8=87=AA=E5=AE=9A=E4=B9=89=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dto/PadRepairListInput.cs | 7 +++++++ EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs | 16 ++++++++++++++-- .../Tnb.EquipMgr/EquMaintainRecordService.cs | 13 ++++++++++++- EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs | 13 ++++++++++++- 4 files changed, 45 insertions(+), 4 deletions(-) diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Dto/PadRepairListInput.cs b/EquipMgr/Tnb.EquipMgr.Entities/Dto/PadRepairListInput.cs index 3d40f76a..07e8c6a7 100644 --- a/EquipMgr/Tnb.EquipMgr.Entities/Dto/PadRepairListInput.cs +++ b/EquipMgr/Tnb.EquipMgr.Entities/Dto/PadRepairListInput.cs @@ -5,5 +5,12 @@ namespace Tnb.EquipMgr.Entities.Dto public string status { get; set; } public string equip_info { get; set; } + + public DateTime? start_time { get; set; } + public DateTime? end_time { get; set; } + + public string sidx { get; set; } + public string sort { get; set; } + } } \ No newline at end of file diff --git a/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs b/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs index 883d2bc5..1e4be533 100644 --- a/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs +++ b/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs @@ -101,7 +101,7 @@ namespace Tnb.EquipMgr string id = dic["id"]; await _repository.UpdateAsync(x => new EqpRepairApply() { - status = RepairApplyStatus.CLOSE + status = RepairApplyStatus.CLOSE, }, x => x.id == id); return "关闭成功"; } @@ -291,6 +291,9 @@ namespace Tnb.EquipMgr [HttpPost] public async Task GetPadRepairList(PadRepairListInput input) { + + DateTime? start_time = input.start_time; + DateTime? end_time = input.end_time; List statusList = new List(); if (!string.IsNullOrEmpty(input.status)) { @@ -315,6 +318,13 @@ namespace Tnb.EquipMgr break; } } + + if (string.IsNullOrEmpty(input.sidx)) + { + input.sidx = "create_time"; + input.sort = "desc"; + } + var db = _repository.AsSugarClient(); var result = await db.Queryable() .LeftJoin((a,b)=>a.apply_user_id==b.Id) @@ -324,7 +334,9 @@ namespace Tnb.EquipMgr .LeftJoin((a,b,c,d,e,f)=>e.Id==f.DictionaryTypeId && a.status==f.EnCode) .WhereIF(!string.IsNullOrEmpty(input.equip_info),(a,b,c,d)=>d.code.Contains(input.equip_info) || d.name.Contains(input.equip_info)) .WhereIF(!string.IsNullOrEmpty(input.status),(a,b,c,d)=>statusList.Contains(a.status)) - .OrderByDescending(a=>a.create_time) + .WhereIF(input.status=="3" && start_time!=null,a=>a.complete_time!=null && a.complete_time>=start_time) + .WhereIF(input.status=="3" && end_time!=null,a=>a.complete_time!=null && a.complete_time<=end_time) + .OrderBy($"{input.sidx} {input.sort}") .Select((a,b,c,d,e,f) => new PadRepairListOutput { id = a.id, diff --git a/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs b/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs index 06a35ca7..693c41da 100644 --- a/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs +++ b/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs @@ -56,6 +56,15 @@ namespace Tnb.EquipMgr Dictionary? queryJson = (input==null || string.IsNullOrEmpty(input.queryJson)) ? new Dictionary() : input.queryJson.ToObject>(); string equioInfo = queryJson.ContainsKey("query_info") ? (queryJson["query_info"].ToString() ?? "") : ""; string status = queryJson.ContainsKey("status") ? (queryJson["status"].ToString() ?? "") : ""; + DateTime? start_time = queryJson.ContainsKey("start_time") ? (DateTime?)queryJson["start_time"] : null; + DateTime? end_time = queryJson.ContainsKey("end_time") ? (DateTime?)queryJson["end_time"] : null; + + if (string.IsNullOrEmpty(input.sidx)) + { + input.sidx = "create_time"; + input.sort = "desc"; + } + var list = await db.Queryable((a, b, c,d) => new object[] { JoinType.Left, a.equip_id == b.id, @@ -64,6 +73,8 @@ namespace Tnb.EquipMgr }) .WhereIF(!string.IsNullOrEmpty(status),(a,b,c)=>a.status==status) .WhereIF(!string.IsNullOrEmpty(equioInfo),(a,b,c)=>b.code.Contains(equioInfo)|| b.name.Contains(equioInfo)) + .WhereIF(status=="3" && start_time!=null,a=>a.execute_time>=start_time) + .WhereIF(status=="3" && end_time!=null,a=>a.execute_time<=end_time) .Select((a, b, c,d) => new EqpMaintainRecordListOutput { id = a.id, @@ -83,7 +94,7 @@ namespace Tnb.EquipMgr repeat_remark = a.repeat_remark, date_last_execute_time = SqlFunc.Subqueryable().Where(x=>a.equip_id==x.equip_id && a.execute_time!=null).OrderByDesc(x=>x.execute_time).Select(x=>x.execute_time) }) - .OrderByDescending(a=>a.create_time) + .OrderBy($"{input.sidx} {input.sort}") .Mapper(a => { a.status = a.status=="1" ? "待执行" : a.status=="2" ? "待复核" : "已完成"; diff --git a/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs b/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs index 8f74ae18..6fc466c8 100644 --- a/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs +++ b/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs @@ -57,6 +57,15 @@ namespace Tnb.EquipMgr Dictionary? queryJson = (input==null || string.IsNullOrEmpty(input.queryJson)) ? new Dictionary() : input.queryJson.ToObject>(); string equioInfo = queryJson.ContainsKey("query_info") ? (queryJson["query_info"].ToString() ?? "") : ""; string status = queryJson.ContainsKey("status") ? (queryJson["status"].ToString() ?? "") : ""; + DateTime? start_time = queryJson.ContainsKey("start_time") ? (DateTime?)queryJson["start_time"] : null; + DateTime? end_time = queryJson.ContainsKey("end_time") ? (DateTime?)queryJson["end_time"] : null; + + if (string.IsNullOrEmpty(input.sidx)) + { + input.sidx = "create_time"; + input.sort = "desc"; + } + var list = await db.Queryable((a, b, c,d) => new object[] { JoinType.Left, a.equip_id == b.id, @@ -65,6 +74,8 @@ namespace Tnb.EquipMgr }) .WhereIF(!string.IsNullOrEmpty(status),(a,b,c)=>a.status==status) .WhereIF(!string.IsNullOrEmpty(equioInfo),(a,b,c)=>b.code.Contains(equioInfo)|| b.name.Contains(equioInfo)) + .WhereIF(status=="3" && start_time!=null,a=>a.spot_record_date_time>=start_time) + .WhereIF(status=="3" && end_time!=null,a=>a.spot_record_date_time<=end_time) .Select((a, b, c,d) => new EqpSpotInsRecordListOutput { id = a.id, @@ -81,7 +92,7 @@ namespace Tnb.EquipMgr repeat_user_id = d.RealName, repeat_user_id_id = a.repeat_user_id, }) - .OrderByDescending(a=>a.create_time) + .OrderBy($"{input.sidx} {input.sort}") .Mapper(a => { a.status = a.status=="1" ? "待执行" : a.status=="2" ? "待复核" : "已完成"; From d54ebf3cba297b8f7541af9462cc1463bae7ee7a Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Fri, 27 Oct 2023 15:41:22 +0800 Subject: [PATCH 06/29] bug --- EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs | 9 +++++++-- EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs | 7 +++++-- EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs | 8 ++++++-- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs b/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs index 1e4be533..aecbaf0e 100644 --- a/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs +++ b/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs @@ -321,9 +321,13 @@ namespace Tnb.EquipMgr if (string.IsNullOrEmpty(input.sidx)) { - input.sidx = "create_time"; + input.sidx = "a.create_time"; input.sort = "desc"; } + else + { + input.sidx = "a." + input.sidx; + } var db = _repository.AsSugarClient(); var result = await db.Queryable() @@ -355,7 +359,8 @@ namespace Tnb.EquipMgr repairer_id_id = c.Id, remark = a.remark, status = f.FullName - }).ToListAsync(); + }) + .ToListAsync(); return result; } diff --git a/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs b/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs index 693c41da..9c21e062 100644 --- a/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs +++ b/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs @@ -61,8 +61,11 @@ namespace Tnb.EquipMgr if (string.IsNullOrEmpty(input.sidx)) { - input.sidx = "create_time"; + input.sidx = "a.create_time"; input.sort = "desc"; + }else + { + input.sidx = "a." + input.sidx; } var list = await db.Queryable((a, b, c,d) => new object[] @@ -75,6 +78,7 @@ namespace Tnb.EquipMgr .WhereIF(!string.IsNullOrEmpty(equioInfo),(a,b,c)=>b.code.Contains(equioInfo)|| b.name.Contains(equioInfo)) .WhereIF(status=="3" && start_time!=null,a=>a.execute_time>=start_time) .WhereIF(status=="3" && end_time!=null,a=>a.execute_time<=end_time) + .OrderBy($"{input.sidx} {input.sort}") .Select((a, b, c,d) => new EqpMaintainRecordListOutput { id = a.id, @@ -94,7 +98,6 @@ namespace Tnb.EquipMgr repeat_remark = a.repeat_remark, date_last_execute_time = SqlFunc.Subqueryable().Where(x=>a.equip_id==x.equip_id && a.execute_time!=null).OrderByDesc(x=>x.execute_time).Select(x=>x.execute_time) }) - .OrderBy($"{input.sidx} {input.sort}") .Mapper(a => { a.status = a.status=="1" ? "待执行" : a.status=="2" ? "待复核" : "已完成"; diff --git a/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs b/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs index 6fc466c8..39eb0c0f 100644 --- a/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs +++ b/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs @@ -62,9 +62,13 @@ namespace Tnb.EquipMgr if (string.IsNullOrEmpty(input.sidx)) { - input.sidx = "create_time"; + input.sidx = "a.create_time"; input.sort = "desc"; } + else + { + input.sidx = "a." + input.sidx; + } var list = await db.Queryable((a, b, c,d) => new object[] { @@ -76,6 +80,7 @@ namespace Tnb.EquipMgr .WhereIF(!string.IsNullOrEmpty(equioInfo),(a,b,c)=>b.code.Contains(equioInfo)|| b.name.Contains(equioInfo)) .WhereIF(status=="3" && start_time!=null,a=>a.spot_record_date_time>=start_time) .WhereIF(status=="3" && end_time!=null,a=>a.spot_record_date_time<=end_time) + .OrderBy($"{input.sidx} {input.sort}") .Select((a, b, c,d) => new EqpSpotInsRecordListOutput { id = a.id, @@ -92,7 +97,6 @@ namespace Tnb.EquipMgr repeat_user_id = d.RealName, repeat_user_id_id = a.repeat_user_id, }) - .OrderBy($"{input.sidx} {input.sort}") .Mapper(a => { a.status = a.status=="1" ? "待执行" : a.status=="2" ? "待复核" : "已完成"; From bef9b53b4d3fdf423747576756e7c4d062e8c894 Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Fri, 27 Oct 2023 16:24:44 +0800 Subject: [PATCH 07/29] bug --- EquipMgr/Tnb.EquipMgr.Entities/Dto/PadRepairListInput.cs | 7 +++---- EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs | 5 ++--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Dto/PadRepairListInput.cs b/EquipMgr/Tnb.EquipMgr.Entities/Dto/PadRepairListInput.cs index 07e8c6a7..daf60528 100644 --- a/EquipMgr/Tnb.EquipMgr.Entities/Dto/PadRepairListInput.cs +++ b/EquipMgr/Tnb.EquipMgr.Entities/Dto/PadRepairListInput.cs @@ -1,6 +1,8 @@ +using JNPF.Common.Filter; + namespace Tnb.EquipMgr.Entities.Dto { - public class PadRepairListInput + public class PadRepairListInput : PageInputBase { public string status { get; set; } @@ -9,8 +11,5 @@ namespace Tnb.EquipMgr.Entities.Dto public DateTime? start_time { get; set; } public DateTime? end_time { get; set; } - public string sidx { get; set; } - public string sort { get; set; } - } } \ No newline at end of file diff --git a/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs b/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs index aecbaf0e..6a78f6c6 100644 --- a/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs +++ b/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs @@ -359,10 +359,9 @@ namespace Tnb.EquipMgr repairer_id_id = c.Id, remark = a.remark, status = f.FullName - }) - .ToListAsync(); + }).ToPagedListAsync((input?.currentPage ?? 1), (input?.pageSize ?? 50)); - return result; + return PageResult.SqlSugarPageResult(result); } } } \ No newline at end of file From bf64b2f068fc1ef4700e99384b40980fdbd5eade Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Fri, 27 Oct 2023 16:37:24 +0800 Subject: [PATCH 08/29] bug --- EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs | 4 ++-- EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs | 4 ++-- ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs b/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs index 9c21e062..043561b7 100644 --- a/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs +++ b/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs @@ -56,8 +56,8 @@ namespace Tnb.EquipMgr Dictionary? queryJson = (input==null || string.IsNullOrEmpty(input.queryJson)) ? new Dictionary() : input.queryJson.ToObject>(); string equioInfo = queryJson.ContainsKey("query_info") ? (queryJson["query_info"].ToString() ?? "") : ""; string status = queryJson.ContainsKey("status") ? (queryJson["status"].ToString() ?? "") : ""; - DateTime? start_time = queryJson.ContainsKey("start_time") ? (DateTime?)queryJson["start_time"] : null; - DateTime? end_time = queryJson.ContainsKey("end_time") ? (DateTime?)queryJson["end_time"] : null; + DateTime? start_time = queryJson.ContainsKey("start_time") ? queryJson["start_time"].ToString()=="" ? null : Convert.ToDateTime(queryJson["start_time"]) : null; + DateTime? end_time = queryJson.ContainsKey("end_time") ? queryJson["end_time"].ToString()=="" ? null : Convert.ToDateTime(queryJson["end_time"]) : null; if (string.IsNullOrEmpty(input.sidx)) { diff --git a/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs b/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs index 39eb0c0f..936f43dc 100644 --- a/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs +++ b/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs @@ -57,8 +57,8 @@ namespace Tnb.EquipMgr Dictionary? queryJson = (input==null || string.IsNullOrEmpty(input.queryJson)) ? new Dictionary() : input.queryJson.ToObject>(); string equioInfo = queryJson.ContainsKey("query_info") ? (queryJson["query_info"].ToString() ?? "") : ""; string status = queryJson.ContainsKey("status") ? (queryJson["status"].ToString() ?? "") : ""; - DateTime? start_time = queryJson.ContainsKey("start_time") ? (DateTime?)queryJson["start_time"] : null; - DateTime? end_time = queryJson.ContainsKey("end_time") ? (DateTime?)queryJson["end_time"] : null; + DateTime? start_time = queryJson.ContainsKey("start_time") ? queryJson["start_time"].ToString()=="" ? null : Convert.ToDateTime(queryJson["start_time"]) : null; + DateTime? end_time = queryJson.ContainsKey("end_time") ? queryJson["end_time"].ToString()=="" ? null : Convert.ToDateTime(queryJson["end_time"]) : null; if (string.IsNullOrEmpty(input.sidx)) { diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs index 02f4e4c8..1bc6d536 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs @@ -362,8 +362,8 @@ namespace Tnb.ProductionMgr Dictionary queryJson = string.IsNullOrEmpty(input.queryJson) ? new Dictionary() : input.queryJson.ToObject>(); string mo_task_code = queryJson.ContainsKey("mo_task_code") ? queryJson["mo_task_code"].ToString() : ""; string status = queryJson.ContainsKey("status") ? queryJson["status"].ToString() : ""; - DateTime? start_time = queryJson.ContainsKey("start_time") ? (DateTime?)queryJson["start_time"] : null; - DateTime? end_time = queryJson.ContainsKey("end_time") ? (DateTime?)queryJson["end_time"] : null; + DateTime? start_time = queryJson.ContainsKey("start_time") ? queryJson["start_time"].ToString()=="" ? null : Convert.ToDateTime(queryJson["start_time"]) : null; + DateTime? end_time = queryJson.ContainsKey("end_time") ? queryJson["end_time"].ToString()=="" ? null : Convert.ToDateTime(queryJson["end_time"]) : null; List statusList = new List(); if (!string.IsNullOrEmpty(status)) { From 40d0878aa65e1b71eae8198458110428f0929420 Mon Sep 17 00:00:00 2001 From: "yang.lee" Date: Fri, 27 Oct 2023 17:08:03 +0800 Subject: [PATCH 09/29] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=BD=92=E7=B1=BB=EF=BC=8C=E5=B0=86=E6=97=A5=E5=BF=97=E5=86=99?= =?UTF-8?q?=E5=85=A5=E5=88=B0=E6=8C=87=E5=AE=9A=E7=9A=84=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.WarehouseMgr/BaseWareHouseService.cs | 2 +- .../BaseWareHouseService`1.cs | 46 +++++++ .../Tnb.WarehouseMgr/DeviceProviderService.cs | 46 ++++--- .../TimedTaskBackgroundService.cs | 21 +-- .../Tnb.WarehouseMgr/WareHouseService.cs | 121 +++++++++++------- .../ElevatorControlSettings.json | 2 +- 6 files changed, 158 insertions(+), 80 deletions(-) create mode 100644 WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService`1.cs diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs index 1d025174..7f4e2ecd 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs @@ -54,7 +54,7 @@ namespace Tnb.WarehouseMgr private static Dictionary _storeMap = new(StringComparer.OrdinalIgnoreCase); public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); private readonly ChannelWriter _channelWriter; - + public BaseWareHouseService(ChannelWriter? channelWriter = default) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService`1.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService`1.cs new file mode 100644 index 00000000..49f33d92 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService`1.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using JNPF.Common.Contracts; +using JNPF.Logging; +using Microsoft.Extensions.Logging; + +namespace Tnb.WarehouseMgr +{ + public class BaseWareHouseService : BaseWareHouseService + { + protected ILogger Logger => LoggerFactory.Create(builder => builder.AddFile($"{AppContext.BaseDirectory}/logs/custom{DateTime.Now:yyyyMMdd}.log", cfgOpts => + { + + //cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff"; + cfgOpts.MessageFormat = (logMsg) => + { + Span span = logMsg.LogLevel.ToString().ToCharArray(); + var sb = new StringBuilder(); + sb.Append($"{span.Slice(0, 4)} "); + sb.Append($"{logMsg.LogName} "); + sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} "); + sb.Append($"#{logMsg.EventId.Id} "); + sb.Append(logMsg.Message + " "); + sb.Append(logMsg.Exception?.ToString()); + return sb.ToString(); + }; + + })).CreateLogger(); + } + + public static class CustomLoggerExtenstions + { + public static void Information(this ILogger logger, string message, params object[] parameters) + { + logger.LogInformation(message, parameters); + } + + public static void Error(this ILogger logger, string message, Exception ex, params object[] parameters) + { + logger.LogError(ex, message, parameters); + } + } +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs index e70fd132..06d111fc 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs @@ -20,12 +20,15 @@ using JNPF.Systems.Interfaces.System; using JNPF.WorkFlow.Entitys.Dto.FlowLaunch; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; using Newtonsoft.Json; using NPOI.OpenXmlFormats; using Senparc.NeuChar.ApiHandlers; using SqlSugar; +using Tnb.Common.Extension; using Tnb.EquipMgr.Entities; using Tnb.WarehouseMgr.Entities; +using Tnb.WarehouseMgr.Entities.Configs; using Tnb.WarehouseMgr.Entities.Consts; using Tnb.WarehouseMgr.Entities.Dto; using Tnb.WarehouseMgr.Entities.Dto.Inputs; @@ -40,7 +43,7 @@ namespace Tnb.WarehouseMgr /// Wms设备接口提供程序服务类 /// - public class DeviceProviderService : BaseWareHouseService + public class DeviceProviderService : BaseWareHouseService { private readonly ISqlSugarClient _db; private readonly IWareHouseService _wareHouseService; @@ -48,6 +51,9 @@ namespace Tnb.WarehouseMgr private readonly IEventPublisher _eventPublisher; private readonly IUserManager _userManager; private readonly IElevatorControlService _elevatorControlService; + private readonly ElevatorControlConfiguration _eleCtlCfg = App.Configuration.Build(); + private readonly ILoggerFactory _loggerFactory; + public DeviceProviderService(ISqlSugarRepository repository, IWareHouseService wareHouseService, @@ -72,6 +78,7 @@ namespace Tnb.WarehouseMgr [HttpPost, NonUnify] public async Task CreateTaskChain() { + Logger.LogInformation("fasdfadsfadsfasdfasdfadsfasdfadsfadsfasdfasdfasdfasdfas"); return await Task.FromResult(null); } @@ -95,14 +102,14 @@ namespace Tnb.WarehouseMgr //Log.Information($"elevator!=null?{elevator!=null}"); - (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus("Elevator1", CancellationToken.None); - Log.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum().ToString()},运行状态:{runStatus.ToEnum().ToString()},Agv状态:{agvStatus.ToEnum().ToString()},当前楼层:{floorNo}"); + (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(_eleCtlCfg.DevName, CancellationToken.None); + Logger.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum().ToString()},运行状态:{runStatus.ToEnum().ToString()},Agv状态:{agvStatus.ToEnum().ToString()},当前楼层:{floorNo}"); { //var endFloor = elevator.end_floor; var floor = 5; if (doorStatus.ToEnum() != EnumDoorStatus.开门到位保持) { - await _elevatorControlService.SendOpenCloseCmd("Elevator1", 3); //发送电梯前门开门指令 + await _elevatorControlService.SendOpenCloseCmd(_eleCtlCfg.DevName, 3); //发送电梯前门开门指令 } if (sysStatus.ToEnum() == EnumSysStatus.正常状态 && runStatus.ToEnum() == EnumRunStatus.停梯) { @@ -130,7 +137,7 @@ namespace Tnb.WarehouseMgr [HttpPost, NonUnify, AllowAnonymous] public async Task UnloadConfirm(ConfirmInput input)// { - Log.Information("放货确认.................."); + Logger.Information("放货确认.................."); try { //根据Agv传递的参数获取,对应的电梯 @@ -141,20 +148,20 @@ namespace Tnb.WarehouseMgr .Select((a, b, c, d) => new WmsElevatorH { end_floor = SqlFunc.ToInt32(c.end_floor) }, true) .FirstAsync(); - (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus("Elevator1", CancellationToken.None);//elevator.elevator_code - Log.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum().ToString()},运行状态:{runStatus},门状态:{doorStatus},Agv状态:{agvStatus},当前楼层:{floorNo}"); + (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(_eleCtlCfg.DevName, CancellationToken.None);//elevator.elevator_code + Logger.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum().ToString()},运行状态:{runStatus},门状态:{doorStatus},Agv状态:{agvStatus},当前楼层:{floorNo}"); //判断Agv电梯是否进入状态 if (agvStatus != (int)EnumAgvStatus.AGV运行状态) { - await _elevatorControlService.WriteTagAsync("Elevator1", ElevatorConsts.AGVControl, 1); + await _elevatorControlService.WriteTagAsync(_eleCtlCfg.DevName, ElevatorConsts.AGVControl, 1); } - Log.Information("目前正常"); + Logger.Information("目前正常"); //电梯到达目标楼层后,判断当前电梯门状态是否为开门到位保持状态 if (doorStatus != (int)EnumDoorStatus.开门到位保持) { - await _elevatorControlService.SendOpenCloseCmd("Elevator1", 3); //发送电梯前门开门指令 + await _elevatorControlService.SendOpenCloseCmd(_eleCtlCfg.DevName, 3); //发送电梯前门开门指令 } if (sysStatus == (int)EnumSysStatus.正常状态 && runStatus == (int)EnumRunStatus.停梯 && doorStatus == (int)EnumDoorStatus.开门到位保持) @@ -162,13 +169,13 @@ namespace Tnb.WarehouseMgr Log.Information("进入开门状态,马上要成功了"); try { - elevator.current_floor = elevator.end_floor; - await _db.Updateable(elevator).UpdateColumns(it => it.current_floor).ExecuteCommandAsync(); + /* elevator.current_floor = elevator.end_floor; + await _db.Updateable(elevator).UpdateColumns(it => it.current_floor).ExecuteCommandAsync();*/ } catch (Exception ex) { - Log.Error("更新延迟队列异常", ex); + Logger.LogError("更新延迟队列异常", ex); throw; } @@ -194,7 +201,7 @@ namespace Tnb.WarehouseMgr { try { - Log.Information($"任务链编号:{input.taskChainCode},状态:{input.status},设备ID:{input.deviceID}"); + Logger.Information($"任务链编号:{input.taskChainCode},状态:{input.status},设备ID:{input.deviceID}"); switch (input.status) { case "CREATED": break; @@ -235,8 +242,9 @@ namespace Tnb.WarehouseMgr CreatorTime = DateTime.Now })); } - catch (Exception) + catch (Exception ex) { + Logger.Error("任务链状态上报", ex); return await ToApiResult(HttpStatusCode.InternalServerError, "请重试!"); throw; } @@ -263,16 +271,16 @@ namespace Tnb.WarehouseMgr disTaskIds = disTasks.Select(x => x.id).ToList() }; await _wareHouseService.TaskExecuteAfter(taskExecuteAfterUpInput); - Log.Information("Agv取货完成"); + Logger.Information("Agv取货完成"); var elevatorQueueItem = await _db.Queryable().FirstAsync(it => disTasks.Select(x => x.id).Contains(it.distask_id) && it.task_status == "执行中"); if (elevatorQueueItem != null) { - Log.Information("开始进入关门流程"); + Logger.Information("开始进入关门流程"); var disTask = disTasks.Find(x => x.id == elevatorQueueItem.distask_id); //if (disTask?.status == WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID) { - var doorStatus = await _elevatorControlService.GetTagAsync("Elevator1", ElevatorConsts.DoorStatus); + var doorStatus = await _elevatorControlService.GetTagAsync(_eleCtlCfg.DevName, ElevatorConsts.DoorStatus); if (doorStatus.ToEnum() != EnumDoorStatus.关门到位保持) { await _elevatorControlService.SendOpenCloseCmd(elevatorQueueItem.elevator_code, 4); //向电梯发送前门关门指令 @@ -299,7 +307,7 @@ namespace Tnb.WarehouseMgr } catch (Exception ex) { - Log.Error("任务状态上报出现错误", ex); + Logger.Error("任务状态上报出现错误", ex); return await ToApiResult(HttpStatusCode.InternalServerError, "请重试!"); throw; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs index 5459f26a..98cbd5d4 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs @@ -90,15 +90,7 @@ namespace Tnb.WarehouseMgr _eventPublisher = App.GetRequiredService(); var whSvc = App.GetRequiredService(); TimedTask(token => whSvc.GenTaskExecute(), stoppingToken, 1); - ////齐套出库 - 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); - - + //电梯Agv心跳检测 TimedTask(async token => { var parameter = new Dictionary(); @@ -109,9 +101,18 @@ namespace Tnb.WarehouseMgr var result = await HttpClientHelper.GetAsync(_elevatorControlConfiguration.WriteTagUrl, pars: parameter); await Console.Out.WriteLineAsync($"心跳检测结果:{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); + + //最低库存检查 var transferSignService = App.GetRequiredService(); - TimedTask(token => transferSignService.IsMinStorage(token), stoppingToken, 30, TimeSpanUnit.Minutes); + TimedTask(token => transferSignService.IsMinStorage(token), stoppingToken, 30, TimeSpanUnit.Minutes);*/ }, stoppingToken); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 76fdfdb4..0358a74d 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -39,7 +39,7 @@ namespace Tnb.WarehouseMgr /// /// 库房业务类(出入库) /// - public class WareHouseService : BaseWareHouseService, IWareHouseService + public class WareHouseService : BaseWareHouseService, IWareHouseService { private readonly ISqlSugarClient _db; private readonly IDictionaryDataService _dictionaryDataService; @@ -352,11 +352,13 @@ namespace Tnb.WarehouseMgr } //执行电梯任务 var elevatorTasks = disTasks.Where(it => it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList(); - Log.Information($"当前电梯任务数:{elevatorTasks?.Count ?? 0}"); - Log.Information("准备执行电梯任务"); + if (elevatorTasks?.Count > 0) { - Log.Information("执行电梯任务"); + Logger.Information($"当前电梯任务数:{elevatorTasks?.Count ?? 0}"); + Logger.Information("准备执行电梯任务"); + Logger.Information("执行电梯任务"); + foreach (var elevatorTask in elevatorTasks) { await ExecuteTargetFloorTask(elevatorTask); @@ -378,7 +380,7 @@ namespace Tnb.WarehouseMgr } catch (Exception ex) { - Log.Error("生成预任务执行时出现错误", ex); + Logger.Error("生成预任务执行时出现错误", ex); await db.Ado.RollbackTranAsync(); throw; } @@ -394,7 +396,7 @@ namespace Tnb.WarehouseMgr /// private async Task CallingLanding(List<(string endlocation_code, string device_id, string id, string floorNO)> endLocCodes) { - Log.Information($"开始呼梯操作............."); + Logger.Information($"开始呼梯操作............."); try { var item = endLocCodes.FirstOrDefault(); @@ -402,7 +404,7 @@ namespace Tnb.WarehouseMgr var devName = _eleCtlCfg.DevName; { var agvStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.AGVControl); - Log.Information($"当前Agv状态:{agvStatus.ToEnum().ToString()}"); + Logger.Information($"当前Agv状态:{agvStatus.ToEnum().ToString()}"); //判断当前设备是否为运行状态,不是则进入Agv电梯控制状态 if (agvStatus.ToEnum() != EnumAgvStatus.AGV运行状态) @@ -415,11 +417,11 @@ namespace Tnb.WarehouseMgr foreach (var (_, devId, disTaskId, floorNO) in endLocCodes) { - Log.Information($"任务开始目标楼层为:{floorNO}"); + Logger.Information($"任务开始目标楼层为:{floorNO}"); var floorN = await GetRealFloor(floorNO.ParseToInt()); - Log.Information($"实际目标楼层为:{floorN}"); + Logger.Information($"实际目标楼层为:{floorN}"); WmsElevatorUnexecute elevatorQueueItem = new() { @@ -431,7 +433,7 @@ namespace Tnb.WarehouseMgr create_id = _userManager.UserId, create_time = DateTime.Now }; - var elevatorQueue = await _db.Queryable().Where(it => it.elevator_id == devId && it.task_status == "执行中").ToListAsync(); + var elevatorQueue = await _db.Queryable().Where(it => it.distask_id == disTaskId && it.task_status == "执行中").ToListAsync(); if ((elevatorQueue.IsNull() || elevatorQueue.Count < 1) && floorNO.ParseToInt() != curFloorNo) { @@ -439,7 +441,7 @@ namespace Tnb.WarehouseMgr var callLiftRes = await _elevatorControlService.CallLift(devName, floorN, CancellationToken.None); string successful = "成功", fail = "失败"; var callLiftResult = callLiftRes ? successful : fail; - Log.Information($"呼梯结果:{callLiftResult}"); + Logger.Information($"呼梯结果:{callLiftResult}"); } //如果当前电梯有任务在做,将当前呼梯任务放入待执行队列 @@ -450,11 +452,11 @@ namespace Tnb.WarehouseMgr } catch (Exception ex) { - Log.Error("呼梯操作错误", ex); + Logger.Error("呼梯操作错误", ex); throw; } } - + /// /// 执行到目标楼层电梯任务 /// @@ -463,48 +465,52 @@ namespace Tnb.WarehouseMgr private async Task ExecuteTargetFloorTask(WmsDistaskH disTask) { //收到放货确认通知,向电梯发送到3楼的指令 - Log.Information($"开始执行电梯任务,任务ID:{disTask.id}"); + Logger.Information($"开始执行电梯任务,任务ID:{disTask.id}"); try { - var elevatorQueueItem = await _db.Queryable().FirstAsync(it => it.task_status == "执行中"); +/* var elevatorQueueItem = await _db.Queryable().FirstAsync(it => it.task_status == "执行中"); Log.Information($"是否存在电梯任务项:{elevatorQueueItem != null}"); - if (elevatorQueueItem != null) +*/ //if (elevatorQueueItem != null) { //var disTask = disTasks.Find(x => x.id == elevatorQueueItem.distask_id); //if (disTask?.status == WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID) { var doorStatus = -1; - var closeDoorRes = await _elevatorControlService.SendOpenCloseCmd(elevatorQueueItem.elevator_code, 4); //向电梯发送前门关门指令 - Log.Information($"关门结果:{closeDoorRes}"); + var closeDoorRes = await _elevatorControlService.SendOpenCloseCmd(_eleCtlCfg.DevName, 4); //向电梯发送前门关门指令 + Logger.Information($"关门结果:{closeDoorRes}"); do { - doorStatus = await _elevatorControlService.GetTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.DoorStatus); + doorStatus = await _elevatorControlService.GetTagAsync(_eleCtlCfg.DevName, ElevatorConsts.DoorStatus); await Task.Delay(2000); } while (doorStatus != 4); - Log.Information($"当前门状态:{doorStatus}"); + Logger.Information($"当前门状态:{doorStatus}"); + var floor = await GetRealFloor(disTask.end_floor.ParseToInt()); - Log.Information($"目标楼层:{floor}"); + + Logger.Information($"目标楼层:{floor}"); //发送到目标楼的指令 - var reuslt = await _elevatorControlService.WriteTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.FloorExecute, floor); + var reuslt = await _elevatorControlService.WriteTagAsync(_eleCtlCfg.DevName, ElevatorConsts.FloorExecute, floor); //电梯任务手动执行任务状态上报 (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) tuple = (-1, -1, -1, -1, -1); do { - tuple = await _elevatorControlService.GetElevatorStatus(elevatorQueueItem.elevator_code, CancellationToken.None); + tuple = await _elevatorControlService.GetElevatorStatus(_eleCtlCfg.DevName, CancellationToken.None); await Task.Delay(2000); } while (tuple.sysStatus != 3 && tuple.runStatus != 0); - Log.Information($"sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},floorNo:{tuple.floorNo},disTask.end_floor={disTask.end_floor}"); + Logger.Information($"sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},floorNo:{tuple.floorNo},disTask.end_floor={disTask.end_floor}"); if (tuple.sysStatus.ToEnum() == EnumSysStatus.正常状态 && tuple.runStatus.ToEnum() == EnumRunStatus.停梯) { Log.Information($"disTask.require_id={disTask.require_id}"); List disTaskIds = new() { disTask.id }; + Log.Information($"disTaskIds={string.Join(",", disTaskIds)}"); TaskExecuteAfterUpInput teaUpInput = new() { disTaskIds = disTaskIds }; await TaskExecuteAfter(teaUpInput); + TaskCompleUpInput tcUpInput = new() { disTaskIds = disTaskIds }; await TaskComplate(tcUpInput); } @@ -513,7 +519,7 @@ namespace Tnb.WarehouseMgr } catch (Exception ex) { - Log.Error("执行到目标楼层电梯任务失败", ex); + Logger.Error("执行到目标楼层电梯任务失败", ex); throw; } } @@ -538,7 +544,7 @@ namespace Tnb.WarehouseMgr targetName = it.endpoint_code, containerCode = it.carry_code, })); - Log.Information($"请求地址:{url}"); + Logger.Information($"请求地址:{url}"); foreach (var (k, v) in taskChainCodeDic) { dynamic reqBody = new ExpandoObject(); @@ -547,14 +553,14 @@ namespace Tnb.WarehouseMgr reqBody.sequential = false; reqBody.taskChainPriority = 0; reqBody.taskList = v; - Log.Information($"请求参数:{JsonConvert.SerializeObject(reqBody)}"); + Logger.Information($"请求参数:{JsonConvert.SerializeObject(reqBody)}"); var respBody = await HttpClientHelper.PostStreamAsync(url, reqBody, token); - Log.Information($"调用Agv接口响应结果:{respBody}"); + Logger.Information($"调用Agv接口响应结果:{respBody}"); } } catch (Exception ex) { - Log.Error("agv调度失败异常", ex); + Logger.Error("agv调度失败异常", ex); throw; } } @@ -658,11 +664,13 @@ namespace Tnb.WarehouseMgr await _db.Updateable().SetColumns(it => new WmsPretaskH { status = WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID }).Where(it => preTaskIds.Contains(it.id)).ExecuteCommandAsync(); //更新电梯任务数量 - var eles = await _db.Queryable().Where(it => disTasks.Select(x => x.area_code).Contains(it.area_code)).ToListAsync(); - if (eles?.Count > 0) - await _db.Updateable(eles).ReSetValue(it => it.task_nums--).ExecuteCommandAsync(); - + /* var eles = await _db.Queryable().Where(it => disTasks.Select(x => x.area_code).Contains(it.area_code)).ToListAsync(); + if (eles?.Count > 0) + await _db.Updateable(eles).ReSetValue(it => it.task_nums--).ExecuteCommandAsync(); + */ //更新载具,锁定状态为未锁定,更新载具的库位当前任务的目标库位 + Logger.Information("更新载具及库位准备中....."); + var multiList = disTasks.Select(it => (it.carry_id, it.carry_status, it.endlocation_id, it.endlocation_code)).ToList(); var locWhIdMap = await _db.Queryable().Where(it => multiList.Select(x => x.endlocation_id).Contains(it.id)).ToDictionaryAsync(it => it.id, it => it.wh_id); List carryIts = new(); @@ -677,9 +685,10 @@ namespace Tnb.WarehouseMgr location_id = multiList[i].endlocation_id, location_code = multiList[i].endlocation_code }; + var endLocId = multiList[i].endlocation_id; WmsCarryCode carryCode = new() { - warehouse_id = locWhIdMap[multiList[i].endlocation_id].ToString(), + warehouse_id = locWhIdMap.ContainsKey(endLocId) ? locWhIdMap[endLocId].ToString() : "", location_id = multiList[i].endlocation_id, location_code = multiList[i].endlocation_code }; @@ -697,25 +706,37 @@ namespace Tnb.WarehouseMgr locIts.Add(loc); } - Log.Information("更新载具及库位开始....."); + Logger.Information("更新载具及库位开始....."); await _db.Updateable(carryIts).UpdateColumns(it => new { it.is_lock, it.location_id, it.location_code }).ExecuteCommandAsync(); //更新条码的库位和仓库信息 await _db.Updateable(carryCodeIts).UpdateColumns(it => new { it.warehouse_id, it.location_id, it.location_code }).Where(it => multiList.Select(x => x.carry_id).Contains(it.carry_id)).ExecuteCommandAsync(); //更新库位信息,使用状态为 使用,锁定状态为未锁定 await _db.Updateable(locIts).UpdateColumns(it => new { it.is_use, it.is_lock }).ExecuteCommandAsync(); - Log.Information("更新载具及库位结束....."); - Log.Information($"_userManager.LoginType={_userManager.LoginType}"); - //更新业务主表的单据状态 + Logger.Information("更新载具及库位结束....."); + Logger.Information($"_userManager==null:{_userManager == null}"); + /* var loginType= _userManager?.LoginType ?? "web"; + Log.Information($"_userManager.LoginType={loginType}"); + */ //更新业务主表的单据状态 foreach (var dt in disTasks) { + Logger.Information("开始业务回更"); var disTaskCodes = await _db.Queryable().Where(it => it.bill_id == dt.id).ToListAsync(); var upInput = new WareHouseUpInput { bizTypeId = dt.biz_type, requireId = dt.require_id!, distaskCodes = disTaskCodes, carryIds = disTasks.Select(x => x.carry_id).ToList() }; - upInput.loginType = !_userManager.LoginType.IsNullOrEmpty() ? "app" : "web"; - Log.Information($"upInput.loginType={upInput.loginType}"); + /*if (!_userManager?.LoginType.IsNullOrEmpty() ?? false) + { + upInput.loginType = "app"; + } + else + { + 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") { - Log.Information("执行业务回更操作....."); + Logger.Information("执行业务回更操作....."); await DoUpdate(upInput); } } @@ -724,8 +745,8 @@ namespace Tnb.WarehouseMgr } catch (Exception ex) { - Log.Error($"任务结束失败", ex); - Log.Error($"任务结束失败堆栈异常", ex.StackTrace); + Logger.Error($"任务结束失败", ex); + Log .Error($"任务结束失败堆栈异常", ex.StackTrace); await _db.Ado.RollbackTranAsync(); throw; } @@ -792,11 +813,13 @@ namespace Tnb.WarehouseMgr { row = await _db.Insertable(preTaskCodes).ExecuteCommandAsync(); } - var eleP = preTasks.Find(x => x.area_code.Contains("ELE")); - if (eleP != null) - { - row = await _db.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => it.area_code == eleP.area_code).ExecuteCommandAsync(); - } + //先注释 by ly on 20231025 + /* var eleP = preTasks.Find(x => x.area_code.Contains("ELE")); + if (eleP != null) + { + row = await _db.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => it.area_code == eleP.area_code).ExecuteCommandAsync(); + } + */ return row > 0; } /// @@ -847,7 +870,7 @@ namespace Tnb.WarehouseMgr [NonAction] public async Task> PathAlgorithms(string pStartId, string pEndId) { - var roads = await _db.Queryable().ToListAsync(); + var roads = await _db.Queryable().Where(it => it.status == 1).ToListAsync(); var points = await LocPathCalcAlgorithms(pStartId, pEndId, roads); try { diff --git a/apihost/Tnb.API.Entry/Configurations/ElevatorControlSettings.json b/apihost/Tnb.API.Entry/Configurations/ElevatorControlSettings.json index f0537f5d..33b95bee 100644 --- a/apihost/Tnb.API.Entry/Configurations/ElevatorControlSettings.json +++ b/apihost/Tnb.API.Entry/Configurations/ElevatorControlSettings.json @@ -1,5 +1,5 @@ { - "DevName": "Elevator1", + "DevName": "Elevator2", "token": "780BE4144636CF47DDF3920B0F1D069B", "GetTagListUrl": "http://192.168.11.110:9100/Dev/GetTagList", "GetTagUrl": "http://192.168.11.110:9100/Dev/GetTag", From 138697015a3b9fc31a5f72f58bd12e652026dfc7 Mon Sep 17 00:00:00 2001 From: qianjiawei <1184704771@qq.com> Date: Mon, 30 Oct 2023 09:31:45 +0800 Subject: [PATCH 10/29] =?UTF-8?q?=E8=B4=A8=E6=A3=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs | 56 ++++++++++++++++++++- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs b/QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs index ee0fd197..958e8a26 100644 --- a/QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs +++ b/QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs @@ -25,13 +25,13 @@ namespace Tnb.QcMgr [ApiDescriptionSettings(Tag = ModuleConsts.Tag, Area = ModuleConsts.Area, Order = 800)] [Route("api/[area]/[controller]/[action]")] [OverideVisualDev(ModuleId)] - public class QcCheckTaskResultServic:IDynamicApiController, ITransient, IOverideVisualDevService + public class QcCheckTaskResultService : IDynamicApiController, ITransient, IOverideVisualDevService { private const string ModuleId = "26873741070613"; private readonly ISqlSugarRepository _repository; private readonly IUserManager _userManager; public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); - public QcCheckTaskResultServic(ISqlSugarRepository repository, IUserManager userManager) + public QcCheckTaskResultService(ISqlSugarRepository repository, IUserManager userManager) { _repository = repository; _userManager = userManager; @@ -87,5 +87,57 @@ namespace Tnb.QcMgr } return PageResult.SqlSugarPageResult(result); } + + [HttpGet] + public async Task GetCheckTask(VisualDevModelListQueryInput input) + { + var db = _repository.AsSugarClient(); + Dictionary dic = new Dictionary(); + dic.Add("ok", "合格"); + dic.Add("no", "不合格"); + dic.Add("barelyok", "让步合格"); + dic.Add("await", "待检"); + dic.Add("temporarily", "暂控"); + Dictionary queryJson = !string.IsNullOrEmpty(input.queryJson) ? JsonConvert.DeserializeObject>(input.queryJson) : new Dictionary(); + string materialid = queryJson.ContainsKey("materialid") ? queryJson["materialid"].ToString() : ""; + string checktype = queryJson.ContainsKey("checktype") ? queryJson["checktype"].ToString() : ""; + string status = queryJson.ContainsKey("status") ? queryJson["status"].ToString() : ""; + var list = await db.Queryable() + .LeftJoin((a, b) => a.DictionaryTypeId == b.Id) + .Where((a, b) => b.FullName == "质检状态" || b.FullName == "质检类型选择").ToListAsync(); + var BasLocations = await db.Queryable().ToListAsync(); + var result = await db.Queryable() + .LeftJoin((a, b) => a.materialid == b.id) + .LeftJoin((a, b, c) => a.processid == c.id) + .LeftJoin((a, b, c, d) => a.workid == d.Id) + .LeftJoin((a, b, c, d, e) => a.execuser == e.Id) + .WhereIF(!string.IsNullOrEmpty(materialid), (a, b, c, d, e) => a.materialid == materialid) + .WhereIF(!string.IsNullOrEmpty(checktype), (a, b, c, d, e) => a.checktype == checktype) + .WhereIF(!string.IsNullOrEmpty(status), (a, b, c, d, e) => a.status == status) + // .Where((a, b, c, d, e) => a.status == list.Where(p => p.FullName == "已完成").First().Id) + .Select((a, b, c, d, e) => new QcCheckExecHOut + { + id = a.id, + materialid = b.name, + checktype = a.checktype, + workid = d.FullName, + processid = c.process_name, + wareid = a.wareid, + checknum = a.checknum, + status = a.status, + result = a.result, + tasktime = a.tasktime == null ? "" : a.tasktime, + exectime = a.exectime == null ? "" : a.exectime, + execuser = e.RealName == null ? "" : e.RealName, + }).OrderByDescending(a => DateTime.Parse(a.exectime)).ToPagedListAsync(input.currentPage, input.pageSize); + foreach (var item in result.list) + { + item.checktype = list.Select(p => p.Id).Contains(item.checktype) ? list.Where(p => p.Id == item.checktype).First().FullName : ""; + item.status = list.Select(p => p.Id).Contains(item.status) ? list.Where(p => p.Id == item.status).First().FullName : ""; + item.result = dic.Where(p => p.Key == item.result).Any() ? dic.Where(p => p.Key == item.result).First().Value : ""; + item.wareid = BasLocations.Where(p => p.id == item.wareid).Any() ? BasLocations.Where(p => p.id == item.wareid).First().location_code : ""; + } + return PageResult.SqlSugarPageResult(result); + } } } From f94bd6f809a4380f9681cc0af51752bd8b43010e Mon Sep 17 00:00:00 2001 From: qianjiawei <1184704771@qq.com> Date: Mon, 30 Oct 2023 09:48:50 +0800 Subject: [PATCH 11/29] =?UTF-8?q?=E8=B4=A8=E6=A3=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs b/QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs index 958e8a26..eb231cf8 100644 --- a/QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs +++ b/QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs @@ -88,7 +88,7 @@ namespace Tnb.QcMgr return PageResult.SqlSugarPageResult(result); } - [HttpGet] + [HttpPost] public async Task GetCheckTask(VisualDevModelListQueryInput input) { var db = _repository.AsSugarClient(); From bd7f854f31f64eb48585a39694aaf2bbc6361a2a Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Mon, 30 Oct 2023 10:22:29 +0800 Subject: [PATCH 12/29] bug --- EquipMgr/Tnb.EquipMgr/EquipmentService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/EquipMgr/Tnb.EquipMgr/EquipmentService.cs b/EquipMgr/Tnb.EquipMgr/EquipmentService.cs index f73e11f5..3ca12c85 100644 --- a/EquipMgr/Tnb.EquipMgr/EquipmentService.cs +++ b/EquipMgr/Tnb.EquipMgr/EquipmentService.cs @@ -89,7 +89,7 @@ namespace Tnb.EquipMgr private async Task Create(VisualDevModelDataCrInput visualDevModelDataCrInput) { - string qrcode = visualDevModelDataCrInput.data.ContainsKey("qrcode") ? visualDevModelDataCrInput.data["qrcode"].ToString() : ""; + string qrcode = visualDevModelDataCrInput.data.ContainsKey("qrcode") ? visualDevModelDataCrInput.data["qrcode"]?.ToString() : ""; if (!string.IsNullOrEmpty(qrcode) && await _repository.AsSugarClient().Queryable().AnyAsync(x => x.code == qrcode)) { throw Oops.Bah("二维码总表中已存在该二维码"); @@ -120,7 +120,7 @@ namespace Tnb.EquipMgr private async Task Update(string id,VisualDevModelDataUpInput visualDevModelDataUpInput) { - string qrcode = visualDevModelDataUpInput.data.ContainsKey("qrcode") ? visualDevModelDataUpInput.data["qrcode"].ToString() : ""; + string qrcode = visualDevModelDataUpInput.data.ContainsKey("qrcode") ? visualDevModelDataUpInput.data["qrcode"]?.ToString() : ""; if (!string.IsNullOrEmpty(qrcode) && await _repository.AsSugarClient().Queryable().AnyAsync(x => x.code == visualDevModelDataUpInput.data["qrcode"] && x.source_id!=id)) { throw Oops.Bah("二维码总表中已存在该二维码"); From 2291c4f0968d5bcd0ea9c1e78fb55daa6f888df2 Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Mon, 30 Oct 2023 11:26:50 +0800 Subject: [PATCH 13/29] bug --- EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs | 5 +++++ EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs b/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs index 043561b7..b5ed35e9 100644 --- a/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs +++ b/EquipMgr/Tnb.EquipMgr/EquMaintainRecordService.cs @@ -200,6 +200,11 @@ namespace Tnb.EquipMgr public async Task RepeatMaintain(MaintainRecordRepeatInput input) { var db = _repository.AsSugarClient(); + EqpMaintainRecordH eqpMaintainRecordH = await _repository.GetSingleAsync(x => x.id == input.id); + if (eqpMaintainRecordH.status == "1") + { + throw Oops.Bah("状态错误"); + } DbResult result = await db.Ado.UseTranAsync(async () => { diff --git a/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs b/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs index 936f43dc..ae8bc2a6 100644 --- a/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs +++ b/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs @@ -119,6 +119,7 @@ namespace Tnb.EquipMgr DbResult result = await _repository.AsSugarClient().Ado.UseTranAsync(async () => { EqpSpotInsRecordH eqpSpotInsRecordH = _repository.GetSingle(x=>x.id==input.id); + string status = ""; if (eqpSpotInsRecordH.is_repeat == "1") { @@ -184,6 +185,11 @@ namespace Tnb.EquipMgr [HttpPost] public async Task RepeatSpotIns(SpotInsRecordRepeatInput input) { + EqpSpotInsRecordH eqpSpotInsRecordH = await _repository.GetSingleAsync(x => x.id == input.id); + if (eqpSpotInsRecordH.status == "1") + { + throw Oops.Bah("状态错误"); + } await _repository.UpdateAsync(x => new EqpSpotInsRecordH() { repeat_result = input.repeat_result, From ad9974b1afe3f6eb99429b95cfe7ac2c565f3cde Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Mon, 30 Oct 2023 14:58:43 +0800 Subject: [PATCH 14/29] =?UTF-8?q?=E9=87=8D=E5=86=99=E6=8A=A5=E4=BF=AE?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=20=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.EquipMgr/EqpRepairApplyService.cs | 38 +++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs b/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs index 6a78f6c6..3da509f2 100644 --- a/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs +++ b/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs @@ -12,6 +12,7 @@ using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; using JNPF.VisualDev.Entitys; using JNPF.VisualDev.Interfaces; +using Mapster; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using SqlSugar; @@ -58,29 +59,60 @@ namespace Tnb.EquipMgr if (!input.data.ContainsKey("create_time")) { input.data.Add("create_time",DateTime.Now); + }else if ( string.IsNullOrEmpty((string)input.data["create_time"])) + { + input.data["create_time"] = DateTime.Now; } if (!input.data.ContainsKey("create_id")) { input.data.Add("create_id",_userManager.UserId); + }else if ( string.IsNullOrEmpty((string)input.data["create_id"])) + { + input.data["create_id"] = _userManager.UserId; } if (!input.data.ContainsKey("apply_user_id")) { input.data.Add("apply_user_id",_userManager.UserId); + }else if ( string.IsNullOrEmpty((string)input.data["apply_user_id"])) + { + input.data["apply_user_id"] = _userManager.UserId; } if (!input.data.ContainsKey("org_id")) { input.data.Add("org_id",_userManager.GetUserInfo().Result.organizeId); + }else if ( string.IsNullOrEmpty((string)input.data["org_id"])) + { + input.data["org_id"] = _userManager.GetUserInfo().Result.organizeId; } if (!input.data.ContainsKey("code")) { input.data.Add("code",await _billRuleService.GetBillNumber(CodeTemplateConst.EQPREPAIR_CODE)); + }else if (string.IsNullOrEmpty((string)input.data["code"])) + { + input.data["code"] = await _billRuleService.GetBillNumber(CodeTemplateConst.EQPREPAIR_CODE); } - VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true); - await _runService.Create(templateEntity, input); + + EqpRepairApply eqpRepairApply = new EqpRepairApply(); + eqpRepairApply.code = (string)input.data["code"]; + eqpRepairApply.name = (string)input.data["name"]; + eqpRepairApply.equip_id = (string)input.data["equip_id"]; + eqpRepairApply.expect_complete_time = input.data["expect_complete_time"]!=null && input.data["expect_complete_time"].ToString()!="" ? (DateTime?)input.data["expect_complete_time"] : null; + eqpRepairApply.is_ugent = (int?)(long)input.data["is_ugent"]; + eqpRepairApply.attachment = (string)input.data["attachment"]; + eqpRepairApply.apply_user_id = (string)input.data["apply_user_id"]; + eqpRepairApply.create_id = (string)input.data["create_id"]; + eqpRepairApply.create_time = DateTime.Now; + eqpRepairApply.org_id = (string)input.data["org_id"]; + eqpRepairApply.remark = (string)input.data["remark"]; + eqpRepairApply.description = (string)input.data["description"]; + await _repository.InsertAsync(eqpRepairApply); + + // VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true); + // await _runService.Create(templateEntity, input); return await Task.FromResult(true); } @@ -209,7 +241,7 @@ namespace Tnb.EquipMgr { EqpRepairApply eqpRepairApply = await _repository.GetSingleAsync(x=>x.id==input.id); - if (eqpRepairApply.status == RepairApplyStatus.TOBERECEIVED) + if (eqpRepairApply.status == RepairApplyStatus.RECEIVED) { if (_userManager.UserId == eqpRepairApply.repairer_id) { From 38c7644dde4dfb1f0eef54d22cf0900db31dff98 Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Mon, 30 Oct 2023 15:08:21 +0800 Subject: [PATCH 15/29] BUG --- EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs b/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs index 3da509f2..b24b13af 100644 --- a/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs +++ b/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs @@ -109,6 +109,7 @@ namespace Tnb.EquipMgr eqpRepairApply.org_id = (string)input.data["org_id"]; eqpRepairApply.remark = (string)input.data["remark"]; eqpRepairApply.description = (string)input.data["description"]; + eqpRepairApply.status = RepairApplyStatus.TOBEEXECUTED; await _repository.InsertAsync(eqpRepairApply); // VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true); From ab1635cbe5585a2ec7ed02cff75300f8951ec26b Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Mon, 30 Oct 2023 17:30:59 +0800 Subject: [PATCH 16/29] bug --- EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs b/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs index b24b13af..e4a04049 100644 --- a/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs +++ b/EquipMgr/Tnb.EquipMgr/EqpRepairApplyService.cs @@ -100,9 +100,9 @@ namespace Tnb.EquipMgr eqpRepairApply.code = (string)input.data["code"]; eqpRepairApply.name = (string)input.data["name"]; eqpRepairApply.equip_id = (string)input.data["equip_id"]; - eqpRepairApply.expect_complete_time = input.data["expect_complete_time"]!=null && input.data["expect_complete_time"].ToString()!="" ? (DateTime?)input.data["expect_complete_time"] : null; + eqpRepairApply.expect_complete_time = input.data["expect_complete_time"]!=null && input.data["expect_complete_time"].ToString()!="" ? Convert.ToDateTime(input.data["expect_complete_time"]) : null; eqpRepairApply.is_ugent = (int?)(long)input.data["is_ugent"]; - eqpRepairApply.attachment = (string)input.data["attachment"]; + eqpRepairApply.attachment = input.data.ContainsKey("attachment") ? (string)input.data["attachment"] : null; eqpRepairApply.apply_user_id = (string)input.data["apply_user_id"]; eqpRepairApply.create_id = (string)input.data["create_id"]; eqpRepairApply.create_time = DateTime.Now; From 2c37098bc28d9c55c3439461b396ecf9aa21dadb Mon Sep 17 00:00:00 2001 From: qianjiawei <1184704771@qq.com> Date: Tue, 31 Oct 2023 14:53:58 +0800 Subject: [PATCH 17/29] =?UTF-8?q?=E8=B4=A8=E6=A3=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs b/QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs index eb231cf8..b6544561 100644 --- a/QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs +++ b/QcMgr/Tnb.QcMgr/QcCheckTaskResultService.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using Aspose.Cells.Drawing; @@ -14,6 +15,7 @@ using JNPF.VisualDev; using JNPF.VisualDev.Entitys.Dto.VisualDevModelData; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; +using NPOI.SS.Formula.Functions; using SqlSugar; using Tnb.BasicData.Entities; using Tnb.QcMgr.Entities; @@ -95,7 +97,7 @@ namespace Tnb.QcMgr Dictionary dic = new Dictionary(); dic.Add("ok", "合格"); dic.Add("no", "不合格"); - dic.Add("barelyok", "让步合格"); + dic.Add("barelyOk", "让步合格"); dic.Add("await", "待检"); dic.Add("temporarily", "暂控"); Dictionary queryJson = !string.IsNullOrEmpty(input.queryJson) ? JsonConvert.DeserializeObject>(input.queryJson) : new Dictionary(); @@ -106,6 +108,15 @@ namespace Tnb.QcMgr .LeftJoin((a, b) => a.DictionaryTypeId == b.Id) .Where((a, b) => b.FullName == "质检状态" || b.FullName == "质检类型选择").ToListAsync(); var BasLocations = await db.Queryable().ToListAsync(); + Expression> expression; + if (list.Where(p => p.FullName == "待执行").First().Id == status) + { + expression = a => DateTime.Parse(a.tasktime!); + } + else + { + expression = a => DateTime.Parse(a.exectime!); + } var result = await db.Queryable() .LeftJoin((a, b) => a.materialid == b.id) .LeftJoin((a, b, c) => a.processid == c.id) @@ -129,7 +140,8 @@ namespace Tnb.QcMgr tasktime = a.tasktime == null ? "" : a.tasktime, exectime = a.exectime == null ? "" : a.exectime, execuser = e.RealName == null ? "" : e.RealName, - }).OrderByDescending(a => DateTime.Parse(a.exectime)).ToPagedListAsync(input.currentPage, input.pageSize); + }).OrderByDescending(expression).ToPagedListAsync(input.currentPage, input.pageSize); + foreach (var item in result.list) { item.checktype = list.Select(p => p.Id).Contains(item.checktype) ? list.Where(p => p.Id == item.checktype).First().FullName : ""; From b00eea39dd695bb938c7d4b5eccc8fbfe647db74 Mon Sep 17 00:00:00 2001 From: qianjiawei <1184704771@qq.com> Date: Tue, 31 Oct 2023 17:32:57 +0800 Subject: [PATCH 18/29] bug --- QcMgr/Tnb.QcMgr.Entities/Dto/CheckTask.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/QcMgr/Tnb.QcMgr.Entities/Dto/CheckTask.cs b/QcMgr/Tnb.QcMgr.Entities/Dto/CheckTask.cs index e2bae448..23982478 100644 --- a/QcMgr/Tnb.QcMgr.Entities/Dto/CheckTask.cs +++ b/QcMgr/Tnb.QcMgr.Entities/Dto/CheckTask.cs @@ -53,7 +53,7 @@ namespace Tnb.QcMgr.Entities public object[]? checkbox { get; set; } public string? errorcause { get; set; } public string? errorlevel { get; set; } - public object? measuredValue { get; set; } + public string? measuredValue { get; set; } public string? radio { get; set; } public string? remark { get; set; } public string? text { get; set; } From 74118cccf488d41e6467e9b5a50121d09afb4813 Mon Sep 17 00:00:00 2001 From: "yang.lee" Date: Tue, 31 Oct 2023 17:37:54 +0800 Subject: [PATCH 19/29] =?UTF-8?q?1=E3=80=81=E5=88=A0=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E7=B1=BB=202=E3=80=81=E8=B0=83=E6=95=B4=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E9=80=BB=E8=BE=91=EF=BC=8C=E5=B0=86=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E6=A1=86=E6=9E=B6=E7=9A=84=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E6=80=BB=E7=BA=BF=203=E3=80=81=E7=94=B5=E6=A2=AF=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E9=80=BB=E8=BE=91=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 --- .../Dto/Inputs/TaskCompleUpInput.cs | 1 + .../Dto/Inputs/TaskExecuteAfterUpInput.cs | 3 +- .../Entity/WmsElevatorH.part.cs | 49 ++++ .../Tnb.WarehouseMgr/BaseWareHouseService.cs | 20 +- .../BaseWareHouseService`1.cs | 17 +- .../ConditionalBackgroundService.cs | 30 -- .../Tnb.WarehouseMgr/DeviceProviderService.cs | 129 +++++---- WarehouseMgr/Tnb.WarehouseMgr/Dijkstra.cs | 215 -------------- WarehouseMgr/Tnb.WarehouseMgr/Dp.cs | 69 ----- .../TaskStatusChangeSubscriber.cs | 47 ++++ .../Tnb.WarehouseMgr/WareHouseService.cs | 263 +++++++++++------- .../WmsCarryMoveInStockService.cs | 8 +- .../WmsCarryMoveOutStockService.cs | 5 +- .../Tnb.WarehouseMgr/WmsCheckTaskService.cs | 6 +- .../Tnb.WarehouseMgr/WmsDeliveryService.cs | 10 +- .../WmsEmptyInstockService.cs | 7 +- .../WmsEmptyOutstockService .cs | 6 +- .../Tnb.WarehouseMgr/WmsInStockService.cs | 6 +- .../WmsKittingInStkService.cs | 6 +- .../Tnb.WarehouseMgr/WmsOutBaleService.cs | 6 +- .../Tnb.WarehouseMgr/WmsOutStockService.cs | 4 +- .../WmsPDACarryMoveInStockService.cs | 6 +- .../WmsPDACarryMoveOutStockService.cs | 7 +- .../Tnb.WarehouseMgr/WmsPDADeliveryService.cs | 6 +- .../WmsPDAEmptyInstockService.cs | 4 +- .../WmsPDAEmptyOutstockService .cs | 6 +- .../Tnb.WarehouseMgr/WmsPDAInStockService.cs | 10 +- .../Tnb.WarehouseMgr/WmsPDAInbaleService.cs | 8 +- .../WmsPDAKittingInStkService.cs | 5 +- .../WmsPDAOutBaleServiceService.cs | 6 +- .../WmsPDAScanInStockService.cs | 6 +- .../Tnb.WarehouseMgr/WmsPDATransferService.cs | 6 +- .../WmsRobotCallbackService.cs | 6 +- .../Tnb.WarehouseMgr/WmsSetSortingService.cs | 6 +- .../Tnb.WarehouseMgr/WmsTransferService.cs | 10 +- .../Tnb.WarehouseMgr/WmskittingOutService.cs | 11 +- apihost/Tnb.API.Entry/Startup.cs | 4 +- .../Constants/EventSubscribeEventConsts.cs | 17 ++ .../Sources/TaskStatusChangeSource.cs | 51 ++++ common/Tnb.Common/Extension/Extensions.cs | 8 + 40 files changed, 542 insertions(+), 548 deletions(-) delete mode 100644 WarehouseMgr/Tnb.WarehouseMgr/ConditionalBackgroundService.cs delete mode 100644 WarehouseMgr/Tnb.WarehouseMgr/Dijkstra.cs delete mode 100644 WarehouseMgr/Tnb.WarehouseMgr/Dp.cs create mode 100644 WarehouseMgr/Tnb.WarehouseMgr/EventSubscribers/TaskStatusChangeSubscriber.cs create mode 100644 common/Tnb.Common.Core/EventBus/Constants/EventSubscribeEventConsts.cs create mode 100644 common/Tnb.Common.Core/EventBus/Sources/TaskStatusChangeSource.cs diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/TaskCompleUpInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/TaskCompleUpInput.cs index b312aaeb..a9a09e06 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/TaskCompleUpInput.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/TaskCompleUpInput.cs @@ -15,5 +15,6 @@ namespace Tnb.WarehouseMgr.Entities.Dto.Inputs /// 任务执行Ids /// public List disTaskIds { get; set; } + } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/TaskExecuteAfterUpInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/TaskExecuteAfterUpInput.cs index 2489ece5..ccf2943c 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/TaskExecuteAfterUpInput.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/TaskExecuteAfterUpInput.cs @@ -14,6 +14,7 @@ namespace Tnb.WarehouseMgr.Entities.Dto.Inputs /// /// 任务执行Ids /// - public List disTaskIds { get; set; } + public List disTaskIds { get; set; } + } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsElevatorH.part.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsElevatorH.part.cs index 69a3bc44..ce417fad 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsElevatorH.part.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsElevatorH.part.cs @@ -13,4 +13,53 @@ public partial class WmsElevatorH { [SugarColumn(IsIgnore = true)] public int end_floor { get; set; } + /// + /// 上级表单ID + /// + [SugarColumn(IsIgnore = true)] + public string bill_id { get; set; } = string.Empty; + + /// + /// 库位ID + /// + [SugarColumn(IsIgnore = true)] + + public string location_id { get; set; } = string.Empty; + + /// + /// 库位编号 + /// + [SugarColumn(IsIgnore = true)] + + public string location_code { get; set; } = string.Empty; + + /// + /// 点位ID + /// + [SugarColumn(IsIgnore = true)] + + public string point_id { get; set; } = string.Empty; + + /// + /// 点位编号 + /// + [SugarColumn(IsIgnore = true)] + + public string point_code { get; set; } = string.Empty; + + /// + /// 楼层 + [SugarColumn(IsIgnore = true)] + + public int floor { get; set; } + /// + /// 执行任务Id + /// + [SugarColumn(IsIgnore = true)] + public string distask_id { get; set; } + /// + /// 设备Id + /// + [SugarColumn(IsIgnore = true)] + public string device_id { get; set; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs index 7f4e2ecd..b36c6f0a 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs @@ -19,6 +19,7 @@ using JNPF.Common.Extension; using JNPF.DataEncryption; using JNPF.DependencyInjection; using JNPF.DynamicApiController; +using JNPF.EventBus; using JNPF.Extras.CollectiveOAuth.Enums; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; @@ -34,6 +35,8 @@ using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using SqlSugar; using Tnb.BasicData.Entities; +using Tnb.Common.Core.EventBus.Constants; +using Tnb.Common.Core.EventBus.Sources; using Tnb.WarehouseMgr.Entities; using Tnb.WarehouseMgr.Entities.Attributes; using Tnb.WarehouseMgr.Entities.Consts; @@ -53,14 +56,21 @@ namespace Tnb.WarehouseMgr private static Lazy> _stroageMapLazy; private static Dictionary _storeMap = new(StringComparer.OrdinalIgnoreCase); public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); - private readonly ChannelWriter _channelWriter; + private IEventPublisher _eventPublisher; + + protected IEventPublisher EventPublisher + { + set { _eventPublisher = value; } + get { return _eventPublisher; } + } - public BaseWareHouseService(ChannelWriter? channelWriter = default) + + /*public BaseWareHouseService(ChannelWriter? channelWriter = default) { _channelWriter = channelWriter; - } + }*/ static BaseWareHouseService() { @@ -160,9 +170,7 @@ namespace Tnb.WarehouseMgr [NonAction] protected async Task Publish(string taskName) { - NotifyMessage message = new() { TaskName = taskName }; - if (_channelWriter != null) - await _channelWriter.WriteAsync(message); + await _eventPublisher.PublishAsync(new TaskStatusChangeSource(EventSubscribeEventConsts.TaskStatusChangeEventId, taskName)); } [NonAction] diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService`1.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService`1.cs index 49f33d92..13ef3e0e 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService`1.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService`1.cs @@ -6,11 +6,26 @@ using System.Threading.Tasks; using JNPF.Common.Contracts; using JNPF.Logging; using Microsoft.Extensions.Logging; +using SqlSugar; +using Tnb.WarehouseMgr.Entities; namespace Tnb.WarehouseMgr { - public class BaseWareHouseService : BaseWareHouseService + public class BaseWareHouseService : BaseWareHouseService { + protected static Dictionary _elevatorMap = new Dictionary(); + + public BaseWareHouseService(ISqlSugarClient db) + { + if (_elevatorMap.Count < 1) + { + Task.Run(async () => + { + _elevatorMap = await db.Queryable().ToDictionaryAsync(x =>x.elevator_id,x=>x.elevator_code); + }); + } + } + protected ILogger Logger => LoggerFactory.Create(builder => builder.AddFile($"{AppContext.BaseDirectory}/logs/custom{DateTime.Now:yyyyMMdd}.log", cfgOpts => { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ConditionalBackgroundService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ConditionalBackgroundService.cs deleted file mode 100644 index 745a3cf2..00000000 --- a/WarehouseMgr/Tnb.WarehouseMgr/ConditionalBackgroundService.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Microsoft.Extensions.Hosting; - -namespace Tnb.WarehouseMgr -{ - public class ConditionalBackgroundService : IHostedService - { - private readonly IHostedService _backgroundService; - //private readonly Func _condition; - - public ConditionalBackgroundService(IHostedService backgroundService) - { - _backgroundService = backgroundService; - } - - public async Task StartAsync(CancellationToken cancellationToken) - { - await _backgroundService.StartAsync(cancellationToken); - } - public async Task StopAsync(CancellationToken cancellationToken) - { - await _backgroundService.StopAsync(cancellationToken); - } - - } -} diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs index 06d111fc..53b0c000 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs @@ -61,7 +61,7 @@ namespace Tnb.WarehouseMgr IEventPublisher eventPublisher, IUserManager userManger, IElevatorControlService elevatorControlService - ) + ) : base(repository.AsSugarClient()) { _db = repository.AsSugarClient(); _wareHouseService = wareHouseService; @@ -92,32 +92,43 @@ namespace Tnb.WarehouseMgr { Log.Information("取货确认.................."); - try - { - var elevator = await _db.Queryable().LeftJoin((a, b) => a.id == b.bill_id) + var elevator = await _db.Queryable().LeftJoin((a, b) => a.id == b.bill_id) .LeftJoin((a, b, c) => b.location_id == c.startlocation_id) .LeftJoin((a, b, c, d) => c.startlocation_id == d.location_id) .Where((a, b, c, d) => d.point_code == input.sourceName && input.taskCode.Contains(c.bill_code)) + .Select((a, b, c, d) => new WmsElevatorH + { + distask_id = c.id, + device_id = c.device_id, + }, true) .FirstAsync(); - //Log.Information($"elevator!=null?{elevator!=null}"); - - (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(_eleCtlCfg.DevName, CancellationToken.None); - Logger.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum().ToString()},运行状态:{runStatus.ToEnum().ToString()},Agv状态:{agvStatus.ToEnum().ToString()},当前楼层:{floorNo}"); + if (elevator.IsNull()) + { + Logger.Error("未找到匹配的电梯任务", new Exception($"根据参数,sourceName:{input.sourceName},taskCode:{input.taskCode},未找到匹配的电梯任务")); + return await ToApiResult(HttpStatusCode.InternalServerError, $"根据参数,sourceName:{input.sourceName},taskCode:{input.taskCode},未找到匹配的电梯任务"); + } + try + { + Logger.Information($"当前任务Id:{elevator.distask_id}"); + if (_elevatorMap.TryGetValue(elevator.device_id, out var elevatorCode)) { - //var endFloor = elevator.end_floor; - var floor = 5; - if (doorStatus.ToEnum() != EnumDoorStatus.开门到位保持) + var devName = elevatorCode?.ToString() ?? _eleCtlCfg.DevName; + (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(devName, CancellationToken.None); + Logger.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum().ToString()},运行状态:{runStatus.ToEnum().ToString()},Agv状态:{agvStatus.ToEnum().ToString()},当前楼层:{floorNo}"); { - await _elevatorControlService.SendOpenCloseCmd(_eleCtlCfg.DevName, 3); //发送电梯前门开门指令 + if (doorStatus.ToEnum() != EnumDoorStatus.开门到位保持) + { + await _elevatorControlService.SendOpenCloseCmd(devName, 3); //发送电梯前门开门指令 + } + if (sysStatus.ToEnum() == EnumSysStatus.正常状态 && runStatus.ToEnum() == EnumRunStatus.停梯) + { + //elevator.current_floor = floor; + //await _db.Updateable(elevator).UpdateColumns(it => it.current_floor).ExecuteCommandAsync(); + return await ToApiResult(HttpStatusCode.OK, "成功"); + } + return await ToApiResult(HttpStatusCode.InternalServerError, "电梯还未开门,请重试!"); } - if (sysStatus.ToEnum() == EnumSysStatus.正常状态 && runStatus.ToEnum() == EnumRunStatus.停梯) - { - //elevator.current_floor = floor; - //await _db.Updateable(elevator).UpdateColumns(it => it.current_floor).ExecuteCommandAsync(); - return await ToApiResult(HttpStatusCode.OK, "成功"); - } - return await ToApiResult(HttpStatusCode.InternalServerError, "电梯还未开门,请重试!"); } } @@ -145,48 +156,59 @@ namespace Tnb.WarehouseMgr .LeftJoin((a, b, c) => b.location_id == c.endlocation_id) .LeftJoin((a, b, c, d) => c.endlocation_id == d.location_id) .Where((a, b, c, d) => d.point_code == input.targetName && c.bill_code == input.taskCode) - .Select((a, b, c, d) => new WmsElevatorH { end_floor = SqlFunc.ToInt32(c.end_floor) }, true) + .Select((a, b, c, d) => new WmsElevatorH + { + end_floor = SqlFunc.ToInt32(c.end_floor), + distask_id = c.id, + }, true) .FirstAsync(); - - (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(_eleCtlCfg.DevName, CancellationToken.None);//elevator.elevator_code - Logger.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum().ToString()},运行状态:{runStatus},门状态:{doorStatus},Agv状态:{agvStatus},当前楼层:{floorNo}"); - //判断Agv电梯是否进入状态 - if (agvStatus != (int)EnumAgvStatus.AGV运行状态) + if (elevator.IsNull()) + throw new Exception($"根据参数,sourceName:{input.sourceName},taskCode:{input.taskCode},未找到匹配的电梯任务"); + if (_elevatorMap.TryGetValue(elevator.elevator_id, out var elevatorCode)) { - await _elevatorControlService.WriteTagAsync(_eleCtlCfg.DevName, ElevatorConsts.AGVControl, 1); - } - - Logger.Information("目前正常"); - - //电梯到达目标楼层后,判断当前电梯门状态是否为开门到位保持状态 - if (doorStatus != (int)EnumDoorStatus.开门到位保持) - { - await _elevatorControlService.SendOpenCloseCmd(_eleCtlCfg.DevName, 3); //发送电梯前门开门指令 - } - if (sysStatus == (int)EnumSysStatus.正常状态 && runStatus == (int)EnumRunStatus.停梯 - && doorStatus == (int)EnumDoorStatus.开门到位保持) - { - Log.Information("进入开门状态,马上要成功了"); - try + (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(_eleCtlCfg.DevName, CancellationToken.None);//elevator.elevator_code + Logger.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum().ToString()},运行状态:{runStatus},门状态:{doorStatus},Agv状态:{agvStatus},当前楼层:{floorNo}"); + //判断Agv电梯是否进入状态 + if (agvStatus != (int)EnumAgvStatus.AGV运行状态) { - /* elevator.current_floor = elevator.end_floor; - await _db.Updateable(elevator).UpdateColumns(it => it.current_floor).ExecuteCommandAsync();*/ - - } - catch (Exception ex) - { - Logger.LogError("更新延迟队列异常", ex); - throw; + await _elevatorControlService.WriteTagAsync(_eleCtlCfg.DevName, ElevatorConsts.AGVControl, 1); } - return await ToApiResult(HttpStatusCode.OK, "成功"); + Logger.Information("目前正常"); + + //电梯到达目标楼层后,判断当前电梯门状态是否为开门到位保持状态 + if (doorStatus != (int)EnumDoorStatus.开门到位保持) + { + await _elevatorControlService.SendOpenCloseCmd(_eleCtlCfg.DevName, 3); //发送电梯前门开门指令 + } + if (sysStatus == (int)EnumSysStatus.正常状态 && runStatus == (int)EnumRunStatus.停梯 + && doorStatus == (int)EnumDoorStatus.开门到位保持) + { + Log.Information("进入开门状态,马上要成功了"); + try + { + /* elevator.current_floor = elevator.end_floor; + await _db.Updateable(elevator).UpdateColumns(it => it.current_floor).ExecuteCommandAsync();*/ + + } + catch (Exception ex) + { + Logger.LogError("更新延迟队列异常", ex); + throw; + } + + return await ToApiResult(HttpStatusCode.OK, "成功"); + } } + + return await ToApiResult(HttpStatusCode.InternalServerError, "电梯还未开门,请重试!"); } - catch (Exception) + catch (Exception ex) { + Logger.Error("放货确认失败", ex); return await ToApiResult(HttpStatusCode.InternalServerError, "电梯还未开门,请重试!"); throw; } @@ -271,7 +293,7 @@ namespace Tnb.WarehouseMgr disTaskIds = disTasks.Select(x => x.id).ToList() }; await _wareHouseService.TaskExecuteAfter(taskExecuteAfterUpInput); - Logger.Information("Agv取货完成"); + Logger.Information($"Agv取货完成,任务Id:{string.Join(",", disTasks.Select(x => x.id))}"); var elevatorQueueItem = await _db.Queryable().FirstAsync(it => disTasks.Select(x => x.id).Contains(it.distask_id) && it.task_status == "执行中"); if (elevatorQueueItem != null) { @@ -285,11 +307,6 @@ namespace Tnb.WarehouseMgr { await _elevatorControlService.SendOpenCloseCmd(elevatorQueueItem.elevator_code, 4); //向电梯发送前门关门指令 await _db.Deleteable(elevatorQueueItem).ExecuteCommandAsync(); - elevatorQueueItem = await _db.Queryable().FirstAsync(it => disTasks.Select(x => x.id).Contains(it.distask_id) && it.task_status == "待执行"); - if (!elevatorQueueItem?.elevator_code.IsNullOrEmpty() ?? false) - { - await (_wareHouseService.AddUnExecuteTask?.Invoke(elevatorQueueItem?.elevator_code!, disTask.start_floor.ParseToInt()) ?? Task.CompletedTask); - } } } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/Dijkstra.cs b/WarehouseMgr/Tnb.WarehouseMgr/Dijkstra.cs deleted file mode 100644 index c3ef70f9..00000000 --- a/WarehouseMgr/Tnb.WarehouseMgr/Dijkstra.cs +++ /dev/null @@ -1,215 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using JNPF.Common.Contracts; -using NPOI.SS.Formula.Functions; -using Tnb.WarehouseMgr.Entities; - -namespace Tnb.WarehouseMgr -{ - /// - /// 迪杰斯特拉(最短路径算法) - /// - //public class Dijkstra where T : BaseEntity, IWmsRoadEntity, new() - //{ - // public static int MAX = int.MaxValue; - - // public int mEdgNum; // 边的数量 - // public VNode[] mVexs; // 顶点数组 - // //private EData[] edges; //边的数组 - // /* - // * 创建图 - // * - // * 参数说明: - // * vexs -- 顶点数组 - // * edges -- 边 - // */ - // public Dijkstra(string[] vexs, EData[] edges) - // { - - // // 初始化"顶点数"和"边数" - // int vlen = vexs.Length; - // int elen = edges.Length; - - // // 初始化"顶点" - // mVexs = new VNode[vlen]; - // for (int i = 0; i < mVexs.Length; i++) - // { - // mVexs[i] = new VNode(); - // mVexs[i].data = vexs[i]; - // mVexs[i].firstEdge = null; - // } - - // // 初始化"边" - // mEdgNum = elen; - // for (int i = 0; i < elen; i++) - // { - // // 读取边的起始顶点和结束顶点 - // string c1 = edges[i].start; - // string c2 = edges[i].end; - // int weight = edges[i].weight; - - // // 读取边的起始顶点和结束顶点 - // int p1 = GetPosition(c1); - // int p2 = GetPosition(c2); - // // 初始化node1 - // ENode node1 = new ENode(); - // node1.ivex = p2; - // node1.weight = weight; - // // 将node1链接到"p1所在链表的末尾" - // if (mVexs[p1].firstEdge == null) - // mVexs[p1].firstEdge = node1; - // else - // LinkLast(mVexs[p1].firstEdge, node1); - // // 初始化node2 - // ENode node2 = new ENode(); - // node2.ivex = p1; - // node2.weight = weight; - // // 将node2链接到"p2所在链表的末尾" - // if (mVexs[p2].firstEdge == null) - // mVexs[p2].firstEdge = node2; - // else - // LinkLast(mVexs[p2].firstEdge, node2); - // } - // } - - // /* - // * 将node节点链接到list的最后 - // */ - // private void LinkLast(ENode list, ENode node) - // { - // ENode p = list; - - // while (p.nextEdge != null) - // p = p.nextEdge; - // p.nextEdge = node; - // } - - // /* - // * 返回ch位置 - // */ - // private int GetPosition(string ch) - // { - // for (int i = 0; i < mVexs.Length; i++) - // if (mVexs[i].data == ch) - // return i; - // return -1; - // } - - // /* - // * 获取边的权值;若start和end不是连通的,则返回无穷大。 - // */ - // private int GetWeight(int start, int end) - // { - // if (start == end) - // return 0; - - // ENode node = mVexs[start].firstEdge; - // while (node != null) - // { - // if (end == node.ivex) - // return node.weight; - // node = node.nextEdge; - // } - - // return MAX; - // } - - // /* - // * Dijkstra最短路径。 - // * 即,统计图中"起点D"到其它各个顶点的最短路径。 - // * - // * 参数说明: - // * vs -- 起始顶点(start vertex)。 - // * prev -- 前驱顶点数组。即,prev[i]的值是"起点D"到"顶点i"的最短路径所经历的全部顶点中,位于"顶点i"之前的那个顶点。 - // * dist -- 长度数组。即,dist[i]是"起点D"到"顶点i"的最短路径的长度。 - // */ - // public void CalcDijkstra(int vs, int[] prev, int[] dist, List roads) - // { - // //List vertexs = new(); //最短路径串联的点位列表 - // // flag[i]=true表示"起点D"到"顶点i"的最短路径已成功获取。 - // bool[] flag = new bool[mVexs.Length]; - - // // 初始化 - // for (int i = 0; i < mVexs.Length; i++) - // { - // flag[i] = false; // 顶点i的最短路径还没获取到。 - // prev[i] = 0; // 顶点i的前驱顶点为0。 - // dist[i] = GetWeight(vs, i); // 顶点i的最短路径为"起点D"到"顶点i"的权。 - // } - - // // 对"起点D"自身进行初始化 - // flag[vs] = true; - // dist[vs] = 0; - - // // 遍历mVexs.Length-1次;每次找出一个顶点的最短路径。 - // int k = 0; - // for (int i = 1; i < mVexs.Length; i++) - // { - // // 寻找当前最小的路径 - // // 即,在未获取最短路径的顶点中,找到离起点D最近的顶点(k)。 - // int min = MAX; - // for (int j = 0; j < mVexs.Length; j++) - // { - // if (flag[j] == false && dist[j] < min) - // { - // min = dist[j]; - // k = j; - // } - // } - // // 标记"顶点k"为已经获取到最短路径 - // flag[k] = true; - // // 更新当前最短路径和前驱顶点 - // // 即,更新"未获取最短路径的顶点的最短路径和前驱顶点"。 - // for (int j = 0; j < mVexs.Length; j++) - // { - // int tmp = GetWeight(k, j); - // tmp = (tmp == MAX ? MAX : (min + tmp)); // 防止溢出 - // if (flag[j] == false && (tmp < dist[j])) - // { - // dist[j] = tmp; - // prev[j] = k; - // } - // } - // } - // } - //} - - ///// - ///// 邻接表中表对应的链表的顶点 - ///// - //public class ENode - //{ - // public int ivex; // 该边所指向的顶点的位置 - // public int weight; // 该边的权 - // public ENode nextEdge; // 指向下一条弧的指针 - //} - - ///// - ///// 邻接表中表的顶点 - ///// - //public class VNode - //{ - // public string data; // 顶点信息 - // public ENode firstEdge; // 指向第一条依附该顶点的弧 - //} - - ///// - ///// 边的结构体 - ///// - //public class EData - //{ - // public string start; // 边的起点 - // public string end; // 边的终点 - // public int weight; // 边的权重 - - // public EData(string start, string end, int weight) - // { - // this.start = start; - // this.end = end; - // this.weight = weight; - // } - //} -} diff --git a/WarehouseMgr/Tnb.WarehouseMgr/Dp.cs b/WarehouseMgr/Tnb.WarehouseMgr/Dp.cs deleted file mode 100644 index 50e838b1..00000000 --- a/WarehouseMgr/Tnb.WarehouseMgr/Dp.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using JNPF.Common.Extension; -using JNPF.Templates; -using Microsoft.AspNetCore.Mvc; -using NPOI.SS.Formula.Functions; -using Spire.Doc; -using Tnb.WarehouseMgr.Entities; - -namespace Tnb.WarehouseMgr -{ - /// - /// 动态规划类 - /// - public class Dp - { - private HashSet set = new HashSet(); - - /// - /// 动态规划函数 - /// - /// - public void DpFunc(List roads, List pointIds, Dictionary isVisited, string sPointId, string ePointId, dynamic ArrivedEpoint) - { - var sRoads = roads.FindAll(x => x.startpoint_id == sPointId).ToList(); - var sRoads_EPointIds = sRoads.Select(x => x.endpoint_id).ToList(); - - if (!isVisited[sPointId]) - { - pointIds.Add(sPointId); - set.Add(roads?.Find(x => x.startpoint_id == sPointId)?.startpoint_code!); - isVisited[sPointId] = true; - } - - if (sRoads_EPointIds.Contains(ePointId)) //判断是否到达终点 - { - ArrivedEpoint.isArrivedEpoint = true; - pointIds.Add(ePointId); - foreach (var kvp in isVisited) - { - isVisited[kvp.Key] = true; - } - return; - } - if (sRoads_EPointIds?.Count > 0) - { - var subRoads = roads?.FindAll(x => sRoads_EPointIds.Contains(x.startpoint_id) && !isVisited[x.endpoint_id]); - if (subRoads?.Count > 0) - { - for (int i = 0; i < subRoads.Count; i++) - { - var sIdx = subRoads[i].startpoint_id; - if (!isVisited[sIdx]) - { - DpFunc(roads, pointIds, isVisited, sIdx, ePointId, ArrivedEpoint); - } - } - } - } - if (!ArrivedEpoint.isArrivedEpoint) - { - pointIds.Remove(sPointId); - } - } - } -} diff --git a/WarehouseMgr/Tnb.WarehouseMgr/EventSubscribers/TaskStatusChangeSubscriber.cs b/WarehouseMgr/Tnb.WarehouseMgr/EventSubscribers/TaskStatusChangeSubscriber.cs new file mode 100644 index 00000000..c74e3044 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr/EventSubscribers/TaskStatusChangeSubscriber.cs @@ -0,0 +1,47 @@ +using JNPF.Common.Configuration; +using JNPF.DependencyInjection; +using JNPF.EventBus; +using JNPF.TaskScheduler.Entitys; +using SqlSugar; +using Tnb.Common.Core.EventBus.Constants; +using Tnb.Common.Core.EventBus.Sources; +using Tnb.WarehouseMgr.Interfaces; + +namespace Tnb.WarehouseMgr.EventSubscribers; + +/// +/// 任务事件订阅. +/// +public class TaskStatusChangeSubscriber : IEventSubscriber, ISingleton +{ + /// + /// 初始化客户端. + /// + //private static SqlSugarScope? _sqlSugarClient; + private readonly IWareHouseService _wareHouseService; + /// + /// 构造函数. + /// + public TaskStatusChangeSubscriber(IWareHouseService wareHouseService) + { + _wareHouseService = wareHouseService; + } + + /// + /// 创建任务日记. + /// + /// + /// + [EventSubscribe(EventSubscribeEventConsts.TaskStatusChangeEventId)] + public async Task Excute(EventHandlerExecutingContext context) + { + var tscSource = (TaskStatusChangeSource)context.Source; + switch (tscSource.Payload) + { + case nameof(_wareHouseService.GenTaskExecute): + await _wareHouseService.GenTaskExecute(); + break; + } + + } +} \ No newline at end of file diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 0358a74d..78e1561e 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -33,6 +33,7 @@ using Tnb.WarehouseMgr.Entities.Dto.Inputs; using Tnb.WarehouseMgr.Entities.Entity; using Tnb.WarehouseMgr.Entities.Enums; using Tnb.WarehouseMgr.Interfaces; +using JNPF.Common.Extension; namespace Tnb.WarehouseMgr { @@ -47,12 +48,13 @@ namespace Tnb.WarehouseMgr private readonly IUserManager _userManager; private readonly ICacheManager _cacheManager; private readonly IElevatorControlService _elevatorControlService; - private static Dictionary _elevatorMap = new Dictionary(); + private static Dictionary _elevatorAgvCtlStatusMap = new(StringComparer.OrdinalIgnoreCase); private readonly ElevatorControlConfiguration _eleCtlCfg = App.Configuration.Build(); public Func AddUnExecuteTask { get; set; } public WareHouseService(ISqlSugarRepository repository, IDictionaryDataService dictionaryDataService, IBillRullService billRullService, IUserManager userManager, ICacheManager cacheManager, IElevatorControlService elevatorControlService) + : base(repository.AsSugarClient()) { _db = repository.AsSugarClient(); _dictionaryDataService = dictionaryDataService; @@ -60,10 +62,6 @@ namespace Tnb.WarehouseMgr _userManager = userManager; _cacheManager = cacheManager; _elevatorControlService = elevatorControlService; - AddUnExecuteTask = async (code, floor) => - { - await _elevatorControlService.CallLift(code, floor, CancellationToken.None); - }; } @@ -226,10 +224,23 @@ namespace Tnb.WarehouseMgr var db = _db.CopyNew(); try { - //if (_elevatorMap.Count < 1) - //{ - // _elevatorMap = await _db.Queryable().ToDictionaryAsync(x => x.elevator_id, x => x.elevator_code); - //} + /*if (_elevatorMap.Count < 1) + { + _elevatorMap = await _db.Queryable().ToDictionaryAsync(x => x.elevator_id, x => x.elevator_code); + }*/ + //获取电梯数据 + var elevatorList = await db.Queryable().InnerJoin((a, b) => a.id == b.bill_id) + .Select((a, b) => new WmsElevatorH + { + bill_id = b.bill_id, + location_id = b.location_id, + location_code = b.location_code, + point_id = b.point_id, + point_code = b.point_code, + floor = b.floor + }, true).ToListAsync(); + + //获取所有未下发的预任务申请 var preTasks = await db.Queryable().InnerJoin((a, b) => a.startlocation_id == b.location_id && a.carry_id == b.id) .InnerJoin((a, b, c) => a.area_id == c.id) @@ -240,6 +251,14 @@ namespace Tnb.WarehouseMgr move_num = c.move_num }, true) .ToListAsync(); + var agvElevatorTasks = preTasks + .Where(it => it.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase) && + !it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)) + .ToList(); + var firstEleGrp = agvElevatorTasks.GroupBy(g => g.endlocation_code).Select(t => t.OrderBy(o => o.bill_code).FirstOrDefault()); + agvElevatorTasks = agvElevatorTasks.FindAll(x => firstEleGrp.Select(y => y.endlocation_code).Contains(x.endlocation_code)); + preTasks = preTasks.Where(it => !it.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase)).Concat(agvElevatorTasks).ToList(); + var ids = preTasks.Select(x => x.id).Distinct().ToList(); var preTaskCodes = await db.Queryable().Where(it => ids.Contains(it.bill_id)).ToListAsync(); if (preTasks.Count > 0) @@ -323,7 +342,25 @@ namespace Tnb.WarehouseMgr } await db.Ado.BeginTranAsync(); + var endPointIds = disTasks.Where(t => t.area_code.StartsWith("ELE", StringComparison.OrdinalIgnoreCase)).Select(t => t.endpoint_id).ToList(); + if (endPointIds?.Count > 0) + { + elevatorList = elevatorList.FindAll(x => endPointIds.Contains(x.point_id)); + if (elevatorList?.Count > 0) + { + foreach (var e in elevatorList) + { + var disTask = disTasks.Find(x => x.endpoint_id == e.point_id); + if (disTask != null) + { + disTask.device_id = e.elevator_id; + } + } + } + } //disTasks.ForEach(x => x.id = SnowflakeIdHelper.NextId()); + + var row = await db.Insertable(disTasks).ExecuteCommandAsync(); if (preTaskCodes?.Count > 0) { @@ -335,24 +372,22 @@ namespace Tnb.WarehouseMgr row = await db.Updateable().SetColumns(it => new WmsPretaskH { status = WmsWareHouseConst.PRETASK_BILL_STATUS_YXF_ID }).Where(it => preTaskIds.Contains(it.id)).ExecuteCommandAsync(); } - sw.Stop(); - Log.Information($"程序运行耗时{sw.ElapsedMilliseconds}ms"); await db.Ado.CommitTranAsync(); //呼梯操作 //获取目标库位为电梯库位的任务 - var endLocCodes = disTasks - .Where(it => it.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase) && - !it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase) - ).Select(it => (it.endlocation_code, it.device_id, it.id, it.start_floor)).ToList(); + .Where(it => it.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase) && + !it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)) + .Select(it => (it.endlocation_code, it.device_id, it.id, it.start_floor)).ToList(); if (endLocCodes?.Count > 0) { + await CallingLanding(endLocCodes); } //执行电梯任务 var elevatorTasks = disTasks.Where(it => it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList(); - + if (elevatorTasks?.Count > 0) { Logger.Information($"当前电梯任务数:{elevatorTasks?.Count ?? 0}"); @@ -371,7 +406,6 @@ namespace Tnb.WarehouseMgr { await AgvDispatch(agvTasks, agvCts.Token); } - } } catch (Exception ex) when (ex is HttpRequestException hReqEx) @@ -396,59 +430,67 @@ namespace Tnb.WarehouseMgr /// private async Task CallingLanding(List<(string endlocation_code, string device_id, string id, string floorNO)> endLocCodes) { - Logger.Information($"开始呼梯操作............."); + Logger.Information($" 开始呼梯操作............."); try { - var item = endLocCodes.FirstOrDefault(); - //if (_elevatorMap.ContainsKey(item.device_id)) - var devName = _eleCtlCfg.DevName; + foreach (var (_, devId, disTaskId, floorNO) in endLocCodes) { - var agvStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.AGVControl); - Logger.Information($"当前Agv状态:{agvStatus.ToEnum().ToString()}"); - //判断当前设备是否为运行状态,不是则进入Agv电梯控制状态 - if (agvStatus.ToEnum() != EnumAgvStatus.AGV运行状态) + if (!_elevatorMap.TryGetValue(devId, out var elevatorCode)) continue; + + var devName = elevatorCode.ToString(); + + Logger.Information($"当前:{devName.Match(@"\d+")}#梯"); + + await _elevatorControlService.WriteTagAsync(devName, ElevatorConsts.AGVControl, 1); + (int sysStatus, int runStatus, int curFloorNo, int doorStatus, int agvStatus) eleStatusMulti = (-1, -1, -1, -1, -1); + if (!_elevatorAgvCtlStatusMap.TryGetValue(devId, out var agvCtlStatus) || agvCtlStatus != (int)EnumAgvStatus.AGV运行状态) { - await _elevatorControlService.WriteTagAsync(devName, ElevatorConsts.AGVControl, 1); + do + { + eleStatusMulti = await _elevatorControlService.GetElevatorStatus(devName, CancellationToken.None); + await Task.Delay(500); + } while (eleStatusMulti.agvStatus != (int)EnumAgvStatus.AGV运行状态); + Logger.Information($"{devName.Match(@"\d+")}#, 当前Agv状态:{eleStatusMulti.agvStatus.ToEnum().ToString()}"); + _elevatorAgvCtlStatusMap[devId] = eleStatusMulti.agvStatus; } - } - { - (int sysStatus, int runStatus, int curFloorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(devName, CancellationToken.None); - foreach (var (_, devId, disTaskId, floorNO) in endLocCodes) + Logger.Information($"任务开始目标楼层为:{floorNO}"); + + var floorN = await GetRealFloor(floorNO.ParseToInt()); + //如果电梯在当前楼层则不呼梯 + if (floorN == eleStatusMulti.curFloorNo) { - Logger.Information($"任务开始目标楼层为:{floorNO}"); - - var floorN = await GetRealFloor(floorNO.ParseToInt()); - - Logger.Information($"实际目标楼层为:{floorN}"); - - WmsElevatorUnexecute elevatorQueueItem = new() - { - distask_id = disTaskId, - elevator_id = devId, - elevator_code = devName, - floor = floorN, //5代表4楼 - task_status = "待执行", - create_id = _userManager.UserId, - create_time = DateTime.Now - }; - var elevatorQueue = await _db.Queryable().Where(it => it.distask_id == disTaskId && it.task_status == "执行中").ToListAsync(); - if ((elevatorQueue.IsNull() || elevatorQueue.Count < 1) && floorNO.ParseToInt() != curFloorNo) - { - - elevatorQueueItem.task_status = "执行中"; - var callLiftRes = await _elevatorControlService.CallLift(devName, floorN, CancellationToken.None); - string successful = "成功", fail = "失败"; - var callLiftResult = callLiftRes ? successful : fail; - Logger.Information($"呼梯结果:{callLiftResult}"); - } - - //如果当前电梯有任务在做,将当前呼梯任务放入待执行队列 - await _db.Insertable(elevatorQueueItem).ExecuteCommandAsync(); + Logger.Information($"{devName.Match(@"\d+")}#,在当前楼层,无需呼梯"); + continue; } - } + Logger.Information($"实际目标楼层为:{floorN}"); + + WmsElevatorUnexecute elevatorQueueItem = new() + { + distask_id = disTaskId, + elevator_id = devId, + elevator_code = devName, + floor = floorN, //5代表4楼 + task_status = "待执行", + create_id = _userManager.UserId, + create_time = DateTime.Now + }; + var elevatorQueue = await _db.Queryable().Where(it => it.distask_id == disTaskId && it.task_status == "执行中").ToListAsync(); + if ((elevatorQueue.IsNull() || elevatorQueue.Count < 1) && floorN != eleStatusMulti.curFloorNo) + { + + elevatorQueueItem.task_status = "执行中"; + var callLiftRes = await _elevatorControlService.CallLift(devName, floorN, CancellationToken.None); + string successful = "成功", fail = "失败"; + var callLiftResult = callLiftRes ? successful : fail; + Logger.Information($"{devName.Match(@"\d+")}#, 呼梯结果:{callLiftResult}"); + } + + //如果当前电梯有任务在做,将当前呼梯任务放入待执行队列 + await _db.Insertable(elevatorQueueItem).ExecuteCommandAsync(); + } } catch (Exception ex) { @@ -468,54 +510,58 @@ namespace Tnb.WarehouseMgr Logger.Information($"开始执行电梯任务,任务ID:{disTask.id}"); try { -/* var elevatorQueueItem = await _db.Queryable().FirstAsync(it => it.task_status == "执行中"); - Log.Information($"是否存在电梯任务项:{elevatorQueueItem != null}"); -*/ //if (elevatorQueueItem != null) + if (!_elevatorMap.TryGetValue(disTask.device_id, out var elevatorCode)) { - //var disTask = disTasks.Find(x => x.id == elevatorQueueItem.distask_id); - //if (disTask?.status == WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID) - { - var doorStatus = -1; - var closeDoorRes = await _elevatorControlService.SendOpenCloseCmd(_eleCtlCfg.DevName, 4); //向电梯发送前门关门指令 - Logger.Information($"关门结果:{closeDoorRes}"); - do - { - doorStatus = await _elevatorControlService.GetTagAsync(_eleCtlCfg.DevName, ElevatorConsts.DoorStatus); - await Task.Delay(2000); - } while (doorStatus != 4); - Logger.Information($"当前门状态:{doorStatus}"); - - var floor = await GetRealFloor(disTask.end_floor.ParseToInt()); - - Logger.Information($"目标楼层:{floor}"); - - //发送到目标楼的指令 - var reuslt = await _elevatorControlService.WriteTagAsync(_eleCtlCfg.DevName, ElevatorConsts.FloorExecute, floor); - //电梯任务手动执行任务状态上报 - (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) tuple = (-1, -1, -1, -1, -1); - - do - { - tuple = await _elevatorControlService.GetElevatorStatus(_eleCtlCfg.DevName, CancellationToken.None); - await Task.Delay(2000); - } while (tuple.sysStatus != 3 && tuple.runStatus != 0); - - Logger.Information($"sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},floorNo:{tuple.floorNo},disTask.end_floor={disTask.end_floor}"); - - if (tuple.sysStatus.ToEnum() == EnumSysStatus.正常状态 && tuple.runStatus.ToEnum() == EnumRunStatus.停梯) - { - Log.Information($"disTask.require_id={disTask.require_id}"); - - List disTaskIds = new() { disTask.id }; - Log.Information($"disTaskIds={string.Join(",", disTaskIds)}"); - TaskExecuteAfterUpInput teaUpInput = new() { disTaskIds = disTaskIds }; - await TaskExecuteAfter(teaUpInput); - - TaskCompleUpInput tcUpInput = new() { disTaskIds = disTaskIds }; - await TaskComplate(tcUpInput); - } - } + return; } + var devName = _elevatorMap[disTask.device_id]?.ToString() ?? _eleCtlCfg.DevName; + + Logger.Information($"当前:{devName.Match(@"\d+")}#梯"); + + var doorStatus = -1; + var closeDoorRes = await _elevatorControlService.SendOpenCloseCmd(devName, 4); //向电梯发送前门关门指令 + Logger.Information($"关门结果:{closeDoorRes}"); + do + { + doorStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.DoorStatus); + await Task.Delay(2000); + } while (doorStatus != 4); + Logger.Information($"当前门状态:{doorStatus}"); + + var floor = await GetRealFloor(disTask.end_floor.ParseToInt()); + + Logger.Information($"目标楼层:{floor}"); + + //发送到目标楼的指令 + var reuslt = await _elevatorControlService.WriteTagAsync(devName, ElevatorConsts.FloorExecute, floor); + //电梯任务手动执行任务状态上报 + (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) tuple = (-1, -1, -1, -1, -1); + + do + { + tuple = await _elevatorControlService.GetElevatorStatus(devName, CancellationToken.None); + await Task.Delay(2000); + } while (tuple.sysStatus != 3 && tuple.runStatus != 0); + + Logger.Information($"sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},floorNo:{tuple.floorNo},disTask.end_floor={disTask.end_floor}"); + + if (tuple.sysStatus.ToEnum() == EnumSysStatus.正常状态 && tuple.runStatus.ToEnum() == EnumRunStatus.停梯) + { + Log.Information($"disTask.require_id={disTask.require_id}"); + var disTaskIds = new List { disTask.id }; + var upInput = new { disTaskIds = disTask.id }; + TaskExecuteAfterUpInput teaUpInput = new() + { + disTaskIds = disTaskIds, + }; + await TaskExecuteAfter(teaUpInput); + TaskCompleUpInput tcUpInput = new() + { + disTaskIds = disTaskIds, + }; + await TaskComplate(tcUpInput); + } + } catch (Exception ex) { @@ -746,7 +792,7 @@ namespace Tnb.WarehouseMgr catch (Exception ex) { Logger.Error($"任务结束失败", ex); - Log .Error($"任务结束失败堆栈异常", ex.StackTrace); + Log.Error($"任务结束失败堆栈异常", ex.StackTrace); await _db.Ado.RollbackTranAsync(); throw; } @@ -916,8 +962,9 @@ namespace Tnb.WarehouseMgr } } } - catch (Exception) + catch (Exception ex) { + Logger.Error("路径算法异常", ex); throw; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveInStockService.cs index 817be66e..bace2234 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveInStockService.cs @@ -11,6 +11,7 @@ using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Entitys.Permission; using JNPF.Systems.Interfaces.System; @@ -44,7 +45,6 @@ namespace Tnb.WarehouseMgr private readonly IWareHouseService _wareHouseService; private readonly IBillRullService _billRullService; private readonly IUserManager _userManager; - private readonly ChannelWriter _channelWriter; public WmsCarryMoveInStockService( @@ -54,8 +54,8 @@ namespace Tnb.WarehouseMgr IWareHouseService wareHouseService, IUserManager userManager, IBillRullService billRullService, - ITaskMessageNotify taskMessageNotify - ) : base(taskMessageNotify.Writer) + IEventPublisher eventPublisher + ) { _db = repository.AsSugarClient(); _runService = runService; @@ -63,7 +63,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; - + EventPublisher = eventPublisher; OverideFuncs.CreateAsync = CarryMoveIn; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveOutStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveOutStockService.cs index facb0a09..9527fe3f 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveOutStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveOutStockService.cs @@ -8,6 +8,7 @@ using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; @@ -46,7 +47,8 @@ namespace Tnb.WarehouseMgr IWareHouseService wareHouseService, IUserManager userManager, IBillRullService billRullService, - ITaskMessageNotify taskMessageNotify) : base(taskMessageNotify.Writer) + IEventPublisher eventPublisher + ) { _db = repository.AsSugarClient(); _runService = runService; @@ -54,6 +56,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; + EventPublisher = eventPublisher; OverideFuncs.CreateAsync = CarryMoveOut; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCheckTaskService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCheckTaskService.cs index 63ee2b35..70834328 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCheckTaskService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCheckTaskService.cs @@ -8,6 +8,7 @@ using JNPF.Common.Core.Manager; using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Extension; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; @@ -44,8 +45,8 @@ namespace Tnb.WarehouseMgr IRunService runService, IBillRullService billRullService, IUserManager userManager, - ITaskMessageNotify taskMessageNotify - ) : base(taskMessageNotify.Writer) + IEventPublisher eventPublisher + ) { _db = repository.AsSugarClient(); _warehouseService = wareHouseService; @@ -53,6 +54,7 @@ namespace Tnb.WarehouseMgr _runService = runService; _billRullService = billRullService; _userManager = userManager; + EventPublisher = eventPublisher; OverideFuncs.CreateAsync = Create; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsDeliveryService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsDeliveryService.cs index 36e9af2a..f20a36dd 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsDeliveryService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsDeliveryService.cs @@ -11,6 +11,7 @@ using JNPF.Common.Extension; using JNPF.Common.Security; using JNPF.DependencyInjection; using JNPF.DynamicApiController; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Logging; using JNPF.Systems.Interfaces.System; @@ -56,8 +57,8 @@ namespace Tnb.WarehouseMgr IWareHouseService wareHouseService, IUserManager userManager, IBillRullService billRullService, - ITaskMessageNotify taskMessageNotify - ) : base(taskMessageNotify.Writer) + IEventPublisher eventPublisher + ) { _db = repository.AsSugarClient(); _runService = runService; @@ -66,6 +67,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; + EventPublisher = eventPublisher; OverideFuncs.CreateAsync = Create; } /// @@ -128,7 +130,7 @@ namespace Tnb.WarehouseMgr { var points = await _wareHouseService.PathAlgorithms(sPoint.id, ePoint.id); - Log.Information($"经过的所有点位编码:{Environment.NewLine}{string.Join("\r\n", points.Select(x=>x.point_code))}"); + Log.Information($"经过的所有点位编码:{Environment.NewLine}{string.Join("\r\n", points.Select(x => x.point_code))}"); //根据获取的路径点生成预任务,生成顺序必须预路径算法返回的起终点的顺序一致(预任务顺序) if (points?.Count > 0) @@ -139,7 +141,7 @@ namespace Tnb.WarehouseMgr var sPoint = it.FirstOrDefault(); var ePoint = it.LastOrDefault(); - Log.Information("ePoint?.point_code="+ ePoint?.point_code); + Log.Information("ePoint?.point_code=" + ePoint?.point_code); WmsPretaskH preTask = new(); preTask.org_id = _userManager.User.OrganizeId; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs index 018bb6a9..46abdf54 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs @@ -10,6 +10,7 @@ using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; @@ -54,8 +55,8 @@ namespace Tnb.WarehouseMgr IWareHouseService wareHouseService, IUserManager userManager, IBillRullService billRullService, - ITaskMessageNotify taskMesageNotify - ) : base(taskMesageNotify.Writer) + IEventPublisher eventPublisher + ) { _db = repository.AsSugarClient(); _runService = runService; @@ -63,7 +64,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; - _channelWriter = taskMesageNotify.Writer; + EventPublisher = eventPublisher; OverideFuncs.CreateAsync = WmsEmptyIn; } private async Task WmsEmptyIn(VisualDevModelDataCrInput input) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs index 64342d1d..dc1a1efa 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs @@ -9,6 +9,7 @@ using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; @@ -52,8 +53,8 @@ namespace Tnb.WarehouseMgr IWareHouseService wareHouseService, IUserManager userManager, IBillRullService billRullService, - ITaskMessageNotify taskMessageNotify - ) : base(taskMessageNotify.Writer) + IEventPublisher eventPublisher + ) { _db = repository.AsSugarClient(); _runService = runService; @@ -61,6 +62,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; + EventPublisher = eventPublisher; OverideFuncs.CreateAsync = WmsEmptyOut; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs index f781a043..b48358f3 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs @@ -9,6 +9,7 @@ using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Extension; using JNPF.Common.Filter; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Logging; using JNPF.Systems.Interfaces.System; @@ -55,8 +56,8 @@ namespace Tnb.WarehouseMgr IBillRullService billRullService, IWareHouseService wareHouseService, IPrdInstockService prdInstockService, - ITaskMessageNotify taskMessageNotify - ) : base(taskMessageNotify.Writer) + IEventPublisher eventPublisher + ) { _db = repository.AsSugarClient(); _dictionaryDataService = dictionaryDataService; @@ -64,6 +65,7 @@ namespace Tnb.WarehouseMgr _billRullService = billRullService; _wareHouseService = wareHouseService; _prdInstockService = prdInstockService; + EventPublisher = eventPublisher; } /// /// 根据入库申请单ID获取申请单明细信息 diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsKittingInStkService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsKittingInStkService.cs index 9935c4cf..e82bb9a5 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsKittingInStkService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsKittingInStkService.cs @@ -8,6 +8,7 @@ using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; @@ -49,8 +50,8 @@ namespace Tnb.WarehouseMgr IWareHouseService wareHouseService, IUserManager userManager, IBillRullService billRullService, - ITaskMessageNotify taskMessageNotify - ) : base(taskMessageNotify.Writer) + IEventPublisher eventPublisher + ) { _db = repository.AsSugarClient(); _runService = runService; @@ -58,6 +59,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; + EventPublisher = eventPublisher; OverideFuncs.CreateAsync = KittingInStk; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutBaleService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutBaleService.cs index 1c9f302f..e7dd0c38 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutBaleService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutBaleService.cs @@ -8,6 +8,7 @@ using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; @@ -48,8 +49,8 @@ namespace Tnb.WarehouseMgr IUserManager userManager, IBillRullService billRullService, IWmsCarryService wmsCarryService, - ITaskMessageNotify taskMessageNotify - ) : base(taskMessageNotify.Writer) + IEventPublisher eventPublisher + ) { _db = repository.AsSugarClient(); _runService = runService; @@ -58,6 +59,7 @@ namespace Tnb.WarehouseMgr _userManager = userManager; _billRullService = billRullService; _wmsCarryService = wmsCarryService; + EventPublisher = eventPublisher; OverideFuncs.CreateAsync = CarryOutBale; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs index 3b63c14f..fd4ae50a 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs @@ -35,6 +35,7 @@ using Tnb.WarehouseMgr.Interfaces; using System.Reflection; using Tnb.WarehouseMgr.Print; using System.Runtime.InteropServices; +using JNPF.EventBus; namespace Tnb.WarehouseMgr { @@ -67,7 +68,7 @@ namespace Tnb.WarehouseMgr IBillRullService billRullService, IWmsCarryMoveInStockService wmsCarryMoveInStockService, IWmsCarryService wareCarryService, - ITaskMessageNotify taskMessageNotify) : base(taskMessageNotify.Writer) + IEventPublisher eventPublisher) { _db = repository.AsSugarClient(); _dictionaryDataService = dictionaryDataService; @@ -78,6 +79,7 @@ namespace Tnb.WarehouseMgr _billRullService = billRullService; _wmsCarryMoveInStockService = wmsCarryMoveInStockService; _wareCarryService = wareCarryService; + EventPublisher = eventPublisher; OverideFuncs.CreateAsync = OutStockApplyFor; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryMoveInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryMoveInStockService.cs index 96211641..e9f4ce5c 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryMoveInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryMoveInStockService.cs @@ -9,6 +9,7 @@ using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Entitys.Permission; using JNPF.Systems.Interfaces.System; @@ -51,7 +52,7 @@ namespace Tnb.WarehouseMgr IWareHouseService wareHouseService, IUserManager userManager, IBillRullService billRullService, - ITaskMessageNotify taskMessageNotify) : base(taskMessageNotify.Writer) + IEventPublisher eventPublisher) { _db = repository.AsSugarClient(); _runService = runService; @@ -59,6 +60,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; + EventPublisher = eventPublisher; OverideFuncs.CreateAsync = PDACarryMoveIn; } @@ -251,7 +253,7 @@ namespace Tnb.WarehouseMgr handleH.carry_code = input.data[nameof(WmsHandleH.carry_code)]?.ToString()!; handleH.require_id = input.data["ReturnIdentity"].ToString(); handleH.require_code = input.data[nameof(WmsHandleH.bill_code)]?.ToString()!; - handleH.create_id = _userManager.UserId ; + handleH.create_id = _userManager.UserId; handleH.create_time = DateTime.Now; preTaskUpInput.PreTaskRecord = handleH; //根据载具移入Id,回更单据状态 diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryMoveOutStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryMoveOutStockService.cs index e04b6d4e..af06151c 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryMoveOutStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryMoveOutStockService.cs @@ -8,6 +8,7 @@ using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; @@ -39,6 +40,7 @@ namespace Tnb.WarehouseMgr private readonly IWareHouseService _wareHouseService; private readonly IBillRullService _billRullService; private readonly IUserManager _userManager; + public WmsPDACarryMoveOutStockService( ISqlSugarRepository repository, IRunService runService, @@ -46,8 +48,8 @@ namespace Tnb.WarehouseMgr IWareHouseService wareHouseService, IUserManager userManager, IBillRullService billRullService, - ITaskMessageNotify taskMessageNotify - ) : base(taskMessageNotify.Writer) + IEventPublisher eventPublisher + ) { _db = repository.AsSugarClient(); _runService = runService; @@ -55,6 +57,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; + EventPublisher = eventPublisher; OverideFuncs.CreateAsync = PDACarryMoveOut; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDADeliveryService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDADeliveryService.cs index e17b2dac..1bcc6ecb 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDADeliveryService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDADeliveryService.cs @@ -10,6 +10,7 @@ using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.DependencyInjection; using JNPF.DynamicApiController; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; @@ -51,8 +52,8 @@ namespace Tnb.WarehouseMgr IBillRullService billRullService, IWareHouseService wareHouseService, IUserManager userManager, - ITaskMessageNotify taskMessageNotify - ) : base(taskMessageNotify.Writer) + IEventPublisher eventPublisher + ) { _db = repository.AsSugarClient(); _runService = runService; @@ -61,6 +62,7 @@ namespace Tnb.WarehouseMgr _billRullService = billRullService; _wareHouseService = wareHouseService; _userManager = userManager; + EventPublisher = eventPublisher; OverideFuncs.CreateAsync = Create; } /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyInstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyInstockService.cs index 91280a06..3ca9a1b7 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyInstockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyInstockService.cs @@ -8,6 +8,7 @@ using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; @@ -48,7 +49,7 @@ namespace Tnb.WarehouseMgr IWareHouseService wareHouseService, IUserManager userManager, IBillRullService billRullService, - ITaskMessageNotify taskMessageNotify) : base(taskMessageNotify.Writer) + IEventPublisher eventPublisher) { _db = repository.AsSugarClient(); _runService = runService; @@ -56,6 +57,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; + EventPublisher = eventPublisher; OverideFuncs.CreateAsync = PDAWmsEmptyIn; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyOutstockService .cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyOutstockService .cs index 05ea05d0..986a9a2b 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyOutstockService .cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyOutstockService .cs @@ -8,6 +8,7 @@ using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Logging; using JNPF.Systems.Interfaces.System; @@ -49,8 +50,8 @@ namespace Tnb.WarehouseMgr IWareHouseService wareHouseService, IUserManager userManager, IBillRullService billRullService, - ITaskMessageNotify taskMessageNotify - ) : base(taskMessageNotify.Writer) + IEventPublisher eventPublisher + ) { _db = repository.AsSugarClient(); _runService = runService; @@ -58,6 +59,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; + EventPublisher = eventPublisher; OverideFuncs.CreateAsync = PDAWmsEmptyOut; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs index 776bd53b..a5ade6b2 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs @@ -10,6 +10,7 @@ using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; @@ -55,8 +56,8 @@ namespace Tnb.WarehouseMgr IWareHouseService wareHouseService, IUserManager userManager, IBillRullService billRullService, - ITaskMessageNotify taskMessageNotify - ) : base(taskMessageNotify.Writer) + IEventPublisher eventPublisher + ) { _db = repository.AsSugarClient(); _runService = runService; @@ -64,6 +65,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; + EventPublisher = eventPublisher; OverideFuncs.CreateAsync = ScanCodeInStock; } @@ -83,7 +85,7 @@ namespace Tnb.WarehouseMgr if (input.data.ContainsKey("tablefield115")) { jArr = JArray.Parse(input.data["tablefield115"].ToString()!); - + } //入库取终点 //出库起点 var inStockStrategyInput = new InStockStrategyQuery { warehouse_id = input.data[nameof(InStockStrategyQuery.warehouse_id)].ToString()!, Size = 1 }; @@ -142,7 +144,7 @@ namespace Tnb.WarehouseMgr create_time = DateTime.Now, source_id = input.data[nameof(WmsKittingInstock.source_id)].ToString(), source_code = input.data[nameof(WmsKittingInstock.source_code)].ToString() - }; + }; return preTask; }).ToList(); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInbaleService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInbaleService.cs index 5f2de722..cf387778 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInbaleService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInbaleService.cs @@ -9,6 +9,7 @@ using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; @@ -50,8 +51,8 @@ namespace Tnb.WarehouseMgr IWareHouseService wareHouseService, IUserManager userManager, IBillRullService billRullService, - ITaskMessageNotify taskMessageNotify - ) : base(taskMessageNotify.Writer) + IEventPublisher eventPublisher + ) { _db = repository.AsSugarClient(); _runService = runService; @@ -59,6 +60,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; + EventPublisher = eventPublisher; OverideFuncs.CreateAsync = Inbale; } @@ -152,7 +154,7 @@ namespace Tnb.WarehouseMgr handleH.create_time = DateTime.Now; preTaskUpInput.PreTaskRecord = handleH; //根据载具移入Id,回更单据状态 - await _db.Updateable().SetColumns(it => new WmsInbale { status = WmsWareHouseConst.BILLSTATUS_ON_ID}).Where(it => it.id == preTaskUpInput.RquireId).ExecuteCommandAsync(); + await _db.Updateable().SetColumns(it => new WmsInbale { status = WmsWareHouseConst.BILLSTATUS_ON_ID }).Where(it => it.id == preTaskUpInput.RquireId).ExecuteCommandAsync(); var baleNum = input.data[nameof(WmsCarryH.bale_num)]?.ToString(); await _wareHouseService.GenInStockTaskHandleAfter(preTaskUpInput, diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAKittingInStkService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAKittingInStkService.cs index 4119a5d1..c86d5f92 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAKittingInStkService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAKittingInStkService.cs @@ -8,6 +8,7 @@ using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; @@ -39,8 +40,8 @@ namespace Tnb.WarehouseMgr IWareHouseService wareHouseService, IUserManager userManager, IBillRullService billRullService, - ITaskMessageNotify taskMessageNotify - ) : base(repository, runService, visualDevService, wareHouseService, userManager, billRullService, taskMessageNotify) + IEventPublisher publisher + ) : base(repository, runService, visualDevService, wareHouseService, userManager, billRullService, publisher) { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAOutBaleServiceService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAOutBaleServiceService.cs index bfeb7d81..e7ea4455 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAOutBaleServiceService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAOutBaleServiceService.cs @@ -9,6 +9,7 @@ using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; @@ -48,8 +49,8 @@ namespace Tnb.WarehouseMgr IWareHouseService wareHouseService, IUserManager userManager, IBillRullService billRullService, - ITaskMessageNotify taskMessageNotify - ) : base(taskMessageNotify.Writer) + IEventPublisher eventPublisher + ) { _db = repository.AsSugarClient(); _runService = runService; @@ -57,6 +58,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; + EventPublisher= eventPublisher; OverideFuncs.CreateAsync = PDAOutBale; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAScanInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAScanInStockService.cs index 2a32939c..58cf230a 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAScanInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAScanInStockService.cs @@ -8,6 +8,7 @@ using JNPF.Common.Core.Manager; using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Extension; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; @@ -46,8 +47,8 @@ namespace Tnb.WarehouseMgr IBillRullService billRullService, IWareHouseService wareHouseService, IPrdInstockService prdInstockService, - ITaskMessageNotify taskMessageNotify - ) : base(taskMessageNotify.Writer) + IEventPublisher eventPublisher + ) { _db = repository.AsSugarClient(); _dictionaryDataService = dictionaryDataService; @@ -55,6 +56,7 @@ namespace Tnb.WarehouseMgr _billRullService = billRullService; _wareHouseService = wareHouseService; _prdInstockService = prdInstockService; + EventPublisher = eventPublisher; OverideFuncs.CreateAsync = ScanInStock; } public async Task ScanInStock(VisualDevModelDataCrInput input) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDATransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDATransferService.cs index 1411a4c5..aedb9b8e 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDATransferService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDATransferService.cs @@ -9,6 +9,7 @@ using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; @@ -51,8 +52,8 @@ namespace Tnb.WarehouseMgr IWareHouseService wareHouseService, IUserManager userManager, IBillRullService billRullService, - ITaskMessageNotify taskMessageNotify - ) : base(taskMessageNotify.Writer) + IEventPublisher publisher + ) { _db = repository.AsSugarClient(); _runService = runService; @@ -60,6 +61,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; + EventPublisher = publisher; OverideFuncs.CreateAsync = CarryTransfer; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsRobotCallbackService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsRobotCallbackService.cs index 67f09f44..78aa47ba 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsRobotCallbackService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsRobotCallbackService.cs @@ -9,6 +9,7 @@ using JNPF.Common.Core.Manager; using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Extension; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; using Mapster; @@ -45,8 +46,8 @@ namespace Tnb.WarehouseMgr IWareHouseService warehouseService, IBillRullService billRullService, IWmsKittingInStkService wmsKittingInStkService, - ITaskMessageNotify taskMessageNotify - ) : base(taskMessageNotify.Writer) + IEventPublisher publisher + ) { _wmsCarryBindService = wmsCarryBindService; _db = repository.AsSugarClient(); @@ -54,6 +55,7 @@ namespace Tnb.WarehouseMgr _warehouseService = warehouseService; _billRullService = billRullService; _wmsKittingInStkService = wmsKittingInStkService; + EventPublisher = publisher; } /// /// 机器人完成任务后回调接口 diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs index 964e62b0..7efd0ad9 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs @@ -13,6 +13,7 @@ using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.Common.Manager; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; @@ -59,8 +60,8 @@ namespace Tnb.WarehouseMgr ICacheManager cacheManager, IRunService runService, IVisualDevService visualDevService, - ITaskMessageNotify taskMessageNotify - ) : base(taskMessageNotify.Writer) + IEventPublisher publisher + ) { _db = repository.AsSugarClient(); _wareHouseService = wareHouseService; @@ -69,6 +70,7 @@ namespace Tnb.WarehouseMgr _cacheManager = cacheManager; _runService = runService; _visualDevService = visualDevService; + EventPublisher = publisher; //OverideFuncs.CreateAsync = Create; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferService.cs index cc1fb206..d1325fe0 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferService.cs @@ -10,6 +10,7 @@ using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Enums; using JNPF.Common.Extension; using JNPF.Common.Security; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; @@ -52,7 +53,7 @@ namespace Tnb.WarehouseMgr IWareHouseService wareHouseService, IUserManager userManager, IBillRullService billRullService, - ITaskMessageNotify taskMessageNotify):base(taskMessageNotify.Writer) + IEventPublisher publisher) { _db = repository.AsSugarClient(); _runService = runService; @@ -60,7 +61,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; - + EventPublisher = publisher; OverideFuncs.CreateAsync = CarryTransfer; } @@ -76,7 +77,7 @@ namespace Tnb.WarehouseMgr // 计算路径,插入预任务申请 WmsPointH? sPoint = null; WmsPointH? ePoint = null; - + if (input.data.ContainsKey(nameof(WmsTransfer.endlocation_id))) { ePoint = await _db.Queryable().FirstAsync(it => it.location_id == input.data[nameof(WmsTransfer.endlocation_id)].ToString()); @@ -97,7 +98,7 @@ namespace Tnb.WarehouseMgr { var sPoint = it.FirstOrDefault(); var ePoint = it.LastOrDefault(); - + WmsPretaskH preTask = new(); preTask.org_id = _userManager.User.OrganizeId; preTask.startlocation_id = sPoint?.location_id!; @@ -145,6 +146,7 @@ namespace Tnb.WarehouseMgr await _db.Updateable().SetColumns(it => new BasLocation { is_lock = 1 }).Where(it => ids.Contains(it.id)).ExecuteCommandAsync(); await _db.Updateable().SetColumns(it => new WmsTransfer { status = WmsWareHouseConst.BILLSTATUS_ON_ID }).Where(it => it.id == input.data["ReturnIdentity"].ToString()).ExecuteCommandAsync(); + } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs index c5ce1a7a..4fa58910 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs @@ -19,6 +19,7 @@ using JNPF.Common.Extension; using JNPF.Common.Manager; using JNPF.Common.Security; using JNPF.DataEncryption; +using JNPF.EventBus; using JNPF.FriendlyException; using JNPF.LinqBuilder; using JNPF.Logging; @@ -62,8 +63,8 @@ namespace Tnb.WarehouseMgr IBillRullService billRullService, IWmsCarryService carryService, ICacheManager cacheManager, - ITaskMessageNotify taskMessageNotify - ) : base(taskMessageNotify.Writer) + IEventPublisher eventPublisher + ) { _db = repository.AsSugarClient(); _warehouseService = warehouseService; @@ -71,7 +72,7 @@ namespace Tnb.WarehouseMgr _billRullService = billRullService; _carryService = carryService; _cacheManager = cacheManager; - + EventPublisher = eventPublisher; } /// /// 齐套出库(新增状态) @@ -169,7 +170,7 @@ namespace Tnb.WarehouseMgr { Log.Error("齐套出库,新增时出现错误", ex); await curDb.Ado.RollbackTranAsync(); - if(_userManager?.ToKen.IsNullOrEmpty() ?? false) + if (_userManager?.ToKen.IsNullOrEmpty() ?? false) { TimedTaskErrorInfo ei = new() { @@ -279,7 +280,7 @@ namespace Tnb.WarehouseMgr { Log.Error("齐套出库,待配送时出现错误", ex); await curDb.Ado.RollbackTranAsync(); - if(_userManager?.ToKen.IsNullOrEmpty() ?? false) + if (_userManager?.ToKen.IsNullOrEmpty() ?? false) { TimedTaskErrorInfo ei = new() { diff --git a/apihost/Tnb.API.Entry/Startup.cs b/apihost/Tnb.API.Entry/Startup.cs index b0db8282..db7c99c9 100644 --- a/apihost/Tnb.API.Entry/Startup.cs +++ b/apihost/Tnb.API.Entry/Startup.cs @@ -63,11 +63,11 @@ public class Startup : AppStartup services.AddOverideVisualDev(); //注册任务消息通知 added by ly on 20230814 - services.AddTaskMessageNotify(); + //services.AddTaskMessageNotify(); SnowflakeIdHelper.InitYitIdWorker(); //定时任务 - services.AddHostedService(); + //services.AddHostedService(); } diff --git a/common/Tnb.Common.Core/EventBus/Constants/EventSubscribeEventConsts.cs b/common/Tnb.Common.Core/EventBus/Constants/EventSubscribeEventConsts.cs new file mode 100644 index 00000000..7e2dc1a8 --- /dev/null +++ b/common/Tnb.Common.Core/EventBus/Constants/EventSubscribeEventConsts.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tnb.Common.Core.EventBus.Constants +{ + public class EventSubscribeEventConsts + { + /// + /// 预任务执行EventId + /// + public const string TaskStatusChangeEventId = "DisTask:TaskStatusChange"; + + } +} diff --git a/common/Tnb.Common.Core/EventBus/Sources/TaskStatusChangeSource.cs b/common/Tnb.Common.Core/EventBus/Sources/TaskStatusChangeSource.cs new file mode 100644 index 00000000..fde34ead --- /dev/null +++ b/common/Tnb.Common.Core/EventBus/Sources/TaskStatusChangeSource.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using JNPF.EventBus; +using SqlSugar; + +namespace Tnb.Common.Core.EventBus.Sources +{ + public class TaskStatusChangeSource : IEventSource + { + /// + /// 构造函数. + /// + /// 事件ID. + /// 数据库连接配置. + /// 实体. + public TaskStatusChangeSource(string eventId, object payload) + { + EventId = eventId; + Payload = payload; + } + + ///// + ///// 数据库连接配置. + ///// + //public ConnectionConfigOptions ConnectionConfig { get; set; } + + /// + /// 事件 Id. + /// + public string EventId { get; } + + /// + /// 事件承载(携带)数据. + /// + public object Payload { get; } + + /// + /// 取消任务 Token. + /// + /// 用于取消本次消息处理. + public CancellationToken CancellationToken { get; } + + /// + /// 事件创建时间. + /// + public DateTime CreatedTime { get; } = DateTime.UtcNow; + } +} diff --git a/common/Tnb.Common/Extension/Extensions.cs b/common/Tnb.Common/Extension/Extensions.cs index df2b983a..97c9ff45 100644 --- a/common/Tnb.Common/Extension/Extensions.cs +++ b/common/Tnb.Common/Extension/Extensions.cs @@ -1,6 +1,7 @@ using System.Collections; using System.Globalization; using System.Text.RegularExpressions; +using Newtonsoft.Json; namespace JNPF.Common.Extension; @@ -701,6 +702,13 @@ public static partial class Extensions { return thisValue == null; } + //added by ly on 20231030 + public static T ConvertToType(this object value) where T : class + { + var jsonData = JsonConvert.SerializeObject(value); + return JsonConvert.DeserializeObject(jsonData); + } + #endregion From 02e4dbb45ac38646a0cd364dd48d4b06e1ffa899 Mon Sep 17 00:00:00 2001 From: "yang.lee" Date: Tue, 31 Oct 2023 17:49:28 +0800 Subject: [PATCH 20/29] =?UTF-8?q?=E6=94=BE=E8=B4=A7=E7=A1=AE=E8=AE=A4?= =?UTF-8?q?=EF=BC=8C=E7=94=B5=E6=A2=AF=E5=85=B3=E9=97=A8=E9=80=BB=E8=BE=91?= =?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 --- .../Tnb.WarehouseMgr/BaseWareHouseService.cs | 4 ++-- .../BaseWareHouseService`1.cs | 4 ++-- .../Tnb.WarehouseMgr/DeviceProviderService.cs | 22 ++++++++----------- .../TaskStatusChangeSubscriber.cs | 2 +- .../Constants/EventSubscribeEventConsts.cs | 2 +- 5 files changed, 15 insertions(+), 19 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs index b36c6f0a..6b943716 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs @@ -56,7 +56,7 @@ namespace Tnb.WarehouseMgr private static Lazy> _stroageMapLazy; private static Dictionary _storeMap = new(StringComparer.OrdinalIgnoreCase); public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); - + private IEventPublisher _eventPublisher; protected IEventPublisher EventPublisher @@ -170,7 +170,7 @@ namespace Tnb.WarehouseMgr [NonAction] protected async Task Publish(string taskName) { - await _eventPublisher.PublishAsync(new TaskStatusChangeSource(EventSubscribeEventConsts.TaskStatusChangeEventId, taskName)); + await _eventPublisher.PublishAsync(new TaskStatusChangeSource(EventSubscribeEventConsts.TASKSTATUSCHANGE_EVENTID, taskName)); } [NonAction] diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService`1.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService`1.cs index 13ef3e0e..cf34cf50 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService`1.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService`1.cs @@ -11,7 +11,7 @@ using Tnb.WarehouseMgr.Entities; namespace Tnb.WarehouseMgr { - public class BaseWareHouseService : BaseWareHouseService + public class BaseWareHouseService : BaseWareHouseService { protected static Dictionary _elevatorMap = new Dictionary(); @@ -21,7 +21,7 @@ namespace Tnb.WarehouseMgr { Task.Run(async () => { - _elevatorMap = await db.Queryable().ToDictionaryAsync(x =>x.elevator_id,x=>x.elevator_code); + _elevatorMap = await db.Queryable().ToDictionaryAsync(x => x.elevator_id, x => x.elevator_code); }); } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs index 53b0c000..3cf585b2 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs @@ -166,12 +166,13 @@ namespace Tnb.WarehouseMgr throw new Exception($"根据参数,sourceName:{input.sourceName},taskCode:{input.taskCode},未找到匹配的电梯任务"); if (_elevatorMap.TryGetValue(elevator.elevator_id, out var elevatorCode)) { - (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(_eleCtlCfg.DevName, CancellationToken.None);//elevator.elevator_code + var devName = elevatorCode?.ToString() ?? _eleCtlCfg.DevName; + (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(devName, CancellationToken.None);//elevator.elevator_code Logger.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum().ToString()},运行状态:{runStatus},门状态:{doorStatus},Agv状态:{agvStatus},当前楼层:{floorNo}"); //判断Agv电梯是否进入状态 if (agvStatus != (int)EnumAgvStatus.AGV运行状态) { - await _elevatorControlService.WriteTagAsync(_eleCtlCfg.DevName, ElevatorConsts.AGVControl, 1); + await _elevatorControlService.WriteTagAsync(devName, ElevatorConsts.AGVControl, 1); } Logger.Information("目前正常"); @@ -179,7 +180,7 @@ namespace Tnb.WarehouseMgr //电梯到达目标楼层后,判断当前电梯门状态是否为开门到位保持状态 if (doorStatus != (int)EnumDoorStatus.开门到位保持) { - await _elevatorControlService.SendOpenCloseCmd(_eleCtlCfg.DevName, 3); //发送电梯前门开门指令 + await _elevatorControlService.SendOpenCloseCmd(devName, 3); //发送电梯前门开门指令 } if (sysStatus == (int)EnumSysStatus.正常状态 && runStatus == (int)EnumRunStatus.停梯 && doorStatus == (int)EnumDoorStatus.开门到位保持) @@ -201,7 +202,7 @@ namespace Tnb.WarehouseMgr } } - + return await ToApiResult(HttpStatusCode.InternalServerError, "电梯还未开门,请重试!"); @@ -298,16 +299,11 @@ namespace Tnb.WarehouseMgr if (elevatorQueueItem != null) { Logger.Information("开始进入关门流程"); - - var disTask = disTasks.Find(x => x.id == elevatorQueueItem.distask_id); - //if (disTask?.status == WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID) + var doorStatus = await _elevatorControlService.GetTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.DoorStatus); + if (doorStatus.ToEnum() != EnumDoorStatus.关门到位保持) { - var doorStatus = await _elevatorControlService.GetTagAsync(_eleCtlCfg.DevName, ElevatorConsts.DoorStatus); - if (doorStatus.ToEnum() != EnumDoorStatus.关门到位保持) - { - await _elevatorControlService.SendOpenCloseCmd(elevatorQueueItem.elevator_code, 4); //向电梯发送前门关门指令 - await _db.Deleteable(elevatorQueueItem).ExecuteCommandAsync(); - } + await _elevatorControlService.SendOpenCloseCmd(elevatorQueueItem.elevator_code, 4); //向电梯发送前门关门指令 + await _db.Deleteable(elevatorQueueItem).ExecuteCommandAsync(); } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/EventSubscribers/TaskStatusChangeSubscriber.cs b/WarehouseMgr/Tnb.WarehouseMgr/EventSubscribers/TaskStatusChangeSubscriber.cs index c74e3044..bffd6179 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/EventSubscribers/TaskStatusChangeSubscriber.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/EventSubscribers/TaskStatusChangeSubscriber.cs @@ -32,7 +32,7 @@ public class TaskStatusChangeSubscriber : IEventSubscriber, ISingleton /// /// /// - [EventSubscribe(EventSubscribeEventConsts.TaskStatusChangeEventId)] + [EventSubscribe(EventSubscribeEventConsts.TASKSTATUSCHANGE_EVENTID)] public async Task Excute(EventHandlerExecutingContext context) { var tscSource = (TaskStatusChangeSource)context.Source; diff --git a/common/Tnb.Common.Core/EventBus/Constants/EventSubscribeEventConsts.cs b/common/Tnb.Common.Core/EventBus/Constants/EventSubscribeEventConsts.cs index 7e2dc1a8..6203f9ef 100644 --- a/common/Tnb.Common.Core/EventBus/Constants/EventSubscribeEventConsts.cs +++ b/common/Tnb.Common.Core/EventBus/Constants/EventSubscribeEventConsts.cs @@ -11,7 +11,7 @@ namespace Tnb.Common.Core.EventBus.Constants /// /// 预任务执行EventId /// - public const string TaskStatusChangeEventId = "DisTask:TaskStatusChange"; + public const string TASKSTATUSCHANGE_EVENTID = "DisTask:TaskStatusChange"; } } From 615957e66d9e271326c412fda894dcf3c9933c99 Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Tue, 31 Oct 2023 18:20:17 +0800 Subject: [PATCH 21/29] =?UTF-8?q?=E7=82=B9=E5=B7=A1=E6=A3=80=20=E4=BF=9D?= =?UTF-8?q?=E5=85=BB=E6=B2=A1=E5=AD=90=E9=A1=B9=E7=9B=AE=E4=B8=8D=E7=94=9F?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Listener/GenerateMaintainPlanTimeWorker.cs | 5 +++++ .../Listener/GenerateSpotInspectionPlanTimeWorker.cs | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/taskschedule/Tnb.TaskScheduler/Listener/GenerateMaintainPlanTimeWorker.cs b/taskschedule/Tnb.TaskScheduler/Listener/GenerateMaintainPlanTimeWorker.cs index 4cd3f922..4abed741 100644 --- a/taskschedule/Tnb.TaskScheduler/Listener/GenerateMaintainPlanTimeWorker.cs +++ b/taskschedule/Tnb.TaskScheduler/Listener/GenerateMaintainPlanTimeWorker.cs @@ -119,6 +119,11 @@ namespace JNPF.TaskScheduler.Listener }); } + if (spotInsRecordDs.Count<=0) + { + return; + } + var dbResult = db.Ado.UseTran(() => { if (tobeCreateList != null && tobeCreateList.Count > 0) diff --git a/taskschedule/Tnb.TaskScheduler/Listener/GenerateSpotInspectionPlanTimeWorker.cs b/taskschedule/Tnb.TaskScheduler/Listener/GenerateSpotInspectionPlanTimeWorker.cs index 044515eb..48498fb4 100644 --- a/taskschedule/Tnb.TaskScheduler/Listener/GenerateSpotInspectionPlanTimeWorker.cs +++ b/taskschedule/Tnb.TaskScheduler/Listener/GenerateSpotInspectionPlanTimeWorker.cs @@ -148,6 +148,11 @@ namespace JNPF.TaskScheduler.Listener remark = tobeCreateItem.remark }); } + + if (spotInsRecordDs.Count<=0) + { + return; + } var dbResult = db.Ado.UseTran(() => { From 8c31205e70a15b662c79562bd76c537101910d81 Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Wed, 1 Nov 2023 00:01:24 +0800 Subject: [PATCH 22/29] bug --- .../Tnb.EquipMgr/EquSpotInsRecordService.cs | 3 +- .../GenerateMaintainPlanTimeWorker.cs | 64 +++++++++---------- .../GenerateSpotInspectionPlanTimeWorker.cs | 63 +++++++++--------- 3 files changed, 65 insertions(+), 65 deletions(-) diff --git a/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs b/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs index ae8bc2a6..ec2b381f 100644 --- a/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs +++ b/EquipMgr/Tnb.EquipMgr/EquSpotInsRecordService.cs @@ -59,7 +59,7 @@ namespace Tnb.EquipMgr string status = queryJson.ContainsKey("status") ? (queryJson["status"].ToString() ?? "") : ""; DateTime? start_time = queryJson.ContainsKey("start_time") ? queryJson["start_time"].ToString()=="" ? null : Convert.ToDateTime(queryJson["start_time"]) : null; DateTime? end_time = queryJson.ContainsKey("end_time") ? queryJson["end_time"].ToString()=="" ? null : Convert.ToDateTime(queryJson["end_time"]) : null; - + string now = DateTime.Now.ToString("yyyy-MM-dd"); if (string.IsNullOrEmpty(input.sidx)) { input.sidx = "a.create_time"; @@ -80,6 +80,7 @@ namespace Tnb.EquipMgr .WhereIF(!string.IsNullOrEmpty(equioInfo),(a,b,c)=>b.code.Contains(equioInfo)|| b.name.Contains(equioInfo)) .WhereIF(status=="3" && start_time!=null,a=>a.spot_record_date_time>=start_time) .WhereIF(status=="3" && end_time!=null,a=>a.spot_record_date_time<=end_time) + .Where(a=>a.create_time.Value.ToString("yyyy-MM-dd")==now) .OrderBy($"{input.sidx} {input.sort}") .Select((a, b, c,d) => new EqpSpotInsRecordListOutput { diff --git a/taskschedule/Tnb.TaskScheduler/Listener/GenerateMaintainPlanTimeWorker.cs b/taskschedule/Tnb.TaskScheduler/Listener/GenerateMaintainPlanTimeWorker.cs index 4abed741..a58f132d 100644 --- a/taskschedule/Tnb.TaskScheduler/Listener/GenerateMaintainPlanTimeWorker.cs +++ b/taskschedule/Tnb.TaskScheduler/Listener/GenerateMaintainPlanTimeWorker.cs @@ -18,17 +18,18 @@ namespace JNPF.TaskScheduler.Listener // } [SpareTime("0 0 0 * * ?", "生成设备保养计划", ExecuteType = SpareTimeExecuteTypes.Serial,StartNow = false)] - public void GenerateSpotInspectionPlan(SpareTimer timer, long count) + public async void GenerateSpotInspectionPlan(SpareTimer timer, long count) { Log.Information("----------------------开始生成设备保养计划----------------------"); try { - List eqpSpotInsTemEquipHsByOne = _repository.GetList(x => x.is_start=="1" && x.plan_cycle_unit == "1"); - List eqpSpotInsTemEquipHsByCirculate = _repository.GetList(x => x.is_start=="1" && x.plan_cycle_unit == "2"); + var db = _repository.CopyNew(); + List eqpSpotInsTemEquipHsByOne = await db.Queryable().Where(x => x.is_start=="1" && x.plan_cycle_unit == "1").ToListAsync(); + List eqpSpotInsTemEquipHsByCirculate = await db.Queryable().Where(x => x.is_start=="1" && x.plan_cycle_unit == "2").ToListAsync(); List tobeCreateList = new List(); List tobeCreateTemplets = new List(); - var db = _repository.AsSugarClient(); + foreach (var item in eqpSpotInsTemEquipHsByOne) { @@ -56,7 +57,7 @@ namespace JNPF.TaskScheduler.Listener if (tobeCreateTemplets != null && tobeCreateTemplets.Count > 0) { - List equipments = db.Queryable().Where(x => x.life==Tnb.EquipMgr.EquipmentLife.ENABLE).ToList(); + List equipments = await db.Queryable().Where(x => x.life==Tnb.EquipMgr.EquipmentLife.ENABLE).ToListAsync(); int index = 1; foreach (var item in tobeCreateTemplets) { @@ -67,7 +68,6 @@ namespace JNPF.TaskScheduler.Listener string code = $"{DateTime.Now.ToString("yyyyMMdd")+(index++).ToString().PadLeft(3,'0')}"; tobeCreateList.Add(new EqpMaintainRecordH() { - id = SnowflakeIdHelper.NextId(), code = code, // equip_type_id = item.equip_type_id, equip_id = item.equip_id, @@ -90,14 +90,14 @@ namespace JNPF.TaskScheduler.Listener if (tobeCreateList != null && tobeCreateList.Count > 0) { List templetIDs = tobeCreateList.Select(x => x.maintain_tem_equip_id).ToList(); - List spotInsTemEquipDs = db.Queryable().Where(x => templetIDs.Contains(x.maintain_tem_equip_id)).ToList(); + List spotInsTemEquipDs = await db.Queryable().Where(x => templetIDs.Contains(x.maintain_tem_equip_id)).ToListAsync(); List spotInsItemIDs = spotInsTemEquipDs.Select(x => x.maintain_item_id).ToList(); - List spotCheckItems = db.Queryable().Where(x => spotInsItemIDs.Contains(x.id)).ToList(); + List spotCheckItems = await db.Queryable().Where(x => spotInsItemIDs.Contains(x.id)).ToListAsync(); + List spotInsRecordDs = new List(); foreach (var tobeCreatePlan in tobeCreateList) { - List spotInsRecordDs = new List(); List spotInsItems = spotInsTemEquipDs .Where(x => x.maintain_tem_equip_id == tobeCreatePlan.maintain_tem_equip_id) .Select(x => x.maintain_item_id).ToList(); @@ -119,30 +119,30 @@ namespace JNPF.TaskScheduler.Listener }); } - if (spotInsRecordDs.Count<=0) - { - return; - } - - var dbResult = db.Ado.UseTran(() => - { - if (tobeCreateList != null && tobeCreateList.Count > 0) - { - db.Insertable(tobeCreateList).ExecuteCommand(); - } - - if (spotInsRecordDs != null && spotInsRecordDs.Count > 0) - { - db.Insertable(spotInsRecordDs).ExecuteCommand(); - } - }); - if (!dbResult.IsSuccess) - { - Console.WriteLine(dbResult.ErrorMessage); - Log.Error(dbResult.ErrorMessage); - } - Log.Information($"---------------生成{tobeCreateList.Count}个计划---------------"); } + if (spotInsRecordDs.Count<=0) + { + return; + } + + var dbResult = db.Ado.UseTran(() => + { + if (tobeCreateList != null && tobeCreateList.Count > 0) + { + db.Insertable(tobeCreateList).ExecuteCommand(); + } + + if (spotInsRecordDs != null && spotInsRecordDs.Count > 0) + { + db.Insertable(spotInsRecordDs).ExecuteCommand(); + } + }); + if (!dbResult.IsSuccess) + { + Console.WriteLine(dbResult.ErrorMessage); + Log.Error(dbResult.ErrorMessage); + } + Log.Information($"---------------生成{tobeCreateList.Count}个计划---------------"); } } catch (Exception e) diff --git a/taskschedule/Tnb.TaskScheduler/Listener/GenerateSpotInspectionPlanTimeWorker.cs b/taskschedule/Tnb.TaskScheduler/Listener/GenerateSpotInspectionPlanTimeWorker.cs index 48498fb4..6fd44130 100644 --- a/taskschedule/Tnb.TaskScheduler/Listener/GenerateSpotInspectionPlanTimeWorker.cs +++ b/taskschedule/Tnb.TaskScheduler/Listener/GenerateSpotInspectionPlanTimeWorker.cs @@ -18,17 +18,17 @@ namespace JNPF.TaskScheduler.Listener // } [SpareTime("0 0,30 * * * ?", "生成点巡检计划", ExecuteType = SpareTimeExecuteTypes.Serial,StartNow = false)] - public void GenerateSpotInspectionPlan(SpareTimer timer, long count) + public async void GenerateSpotInspectionPlan(SpareTimer timer, long count) { Log.Information("----------------------开始生成点巡检计划----------------------"); try { - List eqpSpotInsTemEquipHsByOne = _repository.GetList(x => x.is_start=="1" && x.plan_cycle_unit == "1"); - List eqpSpotInsTemEquipHsByCirculate = _repository.GetList(x => x.is_start=="1" && x.plan_cycle_unit == "2"); + var db = _repository.CopyNew(); + List eqpSpotInsTemEquipHsByOne = await db.Queryable().Where(x => x.is_start=="1" && x.plan_cycle_unit == "1").ToListAsync(); + List eqpSpotInsTemEquipHsByCirculate = await db.Queryable().Where(x => x.is_start=="1" && x.plan_cycle_unit == "2").ToListAsync(); List tobeCreateList = new List(); List tobeCreateTemplets = new List(); - var db = _repository.AsSugarClient(); foreach (var item in eqpSpotInsTemEquipHsByOne) { @@ -80,7 +80,7 @@ namespace JNPF.TaskScheduler.Listener if (tobeCreateTemplets != null && tobeCreateTemplets.Count > 0) { - List equipments = db.Queryable().Where(x => x.life==Tnb.EquipMgr.EquipmentLife.ENABLE).ToList(); + List equipments = await db.Queryable().Where(x => x.life==Tnb.EquipMgr.EquipmentLife.ENABLE).ToListAsync(); int index = 1; foreach (var item in tobeCreateTemplets) { @@ -114,14 +114,14 @@ namespace JNPF.TaskScheduler.Listener if (tobeCreateList != null && tobeCreateList.Count > 0) { List templetIDs = tobeCreateList.Select(x => x.spot_ins_tem_equip_id).ToList(); - List spotInsTemEquipDs = db.Queryable().Where(x => templetIDs.Contains(x.spot_ins_tem_equip_id)).ToList(); + List spotInsTemEquipDs = await db.Queryable().Where(x => templetIDs.Contains(x.spot_ins_tem_equip_id)).ToListAsync(); List spotInsItemIDs = spotInsTemEquipDs.Select(x => x.spot_ins_item_id).ToList(); - List spotCheckItems = db.Queryable().Where(x => spotInsItemIDs.Contains(x.id)).ToList(); + List spotCheckItems = await db.Queryable().Where(x => spotInsItemIDs.Contains(x.id)).ToListAsync(); + List spotInsRecordDs = new List(); foreach (var tobeCreatePlan in tobeCreateList) { - List spotInsRecordDs = new List(); List spotInsItems = spotInsTemEquipDs .Where(x => x.spot_ins_tem_equip_id == tobeCreatePlan.spot_ins_tem_equip_id) .Select(x => x.spot_ins_item_id).ToList(); @@ -130,7 +130,6 @@ namespace JNPF.TaskScheduler.Listener { spotInsRecordDs.Add(new EqpSpotInsRecordD() { - id = SnowflakeIdHelper.NextId(), spot_ins_record_id = tobeCreatePlan.id, spot_ins_tem_equip_id = tobeCreatePlan.spot_ins_tem_equip_id, spot_ins_item_id = tobeCreateItem.id, @@ -149,30 +148,30 @@ namespace JNPF.TaskScheduler.Listener }); } - if (spotInsRecordDs.Count<=0) - { - return; - } - - var dbResult = db.Ado.UseTran(() => - { - if (tobeCreateList != null && tobeCreateList.Count > 0) - { - db.Insertable(tobeCreateList).ExecuteCommand(); - } - - if (spotInsRecordDs != null && spotInsRecordDs.Count > 0) - { - db.Insertable(spotInsRecordDs).ExecuteCommand(); - } - }); - if (!dbResult.IsSuccess) - { - Console.WriteLine(dbResult.ErrorMessage); - Log.Error(dbResult.ErrorMessage); - } - Log.Information($"---------------生成{tobeCreateList.Count}个计划---------------"); } + if (spotInsRecordDs.Count<=0) + { + return; + } + + var dbResult = await db.Ado.UseTranAsync(async () => + { + if (tobeCreateList != null && tobeCreateList.Count > 0) + { + await db.Insertable(tobeCreateList).ExecuteCommandAsync(); + } + + if (spotInsRecordDs != null && spotInsRecordDs.Count > 0) + { + await db.Insertable(spotInsRecordDs).ExecuteCommandAsync(); + } + }); + if (!dbResult.IsSuccess) + { + Console.WriteLine(dbResult.ErrorMessage); + Log.Error(dbResult.ErrorMessage); + } + Log.Information($"---------------生成{tobeCreateList.Count}个计划---------------"); } } catch (Exception e) From b1984e55488e9c4262daf99cfc5cbe46e3a5765d Mon Sep 17 00:00:00 2001 From: qianjiawei <1184704771@qq.com> Date: Thu, 2 Nov 2023 10:14:06 +0800 Subject: [PATCH 23/29] =?UTF-8?q?=E6=A8=A1=E5=85=B7=E4=BF=9D=E5=85=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dto/PadMainListOutput.cs | 27 +++++++++ .../Dto/PdaMaintainInput.cs | 20 +++++++ .../ToolMoldMaintainRunService.cs | 58 +++++++++++++++++-- 3 files changed, 101 insertions(+), 4 deletions(-) create mode 100644 EquipMgr/Tnb.EquipMgr.Entities/Dto/PadMainListOutput.cs create mode 100644 EquipMgr/Tnb.EquipMgr.Entities/Dto/PdaMaintainInput.cs diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Dto/PadMainListOutput.cs b/EquipMgr/Tnb.EquipMgr.Entities/Dto/PadMainListOutput.cs new file mode 100644 index 00000000..054a8d4f --- /dev/null +++ b/EquipMgr/Tnb.EquipMgr.Entities/Dto/PadMainListOutput.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Numerics; +using System.Text; +using System.Threading.Tasks; + +namespace Tnb.EquipMgr.Entities.Dto +{ + public class PadMainListOutput + { + public string plan_id { get; set; } + public string mold_id { get; set; } + + public string mold_code { get; set; } + + public string mold_name { get; set; } + + public string mold_status { get; set; } + public string status { get; set; } + public string createuser { get; set; } + public string createtime { get; set; } + public string plan_start_time { get; set; } + public string starttime { get; set; } + + } +} diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Dto/PdaMaintainInput.cs b/EquipMgr/Tnb.EquipMgr.Entities/Dto/PdaMaintainInput.cs new file mode 100644 index 00000000..dfeffb72 --- /dev/null +++ b/EquipMgr/Tnb.EquipMgr.Entities/Dto/PdaMaintainInput.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using JNPF.Common.Filter; + +namespace Tnb.EquipMgr.Entities.Dto +{ + public class PdaMaintainInput : PageInputBase + { + public string status { get; set; } + + public string maintain_info { get; set; } + + public DateTime? start_time { get; set; } + public DateTime? end_time { get; set; } + + } +} diff --git a/EquipMgr/Tnb.EquipMgr/ToolMoldMaintainRunService.cs b/EquipMgr/Tnb.EquipMgr/ToolMoldMaintainRunService.cs index 6fb1fa6c..0bb50b4c 100644 --- a/EquipMgr/Tnb.EquipMgr/ToolMoldMaintainRunService.cs +++ b/EquipMgr/Tnb.EquipMgr/ToolMoldMaintainRunService.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Dynamic; using System.Linq; +using System.Numerics; using System.Reactive.Joins; using System.Text; using System.Threading.Tasks; @@ -12,6 +13,7 @@ using DingTalk.Api.Request; using JNPF.Common.Core.Manager; using JNPF.Common.Enums; using JNPF.Common.Extension; +using JNPF.Common.Filter; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.FriendlyException; @@ -62,12 +64,14 @@ namespace Tnb.EquipMgr List result = new(); var planMoldRelations = await _db.Queryable() .LeftJoin((a, b) => a.maintain_plan_id == b.id)//ToolMoldMaintainPlan - .LeftJoin((a, b, c) => b.plan_code == c.plan_code) + .LeftJoin((a, b, c) => a.mold_id == c.id) + .LeftJoin((a, b, c,d) => d.plan_code == b.plan_code&&d.mold_code==c.mold_code) .Where(a => a.maintain_plan_id == planId) - .Select((a, b, c) => new + .Select((a, b, c,d) => new { mold_id = a.mold_id, - plan_start_time = c.plan_start_time, + plan_start_time = d.plan_start_time, + designer=d.designer }) .ToListAsync(); var moldids = planMoldRelations.Select(x => x.mold_id).ToList(); @@ -75,7 +79,7 @@ namespace Tnb.EquipMgr foreach (var planMoldRelation in planMoldRelations) { - var mold= molds.Where(p=>p.id== planMoldRelation.mold_id).FirstOrDefault(); + var mold = molds.Where(p => p.id == planMoldRelation.mold_id).FirstOrDefault(); if (mold != null) { dynamic info = new ExpandoObject(); @@ -84,6 +88,7 @@ namespace Tnb.EquipMgr info.mold_name = mold.mold_name; info.mold_status = (await _dictionaryDataService.GetInfo(mold.mold_status!))?.FullName; info.maintain_qty = mold.maintain_qty; + info.designer = planMoldRelation.designer == null ? "" : planMoldRelation.designer; info.plan_start_time = planMoldRelation.plan_start_time == null ? "" : ((DateTime)planMoldRelation.plan_start_time).ToString("yyyy-MM-dd"); var moldEqpRelation = await _db.Queryable().FirstAsync(it => it.mold_id == mold.id); if (moldEqpRelation != null) @@ -183,6 +188,51 @@ namespace Tnb.EquipMgr return result; } + [HttpPost] + public async Task GetPdaMaintainInfo(PdaMaintainInput input) + { + DateTime? start_time = input.start_time; + DateTime? end_time = input.end_time; + if (string.IsNullOrEmpty(input.sidx)) + { + input.sidx = "b.create_time"; + input.sort = "desc"; + } + else + { + input.sidx = "b." + input.sidx; + } + var records = await _db.Queryable().Select(p => p.plan_id + p.mold_id).ToListAsync(); + var result= await _db.Queryable() + .LeftJoin((a, b) => a.maintain_plan_id == b.id) + .LeftJoin((a, b, c) => a.mold_id == c.id) + .LeftJoin((a, b, c, d) => b.plan_code == d.plan_code && c.mold_code == d.mold_code) + .LeftJoin((a, b, c, d, e) => e.plan_id == b.id && e.mold_id == c.id) + .LeftJoin((a, b, c, d, e, f) => b.create_id == f.Id) + .LeftJoin((a, b, c, d, e, f,g) => c.mold_status == g.Id) + .Where((a, b, c, d, e, f) => b.create_time != null) + .WhereIF(!string.IsNullOrEmpty(input.maintain_info), (a, b, c, d, e, f, g) => c.mold_code!.Contains(input.maintain_info) || c.mold_name!.Contains(input.maintain_info)) + .WhereIF(start_time != null, (a, b, c, d, e, f, g) => b.create_time != null && b.create_time >= start_time) + .WhereIF(end_time != null, (a, b, c, d, e, f, g) => b.create_time != null && b.create_time <= end_time) + .WhereIF(input.status == "待保养", (a, b, c, d, e, f, g) => !records.Contains(a.maintain_plan_id + a.mold_id)) + .WhereIF(input.status == "已完成", (a, b, c, d, e, f, g) => records.Contains(a.maintain_plan_id + a.mold_id)) + .Select((a, b, c, d, e, f, g) => new PadMainListOutput + { + plan_id = b.id, + mold_id = c.id, + mold_code = c.mold_code!, + mold_name = c.mold_name!, + mold_status=g.FullName!, + status = input.status, + createuser = f.RealName, + createtime = b.create_time == null ? "" : b.create_time.Value.ToString(DbTimeFormat.SS), + plan_start_time = b.plan_start_date == null ? "" : b.plan_start_date.Value.ToString(DbTimeFormat.SS), + starttime = d.plan_start_time == null ? "" : d.plan_start_time.Value.ToString(DbTimeFormat.SS), + }).OrderBy($"{input.sidx} {input.sort}").ToPagedListAsync((input?.currentPage ?? 1), (input?.pageSize ?? 50)); + return PageResult.SqlSugarPageResult(result); + } + + /// /// 根据计划Id、模具ID获取,保养组及项目信息 /// From 95ecfd18149a9875b1f30e18a2ec83004b22a01f Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Thu, 2 Nov 2023 11:45:44 +0800 Subject: [PATCH 24/29] 1 --- .../Entity/EqpEquipment.cs | 5 +++++ .../Dto/PrdManage/PADPackageTaskPageOutput.cs | 18 ++++++++++++++++++ .../Dto/PrdManage/PrdReportCrInput.cs | 5 +++++ .../Entity/PrdReport.cs | 5 +++++ .../Tnb.ProductionMgr/PrdPackReportService.cs | 7 ++++++- 5 files changed, 39 insertions(+), 1 deletion(-) diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpEquipment.cs b/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpEquipment.cs index aeb2e3b9..c94ec696 100644 --- a/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpEquipment.cs +++ b/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpEquipment.cs @@ -207,5 +207,10 @@ public partial class EqpEquipment : BaseEntity /// 二维码 /// public string? qrcode { get; set; } + + /// + /// 挤出件类型 + /// + public string? tube { get; set; } } diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PADPackageTaskPageOutput.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PADPackageTaskPageOutput.cs index 0c618be8..a0365f28 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PADPackageTaskPageOutput.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PADPackageTaskPageOutput.cs @@ -126,5 +126,23 @@ namespace Tnb.ProductionMgr.Entities.Dto.PrdManage /// 实际完工日期 /// public string? act_end_date { get; set; } + /// + /// 挤出件类型 + /// + public string? tube { get; set; } + /// + /// 最小包装 + /// + public decimal? minpacking { get; set; } + + /// + /// 主单位数量 + /// + public string? main_num { get; set; } + + /// + /// 副单位数量(kg) + /// + public string? deputy_num { get; set; } } } \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PrdReportCrInput.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PrdReportCrInput.cs index cfc83410..1009a132 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PrdReportCrInput.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PrdReportCrInput.cs @@ -103,6 +103,11 @@ namespace Tnb.ProductionMgr.Entities.Dto.PrdManage /// 工位 /// public string? station { get; set; } + + /// + /// 料箱二维码 + /// + public string material_box_qrcode { get; set; } } } diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdReport.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdReport.cs index f6a573a3..d1980bec 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdReport.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdReport.cs @@ -124,5 +124,10 @@ public partial class PrdReport : BaseEntity /// 工序id /// public string? process_id { get; set; } + + /// + /// 料箱二维码 + /// + public string material_box_qrcode { get; set; } } diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs index 1bc6d536..d975fe21 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs @@ -400,13 +400,14 @@ namespace Tnb.ProductionMgr .LeftJoin((a,b,c,d,e,f,g,h)=>a.material_id==h.output_material_id && a.eqp_id==h.equip_id && a.mold_id==h.molds_id && h.enabled==1) .LeftJoin((a,b,c,d,e,f,g,h,i)=>a.process_id==i.process_id && i.enabled==1) .LeftJoin((a,b,c,d,e,f,g,h,i,j)=>a.mo_id==j.id) + .LeftJoin((a,b,c,d,e,f,g,h,i,j,k)=>a.material_id==k.material_id && k.auxiliary_unit_id=="kg") .Where((a, b) => a.workstation_id == input.stationId && (a.mo_task_status == DictConst.ToBeStartedEnCode || a.mo_task_status == DictConst.MoStatusPauseCode || a.mo_task_status == DictConst.ComplatedEnCode || a.mo_task_status == DictConst.InProgressEnCode) ) .WhereIF(!string.IsNullOrEmpty(mo_task_code),a=>a.mo_task_code.Contains(mo_task_code)) //.WhereIF(!string.IsNullOrEmpty(mo_task_status),a=>a.mo_task_status==mo_task_status) .WhereIF(statusList.Count>0,a=>statusList.Contains(a.mo_task_status)) .WhereIF(status=="3" && start_time!=null,a=>a.act_end_date>=start_time) .WhereIF(status=="3" && end_time!=null,a=>a.act_end_date<=end_time) - .Select((a, b, c, d, e,f,g,h,i,j) => new PADPackageTaskPageOutput + .Select((a, b, c, d, e,f,g,h,i,j,k) => new PADPackageTaskPageOutput { id = a.id, mo_task_code = a.mo_task_code, @@ -443,6 +444,10 @@ namespace Tnb.ProductionMgr act_start_date = a.act_start_date==null ? "" : a.act_start_date.Value.ToString(DbTimeFormat.SS), act_end_date = a.act_end_date==null ? "" : a.act_end_date.Value.ToString(DbTimeFormat.SS), plan_end_date = a.plan_end_date==null ? "" : a.plan_end_date.Value.ToString(DbTimeFormat.SS), + tube = f.tube, + minpacking = b.minpacking, + main_num = k.number_of_primary_unit, + deputy_num = k.number_of_auxiliary_unit, }) .MergeTable() .OrderBy($"{input.sidx} {input.sort}") From b13574530d03e5f88bf09e5aae765686f42f080a Mon Sep 17 00:00:00 2001 From: "yang.lee" Date: Thu, 2 Nov 2023 15:58:15 +0800 Subject: [PATCH 25/29] =?UTF-8?q?=E5=B0=86=E4=BE=9D=E8=B5=96=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E6=80=BB=E7=BA=BF=E7=9A=84=E5=8F=91=E5=B8=83=E8=AE=A2?= =?UTF-8?q?=E9=98=85=E6=A8=A1=E5=BC=8F=EF=BC=8C=E6=94=B9=E4=B8=BA=E7=9B=B4?= =?UTF-8?q?=E6=8E=A5=E8=B0=83=E7=94=A8=E7=9A=84=E5=BD=A2=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.WarehouseMgr/BaseWareHouseService.cs | 20 +++- .../TaskStatusChangeSubscriber.cs | 33 +++++- .../WareHouseBasedControllerActivator.cs | 36 ++++++ .../TimedTaskBackgroundService.cs | 34 +----- .../WmsCarryMoveInStockService.cs | 4 +- .../WmsCarryMoveOutStockService.cs | 4 +- .../Tnb.WarehouseMgr/WmsCheckTaskService.cs | 4 +- .../Tnb.WarehouseMgr/WmsDeliveryService.cs | 4 +- .../WmsEmptyInstockService.cs | 4 +- .../WmsEmptyOutstockService .cs | 4 +- .../Tnb.WarehouseMgr/WmsInStockService.cs | 4 +- .../WmsKittingInStkService.cs | 9 +- .../Tnb.WarehouseMgr/WmsOutBaleService.cs | 4 +- .../Tnb.WarehouseMgr/WmsOutStockService.cs | 6 +- .../WmsPDACarryMoveInStockService.cs | 6 +- .../WmsPDACarryMoveOutStockService.cs | 4 +- .../Tnb.WarehouseMgr/WmsPDADeliveryService.cs | 4 +- .../WmsPDAEmptyInstockService.cs | 4 +- .../WmsPDAEmptyOutstockService .cs | 4 +- .../Tnb.WarehouseMgr/WmsPDAInStockService.cs | 4 +- .../Tnb.WarehouseMgr/WmsPDAInbaleService.cs | 4 +- .../WmsPDAOutBaleServiceService.cs | 4 +- .../WmsPDAScanInStockService.cs | 2 +- .../Tnb.WarehouseMgr/WmsPDATransferService.cs | 4 +- .../WmsRobotCallbackService.cs | 10 +- .../Tnb.WarehouseMgr/WmsSetSortingService.cs | 13 ++- .../Tnb.WarehouseMgr/WmsTransferService.cs | 4 +- .../Tnb.WarehouseMgr/WmskittingOutService.cs | 10 +- apihost/Tnb.API.Entry/Startup.cs | 12 +- apihost/Tnb.API.Entry/Tnb.API.Entry.csproj | 104 +++++++++--------- common/Tnb.Common/Extension/TaskExtensions.cs | 15 +++ .../Listener/QcTaskTimeWorker.cs | 2 +- 32 files changed, 226 insertions(+), 154 deletions(-) create mode 100644 WarehouseMgr/Tnb.WarehouseMgr/Extensions/WareHouseBasedControllerActivator.cs diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs index 6b943716..e6113182 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs @@ -59,6 +59,7 @@ namespace Tnb.WarehouseMgr private IEventPublisher _eventPublisher; + protected IEventPublisher EventPublisher { set { _eventPublisher = value; } @@ -107,6 +108,23 @@ namespace Tnb.WarehouseMgr return Task.FromResult(curUser); } + + protected Task SetUserEntity(IUserManager userManager, ClaimsPrincipal principal) + => Task.Run(() => + { + FieldInfo fieldInfo = userManager.GetType().GetField("_user", BindingFlags.NonPublic | BindingFlags.Instance); + if (fieldInfo != null) + { + fieldInfo.SetValue(userManager, principal); + } + }); + + protected Task InvokeGenPretaskExcute() + { + var wareHouseSvc =App.GetRequiredService(); + return wareHouseSvc.GenTaskExecute(); + } + /// /// 判断最终目标库位是否可以放置当前载具 /// @@ -368,7 +386,7 @@ namespace Tnb.WarehouseMgr /// /// [NonAction] - protected Task ToApiResult(HttpStatusCode statusCode, object data) + protected Task ToApiResult(HttpStatusCode statusCode, object data) { Result result = new() { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/EventSubscribers/TaskStatusChangeSubscriber.cs b/WarehouseMgr/Tnb.WarehouseMgr/EventSubscribers/TaskStatusChangeSubscriber.cs index bffd6179..dda92314 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/EventSubscribers/TaskStatusChangeSubscriber.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/EventSubscribers/TaskStatusChangeSubscriber.cs @@ -1,7 +1,12 @@ -using JNPF.Common.Configuration; +using System.Reflection; +using System.Security.Claims; +using JNPF.Common.Configuration; +using JNPF.Common.Core.Manager; +using JNPF.DataEncryption; using JNPF.DependencyInjection; using JNPF.EventBus; using JNPF.TaskScheduler.Entitys; +using NetTaste; using SqlSugar; using Tnb.Common.Core.EventBus.Constants; using Tnb.Common.Core.EventBus.Sources; @@ -19,12 +24,14 @@ public class TaskStatusChangeSubscriber : IEventSubscriber, ISingleton /// //private static SqlSugarScope? _sqlSugarClient; private readonly IWareHouseService _wareHouseService; + private readonly IWmskittingOutService _wmskittingOutService; /// /// 构造函数. /// - public TaskStatusChangeSubscriber(IWareHouseService wareHouseService) + public TaskStatusChangeSubscriber(IWareHouseService wareHouseService, IWmskittingOutService wmskittingOutService) { _wareHouseService = wareHouseService; + _wmskittingOutService = wmskittingOutService; } /// @@ -35,13 +42,33 @@ public class TaskStatusChangeSubscriber : IEventSubscriber, ISingleton [EventSubscribe(EventSubscribeEventConsts.TASKSTATUSCHANGE_EVENTID)] public async Task Excute(EventHandlerExecutingContext context) { + /*var claims = JWTEncryption.ReadJwtToken(UserManager.AsscessToken)?.Claims; + ClaimsIdentity toKen = new ClaimsIdentity(); + foreach (Claim item in claims) + { + toKen.AddClaim(item); + } + var principal = new ClaimsPrincipal(toKen); + FieldInfo fieldInfo = _userManager.GetType().GetField("_user", BindingFlags.NonPublic | BindingFlags.Instance); + if (fieldInfo != null) + { + fieldInfo.SetValue(_userManager, principal); + }*/ + + var tscSource = (TaskStatusChangeSource)context.Source; switch (tscSource.Payload) { case nameof(_wareHouseService.GenTaskExecute): await _wareHouseService.GenTaskExecute(); break; + case nameof(_wmskittingOutService.KittingOutByAdd): + await _wmskittingOutService.KittingOutByAdd(); + break; + case nameof(_wmskittingOutService.KittingOutByIsToBeShipped): + await _wmskittingOutService.KittingOutByIsToBeShipped(); + break; } } -} \ No newline at end of file +} \ No newline at end of file diff --git a/WarehouseMgr/Tnb.WarehouseMgr/Extensions/WareHouseBasedControllerActivator.cs b/WarehouseMgr/Tnb.WarehouseMgr/Extensions/WareHouseBasedControllerActivator.cs new file mode 100644 index 00000000..cc4150ae --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr/Extensions/WareHouseBasedControllerActivator.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Controllers; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Microsoft.Extensions.DependencyInjection; +using Tnb.WarehouseMgr.Interfaces; + +namespace Tnb.WarehouseMgr +{ + public class WareHouseBasedControllerActivator : IControllerActivator + { + public object Create(ControllerContext context) + { + if(context == null) { throw new ArgumentNullException("context"); } + var controllerType = context.ActionDescriptor.ControllerTypeInfo.AsType(); + //获取Controller实例 + var controller =context.HttpContext.RequestServices.GetRequiredService(controllerType); + //判断是否继承了自定义Controller基类 + //if(controller is BaseWareHouseService basedWhSvc) + //{ + // basedWhSvc.WareHouseSrv = context.HttpContext.RequestServices.GetRequiredService(); + //} + return controller; + + } + + public void Release(ControllerContext context, object controller) + { + } + + } +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs index 98cbd5d4..043e0757 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs @@ -47,17 +47,7 @@ namespace Tnb.WarehouseMgr private IEventPublisher _eventPublisher = default!; private ElevatorControlConfiguration _elevatorControlConfiguration = App.Configuration.Build(); private readonly IServiceProvider _serviceProvider; - private static Dictionary> _timedFuncMap = new(StringComparer.OrdinalIgnoreCase); - static TimedTaskBackgroundService() - { - //Task.Run(() => - //{ - // _timedFuncMap = App.EffectiveTypes.AsParallel().Where(t => !t.Namespace.IsNullOrWhiteSpace() && t.Namespace.Equals("Tnb.WarehouseMgr", StringComparison.OrdinalIgnoreCase)).SelectMany(t => t.GetMethods()) - // .Where(m => m.GetCustomAttribute() != null) - // .ToDictionary(x => x.Name, x => - // (Func)Delegate.CreateDelegate(typeof(Func), App.GetService(x.DeclaringType), x)); - //}); - } + //private static Dictionary> _timedFuncMap = new(StringComparer.OrdinalIgnoreCase); public TimedTaskBackgroundService(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; @@ -66,30 +56,11 @@ namespace Tnb.WarehouseMgr protected override Task ExecuteAsync(CancellationToken stoppingToken) { IsStarted = true; - //var queueTask = Task.Run(async () => - // { - - // var channelReader = _serviceProvider.GetRequiredService().Reader; - - // CancellationTokenSource? cts = new(); - - // while (channelReader != null && await channelReader.WaitToReadAsync()) - // { - // while (channelReader.TryRead(out var message)) - // { - // if (_timedFuncMap.ContainsKey(message.TaskName)) - // { - // await _timedFuncMap[message.TaskName].Invoke(stoppingToken); - // } - // } - // } - // }, stoppingToken); var timedTask = Task.Run(() => { _eventPublisher = App.GetRequiredService(); - var whSvc = App.GetRequiredService(); - TimedTask(token => whSvc.GenTaskExecute(), stoppingToken, 1); + //电梯Agv心跳检测 TimedTask(async token => { @@ -130,6 +101,7 @@ namespace Tnb.WarehouseMgr { 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 diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveInStockService.cs index bace2234..646b7fd3 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveInStockService.cs @@ -63,7 +63,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; - EventPublisher = eventPublisher; + OverideFuncs.CreateAsync = CarryMoveIn; } @@ -178,7 +178,7 @@ namespace Tnb.WarehouseMgr finally { //向队列写入消息 - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } return Task.FromResult(true); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveOutStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveOutStockService.cs index 9527fe3f..0f8bcfd3 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveOutStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryMoveOutStockService.cs @@ -56,7 +56,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; - EventPublisher = eventPublisher; + OverideFuncs.CreateAsync = CarryMoveOut; } @@ -164,7 +164,7 @@ namespace Tnb.WarehouseMgr } finally { - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } return Task.FromResult(true); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCheckTaskService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCheckTaskService.cs index 70834328..0e61c30a 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCheckTaskService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCheckTaskService.cs @@ -54,7 +54,7 @@ namespace Tnb.WarehouseMgr _runService = runService; _billRullService = billRullService; _userManager = userManager; - EventPublisher = eventPublisher; + OverideFuncs.CreateAsync = Create; } @@ -224,7 +224,7 @@ namespace Tnb.WarehouseMgr } finally { - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } return Task.FromResult(row); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsDeliveryService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsDeliveryService.cs index f20a36dd..9005c12f 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsDeliveryService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsDeliveryService.cs @@ -67,7 +67,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; - EventPublisher = eventPublisher; + OverideFuncs.CreateAsync = Create; } /// @@ -204,7 +204,7 @@ namespace Tnb.WarehouseMgr } finally { - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } return await Task.FromResult(true); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs index 46abdf54..4e55f138 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyInstockService.cs @@ -64,7 +64,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; - EventPublisher = eventPublisher; + OverideFuncs.CreateAsync = WmsEmptyIn; } private async Task WmsEmptyIn(VisualDevModelDataCrInput input) @@ -189,7 +189,7 @@ namespace Tnb.WarehouseMgr finally { //向队列写入消息 - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } return Task.FromResult(true); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs index dc1a1efa..56b4530b 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs @@ -62,7 +62,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; - EventPublisher = eventPublisher; + OverideFuncs.CreateAsync = WmsEmptyOut; } @@ -220,7 +220,7 @@ namespace Tnb.WarehouseMgr } finally { - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } return Task.FromResult(true); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs index b48358f3..81307269 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs @@ -65,7 +65,7 @@ namespace Tnb.WarehouseMgr _billRullService = billRullService; _wareHouseService = wareHouseService; _prdInstockService = prdInstockService; - EventPublisher = eventPublisher; + } /// /// 根据入库申请单ID获取申请单明细信息 @@ -482,7 +482,7 @@ namespace Tnb.WarehouseMgr } finally { - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } return isSuccessFul; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsKittingInStkService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsKittingInStkService.cs index e82bb9a5..1b6ac354 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsKittingInStkService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsKittingInStkService.cs @@ -59,7 +59,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; - EventPublisher = eventPublisher; + OverideFuncs.CreateAsync = KittingInStk; } @@ -220,7 +220,7 @@ namespace Tnb.WarehouseMgr } finally { - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } return Task.FromResult(true); } @@ -248,11 +248,8 @@ namespace Tnb.WarehouseMgr kittingOut.carry_id = kittingIn.carry_id; kittingOut.carry_code = kittingIn.carry_code; await _db.Updateable(kittingOut).UpdateColumns(it => new { it.status, it.carry_id, it.carry_code }).ExecuteCommandAsync(); - //if (kittingOut.status == WmsWareHouseConst.BILLSTATUS_TOBESHIPPED_ID) - //{ - // await Publish(nameof(IWmskittingOutService.KittingOutByIsToBeShipped)); - //} + await Publish(nameof(IWmskittingOutService.KittingOutByIsToBeShipped)); } } if (row < 1) throw Oops.Oh(ErrorCode.COM1001); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutBaleService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutBaleService.cs index e7dd0c38..e901673c 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutBaleService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutBaleService.cs @@ -59,7 +59,7 @@ namespace Tnb.WarehouseMgr _userManager = userManager; _billRullService = billRullService; _wmsCarryService = wmsCarryService; - EventPublisher = eventPublisher; + OverideFuncs.CreateAsync = CarryOutBale; } @@ -166,7 +166,7 @@ namespace Tnb.WarehouseMgr } finally { - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } return Task.FromResult(true); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs index fd4ae50a..a9fe16b1 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutStockService.cs @@ -79,7 +79,7 @@ namespace Tnb.WarehouseMgr _billRullService = billRullService; _wmsCarryMoveInStockService = wmsCarryMoveInStockService; _wareCarryService = wareCarryService; - EventPublisher = eventPublisher; + OverideFuncs.CreateAsync = OutStockApplyFor; } @@ -374,7 +374,7 @@ namespace Tnb.WarehouseMgr } finally { - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } return Task.FromResult(true); } @@ -767,7 +767,7 @@ namespace Tnb.WarehouseMgr } finally { - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } return isSuccessful; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryMoveInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryMoveInStockService.cs index e9f4ce5c..199b9a7f 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryMoveInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryMoveInStockService.cs @@ -60,7 +60,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; - EventPublisher = eventPublisher; + OverideFuncs.CreateAsync = PDACarryMoveIn; } @@ -163,7 +163,7 @@ namespace Tnb.WarehouseMgr //} //finally //{ - // await Publish(nameof(IWareHouseService.GenTaskExecute)); + // await InvokeGenPretaskExcute(); //} //return Task.FromResult(true); #endregion @@ -276,7 +276,7 @@ namespace Tnb.WarehouseMgr finally { //向队列写入消息 - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } return Task.FromResult(true); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryMoveOutStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryMoveOutStockService.cs index af06151c..111d5263 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryMoveOutStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDACarryMoveOutStockService.cs @@ -57,7 +57,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; - EventPublisher = eventPublisher; + OverideFuncs.CreateAsync = PDACarryMoveOut; } @@ -161,7 +161,7 @@ namespace Tnb.WarehouseMgr } finally { - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } return Task.FromResult(true); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDADeliveryService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDADeliveryService.cs index 1bcc6ecb..412c9266 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDADeliveryService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDADeliveryService.cs @@ -62,7 +62,7 @@ namespace Tnb.WarehouseMgr _billRullService = billRullService; _wareHouseService = wareHouseService; _userManager = userManager; - EventPublisher = eventPublisher; + OverideFuncs.CreateAsync = Create; } /// @@ -193,7 +193,7 @@ namespace Tnb.WarehouseMgr } finally { - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } return await Task.FromResult(true); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyInstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyInstockService.cs index 3ca9a1b7..9926e68e 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyInstockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyInstockService.cs @@ -57,7 +57,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; - EventPublisher = eventPublisher; + OverideFuncs.CreateAsync = PDAWmsEmptyIn; } @@ -170,7 +170,7 @@ namespace Tnb.WarehouseMgr } finally { - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } return Task.FromResult(true); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyOutstockService .cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyOutstockService .cs index 986a9a2b..aedad1a5 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyOutstockService .cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyOutstockService .cs @@ -59,7 +59,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; - EventPublisher = eventPublisher; + OverideFuncs.CreateAsync = PDAWmsEmptyOut; } @@ -212,7 +212,7 @@ namespace Tnb.WarehouseMgr } finally { - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } return Task.FromResult(true); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs index a5ade6b2..f502e6c5 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInStockService.cs @@ -65,7 +65,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; - EventPublisher = eventPublisher; + OverideFuncs.CreateAsync = ScanCodeInStock; } @@ -282,7 +282,7 @@ namespace Tnb.WarehouseMgr } finally { - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } return Task.FromResult(true); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInbaleService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInbaleService.cs index cf387778..939e05d9 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInbaleService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAInbaleService.cs @@ -60,7 +60,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; - EventPublisher = eventPublisher; + OverideFuncs.CreateAsync = Inbale; } @@ -174,7 +174,7 @@ namespace Tnb.WarehouseMgr } finally { - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } return Task.FromResult(true); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAOutBaleServiceService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAOutBaleServiceService.cs index e7ea4455..afa30529 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAOutBaleServiceService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAOutBaleServiceService.cs @@ -58,7 +58,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; - EventPublisher= eventPublisher; + OverideFuncs.CreateAsync = PDAOutBale; } @@ -162,7 +162,7 @@ namespace Tnb.WarehouseMgr } finally { - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } return Task.FromResult(true); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAScanInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAScanInStockService.cs index 58cf230a..7be5ce4b 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAScanInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAScanInStockService.cs @@ -56,7 +56,7 @@ namespace Tnb.WarehouseMgr _billRullService = billRullService; _wareHouseService = wareHouseService; _prdInstockService = prdInstockService; - EventPublisher = eventPublisher; + OverideFuncs.CreateAsync = ScanInStock; } public async Task ScanInStock(VisualDevModelDataCrInput input) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDATransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDATransferService.cs index aedb9b8e..4b145362 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDATransferService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDATransferService.cs @@ -61,7 +61,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; - EventPublisher = publisher; + OverideFuncs.CreateAsync = CarryTransfer; } @@ -157,7 +157,7 @@ namespace Tnb.WarehouseMgr } finally { - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } return Task.FromResult(true); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsRobotCallbackService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsRobotCallbackService.cs index 78aa47ba..ef7ce566 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsRobotCallbackService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsRobotCallbackService.cs @@ -55,7 +55,7 @@ namespace Tnb.WarehouseMgr _warehouseService = warehouseService; _billRullService = billRullService; _wmsKittingInStkService = wmsKittingInStkService; - EventPublisher = publisher; + } /// /// 机器人完成任务后回调接口 @@ -92,6 +92,11 @@ namespace Tnb.WarehouseMgr var kittingout = await _db.Queryable().FirstAsync(it => it.collocation_scheme_id == carry.collocation_scheme_id && it.status == WmsWareHouseConst.BILLSTATUS_CALLED_ID); if (kittingout != null) { + + await Publish(nameof(IWmskittingOutService.KittingOutByAdd)); + await Publish(nameof(IWmskittingOutService.KittingOutByIsToBeShipped)); + + visualDevModelCrInput.data = new Dictionary(); visualDevModelCrInput.data[nameof(InStockStrategyQuery.warehouse_id)] = kittingout.warehouse_id; visualDevModelCrInput.data[nameof(WmsKittingInstock.carry_id)] = input.carry_id; @@ -147,7 +152,8 @@ namespace Tnb.WarehouseMgr genPreTaskAfterUpInput.CarryIds = preTasks.Select(x => x.carry_id).ToList(); genPreTaskAfterUpInput.LocationIds = new List { carry.location_id! }; await _warehouseService.GenInStockTaskHandleAfter(genPreTaskAfterUpInput, it => new WmsCarryH { is_lock = 1 }, it => new BasLocation { is_lock = 1 }); - await Publish(nameof(IWareHouseService.GenTaskExecute)); + + await InvokeGenPretaskExcute(); } } else diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs index 7efd0ad9..4429c4d5 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs @@ -70,7 +70,7 @@ namespace Tnb.WarehouseMgr _cacheManager = cacheManager; _runService = runService; _visualDevService = visualDevService; - EventPublisher = publisher; + //OverideFuncs.CreateAsync = Create; } @@ -99,10 +99,11 @@ namespace Tnb.WarehouseMgr [HttpPost, Timed(Name = nameof(PackSortingByAdd))] public async Task PackSortingByAdd(CancellationToken? ct = default) { - //if (UserManager.AsscessToken.IsNullOrWhiteSpace()) return; - //var curUser = await GetUserIdentity(); - - //Console.WriteLine($"ThreadID:{Thread.CurrentThread.ManagedThreadId}\t Thread pool: {Thread.CurrentThread.IsThreadPoolThread}"); + if (_userManager.User.IsNull()) + { + var curUser = await GetUserIdentity(); + await SetUserEntity(_userManager, curUser); + } var curDb = _db.CopyNew(); @@ -284,7 +285,7 @@ namespace Tnb.WarehouseMgr } finally { - //await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute(); } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferService.cs index d1325fe0..41d978f1 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferService.cs @@ -61,7 +61,7 @@ namespace Tnb.WarehouseMgr _wareHouseService = wareHouseService; _userManager = userManager; _billRullService = billRullService; - EventPublisher = publisher; + OverideFuncs.CreateAsync = CarryTransfer; } @@ -161,7 +161,7 @@ namespace Tnb.WarehouseMgr } finally { - await Publish(nameof(IWareHouseService.GenTaskExecute)); + await InvokeGenPretaskExcute();; } return Task.FromResult(true); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs index 4fa58910..b7b26e4b 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs @@ -72,13 +72,13 @@ namespace Tnb.WarehouseMgr _billRullService = billRullService; _carryService = carryService; _cacheManager = cacheManager; - EventPublisher = eventPublisher; + } /// /// 齐套出库(新增状态) /// /// - [HttpPost, Timed(Name = nameof(KittingOutByAdd))] + [HttpPost] public async Task KittingOutByAdd(CancellationToken? ct = default) { //if (ct?.IsCancellationRequested ?? false) @@ -121,7 +121,7 @@ namespace Tnb.WarehouseMgr ko.carry_id = firstCarry?.id; ko.carry_code = firstCarry?.carry_code; await _db.Updateable(ko).UpdateColumns(it => new { it.status, it.carry_id, it.carry_code }).ExecuteCommandAsync(); - //await KittingOutByIsToBeShipped(); + _ = KittingOutByIsToBeShipped(); if (firstCarry != null) { firstCarry.source_id = ko.source_id; @@ -188,7 +188,7 @@ namespace Tnb.WarehouseMgr /// 齐套出库,(待配送状态) /// /// - [HttpPost, Timed(Name = nameof(KittingOutByIsToBeShipped))] + [HttpPost] public async Task KittingOutByIsToBeShipped(CancellationToken? ct = default) { //if (UserManager.AsscessToken.IsNullOrWhiteSpace()) return; @@ -296,7 +296,7 @@ namespace Tnb.WarehouseMgr } finally { - //await Publish(nameof(IWareHouseService.GenTaskExecute)); + //await InvokeGenPretaskExcute(); } } diff --git a/apihost/Tnb.API.Entry/Startup.cs b/apihost/Tnb.API.Entry/Startup.cs index db7c99c9..07ba27d3 100644 --- a/apihost/Tnb.API.Entry/Startup.cs +++ b/apihost/Tnb.API.Entry/Startup.cs @@ -1,4 +1,5 @@ -using IGeekFan.AspNetCore.Knife4jUI; +using System.Reflection; +using IGeekFan.AspNetCore.Knife4jUI; using JNPF.API.Entry.Handlers; using JNPF.Common.Cache; using JNPF.Common.Core; @@ -62,15 +63,14 @@ public class Startup : AppStartup .AddSenparcWeixinServices(App.Configuration); // Senparc.Weixin 注册(如果使用Senparc.Weixin SDK则添加) services.AddOverideVisualDev(); - //注册任务消息通知 added by ly on 20230814 - //services.AddTaskMessageNotify(); - SnowflakeIdHelper.InitYitIdWorker(); //定时任务 - //services.AddHostedService(); + services.AddHostedService(); } + + public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider, IOptions senparcSetting, IOptions senparcWeixinSetting) { // 添加状态码拦截中间件 @@ -115,7 +115,7 @@ public class Startup : AppStartup endpoints.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); - //SnowflakeIdHelper.InitYitIdWorker(); + SnowflakeIdHelper.InitYitIdWorker(); bool isStartTimeJob = App.GetConfig("IsStartTimeJob"); if (isStartTimeJob) diff --git a/apihost/Tnb.API.Entry/Tnb.API.Entry.csproj b/apihost/Tnb.API.Entry/Tnb.API.Entry.csproj index d32c2319..e2a9a094 100644 --- a/apihost/Tnb.API.Entry/Tnb.API.Entry.csproj +++ b/apihost/Tnb.API.Entry/Tnb.API.Entry.csproj @@ -1,29 +1,29 @@  - + - - net6.0 - enable - enable - none - + + net6.0 + enable + enable + none + - - - - - - + + + + + + - - - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - PreserveNewest - - + + + PreserveNewest + + - - - PreserveNewest - - + + + PreserveNewest + + \ No newline at end of file diff --git a/common/Tnb.Common/Extension/TaskExtensions.cs b/common/Tnb.Common/Extension/TaskExtensions.cs index 910ad30e..96f5a278 100644 --- a/common/Tnb.Common/Extension/TaskExtensions.cs +++ b/common/Tnb.Common/Extension/TaskExtensions.cs @@ -25,6 +25,21 @@ namespace Tnb.Common.Extension return tcs.Task; } + public static async Task Retry(Func> task, int retries, + TimeSpan delay, CancellationToken cts = default) => + await task().ContinueWith(async innerTask => + { + cts.ThrowIfCancellationRequested(); + if (innerTask.Status != TaskStatus.Faulted) + return innerTask.Result; + if (retries == 0) + throw innerTask.Exception ?? throw new Exception(); + await Task.Delay(delay, cts); + return await Retry(task, retries - 1, delay, cts); + }).Unwrap(); + + + public static async Task Catch(this Task task, Func exceptionHandler) { try diff --git a/taskschedule/Tnb.TaskScheduler/Listener/QcTaskTimeWorker.cs b/taskschedule/Tnb.TaskScheduler/Listener/QcTaskTimeWorker.cs index 2a997c42..be66dff6 100644 --- a/taskschedule/Tnb.TaskScheduler/Listener/QcTaskTimeWorker.cs +++ b/taskschedule/Tnb.TaskScheduler/Listener/QcTaskTimeWorker.cs @@ -24,7 +24,7 @@ namespace Tnb.TaskScheduler.Listener /// /// 生成质检任务 /// - public class QcTaskTimeWorker : ISpareTimeWorker + public class QcTaskTimeWorker //u: ISpareTimeWorker { private ISqlSugarRepository repository => App.GetService>(); private ITimeTaskService timeTaskService => App.GetService(); From 46772647e7ea3253183e095e90953a818339143b Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Thu, 2 Nov 2023 17:33:58 +0800 Subject: [PATCH 26/29] =?UTF-8?q?=E6=B3=A8=E5=A1=91=E6=BB=A1=E7=AE=B1?= =?UTF-8?q?=E5=85=A5=E5=BA=93=E7=94=B3=E8=AF=B7=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Consts/DictConst.cs | 5 + .../Entity/EqpEquipment.cs | 5 + .../Dto/PrdManage/InstockInput.cs | 8 ++ .../Entity/PrdReport.cs | 4 +- .../IPrdInstockService.cs | 7 + .../Tnb.ProductionMgr/PrdInstockService.cs | 128 ++++++++++++++++++ 6 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/InstockInput.cs diff --git a/BasicData/Tnb.BasicData.Entities/Consts/DictConst.cs b/BasicData/Tnb.BasicData.Entities/Consts/DictConst.cs index 3d130676..da84b4d4 100644 --- a/BasicData/Tnb.BasicData.Entities/Consts/DictConst.cs +++ b/BasicData/Tnb.BasicData.Entities/Consts/DictConst.cs @@ -163,6 +163,11 @@ public static class DictConst /// andon状态已完成 /// public const string AndonStatusYWC = "5"; + + /// + /// 产成品入库单 + /// + public const string CHANCHENGPINRUKUDAN = "40"; #endregion diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpEquipment.cs b/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpEquipment.cs index c94ec696..aa667ea2 100644 --- a/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpEquipment.cs +++ b/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpEquipment.cs @@ -212,5 +212,10 @@ public partial class EqpEquipment : BaseEntity /// 挤出件类型 /// public string? tube { get; set; } + + /// + /// 入库库位id + /// + public string? as_location_id { get; set; } } diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/InstockInput.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/InstockInput.cs new file mode 100644 index 00000000..c7413345 --- /dev/null +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/InstockInput.cs @@ -0,0 +1,8 @@ +namespace Tnb.ProductionMgr.Entities.Dto +{ + public class InstockInput + { + public string equip_code { get; set; } + public string as_location_code { get; set; } + } +} \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdReport.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdReport.cs index d1980bec..e24a66f2 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdReport.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdReport.cs @@ -126,8 +126,8 @@ public partial class PrdReport : BaseEntity public string? process_id { get; set; } /// - /// 料箱二维码 + /// 料箱编号 /// - public string material_box_qrcode { get; set; } + public string material_box_code { get; set; } } diff --git a/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdInstockService.cs b/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdInstockService.cs index 5e6b5e87..5cca73d3 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdInstockService.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdInstockService.cs @@ -21,5 +21,12 @@ namespace Tnb.ProductionMgr.Interfaces /// source_id /// public Task SyncInstock(Dictionary dic); + + /// + /// 注塑满箱到位后入库申请 + /// + /// + /// + public Task InstockTypeOne(InstockInput inut); } } \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdInstockService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdInstockService.cs index 2e5d2d2f..a854e8d2 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdInstockService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdInstockService.cs @@ -29,6 +29,7 @@ using JNPF.Common.Filter; using JNPF.Common.Security; using JNPF.Systems.Entitys.Permission; using JNPF.Systems.Interfaces.Permission; +using Microsoft.AspNetCore.Authorization; using SQLitePCL; using SqlSugar.Extensions; @@ -261,5 +262,132 @@ namespace Tnb.ProductionMgr return result.IsSuccess; } + + /// + /// 注塑满箱到位后入库申请 + /// + /// + /// + /// + [AllowAnonymous] + public async Task InstockTypeOne(InstockInput inut) + { + string equip_code = inut.equip_code; + string as_location_code = inut.as_location_code; + if (!string.IsNullOrEmpty(equip_code)) throw Oops.Bah("请传机台号"); + var db = _repository.AsSugarClient(); + EqpEquipment equipment = await db.Queryable().Where(x => x.code == equip_code).FirstAsync(); + if(equipment==null ) throw Oops.Bah("未找到机台"); + if(string.IsNullOrEmpty(equipment.as_location_id)) throw Oops.Bah("未找到入库库位"); + BasLocation basLocation = await db.Queryable().SingleAsync(x=>x.id==equipment.as_location_id); + if(basLocation==null) throw Oops.Bah("未找到入库库位"); + PrdReport prdReport = await db.Queryable() + .Where(x => x.equip_id == equipment.id && x.status == 0).OrderByDescending(x => x.create_time) + .FirstAsync(); + if(prdReport==null) throw Oops.Bah("未找到提报记录"); + + PrdInstockH prdInstockH = null; + List prdInstockDs = new List() { }; + DbResult result2 = new DbResult(); + BasMaterial basMaterial = await db.Queryable().SingleAsync(x=>x.id==prdReport.material_id); + DbResult result = await db.Ado.UseTranAsync(async () => + { + OrganizeEntity workline = await _organizeService.GetAnyParentByWorkstationId(prdReport.station, DictConst.RegionCategoryWorklineCode); + OrganizeEntity workshop = await _organizeService.GetAnyParentByWorkstationId(prdReport.station, DictConst.RegionCategoryWorkshopCode); + + prdInstockH = new PrdInstockH() + { + bill_type = DictConst.CHANCHENGPINRUKUDAN, + bill_date = DateTime.Now, + create_id = _userManager.UserId, + location_code = basLocation.location_code, + carry_code = prdReport.material_box_code, + is_check = 1, + station_id = prdReport.station, + workline_id = workline?.Id ?? "", + workshop_id = workshop?.Id ?? "", + org_id = _userManager.GetUserInfo().Result.organizeId, + warehouse_id = basLocation?.wh_id, + status = 0, + }; + + prdInstockDs.Add(new PrdInstockD() + { + instock_id = prdInstockH.id, + report_id = prdReport.create_id, + material_id = prdReport.material_id, + material_code = basMaterial.code, + unit_id = prdReport.unit_id, + barcode = prdReport.barcode, + code_batch = prdReport.barcode+"0001", + quantity = (int)prdReport.reported_qty, + }); + }); + + if (result.IsSuccess) + { + MESCreateInstockInput mesCreateInstockInput = new MESCreateInstockInput(); + mesCreateInstockInput.instock = new MESWmsInstockHInput() + { + org_id = _userManager.GetUserInfo().Result.organizeId, + bill_date = DateTime.Now, + bill_type = DictConst.CHANCHENGPINRUKUDAN, + warehouse_id = basLocation?.wh_id, + source_id = prdInstockH.id, + create_id = _userManager.UserId, + carry_code = prdReport.material_box_code, + location_code = basLocation.location_code, + is_check = 1, + }; + mesCreateInstockInput.instockds = new List(); + mesCreateInstockInput.instockcodes = new List(); + mesCreateInstockInput.instockds.Add(new MESWmsInstockDInput() + { + material_id = prdReport.material_id, + material_code = basMaterial.code, + unit_id = prdReport.unit_id, + code_batch = prdReport.barcode, + pr_qty = (int)prdReport.reported_qty, + }); + + mesCreateInstockInput.instockcodes.Add(new MESWmsInstockCodeInput() + { + material_id = prdReport.material_id, + material_code = basMaterial.code, + unit_id = prdReport.unit_id, + barcode = prdReport.barcode, + code_batch = prdReport.barcode+"0001", + codeqty = (int)prdReport.reported_qty, + }); + string domain = (App.HttpContext.Request.IsHttps ? "https://" : "http://") + App.HttpContext.Request.Host; + Dictionary header = new Dictionary() + { + ["Authorization"] = App.HttpContext.Request.Headers["Authorization"] + }; + var sendResult = HttpUtils.RequestPost(domain + WebApiConst.MES_CREATE_INSTOCK,JsonConvert.SerializeObject(mesCreateInstockInput),header); + Log.Information(sendResult); + AuthResponse authResponse = JsonConvert.DeserializeObject(sendResult); + if (authResponse.code != 200 || !authResponse.data.ObjToBool()) + { + throw Oops.Bah(authResponse.msg); + } + else + { + result2 = await db.Ado.UseTranAsync(async () => + { + await _repository.InsertAsync(prdInstockH); + + if (prdInstockDs.Count > 0) + { + await db.Insertable(prdInstockDs).ExecuteCommandAsync(); + } + }); + + } + } + + if(!result2.IsSuccess) throw Oops.Oh(ErrorCode.COM1008); + return result2.IsSuccess ? "申请成功" : result2.ErrorMessage; + } } } \ No newline at end of file From 5dbbe606820ec2935d1448f11f4b47cf85bcf28b Mon Sep 17 00:00:00 2001 From: "fei.pan" Date: Thu, 2 Nov 2023 17:42:12 +0800 Subject: [PATCH 27/29] =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=A2=9E=E5=8A=A0=E6=8C=89=E5=AD=90=E8=A1=A8?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apihost/Tnb.API.Entry/Configurations/App.json | 5 +- .../Extension/TnbStringExtensions.cs | 14 +++ .../Tnb.Vengine/DataAccess/DataAccess.cs | 109 +++++++++++------- visualdev/Tnb.Vengine/Domain/OutputParser.cs | 97 ++++++++++++++++ visualdev/Tnb.Vengine/Domain/VengineDto.cs | 1 + visualdev/Tnb.Vengine/Domain/VmDbProp.cs | 2 +- visualdev/Tnb.Vengine/Domain/Vmodel.cs | 26 ++++- 7 files changed, 205 insertions(+), 49 deletions(-) create mode 100644 visualdev/Tnb.Vengine/Domain/OutputParser.cs diff --git a/apihost/Tnb.API.Entry/Configurations/App.json b/apihost/Tnb.API.Entry/Configurations/App.json index 2610456e..136f83e5 100644 --- a/apihost/Tnb.API.Entry/Configurations/App.json +++ b/apihost/Tnb.API.Entry/Configurations/App.json @@ -71,7 +71,8 @@ "txt", "rar", "zip", - "csv" + "csv", + "json" ], //过滤上传文件名称特殊字符 "SpecialString": [ @@ -188,5 +189,5 @@ "DoMainApp": "http://localhost:8081", // 前端App外网能访问的地址(域名), 回调的时候拼接接口地址用 "AppPushUrl": "https://8e84eea8-6922-4033-8e86-67ad7442e692.bspapp.com/unipush" }, - "IsStartTimeJob": true //是否开启定时任务 + "IsStartTimeJob": false //是否开启定时任务 } \ No newline at end of file diff --git a/common/Tnb.Common/Extension/TnbStringExtensions.cs b/common/Tnb.Common/Extension/TnbStringExtensions.cs index e8436ddb..8be6669e 100644 --- a/common/Tnb.Common/Extension/TnbStringExtensions.cs +++ b/common/Tnb.Common/Extension/TnbStringExtensions.cs @@ -1,5 +1,6 @@ using System.Text.RegularExpressions; using JNPF.Common.Extension; +using Microsoft.CodeAnalysis.CSharp.Syntax; namespace System; @@ -183,4 +184,17 @@ public static class StringExtensions public static string ToCamel(this string str) => str.SplitWord().Select((a, i) => i == 0 ? a : a.UpperFirst()).JoinAsString(""); #endregion + + public static (string, string) LastSplit(this string str, char seperate) + { + int n = str.LastIndexOf(seperate); + if(n > 0) + { + return (str.Substring(0, n), str.Substring(n + 1)); + } + else + { + return (str, null); + } + } } \ No newline at end of file diff --git a/visualdev/Tnb.Vengine/DataAccess/DataAccess.cs b/visualdev/Tnb.Vengine/DataAccess/DataAccess.cs index 79b070ca..22299cdb 100644 --- a/visualdev/Tnb.Vengine/DataAccess/DataAccess.cs +++ b/visualdev/Tnb.Vengine/DataAccess/DataAccess.cs @@ -1,6 +1,8 @@ using System.Collections.Concurrent; +using System.Security.Cryptography.Xml; using JNPF; using JNPF.Common.Core.Manager; +using JNPF.Common.Extension; using JNPF.DependencyInjection; using Microsoft.Extensions.Configuration; using SqlSugar; @@ -15,7 +17,7 @@ namespace Tnb.Vengine.DataAccess; public class DataAccess : IDataAccess, ITransient, IDisposable { private const int MAX_PAGE_SIZE = 1000; - private ISqlSugarClient? _db; + private static ISqlSugarClient? _db; protected ISqlSugarClient Db { @@ -170,14 +172,18 @@ public class DataAccess : IDataAccess, ITransient, IDisposable private async Task LoadVmodelNavigateAsync(Vmodel vm) { Dictionary dictVm = new(); + var vmids = vm.navProps.Select(a => a.vmid).Distinct().ToList(); + var ls = await Db.Queryable().Where(a => vmids.Contains(a.id)).ToListAsync(); + var navs = ls.ToDictionary(a => a.id); foreach (var navProp in vm.navProps) { - if (!dictVm.ContainsKey(navProp.vmid)) - { - var navModel = await GetVmodelAsync(navProp.vmid); - dictVm.Add(navProp.vmid, navModel); - } - navProp.naviModel = dictVm[navProp.vmid]; + navProp.naviModel = (Vmodel)navs.GetOrDefault(navProp.vmid); + //if (!dictVm.ContainsKey(navProp.vmid)) + //{ + // var navModel = await GetVmodelAsync(navProp.vmid); + // dictVm.Add(navProp.vmid, navModel); + //} + //navProp.naviModel = dictVm[navProp.vmid]; } } @@ -191,10 +197,8 @@ public class DataAccess : IDataAccess, ITransient, IDisposable var selProps = vm.GetVmSelectProps(input.o); //处理导航属性联表 List joins = vm.GetJoinInfos(selProps); - query.AddJoinInfo(joins); //if (joins.Count > 0) - //{ - //} + query.AddJoinInfo(joins); List wheres = vm.GetConditionalModels(input.q); if (!string.IsNullOrEmpty(input.k)) { @@ -208,10 +212,8 @@ public class DataAccess : IDataAccess, ITransient, IDisposable wheres.Add(new ConditionalCollections() { ConditionalList = lsCondition }); } //处理查询参数 - query.Where(wheres); //if (wheres.Count > 0) - //{ - //} + query.Where(wheres); if (!string.IsNullOrEmpty(input.sort)) { query.OrderBy(input.sort); @@ -229,7 +231,7 @@ public class DataAccess : IDataAccess, ITransient, IDisposable //组装输出对象 foreach (var data in ls) { - DObject ret = await NestedOutputAsync(vm, new DObject(data), selProps); + DObject ret = await CombineOutputAsync(vm, new DObject(data), selProps); result.items.Add(ret); } @@ -243,11 +245,12 @@ public class DataAccess : IDataAccess, ITransient, IDisposable /// /// /// - private async Task NestedOutputAsync(Vmodel vm, DObject src, List selProps) + private async Task CombineOutputAsync(Vmodel vm, DObject src, List selProps) { DObject ret = new(); foreach (var prop in selProps) { + // 加载主表字段 if (prop.navType == eNavigateType.None || prop.navCode == VmSelectProp.MAIN_ALIES) { if (src.ContainsKey(prop.code)) @@ -257,40 +260,14 @@ public class DataAccess : IDataAccess, ITransient, IDisposable } else { + // 加载关联表字段 if (prop.navType == eNavigateType.OneToOne) { - //以 nav_prop的形式返回 - var key = prop.navCode + "_" + prop.code; - ret.Add(key, src[key]); - //以 nav.prop的形式返回 - //if (!ret.ContainsKey(prop.navCode)) - //{ - // ret.Add(prop.navCode, new DObject()); - //} - //var key = prop.navCode + "_" + prop.code; - //if (src.ContainsKey(key)) - //{ - // ((DObject)ret[prop.navCode]).Add(prop.code, src[key]); - //} + NestedOutput(vm, src, ret, prop); } else if (prop.navType == eNavigateType.OneToMany) { - if (!ret.ContainsKey(prop.navCode)) - { - ret.Add(prop.navCode, new List()); - } - var navProp = vm.navProps.First(a => a.code == prop.navCode); - if (navProp != null && navProp.naviModel != null && src.ContainsKey(navProp.refField)) - { - VmListInput input = new VmListInput(); - var fkProp = navProp.naviModel.FieldCodeToPropCode(navProp.fkField); - if (!string.IsNullOrEmpty(fkProp)) - { - input.q = new DObject(fkProp, src[navProp.refField]); - input.o = string.Join(',', selProps.Where(a => a.navCode == prop.navCode).Select(a => a.code)); - ret[prop.navCode] = (await QueryDataAsync(navProp.naviModel, input)).items; - } - } + await NestedOneToManyAsync(vm, src, ret, prop, selProps); } else if (prop.navType == eNavigateType.ManyToMany) { @@ -304,6 +281,50 @@ public class DataAccess : IDataAccess, ITransient, IDisposable return ret; } + /// + /// 将一对一的关联表字段嵌入到返回值中 + /// + private void NestedOutput(Vmodel vm, DObject src, DObject ret, VmSelectProp prop) + { + // 以 nav_prop的形式返回 + var key = prop.navCode + "_" + prop.code; + ret.Add(key, src[key]); + // 以 nav.prop的形式返回 + //if (!ret.ContainsKey(prop.navCode)) + //{ + // ret.Add(prop.navCode, new DObject()); + //} + //var key = prop.navCode + "_" + prop.code; + //if (src.ContainsKey(key)) + //{ + // ((DObject)ret[prop.navCode]).Add(prop.code, src[key]); + //} + } + + private async Task NestedOneToManyAsync(Vmodel vm, DObject src, DObject ret, VmSelectProp prop, List selProps) + { + // 在返回值中增加导航属性 + if (ret.ContainsKey(prop.navCode)) + { + return; + } + ret.Add(prop.navCode, new List()); + + // 找到导航属性的配置 + var navCfg = vm.navProps.First(a => a.code == prop.navCode); + if (navCfg != null && navCfg.naviModel != null && src.ContainsKey(navCfg.refField) && navCfg.refCode == VmSelectProp.MAIN_ALIES) + { + VmListInput input = new VmListInput(); + var fkProp = navCfg.naviModel.FieldCodeToPropCode(navCfg.fkField); + if (!string.IsNullOrEmpty(fkProp)) + { + input.q = new DObject(fkProp, src[navCfg.refField]); + input.o = string.Join(',', selProps.Where(a => a.navCode == prop.navCode).Select(a => a.code)); + ret[prop.navCode] = (await QueryDataAsync(navCfg.naviModel, input)).items; + } + } + } + /// /// 新增数据 默认方法 /// diff --git a/visualdev/Tnb.Vengine/Domain/OutputParser.cs b/visualdev/Tnb.Vengine/Domain/OutputParser.cs new file mode 100644 index 00000000..2a90c0b9 --- /dev/null +++ b/visualdev/Tnb.Vengine/Domain/OutputParser.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using JNPF.Common.Extension; +using Tnb.Vengine.DataAccess; + +namespace Tnb.Vengine.Domain +{ + public class OutputParser + { + private readonly IDataAccess _dataAccess; + private readonly Vmodel _root; + private List _outputs; + private Dictionary _selectProps = new Dictionary(); + private Dictionary _navModels = new Dictionary(); + public OutputParser(IDataAccess dataAccess, Vmodel rootModel, string output) + { + _dataAccess = dataAccess; + _root = rootModel; + _outputs = output.Split(',').Distinct().ToList(); + ParseOutputStr(); + } + /// + /// 按模型组织要输出的属性 + /// + private void ParseOutputStr() + { + foreach (var outStr in _outputs) + { + if (string.IsNullOrWhiteSpace(outStr)) + { + continue; + } + string vmPath; + int n = outStr.LastIndexOf('.'); + if (n < 1) + { + vmPath = Vmodel.MAIN_ALIES; + } + else + { + vmPath = outStr.Substring(0, n); + } + if (!_selectProps.ContainsKey(vmPath)) + { + _selectProps.Add(vmPath, new OutputSelect { navPaths = vmPath.Split(',').ToList(), vmPath = vmPath }); + } + var outSelect = _selectProps[vmPath]; + outSelect.propCodes.Add(outStr.Substring(n + 1)); + } + } + + private async Task LoadNavModel() + { + var navProps = _root.navProps.Where(a => _selectProps.Values.Any(b => b.vmPath.StartsWith(a.code + "."))).ToList(); + await LoadVmodelNavigateAsync(navProps); + } + private async Task LoadVmodelNavigateAsync(List navProps) + { + var db = _dataAccess.GetSqlSugar(); + + var vmids = navProps.Select(a => a.vmid).Distinct().ToList(); + var navs = await db.Queryable().Where(a => vmids.Contains(a.id)).ToDictionaryAsync(a => a.id, a => a); + foreach (var navProp in navProps) + { + navProp.naviModel = (Vmodel)navs.GetOrDefault(navProp.vmid); + navProp.naviModel.navProps.Where(a => _selectProps.Values.Any(b => b.vmPath.StartsWith(a.code + "."))).ToList(); + } + } + + } + + internal class OutputSelect + { + public string vmId { get; set; } = string.Empty; + public string vmCode { get; set; } = string.Empty; + public string vmPath { get; set; } = string.Empty; + public eNavigateType navType { get; set; } = eNavigateType.None; + public List navPaths { get; set; } = new List(); + + public List propCodes { get; set; } = new List(); + public List fieldCodes { get; set; } = new List(); + + public OutputSelect() + { + + } + public OutputSelect(Vmodel model) + { + vmId = model.id; + vmCode = model.vmCode; + vmPath = Vmodel.MAIN_ALIES; + } + } +} diff --git a/visualdev/Tnb.Vengine/Domain/VengineDto.cs b/visualdev/Tnb.Vengine/Domain/VengineDto.cs index d1d441bf..f83b61a9 100644 --- a/visualdev/Tnb.Vengine/Domain/VengineDto.cs +++ b/visualdev/Tnb.Vengine/Domain/VengineDto.cs @@ -164,6 +164,7 @@ public class VmSelectProp public const string MAIN_ALIES = "m"; public string code { get; set; } = string.Empty; public string field { get; set; } = string.Empty; + public List navPath { get; set; } = new List(); public string navCode { get; set; } = MAIN_ALIES; public ePropType propType { get; set; } public eNavigateType navType { get; set; } diff --git a/visualdev/Tnb.Vengine/Domain/VmDbProp.cs b/visualdev/Tnb.Vengine/Domain/VmDbProp.cs index c654a1f3..b985f776 100644 --- a/visualdev/Tnb.Vengine/Domain/VmDbProp.cs +++ b/visualdev/Tnb.Vengine/Domain/VmDbProp.cs @@ -111,7 +111,7 @@ public class VmDbProp : VmBaseProp /// 获取默认值文本 /// /// - public object? GetDefaultValueString() + public string? GetDefaultValueString() { string val = ""; if (!required) return val; diff --git a/visualdev/Tnb.Vengine/Domain/Vmodel.cs b/visualdev/Tnb.Vengine/Domain/Vmodel.cs index 9c5fb6cb..89b0d03f 100644 --- a/visualdev/Tnb.Vengine/Domain/Vmodel.cs +++ b/visualdev/Tnb.Vengine/Domain/Vmodel.cs @@ -23,6 +23,8 @@ namespace Tnb.Vengine.Domain; [SugarTable("sys_vmodel")] public partial class Vmodel : Entity { + public const string MAIN_ALIES = "m"; + #region Properties /// @@ -146,7 +148,8 @@ public partial class Vmodel : Entity } #endregion Properties - + //private Dictionary? _mapField2Prop = null; + //private Dictionary? _mapProp2Field = null; /// /// 通过实体创建模型 /// @@ -351,11 +354,30 @@ public partial class Vmodel : Entity if (filter == null) return wheres; foreach (var item in filter) { + VmDbProp? prop = null; // TODO 按子表条件查询 if (item.Key.Contains(".")) { + var codes = item.Key.Split('.'); + if (codes.Length >= 2) + { + var navProp = navProps.FirstOrDefault(a => a.code == codes[0]); + if (navProp != null && navProp.naviModel != null) + { + var dbProp = navProp.naviModel.dbProps.FirstOrDefault(a => a.code == codes[1]); + if (dbProp != null) + { + prop = new VmDbProp(); + prop.field = codes[0] + "." + dbProp.field; + prop.csType = dbProp.csType; + } + } + } + } + else + { + prop = dbProps.FirstOrDefault(a => a.code == item.Key); } - var prop = dbProps.FirstOrDefault(a => a.code == item.Key); if (prop == null) continue; if (item.Value is JArray val) { From 0bfc23ac4c25554c3b1e933dc21299b98af1f06f Mon Sep 17 00:00:00 2001 From: qianjiawei <1184704771@qq.com> Date: Fri, 3 Nov 2023 09:53:58 +0800 Subject: [PATCH 28/29] =?UTF-8?q?redis=E8=8E=B7=E5=8F=96=E6=95=B0=E9=87=87?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IRedisDataService.cs | 19 ++++++++ .../Tnb.ProductionMgr/RedisDataService.cs | 47 +++++++++++++++++++ common/Tnb.Common/Cache/RedisCache.cs | 8 ++++ 3 files changed, 74 insertions(+) create mode 100644 ProductionMgr/Tnb.ProductionMgr.Interfaces/IRedisDataService.cs create mode 100644 ProductionMgr/Tnb.ProductionMgr/RedisDataService.cs diff --git a/ProductionMgr/Tnb.ProductionMgr.Interfaces/IRedisDataService.cs b/ProductionMgr/Tnb.ProductionMgr.Interfaces/IRedisDataService.cs new file mode 100644 index 00000000..c32ab2af --- /dev/null +++ b/ProductionMgr/Tnb.ProductionMgr.Interfaces/IRedisDataService.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; + +namespace Tnb.ProductionMgr.Interfaces +{ + public interface IRedisDataService + { + /// + /// 根据机号获取重量 + /// + Task GetWeight(string key, string field); + + + } +} diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisDataService.cs b/ProductionMgr/Tnb.ProductionMgr/RedisDataService.cs new file mode 100644 index 00000000..58ecd15b --- /dev/null +++ b/ProductionMgr/Tnb.ProductionMgr/RedisDataService.cs @@ -0,0 +1,47 @@ +using System.Collections; +using JNPF.Common.Cache; +using JNPF.Common.Manager; +using JNPF.DependencyInjection; +using JNPF.DynamicApiController; +using JNPF.FriendlyException; +using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using Tnb.ProductionMgr.Interfaces; + +namespace Tnb.ProductionMgr +{ + /// + /// 数据采集 + /// + [ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 700)] + [Route("api/[area]/[controller]/[action]")] + public class RedisDataService: IRedisDataService, IDynamicApiController, ITransient + { + private readonly RedisCache _redisCache; + public RedisDataService(RedisCache redisCache) + { + _redisCache = redisCache; + } + /// + /// 根据机号获取重量 + /// + [HttpPost] + public async Task GetWeight(string device, string jihao) + { + decimal result = 0; + if (!_redisCache.HashExist(device, jihao)) + throw Oops.Bah("没有找到" + device + "----" + jihao + "的数据"); + var data = _redisCache.GetHash(device, jihao); + + var res = JsonConvert.DeserializeObject(data); + if (res != null && res["Value"] != null) + { + result=decimal.Parse( res["Value"]!.ToString()); + } + + return data; + } + + } +} diff --git a/common/Tnb.Common/Cache/RedisCache.cs b/common/Tnb.Common/Cache/RedisCache.cs index 5cebbd3d..a58db000 100644 --- a/common/Tnb.Common/Cache/RedisCache.cs +++ b/common/Tnb.Common/Cache/RedisCache.cs @@ -224,4 +224,12 @@ public class RedisCache : ICache, ISingleton long second = RedisHelper.PTtl(key); return DateTime.Now.AddMilliseconds(second); } + public string GetHash(string key, string field) + { + return RedisHelper.HGet(key, field); + } + public bool HashExist(string key, string field) + { + return RedisHelper.HExists(key, field); + } } \ No newline at end of file From f56c1d1120874688fb5013b0afc5bc6c36cc0057 Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Fri, 3 Nov 2023 10:27:58 +0800 Subject: [PATCH 29/29] =?UTF-8?q?=E6=B7=BB=E5=8A=A0x2server=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=85=B3=E8=81=94=E7=9A=84=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpEquipment.cs | 5 +++++ .../Dto/PrdManage/PADPackageTaskPageOutput.cs | 10 ++++++++++ .../Tnb.ProductionMgr/PrdPackReportService.cs | 5 ++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpEquipment.cs b/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpEquipment.cs index aa667ea2..70b020ae 100644 --- a/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpEquipment.cs +++ b/EquipMgr/Tnb.EquipMgr.Entities/Entity/EqpEquipment.cs @@ -217,5 +217,10 @@ public partial class EqpEquipment : BaseEntity /// 入库库位id /// public string? as_location_id { get; set; } + + /// + /// 第三方平台设备编号 + /// + public string? third_equip_code { get; set; } } diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PADPackageTaskPageOutput.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PADPackageTaskPageOutput.cs index a0365f28..f332da09 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PADPackageTaskPageOutput.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/PADPackageTaskPageOutput.cs @@ -144,5 +144,15 @@ namespace Tnb.ProductionMgr.Entities.Dto.PrdManage /// 副单位数量(kg) /// public string? deputy_num { get; set; } + + /// + /// 第三方平台设备编号 + /// + public string? third_equip_code { get; set; } + + /// + /// 称重点位名称 + /// + public string? weight_name { get; set; } } } \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs index d975fe21..f7751cfd 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdPackReportService.cs @@ -401,13 +401,14 @@ namespace Tnb.ProductionMgr .LeftJoin((a,b,c,d,e,f,g,h,i)=>a.process_id==i.process_id && i.enabled==1) .LeftJoin((a,b,c,d,e,f,g,h,i,j)=>a.mo_id==j.id) .LeftJoin((a,b,c,d,e,f,g,h,i,j,k)=>a.material_id==k.material_id && k.auxiliary_unit_id=="kg") + .LeftJoin((a,b,c,d,e,f,g,h,i,j,k,l)=>a.eqp_id==l.equip_id && l.enabled==1 && l.label_point=="提报装箱称重点位") .Where((a, b) => a.workstation_id == input.stationId && (a.mo_task_status == DictConst.ToBeStartedEnCode || a.mo_task_status == DictConst.MoStatusPauseCode || a.mo_task_status == DictConst.ComplatedEnCode || a.mo_task_status == DictConst.InProgressEnCode) ) .WhereIF(!string.IsNullOrEmpty(mo_task_code),a=>a.mo_task_code.Contains(mo_task_code)) //.WhereIF(!string.IsNullOrEmpty(mo_task_status),a=>a.mo_task_status==mo_task_status) .WhereIF(statusList.Count>0,a=>statusList.Contains(a.mo_task_status)) .WhereIF(status=="3" && start_time!=null,a=>a.act_end_date>=start_time) .WhereIF(status=="3" && end_time!=null,a=>a.act_end_date<=end_time) - .Select((a, b, c, d, e,f,g,h,i,j,k) => new PADPackageTaskPageOutput + .Select((a, b, c, d, e,f,g,h,i,j,k,l) => new PADPackageTaskPageOutput { id = a.id, mo_task_code = a.mo_task_code, @@ -448,6 +449,8 @@ namespace Tnb.ProductionMgr minpacking = b.minpacking, main_num = k.number_of_primary_unit, deputy_num = k.number_of_auxiliary_unit, + third_equip_code = f.third_equip_code, + weight_name = l.label_name }) .MergeTable() .OrderBy($"{input.sidx} {input.sort}")