using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading.Tasks; using DingTalk.Api.Request; using JNPF.Common.Configuration; using JNPF.Common.Contracts; using JNPF.Common.Core.Manager; using JNPF.Common.Extension; using JNPF.Common.Helper; using JNPF.Common.Models; using JNPF.Common.Security; using JNPF.Extras.CollectiveOAuth.Enums; using JNPF.FriendlyException; using Mapster; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using NPOI.HPSF; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using SqlSugar; using Tnb.BasicData.Entities; using Tnb.WarehouseMgr.Entities; namespace Tnb.WarehouseMgr { /// /// 导入和导出接口服务提供类 /// public class WmsImportAndExportService : BaseWareHouseService { private readonly ISqlSugarClient _db; private readonly IUserManager _userManager; public WmsImportAndExportService(ISqlSugarRepository repository, IUserManager userManager) { _db = repository.AsSugarClient(); _userManager = userManager; } /// /// 载具导入模板 /// /// /// [HttpPost] public async Task CarryImportTemplate() { int row = 0; 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; } } }