384 lines
16 KiB
C#
384 lines
16 KiB
C#
|
using BLL;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Data;
|
|||
|
using System.Data.SqlClient;
|
|||
|
using System.Linq;
|
|||
|
using System.Web;
|
|||
|
using System.Web.UI;
|
|||
|
using System.Web.UI.WebControls;
|
|||
|
using System.IO;
|
|||
|
using NPOI.SS.UserModel;
|
|||
|
using NPOI.XSSF.UserModel;
|
|||
|
using Newtonsoft.Json;
|
|||
|
|
|||
|
namespace FineUIPro.Web.Evaluation
|
|||
|
{
|
|||
|
public partial class ExportDetails : PageBase
|
|||
|
{
|
|||
|
#region 加载
|
|||
|
/// <summary>
|
|||
|
/// 加载页面
|
|||
|
/// </summary>
|
|||
|
/// <param name="sender"></param>
|
|||
|
/// <param name="e"></param>
|
|||
|
protected void Page_Load(object sender, EventArgs e)
|
|||
|
{
|
|||
|
if (!IsPostBack)
|
|||
|
{
|
|||
|
GetButtonPower();//权限设置
|
|||
|
|
|||
|
StartTime.Text = DateTime.Now.AddMonths(-1).ToString(StartTime.DateFormatString);
|
|||
|
EndTime.Text = DateTime.Now.ToString(EndTime.DateFormatString);
|
|||
|
|
|||
|
ddlPageSize.SelectedValue = Grid1.PageSize.ToString();
|
|||
|
// 绑定表格
|
|||
|
BindGrid();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 绑定数据
|
|||
|
/// </summary>
|
|||
|
private void BindGrid()
|
|||
|
{
|
|||
|
string strSql = @"SELECT * from View_FC_SESRelatedData WHERE 1=1 ";
|
|||
|
|
|||
|
List<SqlParameter> listStr = new List<SqlParameter>();
|
|||
|
if (!string.IsNullOrEmpty(this.txtFo.Text.Trim()))
|
|||
|
{
|
|||
|
strSql += " AND FO_NO LIKE @foNo";
|
|||
|
listStr.Add(new SqlParameter("@foNo", "%" + this.txtFo.Text.Trim() + "%"));
|
|||
|
}
|
|||
|
SqlParameter[] parameter = listStr.ToArray();
|
|||
|
DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
|
|||
|
|
|||
|
Grid1.RecordCount = tb.Rows.Count;
|
|||
|
tb = GetFilteredTable(Grid1.FilteredData, tb);
|
|||
|
var table = this.GetPagedDataTable(Grid1, tb);
|
|||
|
Grid1.DataSource = table;
|
|||
|
Grid1.DataBind();
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 分页、排序
|
|||
|
/// <summary>
|
|||
|
/// 分页
|
|||
|
/// </summary>
|
|||
|
/// <param name="sender"></param>
|
|||
|
/// <param name="e"></param>
|
|||
|
protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
|
|||
|
{
|
|||
|
Grid1.PageIndex = e.NewPageIndex;
|
|||
|
BindGrid();
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 分页显示条数下拉框
|
|||
|
/// </summary>
|
|||
|
/// <param name="sender"></param>
|
|||
|
/// <param name="e"></param>
|
|||
|
protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
|
|||
|
{
|
|||
|
Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
|
|||
|
BindGrid();
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 排序
|
|||
|
/// </summary>
|
|||
|
/// <param name="sender"></param>
|
|||
|
/// <param name="e"></param>
|
|||
|
protected void Grid1_Sort(object sender, FineUIPro.GridSortEventArgs e)
|
|||
|
{
|
|||
|
Grid1.SortDirection = e.SortDirection;
|
|||
|
Grid1.SortField = e.SortField;
|
|||
|
BindGrid();
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 打印
|
|||
|
/// <summary>
|
|||
|
/// 打印
|
|||
|
/// </summary>
|
|||
|
/// <param name="sender"></param>
|
|||
|
/// <param name="e"></param>
|
|||
|
protected void btnPrint_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
if (Grid1.SelectedRowIndexArray.Length == 0)
|
|||
|
{
|
|||
|
Alert.ShowInParent("Please select at least one record!");
|
|||
|
return;
|
|||
|
}
|
|||
|
string Id = Grid1.SelectedRowID;
|
|||
|
var fc = BLL.SESRelatedDataService.GetSESRelatedDataById(Id);
|
|||
|
string sData = StartTime.Text;
|
|||
|
string eData = EndTime.Text;
|
|||
|
PageContext.RegisterStartupScript(Window2.GetShowReference(String.Format("../Report/ReportPrint.aspx?report=4&fcid=" + fc.FO_NO + "&sData=" + sData + "&eData=" + eData + "", "Print - ")));
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 导出
|
|||
|
/// <summary>
|
|||
|
/// 导出
|
|||
|
/// </summary>
|
|||
|
/// <param name="sender"></param>
|
|||
|
/// <param name="e"></param>
|
|||
|
protected void btnExport_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
DateTime startTime = DateTime.Parse(StartTime.Text + "-01");
|
|||
|
DateTime endTime = DateTime.Parse(EndTime.Text + "-13");
|
|||
|
int monthNum = (endTime.Year - startTime.Year) * 12 + (endTime.Month - startTime.Month) + 1;
|
|||
|
if (monthNum < 0)
|
|||
|
{
|
|||
|
Alert.ShowInParent("The start date cannot be greater than the end date!");
|
|||
|
return;
|
|||
|
}
|
|||
|
string rootPath = Server.MapPath("~/") + Const.ExcelUrl;
|
|||
|
//模板文件
|
|||
|
string TempletFileName = rootPath + "MonthScoreReport.xlsx";
|
|||
|
//导出文件
|
|||
|
string filePath = rootPath + DateTime.Now.ToString("yyyyMMddhhmmss") + "\\";
|
|||
|
if (!Directory.Exists(filePath))
|
|||
|
{
|
|||
|
Directory.CreateDirectory(filePath);
|
|||
|
}
|
|||
|
string ReportFileName = filePath + "out.xls";
|
|||
|
FileStream file = new FileStream(TempletFileName, FileMode.Open, FileAccess.Read);
|
|||
|
XSSFWorkbook hssfworkbook = new XSSFWorkbook(file);
|
|||
|
|
|||
|
var sesRelatedData = Funs.DB.View_FC_SESRelatedData.Where(x => x.FC_Status != "Closed").ToList();
|
|||
|
List<SqlParameter> Param = new List<SqlParameter>();
|
|||
|
Param.Add(new SqlParameter("@StartTime", startTime));
|
|||
|
Param.Add(new SqlParameter("@EndTime", endTime));
|
|||
|
SqlParameter[] ParList = Param.ToArray();
|
|||
|
|
|||
|
var sesDataTable = SQLHelper.GetDataTableRunProc("FN_YearToDateReport", ParList);
|
|||
|
var sesDataScore = JsonConvert.DeserializeObject<List<YearToDateModel>>(JsonConvert.SerializeObject(sesDataTable));
|
|||
|
|
|||
|
XSSFSheet wsMonth = (XSSFSheet)hssfworkbook.GetSheet("Sheet1");
|
|||
|
|
|||
|
#region 样式
|
|||
|
// 字体样式
|
|||
|
IFont font = hssfworkbook.CreateFont();
|
|||
|
font.FontHeightInPoints = 11;
|
|||
|
font.IsBold = false;
|
|||
|
font.FontName = "Arial";
|
|||
|
ICellStyle fontStyle = hssfworkbook.CreateCellStyle();
|
|||
|
fontStyle.SetFont(font);
|
|||
|
|
|||
|
ICellStyle yearStyle = hssfworkbook.CreateCellStyle();
|
|||
|
yearStyle.VerticalAlignment = VerticalAlignment.Center;
|
|||
|
yearStyle.Alignment = HorizontalAlignment.Center;
|
|||
|
yearStyle.SetFont(font);
|
|||
|
|
|||
|
//创建单元格样式
|
|||
|
XSSFCellStyle backgroundstyle = (XSSFCellStyle)hssfworkbook.CreateCellStyle();
|
|||
|
//填充模式
|
|||
|
backgroundstyle.FillPattern = FillPattern.SolidForeground;
|
|||
|
//创建颜色
|
|||
|
XSSFColor xssfcolor = new XSSFColor();
|
|||
|
//rbg值
|
|||
|
byte[] rgb = { (byte)255, (byte)192, (byte)203 };
|
|||
|
//写入rgb 粉色背景颜色定义
|
|||
|
xssfcolor.SetRgb(rgb);
|
|||
|
//设置颜色值
|
|||
|
backgroundstyle.SetFillForegroundColor(xssfcolor);
|
|||
|
backgroundstyle.SetFont(font);
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
if (sesRelatedData.Count > 0)
|
|||
|
{
|
|||
|
var colIndex = 0;
|
|||
|
var rowIndex = 1;
|
|||
|
foreach (var item in sesRelatedData)
|
|||
|
{
|
|||
|
if (wsMonth.GetRow(rowIndex) == null) wsMonth.CreateRow(rowIndex);
|
|||
|
#region 列赋值
|
|||
|
if (wsMonth.GetRow(rowIndex).GetCell(0) == null) wsMonth.GetRow(rowIndex).CreateCell(0);
|
|||
|
wsMonth.GetRow(rowIndex).GetCell(0).SetCellValue(item.FO_NO);
|
|||
|
wsMonth.GetRow(rowIndex).GetCell(0).CellStyle = fontStyle;
|
|||
|
if (wsMonth.GetRow(rowIndex).GetCell(1) == null) wsMonth.GetRow(rowIndex).CreateCell(1);
|
|||
|
wsMonth.GetRow(rowIndex).GetCell(1).SetCellValue(item.Discipline);
|
|||
|
wsMonth.GetRow(rowIndex).GetCell(1).CellStyle = fontStyle;
|
|||
|
if (wsMonth.GetRow(rowIndex).GetCell(2) == null) wsMonth.GetRow(rowIndex).CreateCell(2);
|
|||
|
wsMonth.GetRow(rowIndex).GetCell(2).SetCellValue(item.Contractor);
|
|||
|
wsMonth.GetRow(rowIndex).GetCell(2).CellStyle = fontStyle;
|
|||
|
if (wsMonth.GetRow(rowIndex).GetCell(3) == null) wsMonth.GetRow(rowIndex).CreateCell(3);
|
|||
|
wsMonth.GetRow(rowIndex).GetCell(3).SetCellValue(item.Contract_Admin);
|
|||
|
wsMonth.GetRow(rowIndex).GetCell(3).CellStyle = fontStyle;
|
|||
|
if (wsMonth.GetRow(rowIndex).GetCell(4) == null) wsMonth.GetRow(rowIndex).CreateCell(4);
|
|||
|
wsMonth.GetRow(rowIndex).GetCell(4).SetCellValue(item.Main_Coordinator);
|
|||
|
wsMonth.GetRow(rowIndex).GetCell(4).CellStyle = fontStyle;
|
|||
|
|
|||
|
var sesFoDataScore = sesDataScore.Where(p => p.FO_NO == item.FO_NO).ToList();
|
|||
|
|
|||
|
for (int j = 0; j < monthNum; j++)
|
|||
|
{
|
|||
|
var startData = startTime.AddMonths(j);
|
|||
|
if (colIndex == 0)
|
|||
|
{
|
|||
|
if (wsMonth.GetRow(0) == null) wsMonth.CreateRow(0);
|
|||
|
if (wsMonth.GetRow(0).GetCell(j + 5) == null) wsMonth.GetRow(0).CreateCell(j + 5);
|
|||
|
wsMonth.GetRow(0).GetCell(j + 5).SetCellValue(startData.ToString("yyyy-MM"));
|
|||
|
wsMonth.GetRow(0).GetCell(j + 5).CellStyle = yearStyle;
|
|||
|
}
|
|||
|
if (wsMonth.GetRow(rowIndex).GetCell(j + 5) == null) wsMonth.GetRow(rowIndex).CreateCell(j + 5);
|
|||
|
if (sesFoDataScore.Count(p => p.dataMonth == startData.ToString("yyyy-MM")) > 0 && Funs.GetNewDecimal(sesFoDataScore.FirstOrDefault(p => p.dataMonth == startData.ToString("yyyy-MM")).SumScore) > 0)
|
|||
|
{
|
|||
|
var yearNums = float.Parse(sesFoDataScore.FirstOrDefault(p => p.dataMonth == startData.ToString("yyyy-MM")).SumScore).ToString("0.##");
|
|||
|
wsMonth.GetRow(rowIndex).GetCell(j + 5).SetCellValue(double.Parse(yearNums));
|
|||
|
|
|||
|
//如果小于60分,填充背景色为粉色
|
|||
|
if (double.Parse(yearNums) > 0 && double.Parse(yearNums) < 60)
|
|||
|
{
|
|||
|
wsMonth.GetRow(rowIndex).GetCell(j + 5).CellStyle = backgroundstyle;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
wsMonth.GetRow(rowIndex).GetCell(j + 5).CellStyle = fontStyle;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
wsMonth.GetRow(rowIndex).GetCell(j + 5).SetCellValue("-");
|
|||
|
wsMonth.GetRow(rowIndex).GetCell(j + 5).CellStyle = fontStyle;
|
|||
|
}
|
|||
|
}
|
|||
|
#endregion
|
|||
|
colIndex++;
|
|||
|
rowIndex++;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
wsMonth.ForceFormulaRecalculation = true;
|
|||
|
|
|||
|
using (FileStream filess = File.OpenWrite(ReportFileName))
|
|||
|
{
|
|||
|
hssfworkbook.Write(filess);
|
|||
|
}
|
|||
|
FileInfo filet = new FileInfo(ReportFileName);
|
|||
|
Response.Clear();
|
|||
|
Response.Charset = "GB2312";
|
|||
|
Response.ContentEncoding = System.Text.Encoding.UTF8;
|
|||
|
// 添加头信息,为"文件下载/另存为"对话框指定默认文件名
|
|||
|
Response.AddHeader("Content-Disposition", "attachment; filename=Month_TotalScore_Report" + Server.UrlEncode(DateTime.Now.ToString("yyyyMMddhhmmss") + ".xlsx"));
|
|||
|
// 添加头信息,指定文件大小,让浏览器能够显示下载进度
|
|||
|
Response.AddHeader("Content-Length", filet.Length.ToString());
|
|||
|
// 指定返回的是一个不能被客户端读取的流,必须被下载
|
|||
|
Response.ContentType = "application/ms-excel";
|
|||
|
// 把文件流发送到客户端
|
|||
|
Response.WriteFile(filet.FullName);
|
|||
|
// 停止页面的执行
|
|||
|
Response.End();
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 权限设置
|
|||
|
/// <summary>
|
|||
|
/// 菜单按钮权限
|
|||
|
/// </summary>
|
|||
|
private void GetButtonPower()
|
|||
|
{
|
|||
|
var buttonList = BLL.CommonService.GetAllButtonList(this.CurrUser.UserId, BLL.Const.ExportDetailsMenuId);
|
|||
|
if (buttonList.Count() > 0)
|
|||
|
{
|
|||
|
if (buttonList.Contains(BLL.Const.BtnOut))
|
|||
|
{
|
|||
|
this.btnPrint.Hidden = false;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 行绑定后事件
|
|||
|
/// <summary>
|
|||
|
/// 行绑定后事件
|
|||
|
/// </summary>
|
|||
|
/// <param name="sender"></param>
|
|||
|
/// <param name="e"></param>
|
|||
|
protected void Grid1_RowDataBound(object sender, GridRowEventArgs e)
|
|||
|
{
|
|||
|
DataRowView row = e.DataItem as DataRowView;
|
|||
|
string id = row["ID"].ToString();
|
|||
|
//for (int i = 0; i < this.Grid1.Rows.Count; i++)
|
|||
|
//{
|
|||
|
if (!string.IsNullOrEmpty(id))
|
|||
|
{
|
|||
|
var data = BLL.SESRelatedDataService.GetSESRelatedDataById(id);
|
|||
|
if (data != null)
|
|||
|
{
|
|||
|
if (data.Expire_Date.HasValue)
|
|||
|
{
|
|||
|
if (data.Expire_Date < DateTime.Now)//过期
|
|||
|
{
|
|||
|
e.RowCssClass = "color2";
|
|||
|
}
|
|||
|
else if (data.Expire_Date.Value.AddMonths(-6) <= DateTime.Now && data.Expire_Date > DateTime.Now)//六个月后过期
|
|||
|
{
|
|||
|
e.RowCssClass = "color1";
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//Remaining Budget/Contract Budget<10 显示红色
|
|||
|
var checkedValue = BLL.SESReportService.getSumSSRActualCostByFo(data.FO_NO);
|
|||
|
var remainmingBudget = data.Actual_Budget - checkedValue;
|
|||
|
if (data.Actual_Budget > 0)
|
|||
|
{
|
|||
|
var remainmingBudgetRate = remainmingBudget / data.Actual_Budget * 100;
|
|||
|
if (remainmingBudgetRate < 10)
|
|||
|
{
|
|||
|
e.CellCssClasses[30] = "colorRed";
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//如果(合同过期日-今天)/(合同生效总天数)<10显示红色
|
|||
|
if (data.Validate_Date.HasValue && data.Expire_Date.HasValue)
|
|||
|
{
|
|||
|
decimal a = (data.Expire_Date - DateTime.Now).Value.Days;
|
|||
|
decimal b = (data.Expire_Date - data.Validate_Date).Value.Days;//合同生效总天数
|
|||
|
if (b > 0)
|
|||
|
{
|
|||
|
decimal c = a / b * 100;
|
|||
|
if (c < 10)
|
|||
|
{
|
|||
|
e.CellCssClasses[31] = "colorRed";
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
//}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 查询
|
|||
|
/// <summary>
|
|||
|
/// 查找
|
|||
|
/// </summary>
|
|||
|
/// <param name="sender"></param>
|
|||
|
/// <param name="e"></param>
|
|||
|
protected void btnSearch_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
BindGrid();
|
|||
|
}
|
|||
|
#endregion
|
|||
|
|
|||
|
#region 定义实体
|
|||
|
// 定义实体
|
|||
|
public class YearToDateModel
|
|||
|
{
|
|||
|
public string FO_NO { get; set; } = string.Empty;
|
|||
|
public string Contract_Title { get; set; } = string.Empty;
|
|||
|
public string Contractor { get; set; } = string.Empty;
|
|||
|
public string Contract_Admin { get; set; } = string.Empty;
|
|||
|
public string Main_Coordinator { get; set; } = string.Empty;
|
|||
|
public string dataMonth { get; set; } = string.Empty;
|
|||
|
public string SumScore { get; set; } = string.Empty;
|
|||
|
}
|
|||
|
#endregion
|
|||
|
}
|
|||
|
}
|