feat(hjgl): 增加焊接日志导出与管道预制汇总
补充俄文焊接日志导出和管道预制汇总报表,统一菜单、数据库脚本与导出模板,便于按日报或单位工程查看和交付施工统计数据。
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PipePrefabricationSummary.aspx.cs" Inherits="FineUIPro.Web.HJGL.WeldingReport.PipePrefabricationSummary" %>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head runat="server">
|
||||
<title>管道预制汇总</title>
|
||||
<link href="../../res/css/common.css" rel="stylesheet" type="text/css" />
|
||||
<style type="text/css">
|
||||
.f-grid-row-summary .f-grid-cell-inner {
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<form id="form1" runat="server">
|
||||
<f:PageManager ID="PageManager1" AutoSizePanelID="Panel1" runat="server" />
|
||||
<f:Panel ID="Panel1" runat="server" Margin="5px" BodyPadding="5px" ShowBorder="false"
|
||||
ShowHeader="false" Layout="VBox" BoxConfigAlign="Stretch">
|
||||
<Items>
|
||||
<f:Grid ID="Grid1" runat="server" ShowBorder="true" ShowHeader="false"
|
||||
Title="管道预制汇总" BoxFlex="1" EnableColumnLines="true" EnableTextSelection="true"
|
||||
DataKeyNames="RowKey" DataIDField="RowKey" EnableSummary="true" SummaryPosition="Flow">
|
||||
<Toolbars>
|
||||
<f:Toolbar ID="Toolbar1" Position="Top" runat="server" ToolbarAlign="Left">
|
||||
<Items>
|
||||
<f:DropDownList ID="drpUnitWork" runat="server" Label="单位工程"
|
||||
LabelAlign="Right" LabelWidth="80px" Width="320px" EmptyText="全部单位工程"
|
||||
EnableEdit="true" EnableCheckBoxSelect="true" EnableMultiSelect="true"
|
||||
AutoSelectFirstItem="false">
|
||||
</f:DropDownList>
|
||||
<f:DatePicker ID="dpReportDate" runat="server" Label="报表日期"
|
||||
LabelAlign="Right" LabelWidth="80px" Width="190px">
|
||||
</f:DatePicker>
|
||||
<f:DatePicker ID="dpStartDate" runat="server" Label="日期范围"
|
||||
LabelAlign="Right" LabelWidth="80px" Width="190px">
|
||||
</f:DatePicker>
|
||||
<f:Label ID="lblDateSeparator" runat="server" Text="至"></f:Label>
|
||||
<f:DatePicker ID="dpEndDate" runat="server" Width="110px"></f:DatePicker>
|
||||
<f:ToolbarFill ID="ToolbarFill1" runat="server"></f:ToolbarFill>
|
||||
<f:Button ID="btnQuery" runat="server" Text="查询" Icon="SystemSearch"
|
||||
OnClick="btnQuery_Click">
|
||||
</f:Button>
|
||||
<f:Button ID="btnExport" runat="server" Text="导出" Icon="TableGo"
|
||||
EnableAjax="false" DisableControlBeforePostBack="false" OnClick="btnExport_Click">
|
||||
</f:Button>
|
||||
</Items>
|
||||
</f:Toolbar>
|
||||
</Toolbars>
|
||||
<Columns>
|
||||
<f:RenderField HeaderText="Unit<br/>(单位)" ColumnID="UnitCode" DataField="UnitCode"
|
||||
FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="90px">
|
||||
</f:RenderField>
|
||||
<f:RenderField HeaderText="Block<br/>(单位工程)" ColumnID="UnitWorkCode" DataField="UnitWorkCode"
|
||||
FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="110px">
|
||||
</f:RenderField>
|
||||
<f:RenderField HeaderText="Total Drawing Quantity<br/>(图纸总量)" ColumnID="TotalDrawingQuantity"
|
||||
DataField="TotalDrawingQuantityDisplay" FieldType="String" HeaderTextAlign="Center"
|
||||
TextAlign="Right" Width="175px">
|
||||
</f:RenderField>
|
||||
<f:RenderField HeaderText="ISO Drawing Qty-Cum.<br/>(DI,已收图累计)" ColumnID="IsoDrawingQuantity"
|
||||
DataField="IsoDrawingQuantityDisplay" FieldType="String" HeaderTextAlign="Center"
|
||||
TextAlign="Right" Width="190px">
|
||||
</f:RenderField>
|
||||
<f:RenderField HeaderText="Work front Qty-Cum.<br/>(DI,可预制工作面累计)" ColumnID="WorkFrontQuantity"
|
||||
DataField="WorkFrontQuantityDisplay" FieldType="String" HeaderTextAlign="Center"
|
||||
TextAlign="Right" Width="210px">
|
||||
</f:RenderField>
|
||||
<f:RenderField HeaderText="Completed Qty-Cum.<br/>(DI,累计已完成)" ColumnID="CompletedQuantity"
|
||||
DataField="CompletedQuantityDisplay" FieldType="String" HeaderTextAlign="Center"
|
||||
TextAlign="Right" Width="190px">
|
||||
</f:RenderField>
|
||||
<f:RenderField HeaderText="Qty Complete (%)<br/>(完成量占比)" ColumnID="QuantityCompleteRate"
|
||||
DataField="QuantityCompleteRateDisplay" FieldType="String" HeaderTextAlign="Center"
|
||||
TextAlign="Right" Width="150px">
|
||||
</f:RenderField>
|
||||
<f:RenderField HeaderText="Daily Qty<br/>(DI,昨天数据)" ColumnID="DailyQuantity"
|
||||
DataField="DailyQuantityDisplay" FieldType="String" HeaderTextAlign="Center"
|
||||
TextAlign="Right" Width="150px">
|
||||
</f:RenderField>
|
||||
<f:RenderField HeaderText="Previous day Qty-Cum<br/>(DI,前天累计数据)" ColumnID="PreviousDayCumulativeQuantity"
|
||||
DataField="PreviousDayCumulativeQuantityDisplay" FieldType="String" HeaderTextAlign="Center"
|
||||
TextAlign="Right" Width="195px">
|
||||
</f:RenderField>
|
||||
<f:RenderField HeaderText="This Weekly Qty<br/>(DI,本周数据)" ColumnID="WeeklyQuantity"
|
||||
DataField="WeeklyQuantityDisplay" FieldType="String" HeaderTextAlign="Center"
|
||||
TextAlign="Right" Width="160px">
|
||||
</f:RenderField>
|
||||
<f:RenderField HeaderText="Last week Qty-Cum.<br/>(DI,上周累计)" ColumnID="LastWeekCumulativeQuantity"
|
||||
DataField="LastWeekCumulativeQuantityDisplay" FieldType="String" HeaderTextAlign="Center"
|
||||
TextAlign="Right" Width="185px">
|
||||
</f:RenderField>
|
||||
<f:RenderField HeaderText="Note<br/>(备注)" ColumnID="Note" DataField="Note"
|
||||
FieldType="String" HeaderTextAlign="Center" TextAlign="Left" MinWidth="120px"
|
||||
ExpandUnusedSpace="true">
|
||||
</f:RenderField>
|
||||
</Columns>
|
||||
</f:Grid>
|
||||
</Items>
|
||||
</f:Panel>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,194 @@
|
||||
using BLL;
|
||||
using MiniExcelLibs;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace FineUIPro.Web.HJGL.WeldingReport
|
||||
{
|
||||
public partial class PipePrefabricationSummary : PageBase
|
||||
{
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (!IsPostBack)
|
||||
{
|
||||
UnitWorkService.InitUnitWorkDropDownList(drpUnitWork, CurrUser.LoginProjectId, false);
|
||||
DateTime today = DateTime.Today;
|
||||
int daysSinceMonday = ((int)today.DayOfWeek + 6) % 7;
|
||||
dpReportDate.SelectedDate = today;
|
||||
dpStartDate.SelectedDate = today.AddDays(-daysSinceMonday);
|
||||
dpEndDate.SelectedDate = today.AddDays(6 - daysSinceMonday);
|
||||
BindGrid();
|
||||
}
|
||||
}
|
||||
|
||||
protected void btnQuery_Click(object sender, EventArgs e)
|
||||
{
|
||||
BindGrid();
|
||||
}
|
||||
|
||||
protected void btnExport_Click(object sender, EventArgs e)
|
||||
{
|
||||
DateTime reportDate;
|
||||
DateTime startDate;
|
||||
DateTime endDate;
|
||||
if (!TryGetFilterDates(out reportDate, out startDate, out endDate))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
string templatePath = Path.Combine(Funs.RootPath, "File", "Excel", "DataOut", "管道预制汇总模板.xlsx");
|
||||
if (!File.Exists(templatePath))
|
||||
{
|
||||
ShowNotify("未找到管道预制汇总导出模板!", MessageBoxIcon.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
List<PipePrefabricationSummaryItem> rows = GetSummary(reportDate, startDate, endDate);
|
||||
var value = CreateExportValue(rows, reportDate);
|
||||
string fileName = string.Format(
|
||||
"管道预制汇总_{0:yyyyMMdd}_{1:yyyyMMdd}-{2:yyyyMMdd}.xlsx",
|
||||
reportDate,
|
||||
startDate,
|
||||
endDate);
|
||||
string filePath = Path.Combine(Funs.RootPath, "File", "Excel", "Temp", Guid.NewGuid().ToString("N") + ".xlsx");
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(filePath));
|
||||
MiniExcel.SaveAsByTemplate(filePath, templatePath, value);
|
||||
DownloadExcel(filePath, fileName);
|
||||
}
|
||||
|
||||
private void BindGrid()
|
||||
{
|
||||
DateTime reportDate;
|
||||
DateTime startDate;
|
||||
DateTime endDate;
|
||||
if (!TryGetFilterDates(out reportDate, out startDate, out endDate))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
List<PipePrefabricationSummaryItem> rows = GetSummary(reportDate, startDate, endDate);
|
||||
Grid1.RecordCount = rows.Count;
|
||||
Grid1.DataSource = rows;
|
||||
Grid1.DataBind();
|
||||
BindSummary(rows);
|
||||
}
|
||||
|
||||
private List<PipePrefabricationSummaryItem> GetSummary(
|
||||
DateTime reportDate,
|
||||
DateTime startDate,
|
||||
DateTime endDate)
|
||||
{
|
||||
string[] unitWorkIds = drpUnitWork.SelectedValueArray
|
||||
.Where(x => !string.IsNullOrWhiteSpace(x) && x != Const._Null)
|
||||
.ToArray();
|
||||
return PipePrefabricationSummaryService.GetSummary(
|
||||
CurrUser.LoginProjectId,
|
||||
unitWorkIds,
|
||||
startDate,
|
||||
endDate,
|
||||
reportDate);
|
||||
}
|
||||
|
||||
private bool TryGetFilterDates(
|
||||
out DateTime reportDate,
|
||||
out DateTime startDate,
|
||||
out DateTime endDate)
|
||||
{
|
||||
reportDate = DateTime.MinValue;
|
||||
startDate = DateTime.MinValue;
|
||||
endDate = DateTime.MinValue;
|
||||
if (!dpReportDate.SelectedDate.HasValue)
|
||||
{
|
||||
ShowNotify("请选择报表日期!", MessageBoxIcon.Warning);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!dpStartDate.SelectedDate.HasValue || !dpEndDate.SelectedDate.HasValue)
|
||||
{
|
||||
ShowNotify("请选择完整的日期范围!", MessageBoxIcon.Warning);
|
||||
return false;
|
||||
}
|
||||
|
||||
reportDate = dpReportDate.SelectedDate.Value.Date;
|
||||
startDate = dpStartDate.SelectedDate.Value.Date;
|
||||
endDate = dpEndDate.SelectedDate.Value.Date;
|
||||
if (startDate > endDate)
|
||||
{
|
||||
ShowNotify("开始日期不能晚于结束日期!", MessageBoxIcon.Warning);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void BindSummary(ICollection<PipePrefabricationSummaryItem> rows)
|
||||
{
|
||||
decimal totalDrawing = rows.Sum(x => x.TotalDrawingQuantity);
|
||||
decimal completed = rows.Sum(x => x.CompletedQuantity);
|
||||
JObject summary = new JObject
|
||||
{
|
||||
{ "UnitCode", string.Empty },
|
||||
{ "UnitWorkCode", "Total" },
|
||||
{ "TotalDrawingQuantity", PipePrefabricationSummaryItem.FormatQuantity(totalDrawing) },
|
||||
{ "IsoDrawingQuantity", PipePrefabricationSummaryItem.FormatQuantity(rows.Sum(x => x.IsoDrawingQuantity)) },
|
||||
{ "WorkFrontQuantity", PipePrefabricationSummaryItem.FormatQuantity(rows.Sum(x => x.WorkFrontQuantity)) },
|
||||
{ "CompletedQuantity", PipePrefabricationSummaryItem.FormatQuantity(completed) },
|
||||
{ "QuantityCompleteRate", GetCompleteRate(completed, totalDrawing) },
|
||||
{ "DailyQuantity", PipePrefabricationSummaryItem.FormatQuantity(rows.Sum(x => x.DailyQuantity)) },
|
||||
{ "PreviousDayCumulativeQuantity", PipePrefabricationSummaryItem.FormatQuantity(rows.Sum(x => x.PreviousDayCumulativeQuantity)) },
|
||||
{ "WeeklyQuantity", PipePrefabricationSummaryItem.FormatQuantity(rows.Sum(x => x.WeeklyQuantity)) },
|
||||
{ "LastWeekCumulativeQuantity", PipePrefabricationSummaryItem.FormatQuantity(rows.Sum(x => x.LastWeekCumulativeQuantity)) },
|
||||
{ "Note", string.Empty }
|
||||
};
|
||||
Grid1.SummaryData = summary;
|
||||
}
|
||||
|
||||
private static string GetCompleteRate(decimal completed, decimal totalDrawing)
|
||||
{
|
||||
return totalDrawing <= 0M ? "0.00%" : (completed * 100M / totalDrawing).ToString("0.00") + "%";
|
||||
}
|
||||
|
||||
private static Dictionary<string, object> CreateExportValue(
|
||||
ICollection<PipePrefabricationSummaryItem> rows,
|
||||
DateTime reportDate)
|
||||
{
|
||||
decimal totalDrawing = rows.Sum(x => x.TotalDrawingQuantity);
|
||||
decimal completed = rows.Sum(x => x.CompletedQuantity);
|
||||
// 只向模板上半部分的数据占位符传值;下方“陕西化建人力统计表”保持模板原样空白。
|
||||
return new Dictionary<string, object>
|
||||
{
|
||||
{ "ReportDate", reportDate.ToString("yyyy-MM-dd") },
|
||||
{ "Data", rows },
|
||||
// MiniExcel 1.31.3 的普通对象不支持模板中的嵌套属性,合计值使用扁平占位符。
|
||||
{ "TotalUnitCode", string.Empty },
|
||||
{ "TotalUnitWorkCode", "Total" },
|
||||
{ "TotalDrawingQuantity", totalDrawing },
|
||||
{ "TotalIsoDrawingQuantity", rows.Sum(x => x.IsoDrawingQuantity) },
|
||||
{ "TotalWorkFrontQuantity", rows.Sum(x => x.WorkFrontQuantity) },
|
||||
{ "TotalCompletedQuantity", completed },
|
||||
{ "TotalQuantityCompleteRate", GetCompleteRate(completed, totalDrawing) },
|
||||
{ "TotalDailyQuantity", rows.Sum(x => x.DailyQuantity) },
|
||||
{ "TotalPreviousDayCumulativeQuantity", rows.Sum(x => x.PreviousDayCumulativeQuantity) },
|
||||
{ "TotalWeeklyQuantity", rows.Sum(x => x.WeeklyQuantity) },
|
||||
{ "TotalLastWeekCumulativeQuantity", rows.Sum(x => x.LastWeekCumulativeQuantity) },
|
||||
{ "TotalNote", string.Empty }
|
||||
};
|
||||
}
|
||||
|
||||
private void DownloadExcel(string filePath, string fileName)
|
||||
{
|
||||
FileInfo file = new FileInfo(filePath);
|
||||
Response.Clear();
|
||||
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
||||
Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
|
||||
Response.AddHeader("Content-Length", file.Length.ToString());
|
||||
Response.TransmitFile(filePath, 0, file.Length);
|
||||
Response.Flush();
|
||||
File.Delete(filePath);
|
||||
Response.End();
|
||||
}
|
||||
}
|
||||
}
|
||||
+134
@@ -0,0 +1,134 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <自动生成>
|
||||
// 此代码由工具生成。
|
||||
//
|
||||
// 对此文件的更改可能导致不正确的行为,如果
|
||||
// 重新生成代码,则所做更改将丢失。
|
||||
// </自动生成>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace FineUIPro.Web.HJGL.WeldingReport
|
||||
{
|
||||
|
||||
|
||||
public partial class PipePrefabricationSummary
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// form1 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
|
||||
|
||||
/// <summary>
|
||||
/// PageManager1 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.PageManager PageManager1;
|
||||
|
||||
/// <summary>
|
||||
/// Panel1 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.Panel Panel1;
|
||||
|
||||
/// <summary>
|
||||
/// Grid1 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.Grid Grid1;
|
||||
|
||||
/// <summary>
|
||||
/// Toolbar1 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.Toolbar Toolbar1;
|
||||
|
||||
/// <summary>
|
||||
/// drpUnitWork 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.DropDownList drpUnitWork;
|
||||
|
||||
/// <summary>
|
||||
/// dpReportDate 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.DatePicker dpReportDate;
|
||||
|
||||
/// <summary>
|
||||
/// dpStartDate 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.DatePicker dpStartDate;
|
||||
|
||||
/// <summary>
|
||||
/// lblDateSeparator 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.Label lblDateSeparator;
|
||||
|
||||
/// <summary>
|
||||
/// dpEndDate 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.DatePicker dpEndDate;
|
||||
|
||||
/// <summary>
|
||||
/// ToolbarFill1 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.ToolbarFill ToolbarFill1;
|
||||
|
||||
/// <summary>
|
||||
/// btnQuery 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.Button btnQuery;
|
||||
|
||||
/// <summary>
|
||||
/// btnExport 控件。
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// 自动生成的字段。
|
||||
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
|
||||
/// </remarks>
|
||||
protected global::FineUIPro.Button btnExport;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user