From f8cb21b5c8484b8ddd66c1cc68806c516919176a Mon Sep 17 00:00:00 2001 From: dengyu Date: Thu, 12 Sep 2024 18:03:42 +0800 Subject: [PATCH 1/2] 20240912 --- .../DS.Module.ExcelModule/EPPlusService.cs | 179 ++++++++++++++++++ .../DS.Module.ExcelModule/ExcelService.cs | 1 + .../DS.Module.ExcelModule/IEPPlusService.cs | 19 ++ .../DS.Module.Nuget/DS.Module.Nuget.csproj | 2 + .../Method/CM_BaseInfoService.cs | 13 ++ ds-wms-service/DS.WMS.Core/DS.WMS.Core.csproj | 1 + 6 files changed, 215 insertions(+) create mode 100644 ds-wms-service/DS.Module.ExcelModule/EPPlusService.cs create mode 100644 ds-wms-service/DS.Module.ExcelModule/IEPPlusService.cs diff --git a/ds-wms-service/DS.Module.ExcelModule/EPPlusService.cs b/ds-wms-service/DS.Module.ExcelModule/EPPlusService.cs new file mode 100644 index 00000000..608dbd9d --- /dev/null +++ b/ds-wms-service/DS.Module.ExcelModule/EPPlusService.cs @@ -0,0 +1,179 @@ +using DS.Module.Core; +using DS.Module.ExcelModule.Model; +using LanguageExt.ClassInstances; +using LanguageExt; +using Microsoft.AspNet.SignalR.Hubs; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.DependencyInjection; +using MiniExcelLibs; +using Newtonsoft.Json.Linq; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NPOI.SS.UserModel; +using OfficeOpenXml; +using System.Data; +using Spire.Xls; + +namespace DS.Module.ExcelModule +{ + public class EPPlusService : IEPPlusService + { + private readonly IServiceProvider _serviceProvider; + private static string GetString(object obj) + { + try + { + if (obj == null) return ""; + return obj.ToString(); + } + catch (Exception ex) + { + return ""; + } + } + + /// + ///将指定的Excel的文件转换成DataTable (Excel的第一个sheet) + /// + /// 文件的绝对路径 + /// + public DataTable WorksheetToTable(string fullFielPath, int SheetIndex = 1) + { + try + { + string[] PathNames = fullFielPath.Split(new string[] { @"/" }, StringSplitOptions.RemoveEmptyEntries); + var ExcelFileName = PathNames[PathNames.Length - 1]; + + if (ExcelFileName.EndsWith(".xls")) + { + + var newExcelFileName = PathNames[PathNames.Length - 1].Replace(".xls", ".xlsx"); + + var _newFileFullname = Path.GetDirectoryName(fullFielPath) + "/" + newExcelFileName; + + Workbook book = new Workbook(); + book.LoadFromFile(fullFielPath); + book.SaveToFile(_newFileFullname, ExcelVersion.Version2013); + + fullFielPath = _newFileFullname; + } + + + FileInfo existingFile = new FileInfo(fullFielPath); + + ExcelPackage package = new ExcelPackage(existingFile); + ExcelWorksheet worksheet = package.Workbook.Worksheets[SheetIndex];//选定 指定页 + + return WorksheetToTable(worksheet); + } + catch (Exception e) + { + throw; + } + } + + public DataTable WorksheetToTable_NoTitle(string fullFielPath, int SheetIndex = 1) + { + try + { + string[] PathNames = fullFielPath.Split(new string[] { @"/" }, StringSplitOptions.RemoveEmptyEntries); + var ExcelFileName = PathNames[PathNames.Length - 1]; + + if (ExcelFileName.EndsWith(".xls")) + { + + var newExcelFileName = PathNames[PathNames.Length - 1].Replace(".xls", ".xlsx"); + + var _newFileFullname = Path.GetDirectoryName(fullFielPath) + "/" + newExcelFileName; + + Workbook book = new Workbook(); + book.LoadFromFile(fullFielPath); + book.SaveToFile(_newFileFullname, ExcelVersion.Version2013); + + fullFielPath = _newFileFullname; + } + + + FileInfo existingFile = new FileInfo(fullFielPath); + + ExcelPackage package = new ExcelPackage(existingFile); + ExcelWorksheet worksheet = package.Workbook.Worksheets[SheetIndex];//选定 指定页 + + return WorksheetToTable_NoTitle(worksheet); + } + catch (Exception e) + { + throw; + } + } + + /// + /// 将worksheet转成datatable + /// + /// 待处理的worksheet + /// 返回处理后的datatable + public DataTable WorksheetToTable(ExcelWorksheet worksheet) + { + //获取worksheet的行数 + int rows = worksheet.Dimension.End.Row; + //获取worksheet的列数 + int cols = worksheet.Dimension.End.Column; + + DataTable dt = new DataTable(worksheet.Name); + DataRow dr = null; + for (int i = 1; i <= rows; i++) + { + if (i > 1) + dr = dt.Rows.Add(); + + for (int j = 1; j <= cols; j++) + { + //默认将第一行设置为datatable的标题 + if (i == 1) + dt.Columns.Add(GetString(worksheet.Cells[i, j].Value)); + //剩下的写入datatable + else + dr[j - 1] = GetString(worksheet.Cells[i, j].Value); + } + } + return dt; + } + + public DataTable WorksheetToTable_NoTitle(ExcelWorksheet worksheet) + { + //获取worksheet的行数 + int rows = worksheet.Dimension.End.Row; + //获取worksheet的列数 + int cols = worksheet.Dimension.End.Column; + + DataTable dt = new DataTable(worksheet.Name); + DataRow dr = null; + for (int i = 1; i <= rows; i++) + { + //if (i > 1) + dr = dt.Rows.Add(); + + for (int j = 1; j <= cols; j++) + { + //默认将第一行设置为datatable的标题 + if (i == 1) + { + dt.Columns.Add(GetString(worksheet.Cells[i, j].Value)); + dr[j - 1] = GetString(worksheet.Cells[i, j].Value); + } + //剩下的写入datatable + else + { + dr[j - 1] = GetString(worksheet.Cells[i, j].Value); + } + } + } + return dt; + } + + } +} diff --git a/ds-wms-service/DS.Module.ExcelModule/ExcelService.cs b/ds-wms-service/DS.Module.ExcelModule/ExcelService.cs index 9b00c669..0039da56 100644 --- a/ds-wms-service/DS.Module.ExcelModule/ExcelService.cs +++ b/ds-wms-service/DS.Module.ExcelModule/ExcelService.cs @@ -56,6 +56,7 @@ namespace DS.Module.ExcelModule return DataResult.Success(path); } + public MemoryStream ExportExcelStreamByColumn(ExportByColumnReq req) { var filename = Guid.NewGuid() + ".xlsx"; diff --git a/ds-wms-service/DS.Module.ExcelModule/IEPPlusService.cs b/ds-wms-service/DS.Module.ExcelModule/IEPPlusService.cs new file mode 100644 index 00000000..63ce5f30 --- /dev/null +++ b/ds-wms-service/DS.Module.ExcelModule/IEPPlusService.cs @@ -0,0 +1,19 @@ +using DS.Module.Core; +using DS.Module.ExcelModule.Model; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DS.Module.ExcelModule +{ + public interface IEPPlusService + { + public DataTable WorksheetToTable(string fullFielPath, int SheetIndex = 1); + + public DataTable WorksheetToTable_NoTitle(string fullFielPath, int SheetIndex = 1); + } +} diff --git a/ds-wms-service/DS.Module.Nuget/DS.Module.Nuget.csproj b/ds-wms-service/DS.Module.Nuget/DS.Module.Nuget.csproj index f8d32785..77021e1e 100644 --- a/ds-wms-service/DS.Module.Nuget/DS.Module.Nuget.csproj +++ b/ds-wms-service/DS.Module.Nuget/DS.Module.Nuget.csproj @@ -15,6 +15,7 @@ + @@ -50,6 +51,7 @@ + diff --git a/ds-wms-service/DS.WMS.Core/ContainerManagement/Method/CM_BaseInfoService.cs b/ds-wms-service/DS.WMS.Core/ContainerManagement/Method/CM_BaseInfoService.cs index 962f0b72..b6e787af 100644 --- a/ds-wms-service/DS.WMS.Core/ContainerManagement/Method/CM_BaseInfoService.cs +++ b/ds-wms-service/DS.WMS.Core/ContainerManagement/Method/CM_BaseInfoService.cs @@ -17,7 +17,11 @@ using DS.WMS.Core.Sys.Entity; using Mapster; using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json; +using NPOI.HPSF; using SqlSugar; +using DS.Module; +using DS.Module.ExcelModule; +using DS.Module.ExcelModule.Model; namespace DS.WMS.ContainerManagement.Info.Method; @@ -27,6 +31,7 @@ public class CM_BaseInfoService : ICM_BaseInfoService private readonly ISqlSugarClient db; private readonly IUser user; private readonly ISaasDbService saasService; + private readonly IEPPlusService epplusService; /// /// @@ -38,6 +43,7 @@ public class CM_BaseInfoService : ICM_BaseInfoService db = _serviceProvider.GetRequiredService(); user = _serviceProvider.GetRequiredService(); saasService = _serviceProvider.GetRequiredService(); + epplusService = _serviceProvider.GetRequiredService(); } /// @@ -264,6 +270,11 @@ public class CM_BaseInfoService : ICM_BaseInfoService /// public DataResult CM_DealExcel(CM_DealExcelReq req) { + + var _dt = epplusService.WorksheetToTable("excel文件地址"); + + + return DataResult.Successed($"调用成功!{JsonConvert.SerializeObject(req)}", MultiLanguageConst.DataUpdateSuccess); var tenantDb = saasService.GetBizDbScopeById(user.TenantId); @@ -280,6 +291,8 @@ public class CM_BaseInfoService : ICM_BaseInfoService { return DataResult.Successed($"", MultiLanguageConst.DataUpdateSuccess); + + var tenantDb = saasService.GetBizDbScopeById(user.TenantId); diff --git a/ds-wms-service/DS.WMS.Core/DS.WMS.Core.csproj b/ds-wms-service/DS.WMS.Core/DS.WMS.Core.csproj index abd819bc..abc0c171 100644 --- a/ds-wms-service/DS.WMS.Core/DS.WMS.Core.csproj +++ b/ds-wms-service/DS.WMS.Core/DS.WMS.Core.csproj @@ -45,6 +45,7 @@ + From 782136f26be365206d6430b582190109c010097a Mon Sep 17 00:00:00 2001 From: jianghaiqing Date: Thu, 12 Sep 2024 18:41:52 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=98=93=E9=80=9A?= =?UTF-8?q?=E6=88=AA=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DS.WMS.Core/Op/EDI/YTEdiHelper.cs | 24 +++++++++++++------ .../SeaExportBookingOrClosingEDIService.cs | 23 +++++++++++------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/ds-wms-service/DS.WMS.Core/Op/EDI/YTEdiHelper.cs b/ds-wms-service/DS.WMS.Core/Op/EDI/YTEdiHelper.cs index 624ec52a..f3a07dc7 100644 --- a/ds-wms-service/DS.WMS.Core/Op/EDI/YTEdiHelper.cs +++ b/ds-wms-service/DS.WMS.Core/Op/EDI/YTEdiHelper.cs @@ -431,6 +431,11 @@ namespace DS.WMS.Core.Op.EDI } } + if (!new string[] { "ORI", "TER", "EXP" }.Contains(headData.ISSUETYPE)) + { + error = error + "
提单号:" + headData.MBLNO + "签单方式未识别"; + } + if (string.IsNullOrEmpty(headData.DESCRIPTION)) { error = error + "
提单号:" + headData.MBLNO + " 货物描述不能为空"; @@ -831,15 +836,20 @@ namespace DS.WMS.Core.Op.EDI } else ISSUETYPE = "EXP"; */ - if (bill.ISSUETYPE == "ORIGINAL") - { - ISSUETYPE = "ORI"; - } - else if (bill.ISSUETYPE == "TELEX") + //if (bill.ISSUETYPE == "ORIGINAL") + //{ + // ISSUETYPE = "ORI"; + //} + //else if (bill.ISSUETYPE == "TELEX") + //{ + // ISSUETYPE = "TER"; + //} + //else ISSUETYPE = "EXP"; + + if(new string[] { "ORI", "TER", "EXP" }.Contains(bill.ISSUETYPE)) { - ISSUETYPE = "TER"; + ISSUETYPE = bill.ISSUETYPE; } - else ISSUETYPE = "EXP"; r.WriteLine("03:" + ISSUETYPE + ":" + bill.ISSUEPLACEID.Trim() + ":" + bill.ISSUEPLACE.Trim() + ":" + GetDateStr(bill.ISSUEDATE, "yyyyMMdd") + ":" + GetBillNum2(bill.NOBILL) + ":" + bill.PREPARDAT + ":" + bill.PAYABLEAT + "'"); icount++; diff --git a/ds-wms-service/DS.WMS.Core/Op/Method/SeaExportBookingOrClosingEDIService.cs b/ds-wms-service/DS.WMS.Core/Op/Method/SeaExportBookingOrClosingEDIService.cs index 91e7f764..a3641dda 100644 --- a/ds-wms-service/DS.WMS.Core/Op/Method/SeaExportBookingOrClosingEDIService.cs +++ b/ds-wms-service/DS.WMS.Core/Op/Method/SeaExportBookingOrClosingEDIService.cs @@ -1383,12 +1383,19 @@ namespace DS.WMS.Core.Op.Method #region 签单方式EDI ////签单方式EDI - if (!string.IsNullOrWhiteSpace(order.IssueType)) + if (!string.IsNullOrWhiteSpace(order.IssueTypeCode)) { - long issueTypeId = long.Parse(order.IssueType); + //long issueTypeId = long.Parse(order.IssueType); + + var codeIssue = tenantDb.Queryable().First(t => t.EdiCode == order.IssueTypeCode); + + if (codeIssue == null) + { + return DataResult.Failed($"签单方式{order.IssueTypeCode}的基础代码未找到"); + } var mapInfo = tenantDb.Queryable() - .First(t => t.Module.Equals(CONST_MAPPING_MODULE, StringComparison.OrdinalIgnoreCase) && t.CarrierId == order.CarrierId && t.Id == issueTypeId); + .First(t => t.Module.Equals(CONST_MAPPING_MODULE, StringComparison.OrdinalIgnoreCase) && t.CarrierId == order.CarrierId && t.LinkId == codeIssue.Id); if (mapInfo != null) { @@ -1397,15 +1404,13 @@ namespace DS.WMS.Core.Op.Method else { //签单方式EDI - var codeService = tenantDb.Queryable().First(x => x.Status == StatusEnum.Enable && x.Id == issueTypeId); - - if (codeService != null && !string.IsNullOrWhiteSpace(codeService.EdiCode)) + if (codeIssue != null && !string.IsNullOrWhiteSpace(codeIssue.EdiCode)) { - primaryModel.ISSUETYPE = codeService.EdiCode; + primaryModel.ISSUETYPE = codeIssue.EdiCode; } else { - return DataResult.Failed($"签单方式{order.Service}的基础代码未找到"); + return DataResult.Failed($"签单方式{order.Service}的基础代码 EdiCode 未配置"); } } } @@ -1512,7 +1517,7 @@ namespace DS.WMS.Core.Op.Method primaryModel.EDIATTNEMAIL = ediExtModel.EDIAttnMail; - if (string.IsNullOrWhiteSpace(primaryModel.EDIATTNEMAIL)) + if (string.IsNullOrWhiteSpace(primaryModel.EDIATTNEMAIL) && ediRouteEnum != EDIRouteEnum.YT) { primaryModel.EDIATTNEMAIL = ftpSet.SendEmail; }