diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs index 604345c6..84d82bf2 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs @@ -164,5 +164,9 @@ public class ModuleConsts /// 模块标识-载具台账 /// public const string MODULE_WMSCARRY_ID = "26038721525029"; + /// + /// 模块标识-仓库定义 + /// + public const string MODULE_WMSWAREHOUSEDEFINITION_ID = "25905106252053"; } \ No newline at end of file diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs index 7422b364..9961055d 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs @@ -16,6 +16,7 @@ using JNPF.Common.Extension; using JNPF.DataEncryption; using JNPF.DependencyInjection; using JNPF.DynamicApiController; +using JNPF.Extras.CollectiveOAuth.Enums; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; @@ -92,15 +93,16 @@ namespace Tnb.WarehouseMgr } return Task.FromResult(isMatch); } + /// /// 解析Excel到内存 /// /// /// - protected Task> ImportExcelToMemory(IFormFile file) + protected Task>> ImportExcelToMemory(IFormFile file) { int rowIndex = 1; - Dictionary dic = new(); + List> dics = new(); IWorkbook? workbook = null; try { @@ -122,13 +124,18 @@ namespace Tnb.WarehouseMgr ICellStyle style = workbook.CreateCellStyle(); IFont font = workbook.CreateFont(); - font.Color = IndexedColors.Red.Index; // 将字体颜色设置为红色 + 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] { '(', ')' }); + x = strings[1]; + }); if (columns?.Count > 0) { for (rowIndex = 1; rowIndex <= sheet?.LastRowNum; rowIndex++) @@ -141,17 +148,55 @@ namespace Tnb.WarehouseMgr ICell cell = row.GetCell(columns.IndexOf(col)); dic.Add(col, cell.StringCellValue); } + dics.Add(dic); } } } } + } } catch (Exception) { + throw; } - return Task.FromResult(dic); + + return Task.FromResult(dics); + } + + /// + /// WMS导入模板 + /// + /// + /// + /// + protected dynamic WmsTemplate(Dictionary dic, string sheetName) + { + XSSFWorkbook workbook = new XSSFWorkbook(); + ISheet sheet = workbook.CreateSheet(sheetName); + IRow nRow = sheet.CreateRow(0); + IRow dRow = sheet.CreateRow(1); + dRow.Hidden = true; + dic.Remove("id"); + dic.Remove("create_id"); + dic.Remove("create_time"); + //sheet.SetColumnHidden(1, true); + for (int i = 0; i < dic?.Count; i++) + { + ICell cell1 = nRow.CreateCell(i); + cell1.SetCellValue(dic.Values.GetIndex(i)); + ICell cell2 = dRow.CreateCell(i); + cell2.SetCellValue(dic.Keys.GetIndex(i)); + } + + MemoryStream ms = new MemoryStream(); + + workbook.Write(ms); + MemoryStream ms2 = new MemoryStream(ms.ToArray()); + ms2.Position = 0; + FileStreamResult fileStreamResult = new FileStreamResult(ms2, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = "template.xlsx" }; + return fileStreamResult; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs index 2e35df68..d6967c4b 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryLedgerService.cs @@ -19,6 +19,12 @@ using JNPF.VisualDev.Entitys; using Aspose.Cells.Drawing; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Http; +using JNPF.Logging; +using JNPF.FriendlyException; +using JNPF.Common.Security; +using Tnb.BasicData.Entities; +using Mapster; +using Aop.Api.Domain; namespace Tnb.WarehouseMgr { @@ -32,19 +38,84 @@ namespace Tnb.WarehouseMgr private readonly ISqlSugarClient _db; private readonly IRunService _runService; private readonly IVisualDevService _visualDevService; - public WmsCarryLedgerService(ISqlSugarRepository repository, IRunService runService, IVisualDevService visualDevService) + private readonly IUserManager _userManager; + public WmsCarryLedgerService(ISqlSugarRepository repository, IRunService runService, IVisualDevService visualDevService,IUserManager userManager) { _db = repository.AsSugarClient(); _runService = runService; _visualDevService = visualDevService; + _userManager = userManager; OverideFuncs.ImportAsync = DataImport; } + /// + /// 载具导入 + /// + /// + /// private async Task DataImport(IFormFile file) { + int row = 0; + try + { + //例1 获取所有表 - return Task.FromResult(null); + List> dics = await ImportExcelToMemory(file); + List carrys = new List(); + var carryStdDic = await _db.Queryable().ToDictionaryAsync(x => x.carrystd_code, x => x.id); + List locCodes = new(); + WmsCarryH carryH = new WmsCarryH(); + if (carryStdDic?.Count > 0) + { + string carryStdId = string.Empty; + foreach (var d in dics) + { + var stdCodeKey = d["carrystd_id"].ToString(); + carryStdId = carryStdDic.ContainsKey(stdCodeKey) ? carryStdDic[stdCodeKey]?.ToString() ?? "" : ""; + d.Add("carrystd_code", stdCodeKey??""); + d["carrystd_id"] = carryStdId; + locCodes.Add(d["location_code"]?.ToString() ?? string.Empty); + carryH = d.Adapt(); + carrys.Add(carryH); + } + if (!locCodes.IsNullOrEmpty()) + { + var locs = await _db.Queryable().Where(it => locCodes.Contains(it.location_code)).ToDictionaryAsync(x => x.location_code, x => x.id); + foreach (var loc in locCodes) + { + var c = carrys.Find(x => x.location_code == loc); + if (c != null) + c.location_id = locs[loc].ToString(); + + } + } + carrys.ForEach(x => + { + x.id = SnowflakeIdHelper.NextId(); + x.org_id = _userManager.User.OrganizeId; + x.status = 1; + x.is_lock = 0; + x.carry_status = ((int)EnumCarryStatus.空闲).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(); + row = await _db.Insertable(carrys).ExecuteCommandAsync(); + await _db.Ado.CommitTranAsync(); + } + catch (Exception ex) + { + await _db.Ado.RollbackTranAsync(); + Log.Error("导入失败", ex); + throw Oops.Bah("导入失败"); + } + return row > 0; } - } } + diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsImportAndExportService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsImportAndExportService.cs index 7c155c53..79d92592 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsImportAndExportService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsImportAndExportService.cs @@ -14,6 +14,7 @@ using JNPF.Common.Models; using JNPF.Common.Security; using JNPF.Extras.CollectiveOAuth.Enums; using JNPF.FriendlyException; +using JNPF.Logging; using Mapster; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; @@ -24,6 +25,7 @@ using NPOI.XSSF.UserModel; using SqlSugar; using Tnb.BasicData.Entities; using Tnb.WarehouseMgr.Entities; +using Tnb.WarehouseMgr.Entities.Enums; namespace Tnb.WarehouseMgr { @@ -49,189 +51,15 @@ namespace Tnb.WarehouseMgr public async Task CarryImportTemplate() { int row = 0; - Dictionary dic = new Dictionary(); - dic.Add("carry_code","载具编号"); - dic.Add("carry_name","载具名称" ); - dic.Add("carrystd_id","载具规格" ); + Dictionary dic = new Dictionary(); + dic.Add("carry_code", "载具编号"); + dic.Add("carry_name", "载具名称"); + dic.Add("carrystd_id", "载具规格"); //headers = _db.DbMaintenance.GetColumnInfosByTableName("wms_carry_h").FindAll(x=>!x.IsNullable).ToDictionary(x => x.DbColumnName ,x => x.ColumnDescription); FileStreamResult fileStreamResult = WmsTemplate(dic, "载具台账"); return fileStreamResult; } - /// - /// 载具导入 - /// - /// - /// - [HttpPost] - public async Task CarryImport(IFormFile file) - { - int row = 0; - try - { - //例1 获取所有表 - - Dictionary dic = WmsImport(file); - List carrys = new List(); - var carryStdDic = await _db.Queryable().ToDictionaryAsync(x => x.carrystd_code, x => x.id); - List locCodes = new(); - WmsCarryH carryH = new WmsCarryH(); - if (carryStdDic?.Count > 0) - { - string carryStdId = string.Empty; - foreach (var d in dic) - { - var stdCodeKey = d.Key; - carryStdId = carryStdDic.ContainsKey(stdCodeKey) ? carryStdDic[stdCodeKey]?.ToString() ?? "" : ""; - d.Add("carrystd_id", carryStdId); - locCodes.Add(d); - carryH = d.Adapt(); - carrys.Add(carryH); - } - if (locCodes != null) - { - var locs = await _db.Queryable().Where(it => locCodes.Contains(it.location_code)).ToDictionaryAsync(x => x.location_code, x => x.id); - foreach (var loc in locCodes) - { - var c = carrys.Find(x => x.location_code == loc); - if (c != null) - c.location_id = locs[loc].ToString(); - } - } - carrys.ForEach(x => - { - x.id = SnowflakeIdHelper.NextId(); - x.create_id = _userManager.UserId; - x.create_time = DateTime.Now; - }); - } - row = await _db.Storageable(carrys).ExecuteCommandAsync(); - } - catch (Exception) - { - throw; - } - return row > 0; - } - - public async Task DataImport(IFormFile file,Func> getColumns) where T : BaseEntity, new() - { - var nonBeNullColumnList = new List(); - var entityInfo = _db.EntityMaintenance.GetEntityInfo(); - foreach (var column in entityInfo.Columns) - { - if (!column.IsNullable) - { - nonBeNullColumnList.Add(column.DbColumnName); - } - } - var importData = WmsImport(file); //ImportExcelToMemory where T:BaseEntity,new() - var fillColumns = nonBeNullColumnList.Except(importData.Keys).ToList(); - if (fillColumns?.Count > 0) - { - - } - - } - - - /// - /// WMS导入 - /// - /// - private static Dictionary WmsImport(IFormFile file) - { - int rowIndex = 1; - Dictionary dic = 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.Red.Index; // 将字体颜色设置为红色 - style.SetFont(font); - var nameRow = sheet?.GetRow(0); - if (nameRow != null) - { - List columns = new List(); - columns = nameRow.Cells.Select(x => x.StringCellValue).ToList(); - 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); - } - } - } - } - } - - } - } - catch (Exception) - { - - throw; - } - - return dic; - } - - /// - /// WMS导入模板 - /// - /// - /// - /// - private static dynamic WmsTemplate(Dictionary dic, string sheetName) - { - XSSFWorkbook workbook = new XSSFWorkbook(); - ISheet sheet = workbook.CreateSheet(sheetName); - IRow nRow = sheet.CreateRow(0); - IRow dRow = sheet.CreateRow(1); - dRow.Hidden = true; - dic.Remove("id"); - dic.Remove("create_id"); - dic.Remove("create_time"); - //sheet.SetColumnHidden(1, true); - for (int i = 0; i < dic?.Count; i++) - { - ICell cell1 = nRow.CreateCell(i); - cell1.SetCellValue(dic.Values.GetIndex(i)); - ICell cell2 = dRow.CreateCell(i); - cell2.SetCellValue(dic.Keys.GetIndex(i)); - } - - MemoryStream ms = new MemoryStream(); - - workbook.Write(ms); - MemoryStream ms2 = new MemoryStream(ms.ToArray()); - ms2.Position = 0; - FileStreamResult fileStreamResult = new FileStreamResult(ms2, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = "template.xlsx" }; - return fileStreamResult; - } } }