添加项目变更导出,历史项目导出

dev
陈伟 2025-05-22 14:34:24 +08:00
parent dda93c6284
commit 06cf46503f
7 changed files with 421 additions and 21 deletions

View File

@ -0,0 +1,14 @@
namespace Infrastructure.Utilities.Excel;
using System;
[AttributeUsage(AttributeTargets.Property)]
public class ExcelColumnAttribute : Attribute
{
public string HeaderName { get; }
public ExcelColumnAttribute(string headerName)
{
HeaderName = headerName;
}
}

View File

@ -0,0 +1,124 @@
using System.Reflection;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;
namespace Infrastructure.Utilities.Excel;
public class ExcelExporter
{
/// <summary>
///
/// </summary>
/// <param name="data"></param>
/// <param name="filePath"></param>
/// <typeparam name="T"></typeparam>
/// <exception cref="ArgumentException"></exception>
public static Response<MemoryStream> ExportToExcel<T>(IEnumerable<T> data, string headerTitle) where T : class
{
var workbook = new XSSFWorkbook();
var sheet = workbook.CreateSheet("Sheet1");
// 获取实体类的属性信息并筛选出标记了ExcelColumnAttribute的特性
PropertyInfo[] properties = typeof(T).GetProperties()
.Where(p => p.GetCustomAttribute<ExcelColumnAttribute>() != null)
.ToArray();
var rowIndex = 0;
if (!string.IsNullOrEmpty(headerTitle))
{
var headerTitleRow = sheet.CreateRow(rowIndex++);
sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, properties.Length - 1));
var cell = headerTitleRow.CreateCell(0);
cell.SetCellValue(headerTitle);
var style = workbook.CreateCellStyle();
var font = workbook.CreateFont();
font.FontName = "方正小标宋简体";
font.FontHeightInPoints = 36;
font.IsBold = true;
style.SetFont(font);
style.BorderBottom = BorderStyle.Thin;
style.BorderLeft = BorderStyle.Thin;
style.BorderRight = BorderStyle.Thin;
style.BorderTop = BorderStyle.Thin;
style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
style.VerticalAlignment = VerticalAlignment.Center;
style.WrapText = true;
cell.CellStyle = style;
}
// 写入表头
var headerRow = sheet.CreateRow(rowIndex++);
for (var i = 0; i < properties.Length; i++)
{
// 自动调节列宽
sheet.AutoSizeColumn(i);
var cell = headerRow.CreateCell(i);
cell.SetCellValue(properties[i].GetCustomAttribute<ExcelColumnAttribute>()?.HeaderName);
// 应用表头样式
var headerStyleAttr = properties[i].GetCustomAttribute<ExcelHeaderStyleAttribute>();
var style = workbook.CreateCellStyle();
if (headerStyleAttr != null)
{
var font = workbook.CreateFont();
font.FontName = headerStyleAttr.FontName;
font.FontHeightInPoints = (short)headerStyleAttr.FontSize;
font.IsBold = true;
style.SetFont(font);
// 填充模式
style.FillPattern = FillPattern.SolidForeground;
style.WrapText = true;
// 设置边框样式
style.BorderBottom = BorderStyle.Thin;
style.BorderLeft = BorderStyle.Thin;
style.BorderRight = BorderStyle.Thin;
style.BorderTop = BorderStyle.Thin;
style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
style.VerticalAlignment = VerticalAlignment.Center;
}
else
{
var font = workbook.CreateFont();
font.FontName = "Microsoft YaHei";
font.FontHeightInPoints = 12f;
font.IsBold = true;
style.SetFont(font);
// 填充模式
style.FillPattern = FillPattern.SolidForeground;
style.WrapText = true;
// 设置边框样式
style.BorderBottom = BorderStyle.Thin;
style.BorderLeft = BorderStyle.Thin;
style.BorderRight = BorderStyle.Thin;
style.BorderTop = BorderStyle.Thin;
style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
style.VerticalAlignment = VerticalAlignment.Center;
}
cell.CellStyle = style;
}
foreach (var item in data)
{
var row = sheet.CreateRow(rowIndex++);
for (var i = 0; i < properties.Length; i++)
{
var cell = row.CreateCell(i);
cell.SetCellValue(properties[i].GetValue(item)?.ToString());
}
}
var response = new Response<MemoryStream>
{
Result = new MemoryStream()
};
// MemoryStream中写入数据
workbook.Write(response.Result);
workbook.Close();
response.Result.Close();
response.Result.Dispose();
response.Code = 200;
response.Message = "获取成功";
return response;
}
}

View File

@ -0,0 +1,51 @@
using Color = System.Drawing.Color;
namespace Infrastructure.Utilities.Excel;
// 用于Color类型
// 自定义特性类,用于存储表头样式信息
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property, Inherited = false)]
public class ExcelHeaderStyleAttribute : Attribute
{
public string FontName { get; set; }
public float FontSize { get; set; }
public string FontColor { get; set; }
public bool Bold { get; set; }
public bool Italic { get; set; }
public HorizontalAlignment HorizontalAlignment { get; set; } // 注意这里的HorizontalAlignment需要自定义或引用相关枚举
// 构造函数,用于初始化特性
public ExcelHeaderStyleAttribute(string fontName, float fontSize, string fontColor, bool bold, bool italic,
HorizontalAlignment horizontalAlignment)
{
FontName = fontName;
FontSize = fontSize;
FontColor = fontColor;
Bold = bold;
Italic = italic;
HorizontalAlignment = horizontalAlignment;
}
// 为了方便,可以提供一个简化的构造函数
public ExcelHeaderStyleAttribute() : this("Microsoft YaHei", 12f, "black", false, false, HorizontalAlignment.General)
{
}
}
// 自定义的HorizontalAlignment枚举如果未从其他库引用
public enum HorizontalAlignment
{
General,
Left,
Center,
Right,
Fill,
Justify,
CenterContinuous,
Distributed
}

View File

@ -1,13 +1,11 @@
using Infrastructure;
using OpenAuth.App.BaseApp.Base;
using OpenAuth.App.Interface;
using OpenAuth.App.ServiceApp.DroneSsnydManage.Export;
using OpenAuth.App.ServiceApp.DroneSsnydManage.Request;
using OpenAuth.Repository;
using OpenAuth.Repository.Domain;
using SqlSugar;
using Infrastructure;
using DocumentFormat.OpenXml.Spreadsheet;
using NPOI.SS.Formula.Functions;
namespace OpenAuth.App.ServiceApp.DroneSsnydManage
{
@ -24,18 +22,19 @@ namespace OpenAuth.App.ServiceApp.DroneSsnydManage
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
public PageInfo<List<DroneSsnyd>> TimeoutWarning(string xiangmumc, string countyid, string streetid, int pageIndex, int pageSize)
public PageInfo<List<DroneSsnyd>> TimeoutWarning(string xiangmumc, string countyid, string streetid,
int pageIndex, int pageSize)
{
int totalCount = 0;
var endTime = DateTime.Now.AddMonths(2);
var list = base.Repository.AsQueryable()
.WhereIF(!string.IsNullOrEmpty(xiangmumc),a=>a.xiangmu_name.Contains(xiangmumc))
.WhereIF(!string.IsNullOrEmpty(countyid),a=>a.countyid==countyid)
.WhereIF(!string.IsNullOrEmpty(streetid),a=>a.streetid==streetid)
.Where(a => a.end_time <= endTime&&a.end_time>DateTime.Now)
.OrderBy(a => a.end_time, OrderByType.Desc)
.ToPageList(pageIndex, pageSize, ref totalCount);
.WhereIF(!string.IsNullOrEmpty(xiangmumc), a => a.xiangmu_name.Contains(xiangmumc))
.WhereIF(!string.IsNullOrEmpty(countyid), a => a.countyid == countyid)
.WhereIF(!string.IsNullOrEmpty(streetid), a => a.streetid == streetid)
.Where(a => a.end_time <= endTime && a.end_time > DateTime.Now)
.OrderBy(a => a.end_time, OrderByType.Desc)
.ToPageList(pageIndex, pageSize, ref totalCount);
return new PageInfo<List<DroneSsnyd>>
{
@ -50,18 +49,19 @@ namespace OpenAuth.App.ServiceApp.DroneSsnydManage
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
public PageInfo<List<DroneSsnyd>> TimeOutAlarmList(string xiangmumc, string countyid, string streetid, int pageIndex, int pageSize)
public PageInfo<List<DroneSsnyd>> TimeOutAlarmList(string xiangmumc, string countyid, string streetid,
int pageIndex, int pageSize)
{
int totalCount = 0;
var endTime = DateTime.Now;
var list = base.Repository.AsQueryable()
.WhereIF(!string.IsNullOrEmpty(xiangmumc), a => a.xiangmu_name.Contains(xiangmumc))
.WhereIF(!string.IsNullOrEmpty(countyid), a => a.countyid == countyid)
.WhereIF(!string.IsNullOrEmpty(streetid), a => a.streetid == streetid)
.Where(a => a.end_time<endTime)
.OrderBy(a => a.end_time, OrderByType.Desc)
.ToPageList(pageIndex, pageSize, ref totalCount);
.WhereIF(!string.IsNullOrEmpty(xiangmumc), a => a.xiangmu_name.Contains(xiangmumc))
.WhereIF(!string.IsNullOrEmpty(countyid), a => a.countyid == countyid)
.WhereIF(!string.IsNullOrEmpty(streetid), a => a.streetid == streetid)
.Where(a => a.end_time < endTime)
.OrderBy(a => a.end_time, OrderByType.Desc)
.ToPageList(pageIndex, pageSize, ref totalCount);
return new PageInfo<List<DroneSsnyd>>
{
@ -112,5 +112,63 @@ namespace OpenAuth.App.ServiceApp.DroneSsnydManage
Total = totalCount
};
}
public List<DroneSsnydExport> HistoryProjectList(DroneSnnyAppReq req)
{
var list = Repository.AsQueryable()
.Where(a => a.handle_status_id == 99)
.WhereIF(!string.IsNullOrEmpty(req.xiangmu_no), a => a.xiangmu_no.Contains(req.xiangmu_no))
.WhereIF(!string.IsNullOrEmpty(req.xiangmumc), a => a.xiangmumc.Contains(req.xiangmumc))
.Select(
a => new DroneSsnydExport()
{
xiangmu_no = a.xiangmu_no,
xiangmu_name = a.xiangmu_name,
streetname = a.streetname,
communityname = a.communityname,
quanliren = a.quanliren,
xingzhengquhua = a.xingzhengquhua,
beian_no = a.beian_no,
start_time = a.start_time,
end_time = a.end_time,
xiangmu_yt = a.xiangmu_yt,
shengchan_area = a.shengchan_area,
fuzhu_area = a.fuzhu_area,
shenqing_area = a.shenqing_area,
handle_status_name = a.handle_status_name,
xiafatime = a.xiafatime
})
.ToList();
return list;
}
public List<DroneSsnydExport> ProjectChangeExport(DroneSnnyAppReq req)
{
var list = Repository.AsQueryable()
.Where(a => a.handle_status_id != 99)
.WhereIF(!string.IsNullOrEmpty(req.xiangmu_no), a => a.xiangmu_no.Contains(req.xiangmu_no))
.WhereIF(!string.IsNullOrEmpty(req.xiangmumc), a => a.xiangmumc.Contains(req.xiangmumc))
.Select(
a => new DroneSsnydExport()
{
xiangmu_no = a.xiangmu_no,
xiangmu_name = a.xiangmu_name,
streetname = a.streetname,
communityname = a.communityname,
quanliren = a.quanliren,
xingzhengquhua = a.xingzhengquhua,
beian_no = a.beian_no,
start_time = a.start_time,
end_time = a.end_time,
xiangmu_yt = a.xiangmu_yt,
shengchan_area = a.shengchan_area,
fuzhu_area = a.fuzhu_area,
shenqing_area = a.shenqing_area,
handle_status_name = a.handle_status_name,
xiafatime = a.xiafatime
})
.ToList();
return list;
}
}
}

View File

@ -0,0 +1,105 @@
using Infrastructure.Utilities.Excel;
namespace OpenAuth.App.ServiceApp.DroneSsnydManage.Export;
///<summary>
///设施农用地主表
/// </summary>
[ExcelHeaderStyle]
public class DroneSsnydExport
{
/// <summary>
/// 项目编号
/// </summary>
[ExcelColumn("项目编号")]
public string xiangmu_no { get; set; }
/// <summary>
/// 项目名称
/// </summary>
[ExcelColumn("项目名称")]
public string xiangmu_name { get; set; }
/// <summary>
/// 镇街道
/// </summary>
[ExcelColumn("多镇")]
public string streetname { get; set; }
/// <summary>
/// 村庄
/// </summary>
[ExcelColumn("村庄")]
public string communityname { get; set; }
/// <summary>
/// 权利人
/// </summary>
[ExcelColumn("权利人")]
public string quanliren { get; set; }
/// <summary>
/// 行政区划
/// </summary>
[ExcelColumn("行政区划")]
public string xingzhengquhua { get; set; }
/// <summary>
/// 备案编号
/// </summary>
[ExcelColumn("备案编号")]
public string beian_no { get; set; }
/// <summary>
/// 开始时间
/// </summary>
[ExcelColumn("开始时间")]
public DateTime? start_time { get; set; }
/// <summary>
/// 结束时间
/// </summary>
[ExcelColumn("结束时间")]
public DateTime? end_time { get; set; }
/// <summary>
/// 项目当前用途
/// </summary>
[ExcelColumn("项目当前用途")]
public string xiangmu_yt { get; set; }
/// <summary>
/// 设施农业申请用地面积(公顷)
/// </summary>
[ExcelColumn("设施农业申请用地面积(公顷)")]
public decimal? shenqing_area { get; set; }
/// <summary>
/// 生产设施用地(公顷)
/// </summary>
/// <param name="???"></param>
/// <returns></returns>
[ExcelColumn("生产设施用地(公顷)")]
public decimal? shengchan_area { get; set; }
/// <summary>
/// 辅助设施用地(公顷)
/// </summary>
/// <param name="???"></param>
/// <returns></returns>
[ExcelColumn("辅助设施用地(公顷)")]
public decimal? fuzhu_area { get; set; }
/// <summary>
/// 下发时间
/// </summary>
[ExcelColumn("下发时间")]
public DateTime? xiafatime { get; set; }
/// <summary>
/// 项目状态
/// </summary>
[ExcelColumn("项目状态")]
public string handle_status_name { get; set; }
}

View File

@ -0,0 +1,15 @@
using OpenAuth.App.Request;
namespace OpenAuth.App.ServiceApp.DroneSsnydManage.Request;
public class DroneSnnyAppReq
{
/// <summary>
/// 项目名称
/// </summary>
public string xiangmumc { get; set; }
/// <summary>
/// 项目编号
/// </summary>
public string xiangmu_no { get; set; }
}

View File

@ -1,4 +1,5 @@
using Infrastructure;
using Infrastructure.Utilities.Excel;
using Microsoft.AspNetCore.Mvc;
using OpenAuth.App.ServiceApp.DroneSsnydManage;
using OpenAuth.App.ServiceApp.DroneSsnydManage.Request;
@ -30,12 +31,13 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers
/// <param name="pageSize"></param>
/// <returns></returns>
[HttpGet]
public Response<PageInfo<List<DroneSsnyd>>> TimeoutWarning(string xiangmumc, string countyid, string streetid, int page, int limit)
public Response<PageInfo<List<DroneSsnyd>>> TimeoutWarning(string xiangmumc, string countyid, string streetid,
int page, int limit)
{
var response = new Response<PageInfo<List<DroneSsnyd>>>();
try
{
response.Result = droneSsnyApp.TimeoutWarning(xiangmumc, countyid, streetid,page, limit);
response.Result = droneSsnyApp.TimeoutWarning(xiangmumc, countyid, streetid, page, limit);
}
catch (Exception ex)
{
@ -56,7 +58,8 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers
/// <param name="pageSize"></param>
/// <returns></returns>
[HttpGet]
public Response<PageInfo<List<DroneSsnyd>>> TimeOutAlarmList(string xiangmumc, string countyid,string streetid,int page, int limit)
public Response<PageInfo<List<DroneSsnyd>>> TimeOutAlarmList(string xiangmumc, string countyid, string streetid,
int page, int limit)
{
var response = new Response<PageInfo<List<DroneSsnyd>>>();
try
@ -71,7 +74,7 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers
return response;
}
/// <summary>
/// 历史项目
/// </summary>
@ -115,5 +118,35 @@ namespace OpenAuth.WebApi.Controllers.ServiceControllers
return response;
}
// todo 项目列表
/// <summary>
/// 历史项目导出
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
[HttpGet]
public IActionResult HistoryProjectExport([FromQuery] DroneSnnyAppReq req)
{
var data = droneSsnyApp.HistoryProjectList(req);
var x = ExcelExporter.ExportToExcel(data, "历史项目");
return File(x.Result.ToArray(),
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"历史项目导出" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx");
}
/// <summary>
/// 项目变更导出
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
[HttpGet]
public IActionResult ProjectChangeExport([FromQuery] DroneSnnyAppReq req)
{
var data = droneSsnyApp.ProjectChangeExport(req);
var x = ExcelExporter.ExportToExcel(data, "项目变更");
return File(x.Result.ToArray(),
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"项目变更导出" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx");
}
}
}