719 lines
		
	
	
		
			34 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			719 lines
		
	
	
		
			34 KiB
		
	
	
	
		
			C#
		
	
	
	
using BLL;
 | 
						|
using Model;
 | 
						|
using NPOI.SS.UserModel;
 | 
						|
using NPOI.XSSF.UserModel;
 | 
						|
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Data;
 | 
						|
using System.Data.SqlClient;
 | 
						|
using System.Linq;
 | 
						|
using System.Web;
 | 
						|
using System.Web.UI;
 | 
						|
using System.Web.UI.WebControls;
 | 
						|
 | 
						|
namespace FineUIPro.Web.Report
 | 
						|
{
 | 
						|
    public partial class StaffingPlanReport : PageBase
 | 
						|
    {
 | 
						|
        /// <summary>
 | 
						|
        /// 加载表头
 | 
						|
        /// </summary>
 | 
						|
        protected void Page_Init(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            InitGrid();
 | 
						|
        }
 | 
						|
 | 
						|
        protected void Page_Load(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            if (!IsPostBack)
 | 
						|
            {
 | 
						|
                GetButtonPower();//权限设置
 | 
						|
 | 
						|
                var sessionTime = Session["GRID_TIME"] as List<DateTime>;
 | 
						|
                if (sessionTime != null)
 | 
						|
                {
 | 
						|
                    sessionTime = sessionTime.OrderBy(p => p).ToList();
 | 
						|
                    txtStartData.Text = sessionTime[0].ToString("yyyy-MM");
 | 
						|
                    txtEndData.Text = sessionTime[1].ToString("yyyy-MM");
 | 
						|
                    BindGrid(ddlDeptList.SelectedValue);
 | 
						|
                }
 | 
						|
                Session["GRID_TIME"] = null;
 | 
						|
                Session["Dep_Id"] = null;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #region 首次加载
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 表头
 | 
						|
        /// </summary>
 | 
						|
        private void InitGrid()
 | 
						|
        {
 | 
						|
            //部门信息
 | 
						|
            var user = BLL.Sys_UserService.GetUsersByUserId(this.CurrUser.UserId);
 | 
						|
            this.ddlDeptList.DataTextField = "DepartCode";
 | 
						|
            this.ddlDeptList.DataValueField = "DepartId";
 | 
						|
            this.ddlDeptList.DataSource = BLL.DepartService.GetDepartListBySupCheckItem(BLL.Const.CTE_DepartId);
 | 
						|
            this.ddlDeptList.DataBind();
 | 
						|
            Funs.FineUIPleaseSelect(ddlDeptList, "");
 | 
						|
            if (Session["Dep_Id"] != null) ddlDeptList.SelectedValue = Session["Dep_Id"].ToString();
 | 
						|
 | 
						|
            //绑定列头信息
 | 
						|
            var sessionTime = Session["GRID_TIME"] as List<DateTime>;
 | 
						|
            if (sessionTime != null)
 | 
						|
            {
 | 
						|
                sessionTime = sessionTime.OrderBy(p => p).ToList();
 | 
						|
                var starts = sessionTime[0];
 | 
						|
                var ends = sessionTime[1];
 | 
						|
                for (DateTime time = starts; time <= ends; time = time.AddMonths(1))
 | 
						|
                {
 | 
						|
                    RenderField rd = new RenderField();
 | 
						|
                    rd.Width = Unit.Pixel(70);
 | 
						|
                    var Year = time.Year;
 | 
						|
                    var Month = time.Month;
 | 
						|
                    var m = Month < 10 ? "0" + Month : Month.ToString();
 | 
						|
                    rd.HeaderText = Year.ToString() + m;
 | 
						|
                    rd.FieldType = FieldType.Float;
 | 
						|
                    rd.ColumnID = Year.ToString() + "-" + m.ToString();
 | 
						|
                    Grid1.Columns.Add(rd);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region 数据绑定
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 绑定数据
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="sId"></param>
 | 
						|
        private void BindGrid(string sId)
 | 
						|
        {
 | 
						|
            if (sId == BLL.Const._Null)
 | 
						|
            {
 | 
						|
                Grid1.RecordCount = 0;
 | 
						|
                Grid1.DataSource = null;
 | 
						|
                Grid1.DataBind();
 | 
						|
            }
 | 
						|
            DataTable table = new DataTable();
 | 
						|
            SqlParameter[] parameter = new SqlParameter[] { new SqlParameter("@departId", sId) };
 | 
						|
            DataSet ds = SQLHelper.RunProcedure("Proc_DepartManHoursPlanEditNew", parameter, "tt");
 | 
						|
            if (ds.Tables[0].Rows.Count > 0)
 | 
						|
            {
 | 
						|
                Grid1.RecordCount = ds.Tables[0].Rows.Count;
 | 
						|
                table = this.GetPagedDataTable(Grid1, ds.Tables[0]);
 | 
						|
                Grid1.DataSource = table;
 | 
						|
                Grid1.DataBind();
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                Grid1.RecordCount = 0;
 | 
						|
                Grid1.DataSource = null;
 | 
						|
                Grid1.DataBind();
 | 
						|
            }
 | 
						|
            if (!string.IsNullOrWhiteSpace(txtStartData.Text) && !string.IsNullOrWhiteSpace(txtEndData.Text))
 | 
						|
            {
 | 
						|
                if (Grid1.Rows.Count > 0)
 | 
						|
                {
 | 
						|
                    int sMonth = DateTime.Now.Day >= 26 ? DateTime.Now.Month : DateTime.Now.Month - 1;
 | 
						|
 | 
						|
                    var manHourDetails = new List<ManHours_PlanDetail>();
 | 
						|
                    var actHours = new List<ManHours_Actual>();
 | 
						|
                    var manHoursPlanIds = table.AsEnumerable().Select(s => s.Field<string>("ManHoursPlanId")).ToList();
 | 
						|
                    manHoursPlanIds.Remove("");
 | 
						|
                    if (manHoursPlanIds.Count > 0)
 | 
						|
                    {
 | 
						|
                        manHourDetails = Funs.DB.ManHours_PlanDetail.Where(p => manHoursPlanIds.Contains(p.PlanManHoursId)).ToList();
 | 
						|
                        actHours = Funs.DB.ManHours_Actual.Where(p => manHoursPlanIds.Contains(p.ManHoursPlanId)).ToList();
 | 
						|
                    }
 | 
						|
 | 
						|
                    for (int b = 0; b < Grid1.Rows.Count; b++)
 | 
						|
                    {
 | 
						|
                        string manHoursPlanId = Grid1.DataKeys[b][0].ToString();
 | 
						|
                        var manHourDetail = manHourDetails.Where(p => p.PlanManHoursId == manHoursPlanId);
 | 
						|
                        var actHour = actHours.Where(p => p.ManHoursPlanId == manHoursPlanId).ToList();
 | 
						|
 | 
						|
                        double? total = Convert.ToDouble(Grid1.Rows[b].Values[17]); // 实际人工时;
 | 
						|
                        double? planMan = Convert.ToDouble(Grid1.Rows[b].Values[16]);  // 计划人工时
 | 
						|
 | 
						|
                        var starts = DateTime.Parse(txtStartData.Text + "-1");
 | 
						|
                        var ends = DateTime.Parse(txtEndData.Text + "-1");
 | 
						|
                        for (DateTime time = starts; time <= ends; time = time.AddMonths(1))
 | 
						|
                        {
 | 
						|
                            RenderField rd;
 | 
						|
                            rd = Grid1.FindColumn(time.ToString("yyyy-MM")) as RenderField;
 | 
						|
                            double h = 0;
 | 
						|
                            if (time.Month == sMonth)
 | 
						|
                            {
 | 
						|
                                if (actHour.Count > 0)
 | 
						|
                                {
 | 
						|
                                    var act = actHour.Where(p => p.ManHoursDate == time.ToString("yyyy-MM")).Select(p => p.Hours).ToList();
 | 
						|
                                    if (act.Count > 0)
 | 
						|
                                    {
 | 
						|
                                        act.Remove(null);
 | 
						|
                                        Grid1.Rows[b].Values[rd.ColumnIndex] = act.Sum(p => p);
 | 
						|
                                    }
 | 
						|
                                    else
 | 
						|
                                    {
 | 
						|
                                        Grid1.Rows[b].Values[rd.ColumnIndex] = 0;
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                                else
 | 
						|
                                {
 | 
						|
                                    Grid1.Rows[b].Values[rd.ColumnIndex] = 0;
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            else
 | 
						|
                            {
 | 
						|
                                var hours = manHourDetail.FirstOrDefault(p => p.DateMonth.Value.Year == time.Year && p.DateMonth.Value.Month == time.Month);
 | 
						|
                                if (hours != null)
 | 
						|
                                {
 | 
						|
                                    Grid1.Rows[b].Values[rd.ColumnIndex] = hours.Hour;
 | 
						|
                                    h = hours != null ? hours.Hour.Value : 0;
 | 
						|
                                }
 | 
						|
                                else
 | 
						|
                                {
 | 
						|
                                    Grid1.Rows[b].Values[rd.ColumnIndex] = 0;
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            total += h;
 | 
						|
                        }
 | 
						|
                        if (total != null)
 | 
						|
                        {
 | 
						|
                            Grid1.Rows[b].Values[18] = total;
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                        {
 | 
						|
                            Grid1.Rows[b].Values[18] = 0;
 | 
						|
                        }
 | 
						|
                        if (planMan != null && planMan != 0 && total != null)
 | 
						|
                        {
 | 
						|
                            RenderField r = Grid1.FindColumn("Realization") as RenderField;
 | 
						|
                            double rate = (1.0 * total.Value / planMan.Value);
 | 
						|
                            string real = rate.ToString("0.00");
 | 
						|
                            Grid1.Rows[b].Values[r.ColumnIndex] = real;
 | 
						|
                            if (rate > 1)
 | 
						|
                            {
 | 
						|
                                Grid1.Rows[b].CellCssClasses[r.ColumnIndex] = "totalRed";
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 导出
 | 
						|
        /// </summary>
 | 
						|
        protected void btnExport_Click(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            var fileName = "人工时";
 | 
						|
 | 
						|
            XSSFWorkbook book = new XSSFWorkbook();
 | 
						|
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
 | 
						|
            //选中的树节点
 | 
						|
            if (ddlDeptList.SelectedValue == BLL.Const._Null)
 | 
						|
            {
 | 
						|
                Alert.ShowInParent("请选择部门!");
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            if (string.IsNullOrWhiteSpace(txtStartData.Text))
 | 
						|
            {
 | 
						|
                Alert.ShowInParent("开始年月不能为空!");
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            if (string.IsNullOrWhiteSpace(txtEndData.Text))
 | 
						|
            {
 | 
						|
                Alert.ShowInParent("结束年月不能为空!");
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            if (DateTime.Parse(txtStartData.Text + "-01") > DateTime.Parse(txtEndData.Text + "-01"))
 | 
						|
            {
 | 
						|
                Alert.ShowInParent("结束年月应该大于开始年月!");
 | 
						|
                return;
 | 
						|
            }
 | 
						|
 | 
						|
            //绑定日期
 | 
						|
            var starts = DateTime.Parse(txtStartData.Text + "-1");
 | 
						|
            var ends = DateTime.Parse(txtEndData.Text + "-1");
 | 
						|
            //获取人员数据
 | 
						|
            var dt = new DataTable();
 | 
						|
            SqlParameter[] parameter = new SqlParameter[] { new SqlParameter("@departId", ddlDeptList.SelectedValue) };
 | 
						|
            var ds = SQLHelper.RunProcedure("Proc_DepartManHoursPlanEditNew", parameter, "tt");
 | 
						|
            if (ds.Tables.Count > 0) dt = ds.Tables[0];
 | 
						|
            var sysUsers = Funs.DB.Sys_User.Where(p => p.DepartId == ddlDeptList.SelectedValue && p.IsPost == true && p.Account != "gly").OrderBy(p => p.UserName).ToList();
 | 
						|
 | 
						|
            foreach (var item in sysUsers)
 | 
						|
            {
 | 
						|
                //筛选对于的人员
 | 
						|
                var itemDtRow = dt.AsEnumerable().Where(s => s.Field<string>("EngineerId") == item.UserId).ToList();
 | 
						|
                if (itemDtRow.Count == 0) continue;
 | 
						|
                //sheet名称
 | 
						|
                XSSFSheet sheet = (XSSFSheet)book.CreateSheet(item.UserName);
 | 
						|
 | 
						|
                #region 样式
 | 
						|
 | 
						|
                //列头居中样式
 | 
						|
                XSSFFont tfont = (XSSFFont)book.CreateFont();
 | 
						|
                tfont.FontHeightInPoints = 10;
 | 
						|
                tfont.FontName = "Arial";
 | 
						|
                tfont.IsBold = true;
 | 
						|
                ICellStyle titleStyle = book.CreateCellStyle();
 | 
						|
                titleStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
 | 
						|
                titleStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
 | 
						|
                titleStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
 | 
						|
                titleStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
 | 
						|
                titleStyle.VerticalAlignment = VerticalAlignment.Center;
 | 
						|
                titleStyle.Alignment = HorizontalAlignment.Center;
 | 
						|
                titleStyle.WrapText = true;
 | 
						|
                titleStyle.SetFont(tfont);
 | 
						|
 | 
						|
                //全局边框靠左
 | 
						|
                XSSFFont lfont = (XSSFFont)book.CreateFont();
 | 
						|
                lfont.FontHeightInPoints = 10;
 | 
						|
                lfont.FontName = "Arial";
 | 
						|
                ICellStyle lstyle = book.CreateCellStyle();
 | 
						|
                lstyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
 | 
						|
                lstyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
 | 
						|
                lstyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
 | 
						|
                lstyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
 | 
						|
                lstyle.VerticalAlignment = VerticalAlignment.Center;
 | 
						|
                lstyle.Alignment = HorizontalAlignment.Left;
 | 
						|
                lstyle.WrapText = true;
 | 
						|
                lstyle.SetFont(lfont);
 | 
						|
 | 
						|
                //全局边框靠右
 | 
						|
                XSSFFont rfont = (XSSFFont)book.CreateFont();
 | 
						|
                rfont.FontHeightInPoints = 10;
 | 
						|
                rfont.FontName = "Arial";
 | 
						|
                ICellStyle rstyle = book.CreateCellStyle();
 | 
						|
                rstyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
 | 
						|
                rstyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
 | 
						|
                rstyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
 | 
						|
                rstyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
 | 
						|
                rstyle.VerticalAlignment = VerticalAlignment.Center;
 | 
						|
                rstyle.Alignment = HorizontalAlignment.Right;
 | 
						|
                rstyle.WrapText = true;
 | 
						|
                rstyle.SetFont(rfont);
 | 
						|
 | 
						|
                IDataFormat dataformat = book.CreateDataFormat();
 | 
						|
                ICellStyle styleDate = book.CreateCellStyle();
 | 
						|
                styleDate.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
 | 
						|
                styleDate.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
 | 
						|
                styleDate.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
 | 
						|
                styleDate.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
 | 
						|
                styleDate.VerticalAlignment = VerticalAlignment.Center;
 | 
						|
                styleDate.Alignment = HorizontalAlignment.Left;
 | 
						|
                styleDate.WrapText = true;
 | 
						|
                styleDate.SetFont(lfont);
 | 
						|
                styleDate.DataFormat = dataformat.GetFormat("yyyy/m/d");
 | 
						|
 | 
						|
                #endregion
 | 
						|
 | 
						|
                #region 设置列宽度
 | 
						|
 | 
						|
                sheet.SetColumnWidth(1, 90 * 256);
 | 
						|
                sheet.SetColumnWidth(6, 20 * 256);
 | 
						|
                sheet.SetColumnWidth(7, 20 * 256);
 | 
						|
                sheet.SetColumnWidth(8, 12 * 256);
 | 
						|
                sheet.SetColumnWidth(9, 12 * 256);
 | 
						|
                sheet.SetColumnWidth(10, 12 * 256);
 | 
						|
                sheet.SetColumnWidth(11, 12 * 256);
 | 
						|
                sheet.SetColumnWidth(12, 12 * 256);
 | 
						|
                sheet.SetColumnWidth(13, 12 * 256);
 | 
						|
                sheet.SetColumnWidth(14, 12 * 256);
 | 
						|
                sheet.SetColumnWidth(15, 12 * 256);
 | 
						|
                sheet.SetColumnWidth(16, 12 * 256);
 | 
						|
                sheet.SetColumnWidth(17, 12 * 256);
 | 
						|
                sheet.SetColumnWidth(18, 12 * 256);
 | 
						|
                sheet.SetColumnWidth(19, 12 * 256);
 | 
						|
 | 
						|
                #endregion
 | 
						|
 | 
						|
                #region 列头
 | 
						|
 | 
						|
                XSSFRow headerRow = (XSSFRow)sheet.CreateRow(0);
 | 
						|
                headerRow.CreateCell(0).SetCellValue("JobNo");
 | 
						|
                headerRow.GetCell(0).CellStyle = titleStyle;
 | 
						|
 | 
						|
                headerRow.CreateCell(1).SetCellValue("JobTitle");
 | 
						|
                headerRow.GetCell(1).CellStyle = titleStyle;
 | 
						|
 | 
						|
                headerRow.CreateCell(2).SetCellValue("JobStatus");
 | 
						|
                headerRow.GetCell(2).CellStyle = titleStyle;
 | 
						|
 | 
						|
                headerRow.CreateCell(3).SetCellValue("JobType");
 | 
						|
                headerRow.GetCell(3).CellStyle = titleStyle;
 | 
						|
 | 
						|
                headerRow.CreateCell(4).SetCellValue("Discipline");
 | 
						|
                headerRow.GetCell(4).CellStyle = titleStyle;
 | 
						|
 | 
						|
                headerRow.CreateCell(5).SetCellValue("Priority");
 | 
						|
                headerRow.GetCell(5).CellStyle = titleStyle;
 | 
						|
 | 
						|
                headerRow.CreateCell(6).SetCellValue("Roles");
 | 
						|
                headerRow.GetCell(6).CellStyle = titleStyle;
 | 
						|
 | 
						|
                headerRow.CreateCell(7).SetCellValue("Account");
 | 
						|
                headerRow.GetCell(7).CellStyle = titleStyle;
 | 
						|
 | 
						|
                headerRow.CreateCell(8).SetCellValue("ReceivedDate");
 | 
						|
                headerRow.GetCell(8).CellStyle = titleStyle;
 | 
						|
 | 
						|
                headerRow.CreateCell(9).SetCellValue("ApprovalDatePlan");
 | 
						|
                headerRow.GetCell(9).CellStyle = titleStyle;
 | 
						|
 | 
						|
                headerRow.CreateCell(10).SetCellValue("ApprovalDateActual");
 | 
						|
                headerRow.GetCell(10).CellStyle = titleStyle;
 | 
						|
 | 
						|
                headerRow.CreateCell(11).SetCellValue("Civil_RevisedEnd");
 | 
						|
                headerRow.GetCell(11).CellStyle = titleStyle;
 | 
						|
 | 
						|
                headerRow.CreateCell(12).SetCellValue("EI_RevisedEnd");
 | 
						|
                headerRow.GetCell(12).CellStyle = titleStyle;
 | 
						|
 | 
						|
                headerRow.CreateCell(13).SetCellValue("LLE_RevisedEnd");
 | 
						|
                headerRow.GetCell(13).CellStyle = titleStyle;
 | 
						|
 | 
						|
                headerRow.CreateCell(14).SetCellValue("Const_Civil_RevisedEnd");
 | 
						|
                headerRow.GetCell(14).CellStyle = titleStyle;
 | 
						|
 | 
						|
                headerRow.CreateCell(15).SetCellValue("Const_EI_RevisedEnd");
 | 
						|
                headerRow.GetCell(15).CellStyle = titleStyle;
 | 
						|
 | 
						|
                headerRow.CreateCell(16).SetCellValue("ManHours");
 | 
						|
                headerRow.GetCell(16).CellStyle = titleStyle;
 | 
						|
 | 
						|
                headerRow.CreateCell(17).SetCellValue("ManHoursActual");
 | 
						|
                headerRow.GetCell(17).CellStyle = titleStyle;
 | 
						|
 | 
						|
                headerRow.CreateCell(18).SetCellValue("ManhourActualForecast");
 | 
						|
                headerRow.GetCell(18).CellStyle = titleStyle;
 | 
						|
 | 
						|
                headerRow.CreateCell(19).SetCellValue("Realization");
 | 
						|
                headerRow.GetCell(19).CellStyle = titleStyle;
 | 
						|
                int titleCellIndex = 20;
 | 
						|
                for (DateTime time = starts; time <= ends; time = time.AddMonths(1))
 | 
						|
                {
 | 
						|
                    headerRow.CreateCell(titleCellIndex).SetCellValue(time.ToString("yyyy-MM"));
 | 
						|
                    headerRow.GetCell(titleCellIndex).CellStyle = titleStyle;
 | 
						|
                    titleCellIndex++;
 | 
						|
                }
 | 
						|
 | 
						|
                #endregion
 | 
						|
 | 
						|
                #region 数据
 | 
						|
 | 
						|
                int rowIndex = 1;
 | 
						|
                if (itemDtRow.Count > 0)
 | 
						|
                {
 | 
						|
                    int sMonth = DateTime.Now.Day >= 26 ? DateTime.Now.Month : DateTime.Now.Month - 1;
 | 
						|
                    var manHourDetails = new List<ManHours_PlanDetail>();
 | 
						|
                    var actHours = new List<ManHours_Actual>();
 | 
						|
                    var manHoursPlanIds = itemDtRow.Select(s => s.Field<string>("ManHoursPlanId")).ToList();
 | 
						|
                    manHoursPlanIds.Remove("");
 | 
						|
                    if (manHoursPlanIds.Count > 0)
 | 
						|
                    {
 | 
						|
                        manHourDetails = Funs.DB.ManHours_PlanDetail.Where(p => manHoursPlanIds.Contains(p.PlanManHoursId) && p.UserId == item.UserId).ToList();
 | 
						|
                        actHours = Funs.DB.ManHours_Actual.Where(p => manHoursPlanIds.Contains(p.ManHoursPlanId) && p.UserId == item.UserId).ToList();
 | 
						|
                    }
 | 
						|
                    for (int i = 0; i < itemDtRow.Count; i++)
 | 
						|
                    {
 | 
						|
                        double? dtotal = Convert.ToDouble(itemDtRow[i]["ManHoursActual"]); // 实际人工时;
 | 
						|
                        double? dplanMan = Convert.ToDouble(itemDtRow[i]["ManHours"]);  // 计划人工时
 | 
						|
 | 
						|
                        string manHoursPlanId = itemDtRow[i]["ManHoursPlanId"].ToString();
 | 
						|
                        var manHourDetail = manHourDetails.Where(p => p.PlanManHoursId == manHoursPlanId);
 | 
						|
                        var actHour = actHours.Where(p => p.ManHoursPlanId == manHoursPlanId).ToList();
 | 
						|
 | 
						|
                        //创建行
 | 
						|
                        XSSFRow row = (XSSFRow)sheet.CreateRow(rowIndex);
 | 
						|
                        row.CreateCell(0).SetCellValue(valueNotNull(itemDtRow[i]["ProjectControl_JobNo"]) ? itemDtRow[i]["ProjectControl_JobNo"].ToString() : string.Empty);
 | 
						|
                        row.CreateCell(1).SetCellValue(valueNotNull(itemDtRow[i]["ProjectControl_JobTitle"]) ? itemDtRow[i]["ProjectControl_JobTitle"].ToString() : string.Empty);
 | 
						|
                        row.CreateCell(2).SetCellValue(valueNotNull(itemDtRow[i]["ProjectControl_JobStatus"]) ? itemDtRow[i]["ProjectControl_JobStatus"].ToString() : string.Empty);
 | 
						|
                        row.CreateCell(3).SetCellValue(valueNotNull(itemDtRow[i]["ProjectControl_JobType"]) ? itemDtRow[i]["ProjectControl_JobType"].ToString() : string.Empty);
 | 
						|
                        row.CreateCell(4).SetCellValue(valueNotNull(itemDtRow[i]["Discipline"]) ? itemDtRow[i]["Discipline"].ToString() : string.Empty);
 | 
						|
                        row.CreateCell(5).SetCellValue(valueNotNull(itemDtRow[i]["PM_General_Priority"]) ? itemDtRow[i]["PM_General_Priority"].ToString() : string.Empty);
 | 
						|
                        row.CreateCell(6).SetCellValue(valueNotNull(itemDtRow[i]["Roles"]) ? itemDtRow[i]["Roles"].ToString() : string.Empty);
 | 
						|
                        row.CreateCell(7).SetCellValue(valueNotNull(itemDtRow[i]["ProjectControl_Account"]) ? itemDtRow[i]["ProjectControl_Account"].ToString() : string.Empty);
 | 
						|
 | 
						|
                        if (row.GetCell(8) == null) row.CreateCell(8);
 | 
						|
                        if (itemDtRow[i]["ReceivedDate"] != null && itemDtRow[i]["ReceivedDate"].ToString() != "")
 | 
						|
                        {
 | 
						|
                            row.GetCell(8).SetCellValue((DateTime)Convert.ToDateTime(itemDtRow[i]["ReceivedDate"].ToString()));
 | 
						|
                        }
 | 
						|
 | 
						|
                        if (row.GetCell(9) == null) row.CreateCell(9);
 | 
						|
                        if (itemDtRow[i]["ApprovalDatePlan"] != null && itemDtRow[i]["ApprovalDatePlan"].ToString() != "")
 | 
						|
                        {
 | 
						|
                            row.GetCell(9).SetCellValue((DateTime)Convert.ToDateTime(itemDtRow[i]["ApprovalDatePlan"].ToString()));
 | 
						|
                        }
 | 
						|
                        if (row.GetCell(10) == null) row.CreateCell(10);
 | 
						|
                        if (itemDtRow[i]["ApprovalDateActual"] != null && itemDtRow[i]["ApprovalDateActual"].ToString() != "")
 | 
						|
                        {
 | 
						|
                            row.GetCell(10).SetCellValue((DateTime)Convert.ToDateTime(itemDtRow[i]["ApprovalDateActual"].ToString()));
 | 
						|
                        }
 | 
						|
                        if (row.GetCell(11) == null) row.CreateCell(11);
 | 
						|
                        if (itemDtRow[i]["Civil_RevisedEnd"] != null && itemDtRow[i]["Civil_RevisedEnd"].ToString() != "")
 | 
						|
                        {
 | 
						|
                            row.GetCell(11).SetCellValue((DateTime)Convert.ToDateTime(itemDtRow[i]["Civil_RevisedEnd"].ToString()));
 | 
						|
                            row.GetCell(11).CellStyle = styleDate;
 | 
						|
                        }
 | 
						|
                        if (row.GetCell(12) == null) row.CreateCell(12);
 | 
						|
                        if (itemDtRow[i]["EI_RevisedEnd"] != null && itemDtRow[i]["EI_RevisedEnd"].ToString() != "")
 | 
						|
                        {
 | 
						|
                            row.GetCell(12).SetCellValue((DateTime)Convert.ToDateTime(itemDtRow[i]["EI_RevisedEnd"].ToString()));
 | 
						|
                        }
 | 
						|
                        if (row.GetCell(13) == null) row.CreateCell(13);
 | 
						|
                        if (itemDtRow[i]["LLE_RevisedEnd"] != null && itemDtRow[i]["LLE_RevisedEnd"].ToString() != "")
 | 
						|
                        {
 | 
						|
                            row.GetCell(13).SetCellValue((DateTime)Convert.ToDateTime(itemDtRow[i]["LLE_RevisedEnd"].ToString()));
 | 
						|
                        }
 | 
						|
                        if (row.GetCell(14) == null) row.CreateCell(14);
 | 
						|
                        if (itemDtRow[i]["Const_Civil_RevisedEnd"] != null && itemDtRow[i]["Const_Civil_RevisedEnd"].ToString() != "")
 | 
						|
                        {
 | 
						|
                            row.GetCell(14).SetCellValue((DateTime)Convert.ToDateTime(itemDtRow[i]["Const_Civil_RevisedEnd"].ToString()));
 | 
						|
                        }
 | 
						|
                        if (row.GetCell(15) == null) row.CreateCell(15);
 | 
						|
                        if (itemDtRow[i]["Const_EI_RevisedEnd"] != null && itemDtRow[i]["Const_EI_RevisedEnd"].ToString() != "")
 | 
						|
                        {
 | 
						|
                            row.GetCell(15).SetCellValue((DateTime)Convert.ToDateTime(itemDtRow[i]["Const_EI_RevisedEnd"].ToString()));
 | 
						|
                        }
 | 
						|
 | 
						|
                        //row.CreateCell(8).SetCellValue("");
 | 
						|
                        //row.CreateCell(9).SetCellValue(valueNotNull(itemDtRow[i]["ApprovalDatePlan"]) ? DateTime.Parse(itemDtRow[i]["ApprovalDatePlan"].ToString()).ToString("yyyy/MM/dd") : string.Empty);
 | 
						|
                        //row.CreateCell(10).SetCellValue(valueNotNull(itemDtRow[i]["ApprovalDateActual"]) ? DateTime.Parse(itemDtRow[i]["ApprovalDateActual"].ToString()).ToString("yyyy/MM/dd") : string.Empty);
 | 
						|
                        //row.CreateCell(11).SetCellValue(valueNotNull(itemDtRow[i]["Civil_RevisedEnd"]) ? DateTime.Parse(itemDtRow[i]["Civil_RevisedEnd"].ToString()).ToString("yyyy/MM/dd") : string.Empty);
 | 
						|
                        //row.CreateCell(12).SetCellValue(valueNotNull(itemDtRow[i]["EI_RevisedEnd"]) ? DateTime.Parse(itemDtRow[i]["EI_RevisedEnd"].ToString()).ToString("yyyy/MM/dd") : string.Empty);
 | 
						|
                        //row.CreateCell(13).SetCellValue(valueNotNull(itemDtRow[i]["LLE_RevisedEnd"]) ? DateTime.Parse(itemDtRow[i]["LLE_RevisedEnd"].ToString()).ToString("yyyy/MM/dd") : string.Empty);
 | 
						|
                        //row.CreateCell(14).SetCellValue(valueNotNull(itemDtRow[i]["Const_Civil_RevisedEnd"]) ? DateTime.Parse(itemDtRow[i]["Const_Civil_RevisedEnd"].ToString()).ToString("yyyy/MM/dd") : string.Empty);
 | 
						|
                        //row.CreateCell(15).SetCellValue(valueNotNull(itemDtRow[i]["Const_EI_RevisedEnd"]) ? DateTime.Parse(itemDtRow[i]["Const_EI_RevisedEnd"].ToString()).ToString("yyyy/MM/dd") : string.Empty);
 | 
						|
 | 
						|
                        row.CreateCell(16).SetCellValue(valueNotNull(itemDtRow[i]["ManHours"]) ? itemDtRow[i]["ManHours"].ToString() : string.Empty);
 | 
						|
                        row.CreateCell(17).SetCellValue(valueNotNull(itemDtRow[i]["ManHoursActual"]) ? itemDtRow[i]["ManHoursActual"].ToString() : string.Empty);
 | 
						|
                        row.CreateCell(18).SetCellValue(valueNotNull(itemDtRow[i]["ManhourActualForecast"]) ? itemDtRow[i]["ManhourActualForecast"].ToString() : string.Empty);
 | 
						|
                        row.CreateCell(19).SetCellValue(valueNotNull(itemDtRow[i]["Realization"]) ? itemDtRow[i]["Realization"].ToString() : string.Empty);
 | 
						|
 | 
						|
 | 
						|
 | 
						|
                        int dtrowIndex = 20;
 | 
						|
                        for (DateTime time = starts; time <= ends; time = time.AddMonths(1))
 | 
						|
                        {
 | 
						|
                            if (time.Month == sMonth)
 | 
						|
                            {
 | 
						|
                                if (actHour.Count > 0)
 | 
						|
                                {
 | 
						|
                                    var act = actHour.Where(p => p.ManHoursDate == time.ToString("yyyy-MM")).Select(p => p.Hours).ToList();
 | 
						|
                                    if (act.Count > 0)
 | 
						|
                                    {
 | 
						|
                                        act.Remove(null);
 | 
						|
                                        var actValue = (double)act.Sum(p => p);
 | 
						|
                                        row.CreateCell(dtrowIndex).SetCellValue(actValue);
 | 
						|
                                    }
 | 
						|
                                    else
 | 
						|
                                    {
 | 
						|
                                        row.CreateCell(dtrowIndex).SetCellValue(0);
 | 
						|
                                    }
 | 
						|
                                }
 | 
						|
                                else
 | 
						|
                                {
 | 
						|
                                    row.CreateCell(dtrowIndex).SetCellValue(0);
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            else
 | 
						|
                            {
 | 
						|
                                var hours = manHourDetail.FirstOrDefault(p => p.DateMonth.Value.Year == time.Year && p.DateMonth.Value.Month == time.Month);
 | 
						|
                                if (hours != null)
 | 
						|
                                {
 | 
						|
                                    var h = hours.Hour != null ? hours.Hour.Value : 0;
 | 
						|
                                    dtotal += h;
 | 
						|
                                    row.CreateCell(dtrowIndex).SetCellValue(h);
 | 
						|
                                }
 | 
						|
                                else
 | 
						|
                                {
 | 
						|
                                    row.CreateCell(dtrowIndex).SetCellValue(0);
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            //样式
 | 
						|
                            row.GetCell(dtrowIndex).CellStyle = rstyle;
 | 
						|
                            dtrowIndex++;
 | 
						|
                        }
 | 
						|
 | 
						|
                        if (dtotal != null)
 | 
						|
                        {
 | 
						|
                            row.CreateCell(18).SetCellValue(dtotal.Value);
 | 
						|
                            double rate = (dtotal.Value > 0 && dplanMan.Value > 0) ? (1.0 * dtotal.Value / dplanMan.Value) : 0;
 | 
						|
                            string real = rate.ToString("0.##");
 | 
						|
                            row.CreateCell(19).SetCellValue(real);
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                        {
 | 
						|
                            row.CreateCell(18).SetCellValue(0);
 | 
						|
                            row.CreateCell(19).SetCellValue("0");
 | 
						|
                        }
 | 
						|
                        //统一添加样式
 | 
						|
                        for (int r = 0; r < 8; r++)
 | 
						|
                        {
 | 
						|
                            row.GetCell(r).CellStyle = lstyle;
 | 
						|
                        }
 | 
						|
                        for (int r = 8; r < 16; r++)
 | 
						|
                        {
 | 
						|
                            row.GetCell(r).CellStyle = styleDate;
 | 
						|
                        }
 | 
						|
                        for (int r = 16; r < 20; r++)
 | 
						|
                        {
 | 
						|
                            row.GetCell(r).CellStyle = lstyle;
 | 
						|
                        }
 | 
						|
                        rowIndex++;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                #endregion
 | 
						|
            }
 | 
						|
            book.Write(ms);
 | 
						|
            byte[] strmByte = ms.ToArray();
 | 
						|
            ms.Dispose();
 | 
						|
 | 
						|
            Response.Clear();
 | 
						|
            Response.Charset = "GB2312";
 | 
						|
            Response.ContentEncoding = System.Text.Encoding.UTF8;
 | 
						|
            // 添加头信息,为"文件下载/另存为"对话框指定默认文件名
 | 
						|
            Response.AddHeader("Content-Disposition", "attachment; fileName=" + fileName + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx");
 | 
						|
            // 添加头信息,指定文件大小,让浏览器能够显示下载进度
 | 
						|
            Response.AddHeader("Content-Length", strmByte.Length.ToString());
 | 
						|
            // 指定返回的是一个不能被客户端读取的流,必须被下载
 | 
						|
            Response.ContentType = "application/ms-excel";
 | 
						|
            // 把文件流发送到客户端
 | 
						|
            Response.BinaryWrite(strmByte);
 | 
						|
            // 停止页面的执行
 | 
						|
            Response.End();
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        #region 分页、排序
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 分页
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="sender"></param>
 | 
						|
        /// <param name="e"></param>
 | 
						|
        protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
 | 
						|
        {
 | 
						|
            Grid1.PageIndex = e.NewPageIndex;
 | 
						|
            BindGrid(hidpersonnel.Text);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <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(hidpersonnel.Text);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 排序
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="sender"></param>
 | 
						|
        /// <param name="e"></param>
 | 
						|
        protected void Grid1_Sort(object sender, FineUIPro.GridSortEventArgs e)
 | 
						|
        {
 | 
						|
            Grid1.SortDirection = e.SortDirection;
 | 
						|
            Grid1.SortField = e.SortField;
 | 
						|
            BindGrid(hidpersonnel.Text);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region 搜索
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 搜索
 | 
						|
        /// </summary>
 | 
						|
        protected void btnSearch_Click(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            if (ddlDeptList.SelectedValue == Const._Null)
 | 
						|
            {
 | 
						|
                Alert.ShowInParent("请选择部门!");
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            if (string.IsNullOrWhiteSpace(txtStartData.Text))
 | 
						|
            {
 | 
						|
                Alert.ShowInParent("开始年月不能为空!");
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            if (string.IsNullOrWhiteSpace(txtEndData.Text))
 | 
						|
            {
 | 
						|
                Alert.ShowInParent("结束年月不能为空!");
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            if (DateTime.Parse(txtStartData.Text + "-01") > DateTime.Parse(txtEndData.Text + "-01"))
 | 
						|
            {
 | 
						|
                Alert.ShowInParent("结束年月应该大于开始年月!");
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            Session.Remove("GRID_TIME");
 | 
						|
            Session.Remove("Dep_Id");
 | 
						|
            //时间添加session
 | 
						|
            var time = Session["GRID_TIME"] as List<DateTime>;
 | 
						|
            if (time == null) time = new List<DateTime>();
 | 
						|
            time.Add(DateTime.Parse(txtStartData.Text.Trim() + "-01"));
 | 
						|
            time.Add(DateTime.Parse(txtEndData.Text.Trim() + "-01"));
 | 
						|
            Session["GRID_TIME"] = time;
 | 
						|
            //部门添加session
 | 
						|
            var depId = Session["Dep_Id"];
 | 
						|
            if (ddlDeptList.SelectedValue != Const._Null) Session["Dep_Id"] = ddlDeptList.SelectedValue;
 | 
						|
 | 
						|
            PageContext.Redirect("StaffingPlanReport.aspx");
 | 
						|
        }
 | 
						|
 | 
						|
        ///// <summary>
 | 
						|
        ///// 筛选
 | 
						|
        ///// </summary>
 | 
						|
        //protected void ddlDeptList_SelectedIndexChanged(object sender, EventArgs e)
 | 
						|
        //{
 | 
						|
        //    BindGrid(ddlDeptList.SelectedValue);
 | 
						|
        //    var depId = Session["Dep_Id"];
 | 
						|
        //    if (ddlDeptList.SelectedValue != Const._Null) Session["Dep_Id"] = ddlDeptList.SelectedValue;
 | 
						|
        //}
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 筛选是否为空
 | 
						|
        /// </summary>
 | 
						|
        public bool valueNotNull(object values)
 | 
						|
        {
 | 
						|
            var result = false;
 | 
						|
            if (values == null) values = string.Empty;
 | 
						|
            if (!string.IsNullOrWhiteSpace(values.ToString())) result = true;
 | 
						|
 | 
						|
            return result;
 | 
						|
        }
 | 
						|
 | 
						|
        #region 权限设置
 | 
						|
        /// <summary>
 | 
						|
        /// 菜单按钮权限
 | 
						|
        /// </summary>
 | 
						|
        private void GetButtonPower()
 | 
						|
        {
 | 
						|
            var buttonList = BLL.CommonService.GetAllButtonList(this.CurrUser.UserId, BLL.Const.StaffingPlanReportMenuId);
 | 
						|
            if (buttonList.Count() > 0)
 | 
						|
            {
 | 
						|
                if (buttonList.Contains(BLL.Const.BtnOut))
 | 
						|
                {
 | 
						|
                    this.btnExport.Hidden = false;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
    }
 | 
						|
} |