Jelajahi Sumber

Excel工具类

zmq 2 tahun lalu
induk
melakukan
0034b33c3f

TEMPAT SAMPAH
src/hosts/ZhonTai.Host/wwwroot/link/linkcode.xlsx


+ 0 - 137
src/platform/ZhonTai.Admin/Core/Helpers/ExcelHelper.cs

@@ -1,137 +0,0 @@
-using OfficeOpenXml.Style;
-using OfficeOpenXml;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Threading.Tasks;
-using ZhonTai.Admin.Core.Dto;
-
-namespace ZhonTai.Admin.Core.Helpers
-{
-    public class ExcelHelper
-    {
-        //public static void DownloadExcel<T>(List<T> list, string sWebRootFolder, string FileName, bool isFirstCloumnName = true)
-        //{
-        //    try
-        //    {
-        //        //判断文件是否存在,不存在创建
-        //        if (!Directory.Exists(sWebRootFolder))
-        //            Directory.CreateDirectory(sWebRootFolder);
-
-        //        //创建默认文件
-        //        if (FileName.IsNull())
-        //        {
-        //            FileName = "Sheet1.xlsx";
-        //        }
-        //        if (!FileName.EndsWith(".xlsx"))
-        //        {
-        //            FileName += ".xlsx";
-        //        }
-        //        //判断同名文件
-        //        string filepath = Path.Combine(sWebRootFolder, FileName);
-        //        FileInfo file = new FileInfo(filepath);
-        //        if (file.Exists)
-        //        {
-        //            file.Delete();
-        //        }
-        //        using (ExcelPackage package = new ExcelPackage(file))
-        //        {
-        //            //添加 workesheet
-        //            ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(FileName);
-
-        //            //添加数据
-        //            PropertyInfo[] props = typeof(T).GetProperties();
-        //            for (int i = 0; i < list.Count; i++)
-        //            {
-        //                worksheet.Row(i + 1).CustomHeight = true;//自动调整行高
-        //                for (int j = 0; j < props.Length; j++)
-        //                {
-        //                    //设置第一列
-        //                    if (isFirstCloumnName && i == 0)
-        //                    {
-        //                        worksheet.Cells[i + 1, j + 1].Style.Font.Bold = true;
-        //                        //worksheet.Cells[i + 1, j + 1].Style.WrapText = true;                                
-        //                    }
-
-        //                    worksheet.Cells[1, 1].Style.Font.Size = 12;//字体大小
-        //                    worksheet.Cells[i + 1, j + 1].Style.Font.Name = "微软雅黑";//字体
-        //                    worksheet.Cells[i + 1, j + 1].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
-        //                    worksheet.Cells[i + 1, j + 1].Style.VerticalAlignment = ExcelVerticalAlignment.Center;
-        //                    //设置单元格内容 
-        //                    var v = props[j].GetValue(list[i]);
-        //                    string val = v == null ? "" : v.ToString();
-        //                    worksheet.Cells[i + 1, j + 1].Value = props[j].GetValue(list[i]);
-        //                }
-        //            }
-        //            worksheet.Cells.Style.ShrinkToFit = true;//单元格自动适应大小                    
-        //            package.Save();
-        //        }
-        //        return ResultOutput.Ok(filepath, "导出成功");
-        //    }
-        //    catch (Exception ex)
-        //    {
-        //        return ResultOutput.NotOk("导出失败");
-        //    }
-        //}
-
-        /// <summary>
-        /// 导入
-        /// </summary>
-        /// <typeparam name="T"></typeparam>
-        /// <param name="FileName"></param>
-        /// <returns></returns>
-        public static IEnumerable<T> LoadFromExcel<T>(string FileName) where T : new()
-        {
-            FileInfo existingFile = new FileInfo(FileName);
-            List<T> resultList = new List<T>();
-            Dictionary<string, int> dicHeader = new Dictionary<string, int>();
-            using (ExcelPackage package = new ExcelPackage(existingFile))
-            {
-                ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
-                int colstart = worksheet.Dimension.Start.Column;
-                int colend = worksheet.Dimension.End.Column;
-                int rowstart = worksheet.Dimension.Start.Row;
-                int rowend = worksheet.Dimension.End.Row;
-
-                for (int i = colstart; i <= colend; i++)
-                {
-                    dicHeader[worksheet.Cells[rowstart, i].Value.ToString()] = i;
-                }
-
-                List<PropertyInfo> propertyInfosList = new List<PropertyInfo>(typeof(T).GetProperties());
-                for (int row = rowstart + 1; row <= rowend; row++)
-                {
-                    T result = new T();
-                    foreach (PropertyInfo p in propertyInfosList)
-                    {
-                        try
-                        {
-                            ExcelRange cell = worksheet.Cells[row, dicHeader[p.Name]];
-                            if (cell.Value == null)
-                                continue;
-                            switch (p.PropertyType.Name.ToLower())
-                            {
-                                case "string":
-                                    p.SetValue(result, cell.GetValue<string>());
-                                    break;
-                                default:
-                                    break;
-                            }
-                        }
-                        catch (Exception)
-                        {
-
-                            throw;
-                        }
-                    }
-                    resultList.Add(result);
-                }
-            }
-            return resultList;
-        }
-    }
-}

+ 101 - 0
src/platform/ZhonTai.Admin/Core/Helpers/NOPIHelper.cs

@@ -0,0 +1,101 @@
+using Newtonsoft.Json;
+using NPOI.SS.UserModel;
+using NPOI.XSSF.UserModel;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ZhonTai.Admin.Core.Helpers
+{
+    /// <summary>
+    /// Excel帮助类
+    /// </summary>
+    public class NOPIHelper
+    {
+        public static DataTable ReadExcel(string path)
+        {
+            DataTable dtTable = new DataTable();
+            List<string> rowList = new List<string>();
+            ISheet sheet;
+            using (var stream = new FileStream(path, FileMode.Open))
+            {
+                stream.Position = 0;
+                XSSFWorkbook xssWorkbook = new XSSFWorkbook(stream);
+                sheet = xssWorkbook.GetSheetAt(0);
+                IRow headerRow = sheet.GetRow(0);
+                int cellCount = headerRow.LastCellNum;
+                for (int j = 0; j < cellCount; j++)
+                {
+                    ICell cell = headerRow.GetCell(j);
+                    if (cell == null || string.IsNullOrWhiteSpace(cell.ToString())) continue;
+                    {
+                        dtTable.Columns.Add(cell.ToString());
+                    }
+                }
+                for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
+                {
+                    IRow row = sheet.GetRow(i);
+                    if (row == null) continue;
+                    if (row.Cells.All(d => d.CellType == CellType.Blank)) continue;
+                    for (int j = row.FirstCellNum; j < cellCount; j++)
+                    {
+                        if (row.GetCell(j) != null)
+                        {
+                            if (!string.IsNullOrEmpty(row.GetCell(j).ToString()) && !string.IsNullOrWhiteSpace(row.GetCell(j).ToString()))
+                            {
+                                rowList.Add(row.GetCell(j).ToString());
+                            }
+                        }
+                    }
+                    if (rowList.Count > 0)
+                        dtTable.Rows.Add(rowList.ToArray());
+                    rowList.Clear();
+                }
+                xssWorkbook.Close();
+            }
+            return dtTable;
+        }
+        public static void WriteExcel(string json, string path)
+        {
+            var table = (DataTable)JsonConvert.DeserializeObject(json, (typeof(DataTable)));
+            var memoryStream = new MemoryStream();
+
+            using (var fs = new FileStream(path, FileMode.Create, FileAccess.Write))
+            {
+                IWorkbook workbook = new XSSFWorkbook();
+                ISheet excelSheet = workbook.CreateSheet("Sheet1");
+
+                List<String> columns = new List<string>();
+                IRow row = excelSheet.CreateRow(0);
+                int columnIndex = 0;
+
+                foreach (System.Data.DataColumn column in table.Columns)
+                {
+                    columns.Add(column.ColumnName);
+                    row.CreateCell(columnIndex).SetCellValue(column.ColumnName);
+                    columnIndex++;
+                }
+
+                int rowIndex = 1;
+                foreach (DataRow dsrow in table.Rows)
+                {
+                    row = excelSheet.CreateRow(rowIndex);
+                    int cellIndex = 0;
+                    foreach (String col in columns)
+                    {
+                        row.CreateCell(cellIndex).SetCellValue(dsrow[col].ToString());
+                        cellIndex++;
+                    }
+
+                    rowIndex++;
+                }
+                workbook.Write(fs);
+            }
+
+        }
+    }
+}

+ 1 - 0
src/platform/ZhonTai.Admin/Domain/Project/ProjectEntity.cs

@@ -44,6 +44,7 @@ namespace ZhonTai.Admin.Domain.Project
         /// <summary>
         /// 详情
         /// </summary>
+        [Column(DbType = " text")]
         public string Detail { get; set; }
         /// <summary>
         /// 作业要求

+ 4 - 0
src/platform/ZhonTai.Admin/Domain/ProjectLink/ProjectLinkEntity.cs

@@ -72,6 +72,10 @@ namespace ZhonTai.Admin.Domain.ProjectLink
         /// 业务员备注
         /// </summary>
         public string SalesmanRemark { get; set; }
+        /// <summary>
+        /// 查单链接
+        /// </summary>
+        public string QueryUrl { get; set; }
 
     }
 }

+ 5 - 1
src/platform/ZhonTai.Admin/Services/ProjectLink/Dto/LinkExcelInput.cs

@@ -8,6 +8,10 @@ namespace ZhonTai.Admin.Services.ProjectLink.Dto
 {
     public class LinkExcelInput
     {
-        public int MyProperty { get; set; }
+        public string Num { get; set; }
+        public string ShareCommand { get; set; }
+        public string ShortUrl { get; set; }
+        public string QrcodeUrl { get; set; }
+        public string QueryUrl { get; set; }
     }
 }

+ 28 - 2
src/platform/ZhonTai.Admin/Services/ProjectLink/ProjectLinkService.cs

@@ -16,18 +16,22 @@ using ZhonTai.Admin.Core.Dto;
 using ZhonTai.Admin.Core.Helpers;
 using ZhonTai.Admin.Domain.File;
 using ZhonTai.Admin.Domain.ProjectLink;
+using ZhonTai.Admin.Domain.Role;
 using ZhonTai.Admin.Repositories;
 using ZhonTai.Admin.Services.Project;
 using ZhonTai.Admin.Services.ProjectLink.Dto;
 using ZhonTai.Common.Files;
 using ZhonTai.Common.Helpers;
 using ZhonTai.DynamicApi;
+using ZhonTai.DynamicApi.Attributes;
 
 namespace ZhonTai.Admin.Services.ProjectLink
 {
     /// <summary>
     /// 项目推广码服务
     /// </summary>
+    [Order(10)]
+    [DynamicApi(Area = AdminConsts.AreaName)]
     public class ProjectLinkService : BaseService, IProjectLinkService, IDynamicApi
     {
         private IProjectLinkRepository _ProjectLinkRepository => LazyGetRequiredService<IProjectLinkRepository>();
@@ -103,7 +107,7 @@ namespace ZhonTai.Admin.Services.ProjectLink
             var localUploadConfig = _oSSConfig.LocalUploadConfig;
 
             var extention = Path.GetExtension(file.FileName).ToLower();
-            if (extention != "excel")
+            if (extention != ".xlsx")
             {
                 throw new Exception($"请上传excel格式文件");
             }
@@ -142,8 +146,30 @@ namespace ZhonTai.Admin.Services.ProjectLink
             }
             filePath = Path.Combine(env.WebRootPath, filePath).ToPath();
             await uploadHelper.SaveAsync(file, filePath);
+            
 
-            var list= ExcelHelper.LoadFromExcel<LinkExcelInput>(filePath);            
+             NOPIHelper.ReadExcel(filePath);
+        }
+        /// <summary>
+        /// 下载推广码模板
+        /// </summary>        
+        /// <returns></returns>        
+        [HttpGet]
+        public string DownLinkCodeAsync()
+        {
+            string fileDirectory = "link";            
+            var filePath = Path.Combine(fileDirectory, "linkcode.xlsx").ToPath();
+            
+            var env = LazyGetRequiredService<IWebHostEnvironment>();
+            var file = Path.Combine(env.WebRootPath, filePath).ToPath();
+            if (!System.IO.File.Exists(file))
+            {
+                throw new Exception($"推广码模板文件不存在");
+            }
+
+            var linkUrl = $"{_httpContextAccessor.HttpContext.Request.Scheme}://{_httpContextAccessor.HttpContext.Request.Host.Value}/{filePath}";
+           
+            return linkUrl;
         }
 
         ///// <summary>

+ 1 - 0
src/platform/ZhonTai.Admin/ZhonTai.Admin.csproj

@@ -15,6 +15,7 @@
 		<PackageReference Include="Autofac.Extras.DynamicProxy" Version="6.0.1" />
 		<PackageReference Include="Castle.Core.AsyncInterceptor" Version="2.1.0" />
 		<PackageReference Include="DotNetCore.CAP" Version="7.1.1" />
+		<PackageReference Include="DotNetCore.NPOI" Version="1.2.3" />
 		<PackageReference Include="FluentValidation.AspNetCore" Version="11.3.0" />
 		<PackageReference Include="FreeRedis" Version="1.0.8" />
 		<PackageReference Include="FreeRedis.DistributedCache" Version="1.0.5" />

+ 122 - 0
src/platform/ZhonTai.Admin/ZhonTai.Admin.xml

@@ -1903,6 +1903,11 @@
             输入模型验证过滤器
             </summary>
         </member>
+        <member name="T:ZhonTai.Admin.Core.Helpers.NOPIHelper">
+            <summary>
+            Excel帮助类
+            </summary>
+        </member>
         <member name="T:ZhonTai.Admin.Core.Helpers.UploadHelper">
             <summary>
             文件上传帮助类
@@ -3024,6 +3029,11 @@
             业务员备注
             </summary>
         </member>
+        <member name="P:ZhonTai.Admin.Domain.ProjectLink.ProjectLinkEntity.QueryUrl">
+            <summary>
+            查单链接
+            </summary>
+        </member>
         <member name="T:ZhonTai.Admin.Domain.Project.ProjectEntity">
             <summary>
             拉新项目
@@ -6817,6 +6827,118 @@
             映射配置
             </summary>
         </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectLink.Dto.ProjectLinkGetPageDto.IsUse">
+            <summary>
+            是否使用 1使用 0未使用
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectLink.Dto.ProjectLinkGetPageDto.Company">
+            <summary>
+            公司
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectLink.Dto.ProjectLinkGetPageDto.Keywords">
+            <summary>
+            关键字 编号,业务员姓名,手机号
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectLink.Dto.ProjectLinkListOutput.Company">
+            <summary>
+            公司(推广码来源)
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectLink.Dto.ProjectLinkListOutput.OrgName">
+            <summary>
+            所属平台
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectLink.Dto.ProjectLinkListOutput.QrcodeType">
+            <summary>
+            二维码类型
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectLink.Dto.ProjectLinkListOutput.Num">
+            <summary>
+            编号
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectLink.Dto.ProjectLinkListOutput.ShortUrl">
+            <summary>
+            短链
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectLink.Dto.ProjectLinkListOutput.QrcodeUrl">
+            <summary>
+            二维码链接
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectLink.Dto.ProjectLinkListOutput.ShareCommand">
+            <summary>
+            推广口令
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectLink.Dto.ProjectLinkListOutput.IsUse">
+            <summary>
+            是否使用 1使用
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectLink.Dto.ProjectLinkListOutput.UseTime">
+            <summary>
+            使用时间
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectLink.Dto.ProjectLinkListOutput.Salesman">
+            <summary>
+            业务员姓名
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectLink.Dto.ProjectLinkListOutput.SalesmanPhone">
+            <summary>
+            业务员手机号
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectLink.Dto.ProjectLinkListOutput.SalesmanProvince">
+            <summary>
+            业务员省
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectLink.Dto.ProjectLinkListOutput.SalesmanCity">
+            <summary>
+            业务员市
+            </summary>
+        </member>
+        <member name="P:ZhonTai.Admin.Services.ProjectLink.Dto.ProjectLinkListOutput.SalesmanRemark">
+            <summary>
+            业务员备注
+            </summary>
+        </member>
+        <member name="T:ZhonTai.Admin.Services.ProjectLink.ProjectLinkService">
+            <summary>
+            项目推广码服务
+            </summary>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.ProjectLink.ProjectLinkService.GetPageAsync(ZhonTai.Admin.Core.Dto.PageInput{ZhonTai.Admin.Services.ProjectLink.Dto.ProjectLinkGetPageDto})">
+            <summary>
+            查询分页
+            </summary>
+            <param name="input"></param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.ProjectLink.ProjectLinkService.UploadLinkAsync(Microsoft.AspNetCore.Http.IFormFile,System.Int64,System.String)">
+            <summary>
+            上传推广码文件
+            </summary>
+            <param name="file">文件</param>
+            <param name="ProjectId">文件目录</param>
+            <param name="Company">文件重命名</param>
+            <returns></returns>
+        </member>
+        <member name="M:ZhonTai.Admin.Services.ProjectLink.ProjectLinkService.DownLinkCodeAsync">
+            <summary>
+            下载推广码模板
+            </summary>        
+            <returns></returns>        
+        </member>
         <member name="P:ZhonTai.Admin.Services.Project.Dto.ProjectAddInput.Id">
             <summary>
             项目Id

+ 0 - 1
src/platform/ZhonTai.Common/ZhonTai.Common.csproj

@@ -11,7 +11,6 @@
   </PropertyGroup>
 
   <ItemGroup>
-	<PackageReference Include="EPPlus" Version="6.2.3" />
 	<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
 	<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
 	<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="7.0.0" />