using BLL; using MiniExcelLibs; using Model; using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace FineUIPro.Web.HJGL.InfoQuery { public partial class MaterialOverview : PageBase { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ddlPageSize.SelectedValue = Grid1.PageSize.ToString(); InitTreeMenu(); } } private void InitTreeMenu() { tvControlItem.Nodes.Clear(); TreeNode civilNode = new TreeNode { NodeID = "1", Text = "建筑工程", Selectable = false }; TreeNode installNode = new TreeNode { NodeID = "2", Text = "安装工程", Selectable = false, Expanded = true }; tvControlItem.Nodes.Add(civilNode); tvControlItem.Nodes.Add(installNode); string projectId = CurrUser.LoginProjectId; // 识别结果未保存项目和WBS字段,按管线号关联项目管线后才能实现项目隔离和WBS筛选。 var recordCounts = (from material in Funs.DB.HJGL_DrawingRecognition_Material join pipeline in Funs.DB.HJGL_Pipeline on material.Pipe_no equals pipeline.PipelineCode where pipeline.ProjectId == projectId && pipeline.UnitWorkId != null group material by pipeline.UnitWorkId into groupItem select new { UnitWorkId = groupItem.Key, Count = groupItem.Count() }).ToDictionary(x => x.UnitWorkId, x => x.Count); var unitWorks = (from unitWork in Funs.DB.WBS_UnitWork where unitWork.ProjectId == projectId && unitWork.SuperUnitWork == null && unitWork.UnitId != null && unitWork.ProjectType != null orderby unitWork.UnitWorkCode select unitWork).ToList(); var unitIds = unitWorks.Where(x => x.UnitId != null).Select(x => x.UnitId).Distinct().ToList(); var unitNames = (from unit in Funs.DB.Base_Unit where unitIds.Contains(unit.UnitId) select unit).ToDictionary(x => x.UnitId, x => x.UnitName); foreach (var unitWork in unitWorks) { int count = recordCounts.ContainsKey(unitWork.UnitWorkId) ? recordCounts[unitWork.UnitWorkId] : 0; TreeNode node = new TreeNode(); node.NodeID = unitWork.UnitWorkId; node.Text = unitWork.UnitWorkName + "【" + count + "】材料"; node.ToolTip = "施工单位:" + (unitNames.ContainsKey(unitWork.UnitId) ? unitNames[unitWork.UnitId] : ""); node.EnableClickEvent = true; (unitWork.ProjectType == "1" ? civilNode : installNode).Nodes.Add(node); } } protected void tvControlItem_NodeCommand(object sender, TreeCommandEventArgs e) { Grid1.PageIndex = 0; BindGrid(); } private void BindGrid() { string unitWorkId = tvControlItem.SelectedNodeID; if (string.IsNullOrEmpty(unitWorkId)) { Grid1.RecordCount = 0; Grid1.DataSource = new List(); Grid1.DataBind(); return; } var query = ApplySort(GetCurrentQuery(unitWorkId)); Grid1.RecordCount = query.Count(); Grid1.DataSource = query.Skip(Grid1.PageIndex * Grid1.PageSize).Take(Grid1.PageSize).ToList(); Grid1.DataBind(); } /// /// 汇总当前WBS节点和页面筛选条件,保证列表与导出数据完全一致。 /// private IQueryable GetCurrentQuery(string unitWorkId) { string pipeNo = txtPipeNo.Text.Trim(); string materialCode = txtMaterialCode.Text.Trim(); var query = from material in Funs.DB.HJGL_DrawingRecognition_Material join pipeline in Funs.DB.HJGL_Pipeline on material.Pipe_no equals pipeline.PipelineCode where pipeline.ProjectId == CurrUser.LoginProjectId && pipeline.UnitWorkId == unitWorkId select material; if (!string.IsNullOrEmpty(pipeNo)) query = query.Where(x => x.Pipe_no.Contains(pipeNo)); if (!string.IsNullOrEmpty(materialCode)) query = query.Where(x => x.Code.Contains(materialCode)); return query; } private IQueryable ApplySort(IQueryable query) { bool descending = Grid1.SortDirection == "DESC"; switch (Grid1.SortField) { case "Pipe_page_no": return descending ? query.OrderByDescending(x => x.Pipe_page_no) : query.OrderBy(x => x.Pipe_page_no); case "Seq_no": return descending ? query.OrderByDescending(x => x.Seq_no) : query.OrderBy(x => x.Seq_no); case "Code": return descending ? query.OrderByDescending(x => x.Code) : query.OrderBy(x => x.Code); case "Drawing_number": return descending ? query.OrderByDescending(x => x.Drawing_number) : query.OrderBy(x => x.Drawing_number); case "Category": return descending ? query.OrderByDescending(x => x.Category) : query.OrderBy(x => x.Category); case "Spec": return descending ? query.OrderByDescending(x => x.Spec) : query.OrderBy(x => x.Spec); case "Qty": return descending ? query.OrderByDescending(x => x.Qty) : query.OrderBy(x => x.Qty); case "Unit": return descending ? query.OrderByDescending(x => x.Unit) : query.OrderBy(x => x.Unit); case "Material": return descending ? query.OrderByDescending(x => x.Material) : query.OrderBy(x => x.Material); case "Description": return descending ? query.OrderByDescending(x => x.Description) : query.OrderBy(x => x.Description); case "Remark": return descending ? query.OrderByDescending(x => x.Remark) : query.OrderBy(x => x.Remark); default: return descending ? query.OrderByDescending(x => x.Pipe_no) : query.OrderBy(x => x.Pipe_no); } } protected void btnQuery_Click(object sender, EventArgs e) { Grid1.PageIndex = 0; BindGrid(); } protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e) { Grid1.PageIndex = e.NewPageIndex; BindGrid(); } protected void Grid1_Sort(object sender, GridSortEventArgs e) { Grid1.SortField = e.SortField; Grid1.SortDirection = e.SortDirection; BindGrid(); } protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e) { Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue); Grid1.PageIndex = 0; BindGrid(); } protected void btnOut_Click(object sender, EventArgs e) { string unitWorkId = tvControlItem.SelectedNodeID; if (string.IsNullOrEmpty(unitWorkId)) { ShowNotify("请先选择WBS目录", MessageBoxIcon.Warning); return; } // 导出所有满足当前筛选条件的记录,不受列表分页大小限制。 var data = ApplySort(GetCurrentQuery(unitWorkId)).Select(x => new { 管线号 = x.Pipe_no, 管线页码 = x.Pipe_page_no, 序号 = x.Seq_no, 材料编码 = x.Code, 图号 = x.Drawing_number, 类型 = x.Category, 规格 = x.Spec, 数量 = x.Qty, 单位 = x.Unit, 材质 = x.Material, 描述 = x.Description, 备注 = x.Remark }).ToList(); string path = Path.Combine(Funs.RootPath, "File", "Excel", "Temp", "MaterialOverview" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".xlsx"); MiniExcel.SaveAs(path, data); DownloadExcel(path, "管道材料信息总览.xlsx"); } private void DownloadExcel(string path, string fileName) { FileInfo info = new FileInfo(path); System.Web.HttpContext.Current.Response.Clear(); System.Web.HttpContext.Current.Response.ContentType = "application/x-zip-compressed"; System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)); System.Web.HttpContext.Current.Response.AddHeader("Content-Length", info.Length.ToString()); System.Web.HttpContext.Current.Response.TransmitFile(path, 0, info.Length); System.Web.HttpContext.Current.Response.Flush(); System.Web.HttpContext.Current.Response.Close(); File.Delete(path); } } }