2024-02-08 18:10:24 +08:00
using Aspose.Words.Lists ;
using BLL ;
2024-03-11 09:46:11 +08:00
using FineUIPro.Web.DataShow ;
2024-02-08 18:10:24 +08:00
using Model ;
using System ;
2024-03-11 09:46:11 +08:00
using System.ArrayExtensions ;
2024-02-08 18:10:24 +08:00
using System.Collections.Generic ;
using System.Data ;
using System.Data.SqlClient ;
2024-03-11 09:46:11 +08:00
using System.IO ;
2024-02-08 18:10:24 +08:00
using System.Linq ;
2024-03-11 09:46:11 +08:00
using System.Reflection ;
2024-02-08 18:10:24 +08:00
using System.Web ;
using System.Web.UI ;
2024-03-11 09:46:11 +08:00
using WIA ;
using NPOI.SS.UserModel ;
using NPOI.SS.Util ;
using NPOI.XSSF.UserModel ;
using System.Drawing ;
using Newtonsoft.Json.Linq ;
2024-02-08 18:10:24 +08:00
namespace FineUIPro.Web.TestRun.Report
{
public partial class PreRunSchedule : PageBase
{
/// <summary>
/// 点击树状主键
/// </summary>
public string TreePreRunId { get { return ( string ) ViewState [ "TreePreRunId" ] ; } set { ViewState [ "TreePreRunId" ] = value ; } }
/// <summary>
/// 子系统主键
/// </summary>
2024-03-11 09:46:11 +08:00
public List < string > SubSystemIds { get { return ( List < string > ) ViewState [ "SubSystemIds" ] ; } set { ViewState [ "SubSystemIds" ] = value ; } }
2024-02-08 18:10:24 +08:00
protected void Page_Load ( object sender , EventArgs e )
{
if ( ! IsPostBack )
{
2024-03-11 09:46:11 +08:00
if ( SubSystemIds = = null ) SubSystemIds = new List < string > ( ) ;
2024-02-08 18:10:24 +08:00
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 )
{
2024-03-11 09:46:11 +08:00
var devices = new List < PreRun_SysDevice > ( ) ;
2024-02-08 18:10:24 +08:00
this . TreePreRunId = tvControlItem . SelectedNodeID ! = "0" ? tvControlItem . SelectedNodeID : string . Empty ;
2024-03-11 09:46:11 +08:00
if ( ! string . IsNullOrWhiteSpace ( this . TreePreRunId ) )
2024-02-08 18:10:24 +08:00
{
2024-03-11 09:46:11 +08:00
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 ) ;
}
}
2024-02-08 18:10:24 +08:00
}
2024-03-11 09:46:11 +08:00
else
2024-02-08 18:10:24 +08:00
{
2024-03-11 09:46:11 +08:00
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 ) ;
}
2024-02-08 18:10:24 +08:00
}
2024-03-11 09:46:11 +08:00
PreRunBrid ( ) ;
2024-02-08 18:10:24 +08:00
}
#endregion
2024-03-11 09:46:11 +08:00
#region 数 据 绑 定 / 导 出
2024-02-08 18:10:24 +08:00
/// <summary>
/// 预试车绑定
/// </summary>
public void PreRunBrid ( )
{
2024-03-11 09:46:11 +08:00
var result = new List < PreRunScheduleDto > ( ) ;
if ( this . SubSystemIds . Count > 0 )
2024-02-08 18:10:24 +08:00
{
2024-03-11 09:46:11 +08:00
result = GetPreRunSchedules ( ) ;
2024-02-08 18:10:24 +08:00
}
GridPreRun . DataSource = result ;
GridPreRun . DataBind ( ) ;
2024-03-11 09:46:11 +08:00
JObject summary = new JObject ( ) ;
summary . Add ( "WorkPackNum" , result . Sum ( x = > x . WorkPackNum ) ) ;
2024-03-28 10:14:38 +08:00
summary . Add ( "WorkPackNotStartedNum" , result . Sum ( x = > x . WorkPackNotStartedNum ) ) ;
2024-03-11 09:46:11 +08:00
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 ;
2024-02-08 18:10:24 +08:00
}
/// <summary>
2024-03-11 09:46:11 +08:00
/// 导出
2024-02-08 18:10:24 +08:00
/// </summary>
2024-03-11 09:46:11 +08:00
protected void btnYscExport_Click ( object sender , EventArgs e )
2024-02-08 18:10:24 +08:00
{
2024-03-11 09:46:11 +08:00
string rootPath = Server . MapPath ( "~/" ) + Const . ExcelUrl ;
//导出文件
string filePath = rootPath + DateTime . Now . ToString ( "yyyyMMddhhmmss" ) + "\\" ;
if ( ! Directory . Exists ( filePath ) )
2024-02-08 18:10:24 +08:00
{
2024-03-11 09:46:11 +08:00
Directory . CreateDirectory ( filePath ) ;
2024-02-08 18:10:24 +08:00
}
2024-03-11 09:46:11 +08:00
string ReportFileName = filePath + "预试车进度.xlsx" ;
var result = GetPreRunSchedules ( ) ;
if ( result . Count > 0 )
2024-02-08 18:10:24 +08:00
{
2024-03-11 09:46:11 +08:00
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 ) ) ;
2024-03-28 10:14:38 +08:00
ws . SetColumnWidth ( 11 , ( 20 * 256 ) ) ;
2024-03-11 09:46:11 +08:00
#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 头 部
2024-03-28 10:14:38 +08:00
ws = ExcelCreateRowTitle ( ws , hssfworkbook , style , 0 , 0 , 0 , 11 ) ;
2024-03-11 09:46:11 +08:00
//行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 ;
2024-03-28 10:14:38 +08:00
ws . GetRow ( 0 ) . GetCell ( 6 ) . SetCellValue ( "工作包未开始数量" ) ;
2024-03-11 09:46:11 +08:00
ws . GetRow ( 0 ) . GetCell ( 7 ) . CellStyle = styleBold ;
2024-03-28 10:14:38 +08:00
ws . GetRow ( 0 ) . GetCell ( 7 ) . SetCellValue ( "工作包未关闭数量" ) ;
2024-03-11 09:46:11 +08:00
ws . GetRow ( 0 ) . GetCell ( 8 ) . CellStyle = styleBold ;
2024-03-28 10:14:38 +08:00
ws . GetRow ( 0 ) . GetCell ( 8 ) . SetCellValue ( "工作包已关闭数量" ) ;
2024-03-11 09:46:11 +08:00
ws . GetRow ( 0 ) . GetCell ( 9 ) . CellStyle = styleBold ;
2024-03-28 10:14:38 +08:00
ws . GetRow ( 0 ) . GetCell ( 9 ) . SetCellValue ( "检查表数量" ) ;
2024-03-11 09:46:11 +08:00
ws . GetRow ( 0 ) . GetCell ( 10 ) . CellStyle = styleBold ;
2024-03-28 10:14:38 +08:00
ws . GetRow ( 0 ) . GetCell ( 10 ) . SetCellValue ( "检查表未关闭数量" ) ;
ws . GetRow ( 0 ) . GetCell ( 11 ) . CellStyle = styleBold ;
ws . GetRow ( 0 ) . GetCell ( 11 ) . SetCellValue ( "检查表已关闭数量" ) ;
2024-03-11 09:46:11 +08:00
#endregion
#region 表 格
var start = 1 ;
var end = result . Count ;
2024-03-28 10:14:38 +08:00
ws = ExcelCreateRowTitle ( ws , hssfworkbook , style , start , end , 0 , 11 ) ;
2024-03-11 09:46:11 +08:00
//数据
var dataIndex = 1 ;
foreach ( var item in result )
2024-02-08 18:10:24 +08:00
{
2024-03-11 09:46:11 +08:00
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 ) ;
2024-03-28 10:14:38 +08:00
ws . GetRow ( dataIndex ) . GetCell ( 6 ) . SetCellValue ( item . WorkPackNotStartedNum ) ;
ws . GetRow ( dataIndex ) . GetCell ( 7 ) . SetCellValue ( item . WorkPackNoCloseNum ) ;
ws . GetRow ( dataIndex ) . GetCell ( 8 ) . SetCellValue ( item . WorkPackCloseNum ) ;
ws . GetRow ( dataIndex ) . GetCell ( 9 ) . SetCellValue ( item . InspectNum ) ;
ws . GetRow ( dataIndex ) . GetCell ( 10 ) . SetCellValue ( item . InspectNoCloseNum ) ;
ws . GetRow ( dataIndex ) . GetCell ( 11 ) . SetCellValue ( item . InspectCloseNum ) ;
2024-03-11 09:46:11 +08:00
dataIndex + + ;
2024-02-08 18:10:24 +08:00
}
2024-03-11 09:46:11 +08:00
#endregion
#region 尾 部
2024-03-28 10:14:38 +08:00
ws = ExcelCreateRowTitle ( ws , hssfworkbook , style , end + 1 , end + 1 , 0 , 11 ) ;
2024-03-11 09:46:11 +08:00
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" ) ;
2024-03-28 10:14:38 +08:00
ws . GetRow ( end + 1 ) . GetCell ( 6 ) . SetCellValue ( result . Count > 0 ? result . Sum ( x = > x . WorkPackNotStartedNum ) . ToString ( ) : "0" ) ;
ws . GetRow ( end + 1 ) . GetCell ( 7 ) . SetCellValue ( result . Count > 0 ? result . Sum ( x = > x . WorkPackNoCloseNum ) . ToString ( ) : "0" ) ;
ws . GetRow ( end + 1 ) . GetCell ( 8 ) . SetCellValue ( result . Count > 0 ? result . Sum ( x = > x . WorkPackCloseNum ) . ToString ( ) : "0" ) ;
ws . GetRow ( end + 1 ) . GetCell ( 9 ) . SetCellValue ( result . Count > 0 ? result . Sum ( x = > x . InspectNum ) . ToString ( ) : "0" ) ;
ws . GetRow ( end + 1 ) . GetCell ( 10 ) . SetCellValue ( result . Count > 0 ? result . Sum ( x = > x . InspectNoCloseNum ) . ToString ( ) : "0" ) ;
ws . GetRow ( end + 1 ) . GetCell ( 11 ) . SetCellValue ( result . Count > 0 ? result . Sum ( x = > x . InspectCloseNum ) . ToString ( ) : "0" ) ;
2024-03-11 09:46:11 +08:00
#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 ( ) ;
2024-02-08 18:10:24 +08:00
}
}
#endregion
#region 私 有 方 法
/// <summary>
2024-03-11 09:46:11 +08:00
/// 创建头部
2024-02-08 18:10:24 +08:00
/// </summary>
2024-03-11 09:46:11 +08:00
/// <returns></returns>
private XSSFSheet ExcelCreateRowTitle ( XSSFSheet ws , XSSFWorkbook hssfworkbook , ICellStyle style , int sRows , int eRows , int cStart , int cEnd , float height = 21 )
2024-02-08 18:10:24 +08:00
{
2024-03-11 09:46:11 +08:00
for ( int i = sRows ; i < = eRows ; i + + )
2024-02-08 18:10:24 +08:00
{
2024-03-11 09:46:11 +08:00
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 ;
}
2024-02-08 18:10:24 +08:00
}
2024-03-11 09:46:11 +08:00
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 )
2024-02-08 18:10:24 +08:00
{
2024-03-11 09:46:11 +08:00
//获取所有子系统数量
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 ;
2024-03-28 10:14:38 +08:00
model . WorkPackNotStartedNum = 0 ;
2024-03-11 09:46:11 +08:00
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
{
2024-03-28 10:14:38 +08:00
model . WorkPackNotStartedNum + = 1 ;
2024-03-11 09:46:11 +08:00
}
}
list . Add ( model ) ;
}
2024-02-08 18:10:24 +08:00
}
2024-03-11 09:46:11 +08:00
return list ;
2024-02-08 18:10:24 +08:00
}
/// <summary>
/// 预试车统计实体
/// </summary>
public class ScheduleBridDto
{
/// <summary>
/// 工作包主键
/// </summary>
public string PreRunId { get ; set ; }
/// <summary>
/// 工作包主键
/// </summary>
public string WorkPackId { get ; set ; }
/// <summary>
/// 工作包名称
/// </summary>
public string WorkName { 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 string AllNum { get ; set ; }
/// <summary>
2024-03-28 10:14:38 +08:00
/// 未关闭数量
2024-02-08 18:10:24 +08:00
/// </summary>
public string NoCloseNum { get ; set ; }
/// <summary>
2024-03-28 10:14:38 +08:00
/// 已关闭数量
2024-02-08 18:10:24 +08:00
/// </summary>
public string CloseNum { get ; set ; }
}
2024-03-11 09:46:11 +08:00
/// <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>
2024-03-28 10:14:38 +08:00
/// 工作包未开始数量
/// </summary>
public int WorkPackNotStartedNum { get ; set ; }
/// <summary>
2024-03-11 09:46:11 +08:00
/// 工作包已关闭数量
/// </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 ;
}
2024-02-08 18:10:24 +08:00
#endregion
}
}