From 8fdbebb12751e3c42f7ee57c08a8a1c51133c465 Mon Sep 17 00:00:00 2001 From: FanLian Date: Thu, 10 Aug 2023 09:28:22 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=9C=89=E8=AF=AF=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Consts/ModuleConsts.cs | 4 + .../LocationDefinitionService.cs | 61 +++++++-------- .../Tnb.WarehouseMgr/WmsCarryLedgerService.cs | 61 +++++++-------- .../Tnb.WarehouseMgr/WmsPointService.cs | 75 +++++++++++++++++++ .../Tnb.WarehouseMgr/WmsRouteMgrService.cs | 39 +++++----- 5 files changed, 159 insertions(+), 81 deletions(-) create mode 100644 WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs index 90acb4f7..544ea289 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs @@ -176,5 +176,9 @@ public class ModuleConsts /// 模块标识-路段管理 /// public const string MODULE_WMSROAD_ID = "26100621140773"; + /// + /// 模块标识-点位管理 + /// + public const string MODULE_WMSPOINT_ID = "26099196480805"; } \ No newline at end of file diff --git a/WarehouseMgr/Tnb.WarehouseMgr/LocationDefinitionService.cs b/WarehouseMgr/Tnb.WarehouseMgr/LocationDefinitionService.cs index ab6a1016..7a262b68 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/LocationDefinitionService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/LocationDefinitionService.cs @@ -16,11 +16,13 @@ using Tnb.WarehouseMgr.Entities; using JNPF.Common.Extension; using JNPF.Logging; using System.Reflection.Emit; +using JNPF.VisualDev.Entitys.Dto.VisualDev; +using NPOI.SS.Formula.Functions; namespace Tnb.WarehouseMgr { [OverideVisualDev(ModuleConsts.MODULE_LOCATIONDEFINITION_ID)] - public class LocationDefinitionService : ExcelDataImportManager + public class LocationDefinitionService : BaseWareHouseService { private readonly ISqlSugarClient _db; private readonly IUserManager _userManager; @@ -28,51 +30,50 @@ namespace Tnb.WarehouseMgr { _db = repository.AsSugarClient(); _userManager = userManager; - OverideFuncs.ImportAsync = DataImport; + OverideFuncs.ImportDataAsync = DataImport; } - private async Task DataImport(IFormFile file) + private async Task DataImport(VisualDevImportDataInput input) { int row = 0; try { - List> dics = await ImportExcelToMemory(file); + List> dics = input.list; List locs = new List(); BasLocation loc = new BasLocation(); - var carryStdDic = await _db.Queryable().ToDictionaryAsync(x => x.carrystd_code, x => x.id); + List cCodes = new List(); + foreach (var d in dics) + { + var cCode = d["carrystd_id"].ToString() ?? string.Empty; + if (cCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行载具规格不可为空", 500); + cCodes.Add(cCode); + d["create_time"] = DateTime.Now; + d.Remove("modify_time"); + loc = d.Adapt(); + locs.Add(loc); + } + var carryStdDic = await _db.Queryable().Where(it => cCodes.Contains(it.carrystd_code)).ToDictionaryAsync(x => x.carrystd_code, x => x.id); if (carryStdDic?.Count > 0) { - string carryStdId = string.Empty; - foreach (var d in dics) + locs.ForEach(x => { - var stdCodeKey = d["carrystd_id"].ToString(); - carryStdId = carryStdDic.ContainsKey(stdCodeKey) ? carryStdDic[stdCodeKey]?.ToString() ?? "" : ""; - d["carrystd_id"] = carryStdId; - loc = d.Adapt(); - locs.Add(loc); - } + if (!carryStdDic.Keys.Contains(x.carrystd_id)) throw new AppFriendlyException($"第{locs.IndexOf(x) + 1}行的载具规格有误", 500); + x.id = SnowflakeIdHelper.NextId(); + x.org_id = _userManager.User.OrganizeId; + x.is_lock = 0; + x.carrystd_id = carryStdDic[x.carrystd_id].ToString() ?? throw new AppFriendlyException($"第{locs.IndexOf(x) + 1}行的载具规格有误", 500); + x.create_id = _userManager.UserId; + x.create_time = DateTime.Now; + x.modify_id = null; + x.modify_time = null; + x.is_mix = 1; + }); } - locs.ForEach(x => - { - x.id = SnowflakeIdHelper.NextId(); - x.org_id = _userManager.User.OrganizeId; - x.is_lock = 0; - x.create_id = _userManager.UserId; - x.create_time = DateTime.Now; - x.modify_id = null; - x.modify_time = null; - x.is_mix = 1; - }); - - await _db.Ado.BeginTranAsync(); row = await _db.Insertable(locs).ExecuteCommandAsync(); - await _db.Ado.CommitTranAsync(); } catch (Exception ex) { - await _db.Ado.RollbackTranAsync(); - Log.Error("导入失败", ex); - throw Oops.Bah("导入失败"); + throw Oops.Bah(ex.Message); } return row > 0; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs index 3fc960e2..e02e1b26 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs @@ -25,6 +25,7 @@ using JNPF.Common.Security; using Tnb.BasicData.Entities; using Mapster; using Aop.Api.Domain; +using JNPF.VisualDev.Entitys.Dto.VisualDev; namespace Tnb.WarehouseMgr { @@ -32,7 +33,7 @@ namespace Tnb.WarehouseMgr /// 载具台账服务 /// [OverideVisualDev(ModuleConsts.MODULE_WMSCARRY_ID)] - public class WmsCarryLedgerService : ExcelDataImportManager, IWmsCarryLedgerService + public class WmsCarryLedgerService : BaseWareHouseService, IWmsCarryLedgerService { private const string ModuleId = ""; private readonly ISqlSugarClient _db; @@ -45,7 +46,7 @@ namespace Tnb.WarehouseMgr _runService = runService; _visualDevService = visualDevService; _userManager = userManager; - OverideFuncs.ImportAsync = DataImport; + OverideFuncs.ImportDataAsync = DataImport; } /// @@ -53,58 +54,52 @@ namespace Tnb.WarehouseMgr /// /// /// - private async Task DataImport(IFormFile file) + private async Task DataImport(VisualDevImportDataInput input) { int row = 0; try { - List> dics = await ImportExcelToMemory(file); + List> dics = input.list; List carrys = new List(); - List locCodes = new(); List cCodes = new(); WmsCarryH carryH = new WmsCarryH(); - - string carryStdId = string.Empty; foreach (var d in dics) { var cCode = d["carrystd_id"].ToString() ?? string.Empty; - if (cCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行数据有误", 500); + if (cCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行载具规格不可为空", 500); locCodes.Add(d["location_code"]?.ToString() ?? string.Empty); cCodes.Add(cCode); + d["create_time"] = DateTime.Now; + d.Remove("modify_time"); carryH = d.Adapt(); carrys.Add(carryH); } - if (!locCodes.IsNullOrEmpty()) + var carryStdDic = await _db.Queryable().Where(it => cCodes.Contains(it.carrystd_code)).ToDictionaryAsync(x => x.carrystd_code, x => x.id); + var locs = await _db.Queryable().Where(it => locCodes.Contains(it.location_code)).ToDictionaryAsync(x => x.location_code, x => x.id); + carrys.ForEach(x => { - var carryStdDic = await _db.Queryable().Where(it=>cCodes.Contains(it.carrystd_code)).ToDictionaryAsync(x => x.carrystd_code, x => x.id); - var locs = await _db.Queryable().Where(it => locCodes.Contains(it.location_code)).ToDictionaryAsync(x => x.location_code, x => x.id); - carrys.ForEach(x => - { - x.id = SnowflakeIdHelper.NextId(); - x.org_id = _userManager.User.OrganizeId; - x.status = 1; - x.is_lock = 0; - x.carrystd_id = carryStdDic[x.carrystd_id].ToString()!; - x.carry_status = ((int)EnumCarryStatus.空闲).ToString(); - x.location_id = locs[x.location_code].ToString(); - x.out_status = ((int)EnumOutStatus.正常).ToString(); - x.is_check = 1; - x.create_id = _userManager.UserId; - x.create_time = DateTime.Now; - x.modify_id = null; - x.modify_time = null; - }); - } - await _db.Ado.BeginTranAsync(); + if (!carryStdDic.Keys.Contains(x.carrystd_id)) throw new AppFriendlyException($"第{carrys.IndexOf(x) + 1}行的载具规格有误", 500); + if (!locs.Keys.Contains(x.location_code)) throw new AppFriendlyException($"第{carrys.IndexOf(x) + 1}行的库位编号有误", 500); + x.id = SnowflakeIdHelper.NextId(); + x.org_id = _userManager.User.OrganizeId; + x.status = 1; + x.is_lock = 0; + x.carrystd_id = carryStdDic[x.carrystd_id].ToString() ?? throw new AppFriendlyException($"第{carrys.IndexOf(x) + 1}行的载具规格有误", 500); + x.carry_status = ((int)EnumCarryStatus.空闲).ToString(); + x.location_id = locs[x.location_code].ToString() ?? throw new AppFriendlyException($"第{carrys.IndexOf(x) + 1}行的库位编号有误", 500); + x.out_status = ((int)EnumOutStatus.正常).ToString(); + x.is_check = 1; + x.create_id = _userManager.UserId; + x.create_time = DateTime.Now; + x.modify_id = null; + x.modify_time = null; + }); row = await _db.Insertable(carrys).ExecuteCommandAsync(); - await _db.Ado.CommitTranAsync(); } catch (Exception ex) { - await _db.Ado.RollbackTranAsync(); - Log.Error("导入失败", ex); - throw Oops.Bah("导入失败"); + throw Oops.Bah(ex.Message); } return row > 0; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs new file mode 100644 index 00000000..73a171d6 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using JNPF.Common.Core.Manager; +using JNPF.Common.Security; +using JNPF.FriendlyException; +using JNPF.VisualDev; +using JNPF.VisualDev.Entitys.Dto.VisualDev; +using Mapster; +using SqlSugar; +using Tnb.BasicData.Entities; +using Tnb.WarehouseMgr.Entities; + +namespace Tnb.WarehouseMgr +{ + [OverideVisualDev(ModuleConsts.MODULE_WMSPOINT_ID)] + public class WmsPointService: BaseWareHouseService + { + private readonly ISqlSugarClient _db; + private readonly IUserManager _userManager; + public WmsPointService(ISqlSugarRepository repository, IUserManager userManager) + { + _db = repository.AsSugarClient(); + _userManager = userManager; + OverideFuncs.ImportDataAsync = DataImport; + } + + private async Task DataImport(VisualDevImportDataInput input) + { + int row = 0; + try + { + List> dics = input.list; + List points = new List(); + WmsPointH pt = new WmsPointH(); + List cCodes = new List(); + foreach (var d in dics) + { + var cCode = d["carrystd_id"].ToString() ?? string.Empty; + if (cCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行载具规格不可为空", 500); + cCodes.Add(cCode); + d["create_time"] = DateTime.Now; + d.Remove("modify_time"); + pt = d.Adapt(); + points.Add(pt); + } + var carryStdDic = await _db.Queryable().Where(it => cCodes.Contains(it.carrystd_code)).ToDictionaryAsync(x => x.carrystd_code, x => x.id); + if (carryStdDic?.Count > 0) + { + points.ForEach(x => + { + if (!carryStdDic.Keys.Contains(x.carrystd_id)) throw new AppFriendlyException($"第{points.IndexOf(x) + 1}行的载具规格有误", 500); + x.id = SnowflakeIdHelper.NextId(); + x.org_id = _userManager.User.OrganizeId; + x.is_lock = 0; + x.carrystd_id = carryStdDic[x.carrystd_id].ToString() ?? throw new AppFriendlyException($"第{points.IndexOf(x) + 1}行的载具规格有误", 500); + x.create_id = _userManager.UserId; + x.create_time = DateTime.Now; + x.modify_id = null; + x.modify_time = null; + x.is_mix = 1; + }); + } + row = await _db.Insertable(points).ExecuteCommandAsync(); + } + catch (Exception ex) + { + throw Oops.Bah(ex.Message); + } + return row > 0; + } + } +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsRouteMgrService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsRouteMgrService.cs index c979c4ac..a6cb1af8 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsRouteMgrService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsRouteMgrService.cs @@ -20,6 +20,7 @@ using JNPF.VisualDev.Interfaces; using Mapster; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using NPOI.SS.Formula; using SqlSugar; using Tnb.WarehouseMgr.Entities; using Tnb.WarehouseMgr.Interfaces; @@ -31,7 +32,7 @@ namespace Tnb.WarehouseMgr /// [OverideVisualDev(ModuleId)] - public class WmsRouteMgrService : ExcelDataImportManager, IWmsRouteMgrService + public class WmsRouteMgrService : BaseWareHouseService, IWmsRouteMgrService { private const string ModuleId = "26100621140773";//26100621140773 private readonly ISqlSugarClient _db; @@ -44,7 +45,7 @@ namespace Tnb.WarehouseMgr _db = repository.AsSugarClient(); _runService = runService; _visualDevService = visualDevService; - _userManager = userManager; + _userManager = userManager; OverideFuncs.CreateAsync = Create; OverideFuncs.ImportDataAsync = DataImport; } @@ -70,22 +71,27 @@ namespace Tnb.WarehouseMgr int row = 0; try { - List> dics = input.list; + List> dics = input.list; List roads = new List(); List pointCodes = new List(); - List locCodes = new(); WmsRoad road = new WmsRoad(); - - string carryStdId = string.Empty; foreach (var d in dics) { - var sCode = d["startpoint_code"]?.ToString() ?? string.Empty; + var sCode = d["startpoint_code"].ToString() ?? string.Empty; var eCode = d["endpoint_code"].ToString() ?? string.Empty; - if (sCode.IsEmpty() || eCode.IsEmpty()) - throw new AppFriendlyException($"第{dics.IndexOf(d) + 2}行数据有误", 500); + var dis = d["distance"].ToString() ?? string.Empty; + if(sCode == eCode) throw new AppFriendlyException("起始点位不能等于终止点位", 500); + if (sCode.IsEmpty()) + throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行起始点位编号不可为空", 500); + if (eCode.IsEmpty()) + throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行终止点位编号不可为空", 500); + if (dis.IsEmpty()) + throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行距离不可为空", 500); pointCodes.Add(sCode); pointCodes.Add(eCode); + d["create_time"] = DateTime.Now; + d.Remove("modify_time"); road = d.Adapt(); roads.Add(road); } @@ -94,27 +100,24 @@ namespace Tnb.WarehouseMgr { roads.ForEach(x => { + if (!points.Keys.Contains(x.startpoint_code) ) throw new AppFriendlyException($"第{roads.IndexOf(x) + 1}行的起始点位编号有误", 500); + if (!points.Keys.Contains(x.endpoint_code)) throw new AppFriendlyException($"第{roads.IndexOf(x) + 1}行的终止点位编号有误", 500); x.id = SnowflakeIdHelper.NextId(); x.org_id = _userManager.User.OrganizeId; - x.startpoint_id = points[x.startpoint_code].ToString()!; - x.endpoint_id = points[x.endpoint_code].ToString()!; + x.startpoint_id = points[x.startpoint_code].ToString() ?? throw new AppFriendlyException($"第{roads.IndexOf(x) + 1}行的起始点位编号有误", 500); + x.endpoint_id = points[x.endpoint_code].ToString() ?? throw new AppFriendlyException($"第{roads.IndexOf(x) + 1}行的终止点位编号有误", 500); x.road_code = $"{x.startpoint_code}-{x.endpoint_code}"; x.status = 1; x.create_id = _userManager.UserId; - x.create_time = DateTime.Now; x.modify_id = null; x.modify_time = null; }); } - await _db.Ado.BeginTranAsync(); row = await _db.Insertable(roads).ExecuteCommandAsync(); - await _db.Ado.CommitTranAsync(); } catch (Exception ex) - { - await _db.Ado.RollbackTranAsync(); - //Log.Error("导入失败", ex); - throw Oops.Bah("导入失败"); + { + throw Oops.Bah(ex.Message); } return row > 0; } From 943cd5a0b22ba9bbd188e691e44a64f0ebc5f31e Mon Sep 17 00:00:00 2001 From: FanLian Date: Thu, 10 Aug 2023 09:29:02 +0800 Subject: [PATCH 2/9] bug --- WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs index 73a171d6..268e4137 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs @@ -51,16 +51,16 @@ namespace Tnb.WarehouseMgr { points.ForEach(x => { - if (!carryStdDic.Keys.Contains(x.carrystd_id)) throw new AppFriendlyException($"第{points.IndexOf(x) + 1}行的载具规格有误", 500); + x.id = SnowflakeIdHelper.NextId(); x.org_id = _userManager.User.OrganizeId; x.is_lock = 0; - x.carrystd_id = carryStdDic[x.carrystd_id].ToString() ?? throw new AppFriendlyException($"第{points.IndexOf(x) + 1}行的载具规格有误", 500); + x.create_id = _userManager.UserId; x.create_time = DateTime.Now; x.modify_id = null; x.modify_time = null; - x.is_mix = 1; + }); } row = await _db.Insertable(points).ExecuteCommandAsync(); From 831a469617df0394456367f397b7a6a7dca989db Mon Sep 17 00:00:00 2001 From: FanLian Date: Thu, 10 Aug 2023 10:00:59 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E9=87=8D=E5=86=99=E7=82=B9=E4=BD=8D?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E7=9A=84=E5=AF=BC=E5=85=A5=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E6=94=B9=E9=87=8D=E5=86=99=E5=9C=A8=E7=BA=BF?= =?UTF-8?q?=E5=BC=80=E5=8F=91=E6=8E=A5=E5=8F=A3=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LocationDefinitionService.cs | 1 - .../Tnb.WarehouseMgr/WmsCarryLedgerService.cs | 1 - .../Tnb.WarehouseMgr/WmsPointService.cs | 50 +++++++++++-------- .../VisualDevModelDataService.cs | 2 +- 4 files changed, 29 insertions(+), 25 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/LocationDefinitionService.cs b/WarehouseMgr/Tnb.WarehouseMgr/LocationDefinitionService.cs index 7a262b68..d5d00c30 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/LocationDefinitionService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/LocationDefinitionService.cs @@ -63,7 +63,6 @@ namespace Tnb.WarehouseMgr x.is_lock = 0; x.carrystd_id = carryStdDic[x.carrystd_id].ToString() ?? throw new AppFriendlyException($"第{locs.IndexOf(x) + 1}行的载具规格有误", 500); x.create_id = _userManager.UserId; - x.create_time = DateTime.Now; x.modify_id = null; x.modify_time = null; x.is_mix = 1; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs index e02e1b26..ce70c0a6 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs @@ -91,7 +91,6 @@ namespace Tnb.WarehouseMgr x.out_status = ((int)EnumOutStatus.正常).ToString(); x.is_check = 1; x.create_id = _userManager.UserId; - x.create_time = DateTime.Now; x.modify_id = null; x.modify_time = null; }); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs index 268e4137..99f216b0 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using JNPF.Common.Core.Manager; +using JNPF.Common.Extension; using JNPF.Common.Security; using JNPF.FriendlyException; using JNPF.VisualDev; @@ -16,11 +17,11 @@ using Tnb.WarehouseMgr.Entities; namespace Tnb.WarehouseMgr { [OverideVisualDev(ModuleConsts.MODULE_WMSPOINT_ID)] - public class WmsPointService: BaseWareHouseService + public class WmsPointService : BaseWareHouseService { private readonly ISqlSugarClient _db; private readonly IUserManager _userManager; - public WmsPointService(ISqlSugarRepository repository, IUserManager userManager) + public WmsPointService(ISqlSugarRepository repository, IUserManager userManager) { _db = repository.AsSugarClient(); _userManager = userManager; @@ -35,34 +36,39 @@ namespace Tnb.WarehouseMgr List> dics = input.list; List points = new List(); WmsPointH pt = new WmsPointH(); - List cCodes = new List(); + List aCodes = new List(); foreach (var d in dics) { - var cCode = d["carrystd_id"].ToString() ?? string.Empty; - if (cCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行载具规格不可为空", 500); - cCodes.Add(cCode); + var pCode = d["point_code"].ToString() ?? string.Empty; + var pName = d["point_name"].ToString() ?? string.Empty; + var aCode = d["area_code"].ToString() ?? string.Empty; + var floor = d["floor"].ToString() ?? string.Empty; + if (pCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行点位编号不可为空", 500); + if (pName == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行点位名称不可为空", 500); + if (aCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行管理区编号不可为空", 500); + if (floor == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行楼层不可为空", 500); + aCodes.Add(aCode); d["create_time"] = DateTime.Now; d.Remove("modify_time"); pt = d.Adapt(); points.Add(pt); } - var carryStdDic = await _db.Queryable().Where(it => cCodes.Contains(it.carrystd_code)).ToDictionaryAsync(x => x.carrystd_code, x => x.id); - if (carryStdDic?.Count > 0) + var areas = await _db.Queryable().Where(it => aCodes.Contains(it.code)).ToDictionaryAsync(x => x.code, x => x.id); + points.ForEach(x => { - points.ForEach(x => - { - - x.id = SnowflakeIdHelper.NextId(); - x.org_id = _userManager.User.OrganizeId; - x.is_lock = 0; - - x.create_id = _userManager.UserId; - x.create_time = DateTime.Now; - x.modify_id = null; - x.modify_time = null; - - }); - } + if (!areas.Keys.Contains(x.area_code)) throw new AppFriendlyException($"第{points.IndexOf(x) + 1}行的管理区编号有误", 500); + x.id = SnowflakeIdHelper.NextId(); + x.org_id = _userManager.User.OrganizeId; + x.is_lock = 0; + x.status = 1; + x.point_x = 0; + x.point_y = 0; + x.point_z = 0; + x.area_id = areas[x.area_code].ToString() ?? throw new AppFriendlyException($"第{points.IndexOf(x) + 1}行的管理区编号编号有误", 500); + x.create_id = _userManager.UserId; + x.modify_id = null; + x.modify_time = null; + }); row = await _db.Insertable(points).ExecuteCommandAsync(); } catch (Exception ex) diff --git a/visualdev/Tnb.VisualDev/VisualDevModelDataService.cs b/visualdev/Tnb.VisualDev/VisualDevModelDataService.cs index 6ca79456..adc31b40 100644 --- a/visualdev/Tnb.VisualDev/VisualDevModelDataService.cs +++ b/visualdev/Tnb.VisualDev/VisualDevModelDataService.cs @@ -798,7 +798,7 @@ namespace JNPF.VisualDev { VisualDevImportDataOutput result = new VisualDevImportDataOutput(); var overideSvc = OverideVisualDevManager.GetOrDefault(modelId); - if (overideSvc != null && overideSvc.OverideFuncs.CreateAsync != null) + if (overideSvc != null && overideSvc.OverideFuncs.ImportDataAsync != null) { await overideSvc.OverideFuncs.ImportDataAsync(list); } From 47ab94b3efcdb45066ce56f0b10926fba821d6fb Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 10 Aug 2023 10:20:14 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E5=87=BA=E7=8E=B0=E5=BC=82=E5=B8=B8=E6=98=AF=E5=B0=86?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=8E=A8=E9=80=81=E5=88=B0=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E6=97=A5=E5=BF=97=E4=BB=A5=E4=BE=9B=E6=9F=A5?= =?UTF-8?q?=E7=9C=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Exceptions/TimedTaskException.cs | 30 +++++++++++++------ .../TimedTaskBackgroundService.cs | 29 ++++++++++-------- .../Tnb.WarehouseMgr/WareHouseService.cs | 25 ++++++++++++++-- 3 files changed, 60 insertions(+), 24 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Exceptions/TimedTaskException.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Exceptions/TimedTaskException.cs index adb7c426..f42b28ae 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Exceptions/TimedTaskException.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Exceptions/TimedTaskException.cs @@ -1,8 +1,11 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Security.Claims; using System.Text; using System.Threading.Tasks; +using JNPF.Common.Const; +using JNPF.Common.Security; using SqlSugar; namespace Tnb.WarehouseMgr.Entities.Exceptions @@ -17,28 +20,37 @@ namespace Tnb.WarehouseMgr.Entities.Exceptions public string UserName { get; set; } public string RequestURL { get; set; } public string RequestMethod { get; set; } - public ConnectionConfigOptions options { get; set; } + public ClaimsPrincipal UserIdentity { get; set; } + public ConnectionConfigOptions? options { get; set; } public TimedTaskException(string message, - string method, - string userId, - string userName, string requestUrl, string requestMethod, - ConnectionConfigOptions options, + ClaimsPrincipal userIdentity, Exception innerException) : base(message, innerException) { - this.Method = method; - this.UserId = userId; - this.UserName = userName; + this.UserId = userIdentity.FindFirst(ClaimConst.CLAINMUSERID)?.Value ?? string.Empty; + this.UserName = userIdentity.FindFirst(ClaimConst.CLAINMREALNAME)?.Value ?? string.Empty; + this.options = userIdentity.FindFirst(ClaimConst.CONNECTIONCONFIG)?.ToObject() ?? null; this.RequestURL = requestUrl; this.RequestMethod = requestMethod; - this.options = options; } } public static class TimedTaskExceptionExtensions { + public static TimedTaskException ToTimedTaskException(this Exception exception, ErrorInfo exceptionInfo) + { + TimedTaskException ex = new(exception.Message, exceptionInfo.RequestURL, exceptionInfo.RequestMethod, exceptionInfo.userIdentity, exception); + return ex; + } + } + + public class ErrorInfo + { + public string RequestURL { get; set; } + public string RequestMethod { get; set; } + public ClaimsPrincipal userIdentity { get; set; } } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs index 6b7c22a3..8eb61c17 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs @@ -15,6 +15,7 @@ using JNPF.FriendlyException; using JNPF.Logging; using JNPF.Message.Interfaces.Message; using JNPF.Systems.Entitys.System; +using Mapster; using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; @@ -35,7 +36,7 @@ namespace Tnb.WarehouseMgr protected override Task ExecuteAsync(CancellationToken stoppingToken) => Task.Run(() => { - //_eventPublisher = App.GetRequiredService(); + _eventPublisher = App.GetRequiredService(); List toUserIds = new List() { "25398501929509" }; //生成任务执行 CancellationTokenSource genTaskCTS = new(); @@ -64,19 +65,21 @@ namespace Tnb.WarehouseMgr { await action(cts).Catch(async ex => { - if (ex is TimedTaskException timedTaskEx) + if (ex is TimedTaskException timedTaskEx and not null) { - //await _eventPublisher.PublishAsync(new LogEventSource("Log:CreateExLog", options, new SysLogEntity - //{ - // Id = SnowflakeIdHelper.NextId(), - // Category = 4, - // IPAddress = NetHelper.Ip, - // RequestURL = httpRequest.Path, - // RequestMethod = httpRequest.Method, - // Json = timedTaskEx + "\n" + context.Exception.StackTrace + "\n" + context.Exception.TargetSite.GetParameters().ToString(), - // PlatForm = string.Format("{0}-{1}", userAgent.OS.ToString(), userAgent.RawValue), - // CreatorTime = DateTime.Now - //})); + await _eventPublisher.PublishAsync(new LogEventSource("Log:CreateExLog", timedTaskEx.options!, new SysLogEntity + { + Id = SnowflakeIdHelper.NextId(), + Category = 4, + UserId = timedTaskEx.UserId, + UserName = timedTaskEx.UserName, + IPAddress = NetHelper.Ip, + RequestURL = timedTaskEx.RequestURL, + RequestMethod = timedTaskEx.RequestMethod, + Json = timedTaskEx + "\n" + timedTaskEx.InnerException?.StackTrace + "\n" + timedTaskEx?.TargetSite?.GetParameters().ToString(), + //PlatForm = string.Format("{0}-{1}", userAgent.OS.ToString(), userAgent.RawValue), + CreatorTime = DateTime.Now + })); } }); await Task.Delay(1000); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 64df0065..dbef621c 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -9,13 +9,16 @@ using System.Runtime.InteropServices; using System.Text; using System.Text.Encodings.Web; using System.Threading.Tasks; +using Aliyun.Credentials.Http; using Aop.Api.Domain; using Aspose.Cells.Drawing; using JNPF; +using JNPF.Common.Const; using JNPF.Common.Contracts; using JNPF.Common.Core.Manager; using JNPF.Common.Enums; using JNPF.Common.Extension; +using JNPF.Common.Manager; using JNPF.Common.Security; using JNPF.DependencyInjection; using JNPF.DynamicApiController; @@ -59,12 +62,15 @@ namespace Tnb.WarehouseMgr private readonly IDictionaryDataService _dictionaryDataService; private readonly IBillRullService _billRullService; private readonly IUserManager _userManager; - public WareHouseService(ISqlSugarRepository repository, IDictionaryDataService dictionaryDataService, IBillRullService billRullService, IUserManager userManager) + private readonly ICacheManager _cacheManager; + + public WareHouseService(ISqlSugarRepository repository, IDictionaryDataService dictionaryDataService, IBillRullService billRullService, IUserManager userManager, ICacheManager cacheManager) { _db = repository.AsSugarClient(); _dictionaryDataService = dictionaryDataService; _billRullService = billRullService; _userManager = userManager; + _cacheManager = cacheManager; } /// @@ -221,6 +227,12 @@ namespace Tnb.WarehouseMgr { Stopwatch sw = Stopwatch.StartNew(); CancellationTokenSource agvCts = new(); + + //获取用户登录令牌 + var aToken = await _cacheManager.GetAsync("AsscessToken"); + if (aToken.IsNullOrWhiteSpace()) return; + var curUser = await GetUserIdentity(aToken); + var db = _db.CopyNew(); try { @@ -366,9 +378,18 @@ namespace Tnb.WarehouseMgr catch (Exception ex) { Log.Error("生成预任务执行时出现错误", ex); + var opts = curUser.FindFirst(ClaimConst.CONNECTIONCONFIG)?.Value; + + ErrorInfo ei = new() + { + RequestURL = App.HttpContext?.Request?.Path, + RequestMethod = App.HttpContext?.Request?.Method, + userIdentity = curUser, + }; + var timedTaskEx = ex.ToTimedTaskException(ei); await db.Ado.RollbackTranAsync(); cts?.Cancel(); - throw; + throw timedTaskEx; } finally { From f21291380ef269124eab56baefc2084b66225091 Mon Sep 17 00:00:00 2001 From: FanLian Date: Thu, 10 Aug 2023 10:21:13 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8A=A5=E9=94=99?= =?UTF-8?q?=E6=B6=88=E6=81=AF=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LocationDefinitionService.cs | 19 ++++++++++++------- .../Tnb.WarehouseMgr/WmsCarryLedgerService.cs | 19 ++++++++++--------- .../Tnb.WarehouseMgr/WmsPointService.cs | 16 ++++++++++------ .../Tnb.WarehouseMgr/WmsRouteMgrService.cs | 19 ++++++++++--------- 4 files changed, 42 insertions(+), 31 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/LocationDefinitionService.cs b/WarehouseMgr/Tnb.WarehouseMgr/LocationDefinitionService.cs index d5d00c30..4801470e 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/LocationDefinitionService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/LocationDefinitionService.cs @@ -21,6 +21,9 @@ using NPOI.SS.Formula.Functions; namespace Tnb.WarehouseMgr { + /// + /// 库位定义业务类 + /// [OverideVisualDev(ModuleConsts.MODULE_LOCATIONDEFINITION_ID)] public class LocationDefinitionService : BaseWareHouseService { @@ -41,27 +44,29 @@ namespace Tnb.WarehouseMgr List> dics = input.list; List locs = new List(); BasLocation loc = new BasLocation(); - List cCodes = new List(); + List cStdCodes = new List(); + //遍历字典,找出需要查询数据库拿的相关字段 foreach (var d in dics) { - var cCode = d["carrystd_id"].ToString() ?? string.Empty; - if (cCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行载具规格不可为空", 500); - cCodes.Add(cCode); + var LCode = d["location_code"].ToString() ?? string.Empty; + if (LCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据起始点位编号不可为空", 500); + var cStdCode = d["carrystd_id"].ToString() ?? string.Empty; + cStdCodes.Add(cStdCode); d["create_time"] = DateTime.Now; d.Remove("modify_time"); loc = d.Adapt(); locs.Add(loc); } - var carryStdDic = await _db.Queryable().Where(it => cCodes.Contains(it.carrystd_code)).ToDictionaryAsync(x => x.carrystd_code, x => x.id); + var carryStdDic = await _db.Queryable().Where(it => cStdCodes.Contains(it.carrystd_code)).ToDictionaryAsync(x => x.carrystd_code, x => x.id); if (carryStdDic?.Count > 0) { locs.ForEach(x => { - if (!carryStdDic.Keys.Contains(x.carrystd_id)) throw new AppFriendlyException($"第{locs.IndexOf(x) + 1}行的载具规格有误", 500); + if (!carryStdDic.Keys.Contains(x.carrystd_id)) throw new AppFriendlyException($"第{locs.IndexOf(x) + 1}个数据的载具规格有误", 500); x.id = SnowflakeIdHelper.NextId(); x.org_id = _userManager.User.OrganizeId; x.is_lock = 0; - x.carrystd_id = carryStdDic[x.carrystd_id].ToString() ?? throw new AppFriendlyException($"第{locs.IndexOf(x) + 1}行的载具规格有误", 500); + x.carrystd_id = carryStdDic[x.carrystd_id].ToString() ?? throw new AppFriendlyException($"第{locs.IndexOf(x) + 1}个数据的载具规格有误", 500); x.create_id = _userManager.UserId; x.modify_id = null; x.modify_time = null; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs index ce70c0a6..ead8cf04 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs @@ -62,32 +62,33 @@ namespace Tnb.WarehouseMgr List> dics = input.list; List carrys = new List(); List locCodes = new(); - List cCodes = new(); + List cStdCodes = new(); WmsCarryH carryH = new WmsCarryH(); + //遍历字典,找出需要查询数据库拿的相关字段 foreach (var d in dics) { - var cCode = d["carrystd_id"].ToString() ?? string.Empty; - if (cCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行载具规格不可为空", 500); + var cStdCode = d["carrystd_id"].ToString() ?? string.Empty; + //if (cStdCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据载具规格不可为空", 500); locCodes.Add(d["location_code"]?.ToString() ?? string.Empty); - cCodes.Add(cCode); + cStdCodes.Add(cStdCode); d["create_time"] = DateTime.Now; d.Remove("modify_time"); carryH = d.Adapt(); carrys.Add(carryH); } - var carryStdDic = await _db.Queryable().Where(it => cCodes.Contains(it.carrystd_code)).ToDictionaryAsync(x => x.carrystd_code, x => x.id); + var carryStdDic = await _db.Queryable().Where(it => cStdCodes.Contains(it.carrystd_code)).ToDictionaryAsync(x => x.carrystd_code, x => x.id); var locs = await _db.Queryable().Where(it => locCodes.Contains(it.location_code)).ToDictionaryAsync(x => x.location_code, x => x.id); carrys.ForEach(x => { - if (!carryStdDic.Keys.Contains(x.carrystd_id)) throw new AppFriendlyException($"第{carrys.IndexOf(x) + 1}行的载具规格有误", 500); - if (!locs.Keys.Contains(x.location_code)) throw new AppFriendlyException($"第{carrys.IndexOf(x) + 1}行的库位编号有误", 500); + if (!carryStdDic.Keys.Contains(x.carrystd_id)) throw new AppFriendlyException($"第{carrys.IndexOf(x) + 1}个数据的载具规格有误", 500); + if (!locs.Keys.Contains(x.location_code)) throw new AppFriendlyException($"第{carrys.IndexOf(x) + 1}个数据的库位编号有误", 500); x.id = SnowflakeIdHelper.NextId(); x.org_id = _userManager.User.OrganizeId; x.status = 1; x.is_lock = 0; - x.carrystd_id = carryStdDic[x.carrystd_id].ToString() ?? throw new AppFriendlyException($"第{carrys.IndexOf(x) + 1}行的载具规格有误", 500); + x.carrystd_id = carryStdDic[x.carrystd_id].ToString() ?? throw new AppFriendlyException($"第{carrys.IndexOf(x) + 1}个数据的载具规格有误", 500); x.carry_status = ((int)EnumCarryStatus.空闲).ToString(); - x.location_id = locs[x.location_code].ToString() ?? throw new AppFriendlyException($"第{carrys.IndexOf(x) + 1}行的库位编号有误", 500); + x.location_id = locs[x.location_code].ToString() ?? throw new AppFriendlyException($"第{carrys.IndexOf(x) + 1}个数据的库位编号有误", 500); x.out_status = ((int)EnumOutStatus.正常).ToString(); x.is_check = 1; x.create_id = _userManager.UserId; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs index 99f216b0..d19f7bda 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs @@ -16,6 +16,9 @@ using Tnb.WarehouseMgr.Entities; namespace Tnb.WarehouseMgr { + /// + /// 点位管理业务类 + /// [OverideVisualDev(ModuleConsts.MODULE_WMSPOINT_ID)] public class WmsPointService : BaseWareHouseService { @@ -37,16 +40,17 @@ namespace Tnb.WarehouseMgr List points = new List(); WmsPointH pt = new WmsPointH(); List aCodes = new List(); + //遍历字典,找出需要查询数据库拿的相关字段 foreach (var d in dics) { var pCode = d["point_code"].ToString() ?? string.Empty; var pName = d["point_name"].ToString() ?? string.Empty; var aCode = d["area_code"].ToString() ?? string.Empty; var floor = d["floor"].ToString() ?? string.Empty; - if (pCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行点位编号不可为空", 500); - if (pName == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行点位名称不可为空", 500); - if (aCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行管理区编号不可为空", 500); - if (floor == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行楼层不可为空", 500); + if (pCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据点位编号不可为空", 500); + if (pName == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据点位名称不可为空", 500); + //if (aCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据管理区编号不可为空", 500); + if (floor == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据楼层不可为空", 500); aCodes.Add(aCode); d["create_time"] = DateTime.Now; d.Remove("modify_time"); @@ -56,7 +60,7 @@ namespace Tnb.WarehouseMgr var areas = await _db.Queryable().Where(it => aCodes.Contains(it.code)).ToDictionaryAsync(x => x.code, x => x.id); points.ForEach(x => { - if (!areas.Keys.Contains(x.area_code)) throw new AppFriendlyException($"第{points.IndexOf(x) + 1}行的管理区编号有误", 500); + if (!areas.Keys.Contains(x.area_code)) throw new AppFriendlyException($"第{points.IndexOf(x) + 1}个数据的管理区编号有误", 500); x.id = SnowflakeIdHelper.NextId(); x.org_id = _userManager.User.OrganizeId; x.is_lock = 0; @@ -64,7 +68,7 @@ namespace Tnb.WarehouseMgr x.point_x = 0; x.point_y = 0; x.point_z = 0; - x.area_id = areas[x.area_code].ToString() ?? throw new AppFriendlyException($"第{points.IndexOf(x) + 1}行的管理区编号编号有误", 500); + x.area_id = areas[x.area_code].ToString() ?? throw new AppFriendlyException($"第{points.IndexOf(x) + 1}个数据的管理区编号编号有误", 500); x.create_id = _userManager.UserId; x.modify_id = null; x.modify_time = null; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsRouteMgrService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsRouteMgrService.cs index a6cb1af8..f76686fa 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsRouteMgrService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsRouteMgrService.cs @@ -76,18 +76,19 @@ namespace Tnb.WarehouseMgr List pointCodes = new List(); List locCodes = new(); WmsRoad road = new WmsRoad(); + //遍历字典,找出需要查询数据库拿的相关字段 foreach (var d in dics) { var sCode = d["startpoint_code"].ToString() ?? string.Empty; var eCode = d["endpoint_code"].ToString() ?? string.Empty; var dis = d["distance"].ToString() ?? string.Empty; if(sCode == eCode) throw new AppFriendlyException("起始点位不能等于终止点位", 500); - if (sCode.IsEmpty()) - throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行起始点位编号不可为空", 500); - if (eCode.IsEmpty()) - throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行终止点位编号不可为空", 500); + //if (sCode.IsEmpty()) + // throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据数据起始点位编号不可为空", 500); + //if (eCode.IsEmpty()) + // throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据终止点位编号不可为空", 500); if (dis.IsEmpty()) - throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}行距离不可为空", 500); + throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据距离不可为空", 500); pointCodes.Add(sCode); pointCodes.Add(eCode); d["create_time"] = DateTime.Now; @@ -100,12 +101,12 @@ namespace Tnb.WarehouseMgr { roads.ForEach(x => { - if (!points.Keys.Contains(x.startpoint_code) ) throw new AppFriendlyException($"第{roads.IndexOf(x) + 1}行的起始点位编号有误", 500); - if (!points.Keys.Contains(x.endpoint_code)) throw new AppFriendlyException($"第{roads.IndexOf(x) + 1}行的终止点位编号有误", 500); + if (!points.Keys.Contains(x.startpoint_code) ) throw new AppFriendlyException($"第{roads.IndexOf(x) + 1}个数据的起始点位编号有误", 500); + if (!points.Keys.Contains(x.endpoint_code)) throw new AppFriendlyException($"第{roads.IndexOf(x) + 1}个数据的终止点位编号有误", 500); x.id = SnowflakeIdHelper.NextId(); x.org_id = _userManager.User.OrganizeId; - x.startpoint_id = points[x.startpoint_code].ToString() ?? throw new AppFriendlyException($"第{roads.IndexOf(x) + 1}行的起始点位编号有误", 500); - x.endpoint_id = points[x.endpoint_code].ToString() ?? throw new AppFriendlyException($"第{roads.IndexOf(x) + 1}行的终止点位编号有误", 500); + x.startpoint_id = points[x.startpoint_code].ToString() ?? throw new AppFriendlyException($"第{roads.IndexOf(x) + 1}个数据的起始点位编号有误", 500); + x.endpoint_id = points[x.endpoint_code].ToString() ?? throw new AppFriendlyException($"第{roads.IndexOf(x) + 1}个数据的终止点位编号有误", 500); x.road_code = $"{x.startpoint_code}-{x.endpoint_code}"; x.status = 1; x.create_id = _userManager.UserId; From e88604b748b7fdbda5a6d33b7628e2472399d90c Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 10 Aug 2023 10:24:27 +0800 Subject: [PATCH 6/9] 1 --- .../Exceptions/TimedTaskException.cs | 4 ++-- WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs | 2 +- WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs | 6 ++++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Exceptions/TimedTaskException.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Exceptions/TimedTaskException.cs index f42b28ae..5b73e217 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Exceptions/TimedTaskException.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Exceptions/TimedTaskException.cs @@ -39,14 +39,14 @@ namespace Tnb.WarehouseMgr.Entities.Exceptions public static class TimedTaskExceptionExtensions { - public static TimedTaskException ToTimedTaskException(this Exception exception, ErrorInfo exceptionInfo) + public static TimedTaskException ToTimedTaskException(this Exception exception, TimedTaskErrorInfo exceptionInfo) { TimedTaskException ex = new(exception.Message, exceptionInfo.RequestURL, exceptionInfo.RequestMethod, exceptionInfo.userIdentity, exception); return ex; } } - public class ErrorInfo + public class TimedTaskErrorInfo { public string RequestURL { get; set; } public string RequestMethod { get; set; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index dbef621c..d2093b7f 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -380,7 +380,7 @@ namespace Tnb.WarehouseMgr Log.Error("生成预任务执行时出现错误", ex); var opts = curUser.FindFirst(ClaimConst.CONNECTIONCONFIG)?.Value; - ErrorInfo ei = new() + TimedTaskErrorInfo ei = new() { RequestURL = App.HttpContext?.Request?.Path, RequestMethod = App.HttpContext?.Request?.Method, diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs index 47739623..3057bba8 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs @@ -17,6 +17,7 @@ using Mapster; using Microsoft.AspNetCore.Mvc; using NPOI.SS.Formula; using SqlSugar; +using TencentCloud.Common; using Tnb.BasicData.Entities; using Tnb.Common.Utils; using Tnb.WarehouseMgr.Entities; @@ -223,7 +224,12 @@ namespace Tnb.WarehouseMgr { JNPF.Logging.Log.Error("齐套分拣执行时出现错误", ex); await curDb.Ado.RollbackTranAsync(); + ErrorInfo ei = new() + { + + }; cts?.Cancel(); + throw; } } From 12bd8e6de6252e121e7e882c33d36d53df2fe15a Mon Sep 17 00:00:00 2001 From: FanLian Date: Thu, 10 Aug 2023 10:29:34 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=E9=BD=90=E5=A5=97=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AE=9A=E6=97=B6=E5=BC=82=E5=B8=B8=E6=97=A5?= =?UTF-8?q?=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ExcelDataImportManager.cs | 92 ------------------- .../Tnb.WarehouseMgr/WmskittingOutService.cs | 19 +++- 2 files changed, 17 insertions(+), 94 deletions(-) delete mode 100644 WarehouseMgr/Tnb.WarehouseMgr/ExcelDataImportManager.cs diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ExcelDataImportManager.cs b/WarehouseMgr/Tnb.WarehouseMgr/ExcelDataImportManager.cs deleted file mode 100644 index 062cc44a..00000000 --- a/WarehouseMgr/Tnb.WarehouseMgr/ExcelDataImportManager.cs +++ /dev/null @@ -1,92 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using JNPF.FriendlyException; -using Microsoft.AspNetCore.Http; -using NPOI.HSSF.UserModel; -using NPOI.SS.UserModel; -using NPOI.XSSF.UserModel; - -namespace Tnb.WarehouseMgr -{ - public class ExcelDataImportManager : BaseWareHouseService - { - /// - /// 解析Excel到内存 - /// - /// - /// - protected Task>> ImportExcelToMemory(IFormFile file) - { - int rowIndex = 1; - List>? dics = new(); - IWorkbook? workbook = null; - try - { - using (Stream stream = file.OpenReadStream()) - { - // 2007版本 - if (file.Name.IndexOf(".xlsx") > 0) - { - workbook = new XSSFWorkbook(stream); - } - else if (file.Name.IndexOf(".xls") > 0) - { - workbook = new HSSFWorkbook(stream); - } - - ISheet? sheet = workbook?.GetSheetAt(0); - if (workbook == null || sheet == null) throw Oops.Bah("无导入数据"); - if (sheet?.LastRowNum <= 1) throw Oops.Bah("无导入数据"); - - ICellStyle style = workbook.CreateCellStyle(); - IFont font = workbook.CreateFont(); - font.Color = IndexedColors.Black.Index; // 将字体颜色设置为黑色 - style.SetFont(font); - var nameRow = sheet?.GetRow(0); - if (nameRow != null) - { - Dictionary dic = new Dictionary(); - List columns = new List(); - columns = nameRow.Cells.Select(x => x.StringCellValue).ToList(); - columns.ForEach(x => - { - var strings = x.Split(new char[2] { '(', ')' }, StringSplitOptions.RemoveEmptyEntries); - x = strings[1]; - }); - if (columns?.Count > 0) - { - for (rowIndex = 1; rowIndex <= sheet?.LastRowNum; rowIndex++) - { - var row = sheet?.GetRow(rowIndex); - if (row != null) - { - foreach (var col in columns) - { - ICell cell = row.GetCell(columns.IndexOf(col)); - dic.Add(col, cell.StringCellValue); - } - dics.Add(dic); - } - } - if (dics == null) throw new AppFriendlyException("输入的数据为空", 500); - } - } - } - } - catch (Exception) - { - //return Task.FromResult(dics); - throw; - } - return Task.FromResult(dics); - } - - public async Task GenImportTemplate(params string[] fields) - { - return null; - } - } -} diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs index 9e529e65..2e8fd185 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmskittingOutService.cs @@ -37,6 +37,7 @@ using Tnb.WarehouseMgr.Entities.Dto; using Tnb.WarehouseMgr.Entities.Dto.Inputs; using Tnb.WarehouseMgr.Entities.Dto.Outputs; using Tnb.WarehouseMgr.Entities.Enums; +using Tnb.WarehouseMgr.Entities.Exceptions; using Tnb.WarehouseMgr.Interfaces; namespace Tnb.WarehouseMgr @@ -164,8 +165,15 @@ namespace Tnb.WarehouseMgr { JNPF.Logging.Log.Error("齐套出库,新增时出现错误", ex); await curDb.Ado.RollbackTranAsync(); + TimedTaskErrorInfo ei = new() + { + RequestURL = App.HttpContext?.Request?.Path, + RequestMethod = App.HttpContext?.Request?.Method, + userIdentity = curUser, + }; + var timedTaskEx = ex.ToTimedTaskException(ei); cts?.Cancel(); - throw; + throw timedTaskEx; } } /// @@ -265,8 +273,15 @@ namespace Tnb.WarehouseMgr catch (Exception ex) { JNPF.Logging.Log.Error("齐套出库,待配送时出现错误", ex); + TimedTaskErrorInfo ei = new() + { + RequestURL = App.HttpContext?.Request?.Path, + RequestMethod = App.HttpContext?.Request?.Method, + userIdentity = curUser, + }; + var timedTaskEx = ex.ToTimedTaskException(ei); cts?.Cancel(); - throw; + throw timedTaskEx; } } From dd0d37d7d9fccfc3e20f7ca7cbc030e452bf3b7c Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 10 Aug 2023 10:51:45 +0800 Subject: [PATCH 8/9] =?UTF-8?q?=E9=BD=90=E5=A5=97=E5=88=86=E6=8B=A3?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9E=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.WarehouseMgr/WmsSetSortingService.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs index 3057bba8..b63baf28 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSetSortingService.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Security.Claims; using System.Text; using System.Threading.Tasks; +using JNPF; using JNPF.Common.Const; using JNPF.Common.Core.Manager; using JNPF.Common.Enums; @@ -25,6 +26,7 @@ using Tnb.WarehouseMgr.Entities.Attributes; using Tnb.WarehouseMgr.Entities.Consts; using Tnb.WarehouseMgr.Entities.Dto; using Tnb.WarehouseMgr.Entities.Enums; +using Tnb.WarehouseMgr.Entities.Exceptions; using Tnb.WarehouseMgr.Interfaces; using UAParser; @@ -224,13 +226,15 @@ namespace Tnb.WarehouseMgr { JNPF.Logging.Log.Error("齐套分拣执行时出现错误", ex); await curDb.Ado.RollbackTranAsync(); - ErrorInfo ei = new() + TimedTaskErrorInfo ei = new() { - + RequestURL = App.HttpContext?.Request?.Path, + RequestMethod = App.HttpContext?.Request?.Method, + userIdentity = curUser, }; + var timedTaskEx = ex.ToTimedTaskException(ei); cts?.Cancel(); - - throw; + throw timedTaskEx; } } From 8db0c10e59a85137f1cbe55536acc988f645d4c3 Mon Sep 17 00:00:00 2001 From: FanLian Date: Thu, 10 Aug 2023 11:13:55 +0800 Subject: [PATCH 9/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LocationDefinitionService.cs | 38 +++++++++++-------- .../Tnb.WarehouseMgr/WmsCarryLedgerService.cs | 11 +++--- .../Tnb.WarehouseMgr/WmsPointService.cs | 1 - .../Tnb.WarehouseMgr/WmsRouteMgrService.cs | 4 -- 4 files changed, 29 insertions(+), 25 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/LocationDefinitionService.cs b/WarehouseMgr/Tnb.WarehouseMgr/LocationDefinitionService.cs index 4801470e..cf3716f8 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/LocationDefinitionService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/LocationDefinitionService.cs @@ -49,7 +49,17 @@ namespace Tnb.WarehouseMgr foreach (var d in dics) { var LCode = d["location_code"].ToString() ?? string.Empty; - if (LCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据起始点位编号不可为空", 500); + if (LCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据库位编号不可为空", 500); + var isType = d["is_type"].ToString() ?? string.Empty; + if (isType == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据库位类型不可为空", 500); + var floor = d["floor"].ToString() ?? string.Empty; + if (floor == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据楼层不可为空", 500); + var layers = d["layers"].ToString() ?? string.Empty; + var locLine = d["loc_line"].ToString() ?? string.Empty; + var locColumn = d["loc_column"].ToString() ?? string.Empty; + if (locLine == string.Empty || locColumn == string.Empty || layers == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据行列层不可为空", 500); + var isSign = d["is_sign"].ToString() ?? string.Empty; + if(isSign==string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据自动签收不可为空", 500); var cStdCode = d["carrystd_id"].ToString() ?? string.Empty; cStdCodes.Add(cStdCode); d["create_time"] = DateTime.Now; @@ -58,21 +68,19 @@ namespace Tnb.WarehouseMgr locs.Add(loc); } var carryStdDic = await _db.Queryable().Where(it => cStdCodes.Contains(it.carrystd_code)).ToDictionaryAsync(x => x.carrystd_code, x => x.id); - if (carryStdDic?.Count > 0) + locs.ForEach(x => { - locs.ForEach(x => - { - if (!carryStdDic.Keys.Contains(x.carrystd_id)) throw new AppFriendlyException($"第{locs.IndexOf(x) + 1}个数据的载具规格有误", 500); - x.id = SnowflakeIdHelper.NextId(); - x.org_id = _userManager.User.OrganizeId; - x.is_lock = 0; - x.carrystd_id = carryStdDic[x.carrystd_id].ToString() ?? throw new AppFriendlyException($"第{locs.IndexOf(x) + 1}个数据的载具规格有误", 500); - x.create_id = _userManager.UserId; - x.modify_id = null; - x.modify_time = null; - x.is_mix = 1; - }); - } + if (!carryStdDic.Keys.Contains(x.carrystd_id)) throw new AppFriendlyException($"第{locs.IndexOf(x) + 1}个数据的载具规格有误", 500); + x.id = SnowflakeIdHelper.NextId(); + x.org_id = _userManager.User.OrganizeId; + x.is_lock = 0; + x.carrystd_id = carryStdDic[x.carrystd_id].ToString() ?? throw new AppFriendlyException($"第{locs.IndexOf(x) + 1}个数据的载具规格有误", 500); + x.create_id = _userManager.UserId; + x.modify_id = null; + x.modify_time = null; + x.is_mix = 1; + }); + row = await _db.Insertable(locs).ExecuteCommandAsync(); } catch (Exception ex) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs index ead8cf04..7a455402 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs @@ -61,6 +61,7 @@ namespace Tnb.WarehouseMgr { List> dics = input.list; List carrys = new List(); + Dictionary? locs = null; List locCodes = new(); List cStdCodes = new(); WmsCarryH carryH = new WmsCarryH(); @@ -68,8 +69,7 @@ namespace Tnb.WarehouseMgr foreach (var d in dics) { var cStdCode = d["carrystd_id"].ToString() ?? string.Empty; - //if (cStdCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据载具规格不可为空", 500); - locCodes.Add(d["location_code"]?.ToString() ?? string.Empty); + locCodes.Add(d["location_code"].ToString() ?? string.Empty); cStdCodes.Add(cStdCode); d["create_time"] = DateTime.Now; d.Remove("modify_time"); @@ -77,18 +77,19 @@ namespace Tnb.WarehouseMgr carrys.Add(carryH); } var carryStdDic = await _db.Queryable().Where(it => cStdCodes.Contains(it.carrystd_code)).ToDictionaryAsync(x => x.carrystd_code, x => x.id); - var locs = await _db.Queryable().Where(it => locCodes.Contains(it.location_code)).ToDictionaryAsync(x => x.location_code, x => x.id); + if (locCodes?.Count > 0) + locs = await _db.Queryable().Where(it => locCodes.Contains(it.location_code)).ToDictionaryAsync(x => x.location_code, x => x.id); carrys.ForEach(x => { if (!carryStdDic.Keys.Contains(x.carrystd_id)) throw new AppFriendlyException($"第{carrys.IndexOf(x) + 1}个数据的载具规格有误", 500); - if (!locs.Keys.Contains(x.location_code)) throw new AppFriendlyException($"第{carrys.IndexOf(x) + 1}个数据的库位编号有误", 500); x.id = SnowflakeIdHelper.NextId(); x.org_id = _userManager.User.OrganizeId; x.status = 1; x.is_lock = 0; x.carrystd_id = carryStdDic[x.carrystd_id].ToString() ?? throw new AppFriendlyException($"第{carrys.IndexOf(x) + 1}个数据的载具规格有误", 500); x.carry_status = ((int)EnumCarryStatus.空闲).ToString(); - x.location_id = locs[x.location_code].ToString() ?? throw new AppFriendlyException($"第{carrys.IndexOf(x) + 1}个数据的库位编号有误", 500); + if (locs != null && x.location_code != null && x.location_code != string.Empty) + x.location_id = locs[x.location_code].ToString() ?? throw new AppFriendlyException($"第{carrys.IndexOf(x) + 1}个数据的库位编号有误", 500); x.out_status = ((int)EnumOutStatus.正常).ToString(); x.is_check = 1; x.create_id = _userManager.UserId; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs index d19f7bda..93cdfd12 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPointService.cs @@ -49,7 +49,6 @@ namespace Tnb.WarehouseMgr var floor = d["floor"].ToString() ?? string.Empty; if (pCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据点位编号不可为空", 500); if (pName == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据点位名称不可为空", 500); - //if (aCode == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据管理区编号不可为空", 500); if (floor == string.Empty) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据楼层不可为空", 500); aCodes.Add(aCode); d["create_time"] = DateTime.Now; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsRouteMgrService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsRouteMgrService.cs index f76686fa..de6e2ae4 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsRouteMgrService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsRouteMgrService.cs @@ -83,10 +83,6 @@ namespace Tnb.WarehouseMgr var eCode = d["endpoint_code"].ToString() ?? string.Empty; var dis = d["distance"].ToString() ?? string.Empty; if(sCode == eCode) throw new AppFriendlyException("起始点位不能等于终止点位", 500); - //if (sCode.IsEmpty()) - // throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据数据起始点位编号不可为空", 500); - //if (eCode.IsEmpty()) - // throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据终止点位编号不可为空", 500); if (dis.IsEmpty()) throw new AppFriendlyException($"第{dics.IndexOf(d) + 1}个数据距离不可为空", 500); pointCodes.Add(sCode);