using BLL; using MiniExcelLibs; using Model; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.IO; using System.Linq; namespace FineUIPro.Web.HJGL.PreDesign { public partial class InstallList : PageBase { public int pageSize = 20; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { this.ddlPageSize.SelectedValue = this.Grid1.PageSize.ToString(); this.InitTreeMenu();//加载树 } } #region 加载树装置-单位-工作区 /// /// 加载树 /// private void InitTreeMenu() { this.tvControlItem.Nodes.Clear(); TreeNode rootNode1 = new TreeNode(); rootNode1.NodeID = "1"; rootNode1.Text = "建筑工程"; rootNode1.CommandName = "建筑工程"; rootNode1.Selectable = false; this.tvControlItem.Nodes.Add(rootNode1); TreeNode rootNode2 = new TreeNode(); rootNode2.NodeID = "2"; rootNode2.Text = "安装工程"; rootNode2.CommandName = "安装工程"; rootNode2.Expanded = true; this.tvControlItem.Nodes.Add(rootNode2); var pUnits = (from x in Funs.DB.Project_ProjectUnit where x.ProjectId == this.CurrUser.LoginProjectId select x).ToList(); // 获取当前用户所在单位 var currUnit = pUnits.FirstOrDefault(x => x.UnitId == this.CurrUser.UnitId); var unitWorkList = (from x in Funs.DB.WBS_UnitWork where x.ProjectId == this.CurrUser.LoginProjectId && x.SuperUnitWork == null && x.UnitId != null && x.ProjectType != null select x).ToList(); List unitWork1 = null; List unitWork2 = null; //// 当前为施工单位,只能操作本单位的数据 //if (currUnit != null && currUnit.UnitType == Const.ProjectUnitType_2) //{ // unitWork1 = (from x in unitWorkList // where x.UnitId == this.CurrUser.UnitId && x.ProjectType == "1" // select x).ToList(); // unitWork2 = (from x in unitWorkList // where x.UnitId == this.CurrUser.UnitId && x.ProjectType == "2" // select x).ToList(); //} //else //{ unitWork1 = (from x in unitWorkList where x.ProjectType == "1" select x).ToList(); unitWork2 = (from x in unitWorkList where x.ProjectType == "2" select x).ToList(); //} if (unitWork1.Count() > 0) { foreach (var q in unitWork1) { int a = (from x in Funs.DB.HJGL_Pipeline where x.ProjectId == this.CurrUser.LoginProjectId && x.UnitWorkId == q.UnitWorkId && x.PipeArea == "1" && x.PipelineCode.Contains(txtPipelineCode.Text.Trim()) select x.FlowingSection).Distinct().Count(); var unitNamesUnitIds = BLL.UnitService.getUnitNamesUnitIds(q.UnitId); TreeNode tn1 = new TreeNode(); tn1.NodeID = q.UnitWorkId; //tn1.Text = q.UnitWorkName + "【" + a.ToString() + "】" + "管线"; tn1.Text = q.UnitWorkName; tn1.ToolTip = "施工单位:" + unitNamesUnitIds; tn1.CommandName = 1 + "|" + Funs.GetEndPageNumber(a, pageSize); tn1.EnableClickEvent = true; tn1.EnableExpandEvent = true; rootNode1.Nodes.Add(tn1); if (a > 0) { // BindNodes(tn1); TreeNode newNode = new TreeNode(); newNode.Text = "加载流水段..."; newNode.NodeID = "加载流水段..."; tn1.Nodes.Add(newNode); } //if (a > 0) //{ // BindNodes(tn1); //} } } if (unitWork2.Count() > 0) { foreach (var q in unitWork2) { int a = (from x in Funs.DB.HJGL_Pipeline where x.ProjectId == this.CurrUser.LoginProjectId && x.UnitWorkId == q.UnitWorkId && x.PipeArea == "1" && x.PipelineCode.Contains(txtPipelineCode.Text.Trim()) select x.FlowingSection).Distinct().Count(); var unitNamesUnitIds = BLL.UnitService.getUnitNamesUnitIds(q.UnitId); TreeNode tn2 = new TreeNode(); tn2.NodeID = q.UnitWorkId; //tn2.Text = q.UnitWorkName + "【" + a.ToString() + "】" + "管线"; tn2.Text = q.UnitWorkName; if (q.UnitWorkId == this.hdUnitWorkId.Text) { tn2.Expanded = true; } tn2.ToolTip = "施工单位:" + unitNamesUnitIds; tn2.CommandName = 1 + "|" + Funs.GetEndPageNumber(a, pageSize); tn2.EnableClickEvent = true; tn2.EnableExpandEvent = true; rootNode2.Nodes.Add(tn2); if (a > 0) { // BindNodes(tn1); TreeNode newNode = new TreeNode(); newNode.Text = "加载流水段..."; newNode.NodeID = "加载流水段..."; tn2.Nodes.Add(newNode); } //if (a > 0) //{ // BindNodes(tn2); //} } } } private void BindNodes(TreeNode node) { List flowingSection = new List(); //List pipeline = new List(); var list = (from x in Funs.DB.HJGL_Pipeline where x.ProjectId == this.CurrUser.LoginProjectId && x.PipeArea == "1" && x.UnitWorkId == node.NodeID && x.PipelineCode.Contains(this.txtPipelineCode.Text.Trim()) select x.FlowingSection).ToList(); flowingSection = list.Where(x => !string.IsNullOrWhiteSpace(x) == true).Distinct().OrderBy(x => x).ToList(); //int pageindex = int.Parse(node.CommandName.Split('|')[0]); //int pageCount = int.Parse(node.CommandName.Split('|')[1]); //if (pageindex <= pageCount) //{ // flowingSection = flowingSection.Skip(pageSize * (pageindex - 1)).Take(pageSize).ToList(); foreach (var item in flowingSection) { //var comCount = (from x in Funs.DB.HJGL_Pipeline_Component where x.PipelineId == item.PipelineId select x).Count(); TreeNode newNode = new TreeNode(); //newNode.Text = item.PipelineCode + "【" + comCount.ToString() + " " + "组件" + "】"; newNode.Text = item; newNode.ToolTip = "流水段"; newNode.CommandName = "流水段"; newNode.NodeID = SQLHelper.GetNewID(); newNode.EnableClickEvent = true; node.Nodes.Add(newNode); } // if (pageindex < pageCount) // { // TreeNode newNode = new TreeNode(); // newNode.Text = "加载"; // newNode.NodeID = "加载"; // //newNode.NodeID = SQLHelper.GetNewID(); // newNode.CommandName = "加载"; // newNode.Icon = Icon.ArrowDown; // newNode.EnableClickEvent = true; // node.Nodes.Add(newNode); // } //} } #endregion protected void tvControlItem_TreeNodeExpanded(object sender, TreeNodeEventArgs e) { if (e.Node.Nodes[0].NodeID == "加载流水段...") { e.Node.Nodes.Clear(); BindNodes(e.Node); } } #region 点击TreeView /// /// 点击TreeView /// /// /// protected void tvControlItem_NodeCommand(object sender, TreeCommandEventArgs e) { if (e.CommandName == "流水段") { Model.HJGL_Pipeline pipeline = BLL.PipelineService.GetPipelineByFlowingSection(this.tvControlItem.SelectedNode.Text); this.hdUnitWorkId.Text = string.Empty; if (pipeline != null) { this.hdUnitWorkId.Text = this.tvControlItem.SelectedNode.ParentNode.NodeID; } } this.BindGrid(); } #endregion #region 数据绑定 /// /// 数据绑定 /// private void BindGrid() { if (tvControlItem.SelectedNode == null) return; var view_HJGL_InstallDatas = BindData(Grid1.PageIndex+1, Grid1.PageSize,out int totalCount, out int componentCount, out int partCount); // 2.获取当前分页数据 Grid1.RecordCount = totalCount; var table = view_HJGL_InstallDatas; Grid1.DataSource = table; Grid1.DataBind(); // 更新汇总信息(使用已统计的数据) UpdateSummary(componentCount, partCount); } /// /// 更新汇总信息 /// private void UpdateSummary(int componentCount, int partCount) { try { // 更新汇总标签 lblSummary1.Text = $"预制组件数量:{componentCount}"; lblSummary2.Text = $"预制散件数量:{partCount}"; } catch (Exception ex) { // 出现异常时显示默认值 lblSummary1.Text = "预制组件数量:0"; lblSummary2.Text = "预制散件数量:0"; } } /// /// 查询数据 /// /// private List BindData(int pageIndex, int pageSize, out int totalCount, out int componentCount, out int partCount) { var baseQuery = GetIQueryableInstallDatas(); // 一次性统计所有需要的数据(使用 GroupBy 优化) var stats = baseQuery .GroupBy(x => x.TypeStr) .Select(g => new { TypeStr = g.Key, Count = g.Count() }) .ToList(); // 从统计结果中提取数据 totalCount = stats.Sum(s => s.Count); componentCount = stats.FirstOrDefault(s => s.TypeStr == "预制组件")?.Count ?? 0; partCount = stats.FirstOrDefault(s => s.TypeStr == "预制散件")?.Count ?? 0; // 分页保护 if (pageIndex <= 0) pageIndex = 1; if (pageSize <= 0) pageSize = 10; var query = baseQuery.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); // 预制组件数量显示为1,预制散件保持原始数量 foreach (var item in query) { if (item.TypeStr == "预制组件") { item.Number = 1; } } return query; } private IQueryable GetIQueryableInstallDatas() { var baseQuery = from x in Funs.DB.View_HJGL_InstallData select x; if (tvControlItem.SelectedNode.CommandName.Split('|').Length == 2) { baseQuery = baseQuery.Where(x => x.UnitWorkId == tvControlItem.SelectedNode.NodeID); } else if (tvControlItem.SelectedNode.CommandName == "流水段") { baseQuery = baseQuery.Where(x => x.UnitWorkId == tvControlItem.SelectedNode.ParentNode.NodeID && x.FlowingSection == tvControlItem.SelectedNode.Text); } if (!string.IsNullOrEmpty(txtPipelineCode2.Text)) { baseQuery = baseQuery.Where(x => x.PipelineCode.Contains(txtPipelineCode2.Text.Trim())); } if (!string.IsNullOrEmpty(txtPipelineComponentCode.Text)) { baseQuery = baseQuery.Where(x => x.Code.Contains(txtPipelineComponentCode.Text.Trim())); } if (!string.IsNullOrEmpty(drpTypeStr.SelectedValue)) { baseQuery = baseQuery.Where(x => x.TypeStr.Contains(drpTypeStr.SelectedValue)); } //if (!string.IsNullOrEmpty(drpFlowingSection.SelectedValue) && drpFlowingSection.SelectedValue != Const._Null) //{ // strSql += " AND cte.FlowingSection =@FlowingSection"; // listStr.Add(new SqlParameter("@FlowingSection", drpFlowingSection.SelectedValue.ToString())); //} if (!string.IsNullOrEmpty(txtPipelineCode.Text)) { baseQuery = baseQuery.Where(x => x.PipelineCode.Contains(txtPipelineCode.Text.Trim())); } baseQuery = baseQuery.OrderBy(x => x.PipelineCode).ThenBy(x => x.Code); return baseQuery; } #endregion #region 分页排序 #region 页索引改变事件 /// /// 页索引改变事件 /// /// /// protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e) { BindGrid(); } #endregion #region 排序 /// /// 排序 /// /// /// protected void Grid1_Sort(object sender, GridSortEventArgs e) { BindGrid(); } #endregion #region 分页选择下拉改变事件 /// /// 分页选择下拉改变事件 /// /// /// protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e) { Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue); BindGrid(); } #endregion #endregion #region 查询事件 protected void btnSearch_Click(object sender, EventArgs e) { BindGrid(); } #endregion #region 刷新页面 /// /// 查询 /// /// /// //protected void TextBox_TextChanged(object sender, EventArgs e) //{ // this.BindGrid(); //} protected void btnTreeFind_Click1(object sender, EventArgs e) { this.InitTreeMenu(); this.BindGrid(); } #endregion public string ConvertProductionState(object state) { string StateName = string.Empty; if (state != null) { if (!string.IsNullOrEmpty(state.ToString())) { string txt = HJGL_PipelineComponentService.GetProductionState().FirstOrDefault(x => x.Value == state.ToString()).Text; return txt; } } return StateName; } /// /// 导出 /// /// /// protected void btnOut_Click(object sender, EventArgs e) { var baseQuery = GetIQueryableInstallDatas(); var q = (from x in baseQuery where x.Code != "裕-量" select new { 管线号 = x.PipelineCode, 类型 = x.TypeStr, 编号 = x.Code, 预制散件材料描述 = (x.Matdef=="" || x.Matdef==null)?"-":x.Matdef, 数量 = x.TypeStr == "预制组件" ? 1 : (x.Number ?? 1), 所在包装编号 = x.PackagingCode, 车次 = x.TrainNumber, 流水段 = x.FlowingSection }); string path = Funs.RootPath + @"File\Excel\Temp\PrePipelineInstallList.xlsx"; path = path.Replace(".xlsx", string.Format("{0:yyyy-MM-dd}", DateTime.Now) + ".xlsx"); MiniExcel.SaveAs(path, q, overwriteFile: true); string fileName = $"安装清单-" + this.tvControlItem.SelectedNode.Text + "-" + string.Format("{0:yyyy-MM-dd}", DateTime.Now) + ".xlsx"; FileInfo info = new FileInfo(path); long fileSize = info.Length; 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", fileSize.ToString()); System.Web.HttpContext.Current.Response.TransmitFile(path, 0, fileSize); System.Web.HttpContext.Current.Response.Flush(); System.Web.HttpContext.Current.Response.Close(); File.Delete(path); } } }