2022-03-15 17:36:38 +08:00
using BLL ;
using FineUIPro.Web.Controls ;
using Newtonsoft.Json.Linq ;
using System ;
using System.Collections.Generic ;
using System.Data ;
using System.Data.SqlClient ;
using System.Linq ;
using System.Text ;
using AspNet = System . Web . UI . WebControls ;
namespace FineUIPro.Web.HJGL.WeldingReport
{
public partial class OneDayReport : PageBase
{
#region 加 载
/// <summary>
/// 加载页面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load ( object sender , EventArgs e )
{
if ( ! IsPostBack )
{
Funs . DropDownPageSize ( this . ddlPageSize ) ;
this . ddlPageSize . SelectedValue = this . Grid1 . PageSize . ToString ( ) ;
List < Model . Base_Unit > units = new List < Model . Base_Unit > ( ) ;
dpDate . SelectedDate = new DateTime ( DateTime . Now . Year , DateTime . Now . Month , 1 ) ;
var pUnit = BLL . ProjectUnitService . GetProjectUnitByUnitIdProjectId ( this . CurrUser . LoginProjectId , this . CurrUser . UnitId ) ;
if ( pUnit = = null | | pUnit . UnitType = = Const . ProjectUnitType_1 )
{
units = BLL . UnitService . GetUnitByProjectIdUnitTypeList ( this . CurrUser . LoginProjectId , BLL . Const . ProjectUnitType_2 ) ;
//this.drpUnit.Enabled = false;
this . drpUnit . DataTextField = "UnitName" ;
this . drpUnit . DataValueField = "UnitId" ;
this . drpUnit . DataSource = units ;
this . drpUnit . DataBind ( ) ;
Funs . FineUIPleaseSelect ( this . drpUnit ) ;
}
else
{
units = BLL . UnitService . GetSubUnitsListBySupervisorUnitId ( this . CurrUser . ProjectId , this . CurrUser . UnitId ) ;
this . drpUnit . Enabled = false ;
this . drpUnit . DataTextField = "UnitName" ;
this . drpUnit . DataValueField = "UnitId" ;
this . drpUnit . DataSource = units ;
this . drpUnit . DataBind ( ) ;
this . drpUnit . SelectedValue = CurrUser . UnitId ;
}
//显示列
Model . Sys_UserShowColumns c = BLL . UserShowColumnsService . GetColumnsByUserId ( this . CurrUser . UserId , Const . UnitAreaQualityMenuId ) ;
if ( c ! = null )
{
this . GetShowColumn ( c . Columns ) ;
}
2023-08-29 18:56:49 +08:00
BindGrid ( ) ;
2022-03-15 17:36:38 +08:00
}
}
#endregion
#region 绑 定 BindGrid
/// <summary>
///
/// </summary>
private DataTable tb = null ;
/// <summary>
/// 绑定数据
/// </summary>
private void BindGrid ( )
{
string strSql = @ "SELECT 0 id, WorkArea.WorkAreaId, WorkArea.WorkAreaCode ,--工区代号
WorkArea . WorkAreaName , - - 工 区 代 号
CAST ( ISNULL ( total_jot . total_din , 0 ) AS DECIMAL ( 19 , 2 ) ) AS total_din , - - 总 达 因
' ' Type , 0 has_din , 0 res_din , ' ' has_per , ' ' HSData
FROM ProjectData_WorkArea AS WorkArea
LEFT JOIN ( SELECT COUNT ( * ) total_jot , pw_isoinfo . WorkAreaId ,
SUM ( case when pw_isoinfo . [ Is_Standard ] = 0 then JOT_Size else pw_jointinfo . Extend_Length end ) AS total_din
, SUM ( JOT_DoneDin ) AS finished_total_din
FROM pw_jointinfo
LEFT JOIN pw_isoinfo ON pw_jointinfo . ISO_ID = pw_isoinfo . ISO_ID
LEFT JOIN Base_Material ON Base_Material . MaterialId = pw_jointinfo . MaterialId
WHERE 1 = 1 - - ( pw_isoinfo . Is_Standard = @IsStandard OR @IsStandard IS NULL )
GROUP BY pw_isoinfo . WorkAreaId ) AS total_jot ON total_jot . WorkAreaId = WorkArea . WorkAreaId
WHERE ";
List < SqlParameter > listStr = new List < SqlParameter > ( ) ;
strSql + = " WorkArea.ProjectId = @ProjectId" ;
listStr . Add ( new SqlParameter ( "@ProjectId" , this . CurrUser . LoginProjectId ) ) ;
strSql + = " and WorkArea.UnitId = @UnitId" ;
listStr . Add ( new SqlParameter ( "@UnitId" , this . drpUnit . SelectedValue ) ) ;
SqlParameter [ ] parameter = listStr . ToArray ( ) ;
DataTable tb1 = SQLHelper . GetDataTableRunText ( strSql , parameter ) ;
strSql = @ " select WorkAreaId,[day],[month],COUNT(distinct JOT_CellWelder) as WelderNum from (SELECT DAY(jot_welddate) as [day],MONTH(jot_welddate) as [month],
pw_isoinfo . WorkAreaId , JOT_CellWelder
FROM pw_jointinfo
LEFT JOIN pw_isoinfo ON pw_jointinfo . ISO_ID = pw_isoinfo . ISO_ID
LEFT JOIN Base_Material ON Base_Material . MaterialId = pw_jointinfo . MaterialId
LEFT JOIN BO_WeldReportMain ON BO_WeldReportMain . dreportid = pw_jointinfo . dreportid
WHERE pw_isoinfo . ProjectId = ' " + this.CurrUser.LoginProjectId + " ' and pw_isoinfo . UnitId = ' " + this.drpUnit.SelectedValue+ " ' and jot_welddate > = ' " + dpDate.SelectedDate.Value.ToString(" yyyy - MM - dd ")+ " ' and jot_welddate < ' "+ dpDate.SelectedDate.Value.AddMonths(1).ToString(" yyyy - MM - dd ") + " ' "+
@ "union
SELECT DAY ( jot_welddate ) as [ day ] , MONTH ( jot_welddate ) as [ month ] ,
pw_isoinfo . WorkAreaId , JOT_FloorWelder
FROM pw_jointinfo
LEFT JOIN pw_isoinfo ON pw_jointinfo . ISO_ID = pw_isoinfo . ISO_ID
LEFT JOIN Base_Material ON Base_Material . MaterialId = pw_jointinfo . MaterialId
LEFT JOIN BO_WeldReportMain ON BO_WeldReportMain . dreportid = pw_jointinfo . dreportid
WHERE pw_isoinfo . ProjectId = ' " + this.CurrUser.LoginProjectId + " ' and pw_isoinfo . UnitId = ' " + this.drpUnit.SelectedValue + " ' and jot_welddate > = ' " + dpDate.SelectedDate.Value.ToString(" yyyy - MM - dd ") + " ' and jot_welddate < ' " + dpDate.SelectedDate.Value.AddMonths(1).ToString(" yyyy - MM - dd ") + " ' " +
@") as a group by WorkAreaId,[day],[month]" ;
listStr = new List < SqlParameter > ( ) ;
//strSql += " WorkArea.ProjectId = @ProjectId";
//listStr.Add(new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId));
//strSql += " and WorkArea.UnitId = @UnitId";
//listStr.Add(new SqlParameter("@UnitId", this.drpUnit.SelectedValue));
parameter = listStr . ToArray ( ) ;
DataTable tb2 = SQLHelper . GetDataTableRunText ( strSql , parameter ) ;
strSql = @ " SELECT DAY(jot_welddate) as [day],MONTH(jot_welddate) as [month],
COUNT ( * ) finished_total_jot_bq ,
pw_isoinfo . WorkAreaId , SUM (
case when pw_isoinfo . [ Is_Standard ] = 0 then JOT_DoneDin else pw_jointinfo . Extend_Length end
) AS finished_total_din_bq
FROM pw_jointinfo
LEFT JOIN pw_isoinfo ON pw_jointinfo . ISO_ID = pw_isoinfo . ISO_ID
LEFT JOIN Base_Material ON Base_Material . MaterialId = pw_jointinfo . MaterialId
LEFT JOIN BO_WeldReportMain ON BO_WeldReportMain . dreportid = pw_jointinfo . dreportid
WHERE pw_isoinfo . ProjectId = ' " + this.CurrUser.LoginProjectId + " ' and pw_isoinfo . UnitId = ' " + this.drpUnit.SelectedValue + " ' and jot_welddate > = ' " + dpDate.SelectedDate.Value.ToString(" yyyy - MM - dd ") + " ' and jot_welddate < ' " + dpDate.SelectedDate.Value.AddMonths(1).ToString(" yyyy - MM - dd ") + " ' " +
@"GROUP BY pw_isoinfo.WorkAreaId,DAY(jot_welddate),MONTH(jot_welddate) " ;
listStr = new List < SqlParameter > ( ) ;
//strSql += " WorkArea.ProjectId = @ProjectId";
//listStr.Add(new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId));
//strSql += " and WorkArea.UnitId = @UnitId";
//listStr.Add(new SqlParameter("@UnitId", this.drpUnit.SelectedValue));
parameter = listStr . ToArray ( ) ;
DataTable tb3 = SQLHelper . GetDataTableRunText ( strSql , parameter ) ;
int day = DateTime . DaysInMonth ( dpDate . SelectedDate . Value . Year , dpDate . SelectedDate . Value . Month ) ;
if ( tb1 ! = null )
{
for ( int i = 1 ; i < = day ; i + + )
{
tb1 . Columns . Add ( "Day" + i ) ;
}
}
int numCount = tb1 . Rows . Count ;
for ( int j = numCount - 1 ; j > = 0 ; j - - )
{
var row1 = tb1 . NewRow ( ) ;
row1 [ 0 ] = tb1 . Rows [ j ] [ 0 ] ;
row1 [ 1 ] = tb1 . Rows [ j ] [ 1 ] + "|n" ;
row1 [ 2 ] = tb1 . Rows [ j ] [ 2 ] ;
row1 [ 3 ] = tb1 . Rows [ j ] [ 3 ] ;
row1 [ 4 ] = tb1 . Rows [ j ] [ 4 ] ;
row1 [ 5 ] = tb1 . Rows [ j ] [ 5 ] ;
tb1 . Rows . InsertAt ( row1 , j + 1 ) ;
}
for ( int j = 0 ; j < numCount ; j + + )
{
var row1 = tb1 . Rows [ j * 2 ] ;
row1 [ "id" ] = j * 2 ;
row1 [ "Type" ] = "焊工(人)" ;
for ( int i = 0 ; i < tb2 . Rows . Count ; i + + )
{
var row2 = tb2 . Rows [ i ] ;
if ( row2 [ "WorkAreaId" ] . ToString ( ) = = row1 [ "WorkAreaId" ] . ToString ( ) )
{
if ( tb1 . Columns . Contains ( "Day" + row2 [ "day" ] ) )
{
row1 [ "Day" + row2 [ "day" ] ] = row2 [ "WelderNum" ] ;
}
}
}
row1 = tb1 . Rows [ j * 2 + 1 ] ;
row1 [ "id" ] = j * 2 + 1 ;
row1 [ "Type" ] = "工作量(吋)" ;
for ( int i = 0 ; i < tb3 . Rows . Count ; i + + )
{
var row3 = tb3 . Rows [ i ] ;
if ( row3 [ "WorkAreaId" ] . ToString ( ) + "|n" = = row1 [ "WorkAreaId" ] . ToString ( ) )
{
if ( tb1 . Columns . Contains ( "Day" + row3 [ "day" ] ) )
{
row1 [ "Day" + row3 [ "day" ] ] = ( ( decimal ) row3 [ "finished_total_din_bq" ] ) . ToString ( "#0.##" ) ;
}
}
}
double has = 0 ;
var row4 = tb1 . Rows [ j * 2 + 1 ] ;
for ( int i = 1 ; i < = day ; i + + )
{
if ( row4 [ "Day" + i ] ! = DBNull . Value )
try
{
has + = double . Parse ( row4 [ "Day" + i ] . ToString ( ) ) ;
}
catch ( Exception e ) { }
}
tb1 . Rows [ j * 2 ] [ "has_din" ] = has ;
if ( row4 [ "total_din" ] ! = DBNull . Value )
{
tb1 . Rows [ j * 2 ] [ "res_din" ] = double . Parse ( row4 [ "total_din" ] . ToString ( ) ) - has ;
if ( double . Parse ( row4 [ "total_din" ] . ToString ( ) ) > 0.000000001 )
{
tb1 . Rows [ j * 2 ] [ "HSData" ] = ( 100 * has / double . Parse ( row4 [ "total_din" ] . ToString ( ) ) ) . ToString ( "#0.##" ) + "%" ;
}
}
}
var rowTotal1 = tb1 . NewRow ( ) ;
rowTotal1 [ 0 ] = "10000000" ;
rowTotal1 [ 1 ] = "" ;
rowTotal1 [ 2 ] = "" ;
rowTotal1 [ 3 ] = "合计" ;
rowTotal1 [ "Type" ] = "焊工(人)" ;
var rowTotal2 = tb1 . NewRow ( ) ;
rowTotal2 [ 0 ] = "10000001" ;
rowTotal2 [ 1 ] = "" ;
rowTotal2 [ 2 ] = "" ;
rowTotal2 [ 3 ] = "" ;
rowTotal2 [ "Type" ] = "工作量(吋)" ;
double total_din = 0 ;
for ( int j = 0 ; j < numCount ; j + + )
{
try
{
total_din + = double . Parse ( tb1 . Rows [ j * 2 + 1 ] [ "total_din" ] . ToString ( ) ) ;
}
catch ( Exception e )
{
}
for ( int i = 1 ; i < = day ; i + + )
{
double temp1 = 0 ;
double temp2 = 0 ;
double . TryParse ( rowTotal1 [ "Day" + i ] ! = DBNull . Value ? rowTotal1 [ "Day" + i ] . ToString ( ) : "0" , out temp1 ) ;
double . TryParse ( tb1 . Rows [ j * 2 ] [ "Day" + i ] ! = DBNull . Value ? tb1 . Rows [ j * 2 ] [ "Day" + i ] . ToString ( ) : "0" , out temp2 ) ;
rowTotal1 [ "Day" + i ] = temp1 + temp2 ;
double temp3 = 0 ;
double temp4 = 0 ;
double . TryParse ( rowTotal2 [ "Day" + i ] ! = DBNull . Value ? rowTotal2 [ "Day" + i ] . ToString ( ) : "0" , out temp3 ) ;
double . TryParse ( tb1 . Rows [ j * 2 + 1 ] [ "Day" + i ] ! = DBNull . Value ? tb1 . Rows [ j * 2 + 1 ] [ "Day" + i ] . ToString ( ) : "0" , out temp4 ) ;
rowTotal2 [ "Day" + i ] = temp3 + temp4 ;
}
}
tb1 . Rows . Add ( rowTotal1 ) ;
tb1 . Rows . Add ( rowTotal2 ) ;
double hasTotal = 0 ;
for ( int i = 1 ; i < = day ; i + + )
{
if ( rowTotal2 [ "Day" + i ] ! = DBNull . Value )
try
{
hasTotal + = double . Parse ( rowTotal2 [ "Day" + i ] . ToString ( ) ) ;
}
catch ( Exception e ) {
}
}
rowTotal2 [ "total_din" ] = total_din ;
rowTotal1 [ "has_din" ] = hasTotal ;
rowTotal1 [ "res_din" ] = double . Parse ( rowTotal2 [ "total_din" ] . ToString ( ) ) - hasTotal ;
if ( double . Parse ( rowTotal2 [ "total_din" ] . ToString ( ) ) > 0.000000001 )
{
rowTotal1 [ "HSData" ] = ( 100 * hasTotal / double . Parse ( rowTotal2 [ "total_din" ] . ToString ( ) ) ) . ToString ( "#0.##" ) + "%" ;
}
Grid1 . RecordCount = tb1 . Rows . Count ;
Grid1 . DataSource = tb1 ;
Grid1 . DataBind ( ) ;
}
/// <summary>
/// 改变索引事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Grid1_PageIndexChange ( object sender , GridPageEventArgs e )
{
BindGrid ( ) ;
}
/// <summary>
/// 分页下拉选择事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void ddlPageSize_SelectedIndexChanged ( object sender , EventArgs e )
{
Grid1 . PageSize = Convert . ToInt32 ( ddlPageSize . SelectedValue ) ;
BindGrid ( ) ;
}
/// <summary>
/// 排序
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Grid1_Sort ( object sender , FineUIPro . GridSortEventArgs e )
{
this . BindGrid ( ) ;
}
#endregion
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Window1_Close ( object sender , WindowCloseEventArgs e )
{
this . BindGrid ( ) ;
// 显示列
var c = UserShowColumnsService . GetColumnsByUserId ( this . CurrUser . UserId , Const . UnitAreaQualityMenuId ) ;
if ( c ! = null )
{
this . GetShowColumn ( c . Columns ) ;
}
}
/// <summary>
/// 显示的列
/// </summary>
/// <param name="column"></param>
private void GetShowColumn ( string column )
{
if ( ! string . IsNullOrEmpty ( column ) )
{
for ( int i = 0 ; i < Grid1 . Columns . Count ; i + + )
{
this . Grid1 . Columns [ i ] . Hidden = true ;
}
List < string > columns = column . Split ( ',' ) . ToList ( ) ;
foreach ( var item in columns )
{
this . Grid1 . Columns [ Convert . ToInt32 ( item ) ] . Hidden = false ;
}
}
}
#region 统 计 按 钮 事 件
/// <summary>
/// 统计
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void BtnAnalyse_Click ( object sender , EventArgs e )
{
if ( drpUnit . SelectedValue = = BLL . Const . _Null )
{
Alert . ShowInTop ( "请选择单位!" , MessageBoxIcon . Warning ) ;
return ;
} ColumnUnitName . HeaderText = drpUnit . SelectedText ;
if ( dpDate . SelectedDate . HasValue )
{
CollumMonth . HeaderText = dpDate . SelectedDate . Value . ToString ( "yyyy年MM月" ) ;
int day = DateTime . DaysInMonth ( dpDate . SelectedDate . Value . Year , dpDate . SelectedDate . Value . Month ) ;
if ( day = = 30 )
{
Day31 . Hidden = true ;
}
else if ( day = = 29 )
{
Day30 . Hidden = true ;
Day31 . Hidden = true ;
}
else if ( day = = 28 )
{
Day29 . Hidden = true ;
Day30 . Hidden = true ;
Day31 . Hidden = true ;
}
}
else
{
Alert . ShowInTop ( "请选择日期!" , MessageBoxIcon . Warning ) ;
return ;
}
BindGrid ( ) ;
//OutputSummaryData();
}
#endregion
#region 导 出 按 钮
/// 导出按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnOut_Click ( object sender , EventArgs e )
{
Response . ClearContent ( ) ;
string filename = Funs . GetNewFileName ( ) ;
Response . AddHeader ( "content-disposition" , "attachment; filename=" + System . Web . HttpUtility . UrlEncode ( "储罐/管道每日焊接量统计表" + filename , System . Text . Encoding . UTF8 ) + ".xls" ) ;
Response . ContentType = "application/excel" ;
Response . ContentEncoding = System . Text . Encoding . UTF8 ;
Response . Write ( GetGridTableHtml ( Grid1 ) ) ;
Response . End ( ) ;
}
/// <summary>
/// 导出方法
/// </summary>
/// <param name="grid"></param>
/// <returns></returns>
private string GetGridTableHtml ( Grid grid )
{
StringBuilder sb = new StringBuilder ( ) ;
MultiHeaderTable mht = new MultiHeaderTable ( ) ;
mht . ResolveMultiHeaderTable ( Grid1 . Columns ) ;
sb . Append ( "<meta http-equiv=\"content-type\" content=\"application/excel; charset=UTF-8\"/>" ) ;
sb . Append ( "<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">" ) ;
foreach ( List < object [ ] > rows in mht . MultiTable )
{
sb . Append ( "<tr>" ) ;
foreach ( object [ ] cell in rows )
{
int rowspan = Convert . ToInt32 ( cell [ 0 ] ) ;
int colspan = Convert . ToInt32 ( cell [ 1 ] ) ;
GridColumn column = cell [ 2 ] as GridColumn ;
if ( ! column . Hidden )
{
sb . AppendFormat ( "<th{0}{1}{2}>{3}</th>" ,
rowspan ! = 1 ? " rowspan=\"" + rowspan + "\"" : "" ,
colspan ! = 1 ? " colspan=\"" + colspan + "\"" : "" ,
colspan ! = 1 ? " style=\"text-align:center;\"" : "" ,
column . HeaderText ) ;
}
}
sb . Append ( "</tr>" ) ;
}
int j = 0 ;
foreach ( GridRow row in grid . Rows )
{
sb . Append ( "<tr>" ) ;
int i = 0 ;
foreach ( GridColumn column in mht . Columns )
{
string html = row . Values [ column . ColumnIndex ] . ToString ( ) ;
if ( column . ColumnID = = "tfNumber" )
{
html = ( row . FindControl ( "spanNumber" ) as System . Web . UI . HtmlControls . HtmlGenericControl ) . InnerText ;
}
else if ( column . ColumnID = = "tfGender" )
{
html = ( row . FindControl ( "labGender" ) as AspNet . Label ) . Text ;
}
if ( i < = 5 & & j % 2 = = 0 )
{
if ( ! column . Hidden )
{
sb . AppendFormat ( "<td rowspan='2'>{0}</td>" , html ) ;
}
}
else if ( i > 5 )
{
if ( ! column . Hidden )
{
sb . AppendFormat ( "<td >{0}</td>" , html ) ;
}
}
i + + ;
}
j + + ;
sb . Append ( "</tr>" ) ;
}
sb . Append ( "</table>" ) ;
return sb . ToString ( ) ;
}
#endregion
#region 下 拉 选 择 事 件
/// <summary>
/// 单位下拉选择事件
/// </summary>
/// <param name = "sender" ></ param >
/// < param name="e"></param>
protected void drpUnit_SelectedIndexChanged ( object sender , EventArgs e )
{
2023-08-29 18:56:49 +08:00
BindGrid ( ) ;
}
2022-03-15 17:36:38 +08:00
#endregion
}
}