448 lines
18 KiB
C#
448 lines
18 KiB
C#
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 加载树装置-单位-工作区
|
||
/// <summary>
|
||
/// 加载树
|
||
/// </summary>
|
||
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<Model.WBS_UnitWork> unitWork1 = null;
|
||
List<Model.WBS_UnitWork> 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<string> flowingSection = new List<string>();
|
||
//List<Model.HJGL_Pipeline> pipeline = new List<Model.HJGL_Pipeline>();
|
||
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
|
||
/// <summary>
|
||
/// 点击TreeView
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
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 数据绑定
|
||
/// <summary>
|
||
/// 数据绑定
|
||
/// </summary>
|
||
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);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 更新汇总信息
|
||
/// </summary>
|
||
private void UpdateSummary(int componentCount, int partCount)
|
||
{
|
||
try
|
||
{
|
||
// 更新汇总标签
|
||
lblSummary1.Text = $"预制组件数量:{componentCount}";
|
||
lblSummary2.Text = $"预制散件数量:{partCount}";
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
// 出现异常时显示默认值
|
||
lblSummary1.Text = "预制组件数量:0";
|
||
lblSummary2.Text = "预制散件数量:0";
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 查询数据
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
private List<View_HJGL_InstallData> 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<View_HJGL_InstallData> 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 页索引改变事件
|
||
/// <summary>
|
||
/// 页索引改变事件
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
|
||
{
|
||
BindGrid();
|
||
}
|
||
#endregion
|
||
|
||
#region 排序
|
||
/// <summary>
|
||
/// 排序
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
protected void Grid1_Sort(object sender, GridSortEventArgs e)
|
||
{
|
||
BindGrid();
|
||
}
|
||
#endregion
|
||
|
||
#region 分页选择下拉改变事件
|
||
/// <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();
|
||
}
|
||
#endregion
|
||
|
||
#endregion
|
||
|
||
#region 查询事件
|
||
|
||
protected void btnSearch_Click(object sender, EventArgs e)
|
||
{
|
||
BindGrid();
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region 刷新页面
|
||
|
||
/// <summary>
|
||
/// 查询
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
//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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 导出
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
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);
|
||
|
||
}
|
||
}
|
||
} |