提交代码

This commit is contained in:
2024-03-11 09:46:11 +08:00
parent 7772c5b682
commit 9dcce0f81c
30 changed files with 5368 additions and 417 deletions
@@ -0,0 +1,99 @@
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FourDecisionSchedule.aspx.cs" Inherits="FineUIPro.Web.TestRun.Report.FourDecisionSchedule" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>子系统工作包管理</title>
<style>
.f-grid-row .f-grid-cell-inner {
white-space: normal;
word-break: break-all;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<f:PageManager ID="PageManager1" AutoSizePanelID="Panel1" runat="server" />
<f:Panel ID="Panel1" runat="server" ShowBorder="false" ShowHeader="false" Layout="Region">
<Items>
<f:Panel runat="server" ID="panelLeftRegion" RegionPosition="Left" RegionSplit="true"
EnableCollapse="true" Width="320px" Title="子系统工作包管理" ShowBorder="true" Layout="VBox"
ShowHeader="false" AutoScroll="true" BodyPadding="5px" IconFont="ArrowCircleLeft">
<Items>
<f:Tree ID="tvControlItem" ShowHeader="false" Title="子系统工作包管理节点树" OnNodeCommand="tvControlItem_NodeCommand"
Height="1000px" runat="server" ShowBorder="false" EnableCollapse="true" EnableSingleClickExpand="true"
AutoLeafIdentification="true" EnableSingleExpand="false" EnableTextSelection="true" OnNodeExpand="tvControlItem_NodeExpand">
</f:Tree>
</Items>
</f:Panel>
<f:Panel runat="server" ID="panelCenterRegion" RegionPosition="Center" ShowBorder="true"
Layout="VBox" ShowHeader="false" BodyPadding="5px" IconFont="PlusCircle" Title="子系统工作包管理"
TitleToolTip="子系统工作包管理" AutoScroll="true">
<Toolbars>
<f:Toolbar ID="Toolbar2" Position="Top" runat="server" ToolbarAlign="Right">
<Items>
<f:HiddenField runat="server" ID="hdTrustID"></f:HiddenField>
</Items>
</f:Toolbar>
</Toolbars>
<Items>
<f:Form ID="SimpleForm1" ShowBorder="true" ShowHeader="false" AutoScroll="true" BodyPadding="10px"
runat="server" RedStarPosition="BeforeText" LabelAlign="Right">
<Rows>
<f:FormRow runat="server" ID="zxtsc">
<Items>
<f:Grid Height="550px" ID="GridFourDecision" ShowBorder="true" ShowHeader="true" EnableCollapse="true" runat="server" DataIDField="Level" DataKeyNames="Level" AllowSorting="false" SortField="Sort" SortDirection="ASC" EnableColumnLines="true" AllowCellEditing="true" EnableMultiSelect="false" AllowPaging="false" IsDatabasePaging="true" EnableSummary="true" SummaryPosition="Flow">
<Toolbars>
<f:Toolbar ID="Toolbar3" runat="server">
<Items>
<f:ToolbarFill ID="ToolbarFill1" runat="server"></f:ToolbarFill>
<f:Button ID="btnScsdExport" runat="server" Icon="ApplicationGo" Text="导出" ToolTip="导出" OnClick="btnScsdExport_Click" DisableControlBeforePostBack="false" EnableAjax="false"></f:Button>
</Items>
</f:Toolbar>
</Toolbars>
<Columns>
<f:RowNumberField EnablePagingNumber="true" Width="50px" HeaderTextAlign="Center" TextAlign="Center" />
<f:RenderField HeaderText="级别" ColumnID="Level" DataField="Level" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="装置名称" ColumnID="InstallationName" DataField="InstallationName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="工序名称" ColumnID="ProcessesName" DataField="ProcessesName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="系统名称" ColumnID="SystemName" DataField="SystemName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="子系统名称" ColumnID="SubsystemName" DataField="SubsystemName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="尾项数量" ColumnID="AllNum" DataField="AllNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="未关闭尾项数量" ColumnID="NoCloseNum" DataField="NoCloseNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="已关闭尾项数量" ColumnID="CloseNum" DataField="CloseNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
</Columns>
<Listeners>
<f:Listener Event="beforerowcontextmenu" Handler="onRowContextMenu" />
</Listeners>
</f:Grid>
</Items>
</f:FormRow>
</Rows>
</f:Form>
</Items>
</f:Panel>
</Items>
</f:Panel>
</form>
<script type="text/javascript">
// 返回false,来阻止浏览器右键菜单
function onRowContextMenu(event, rowId) {
return false;
}
function reloadGrid() {
__doPostBack(null, 'reloadGrid');
}
</script>
</body>
</html>
@@ -0,0 +1,460 @@
using BLL;
using Model;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Reflection;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;
using System.IO;
using Newtonsoft.Json.Linq;
namespace FineUIPro.Web.TestRun.Report
{
public partial class FourDecisionSchedule : PageBase
{
/// <summary>
/// 点击树状主键
/// </summary>
public string TreePreRunId { get { return (string)ViewState["TreePreRunId"]; } set { ViewState["TreePreRunId"] = value; } }
/// <summary>
/// 子系统主键
/// </summary>
public List<string> SubSystemIds { get { return (List<string>)ViewState["SubSystemIds"]; } set { ViewState["SubSystemIds"] = value; } }
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (SubSystemIds == null) SubSystemIds = new List<string>();
this.InitTreeMenu();//加载树
}
}
#region
/// <summary>
/// 加载树
/// </summary>
private void InitTreeMenu()
{
this.tvControlItem.Nodes.Clear();
TreeNode rootNode = new TreeNode();
rootNode.Text = "系统划分";
rootNode.NodeID = "0";
rootNode.Expanded = true;
rootNode.ToolTip = "";
rootNode.EnableClickEvent = true;
this.tvControlItem.Nodes.Add(rootNode);
var allPreRunLs = Funs.DB.PreRun_SysDevice.Where(p => p.ProjectId == this.CurrUser.LoginProjectId).ToList();
var onePreRunLs = allPreRunLs.Where(p => p.PreRunLevel == 1).OrderBy(x => x.Sort);
foreach (var item in onePreRunLs)
{
TreeNode rootUnitNode = new TreeNode();//定义根节点
rootUnitNode.NodeID = item.PreRunId;
rootUnitNode.Text = item.PreRunName;
rootUnitNode.ToolTip = item.PreRunName;
rootUnitNode.CommandName = "";
rootUnitNode.EnableClickEvent = true;
rootUnitNode.EnableExpandEvent = true;
rootNode.Nodes.Add(rootUnitNode);
rootUnitNode.Expanded = true;
var otherPreRunls = allPreRunLs.Where(p => p.PreRunLevel != 1).ToList();
this.BindNodes(rootUnitNode, otherPreRunls, item.PreRunId);
}
}
/// <summary>
/// 绑定树节点
/// </summary>
private void BindNodes(TreeNode node, List<PreRun_SysDevice> list, string parentId)
{
var itemList = list.Where(p => p.ParentId == parentId).OrderBy(x => x.Sort).ToList();
if (itemList.Count > 0)
{
foreach (var item in itemList)
{
TreeNode newNode = new TreeNode();
newNode.Text = item.PreRunName;
newNode.NodeID = item.PreRunId;
newNode.ToolTip = item.PreRunName;
newNode.CommandName = "";
newNode.EnableClickEvent = true;
node.Nodes.Add(newNode);
BindNodes(newNode, list, item.PreRunId);
}
}
}
/// <summary>
/// 数加载
/// </summary>
protected void tvControlItem_NodeExpand(object sender, TreeNodeEventArgs e)
{
if (e.Node.Nodes != null)
{
e.Node.Nodes.Clear();
}
var allPreRunLs = Funs.DB.PreRun_SysDevice.Where(p => p.ProjectId == this.CurrUser.LoginProjectId).ToList();
this.BindNodes(e.Node, allPreRunLs, e.NodeID);
}
/// <summary>
/// 点击TreeView
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void tvControlItem_NodeCommand(object sender, TreeCommandEventArgs e)
{
var devices = new List<PreRun_SysDevice>();
this.TreePreRunId = tvControlItem.SelectedNodeID != "0" ? tvControlItem.SelectedNodeID : string.Empty;
if (!string.IsNullOrWhiteSpace(this.TreePreRunId))
{
var model = Funs.DB.PreRun_SysDevice.FirstOrDefault(x => x.PreRunId == this.TreePreRunId);
if (model.PreRunLevel == 4)
{
this.SubSystemIds = new List<string>() { model.PreRunId };
}
else if (model.PreRunLevel == 3)
{
devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 4 && x.SystemId == model.PreRunId).ToList();
if (devices.Count > 0)
{
this.SubSystemIds = devices.ConvertAll(x => x.PreRunId);
}
}
else if (model.PreRunLevel == 2)
{
devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 4 && x.ProcessesId == model.PreRunId).ToList();
if (devices.Count > 0)
{
this.SubSystemIds = devices.ConvertAll(x => x.PreRunId);
}
}
else if (model.PreRunLevel == 1)
{
devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 4 && x.InstallationId == model.PreRunId).ToList();
if (devices.Count > 0)
{
this.SubSystemIds = devices.ConvertAll(x => x.PreRunId);
}
}
}
else
{
devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 4).ToList();
if (devices.Count > 0)
{
this.SubSystemIds = devices.ConvertAll(x => x.PreRunId);
}
}
FourDecisionBrid();
}
#endregion
#region /
/// <summary>
/// 三查四定绑定
/// </summary>
public void FourDecisionBrid()
{
var result = new List<FourDecisionScheduleBridDto>();
if (this.SubSystemIds.Count > 0)
{
result = GetFourDecisionSchedules();
}
GridFourDecision.DataSource = result;
GridFourDecision.DataBind();
JObject summary = new JObject();
summary.Add("AllNum", result.Sum(x => x.AllNum));
summary.Add("NoCloseNum", result.Sum(x => x.NoCloseNum));
summary.Add("CloseNum", result.Sum(x => x.CloseNum));
GridFourDecision.SummaryData = summary;
}
/// <summary>
/// 导出
/// </summary>
protected void btnScsdExport_Click(object sender, EventArgs e)
{
string rootPath = Server.MapPath("~/") + Const.ExcelUrl;
//导出文件
string filePath = rootPath + DateTime.Now.ToString("yyyyMMddhhmmss") + "\\";
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
string ReportFileName = filePath + "三查四定进度.xlsx";
var result = GetFourDecisionSchedules();
if (result.Count > 0)
{
XSSFWorkbook hssfworkbook = new XSSFWorkbook();
XSSFSheet ws = (XSSFSheet)hssfworkbook.CreateSheet("三查四定进度");
#region
ws.SetColumnWidth(0, (30 * 256));
ws.SetColumnWidth(1, (20 * 256));
ws.SetColumnWidth(2, (20 * 256));
ws.SetColumnWidth(3, (20 * 256));
ws.SetColumnWidth(4, (20 * 256));
ws.SetColumnWidth(5, (20 * 256));
ws.SetColumnWidth(6, (20 * 256));
ws.SetColumnWidth(7, (20 * 256));
#endregion
#region
//公共样式
ICellStyle style = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 10.5, true);
//公共样式加粗
ICellStyle styleBold = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 10.5, true, true);
#endregion
#region
ws = ExcelCreateRowTitle(ws, hssfworkbook, style, 0, 0, 0, 7);
//行1
ws.GetRow(0).GetCell(0).CellStyle = styleBold;
ws.GetRow(0).GetCell(0).SetCellValue("级别");
ws.GetRow(0).GetCell(1).CellStyle = styleBold;
ws.GetRow(0).GetCell(1).SetCellValue("装置名称");
ws.GetRow(0).GetCell(2).CellStyle = styleBold;
ws.GetRow(0).GetCell(2).SetCellValue("工序名称");
ws.GetRow(0).GetCell(3).CellStyle = styleBold;
ws.GetRow(0).GetCell(3).SetCellValue("系统名称");
ws.GetRow(0).GetCell(4).CellStyle = styleBold;
ws.GetRow(0).GetCell(4).SetCellValue("子系统名称");
ws.GetRow(0).GetCell(5).CellStyle = styleBold;
ws.GetRow(0).GetCell(5).SetCellValue("尾项数量");
ws.GetRow(0).GetCell(6).CellStyle = styleBold;
ws.GetRow(0).GetCell(6).SetCellValue("未关闭尾项数量");
ws.GetRow(0).GetCell(7).CellStyle = styleBold;
ws.GetRow(0).GetCell(7).SetCellValue("已关闭尾项数量");
#endregion
#region
var start = 1;
var end = result.Count;
ws = ExcelCreateRowTitle(ws, hssfworkbook, style, start, end, 0, 7);
//数据
var dataIndex = 1;
foreach (var item in result)
{
ws.GetRow(dataIndex).GetCell(0).SetCellValue(item.Level);
ws.GetRow(dataIndex).GetCell(1).SetCellValue(item.InstallationName);
ws.GetRow(dataIndex).GetCell(2).SetCellValue(item.ProcessesName);
ws.GetRow(dataIndex).GetCell(3).SetCellValue(item.SystemName);
ws.GetRow(dataIndex).GetCell(4).SetCellValue(item.SubsystemName);
ws.GetRow(dataIndex).GetCell(5).SetCellValue(item.AllNum);
ws.GetRow(dataIndex).GetCell(6).SetCellValue(item.NoCloseNum);
ws.GetRow(dataIndex).GetCell(7).SetCellValue(item.CloseNum);
dataIndex++;
}
#endregion
#region
ws = ExcelCreateRowTitle(ws, hssfworkbook, style, end + 1, end + 1, 0, 7);
var region = new CellRangeAddress(end + 1, end + 1, 0, 4);
ws.AddMergedRegion(region);
ws.GetRow(end + 1).GetCell(0).SetCellValue("合计");
ws.GetRow(end + 1).GetCell(5).SetCellValue(result.Count > 0 ? result.Sum(x => x.AllNum).ToString() : "0");
ws.GetRow(end + 1).GetCell(6).SetCellValue(result.Count > 0 ? result.Sum(x => x.NoCloseNum).ToString() : "0");
ws.GetRow(end + 1).GetCell(7).SetCellValue(result.Count > 0 ? result.Sum(x => x.CloseNum).ToString() : "0");
#endregion
ws.PrintSetup.Landscape = false;
ws.PrintSetup.PaperSize = 9;
ws.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=" + Server.UrlEncode("三查四定进度.xlsx"));
// 添加头信息,指定文件大小,让浏览器能够显示下载进度
Response.AddHeader("Content-Length", filet.Length.ToString());
// 指定返回的是一个不能被客户端读取的流,必须被下载
Response.ContentType = "application/ms-excel";
// 把文件流发送到客户端
Response.WriteFile(filet.FullName);
// 停止页面的执行
Response.End();
}
}
#endregion
#region
/// <summary>
/// 创建头部
/// </summary>
/// <returns></returns>
private XSSFSheet ExcelCreateRowTitle(XSSFSheet ws, XSSFWorkbook hssfworkbook, ICellStyle style, int sRows, int eRows, int cStart, int cEnd, float height = 21)
{
for (int i = sRows; i <= eRows; i++)
{
ws.CreateRow(i);
ws.GetRow(i).HeightInPoints = height;
for (int j = cStart; j <= cEnd; j++)
{
ws.GetRow(i).CreateCell(j);
ws.GetRow(i).CreateCell(j).CellStyle = style;
}
}
return ws;
}
/// <summary>
/// 创建样式
/// </summary>
/// <returns></returns>
public static ICellStyle SetExcelStyle(XSSFWorkbook wb, BorderStyle Bottom, BorderStyle Left, BorderStyle Right, BorderStyle Top, VerticalAlignment VerAig, HorizontalAlignment HorAig, double FontSize, bool WrapText = true, bool Bold = false, string FontName = "宋体")
{
ICellStyle style = wb.CreateCellStyle();
style.BorderBottom = Bottom;
style.BorderLeft = Left;
style.BorderRight = Right;
style.BorderTop = Top;
style.VerticalAlignment = VerAig;
style.Alignment = HorAig;
IFont font = wb.CreateFont();
font.FontHeightInPoints = FontSize;
font.IsBold = Bold;
font.FontName = FontName;
style.SetFont(font);
style.WrapText = WrapText;
return style;
}
/// <summary>
/// 获取三查四定统计
/// </summary>
/// <returns></returns>
private List<FourDecisionScheduleBridDto> GetFourDecisionSchedules()
{
var list = new List<FourDecisionScheduleBridDto>();
string allStr = $"select Level,COUNT(1) as AllNum,SUM(case ISNULL(a.DecisionIsClose,0) when 0 then 1 else 0 end) as NoCloseNum,SUM(case ISNULL(a.DecisionIsClose,0) when 1 then 1 else 0 end) as CloseNum from PreRun_SubThreeChecksFourDecision as a where a.SubSystemId in ('{string.Join("','", this.SubSystemIds)}') and a.ProjectId='{this.CurrUser.LoginProjectId}' group by a.Level order by a.Level asc";
var dt = SQLHelper.GetDataTableRunText(allStr);
if (dt.Rows.Count > 0)
{
string deviceStr = $"select b.PreRunName as InstallationName,c.PreRunName as ProcessesName,d.PreRunName as SystemName,e.PreRunName as SubsystemName from PreRun_SysDevice as a left join PreRun_SysDevice as b on b.PreRunId=ISNULL(a.InstallationId,a.PreRunId) left join PreRun_SysDevice as c on c.PreRunId=a.ProcessesId left join PreRun_SysDevice as d on d.PreRunId=a.SystemId left join PreRun_SysDevice as e on e.PreRunId=a.SubsystemId where a.PreRunId='{this.TreePreRunId}'";
var driveDt = SQLHelper.GetDataTableRunText(deviceStr);
list = DataTableToList<FourDecisionScheduleBridDto>(dt);
foreach (var item in list)
{
if (driveDt.Rows.Count > 0)
{
item.InstallationName = driveDt.Rows[0]["InstallationName"].ToString();
item.ProcessesName = driveDt.Rows[0]["ProcessesName"].ToString();
item.SystemName = driveDt.Rows[0]["SystemName"].ToString();
item.SubsystemName = driveDt.Rows[0]["SubsystemName"].ToString();
}
}
}
return list;
}
/// <summary>
/// 三查四定统计实体
/// </summary>
public class FourDecisionScheduleBridDto
{
/// <summary>
/// 级别
/// </summary>
public string Level { get; set; }
/// <summary>
/// 装置名称
/// </summary>
public string InstallationName { get; set; }
/// <summary>
/// 工序名称
/// </summary>
public string ProcessesName { get; set; }
/// <summary>
/// 系统名称
/// </summary>
public string SystemName { get; set; }
/// <summary>
/// 子系统名称
/// </summary>
public string SubsystemName { get; set; }
/// <summary>
/// 尾项数量
/// </summary>
public int AllNum { get; set; }
/// <summary>
/// 未关闭尾项数量
/// </summary>
public int NoCloseNum { get; set; }
/// <summary>
/// 已关闭尾项数量
/// </summary>
public int CloseNum { get; set; }
}
#endregion
#region
/// <summary>
/// DataTable转换List
/// </summary>
/// <returns></returns>
public List<T> DataTableToList<T>(DataTable table)
{
List<T> list = new List<T>();
T t = default(T);
PropertyInfo[] propertypes = null;
string tempName = string.Empty;
foreach (DataRow row in table.Rows)
{
t = Activator.CreateInstance<T>();
propertypes = t.GetType().GetProperties();
foreach (PropertyInfo pro in propertypes)
{
tempName = pro.Name;
if (table.Columns.Contains(tempName))
{
object value = row[tempName];
if (!value.ToString().Equals(""))
{
pro.SetValue(t, value, null);
}
}
}
list.Add(t);
}
return list.Count == 0 ? new List<T>() : list;
}
#endregion
}
}
@@ -0,0 +1,143 @@
//------------------------------------------------------------------------------
// <自动生成>
// 此代码由工具生成。
//
// 对此文件的更改可能导致不正确的行为,如果
// 重新生成代码,则所做更改将丢失。
// </自动生成>
//------------------------------------------------------------------------------
namespace FineUIPro.Web.TestRun.Report
{
public partial class FourDecisionSchedule
{
/// <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>
/// panelLeftRegion 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel panelLeftRegion;
/// <summary>
/// tvControlItem 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Tree tvControlItem;
/// <summary>
/// panelCenterRegion 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Panel panelCenterRegion;
/// <summary>
/// Toolbar2 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Toolbar Toolbar2;
/// <summary>
/// hdTrustID 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.HiddenField hdTrustID;
/// <summary>
/// SimpleForm1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Form SimpleForm1;
/// <summary>
/// zxtsc 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.FormRow zxtsc;
/// <summary>
/// GridFourDecision 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Grid GridFourDecision;
/// <summary>
/// Toolbar3 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Toolbar Toolbar3;
/// <summary>
/// ToolbarFill1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.ToolbarFill ToolbarFill1;
/// <summary>
/// btnScsdExport 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnScsdExport;
}
}
@@ -44,84 +44,46 @@
<Rows>
<f:FormRow runat="server" ID="zxtsc">
<Items>
<f:TabStrip ID="TabStrip1" IsFluid="true"
AutoPostBack="true" OnTabIndexChanged="TabStrip1_TabIndexChanged"
ShowBorder="true" ActiveTabIndex="1" runat="server">
<Tabs>
<f:Tab Title="预试车进度" BodyPadding="10px" Layout="Fit" runat="server">
<f:Grid Height="550px" ID="GridPreRun" ShowBorder="true" ShowHeader="true" EnableCollapse="true" runat="server" DataIDField="WorkPackId" DataKeyNames="WorkPackId" AllowSorting="false" SortField="Sort" SortDirection="ASC" EnableColumnLines="true" AllowCellEditing="true" EnableMultiSelect="false" AllowPaging="false" IsDatabasePaging="true" EnableSummary="true" SummaryPosition="Flow">
<Toolbars>
<f:Toolbar ID="Toolbar1" runat="server">
<Items>
<f:Grid Height="550px" ID="GridPreRun" ShowBorder="true" ShowHeader="true" EnableCollapse="true" runat="server" DataIDField="WorkPackId" DataKeyNames="WorkPackId" AllowSorting="false" SortField="Sort" SortDirection="ASC" EnableColumnLines="true" AllowCellEditing="true" EnableMultiSelect="false" AllowPaging="false" IsDatabasePaging="true">
<Toolbars>
<f:Toolbar ID="Toolbar1" runat="server">
<Items>
<f:ToolbarFill ID="ToolbarFill" runat="server"></f:ToolbarFill>
</Items>
</f:Toolbar>
</Toolbars>
<Columns>
<f:RowNumberField EnablePagingNumber="true" Width="50px" HeaderTextAlign="Center" TextAlign="Center" />
<f:RenderField HeaderText="工作包名称" ColumnID="WorkName" DataField="WorkName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="装置名称" ColumnID="InstallationName" DataField="InstallationName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="工序名称" ColumnID="ProcessesName" DataField="ProcessesName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="系统名称" ColumnID="SystemName" DataField="SystemName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="子系统名称" ColumnID="SubsystemName" DataField="SubsystemName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="工作包数量" ColumnID="AllNum" DataField="AllNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="未关闭任务单数量" ColumnID="NoCloseNum" DataField="NoCloseNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="已关闭任务单数量" ColumnID="CloseNum" DataField="CloseNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
</Columns>
<Listeners>
<f:Listener Event="beforerowcontextmenu" Handler="onRowContextMenu" />
</Listeners>
</f:Grid>
<f:ToolbarFill ID="ToolbarFill" runat="server"></f:ToolbarFill>
<f:Button ID="btnYscExport" runat="server" Icon="ApplicationGo" Text="导出" ToolTip="导出" OnClick="btnYscExport_Click" DisableControlBeforePostBack="false" EnableAjax="false"></f:Button>
</Items>
</f:Tab>
<f:Tab Title="三查四定进度" BodyPadding="10px" Layout="Fit" runat="server">
<Items>
<f:Grid Height="550px" ID="GridFourDecision" ShowBorder="true" ShowHeader="true" EnableCollapse="true" runat="server" DataIDField="PreRunId" DataKeyNames="PreRunId" AllowSorting="false" SortField="Sort" SortDirection="ASC" EnableColumnLines="true" AllowCellEditing="true" EnableMultiSelect="false" AllowPaging="false" IsDatabasePaging="true">
<Toolbars>
<f:Toolbar ID="Toolbar3" runat="server">
<Items>
<f:ToolbarFill ID="ToolbarFill1" runat="server"></f:ToolbarFill>
</Items>
</f:Toolbar>
</Toolbars>
<Columns>
<f:RowNumberField EnablePagingNumber="true" Width="50px" HeaderTextAlign="Center" TextAlign="Center" />
<f:RenderField HeaderText="装置名称" ColumnID="InstallationName" DataField="InstallationName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="工序名称" ColumnID="ProcessesName" DataField="ProcessesName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="系统名称" ColumnID="SystemName" DataField="SystemName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="子系统名称" ColumnID="SubsystemName" DataField="SubsystemName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="工作包数量" ColumnID="AllNum" DataField="AllNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="未关闭任务单数量" ColumnID="NoCloseNum" DataField="NoCloseNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="已关闭任务单数量" ColumnID="CloseNum" DataField="CloseNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
</Columns>
<Listeners>
<f:Listener Event="beforerowcontextmenu" Handler="onRowContextMenu" />
</Listeners>
</f:Grid>
</Items>
</f:Tab>
</Tabs>
</f:TabStrip>
</f:Toolbar>
</Toolbars>
<Columns>
<f:RowNumberField EnablePagingNumber="true" Width="50px" HeaderTextAlign="Center" TextAlign="Center" />
<f:RenderField HeaderText="工作包名称" ColumnID="WorkPackName" DataField="WorkPackName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="装置名称" ColumnID="InstallationName" DataField="InstallationName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="工序名称" ColumnID="ProcessesName" DataField="ProcessesName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="系统名称" ColumnID="SystemName" DataField="SystemName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="子系统名称" ColumnID="SubsystemName" DataField="SubsystemName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="工作包数量" ColumnID="WorkPackNum" DataField="WorkPackNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="工作包未关闭数量" ColumnID="WorkPackNoCloseNum" DataField="WorkPackNoCloseNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="工作包已关闭数量" ColumnID="WorkPackCloseNum" DataField="WorkPackCloseNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="检查表数量" ColumnID="InspectNum" DataField="InspectNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="检查表未关闭数量" ColumnID="InspectNoCloseNum" DataField="InspectNoCloseNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="检查表已关闭数量" ColumnID="InspectCloseNum" DataField="InspectCloseNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
</Columns>
<Listeners>
<f:Listener Event="beforerowcontextmenu" Handler="onRowContextMenu" />
</Listeners>
</f:Grid>
</Items>
</f:FormRow>
</Rows>
</f:Form>
</Items>
@@ -1,14 +1,23 @@
using Aspose.Words.Lists;
using BLL;
using FineUIPro.Web.DataShow;
using Model;
using System;
using System.ArrayExtensions;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WIA;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;
using System.Drawing;
using Newtonsoft.Json.Linq;
namespace FineUIPro.Web.TestRun.Report
{
@@ -21,14 +30,14 @@ namespace FineUIPro.Web.TestRun.Report
/// <summary>
/// 子系统主键
/// </summary>
public string SsubSystemId { get { return (string)ViewState["SsubSystemId"]; } set { ViewState["SsubSystemId"] = value; } }
public List<string> SubSystemIds { get { return (List<string>)ViewState["SubSystemIds"]; } set { ViewState["SubSystemIds"] = value; } }
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (SubSystemIds == null) SubSystemIds = new List<string>();
this.InitTreeMenu();//加载树
TabStrip1.ActiveTabIndex = 0;
}
}
@@ -108,146 +117,214 @@ namespace FineUIPro.Web.TestRun.Report
/// <param name="e"></param>
protected void tvControlItem_NodeCommand(object sender, TreeCommandEventArgs e)
{
var devices = new List<PreRun_SysDevice>();
this.TreePreRunId = tvControlItem.SelectedNodeID != "0" ? tvControlItem.SelectedNodeID : string.Empty;
if (TabStrip1.ActiveTabIndex == 0)
if (!string.IsNullOrWhiteSpace(this.TreePreRunId))
{
PreRunBrid();
var model = Funs.DB.PreRun_SysDevice.FirstOrDefault(x => x.PreRunId == this.TreePreRunId);
if (model.PreRunLevel == 4)
{
this.SubSystemIds = new List<string>() { model.PreRunId };
}
else if (model.PreRunLevel == 3)
{
devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 4 && x.SystemId == model.PreRunId).ToList();
if (devices.Count > 0)
{
this.SubSystemIds = devices.ConvertAll(x => x.PreRunId);
}
}
else if (model.PreRunLevel == 2)
{
devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 4 && x.ProcessesId == model.PreRunId).ToList();
if (devices.Count > 0)
{
this.SubSystemIds = devices.ConvertAll(x => x.PreRunId);
}
}
else if (model.PreRunLevel == 1)
{
devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 4 && x.InstallationId == model.PreRunId).ToList();
if (devices.Count > 0)
{
this.SubSystemIds = devices.ConvertAll(x => x.PreRunId);
}
}
}
else if (TabStrip1.ActiveTabIndex == 1)
else
{
FourDecisionBrid();
devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 4).ToList();
if (devices.Count > 0)
{
this.SubSystemIds = devices.ConvertAll(x => x.PreRunId);
}
}
PreRunBrid();
}
#endregion
#region
#region /
/// <summary>
/// 预试车绑定
/// </summary>
public void PreRunBrid()
{
var result = new List<ScheduleBridDto>();
string strSql = "select a.WorkPackId,b.WorkPackName,b.Sort,SUM(case ISNULL(a.InspectIsClose,0) when 1 then 1 else 0 end) as ygbnum,SUM(case ISNULL(a.InspectIsClose,0) when 0 then 1 else 0 end) as wgbnum,COUNT(1) as allnum from PreRun_SubInspectTerm as a inner join PreRun_WorkPackage as b on a.WorkPackId=b.WorkPackId where 1=1 and a.ProjectId=@ProjectId ";
List<SqlParameter> listStr = new List<SqlParameter>();
listStr.Add(new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId));
string installationName = "-";
string processesName = "-";
string systemName = "-";
string subsystemName = "-";
string columnames = string.Empty;
if (!string.IsNullOrWhiteSpace(this.TreePreRunId))
var result = new List<PreRunScheduleDto>();
if (this.SubSystemIds.Count > 0)
{
var model = Funs.DB.PreRun_SysDevice.FirstOrDefault(p => p.PreRunId == this.TreePreRunId);
if (model.PreRunLevel == 1)
{
installationName = model.PreRunName;
columnames = "a.InstallationId";
}
else if (model.PreRunLevel == 2)
{
processesName = model.PreRunName;
columnames = "a.ProcessesId";
}
else if (model.PreRunLevel == 3)
{
systemName = model.PreRunName;
columnames = "a.SystemId";
}
else if (model.PreRunLevel == 4)
{
subsystemName = model.PreRunName;
columnames = "a.SubsystemId";
}
strSql += $"and {columnames}='{model.PreRunId}'";
}
strSql += "group by a.WorkPackId,b.WorkPackName,b.Sort order by b.Sort asc";
SqlParameter[] parameter = listStr.ToArray();
var dt = SQLHelper.GetDataTableRunText(strSql, parameter);
if (dt != null)
{
foreach (DataRow item in dt.Rows)
{
result.Add(new ScheduleBridDto()
{
WorkPackId = item["WorkPackId"].ToString(),
WorkName = item["WorkPackName"].ToString(),
InstallationName = installationName,
ProcessesName = processesName,
SystemName = systemName,
SubsystemName = subsystemName,
AllNum = item["allnum"].ToString(),
NoCloseNum = item["wgbnum"].ToString(),
CloseNum = item["ygbnum"].ToString()
});
}
result = GetPreRunSchedules();
}
GridPreRun.DataSource = result;
GridPreRun.DataBind();
JObject summary = new JObject();
summary.Add("WorkPackNum", result.Sum(x => x.WorkPackNum));
summary.Add("WorkPackNoCloseNum", result.Sum(x => x.WorkPackNoCloseNum));
summary.Add("WorkPackCloseNum", result.Sum(x => x.WorkPackCloseNum));
summary.Add("InspectNum", result.Sum(x => x.InspectNum));
summary.Add("InspectNoCloseNum", result.Sum(x => x.InspectNoCloseNum));
summary.Add("InspectCloseNum", result.Sum(x => x.InspectCloseNum));
GridPreRun.SummaryData = summary;
}
/// <summary>
/// 三查四定绑定
/// 导出
/// </summary>
public void FourDecisionBrid()
protected void btnYscExport_Click(object sender, EventArgs e)
{
var result = new List<ScheduleBridDto>();
string strSql = "select b.PreRunId,b.InstallationId,b.ProcessesId,b.SystemId,b.SubsystemId,b.Sort,SUM(case ISNULL(a.DecisionIsClose,0) when 1 then 1 else 0 end) as ygbnum,SUM(case ISNULL(a.DecisionIsClose,0) when 0 then 1 else 0 end) as wgbnum,COUNT(1) as allnum from PreRun_SubThreeChecksFourDecision as a inner join PreRun_SysDevice as b on a.SubSystemId=b.PreRunId where 1=1 and a.ProjectId=@ProjectId ";
List<SqlParameter> listStr = new List<SqlParameter>();
listStr.Add(new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId));
string installationName = "-";
string processesName = "-";
string systemName = "-";
string subsystemName = "-";
string columnames = string.Empty;
if (!string.IsNullOrWhiteSpace(this.TreePreRunId))
string rootPath = Server.MapPath("~/") + Const.ExcelUrl;
//导出文件
string filePath = rootPath + DateTime.Now.ToString("yyyyMMddhhmmss") + "\\";
if (!Directory.Exists(filePath))
{
var model = Funs.DB.PreRun_SysDevice.FirstOrDefault(p => p.PreRunId == this.TreePreRunId);
if (model.PreRunLevel == 1)
{
installationName = model.PreRunName;
columnames = "b.InstallationId";
}
else if (model.PreRunLevel == 2)
{
processesName = model.PreRunName;
columnames = "b.ProcessesId";
}
else if (model.PreRunLevel == 3)
{
systemName = model.PreRunName;
columnames = "b.SystemId";
}
else if (model.PreRunLevel == 4)
{
subsystemName = model.PreRunName;
columnames = "b.SubsystemId";
}
strSql += $"and {columnames}='{model.PreRunId}'";
Directory.CreateDirectory(filePath);
}
strSql += "group by b.PreRunId,b.InstallationId,b.ProcessesId,b.SystemId,b.SubsystemId,b.Sort order by b.Sort asc";
SqlParameter[] parameter = listStr.ToArray();
var dt = SQLHelper.GetDataTableRunText(strSql, parameter);
if (dt != null)
string ReportFileName = filePath + "预试车进度.xlsx";
var result = GetPreRunSchedules();
if (result.Count > 0)
{
foreach (DataRow item in dt.Rows)
XSSFWorkbook hssfworkbook = new XSSFWorkbook();
XSSFSheet ws = (XSSFSheet)hssfworkbook.CreateSheet("预试车进度");
#region
ws.SetColumnWidth(0, (30 * 256));
ws.SetColumnWidth(1, (20 * 256));
ws.SetColumnWidth(2, (20 * 256));
ws.SetColumnWidth(3, (20 * 256));
ws.SetColumnWidth(4, (20 * 256));
ws.SetColumnWidth(5, (20 * 256));
ws.SetColumnWidth(6, (20 * 256));
ws.SetColumnWidth(7, (20 * 256));
ws.SetColumnWidth(8, (20 * 256));
ws.SetColumnWidth(9, (20 * 256));
ws.SetColumnWidth(10, (20 * 256));
#endregion
#region
//公共样式
ICellStyle style = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 10.5, true);
//公共样式加粗
ICellStyle styleBold = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 10.5, true, true);
#endregion
#region
ws = ExcelCreateRowTitle(ws, hssfworkbook, style, 0, 0, 0, 10);
//行1
ws.GetRow(0).GetCell(0).CellStyle = styleBold;
ws.GetRow(0).GetCell(0).SetCellValue("工作包名称");
ws.GetRow(0).GetCell(1).CellStyle = styleBold;
ws.GetRow(0).GetCell(1).SetCellValue("装置名称");
ws.GetRow(0).GetCell(2).CellStyle = styleBold;
ws.GetRow(0).GetCell(2).SetCellValue("工序名称");
ws.GetRow(0).GetCell(3).CellStyle = styleBold;
ws.GetRow(0).GetCell(3).SetCellValue("系统名称");
ws.GetRow(0).GetCell(4).CellStyle = styleBold;
ws.GetRow(0).GetCell(4).SetCellValue("子系统名称");
ws.GetRow(0).GetCell(5).CellStyle = styleBold;
ws.GetRow(0).GetCell(5).SetCellValue("工作包数量");
ws.GetRow(0).GetCell(6).CellStyle = styleBold;
ws.GetRow(0).GetCell(6).SetCellValue("工作包未关闭数量");
ws.GetRow(0).GetCell(7).CellStyle = styleBold;
ws.GetRow(0).GetCell(7).SetCellValue("工作包已关闭数量");
ws.GetRow(0).GetCell(8).CellStyle = styleBold;
ws.GetRow(0).GetCell(8).SetCellValue("检查表数量");
ws.GetRow(0).GetCell(9).CellStyle = styleBold;
ws.GetRow(0).GetCell(9).SetCellValue("检查表未关闭数量");
ws.GetRow(0).GetCell(10).CellStyle = styleBold;
ws.GetRow(0).GetCell(10).SetCellValue("检查表已关闭数量");
#endregion
#region
var start = 1;
var end = result.Count;
ws = ExcelCreateRowTitle(ws, hssfworkbook, style, start, end, 0, 10);
//数据
var dataIndex = 1;
foreach (var item in result)
{
result.Add(new ScheduleBridDto()
{
PreRunId = item["PreRunId"].ToString(),
InstallationName = installationName,
ProcessesName = processesName,
SystemName = systemName,
SubsystemName = subsystemName,
AllNum = item["allnum"].ToString(),
NoCloseNum = item["wgbnum"].ToString(),
CloseNum = item["ygbnum"].ToString()
});
ws.GetRow(dataIndex).GetCell(0).SetCellValue(item.WorkPackName);
ws.GetRow(dataIndex).GetCell(1).SetCellValue(item.InstallationName);
ws.GetRow(dataIndex).GetCell(2).SetCellValue(item.ProcessesName);
ws.GetRow(dataIndex).GetCell(3).SetCellValue(item.SystemName);
ws.GetRow(dataIndex).GetCell(4).SetCellValue(item.SubsystemName);
ws.GetRow(dataIndex).GetCell(5).SetCellValue(item.WorkPackNum);
ws.GetRow(dataIndex).GetCell(6).SetCellValue(item.WorkPackNoCloseNum);
ws.GetRow(dataIndex).GetCell(7).SetCellValue(item.WorkPackCloseNum);
ws.GetRow(dataIndex).GetCell(8).SetCellValue(item.InspectNum);
ws.GetRow(dataIndex).GetCell(9).SetCellValue(item.InspectNoCloseNum);
ws.GetRow(dataIndex).GetCell(10).SetCellValue(item.InspectCloseNum);
dataIndex++;
}
#endregion
#region
ws = ExcelCreateRowTitle(ws, hssfworkbook, style, end + 1, end + 1, 0, 10);
var region = new CellRangeAddress(end + 1, end + 1, 0, 4);
ws.AddMergedRegion(region);
ws.GetRow(end + 1).GetCell(0).SetCellValue("合计");
ws.GetRow(end + 1).GetCell(5).SetCellValue(result.Count > 0 ? result.Sum(x => x.WorkPackNum).ToString() : "0");
ws.GetRow(end + 1).GetCell(6).SetCellValue(result.Count > 0 ? result.Sum(x => x.WorkPackNoCloseNum).ToString() : "0");
ws.GetRow(end + 1).GetCell(7).SetCellValue(result.Count > 0 ? result.Sum(x => x.WorkPackCloseNum).ToString() : "0");
ws.GetRow(end + 1).GetCell(8).SetCellValue(result.Count > 0 ? result.Sum(x => x.InspectNum).ToString() : "0");
ws.GetRow(end + 1).GetCell(9).SetCellValue(result.Count > 0 ? result.Sum(x => x.InspectNoCloseNum).ToString() : "0");
ws.GetRow(end + 1).GetCell(10).SetCellValue(result.Count > 0 ? result.Sum(x => x.InspectCloseNum).ToString() : "0");
#endregion
ws.PrintSetup.Landscape = false;
ws.PrintSetup.PaperSize = 9;
ws.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=" + Server.UrlEncode("预试车进度.xlsx"));
// 添加头信息,指定文件大小,让浏览器能够显示下载进度
Response.AddHeader("Content-Length", filet.Length.ToString());
// 指定返回的是一个不能被客户端读取的流,必须被下载
Response.ContentType = "application/ms-excel";
// 把文件流发送到客户端
Response.WriteFile(filet.FullName);
// 停止页面的执行
Response.End();
}
GridFourDecision.DataSource = result;
GridFourDecision.DataBind();
}
#endregion
@@ -255,18 +332,146 @@ namespace FineUIPro.Web.TestRun.Report
#region
/// <summary>
/// 点击tab
/// 创建头部
/// </summary>
protected void TabStrip1_TabIndexChanged(object sender, EventArgs e)
/// <returns></returns>
private XSSFSheet ExcelCreateRowTitle(XSSFSheet ws, XSSFWorkbook hssfworkbook, ICellStyle style, int sRows, int eRows, int cStart, int cEnd, float height = 21)
{
if (TabStrip1.ActiveTabIndex == 0)
for (int i = sRows; i <= eRows; i++)
{
PreRunBrid();
ws.CreateRow(i);
ws.GetRow(i).HeightInPoints = height;
for (int j = cStart; j <= cEnd; j++)
{
ws.GetRow(i).CreateCell(j);
ws.GetRow(i).CreateCell(j).CellStyle = style;
}
}
else if (TabStrip1.ActiveTabIndex == 1)
return ws;
}
/// <summary>
/// 创建样式
/// </summary>
/// <returns></returns>
public static ICellStyle SetExcelStyle(XSSFWorkbook wb, BorderStyle Bottom, BorderStyle Left, BorderStyle Right, BorderStyle Top, VerticalAlignment VerAig, HorizontalAlignment HorAig, double FontSize, bool WrapText = true, bool Bold = false, string FontName = "宋体")
{
ICellStyle style = wb.CreateCellStyle();
style.BorderBottom = Bottom;
style.BorderLeft = Left;
style.BorderRight = Right;
style.BorderTop = Top;
style.VerticalAlignment = VerAig;
style.Alignment = HorAig;
IFont font = wb.CreateFont();
font.FontHeightInPoints = FontSize;
font.IsBold = Bold;
font.FontName = FontName;
style.SetFont(font);
style.WrapText = WrapText;
return style;
}
/// <summary>
/// 获取预试车统计
/// </summary>
/// <returns></returns>
private List<PreRunScheduleDto> GetPreRunSchedules()
{
string allStr = $"select a.SubSystemId,a.SystemId,b.WorkPackId,b.WorkPackName,b.WorkPackType,(select count(1) from PreRun_SubPropertySelect as gd where gd.SubSystemId = a.SubSystemId) as GdallNum,(select count(1) from PreRun_SubTechnologySelect as sb where sb.SubSystemId = a.SubSystemId) as SballNum,(select count(1) from PreRun_SubInstrumentSelect as sy where sy.SubSystemId = a.SubSystemId) as SyallNum from PreRun_SubSysWorkPackage as a inner join PreRun_WorkPackage as b on a.WorkPackId = b.WorkPackId where a.SubSystemId in ('{string.Join("','", this.SubSystemIds)}') order by a.WorkPackCode asc";
var dt = SQLHelper.GetDataTableRunText(allStr);
var list = new List<PreRunScheduleDto>();
string deviceStr = $"select b.PreRunName as InstallationName,c.PreRunName as ProcessesName,d.PreRunName as SystemName,e.PreRunName as SubsystemName from PreRun_SysDevice as a left join PreRun_SysDevice as b on b.PreRunId=ISNULL(a.InstallationId,a.PreRunId) left join PreRun_SysDevice as c on c.PreRunId=a.ProcessesId left join PreRun_SysDevice as d on d.PreRunId=a.SystemId left join PreRun_SysDevice as e on e.PreRunId=a.SubsystemId where a.PreRunId='{this.TreePreRunId}'";
var driveDt = SQLHelper.GetDataTableRunText(deviceStr);
string inspectStr = $"select a.WorkPackId,b.WorkPackName,b.Sort,SUM(case ISNULL(a.InspectIsClose, 0) when 1 then 1 else 0 end) as CloseNum,SUM(case ISNULL(a.InspectIsClose, 0) when 0 then 1 else 0 end) as NoCloseNum,COUNT(1) as AllNum from PreRun_SubInspectTerm as a inner join PreRun_WorkPackage as b on a.WorkPackId = b.WorkPackId where 1=1 and a.ProjectId = '{this.CurrUser.LoginProjectId}' and a.SubSystemId in ('{string.Join("','", this.SubSystemIds)}') group by a.WorkPackId,b.WorkPackName,b.Sort order by b.Sort asc";
var inspectDt = SQLHelper.GetDataTableRunText(inspectStr);
var inspectlist = DataTableToList<WorkPackageInspectDto>(inspectDt);
if (dt.Rows.Count > 0)
{
FourDecisionBrid();
//获取所有子系统数量
var inspects = Funs.DB.PreRun_SubInspectTerm.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && this.SubSystemIds.Contains(x.SubSystemId));
var querylist = DataTableToList<QuerySubSysWorkPackage>(dt);
var queryGroup = querylist.GroupBy(x => new { x.WorkPackId, x.WorkPackName, x.WorkPackType }).Select(p => new
{
p.Key.WorkPackId,
p.Key.WorkPackName,
p.Key.WorkPackType,
GdallNum = p.Sum(i => i.GdallNum),
SballNum = p.Sum(i => i.SballNum),
SyallNum = p.Sum(i => i.SyallNum)
});
foreach (var itemPack in queryGroup)
{
var itemQueryList = querylist.Where(x => x.WorkPackId == itemPack.WorkPackId).ToList();
var model = new PreRunScheduleDto();
model.WorkPackId = itemPack.WorkPackId;
model.WorkPackName = itemPack.WorkPackName;
model.WorkPackType = itemPack.WorkPackType;
if (driveDt.Rows.Count > 0)
{
model.InstallationName = driveDt.Rows[0]["InstallationName"].ToString();
model.ProcessesName = driveDt.Rows[0]["ProcessesName"].ToString();
model.SystemName = driveDt.Rows[0]["SystemName"].ToString();
model.SubsystemName = driveDt.Rows[0]["SubsystemName"].ToString();
}
model.GdallNum = itemPack.GdallNum;
model.SballNum = itemPack.SballNum;
model.SyallNum = itemPack.SyallNum;
model.AllGdSbYbNum = (itemPack.GdallNum + itemPack.SballNum + itemPack.SyallNum);
model.WorkPackNum = itemQueryList.Count(x => x.WorkPackId == itemPack.WorkPackId);
if (inspectlist.Count(a => a.WorkPackId == itemPack.WorkPackId) > 0)
{
var itemInspect = inspectlist.FirstOrDefault(a => a.WorkPackId == itemPack.WorkPackId);
model.InspectNum = itemInspect.AllNum;
model.InspectNoCloseNum = itemInspect.NoCloseNum;
model.InspectCloseNum = itemInspect.CloseNum;
}
else
{
model.WorkPackCloseNum = 0;
model.WorkPackNoCloseNum = model.WorkPackNum;
model.InspectNum = 0;
model.InspectNoCloseNum = 0;
model.InspectCloseNum = 0;
}
model.WorkPackCloseNum = 0;
model.WorkPackNoCloseNum = 0;
var subsystemids = itemQueryList.ConvertAll(a => a.SubSystemId).Distinct();
foreach (var itemsubid in subsystemids)
{
if (inspects.Count(x => x.SubSystemId == itemsubid) > 0)
{
var itemQuerylist = itemQueryList.FirstOrDefault(x => x.SubSystemId == itemsubid && x.WorkPackId == itemPack.WorkPackId);
var allNum = itemQuerylist.GdallNum + itemQuerylist.SballNum + itemQuerylist.SyallNum;
if (inspects.Count(x => x.SubInspectId == itemsubid && x.InspectIsClose != 1) > 0)
{
model.WorkPackNoCloseNum += 1;
}
else
{
var closeInspect = inspects.Where(x => x.SubInspectId == itemsubid && x.InspectIsClose == 1);
var closeNums = closeInspect.Count() > 0 ? closeInspect.Select(x => x.PropertyTechnologyId.Split(',').Count()).Sum(x => x) : 0;
if (allNum > closeNums)
{
model.WorkPackNoCloseNum += 1;
}
else
{
model.WorkPackCloseNum += 1;
}
}
}
else
{
model.WorkPackNoCloseNum += 1;
}
}
list.Add(model);
}
}
return list;
}
/// <summary>
@@ -316,6 +521,186 @@ namespace FineUIPro.Web.TestRun.Report
public string CloseNum { get; set; }
}
/// <summary>
/// 预试车统计实体
/// </summary>
public class PreRunScheduleDto
{
/// <summary>
/// 工作包主键
/// </summary>
public string WorkPackId { get; set; }
/// <summary>
/// 工作包名称
/// </summary>
public string WorkPackName { get; set; }
/// <summary>
/// 工作包类型
/// </summary>
public int WorkPackType { get; set; }
/// <summary>
/// 装置名称
/// </summary>
public string InstallationName { get; set; }
/// <summary>
/// 工序名称
/// </summary>
public string ProcessesName { get; set; }
/// <summary>
/// 系统名称
/// </summary>
public string SystemName { get; set; }
/// <summary>
/// 子系统名称
/// </summary>
public string SubsystemName { get; set; }
/// <summary>
/// 所有管道,设备,仪表索引数量
/// </summary>
public int AllGdSbYbNum { get; set; }
/// <summary>
/// 工作包所有管道数量
/// </summary>
public int GdallNum { get; set; }
/// <summary>
/// 工作包所有设备数量
/// </summary>
public int SballNum { get; set; }
/// <summary>
/// 工作包所有仪表索引数量
/// </summary>
public int SyallNum { get; set; }
/// <summary>
/// 工作包数量
/// </summary>
public int WorkPackNum { get; set; }
/// <summary>
/// 工作包未关闭数量
/// </summary>
public int WorkPackNoCloseNum { get; set; }
/// <summary>
/// 工作包已关闭数量
/// </summary>
public int WorkPackCloseNum { get; set; }
/// <summary>
/// 检查表数量
/// </summary>
public int InspectNum { get; set; }
/// <summary>
/// 检查表未关闭数量
/// </summary>
public int InspectNoCloseNum { get; set; }
/// <summary>
/// 检查表已关闭数量
/// </summary>
public int InspectCloseNum { get; set; }
}
/// <summary>
/// 预试车检查表实体
/// </summary>
public class WorkPackageInspectDto
{
/// <summary>
/// 子系统主键
/// </summary>
public string SubSystemId { get; set; }
/// <summary>
/// 工作包主键
/// </summary>
public string WorkPackId { get; set; }
/// <summary>
/// 工作包名称
/// </summary>
public string WorkPackName { get; set; }
/// <summary>
/// 检查表数量
/// </summary>
public int AllNum { get; set; }
/// <summary>
/// 未关闭任务单数量
/// </summary>
public int NoCloseNum { get; set; }
/// <summary>
/// 已关闭任务单数量
/// </summary>
public int CloseNum { get; set; }
}
/// <summary>
/// 子系统工作包和总设备/管道/仪表数量
/// </summary>
public class QuerySubSysWorkPackage
{
/// <summary>
/// 子系统主键
/// </summary>
public string SubSystemId { get; set; }
/// <summary>
/// 系统主键
/// </summary>
public string SystemId { get; set; }
/// <summary>
/// 工作包主键
/// </summary>
public string WorkPackId { get; set; }
/// <summary>
/// 工作包名称
/// </summary>
public string WorkPackName { get; set; }
/// <summary>
/// 工作包类型
/// </summary>
public int WorkPackType { get; set; }
/// <summary>
/// 管道总数量
/// </summary>
public int GdallNum { get; set; }
/// <summary>
/// 设备总数量
/// </summary>
public int SballNum { get; set; }
/// <summary>
/// 仪表索引总数量
/// </summary>
public int SyallNum { get; set; }
}
#endregion
#region
/// <summary>
/// DataTable转换List
/// </summary>
/// <returns></returns>
public List<T> DataTableToList<T>(DataTable table)
{
List<T> list = new List<T>();
T t = default(T);
PropertyInfo[] propertypes = null;
string tempName = string.Empty;
foreach (DataRow row in table.Rows)
{
t = Activator.CreateInstance<T>();
propertypes = t.GetType().GetProperties();
foreach (PropertyInfo pro in propertypes)
{
tempName = pro.Name;
if (table.Columns.Contains(tempName))
{
object value = row[tempName];
if (!value.ToString().Equals(""))
{
pro.SetValue(t, value, null);
}
}
}
list.Add(t);
}
return list.Count == 0 ? new List<T>() : list;
}
#endregion
}
@@ -104,15 +104,6 @@ namespace FineUIPro.Web.TestRun.Report
/// </remarks>
protected global::FineUIPro.FormRow zxtsc;
/// <summary>
/// TabStrip1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.TabStrip TabStrip1;
/// <summary>
/// GridPreRun 控件。
/// </summary>
@@ -141,30 +132,12 @@ namespace FineUIPro.Web.TestRun.Report
protected global::FineUIPro.ToolbarFill ToolbarFill;
/// <summary>
/// GridFourDecision 控件。
/// btnYscExport 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Grid GridFourDecision;
/// <summary>
/// Toolbar3 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Toolbar Toolbar3;
/// <summary>
/// ToolbarFill1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.ToolbarFill ToolbarFill1;
protected global::FineUIPro.Button btnYscExport;
}
}
@@ -38,12 +38,14 @@
<Tabs>
<f:Tab Title="预试车数据设置" BodyPadding="10px" Layout="Fit" runat="server">
<Items>
<f:Grid Height="550px" ID="GridYsc" ShowBorder="true" ClicksToEdit="1" ShowHeader="true" EnableCollapse="true" runat="server" DataIDField="ScheduleId" DataKeyNames="ScheduleId,WorkPackId" AllowSorting="true" SortField="Sort" SortDirection="ASC" EnableColumnLines="true" AllowCellEditing="true" EnableMultiSelect="false" AllowPaging="true" IsDatabasePaging="true" PageSize="10" AllowFilters="true">
<f:Grid Height="550px" ID="GridYsc" ShowBorder="true" ClicksToEdit="1" ShowHeader="true" EnableCollapse="true" runat="server" DataIDField="ScheduleId" DataKeyNames="ScheduleId,WorkPackId" AllowSorting="true" SortField="Sort" SortDirection="ASC" EnableColumnLines="true" AllowCellEditing="true" EnableMultiSelect="false" AllowPaging="true" IsDatabasePaging="true" PageSize="10" AllowFilters="true" EnableSummary="true" SummaryPosition="Flow">
<Toolbars>
<f:Toolbar ID="Toolbar1" runat="server">
<Items>
<f:Button ID="btnYscReset" Text="重置" ToolTip="重置" ConfirmText="重置后数据会全部被清空,是否确认?" Icon="Reload" runat="server" OnClick="btnYscReset_Click"></f:Button>
<f:Button ID="btnYscSave" Text="保存" ToolTip="保存" Icon="FilmSave" runat="server" OnClick="btnYscSave_Click"></f:Button>
<f:Button ID="btnYscSave" Text="保存" ToolTip="保存" Icon="FilmSave" runat="server" OnClientClick="if(!isYscValid()){return false;}" OnClick="btnYscSave_Click"></f:Button>
<f:ToolbarFill ID="ToolbarFill" runat="server"></f:ToolbarFill>
<f:Button ID="btnYscExport" runat="server" Icon="ApplicationGo" Text="导出" ToolTip="导出" OnClick="btnYscExport_Click" DisableControlBeforePostBack="false" EnableAjax="false"></f:Button>
</Items>
</f:Toolbar>
</Toolbars>
@@ -51,24 +53,25 @@
<f:RowNumberField EnablePagingNumber="true" HeaderTextAlign="Center" TextAlign="Center" />
<f:RenderField HeaderText="工作包名称" ColumnID="WorkPackName" DataField="WorkPackName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center">
</f:RenderField>
<f:RenderField HeaderText="全部数量" ColumnID="AllNum" DataField="AllNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="100px">
<f:RenderField HeaderText="全部数量" ColumnID="AllNum" DataField="AllNum" FieldType="Int" HeaderTextAlign="Center" TextAlign="Center" Width="100px">
<Editor>
<f:NumberBox NoNegative="true" runat="server" ID="txtAllNum"></f:NumberBox>
<f:NumberBox NoNegative="true" runat="server" ID="txtAllNum" Required="true"></f:NumberBox>
</Editor>
</f:RenderField>
<f:RenderField HeaderText="进行中数量" ColumnID="ProgressNum" DataField="ProgressNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center">
<f:RenderField HeaderText="进行中数量" ColumnID="ProgressNum" DataField="ProgressNum" FieldType="Int" HeaderTextAlign="Center" TextAlign="Center">
<Editor>
<f:NumberBox NoNegative="true" runat="server" ID="txtProgressNum"></f:NumberBox>
<f:NumberBox NoNegative="true" runat="server" ID="txtProgressNum" Required="true"></f:NumberBox>
</Editor>
</f:RenderField>
<f:RenderField HeaderText="已完成数量" ColumnID="CompleteNum" DataField="CompleteNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center">
<f:RenderField HeaderText="已完成数量" ColumnID="CompleteNum" DataField="CompleteNum" FieldType="Int" HeaderTextAlign="Center" TextAlign="Center">
<Editor>
<f:NumberBox NoNegative="true" runat="server" ID="txtCompleteNum"></f:NumberBox>
<f:NumberBox NoNegative="true" runat="server" ID="txtCompleteNum" Required="true"></f:NumberBox>
</Editor>
</f:RenderField>
</Columns>
<Listeners>
<f:Listener Event="beforerowcontextmenu" Handler="onRowContextMenu" />
<f:Listener Event="afteredit" Handler="onGridYscAfterEdit" />
</Listeners>
</f:Grid>
</Items>
@@ -76,12 +79,14 @@
<f:Tab Title="试车数据设置" BodyPadding="10px" runat="server">
<Items>
<f:Grid Height="550px" ID="GridSc" ClicksToEdit="1" ShowBorder="true" ShowHeader="true" EnableCollapse="true" runat="server" DataIDField="ScheduleId" DataKeyNames="ScheduleId,WorkPackId" AllowSorting="true" SortField="Sort" SortDirection="ASC" EnableColumnLines="true" AllowCellEditing="true" EnableMultiSelect="false" AllowPaging="true" IsDatabasePaging="true" PageSize="10" AllowFilters="true">
<f:Grid Height="550px" ID="GridSc" ClicksToEdit="1" ShowBorder="true" ShowHeader="true" EnableCollapse="true" runat="server" DataIDField="ScheduleId" DataKeyNames="ScheduleId,WorkPackId" AllowSorting="true" SortField="Sort" SortDirection="ASC" EnableColumnLines="true" AllowCellEditing="true" EnableMultiSelect="false" AllowPaging="true" IsDatabasePaging="true" PageSize="10" AllowFilters="true" EnableSummary="true" SummaryPosition="Flow">
<Toolbars>
<f:Toolbar ID="Toolbar3" runat="server">
<Items>
<f:Button ID="btnScReset" Text="重置" ToolTip="重置" ConfirmText="重置后数据会全部被清空,是否确认?" Icon="Reload" runat="server" OnClick="btnScReset_Click"></f:Button>
<f:Button ID="btnScSave" Text="保存" ToolTip="保存" Icon="FilmSave" runat="server" OnClick="btnScSave_Click"></f:Button>
<f:Button ID="btnScSave" Text="保存" ToolTip="保存" Icon="FilmSave" runat="server" OnClientClick="if(!isScValid()){return false;}" OnClick="btnScSave_Click"></f:Button>
<f:ToolbarFill ID="ToolbarFill1" runat="server"></f:ToolbarFill>
<f:Button ID="btnScExport" runat="server" Icon="ApplicationGo" Text="导出" ToolTip="导出" OnClick="btnScExport_Click" DisableControlBeforePostBack="false" EnableAjax="false"></f:Button>
</Items>
</f:Toolbar>
</Toolbars>
@@ -89,17 +94,17 @@
<f:RowNumberField EnablePagingNumber="true" Width="100px" HeaderTextAlign="Center" TextAlign="Center" />
<f:RenderField HeaderText="工作包名称" ColumnID="WorkPackName" DataField="WorkPackName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="全部数量" ColumnID="AllNum" DataField="AllNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="100px">
<f:RenderField HeaderText="全部数量" ColumnID="AllNum" DataField="AllNum" FieldType="Int" HeaderTextAlign="Center" TextAlign="Center" Width="100px">
<Editor>
<f:NumberBox NoNegative="true" runat="server" ID="txtAllNum1"></f:NumberBox>
</Editor>
</f:RenderField>
<f:RenderField HeaderText="进行中数量" ColumnID="ProgressNum" DataField="ProgressNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="100px">
<f:RenderField HeaderText="进行中数量" ColumnID="ProgressNum" DataField="ProgressNum" FieldType="Int" HeaderTextAlign="Center" TextAlign="Center" Width="100px">
<Editor>
<f:NumberBox NoNegative="true" runat="server" ID="txtProgressNum1"></f:NumberBox>
</Editor>
</f:RenderField>
<f:RenderField HeaderText="已完成数量" ColumnID="CompleteNum" DataField="CompleteNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="100px">
<f:RenderField HeaderText="已完成数量" ColumnID="CompleteNum" DataField="CompleteNum" FieldType="Int" HeaderTextAlign="Center" TextAlign="Center" Width="100px">
<Editor>
<f:NumberBox NoNegative="true" runat="server" ID="txtCompleteNum1"></f:NumberBox>
</Editor>
@@ -107,11 +112,55 @@
</Columns>
<Listeners>
<f:Listener Event="beforerowcontextmenu" Handler="onRowContextMenu" />
<f:Listener Event="afteredit" Handler="onGridScAfterEdit" />
</Listeners>
</f:Grid>
</Items>
</f:Tab>
<f:Tab Title="三查四定进度" BodyPadding="10px" runat="server">
<Items>
<f:Grid Height="550px" ID="GridScsd" ClicksToEdit="1" ShowBorder="true" ShowHeader="true" EnableCollapse="true" runat="server" DataIDField="ScheduleId" DataKeyNames="ScheduleId,LevelName" AllowSorting="true" SortField="Sort" SortDirection="ASC" EnableColumnLines="true" AllowCellEditing="true" EnableMultiSelect="false" AllowPaging="true" IsDatabasePaging="true" PageSize="10" AllowFilters="true" EnableSummary="true" SummaryPosition="Flow">
<Toolbars>
<f:Toolbar ID="Toolbar4" runat="server">
<Items>
<f:Button ID="btnScsdReset" Text="重置" ToolTip="重置" ConfirmText="重置后数据会全部被清空,是否确认?" Icon="Reload" runat="server" OnClick="btnScsdReset_Click"></f:Button>
<f:Button ID="btnScsdSave" Text="保存" ToolTip="保存" Icon="FilmSave" runat="server" OnClientClick="if(!isScsdValid()){return false;}" OnClick="btnScsdSave_Click"></f:Button>
<f:ToolbarFill ID="ToolbarFill2" runat="server"></f:ToolbarFill>
<f:Button ID="btnScsdExport" runat="server" Icon="ApplicationGo" Text="导出" ToolTip="导出" OnClick="btnScsdExport_Click" DisableControlBeforePostBack="false" EnableAjax="false"></f:Button>
</Items>
</f:Toolbar>
</Toolbars>
<Columns>
<f:RowNumberField EnablePagingNumber="true" Width="100px" HeaderTextAlign="Center" TextAlign="Center" />
<f:RenderField HeaderText="类别名称" ColumnID="LevelName" DataField="LevelName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="全部数量" ColumnID="AllNum" DataField="AllNum" FieldType="Int" HeaderTextAlign="Center" TextAlign="Center" Width="100px">
<Editor>
<f:NumberBox NoNegative="true" runat="server" ID="NumberBox1"></f:NumberBox>
</Editor>
</f:RenderField>
<f:RenderField HeaderText="进行中数量" ColumnID="ProgressNum" DataField="ProgressNum" FieldType="Int" HeaderTextAlign="Center" TextAlign="Center" Width="100px">
<Editor>
<f:NumberBox NoNegative="true" runat="server" ID="NumberBox2"></f:NumberBox>
</Editor>
</f:RenderField>
<f:RenderField HeaderText="已完成数量" ColumnID="CompleteNum" DataField="CompleteNum" FieldType="Int" HeaderTextAlign="Center" TextAlign="Center" Width="100px">
<Editor>
<f:NumberBox NoNegative="true" runat="server" ID="NumberBox3"></f:NumberBox>
</Editor>
</f:RenderField>
</Columns>
<Listeners>
<f:Listener Event="beforerowcontextmenu" Handler="onRowContextMenu" />
<f:Listener Event="afteredit" Handler="onGridScsdAfterEdit" />
</Listeners>
</f:Grid>
</Items>
</f:Tab>
</Tabs>
</f:TabStrip>
</Items>
@@ -131,6 +180,138 @@
function reloadGrid() {
__doPostBack(null, 'reloadGrid');
}
//预试车验证
function isYscValid() {
var gridysc = F('<%= GridYsc.ClientID %>');
var valid = true, modifiedData = gridysc.getMergedData();//gridysc.getModifiedData();
$.each(modifiedData, function (index, rowData) {
var allNum = parseInt(rowData.values['AllNum']);
var progressNum = parseInt(rowData.values['ProgressNum']);
var completeNum = parseInt(rowData.values['CompleteNum']);
var workPackName = rowData.values['WorkPackName'];
if (allNum != (progressNum + completeNum)) {
F.alert({
message: '工作包(' + workPackName + ')全部数量不等于进行中数量加已完成数量!',
ok: function () {
grid1.startEdit(rowData.id, 'AllNum');
}
});
valid = false;
return false; // break
}
});
return valid;
}
//预试车合计
function onGridYscAfterEdit(event, value, params) {
var me = F('<%= GridYsc.ClientID %>');
var allNumTotal = 0;
var progressNumTotal = 0;
var completeNumTotal = 0;
me.getRowEls().each(function (index, tr) {
debugger;
allNumTotal += me.getCellValue(tr, 'AllNum');
progressNumTotal += me.getCellValue(tr, 'ProgressNum');
completeNumTotal += me.getCellValue(tr, 'CompleteNum');
});
// 第三个参数 true,强制更新,不显示左上角的更改标识
me.updateSummaryCellValue('AllNum', allNumTotal, true);
me.updateSummaryCellValue('ProgressNum', progressNumTotal, true);
me.updateSummaryCellValue('CompleteNum', completeNumTotal, true);
}
//试车验证
function isScValid() {
var gridSc = F('<%= GridSc.ClientID %>');
var valid = true, modifiedData = gridSc.getMergedData();
$.each(modifiedData, function (index, rowData) {
var allNum = parseInt(rowData.values['AllNum']);
var progressNum = parseInt(rowData.values['ProgressNum']);
var completeNum = parseInt(rowData.values['CompleteNum']);
var workPackName = rowData.values['WorkPackName'];
if (allNum != (progressNum + completeNum)) {
F.alert({
message: '工作包(' + workPackName + ')全部数量不等于进行中数量加已完成数量!',
ok: function () {
grid1.startEdit(rowData.id, 'AllNum');
}
});
valid = false;
return false; // break
}
});
return valid;
}
//试车合计
function onGridScAfterEdit(event, value, params) {
var me = F('<%= GridSc.ClientID %>');
var allNumTotal = 0;
var progressNumTotal = 0;
var completeNumTotal = 0;
me.getRowEls().each(function (index, tr) {
debugger;
allNumTotal += me.getCellValue(tr, 'AllNum');
progressNumTotal += me.getCellValue(tr, 'ProgressNum');
completeNumTotal += me.getCellValue(tr, 'CompleteNum');
});
// 第三个参数 true,强制更新,不显示左上角的更改标识
me.updateSummaryCellValue('AllNum', allNumTotal, true);
me.updateSummaryCellValue('ProgressNum', progressNumTotal, true);
me.updateSummaryCellValue('CompleteNum', completeNumTotal, true);
}
//三查四定验证
function isScsdValid() {
var gridyScsd = F('<%= GridScsd.ClientID %>');
var valid = true, modifiedData = gridyScsd.getMergedData();
$.each(modifiedData, function (index, rowData) {
var allNum = parseInt(rowData.values['AllNum']);
var progressNum = parseInt(rowData.values['ProgressNum']);
var completeNum = parseInt(rowData.values['CompleteNum']);
var levelName = rowData.values['LevelName'];
if (allNum != (progressNum + completeNum)) {
F.alert({
message: '类别(' + levelName + ')全部数量不等于进行中数量加已完成数量!',
ok: function () {
grid1.startEdit(rowData.id, 'AllNum');
}
});
valid = false;
return false; // break
}
});
return valid;
}
//三查四定合计
function onGridScsdAfterEdit(event, value, params) {
var me = F('<%= GridScsd.ClientID %>');
var allNumTotal = 0;
var progressNumTotal = 0;
var completeNumTotal = 0;
me.getRowEls().each(function (index, tr) {
debugger;
allNumTotal += me.getCellValue(tr, 'AllNum');
progressNumTotal += me.getCellValue(tr, 'ProgressNum');
completeNumTotal += me.getCellValue(tr, 'CompleteNum');
});
// 第三个参数 true,强制更新,不显示左上角的更改标识
me.updateSummaryCellValue('AllNum', allNumTotal, true);
me.updateSummaryCellValue('ProgressNum', progressNumTotal, true);
me.updateSummaryCellValue('CompleteNum', completeNumTotal, true);
}
</script>
</body>
</html>
@@ -6,7 +6,6 @@ using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Model;
using System.Collections;
using Apache.NMS.ActiveMQ.Threads;
@@ -14,6 +13,14 @@ using FineUIPro.Web.DataShow;
using Newtonsoft.Json.Linq;
using Aspose.Words.Lists;
using System.Web.UI.DataVisualization.Charting;
using static FineUIPro.Web.TestRun.Report.PreRunSchedule;
using System.Reflection;
using static FineUIPro.Web.TestRun.Report.TestRunSchedule;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;
using System.IO;
using NPOI.SS.Formula.Functions;
namespace FineUIPro.Web.TestRun.Report
{
@@ -35,6 +42,25 @@ namespace FineUIPro.Web.TestRun.Report
/// </summary>
public void DataBridYsc()
{
var result = YscData();
GridYsc.DataSource = result;
TabStrip1.ActiveTabIndex = 0;
GridYsc.DataBind();
JObject summary = new JObject();
summary.Add("AllNum", result.Sum(x => x.AllNum));
summary.Add("ProgressNum", result.Sum(x => x.ProgressNum));
summary.Add("CompleteNum", result.Sum(x => x.CompleteNum));
GridYsc.SummaryData = summary;
}
/// <summary>
/// 预试车数据
/// </summary>
/// <returns></returns>
public List<Run_ScheduleSetUpDto> YscData()
{
var result = new List<Run_ScheduleSetUpDto>();
if (Funs.DB.Run_ScheduleSetUp.Count(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 1) > 0)
{
var query = from a in Funs.DB.Run_ScheduleSetUp
@@ -56,29 +82,75 @@ namespace FineUIPro.Web.TestRun.Report
AddTime = a.AddTime,
Sort = a.Sort
};
GridYsc.DataSource = query.ToList();
result = query.ToList();
}
else
{
var result = new List<Run_ScheduleSetUpDto>();
string strSql = @"select a.WorkPackId,a.WorkPackName,(select COUNT(1) from PreRun_SubInspectTerm as b where b.WorkPackId=a.WorkPackId and b.ProjectId=@ProjectId) as AllNum,(select COUNT(1) from PreRun_SubInspectTerm as b where b.WorkPackId=a.WorkPackId and b.ProjectId=@ProjectId and ISNULL(b.InspectIsClose,0)=0) as ProgressNum,(select COUNT(1) from PreRun_SubInspectTerm as b where b.WorkPackId=a.WorkPackId and b.ProjectId=@ProjectId and ISNULL(b.InspectIsClose,0)=1) as CompleteNum from PreRun_WorkPackage as a order by a.Sort"; List<SqlParameter> listStr = new List<SqlParameter>();
listStr.Add(new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId));
SqlParameter[] parameter = listStr.ToArray();
DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
if (tb.Rows.Count > 0)
List<string> SubSystemIds = new List<string>();
var devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 4).ToList();
if (devices.Count > 0)
{
int i = 1;
foreach (DataRow row in tb.Rows)
SubSystemIds = devices.ConvertAll(x => x.PreRunId);
}
string allStr = $"select a.SubSystemId,a.SystemId,b.WorkPackId,b.WorkPackName,b.WorkPackType,(select count(1) from PreRun_SubPropertySelect as gd where gd.SubSystemId = a.SubSystemId) as GdallNum,(select count(1) from PreRun_SubTechnologySelect as sb where sb.SubSystemId = a.SubSystemId) as SballNum,(select count(1) from PreRun_SubInstrumentSelect as sy where sy.SubSystemId = a.SubSystemId) as SyallNum from PreRun_SubSysWorkPackage as a inner join PreRun_WorkPackage as b on a.WorkPackId = b.WorkPackId where a.SubSystemId in ('{string.Join("','", SubSystemIds)}') order by a.WorkPackCode asc";
var dt = SQLHelper.GetDataTableRunText(allStr);
string inspectStr = $"select a.WorkPackId,b.WorkPackName,b.Sort,SUM(case ISNULL(a.InspectIsClose, 0) when 1 then 1 else 0 end) as CloseNum,SUM(case ISNULL(a.InspectIsClose, 0) when 0 then 1 else 0 end) as NoCloseNum,COUNT(1) as AllNum from PreRun_SubInspectTerm as a inner join PreRun_WorkPackage as b on a.WorkPackId = b.WorkPackId where 1=1 and a.ProjectId = '{this.CurrUser.LoginProjectId}' and a.SubSystemId in ('{string.Join("','", SubSystemIds)}') group by a.WorkPackId,b.WorkPackName,b.Sort order by b.Sort asc";
var inspectDt = SQLHelper.GetDataTableRunText(inspectStr);
var inspectlist = DataTableToList<WorkPackageInspectDto>(inspectDt);
if (dt.Rows.Count > 0)
{
//获取所有子系统数量
var inspects = Funs.DB.PreRun_SubInspectTerm.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && SubSystemIds.Contains(x.SubSystemId));
var querylist = DataTableToList<QuerySubSysWorkPackage>(dt);
var queryGroup = querylist.GroupBy(x => new { x.WorkPackId, x.WorkPackName, x.WorkPackType }).Select(p => new
{
p.Key.WorkPackId,
p.Key.WorkPackName,
p.Key.WorkPackType
});
int i = 1;
foreach (var itemPack in queryGroup)
{
var itemQueryList = querylist.Where(x => x.WorkPackId == itemPack.WorkPackId).ToList();
var model = new Run_ScheduleSetUpDto();
model.ScheduleId = Guid.NewGuid().ToString();
model.WorkPackId = row["WorkPackId"].ToString();
model.WorkPackName = row["WorkPackName"].ToString();
model.WorkPackId = itemPack.WorkPackId;
model.WorkPackName = itemPack.WorkPackName;
model.ProjectId = this.CurrUser.LoginProjectId;
model.States = 1;
model.AllNum = int.Parse(row["AllNum"].ToString());
model.ProgressNum = int.Parse(row["ProgressNum"].ToString());
model.CompleteNum = int.Parse(row["CompleteNum"].ToString());
model.AllNum = itemQueryList.Count(x => x.WorkPackId == itemPack.WorkPackId);
model.ProgressNum = 0;
model.CompleteNum = 0;
var subsystemids = itemQueryList.ConvertAll(a => a.SubSystemId).Distinct();
foreach (var itemsubid in subsystemids)
{
if (inspects.Count(x => x.SubSystemId == itemsubid) > 0)
{
var itemQuerylist = itemQueryList.FirstOrDefault(x => x.SubSystemId == itemsubid && x.WorkPackId == itemPack.WorkPackId);
var allNum = itemQuerylist.GdallNum + itemQuerylist.SballNum + itemQuerylist.SyallNum;
if (inspects.Count(x => x.SubInspectId == itemsubid && x.InspectIsClose != 1) > 0)
{
model.ProgressNum += 1;
}
else
{
var closeInspect = inspects.Where(x => x.SubInspectId == itemsubid && x.InspectIsClose == 1);
var closeNums = closeInspect.Count() > 0 ? closeInspect.Select(x => x.PropertyTechnologyId.Split(',').Count()).Sum(x => x) : 0;
if (allNum > closeNums)
{
model.ProgressNum += 1;
}
else
{
model.CompleteNum += 1;
}
}
}
else
{
model.ProgressNum += 1;
}
}
var rate = model.CompleteNum > 0 ? (decimal)Math.Round((float)model.CompleteNum / (float)model.AllNum * 100, 2, MidpointRounding.AwayFromZero) : 0;
if (rate > 100) rate = 100;
model.CompleteRate = rate;
@@ -89,10 +161,9 @@ namespace FineUIPro.Web.TestRun.Report
i++;
}
}
GridYsc.DataSource = result;
}
TabStrip1.ActiveTabIndex = 0;
GridYsc.DataBind();
return result;
}
/// <summary>
@@ -155,6 +226,115 @@ namespace FineUIPro.Web.TestRun.Report
}
}
/// <summary>
/// 预试车导出
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnYscExport_Click(object sender, EventArgs e)
{
string rootPath = Server.MapPath("~/") + Const.ExcelUrl;
//导出文件
string filePath = rootPath + DateTime.Now.ToString("yyyyMMddhhmmss") + "\\";
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
string ReportFileName = filePath + "预试车进度.xlsx";
var result = YscData();
if (result.Count > 0)
{
XSSFWorkbook hssfworkbook = new XSSFWorkbook();
XSSFSheet ws = (XSSFSheet)hssfworkbook.CreateSheet("预试车进度");
#region
ws.SetColumnWidth(0, (30 * 256));
ws.SetColumnWidth(1, (20 * 256));
ws.SetColumnWidth(2, (20 * 256));
ws.SetColumnWidth(3, (20 * 256));
#endregion
#region
//公共样式
ICellStyle style = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 10.5, true);
//公共样式加粗
ICellStyle styleBold = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 10.5, true, true);
#endregion
#region
ws = ExcelCreateRowTitle(ws, hssfworkbook, style, 0, 0, 0, 3);
//行1
ws.GetRow(0).GetCell(0).CellStyle = styleBold;
ws.GetRow(0).GetCell(0).SetCellValue("工作包名称");
ws.GetRow(0).GetCell(1).CellStyle = styleBold;
ws.GetRow(0).GetCell(1).SetCellValue("全部数量");
ws.GetRow(0).GetCell(2).CellStyle = styleBold;
ws.GetRow(0).GetCell(2).SetCellValue("进行中数量");
ws.GetRow(0).GetCell(3).CellStyle = styleBold;
ws.GetRow(0).GetCell(3).SetCellValue("已完成数量");
#endregion
#region
var start = 1;
var end = result.Count;
ws = ExcelCreateRowTitle(ws, hssfworkbook, style, start, end, 0, 3);
//数据
var dataIndex = 1;
foreach (var item in result)
{
ws.GetRow(dataIndex).GetCell(0).SetCellValue(item.WorkPackName);
ws.GetRow(dataIndex).GetCell(1).SetCellValue(item.AllNum.ToString());
ws.GetRow(dataIndex).GetCell(2).SetCellValue(item.ProgressNum.ToString());
ws.GetRow(dataIndex).GetCell(3).SetCellValue(item.CompleteNum.ToString());
dataIndex++;
}
#endregion
#region
ws = ExcelCreateRowTitle(ws, hssfworkbook, style, end + 1, end + 1, 0, 3);
ws.GetRow(end + 1).GetCell(0).SetCellValue("合计");
ws.GetRow(end + 1).GetCell(1).SetCellValue(result.Count > 0 ? result.Sum(x => x.AllNum).ToString() : "0");
ws.GetRow(end + 1).GetCell(2).SetCellValue(result.Count > 0 ? result.Sum(x => x.ProgressNum).ToString() : "0");
ws.GetRow(end + 1).GetCell(3).SetCellValue(result.Count > 0 ? result.Sum(x => x.CompleteNum).ToString() : "0");
#endregion
ws.PrintSetup.Landscape = false;
ws.PrintSetup.PaperSize = 9;
ws.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=" + Server.UrlEncode("预试车进度.xlsx"));
// 添加头信息,指定文件大小,让浏览器能够显示下载进度
Response.AddHeader("Content-Length", filet.Length.ToString());
// 指定返回的是一个不能被客户端读取的流,必须被下载
Response.ContentType = "application/ms-excel";
// 把文件流发送到客户端
Response.WriteFile(filet.FullName);
// 停止页面的执行
Response.End();
}
}
#endregion
#region
@@ -164,6 +344,26 @@ namespace FineUIPro.Web.TestRun.Report
/// </summary>
public void DataBridSc()
{
var result = ScData();
GridSc.DataSource = result;
TabStrip1.ActiveTabIndex = 1;
GridSc.DataBind();
JObject summary = new JObject();
summary.Add("AllNum", result.Sum(x => x.AllNum));
summary.Add("ProgressNum", result.Sum(x => x.ProgressNum));
summary.Add("CompleteNum", result.Sum(x => x.CompleteNum));
GridSc.SummaryData = summary;
}
/// <summary>
/// 试车数据
/// </summary>
/// <returns></returns>
public List<Run_ScheduleSetUpDto> ScData()
{
var result = new List<Run_ScheduleSetUpDto>();
if (Funs.DB.Run_ScheduleSetUp.Count(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 2) > 0)
{
var query = from a in Funs.DB.Run_ScheduleSetUp
@@ -185,29 +385,48 @@ namespace FineUIPro.Web.TestRun.Report
AddTime = a.AddTime,
Sort = a.Sort
};
GridSc.DataSource = query.ToList();
result = query.ToList();
}
else
{
var result = new List<Run_ScheduleSetUpDto>();
string strSql = @"select a.WorkPackId,a.WorkPackName,(select COUNT(1) from TestRun_SubInspectTerm as b where b.WorkPackId=a.WorkPackId and b.ProjectId=@ProjectId) as AllNum,(select COUNT(1) from TestRun_SubInspectTerm as b where b.WorkPackId=a.WorkPackId and b.ProjectId=@ProjectId and ISNULL(b.InspectIsClose,0)=0) as ProgressNum,(select COUNT(1) from TestRun_SubInspectTerm as b where b.WorkPackId=a.WorkPackId and b.ProjectId=@ProjectId and ISNULL(b.InspectIsClose,0)=1) as CompleteNum from TestRun_WorkPackage as a order by a.Sort"; List<SqlParameter> listStr = new List<SqlParameter>();
listStr.Add(new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId));
SqlParameter[] parameter = listStr.ToArray();
DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
if (tb.Rows.Count > 0)
List<string> SystemIds = new List<string>();
var devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 3).ToList();
if (devices.Count > 0)
{
SystemIds = devices.ConvertAll(x => x.PreRunId);
}
string allStr = $"select b.WorkPackId,b.WorkPackName,COUNT(a.SystemId) as WorkPackNum from TestRun_SubSysWorkPackage as a inner join TestRun_WorkPackage as b on a.WorkPackId = b.WorkPackId where a.SystemId in ('{string.Join("','", SystemIds)}') group by b.WorkPackId,b.WorkPackName";
var dt = SQLHelper.GetDataTableRunText(allStr);
if (dt.Rows.Count > 0)
{
string inspectStr = $"select a.WorkPackId,b.WorkPackName,b.Sort,SUM(case ISNULL(a.InspectIsClose, 0) when 1 then 1 else 0 end) as CloseNum,SUM(case ISNULL(a.InspectIsClose, 0) when 0 then 1 else 0 end) as NoCloseNum,COUNT(1) as AllNum from TestRun_SubInspectTerm as a inner join TestRun_WorkPackage as b on a.WorkPackId = b.WorkPackId where 1=1 and a.ProjectId = '{this.CurrUser.LoginProjectId}' group by a.WorkPackId,b.WorkPackName,b.Sort order by b.Sort asc";
var inspectDt = SQLHelper.GetDataTableRunText(inspectStr);
var inspectlist = DataTableToList<WorkPackageInspectDto>(inspectDt);
int i = 1;
foreach (DataRow row in tb.Rows)
var list = DataTableToList<TestRunScheduleDto>(dt);
foreach (var item in list)
{
var model = new Run_ScheduleSetUpDto();
model.ScheduleId = Guid.NewGuid().ToString();
model.WorkPackId = row["WorkPackId"].ToString();
model.WorkPackName = row["WorkPackName"].ToString();
model.WorkPackId = item.WorkPackId;
model.WorkPackName = item.WorkPackName;
model.ProjectId = this.CurrUser.LoginProjectId;
model.States = 2;
model.AllNum = int.Parse(row["AllNum"].ToString());
model.ProgressNum = int.Parse(row["ProgressNum"].ToString());
model.CompleteNum = int.Parse(row["CompleteNum"].ToString());
if (inspectlist.Count(x => x.WorkPackId == item.WorkPackId) > 0)
{
var itemInspect = inspectlist.FirstOrDefault(x => x.WorkPackId == item.WorkPackId);
model.AllNum = itemInspect.AllNum;
model.ProgressNum = itemInspect.NoCloseNum;
model.CompleteNum = itemInspect.CloseNum;
}
else
{
model.AllNum = 0;
model.ProgressNum = 0;
model.CompleteNum = 0;
}
model.CompleteRate = model.CompleteNum > 0 ? (decimal)Math.Round((float)model.CompleteNum / (float)model.AllNum, 2, MidpointRounding.AwayFromZero) : 0;
model.AddUser = this.CurrUser.UserId;
model.AddTime = DateTime.Now;
@@ -216,10 +435,9 @@ namespace FineUIPro.Web.TestRun.Report
i++;
}
}
GridSc.DataSource = result;
}
TabStrip1.ActiveTabIndex = 1;
GridSc.DataBind();
return result;
}
/// <summary>
@@ -280,10 +498,389 @@ namespace FineUIPro.Web.TestRun.Report
}
}
/// <summary>
/// 试车导出
/// </summary>
protected void btnScExport_Click(object sender, EventArgs e)
{
string rootPath = Server.MapPath("~/") + Const.ExcelUrl;
//导出文件
string filePath = rootPath + DateTime.Now.ToString("yyyyMMddhhmmss") + "\\";
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
string ReportFileName = filePath + "试车进度.xlsx";
var result = ScData();
if (result.Count > 0)
{
XSSFWorkbook hssfworkbook = new XSSFWorkbook();
XSSFSheet ws = (XSSFSheet)hssfworkbook.CreateSheet("试车进度");
#region
ws.SetColumnWidth(0, (30 * 256));
ws.SetColumnWidth(1, (20 * 256));
ws.SetColumnWidth(2, (20 * 256));
ws.SetColumnWidth(3, (20 * 256));
#endregion
#region
//公共样式
ICellStyle style = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 10.5, true);
//公共样式加粗
ICellStyle styleBold = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 10.5, true, true);
#endregion
#region
ws = ExcelCreateRowTitle(ws, hssfworkbook, style, 0, 0, 0, 3);
//行1
ws.GetRow(0).GetCell(0).CellStyle = styleBold;
ws.GetRow(0).GetCell(0).SetCellValue("工作包名称");
ws.GetRow(0).GetCell(1).CellStyle = styleBold;
ws.GetRow(0).GetCell(1).SetCellValue("全部数量");
ws.GetRow(0).GetCell(2).CellStyle = styleBold;
ws.GetRow(0).GetCell(2).SetCellValue("进行中数量");
ws.GetRow(0).GetCell(3).CellStyle = styleBold;
ws.GetRow(0).GetCell(3).SetCellValue("已完成数量");
#endregion
#region
var start = 1;
var end = result.Count;
ws = ExcelCreateRowTitle(ws, hssfworkbook, style, start, end, 0, 3);
//数据
var dataIndex = 1;
foreach (var item in result)
{
ws.GetRow(dataIndex).GetCell(0).SetCellValue(item.WorkPackName);
ws.GetRow(dataIndex).GetCell(1).SetCellValue(item.AllNum.ToString());
ws.GetRow(dataIndex).GetCell(2).SetCellValue(item.ProgressNum.ToString());
ws.GetRow(dataIndex).GetCell(3).SetCellValue(item.CompleteNum.ToString());
dataIndex++;
}
#endregion
#region
ws = ExcelCreateRowTitle(ws, hssfworkbook, style, end + 1, end + 1, 0, 3);
ws.GetRow(end + 1).GetCell(0).SetCellValue("合计");
ws.GetRow(end + 1).GetCell(1).SetCellValue(result.Count > 0 ? result.Sum(x => x.AllNum).ToString() : "0");
ws.GetRow(end + 1).GetCell(2).SetCellValue(result.Count > 0 ? result.Sum(x => x.ProgressNum).ToString() : "0");
ws.GetRow(end + 1).GetCell(3).SetCellValue(result.Count > 0 ? result.Sum(x => x.CompleteNum).ToString() : "0");
#endregion
ws.PrintSetup.Landscape = false;
ws.PrintSetup.PaperSize = 9;
ws.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=" + Server.UrlEncode("试车进度.xlsx"));
// 添加头信息,指定文件大小,让浏览器能够显示下载进度
Response.AddHeader("Content-Length", filet.Length.ToString());
// 指定返回的是一个不能被客户端读取的流,必须被下载
Response.ContentType = "application/ms-excel";
// 把文件流发送到客户端
Response.WriteFile(filet.FullName);
// 停止页面的执行
Response.End();
}
}
#endregion
#region
/// <summary>
/// 三查四定绑定
/// </summary>
public void DataBridScsd()
{
var result = ScsdData();
GridScsd.DataSource = result;
TabStrip1.ActiveTabIndex = 2;
GridScsd.DataBind();
JObject summary = new JObject();
summary.Add("AllNum", result.Sum(x => x.AllNum));
summary.Add("ProgressNum", result.Sum(x => x.ProgressNum));
summary.Add("CompleteNum", result.Sum(x => x.CompleteNum));
GridScsd.SummaryData = summary;
}
/// <summary>
/// 三查四定数据
/// </summary>
/// <returns></returns>
public List<Run_ScheduleSetUp> ScsdData()
{
var result = new List<Run_ScheduleSetUp>();
if (Funs.DB.Run_ScheduleSetUp.Count(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 3) > 0)
{
result = Funs.DB.Run_ScheduleSetUp.Where(a => a.States == 3 && a.ProjectId == this.CurrUser.LoginProjectId).OrderBy(o => o.LevelName).ToList();
}
else
{
var list = new List<FourDecisionScheduleBridDto>();
string allStr = $"select Level,COUNT(1) as AllNum,SUM(case ISNULL(a.DecisionIsClose,0) when 0 then 1 else 0 end) as NoCloseNum,SUM(case ISNULL(a.DecisionIsClose,0) when 1 then 1 else 0 end) as CloseNum from PreRun_SubThreeChecksFourDecision as a where a.ProjectId='{this.CurrUser.LoginProjectId}' group by a.Level order by a.Level asc";
var dt = SQLHelper.GetDataTableRunText(allStr);
if (dt.Rows.Count > 0)
{
int i = 1;
list = DataTableToList<FourDecisionScheduleBridDto>(dt);
foreach (var item in list)
{
var model = new Run_ScheduleSetUp();
model.ScheduleId = Guid.NewGuid().ToString();
model.ProjectId = this.CurrUser.LoginProjectId;
model.LevelName = item.Level;
model.States = 3;
model.AllNum = item.AllNum;
model.ProgressNum = item.NoCloseNum;
model.CompleteNum = item.CloseNum;
model.CompleteRate = model.CompleteNum > 0 ? (decimal)Math.Round((float)model.CompleteNum / (float)model.AllNum, 2, MidpointRounding.AwayFromZero) : 0;
model.AddUser = this.CurrUser.UserId;
model.AddTime = DateTime.Now;
model.Sort = i;
result.Add(model);
i++;
}
}
}
return result;
}
/// <summary>
/// 三查四定重置
/// </summary>
protected void btnScsdReset_Click(object sender, EventArgs e)
{
var list = Funs.DB.Run_ScheduleSetUp.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 3);
if (list.Count() > 0)
{
Funs.DB.Run_ScheduleSetUp.DeleteAllOnSubmit(list);
Funs.DB.SubmitChanges();
}
DataBridScsd();
ShowNotify("重置成功!", MessageBoxIcon.Success);
}
/// <summary>
/// 三查四定保存
/// </summary>
protected void btnScsdSave_Click(object sender, EventArgs e)
{
try
{
var deletelist = Funs.DB.Run_ScheduleSetUp.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.States == 3);
Funs.DB.Run_ScheduleSetUp.DeleteAllOnSubmit(deletelist);
Funs.DB.SubmitChanges();
var addList = new List<Run_ScheduleSetUp>();
JArray mergedData = GridScsd.GetMergedData();
foreach (JObject mergedRow in mergedData)
{
string status = mergedRow.Value<string>("status");
JObject values = mergedRow.Value<JObject>("values");
int i = mergedRow.Value<int>("index");
var model = new Run_ScheduleSetUp();
model.ScheduleId = this.GridScsd.Rows[i].DataKeys[0].ToString();
model.LevelName = this.GridScsd.Rows[i].DataKeys[1].ToString();
model.ProjectId = this.CurrUser.LoginProjectId;
model.States = 3;
model.AllNum = !string.IsNullOrWhiteSpace(values.Value<string>("AllNum")) ? int.Parse(values.Value<string>("AllNum")) : 0;
model.ProgressNum = !string.IsNullOrWhiteSpace(values.Value<string>("ProgressNum")) ? int.Parse(values.Value<string>("ProgressNum")) : 0;
model.CompleteNum = !string.IsNullOrWhiteSpace(values.Value<string>("CompleteNum")) ? int.Parse(values.Value<string>("CompleteNum")) : 0;
model.CompleteRate = model.CompleteNum > 0 ? (decimal)Math.Round((float)model.CompleteNum / (float)model.AllNum, 2, MidpointRounding.AwayFromZero) : 0;
model.AddUser = this.CurrUser.UserId;
model.AddTime = DateTime.Now;
model.Sort = i;
addList.Add(model);
}
Funs.DB.Run_ScheduleSetUp.InsertAllOnSubmit(addList);
Funs.DB.SubmitChanges();
DataBridScsd();
ShowNotify("保存成功!");
}
catch (Exception ex)
{
ShowNotify(ex.Message, MessageBoxIcon.Error);
}
}
/// <summary>
/// 三查四定导出
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnScsdExport_Click(object sender, EventArgs e)
{
string rootPath = Server.MapPath("~/") + Const.ExcelUrl;
//导出文件
string filePath = rootPath + DateTime.Now.ToString("yyyyMMddhhmmss") + "\\";
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
string ReportFileName = filePath + "三查四定进度.xlsx";
var result = ScsdData();
if (result.Count > 0)
{
XSSFWorkbook hssfworkbook = new XSSFWorkbook();
XSSFSheet ws = (XSSFSheet)hssfworkbook.CreateSheet("三查四定进度");
#region
ws.SetColumnWidth(0, (30 * 256));
ws.SetColumnWidth(1, (20 * 256));
ws.SetColumnWidth(2, (20 * 256));
ws.SetColumnWidth(3, (20 * 256));
#endregion
#region
//公共样式
ICellStyle style = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 10.5, true);
//公共样式加粗
ICellStyle styleBold = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 10.5, true, true);
#endregion
#region
ws = ExcelCreateRowTitle(ws, hssfworkbook, style, 0, 0, 0, 3);
//行1
ws.GetRow(0).GetCell(0).CellStyle = styleBold;
ws.GetRow(0).GetCell(0).SetCellValue("类别名称");
ws.GetRow(0).GetCell(1).CellStyle = styleBold;
ws.GetRow(0).GetCell(1).SetCellValue("全部数量");
ws.GetRow(0).GetCell(2).CellStyle = styleBold;
ws.GetRow(0).GetCell(2).SetCellValue("进行中数量");
ws.GetRow(0).GetCell(3).CellStyle = styleBold;
ws.GetRow(0).GetCell(3).SetCellValue("已完成数量");
#endregion
#region
var start = 1;
var end = result.Count;
ws = ExcelCreateRowTitle(ws, hssfworkbook, style, start, end, 0, 3);
//数据
var dataIndex = 1;
foreach (var item in result)
{
ws.GetRow(dataIndex).GetCell(0).SetCellValue(item.LevelName);
ws.GetRow(dataIndex).GetCell(1).SetCellValue(item.AllNum.ToString());
ws.GetRow(dataIndex).GetCell(2).SetCellValue(item.ProgressNum.ToString());
ws.GetRow(dataIndex).GetCell(3).SetCellValue(item.CompleteNum.ToString());
dataIndex++;
}
#endregion
#region
ws = ExcelCreateRowTitle(ws, hssfworkbook, style, end + 1, end + 1, 0, 3);
ws.GetRow(end + 1).GetCell(0).SetCellValue("合计");
ws.GetRow(end + 1).GetCell(1).SetCellValue(result.Count > 0 ? result.Sum(x => x.AllNum).ToString() : "0");
ws.GetRow(end + 1).GetCell(2).SetCellValue(result.Count > 0 ? result.Sum(x => x.ProgressNum).ToString() : "0");
ws.GetRow(end + 1).GetCell(3).SetCellValue(result.Count > 0 ? result.Sum(x => x.CompleteNum).ToString() : "0");
#endregion
ws.PrintSetup.Landscape = false;
ws.PrintSetup.PaperSize = 9;
ws.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=" + Server.UrlEncode("三查四定进度.xlsx"));
// 添加头信息,指定文件大小,让浏览器能够显示下载进度
Response.AddHeader("Content-Length", filet.Length.ToString());
// 指定返回的是一个不能被客户端读取的流,必须被下载
Response.ContentType = "application/ms-excel";
// 把文件流发送到客户端
Response.WriteFile(filet.FullName);
// 停止页面的执行
Response.End();
}
}
#endregion
#region
/// <summary>
/// 创建头部
/// </summary>
/// <returns></returns>
private XSSFSheet ExcelCreateRowTitle(XSSFSheet ws, XSSFWorkbook hssfworkbook, ICellStyle style, int sRows, int eRows, int cStart, int cEnd, float height = 21)
{
for (int i = sRows; i <= eRows; i++)
{
ws.CreateRow(i);
ws.GetRow(i).HeightInPoints = height;
for (int j = cStart; j <= cEnd; j++)
{
ws.GetRow(i).CreateCell(j);
ws.GetRow(i).CreateCell(j).CellStyle = style;
}
}
return ws;
}
/// <summary>
/// 创建样式
/// </summary>
/// <returns></returns>
public static ICellStyle SetExcelStyle(XSSFWorkbook wb, BorderStyle Bottom, BorderStyle Left, BorderStyle Right, BorderStyle Top, VerticalAlignment VerAig, HorizontalAlignment HorAig, double FontSize, bool WrapText = true, bool Bold = false, string FontName = "宋体")
{
ICellStyle style = wb.CreateCellStyle();
style.BorderBottom = Bottom;
style.BorderLeft = Left;
style.BorderRight = Right;
style.BorderTop = Top;
style.VerticalAlignment = VerAig;
style.Alignment = HorAig;
IFont font = wb.CreateFont();
font.FontHeightInPoints = FontSize;
font.IsBold = Bold;
font.FontName = FontName;
style.SetFont(font);
style.WrapText = WrapText;
return style;
}
/// <summary>
/// 私有方法
/// </summary>
@@ -299,6 +896,11 @@ namespace FineUIPro.Web.TestRun.Report
//试车
DataBridSc();
}
else if (TabStrip1.ActiveTabIndex == 2)
{
//三查四定
DataBridScsd();
}
}
public class Run_ScheduleSetUpDto : Run_ScheduleSetUp
@@ -309,7 +911,92 @@ namespace FineUIPro.Web.TestRun.Report
public string WorkPackName { get; set; }
}
/// <summary>
/// 试车检查表实体
/// </summary>
public class WorkPackageInspectDto
{
/// <summary>
/// 工作包主键
/// </summary>
public string WorkPackId { get; set; }
/// <summary>
/// 工作包名称
/// </summary>
public string WorkPackName { get; set; }
/// <summary>
/// 检查表数量
/// </summary>
public int AllNum { get; set; }
/// <summary>
/// 未关闭任务单数量
/// </summary>
public int NoCloseNum { get; set; }
/// <summary>
/// 已关闭任务单数量
/// </summary>
public int CloseNum { get; set; }
}
/// <summary>
/// 三查四定统计实体
/// </summary>
public class FourDecisionScheduleBridDto
{
/// <summary>
/// 级别
/// </summary>
public string Level { get; set; }
/// <summary>
/// 尾项数量
/// </summary>
public int AllNum { get; set; }
/// <summary>
/// 未关闭尾项数量
/// </summary>
public int NoCloseNum { get; set; }
/// <summary>
/// 已关闭尾项数量
/// </summary>
public int CloseNum { get; set; }
}
#endregion
#region
/// <summary>
/// DataTable转换List
/// </summary>
/// <returns></returns>
public List<T> DataTableToList<T>(DataTable table)
{
List<T> list = new List<T>();
T t = default(T);
PropertyInfo[] propertypes = null;
string tempName = string.Empty;
foreach (DataRow row in table.Rows)
{
t = Activator.CreateInstance<T>();
propertypes = t.GetType().GetProperties();
foreach (PropertyInfo pro in propertypes)
{
tempName = pro.Name;
if (table.Columns.Contains(tempName))
{
object value = row[tempName];
if (!value.ToString().Equals(""))
{
pro.SetValue(t, value, null);
}
}
}
list.Add(t);
}
return list.Count == 0 ? new List<T>() : list;
}
#endregion
}
}
@@ -122,6 +122,24 @@ namespace FineUIPro.Web.TestRun.Report
/// </remarks>
protected global::FineUIPro.Button btnYscSave;
/// <summary>
/// ToolbarFill 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.ToolbarFill ToolbarFill;
/// <summary>
/// btnYscExport 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnYscExport;
/// <summary>
/// txtAllNum 控件。
/// </summary>
@@ -185,6 +203,24 @@ namespace FineUIPro.Web.TestRun.Report
/// </remarks>
protected global::FineUIPro.Button btnScSave;
/// <summary>
/// ToolbarFill1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.ToolbarFill ToolbarFill1;
/// <summary>
/// btnScExport 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnScExport;
/// <summary>
/// txtAllNum1 控件。
/// </summary>
@@ -211,5 +247,86 @@ namespace FineUIPro.Web.TestRun.Report
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.NumberBox txtCompleteNum1;
/// <summary>
/// GridScsd 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Grid GridScsd;
/// <summary>
/// Toolbar4 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Toolbar Toolbar4;
/// <summary>
/// btnScsdReset 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnScsdReset;
/// <summary>
/// btnScsdSave 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnScsdSave;
/// <summary>
/// ToolbarFill2 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.ToolbarFill ToolbarFill2;
/// <summary>
/// btnScsdExport 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnScsdExport;
/// <summary>
/// NumberBox1 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.NumberBox NumberBox1;
/// <summary>
/// NumberBox2 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.NumberBox NumberBox2;
/// <summary>
/// NumberBox3 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.NumberBox NumberBox3;
}
}
@@ -44,17 +44,18 @@
<Rows>
<f:FormRow runat="server" ID="zxtsc">
<Items>
<f:Grid Height="550px" ID="GridTestRun" ShowBorder="true" ShowHeader="true" EnableCollapse="true" runat="server" DataIDField="WorkPackId" DataKeyNames="WorkPackId" AllowSorting="false" SortField="Sort" SortDirection="ASC" EnableColumnLines="true" AllowCellEditing="true" EnableMultiSelect="false" AllowPaging="false" IsDatabasePaging="true">
<f:Grid Height="550px" ID="GridTestRun" ShowBorder="true" ShowHeader="true" EnableCollapse="true" runat="server" DataIDField="WorkPackId" DataKeyNames="WorkPackId" AllowSorting="false" SortField="Sort" SortDirection="ASC" EnableColumnLines="true" AllowCellEditing="true" EnableMultiSelect="false" AllowPaging="false" IsDatabasePaging="true" EnableSummary="true" SummaryPosition="Flow">
<Toolbars>
<f:Toolbar ID="Toolbar1" runat="server">
<Items>
<f:ToolbarFill ID="ToolbarFill" runat="server"></f:ToolbarFill>
<f:Button ID="btnScExport" runat="server" Icon="ApplicationGo" Text="导出" ToolTip="导出" OnClick="btnScExport_Click" DisableControlBeforePostBack="false" EnableAjax="false"></f:Button>
</Items>
</f:Toolbar>
</Toolbars>
<Columns>
<f:RowNumberField EnablePagingNumber="true" Width="50px" HeaderTextAlign="Center" TextAlign="Center" />
<f:RenderField HeaderText="工作包名称" ColumnID="WorkName" DataField="WorkName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
<f:RenderField HeaderText="工作包名称" ColumnID="WorkPackName" DataField="WorkPackName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="装置名称" ColumnID="InstallationName" DataField="InstallationName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
@@ -62,13 +63,17 @@
</f:RenderField>
<f:RenderField HeaderText="系统名称" ColumnID="SystemName" DataField="SystemName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="子系统名称" ColumnID="SubsystemName" DataField="SubsystemName" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
<f:RenderField HeaderText="工作包数量" ColumnID="WorkPackNum" DataField="WorkPackNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="工作包数量" ColumnID="AllNum" DataField="AllNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
<f:RenderField HeaderText="工作包未关闭数量" ColumnID="WorkPackNoCloseNum" DataField="WorkPackNoCloseNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="未关闭任务单数量" ColumnID="NoCloseNum" DataField="NoCloseNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
<f:RenderField HeaderText="工作包已关闭数量" ColumnID="WorkPackCloseNum" DataField="WorkPackCloseNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="已关闭任务单数量" ColumnID="CloseNum" DataField="CloseNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
<f:RenderField HeaderText="检查表数量" ColumnID="InspectNum" DataField="InspectNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="检查表未关闭数量" ColumnID="InspectNoCloseNum" DataField="InspectNoCloseNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
<f:RenderField HeaderText="检查表已关闭数量" ColumnID="InspectCloseNum" DataField="InspectCloseNum" FieldType="String" HeaderTextAlign="Center" TextAlign="Center" Width="150px">
</f:RenderField>
</Columns>
<Listeners>
@@ -7,7 +7,13 @@ using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using static FineUIPro.Web.TestRun.Report.PreRunSchedule;
using System.Reflection;
using Newtonsoft.Json.Linq;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;
using System.IO;
namespace FineUIPro.Web.TestRun.Report
{
@@ -18,14 +24,15 @@ namespace FineUIPro.Web.TestRun.Report
/// </summary>
public string TreePreRunId { get { return (string)ViewState["TreePreRunId"]; } set { ViewState["TreePreRunId"] = value; } }
/// <summary>
/// 系统主键
/// 系统主键
/// </summary>
public string SsubSystemId { get { return (string)ViewState["SsubSystemId"]; } set { ViewState["SsubSystemId"] = value; } }
public List<string> SystemIds { get { return (List<string>)ViewState["SystemIds"]; } set { ViewState["SystemIds"] = value; } }
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (SystemIds == null) SystemIds = new List<string>();
this.InitTreeMenu();//加载树
}
}
@@ -107,76 +114,203 @@ namespace FineUIPro.Web.TestRun.Report
/// <param name="e"></param>
protected void tvControlItem_NodeCommand(object sender, TreeCommandEventArgs e)
{
var devices = new List<PreRun_SysDevice>();
this.TreePreRunId = tvControlItem.SelectedNodeID != "0" ? tvControlItem.SelectedNodeID : string.Empty;
if (!string.IsNullOrWhiteSpace(this.TreePreRunId))
{
var model = Funs.DB.PreRun_SysDevice.FirstOrDefault(x => x.PreRunId == this.TreePreRunId);
if (model.PreRunLevel == 3)
{
this.SystemIds = new List<string>() { model.PreRunId };
}
else if (model.PreRunLevel == 2)
{
devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 3 && x.ProcessesId == model.PreRunId).ToList();
if (devices.Count > 0)
{
this.SystemIds = devices.ConvertAll(x => x.PreRunId);
}
}
else if (model.PreRunLevel == 1)
{
devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 3 && x.InstallationId == model.PreRunId).ToList();
if (devices.Count > 0)
{
this.SystemIds = devices.ConvertAll(x => x.PreRunId);
}
}
}
else
{
devices = Funs.DB.PreRun_SysDevice.Where(x => x.ProjectId == this.CurrUser.LoginProjectId && x.PreRunLevel == 3).ToList();
if (devices.Count > 0)
{
this.SystemIds = devices.ConvertAll(x => x.PreRunId);
}
}
TestRunBrid();
}
#endregion
#region
#region /
/// <summary>
/// 预试车绑定
/// </summary>
public void TestRunBrid()
{
var result = new List<ScheduleBridDto>();
string strSql = "select a.WorkPackId,b.WorkPackName,b.Sort,SUM(case ISNULL(a.InspectIsClose,0) when 1 then 1 else 0 end) as ygbnum,SUM(case ISNULL(a.InspectIsClose,0) when 0 then 1 else 0 end) as wgbnum,COUNT(1) as allnum from TestRun_SubInspectTerm as a inner join TestRun_WorkPackage as b on a.WorkPackId=b.WorkPackId where 1=1 and a.ProjectId=@ProjectId ";
List<SqlParameter> listStr = new List<SqlParameter>();
listStr.Add(new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId));
string installationName = "-";
string processesName = "-";
string systemName = "-";
string subsystemName = "-";
string columnames = string.Empty;
if (!string.IsNullOrWhiteSpace(this.TreePreRunId))
var result = new List<TestRunScheduleDto>();
if (this.SystemIds.Count > 0)
{
var model = Funs.DB.PreRun_SysDevice.FirstOrDefault(p => p.PreRunId == this.TreePreRunId);
if (model.PreRunLevel == 1)
{
installationName = model.PreRunName;
columnames = "a.InstallationId";
}
else if (model.PreRunLevel == 2)
{
processesName = model.PreRunName;
columnames = "a.ProcessesId";
}
else if (model.PreRunLevel == 3)
{
systemName = model.PreRunName;
columnames = "a.SystemId";
}
else if (model.PreRunLevel == 4)
{
subsystemName = model.PreRunName;
columnames = "a.SubsystemId";
}
strSql += $"and {columnames}='{model.PreRunId}'";
}
strSql += "group by a.WorkPackId,b.WorkPackName,b.Sort order by b.Sort asc";
SqlParameter[] parameter = listStr.ToArray();
var dt = SQLHelper.GetDataTableRunText(strSql, parameter);
if (dt != null)
{
foreach (DataRow item in dt.Rows)
{
result.Add(new ScheduleBridDto()
{
WorkPackId = item["WorkPackId"].ToString(),
WorkName = item["WorkPackName"].ToString(),
InstallationName = installationName,
ProcessesName = processesName,
SystemName = systemName,
SubsystemName = subsystemName,
AllNum = item["allnum"].ToString(),
NoCloseNum = item["wgbnum"].ToString(),
CloseNum = item["ygbnum"].ToString()
});
}
result = GetTestRunSchedules();
}
GridTestRun.DataSource = result;
GridTestRun.DataBind();
JObject summary = new JObject();
summary.Add("WorkPackNum", result.Sum(x => x.WorkPackNum));
summary.Add("WorkPackNoCloseNum", result.Sum(x => x.WorkPackNoCloseNum));
summary.Add("WorkPackCloseNum", result.Sum(x => x.WorkPackCloseNum));
summary.Add("InspectNum", result.Sum(x => x.InspectNum));
summary.Add("InspectNoCloseNum", result.Sum(x => x.InspectNoCloseNum));
summary.Add("InspectCloseNum", result.Sum(x => x.InspectCloseNum));
GridTestRun.SummaryData = summary;
}
/// <summary>
/// 试车导出
/// </summary>
protected void btnScExport_Click(object sender, EventArgs e)
{
string rootPath = Server.MapPath("~/") + Const.ExcelUrl;
//导出文件
string filePath = rootPath + DateTime.Now.ToString("yyyyMMddhhmmss") + "\\";
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
string ReportFileName = filePath + "试车进度.xlsx";
var result = GetTestRunSchedules();
if (result.Count > 0)
{
XSSFWorkbook hssfworkbook = new XSSFWorkbook();
XSSFSheet ws = (XSSFSheet)hssfworkbook.CreateSheet("试车进度");
#region
ws.SetColumnWidth(0, (30 * 256));
ws.SetColumnWidth(1, (20 * 256));
ws.SetColumnWidth(2, (20 * 256));
ws.SetColumnWidth(3, (20 * 256));
ws.SetColumnWidth(4, (20 * 256));
ws.SetColumnWidth(5, (20 * 256));
ws.SetColumnWidth(6, (20 * 256));
ws.SetColumnWidth(7, (20 * 256));
ws.SetColumnWidth(8, (20 * 256));
ws.SetColumnWidth(9, (20 * 256));
#endregion
#region
//公共样式
ICellStyle style = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 10.5, true);
//公共样式加粗
ICellStyle styleBold = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 10.5, true, true);
#endregion
#region
ws = ExcelCreateRowTitle(ws, hssfworkbook, style, 0, 0, 0, 9);
//行1
ws.GetRow(0).GetCell(0).CellStyle = styleBold;
ws.GetRow(0).GetCell(0).SetCellValue("工作包名称");
ws.GetRow(0).GetCell(1).CellStyle = styleBold;
ws.GetRow(0).GetCell(1).SetCellValue("装置名称");
ws.GetRow(0).GetCell(2).CellStyle = styleBold;
ws.GetRow(0).GetCell(2).SetCellValue("工序名称");
ws.GetRow(0).GetCell(3).CellStyle = styleBold;
ws.GetRow(0).GetCell(3).SetCellValue("系统名称");
ws.GetRow(0).GetCell(4).CellStyle = styleBold;
ws.GetRow(0).GetCell(4).SetCellValue("工作包数量");
ws.GetRow(0).GetCell(5).CellStyle = styleBold;
ws.GetRow(0).GetCell(5).SetCellValue("工作包未关闭数量");
ws.GetRow(0).GetCell(6).CellStyle = styleBold;
ws.GetRow(0).GetCell(6).SetCellValue("工作包已关闭数量");
ws.GetRow(0).GetCell(7).CellStyle = styleBold;
ws.GetRow(0).GetCell(7).SetCellValue("检查表数量");
ws.GetRow(0).GetCell(8).CellStyle = styleBold;
ws.GetRow(0).GetCell(8).SetCellValue("检查表未关闭数量");
ws.GetRow(0).GetCell(9).CellStyle = styleBold;
ws.GetRow(0).GetCell(9).SetCellValue("检查表已关闭数量");
#endregion
#region
var start = 1;
var end = result.Count;
ws = ExcelCreateRowTitle(ws, hssfworkbook, style, start, end, 0, 9);
//数据
var dataIndex = 1;
foreach (var item in result)
{
ws.GetRow(dataIndex).GetCell(0).SetCellValue(item.WorkPackName);
ws.GetRow(dataIndex).GetCell(1).SetCellValue(item.InstallationName);
ws.GetRow(dataIndex).GetCell(2).SetCellValue(item.ProcessesName);
ws.GetRow(dataIndex).GetCell(3).SetCellValue(item.SystemName);
ws.GetRow(dataIndex).GetCell(4).SetCellValue(item.WorkPackNum);
ws.GetRow(dataIndex).GetCell(5).SetCellValue(item.WorkPackNoCloseNum);
ws.GetRow(dataIndex).GetCell(6).SetCellValue(item.WorkPackCloseNum);
ws.GetRow(dataIndex).GetCell(7).SetCellValue(item.InspectNum);
ws.GetRow(dataIndex).GetCell(8).SetCellValue(item.InspectNoCloseNum);
ws.GetRow(dataIndex).GetCell(9).SetCellValue(item.InspectCloseNum);
dataIndex++;
}
#endregion
#region
ws = ExcelCreateRowTitle(ws, hssfworkbook, style, end + 1, end + 1, 0, 9);
var region = new CellRangeAddress(end + 1, end + 1, 0, 3);
ws.AddMergedRegion(region);
ws.GetRow(end + 1).GetCell(0).SetCellValue("合计");
ws.GetRow(end + 1).GetCell(4).SetCellValue(result.Count > 0 ? result.Sum(x => x.WorkPackNum).ToString() : "0");
ws.GetRow(end + 1).GetCell(5).SetCellValue(result.Count > 0 ? result.Sum(x => x.WorkPackNoCloseNum).ToString() : "0");
ws.GetRow(end + 1).GetCell(6).SetCellValue(result.Count > 0 ? result.Sum(x => x.WorkPackCloseNum).ToString() : "0");
ws.GetRow(end + 1).GetCell(7).SetCellValue(result.Count > 0 ? result.Sum(x => x.InspectNum).ToString() : "0");
ws.GetRow(end + 1).GetCell(8).SetCellValue(result.Count > 0 ? result.Sum(x => x.InspectNoCloseNum).ToString() : "0");
ws.GetRow(end + 1).GetCell(9).SetCellValue(result.Count > 0 ? result.Sum(x => x.InspectCloseNum).ToString() : "0");
#endregion
ws.PrintSetup.Landscape = false;
ws.PrintSetup.PaperSize = 9;
ws.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=" + Server.UrlEncode("试车进度.xlsx"));
// 添加头信息,指定文件大小,让浏览器能够显示下载进度
Response.AddHeader("Content-Length", filet.Length.ToString());
// 指定返回的是一个不能被客户端读取的流,必须被下载
Response.ContentType = "application/ms-excel";
// 把文件流发送到客户端
Response.WriteFile(filet.FullName);
// 停止页面的执行
Response.End();
}
}
#endregion
@@ -184,7 +318,48 @@ namespace FineUIPro.Web.TestRun.Report
#region
/// <summary>
/// 试车统计实体
/// 创建头部
/// </summary>
/// <returns></returns>
private XSSFSheet ExcelCreateRowTitle(XSSFSheet ws, XSSFWorkbook hssfworkbook, ICellStyle style, int sRows, int eRows, int cStart, int cEnd, float height = 21)
{
for (int i = sRows; i <= eRows; i++)
{
ws.CreateRow(i);
ws.GetRow(i).HeightInPoints = height;
for (int j = cStart; j <= cEnd; j++)
{
ws.GetRow(i).CreateCell(j);
ws.GetRow(i).CreateCell(j).CellStyle = style;
}
}
return ws;
}
/// <summary>
/// 创建样式
/// </summary>
/// <returns></returns>
public static ICellStyle SetExcelStyle(XSSFWorkbook wb, BorderStyle Bottom, BorderStyle Left, BorderStyle Right, BorderStyle Top, VerticalAlignment VerAig, HorizontalAlignment HorAig, double FontSize, bool WrapText = true, bool Bold = false, string FontName = "宋体")
{
ICellStyle style = wb.CreateCellStyle();
style.BorderBottom = Bottom;
style.BorderLeft = Left;
style.BorderRight = Right;
style.BorderTop = Top;
style.VerticalAlignment = VerAig;
style.Alignment = HorAig;
IFont font = wb.CreateFont();
font.FontHeightInPoints = FontSize;
font.IsBold = Bold;
font.FontName = FontName;
style.SetFont(font);
style.WrapText = WrapText;
return style;
}
/// <summary>
/// 试车统计实体(老)
/// </summary>
public class ScheduleBridDto
{
@@ -226,6 +401,171 @@ namespace FineUIPro.Web.TestRun.Report
public string CloseNum { get; set; }
}
/// <summary>
/// 获取试车统计
/// </summary>
/// <returns></returns>
private List<TestRunScheduleDto> GetTestRunSchedules()
{
var list = new List<TestRunScheduleDto>();
string allStr = $"select b.WorkPackId,b.WorkPackName,COUNT(a.SystemId) as WorkPackNum from TestRun_SubSysWorkPackage as a inner join TestRun_WorkPackage as b on a.WorkPackId = b.WorkPackId where a.SystemId in ('{string.Join("','", this.SystemIds)}') group by b.WorkPackId,b.WorkPackName";
var dt = SQLHelper.GetDataTableRunText(allStr);
string inspectStr = $"select a.WorkPackId,b.WorkPackName,b.Sort,SUM(case ISNULL(a.InspectIsClose, 0) when 1 then 1 else 0 end) as CloseNum,SUM(case ISNULL(a.InspectIsClose, 0) when 0 then 1 else 0 end) as NoCloseNum,COUNT(1) as AllNum from TestRun_SubInspectTerm as a inner join TestRun_WorkPackage as b on a.WorkPackId = b.WorkPackId where 1=1 and a.ProjectId = '{this.CurrUser.LoginProjectId}' group by a.WorkPackId,b.WorkPackName,b.Sort order by b.Sort asc";
var inspectDt = SQLHelper.GetDataTableRunText(inspectStr);
var inspectlist = DataTableToList<WorkPackageInspectDto>(inspectDt);
string deviceStr = $"select b.PreRunName as InstallationName,c.PreRunName as ProcessesName,d.PreRunName as SystemName from PreRun_SysDevice as a left join PreRun_SysDevice as b on b.PreRunId=ISNULL(a.InstallationId,a.PreRunId) left join PreRun_SysDevice as c on c.PreRunId=a.ProcessesId left join PreRun_SysDevice as d on d.PreRunId=a.SystemId where a.PreRunId='{this.TreePreRunId}'";
var driveDt = SQLHelper.GetDataTableRunText(deviceStr);
if (dt.Rows.Count > 0)
{
list = DataTableToList<TestRunScheduleDto>(dt);
foreach (var item in list)
{
if (inspectlist.Count(x => x.WorkPackId == item.WorkPackId) > 0)
{
var itemInspect = inspectlist.FirstOrDefault(x => x.WorkPackId == item.WorkPackId);
item.InspectNum = itemInspect.AllNum;
item.InspectCloseNum = itemInspect.CloseNum;
item.InspectNoCloseNum = itemInspect.NoCloseNum;
item.WorkPackCloseNum = itemInspect.CloseNum;
item.WorkPackNoCloseNum = itemInspect.NoCloseNum;
}
else
{
item.InspectNum = 0;
item.InspectCloseNum = 0;
item.InspectNoCloseNum = 0;
item.WorkPackNoCloseNum = 0;
item.WorkPackCloseNum = 0;
}
if (driveDt.Rows.Count > 0)
{
item.InstallationName = driveDt.Rows[0]["InstallationName"].ToString();
item.ProcessesName = driveDt.Rows[0]["ProcessesName"].ToString();
item.SystemName = driveDt.Rows[0]["SystemName"].ToString();
}
}
}
return list;
}
/// <summary>
/// 试车统计实体
/// </summary>
public class TestRunScheduleDto
{
/// <summary>
/// 工作包主键
/// </summary>
public string WorkPackId { get; set; }
/// <summary>
/// 工作包名称
/// </summary>
public string WorkPackName { get; set; }
/// <summary>
/// 装置名称
/// </summary>
public string InstallationName { get; set; }
/// <summary>
/// 工序名称
/// </summary>
public string ProcessesName { get; set; }
/// <summary>
/// 系统名称
/// </summary>
public string SystemName { get; set; }
/// <summary>
/// 工作包数量
/// </summary>
public int WorkPackNum { get; set; }
/// <summary>
/// 工作包未关闭数量
/// </summary>
public int WorkPackNoCloseNum { get; set; }
/// <summary>
/// 工作包已关闭数量
/// </summary>
public int WorkPackCloseNum { get; set; }
/// <summary>
/// 检查表数量
/// </summary>
public int InspectNum { get; set; }
/// <summary>
/// 检查表未关闭数量
/// </summary>
public int InspectNoCloseNum { get; set; }
/// <summary>
/// 检查表已关闭数量
/// </summary>
public int InspectCloseNum { get; set; }
}
/// <summary>
/// 试车检查表实体
/// </summary>
public class WorkPackageInspectDto
{
/// <summary>
/// 工作包主键
/// </summary>
public string WorkPackId { get; set; }
/// <summary>
/// 工作包名称
/// </summary>
public string WorkPackName { get; set; }
/// <summary>
/// 检查表数量
/// </summary>
public int AllNum { get; set; }
/// <summary>
/// 未关闭任务单数量
/// </summary>
public int NoCloseNum { get; set; }
/// <summary>
/// 已关闭任务单数量
/// </summary>
public int CloseNum { get; set; }
}
#endregion
#region
/// <summary>
/// DataTable转换List
/// </summary>
/// <returns></returns>
public List<T> DataTableToList<T>(DataTable table)
{
List<T> list = new List<T>();
T t = default(T);
PropertyInfo[] propertypes = null;
string tempName = string.Empty;
foreach (DataRow row in table.Rows)
{
t = Activator.CreateInstance<T>();
propertypes = t.GetType().GetProperties();
foreach (PropertyInfo pro in propertypes)
{
tempName = pro.Name;
if (table.Columns.Contains(tempName))
{
object value = row[tempName];
if (!value.ToString().Equals(""))
{
pro.SetValue(t, value, null);
}
}
}
list.Add(t);
}
return list.Count == 0 ? new List<T>() : list;
}
#endregion
}
@@ -130,5 +130,14 @@ namespace FineUIPro.Web.TestRun.Report
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.ToolbarFill ToolbarFill;
/// <summary>
/// btnScExport 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::FineUIPro.Button btnScExport;
}
}