增加导出excel清单逻辑,修改下载时直接通过minio取base64数据

master
孙亮 1 year ago
parent dbbaaad852
commit ae9a7b9d11

@ -0,0 +1,72 @@
using IBKLinker_Minio.Entity;
using log4net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
using Minio;
using System.Net.PeerToPeer;
using System.IO;
using System.Reactive.Linq;
using Minio.DataModel;
using System.Security.AccessControl;
using System.IO.Pipes;
using System.Net.Mime;
using IBKLinker_Minio.Entity.MinioController;
using SOA.Objects;
using SOA.Persistent;
using System.Web.Http.Results;
using System.Runtime.InteropServices.ComTypes;
using System.Xml;
using Swashbuckle.Swagger;
using System.Runtime.ConstrainedExecution;
using System.Net.Http;
using System.Web.UI.WebControls;
using System.Runtime.Remoting.Contexts;
using System.Runtime.InteropServices;
using System.Net;
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
using System.Net.Http.Headers;
using NPOI.SS.Formula.Functions;
using System.Xml.Linq;
using NPOI.HPSF;
namespace IBKLinker_Minio.Common
{
/// <summary>
/// 作者:孙亮
/// 编写时间2023-10-13
/// 编写内容minio业务逻辑
/// </summary>
public class MinioBusinessLogic
{
private static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public async Task<string> Download(string bucketName, string path)
{
MemoryStream memoryStream = new MemoryStream();
try
{
var minio = new MinioClient("172.15.88.212:9000", "minioadmin", "minioadmin");//验证连接minio数据库
bucketName = "dayetegang";//桶名
await minio.GetObjectAsync(bucketName, path, (stream) =>
{
stream.CopyTo(memoryStream);//将文件去除复制到memoryStream
});
memoryStream.Position = 0;//清除
string base64String = Convert.ToBase64String(memoryStream.ToArray());//转换base64
return base64String;//返回值
}
catch (Exception ex)
{
logger.InfoFormat(ex.ToString());
throw;
}
}
}
}

@ -27,6 +27,14 @@ using System.Net.Http;
using System.Web.UI.WebControls; using System.Web.UI.WebControls;
using System.Runtime.Remoting.Contexts; using System.Runtime.Remoting.Contexts;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Net;
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;
using System.Net.Http.Headers;
using NPOI.SS.Formula.Functions;
using System.Xml.Linq;
using NPOI.HPSF;
using IBKLinker_Minio.Common;
namespace IBKLinker_Minio.Controller.MinioController namespace IBKLinker_Minio.Controller.MinioController
{ {
@ -842,6 +850,7 @@ namespace IBKLinker_Minio.Controller.MinioController
foreach (var item in date) foreach (var item in date)
{ {
RequstStoragePath model = new RequstStoragePath(); RequstStoragePath model = new RequstStoragePath();
model.Pk = item.Pk; model.Pk = item.Pk;
model.FileName = item.FileName; model.FileName = item.FileName;
model.FilePate = item.FilePath; model.FilePate = item.FilePath;
@ -925,6 +934,7 @@ namespace IBKLinker_Minio.Controller.MinioController
[HttpPost, Route("FileDownload")] [HttpPost, Route("FileDownload")]
public RequestEntity FileDownload(List<MinioStoragePath> minioStoragePath) public RequestEntity FileDownload(List<MinioStoragePath> minioStoragePath)
{ {
MinioBusinessLogic bb = new MinioBusinessLogic();
RequestEntity request = new RequestEntity(); RequestEntity request = new RequestEntity();
MinioStoragePath data = new MinioStoragePath(); MinioStoragePath data = new MinioStoragePath();
using (IDbContext db = ObjectContainer.GetObject<IDbContext>("db")) using (IDbContext db = ObjectContainer.GetObject<IDbContext>("db"))
@ -935,26 +945,19 @@ namespace IBKLinker_Minio.Controller.MinioController
{ {
foreach (var item in minioStoragePath) foreach (var item in minioStoragePath)
{ {
var minio = new MinioClient("172.15.88.212:9000", "minioadmin", "minioadmin"); var minio = new MinioClient("172.15.88.212:9000", "minioadmin", "minioadmin");
string bucketName = "dayetegang"; string bucketName = "dayetegang";
string downloadpath = "D:/linshi"; var uploadTask = bb.Download(bucketName, item.FileName);//异步取base64
if (System.IO.Directory.Exists(@downloadpath) == false)//如果不存在就创建文件夹 uploadTask.Wait();//等待取值
if (uploadTask.Status == TaskStatus.RanToCompletion && !uploadTask.IsFaulted) //判读是否由数值
{ {
System.IO.Directory.CreateDirectory(@downloadpath); data.Bate64 = uploadTask.Result;
}
minio.GetObjectAsync(bucketName, item.FileName, downloadpath +"/"+ item.FileName);//先将minio数据库中的文件存储到本地
bool fileExist = File.Exists(downloadpath + "/" + item.FileName);//判断是否已经存储到本地文件夹
if (fileExist)//如果本地存在
{
data.Bate64 = Base64(downloadpath + "/" + item.FileName);
data.FileName = item.FileName; data.FileName = item.FileName;
if (data.Bate64 != null) if (item.OperationType == "0") //操作类型为下载
{ {
File.Delete(downloadpath + "/" + item.FileName);//删除暂存文件 int DownloadNum = item.DownloadNum + 1;
} string sql = "update MINIO_STORAGE_PATH set DOWNLOAD_NUM='" + DownloadNum + "' where pk='" + item.Pk + "'";
if (item.OperationType =="0") //操作类型为下载
{
string sql = "update MINIO_STORAGE_PATH set DOWNLOAD_NUM='" + item.DownloadNum + 1 + "' where pk='" + item.Pk + "'";
db.Execute(sql); db.Execute(sql);
} }
request.code = "0"; request.code = "0";
@ -987,6 +990,157 @@ namespace IBKLinker_Minio.Controller.MinioController
return request; return request;
} }
#endregion #endregion
#region 标准清单
[HttpGet, Route("StandardListGeneration")]
public HttpResponseMessage StandardListGeneration(StandardListGenerationModel args)
{
RequestEntity request = new RequestEntity();
IList<MinioStoragePath> date = new List<MinioStoragePath>();
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
using (IDbContext db = ObjectContainer.GetObject<IDbContext>("db"))
{
try
{
if (args != null)
{
string ExcelName = "";//定义导出Excel文件名称
FileStream file = new FileStream("D:/linshi/" + "清单模板.xlsx", FileMode.Open, FileAccess.Read);
XSSFWorkbook hssfworkbook = new XSSFWorkbook(file);
string sql = "select * from MINIO_STORAGE_PATH where 1=1 and FILE_TYPE='1' ";
if (args.InventoryType == "0")//标准类型
{
if (!string.IsNullOrEmpty(args.BeginTime))
{
sql += string.Format(" and CREATE_TIME >= to_date('{0}', 'yyyy/mm/dd hh24:mi:ss')", args.BeginTime);//开始时间
}
if (!string.IsNullOrEmpty(args.EndTime))
{
sql += string.Format(" and CREATE_TIME <= to_date('{0}', 'yyyy/mm/dd hh24:mi:ss')", args.EndTime);//结束时间
}
sql += string.Format(" and FILE_PATH like'%{0}%'", args.InventoryName);//直接添加文件加名称
ExcelName = "标准清单";
}
else
{
#region 清单判断
if (args.InventoryName =="HY企业标准清单")
{
sql += "and FILE_PATH like'%HY%'";
ExcelName = "HY企业标准清单";
}
if (args.InventoryName == "Q-HY企业标准清单")
{
sql += "and (FILE_PATH like'%Q/HY%'";
ExcelName = "Q-HY企业标准清单";
}
if (args.InventoryName == "新产品标准清单")
{
sql += "and (FILE_PATH like'%XYGN%' or FILE_PATH like'%XYGW%')";
ExcelName = "新产品标准清单";
}
if (args.InventoryName == "标准目录有效清单")
{
ExcelName = "标准目录有效清单";
}
if (args.InventoryName == "企业标准明细表")
{
ExcelName = "企业标准明细表";
}
if (args.InventoryName == "过期标准清单")
{
sql += "and (FILE_PATH like'%过期XYGN%' or FILE_PATH like'%过期XYGW%')";
ExcelName = "过期标准清单";
}
if (args.InventoryName == "参考标准清单")
{
sql += "and (FILE_PATH like'%XYGN%' or FILE_PATH like'%XYGW%')";
ExcelName = "参考标准清单";
}
if (args.InventoryName == "工艺卡清单")
{
sql += "and (FILE_PATH like'%170钢管厂工艺卡%' or FILE_PATH like'%219钢管厂工艺卡%' or FILE_PATH like'%460钢管厂工艺卡%' or FILE_PATH like'%170热处理工艺卡%' or FILE_PATH like'%连模铸系列工艺卡/转炉厂%' or FILE_PATH like'%连模铸系列工艺卡/特冶厂%' or FILE_PATH like'%连模铸系列工艺卡/电炉厂%' or FILE_PATH like'%电炉厂工艺卡%' or FILE_PATH like'%转炉厂工艺卡%' or FILE_PATH like'%特冶厂工艺卡%' or FILE_PATH like'%大棒厂工艺卡%' or FILE_PATH like'%小棒厂工艺卡%' or FILE_PATH like'%中棒厂工艺卡%'or FILE_PATH like'%锻造厂工艺卡%' or FILE_PATH like'%扁棒厂工艺卡)";
ExcelName = "工艺卡清单";
}
if (args.InventoryName == "工艺规程清单")
{
sql += "and FILE_PATH like'%工艺规程%'";
ExcelName = "工艺规程清单";
}
if (args.InventoryName == "技术制度清单")
{
sql += "and FILE_PATH like'%技术制度%'";
ExcelName = "技术制度清单";
}
if (args.InventoryName == "艺字工艺清单")
{
sql += "and FILE_PATH like'%艺字工艺%'";
ExcelName = "艺字工艺清单";
}
if (args.InventoryName == "技字通知清单")
{
sql += "and FILE_PATH like'%技字通知%'";
ExcelName = "技字通知清单";
}
#endregion
}
date = db.Query<MinioStoragePath>(string.Format("{0} order by UPK ASC, CREATOR_TIME ASC ", sql));
if (date.Count > 0)
{
request.data = date;//测试查看数据用后去去掉
var sheet = hssfworkbook.GetSheetAt(0);
for (int i = 0; i < date.Count; i++)
{
if (sheet != null)
{
sheet.CopyRow(2, 3 + i);
}
}
var rowIndex = 3;
for (int i = 0; i < date.Count; i++)
{
var curRow = sheet.GetRow(rowIndex);
var data = date[i];
if (data.FilePath.IndexOf("XYGN") >= 0 || data.FilePath.IndexOf("XYGW") >= 0)//对国内国外标准进行特殊处理
{
int Num = data.FileName.IndexOf("-") + 8;//取文件名称技术协议编号位数
int name = data.FileName.Length - Num;//取文件名称技术协议名称位数
curRow.GetCell(0).SetCellValue(data.FilePath.Replace(data.FileName, ""));//路径
curRow.GetCell(1).SetCellValue(data.FileName.Substring(0, Num).Trim());//协议编号
curRow.GetCell(2).SetCellValue(data.FileName.Substring(Num, name).Trim());//名称
}
else
{
curRow.GetCell(0).SetCellValue(data.FilePath.Replace(data.FileName, ""));//路径
curRow.GetCell(2).SetCellValue(data.FileName);//名称
}
rowIndex = rowIndex + 1;
}
MemoryStream output = new MemoryStream();
hssfworkbook.Write(output);
output.Seek(0, SeekOrigin.Begin);
result.Content = new StreamContent(output);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
if (ExcelName != null)
{
result.Content.Headers.ContentDisposition.FileName = ExcelName + ".xlsx";
}
else
{
result.Content.Headers.ContentDisposition.FileName = "标准清单.xlsx";
}
result.Content.Headers.ContentLength = output.Length;
}
}
}
catch (Exception ex)
{
logger.InfoFormat(ex.ToString());
}
}
return result;
}
#endregion
#region 公用方法 #region 公用方法
/// <summary> /// <summary>
/// 矫正pk值 /// 矫正pk值
@ -1050,6 +1204,8 @@ namespace IBKLinker_Minio.Controller.MinioController
} }
} }
#endregion #endregion
#region
#endregion
} }
} }

@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IBKLinker_Minio.Entity.MinioController
{
/// <summary>
/// 文件上传标准清单model
/// </summary>
public class StandardListGenerationModel
{
/// <summary>
/// 清单名称
/// </summary>
public string InventoryName { get; set; }
/// <summary>
/// 清单类型 0为标准类型一个单一文件夹的清单1为特殊模式多个文件夹的清单
/// </summary>
public string InventoryType { get; set; }
/// <summary>
/// 开始时间
/// </summary>
public string BeginTime { set; get; }
/// <summary>
/// 结束时间
/// </summary>
public string EndTime { set; get; }
}
}
Loading…
Cancel
Save