1054 lines
		
	
	
		
			38 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			1054 lines
		
	
	
		
			38 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								using BLL;
							 | 
						|||
| 
								 | 
							
								using Newtonsoft.Json.Linq;
							 | 
						|||
| 
								 | 
							
								using System;
							 | 
						|||
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						|||
| 
								 | 
							
								using System.Data;
							 | 
						|||
| 
								 | 
							
								using System.Linq;
							 | 
						|||
| 
								 | 
							
								using System.Text;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								namespace FineUIPro.Web.JDGL.SGManPower
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    public partial class ManPowerPlanGrid : PageBase
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        #region Page_Init
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        // 注意:动态创建的代码需要放置于Page_Init(不是Page_Load),这样每次构造页面时都会执行
							 | 
						|||
| 
								 | 
							
								        protected void Page_Init(object sender, EventArgs e)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            InitGrid();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public DataTable GridTable = new DataTable();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private void InitGrid()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            FineUIPro.BoundField bf;
							 | 
						|||
| 
								 | 
							
								            FineUIPro.RenderField rf;
							 | 
						|||
| 
								 | 
							
								            FineUIPro.TextBox txTextBox;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // 设置Grid的编辑属性
							 | 
						|||
| 
								 | 
							
								            Grid1.AllowCellEditing = true;
							 | 
						|||
| 
								 | 
							
								            Grid1.ClicksToEdit = 1;
							 | 
						|||
| 
								 | 
							
								            Grid1.EnableAfterEditEvent = true;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            UnitId = Request.Params["UnitId"];
							 | 
						|||
| 
								 | 
							
								            StartTime = Request.Params["StartTime"];
							 | 
						|||
| 
								 | 
							
								            EndTime = Request.Params["EndTime"];
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            GridTable.Columns.Add("Id");
							 | 
						|||
| 
								 | 
							
								            // 添加主键列用于编辑操作
							 | 
						|||
| 
								 | 
							
								            GridTable.Columns.Add("PrimaryKeyMap"); // 用于存储原始记录的ID
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // 添加隐藏列来存储额外的ID信息
							 | 
						|||
| 
								 | 
							
								            GridTable.Columns.Add("UnitId");
							 | 
						|||
| 
								 | 
							
								            GridTable.Columns.Add("UnitWorkId");
							 | 
						|||
| 
								 | 
							
								            GridTable.Columns.Add("WorkPostId");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            ListItem[] list = new ListItem[6];
							 | 
						|||
| 
								 | 
							
								            list[0] = new ListItem("序号", "SerialNumber");
							 | 
						|||
| 
								 | 
							
								            list[1] = new ListItem("单位", "UnitName");
							 | 
						|||
| 
								 | 
							
								            list[2] = new ListItem("装置", "UnitWorkName");
							 | 
						|||
| 
								 | 
							
								            list[3] = new ListItem("岗位", "WorkPostName");
							 | 
						|||
| 
								 | 
							
								            list[4] = new ListItem("版本", "Version");
							 | 
						|||
| 
								 | 
							
								            list[5] = new ListItem("累计", "TotalCount");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            foreach (var item in list)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                bf = new FineUIPro.BoundField();
							 | 
						|||
| 
								 | 
							
								                bf.ColumnID = item.Value;
							 | 
						|||
| 
								 | 
							
								                bf.DataField = item.Value;
							 | 
						|||
| 
								 | 
							
								                bf.HeaderText = item.Text;
							 | 
						|||
| 
								 | 
							
								                bf.HeaderTextAlign = TextAlign.Center;
							 | 
						|||
| 
								 | 
							
								                bf.TextAlign = TextAlign.Center;
							 | 
						|||
| 
								 | 
							
								                bf.Locked = true;
							 | 
						|||
| 
								 | 
							
								                Grid1.Columns.Add(bf);
							 | 
						|||
| 
								 | 
							
								                GridTable.Columns.Add(item.Value);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // 动态获取日期范围
							 | 
						|||
| 
								 | 
							
								            DateTime startDate = Convert.ToDateTime(StartTime);
							 | 
						|||
| 
								 | 
							
								            DateTime endDate = Convert.ToDateTime(EndTime);
							 | 
						|||
| 
								 | 
							
								            var dateRange = Enumerable.Range(0, (endDate - startDate).Days + 1)
							 | 
						|||
| 
								 | 
							
								                .Select(i => startDate.AddDays(i))
							 | 
						|||
| 
								 | 
							
								                .ToList();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // 按年分组日期
							 | 
						|||
| 
								 | 
							
								            var groupedByYear = dateRange.GroupBy(d => d.Year)
							 | 
						|||
| 
								 | 
							
								                .OrderBy(g => g.Key)
							 | 
						|||
| 
								 | 
							
								                .ToList();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            foreach (var yearGroup in groupedByYear)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                GroupField yearGroupField = new GroupField();
							 | 
						|||
| 
								 | 
							
								                yearGroupField.HeaderText = $"{yearGroup.Key}年";
							 | 
						|||
| 
								 | 
							
								                yearGroupField.TextAlign = TextAlign.Center;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 按月分组
							 | 
						|||
| 
								 | 
							
								                var groupedByMonth = yearGroup.GroupBy(d => d.Month)
							 | 
						|||
| 
								 | 
							
								                    .OrderBy(g => g.Key)
							 | 
						|||
| 
								 | 
							
								                    .ToList();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                foreach (var monthGroup in groupedByMonth)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    GroupField monthGroupField = new GroupField();
							 | 
						|||
| 
								 | 
							
								                    monthGroupField.HeaderText = $"{monthGroup.Key}月";
							 | 
						|||
| 
								 | 
							
								                    monthGroupField.TextAlign = TextAlign.Center;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    // 添加具体日期的列
							 | 
						|||
| 
								 | 
							
								                    foreach (var date in monthGroup.OrderBy(d => d))
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        rf = new FineUIPro.RenderField();
							 | 
						|||
| 
								 | 
							
								                        rf.ColumnID = date.ToString("yyyy-MM-dd");
							 | 
						|||
| 
								 | 
							
								                        rf.DataField = date.ToString("yyyy-MM-dd");
							 | 
						|||
| 
								 | 
							
								                        rf.HeaderText = date.ToString("dd");
							 | 
						|||
| 
								 | 
							
								                        rf.HeaderTextAlign = TextAlign.Center;
							 | 
						|||
| 
								 | 
							
								                        rf.TextAlign = TextAlign.Center;
							 | 
						|||
| 
								 | 
							
								                        txTextBox = new FineUIPro.TextBox();
							 | 
						|||
| 
								 | 
							
								                        txTextBox.ID = "txt" + date.ToString("yyyy-MM-dd");
							 | 
						|||
| 
								 | 
							
								                        rf.Editor.Add(txTextBox);
							 | 
						|||
| 
								 | 
							
								                        monthGroupField.Columns.Add(rf);
							 | 
						|||
| 
								 | 
							
								                        GridTable.Columns.Add(date.ToString("yyyy-MM-dd"));
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    yearGroupField.Columns.Add(monthGroupField);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                Grid1.Columns.Add(yearGroupField);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public string UnitId
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            get => (string)ViewState["UnitId"];
							 | 
						|||
| 
								 | 
							
								            set => ViewState["UnitId"] = value;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public string StartTime
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            get => (string)ViewState["StartTime"];
							 | 
						|||
| 
								 | 
							
								            set => ViewState["StartTime"] = value;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public string EndTime
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            get => (string)ViewState["EndTime"];
							 | 
						|||
| 
								 | 
							
								            set => ViewState["EndTime"] = value;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        protected void Page_Load(object sender, EventArgs e)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if (!IsPostBack)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                this.GetButtonPower();
							 | 
						|||
| 
								 | 
							
								                Funs.DropDownPageSize(this.ddlPageSize);
							 | 
						|||
| 
								 | 
							
								                // 设置Grid的PageSize与下拉框默认值一致
							 | 
						|||
| 
								 | 
							
								                Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
							 | 
						|||
| 
								 | 
							
								                WorkPostService.InitWorkPostDropDownList(this.drpWorkPost, true); //岗位
							 | 
						|||
| 
								 | 
							
								                UnitWorkService.InitUnitWorkDownList(drpUnitWork, this.CurrUser.LoginProjectId, true); //单位工程(装置)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                //版本
							 | 
						|||
| 
								 | 
							
								                this.drpVersion.DataTextField = "Version";
							 | 
						|||
| 
								 | 
							
								                this.drpVersion.DataValueField = "Version";
							 | 
						|||
| 
								 | 
							
								                this.drpVersion.DataSource = BLL.ManPowerPlanService.getGroupVersion(this.CurrUser.LoginProjectId);
							 | 
						|||
| 
								 | 
							
								                this.drpVersion.DataBind();
							 | 
						|||
| 
								 | 
							
								                // 绑定表格
							 | 
						|||
| 
								 | 
							
								                this.BindGrid();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        
							 | 
						|||
| 
								 | 
							
								       
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #region 绑定数据
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 绑定数据
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        private void BindGrid()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            // 清空现有数据
							 | 
						|||
| 
								 | 
							
								            GridTable.Clear();
							 | 
						|||
| 
								 | 
							
								            // 重新添加列定义(保持列结构)
							 | 
						|||
| 
								 | 
							
								            if (GridTable.Columns.Count == 0)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                GridTable.Columns.Add("Id");
							 | 
						|||
| 
								 | 
							
								                GridTable.Columns.Add("UnitId");
							 | 
						|||
| 
								 | 
							
								                GridTable.Columns.Add("UnitWorkId");
							 | 
						|||
| 
								 | 
							
								                GridTable.Columns.Add("WorkPostId");
							 | 
						|||
| 
								 | 
							
								                GridTable.Columns.Add("Version");
							 | 
						|||
| 
								 | 
							
								                GridTable.Columns.Add("PrimaryKeyMap");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 添加动态日期列(这部分已经在InitGrid中定义了)
							 | 
						|||
| 
								 | 
							
								                ListItem[] list = new ListItem[6];
							 | 
						|||
| 
								 | 
							
								                list[0] = new ListItem("序号", "SerialNumber");
							 | 
						|||
| 
								 | 
							
								                list[1] = new ListItem("单位", "UnitName");
							 | 
						|||
| 
								 | 
							
								                list[2] = new ListItem("装置", "UnitWorkName");
							 | 
						|||
| 
								 | 
							
								                list[3] = new ListItem("岗位", "WorkPostName");
							 | 
						|||
| 
								 | 
							
								                list[4] = new ListItem("版本", "Version");
							 | 
						|||
| 
								 | 
							
								                list[5] = new ListItem("累计", "TotalCount");
							 | 
						|||
| 
								 | 
							
								                foreach (var item in list)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    GridTable.Columns.Add(item.Value);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 日期列会在InitGrid中添加,这里不需要重复添加
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            else
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                // 清空行数据但保持列结构
							 | 
						|||
| 
								 | 
							
								                GridTable.Rows.Clear();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // 获取当前项目的人力计划数据
							 | 
						|||
| 
								 | 
							
								            var manpowerPlans = (from x in Funs.DB.JDGL_SGManPower
							 | 
						|||
| 
								 | 
							
								                join y in Funs.DB.Base_WorkPost on x.WorkPostId equals y.WorkPostId
							 | 
						|||
| 
								 | 
							
								                where x.ProjectId == this.CurrUser.LoginProjectId
							 | 
						|||
| 
								 | 
							
								                orderby y.WorkPostCode
							 | 
						|||
| 
								 | 
							
								                select x).ToList();
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            if (UnitId != Const._Null)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                manpowerPlans = manpowerPlans.Where(x => x.UnitId == UnitId).ToList();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (drpWorkPost.SelectedValue != Const._Null)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                manpowerPlans = manpowerPlans.Where(x => x.WorkPostId == drpWorkPost.SelectedValue).ToList();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            if (drpUnitWork.SelectedValue != Const._Null)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                manpowerPlans = manpowerPlans.Where(x => x.UnitWorkId == drpUnitWork.SelectedValue).ToList();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            if (drpVersion.SelectedValue != Const._Null)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                manpowerPlans = manpowerPlans.Where(x => x.Version == drpVersion.SelectedValue).ToList();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            // 获取所有相关单位、装置和岗位信息
							 | 
						|||
| 
								 | 
							
								            var units = Funs.DB.Base_Unit.ToList();
							 | 
						|||
| 
								 | 
							
								            var unitWorks = Funs.DB.WBS_UnitWork.ToList();
							 | 
						|||
| 
								 | 
							
								            var workPosts = Funs.DB.Base_WorkPost.ToList();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // 按单位、装置、岗位分组数据
							 | 
						|||
| 
								 | 
							
								            var groupedData = manpowerPlans
							 | 
						|||
| 
								 | 
							
								                .GroupBy(x => new { x.UnitId, x.UnitWorkId, x.WorkPostId, x.Version })
							 | 
						|||
| 
								 | 
							
								                .ToList();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var count = groupedData.Count();
							 | 
						|||
| 
								 | 
							
								            Grid1.RecordCount = count;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            groupedData = groupedData.Skip(Grid1.PageSize * Grid1.PageIndex).Take(Grid1.PageSize).ToList();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            foreach (var group in groupedData)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                DataRow row = GridTable.NewRow();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 基本信息
							 | 
						|||
| 
								 | 
							
								                var firstItem = group.First();
							 | 
						|||
| 
								 | 
							
								                row["Id"] = Guid.NewGuid().ToString(); // 生成唯一ID用于行标识
							 | 
						|||
| 
								 | 
							
								                row["SerialNumber"] = GridTable.Rows.Count + 1; // 序号
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 单位信息
							 | 
						|||
| 
								 | 
							
								                var unit = units.FirstOrDefault(u => u.UnitId == firstItem.UnitId);
							 | 
						|||
| 
								 | 
							
								                row["UnitName"] = unit != null ? unit.UnitName : "";
							 | 
						|||
| 
								 | 
							
								                row["UnitId"] = firstItem.UnitId ?? (object)DBNull.Value;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 装置信息
							 | 
						|||
| 
								 | 
							
								                var unitWork = unitWorks.FirstOrDefault(uw => uw.UnitWorkId == firstItem.UnitWorkId);
							 | 
						|||
| 
								 | 
							
								                row["UnitWorkName"] = unitWork != null ? unitWork.UnitWorkName : "";
							 | 
						|||
| 
								 | 
							
								                // 当UnitWorkId为null时,保持为null而不是空字符串
							 | 
						|||
| 
								 | 
							
								                row["UnitWorkId"] = firstItem.UnitWorkId ?? (object)DBNull.Value;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 岗位信息
							 | 
						|||
| 
								 | 
							
								                var workPost = workPosts.FirstOrDefault(wp => wp.WorkPostId == firstItem.WorkPostId);
							 | 
						|||
| 
								 | 
							
								                row["WorkPostName"] = workPost != null ? workPost.WorkPostName : "";
							 | 
						|||
| 
								 | 
							
								                row["WorkPostId"] = firstItem.WorkPostId ?? (object)DBNull.Value;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 版本信息
							 | 
						|||
| 
								 | 
							
								                row["Version"] = firstItem.Version ?? "";
							 | 
						|||
| 
								 | 
							
								                // 计算累计数量
							 | 
						|||
| 
								 | 
							
								                int totalCount = 0;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 存储主键信息,用于编辑操作
							 | 
						|||
| 
								 | 
							
								                // 创建一个字典来存储每个日期对应的记录ID
							 | 
						|||
| 
								 | 
							
								                var dateIdMap = new Dictionary<string, string>();
							 | 
						|||
| 
								 | 
							
								                // 日期相关的人力数据
							 | 
						|||
| 
								 | 
							
								                foreach (var item in group)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    if (item.PlanDate.HasValue)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        string dateColumnId = item.PlanDate.Value.ToString("yyyy-MM-dd");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                        // 确保列存在
							 | 
						|||
| 
								 | 
							
								                        if (GridTable.Columns.Contains(dateColumnId))
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            int quantity = item.Quantity ?? 0;
							 | 
						|||
| 
								 | 
							
								                            row[dateColumnId] = quantity;
							 | 
						|||
| 
								 | 
							
								                            dateIdMap[dateColumnId] = item.Id; // 记录每个日期对应的记录ID
							 | 
						|||
| 
								 | 
							
								                            totalCount += quantity; // 累计数量
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 设置累计数量
							 | 
						|||
| 
								 | 
							
								                row["TotalCount"] = totalCount;
							 | 
						|||
| 
								 | 
							
								                // 将ID映射序列化后存储到行中
							 | 
						|||
| 
								 | 
							
								                row["PrimaryKeyMap"] = Newtonsoft.Json.JsonConvert.SerializeObject(dateIdMap);
							 | 
						|||
| 
								 | 
							
								                GridTable.Rows.Add(row);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            Grid1.DataSource = GridTable;
							 | 
						|||
| 
								 | 
							
								            Grid1.DataBind();
							 | 
						|||
| 
								 | 
							
								            // 计算汇总数据
							 | 
						|||
| 
								 | 
							
								            OutputSummaryData();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #region 计算合计
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 计算合计
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        private void OutputSummaryData()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            // 创建用于存储合计值的对象
							 | 
						|||
| 
								 | 
							
								            JObject summary = new JObject();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // 设置固定列的合计值
							 | 
						|||
| 
								 | 
							
								            summary.Add("UnitName", "合计");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // 计算TotalCount列的合计值
							 | 
						|||
| 
								 | 
							
								            int totalCountSum = 0;
							 | 
						|||
| 
								 | 
							
								            foreach (DataRow row in GridTable.Rows)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                if (row["TotalCount"] != DBNull.Value && row["TotalCount"] != null)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    int value;
							 | 
						|||
| 
								 | 
							
								                    if (int.TryParse(row["TotalCount"].ToString(), out value))
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        totalCountSum += value;
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            summary.Add("TotalCount", totalCountSum.ToString());
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // 计算日期列的合计值
							 | 
						|||
| 
								 | 
							
								            foreach (DataColumn column in GridTable.Columns)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                // 检查是否为日期列(格式为 yyyy-MM-dd)
							 | 
						|||
| 
								 | 
							
								                DateTime date;
							 | 
						|||
| 
								 | 
							
								                if (DateTime.TryParseExact(column.ColumnName, "yyyy-MM-dd", null,
							 | 
						|||
| 
								 | 
							
								                        System.Globalization.DateTimeStyles.None, out date))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    // 计算该列的合计值
							 | 
						|||
| 
								 | 
							
								                    int columnSum = 0;
							 | 
						|||
| 
								 | 
							
								                    foreach (DataRow row in GridTable.Rows)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        if (row[column.ColumnName] != DBNull.Value && row[column.ColumnName] != null)
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            int value;
							 | 
						|||
| 
								 | 
							
								                            if (int.TryParse(row[column.ColumnName].ToString(), out value))
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                columnSum += value;
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    summary.Add(column.ColumnName, columnSum.ToString());
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // 设置汇总数据
							 | 
						|||
| 
								 | 
							
								            Grid1.SummaryData = summary;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #region GV 数据操作
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 分页
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="sender"></param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="e"></param>
							 | 
						|||
| 
								 | 
							
								        protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            this.Grid1.PageIndex = e.NewPageIndex;
							 | 
						|||
| 
								 | 
							
								            this.BindGrid();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 排序
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="sender"></param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="e"></param>
							 | 
						|||
| 
								 | 
							
								        protected void Grid1_Sort(object sender, GridSortEventArgs e)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            this.Grid1.SortDirection = e.SortDirection;
							 | 
						|||
| 
								 | 
							
								            this.Grid1.SortField = e.SortField;
							 | 
						|||
| 
								 | 
							
								            this.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);
							 | 
						|||
| 
								 | 
							
								            this.BindGrid();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #region 数据查询
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 查询
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="button"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        protected void btnQuery_OnClick(object sender, EventArgs e)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            BindGrid();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 统计图表
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="button"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        protected void btnGetChart_Click(object sender, EventArgs e)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if (!string.IsNullOrEmpty(UnitId) && !string.IsNullOrEmpty(StartTime) && !string.IsNullOrEmpty(EndTime))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                // 构建基础URL参数
							 | 
						|||
| 
								 | 
							
								                string urlParams = string.Format("UnitId={0}&StartTime={1}&EndTime={2}", UnitId, StartTime, EndTime);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 添加装置参数(如果已选择)
							 | 
						|||
| 
								 | 
							
								                if (drpUnitWork.SelectedValue != Const._Null && !string.IsNullOrEmpty(drpUnitWork.SelectedValue))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    urlParams += "&UnitWorkId=" + drpUnitWork.SelectedValue;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 添加岗位参数(如果已选择)
							 | 
						|||
| 
								 | 
							
								                if (drpWorkPost.SelectedValue != Const._Null && !string.IsNullOrEmpty(drpWorkPost.SelectedValue))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    urlParams += "&WorkPostId=" + drpWorkPost.SelectedValue;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 版本参数
							 | 
						|||
| 
								 | 
							
								                if (drpVersion.SelectedValue != Const._Null && !string.IsNullOrEmpty(drpVersion.SelectedValue))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    urlParams += "&drpVersion=" + drpVersion.SelectedValue;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								              
							 | 
						|||
| 
								 | 
							
								                PageContext.RegisterStartupScript(
							 | 
						|||
| 
								 | 
							
								                    Window2.GetShowReference(string.Format("ManPowerPlanChart.aspx?{0}", urlParams), "人力计划图表"));
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            else
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                ShowNotify("请先选择单位并确保时间范围已设置", MessageBoxIcon.Warning);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #region 获取权限按钮
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 获取按钮权限
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="button"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        private void GetButtonPower()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if (Request.Params["value"] == BLL.Const._Null)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                return;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            var buttonList = BLL.CommonService.GetAllButtonList(this.CurrUser.LoginProjectId, this.CurrUser.UserId,
							 | 
						|||
| 
								 | 
							
								                BLL.Const.SGManPowerMenuId);
							 | 
						|||
| 
								 | 
							
								            if (buttonList.Count() > 0)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                if (buttonList.Contains(BLL.Const.BtnSave))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    this.btnNew.Hidden = false;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #region 关闭弹出窗
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 关闭弹出窗
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="sender"></param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="e"></param>
							 | 
						|||
| 
								 | 
							
								        protected void Window1_Close(object sender, WindowCloseEventArgs e)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            BindGrid();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #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;
							 | 
						|||
| 
								 | 
							
								            this.BindGrid();
							 | 
						|||
| 
								 | 
							
								            // 生成并写入Excel表格
							 | 
						|||
| 
								 | 
							
								            Response.Write(GetGridTableHtml(Grid1));
							 | 
						|||
| 
								 | 
							
								            Response.End();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 导出方法 - 支持多级表头
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="grid"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        private string GetGridTableHtml(Grid grid)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            StringBuilder sb = new StringBuilder();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            MultiHeaderTable mht = new MultiHeaderTable();
							 | 
						|||
| 
								 | 
							
								            mht.ResolveMultiHeaderTable(grid.Columns);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            sb.Append("<meta http-equiv=\"Content-Type\" content=\"application/vnd.ms-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 = 1;
							 | 
						|||
| 
								 | 
							
								                    int colspan = Convert.ToInt32(cell[1]);
							 | 
						|||
| 
								 | 
							
								                    GridColumn column = cell[2] as GridColumn;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    // 对于锁定列(固定列),确保rowspan为3
							 | 
						|||
| 
								 | 
							
								                    if (column.Locked)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        rowspan = 3;
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    sb.AppendFormat("<th{0}{1}{2}>{3}</th>",
							 | 
						|||
| 
								 | 
							
								                        " rowspan=\"" + rowspan + "\"",
							 | 
						|||
| 
								 | 
							
								                        colspan != 1 ? " colspan=\"" + colspan + "\"" : "",
							 | 
						|||
| 
								 | 
							
								                        colspan != 1 ? " style=\"text-align:center;\"" : "",
							 | 
						|||
| 
								 | 
							
								                        column.HeaderText);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                sb.Append("</tr>");
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // 生成数据行
							 | 
						|||
| 
								 | 
							
								            foreach (GridRow row in grid.Rows)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                sb.Append("<tr>");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                foreach (GridColumn column in mht.Columns)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    string html = row.Values[column.ColumnIndex].ToString();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    // 特殊处理固定列
							 | 
						|||
| 
								 | 
							
								                    if (column.ColumnID == "UnitName")
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        html = row.Values[column.ColumnIndex].ToString();
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    else if (column.ColumnID == "UnitWorkName")
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        html = row.Values[column.ColumnIndex].ToString();
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    else if (column.ColumnID == "WorkPostName")
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        html = row.Values[column.ColumnIndex].ToString();
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    else if (column.ColumnID == "Version")
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        html = row.Values[column.ColumnIndex].ToString();
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    else if (column.ColumnID == "TotalCount")
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        html = row.Values[column.ColumnIndex].ToString();
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    // 处理日期列(格式为 yyyy-MM-dd)
							 | 
						|||
| 
								 | 
							
								                    else if (DateTime.TryParseExact(column.ColumnID, "yyyy-MM-dd", null,
							 | 
						|||
| 
								 | 
							
								                                 System.Globalization.DateTimeStyles.None, out _))
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        html = row.Values[column.ColumnIndex].ToString();
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    sb.AppendFormat("<td>{0}</td>", html);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                sb.Append("</tr>");
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // 添加合计行
							 | 
						|||
| 
								 | 
							
								            if (grid.SummaryData != null)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                sb.Append("<tr style=\"font-weight:bold;\">");
							 | 
						|||
| 
								 | 
							
								                
							 | 
						|||
| 
								 | 
							
								                foreach (GridColumn column in mht.Columns)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    string summaryValue = "";
							 | 
						|||
| 
								 | 
							
								                    // 检查SummaryData中是否有该列的合计值
							 | 
						|||
| 
								 | 
							
								                    if (grid.SummaryData.Properties().Any(p => p.Name == column.ColumnID))
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        var property = grid.SummaryData.Properties().FirstOrDefault(p => p.Name == column.ColumnID);
							 | 
						|||
| 
								 | 
							
								                        if (property != null)
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            summaryValue = property.Value.ToString();
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    else if (column.ColumnID == "UnitName")
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        summaryValue = "合计";
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    
							 | 
						|||
| 
								 | 
							
								                    sb.AppendFormat("<td>{0}</td>", summaryValue);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                
							 | 
						|||
| 
								 | 
							
								                sb.Append("</tr>");
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            sb.Append("</table>");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            return sb.ToString();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #region 多表头处理
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 处理多表头的类
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        public class MultiHeaderTable
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            // 包含 rowspan,colspan 的多表头,方便生成 HTML 的 table 标签
							 | 
						|||
| 
								 | 
							
								            public List<List<object[]>> MultiTable = new List<List<object[]>>();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // 最终渲染的列数组
							 | 
						|||
| 
								 | 
							
								            public List<GridColumn> Columns = new List<GridColumn>();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            public void ResolveMultiHeaderTable(GridColumnCollection columns)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                List<object[]> row = new List<object[]>();
							 | 
						|||
| 
								 | 
							
								                foreach (GridColumn column in columns)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    object[] cell = new object[4];
							 | 
						|||
| 
								 | 
							
								                    cell[0] = 1; // rowspan
							 | 
						|||
| 
								 | 
							
								                    cell[1] = 1; // colspan
							 | 
						|||
| 
								 | 
							
								                    cell[2] = column;
							 | 
						|||
| 
								 | 
							
								                    cell[3] = null;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    row.Add(cell);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                ResolveMultiTable(row, 0);
							 | 
						|||
| 
								 | 
							
								                ResolveColumns(row);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            private void ResolveColumns(List<object[]> row)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                foreach (object[] cell in row)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    GroupField groupField = cell[2] as GroupField;
							 | 
						|||
| 
								 | 
							
								                    if (groupField != null && groupField.Columns.Count > 0)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        List<object[]> subrow = new List<object[]>();
							 | 
						|||
| 
								 | 
							
								                        foreach (GridColumn column in groupField.Columns)
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            subrow.Add(new object[]
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                1,
							 | 
						|||
| 
								 | 
							
								                                1,
							 | 
						|||
| 
								 | 
							
								                                column,
							 | 
						|||
| 
								 | 
							
								                                groupField
							 | 
						|||
| 
								 | 
							
								                            });
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                        ResolveColumns(subrow);
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    else
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        Columns.Add(cell[2] as GridColumn);
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            private void ResolveMultiTable(List<object[]> row, int level)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                List<object[]> nextrow = new List<object[]>();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                foreach (object[] cell in row)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    GroupField groupField = cell[2] as GroupField;
							 | 
						|||
| 
								 | 
							
								                    if (groupField != null && groupField.Columns.Count > 0)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        // 如果当前列包含子列,则更改当前列的 colspan,以及增加父列(向上递归)的colspan
							 | 
						|||
| 
								 | 
							
								                        cell[1] = Convert.ToInt32(groupField.Columns.Count);
							 | 
						|||
| 
								 | 
							
								                        PlusColspan(level - 1, cell[3] as GridColumn, groupField.Columns.Count - 1);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                        foreach (GridColumn column in groupField.Columns)
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            nextrow.Add(new object[]
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                1,
							 | 
						|||
| 
								 | 
							
								                                1,
							 | 
						|||
| 
								 | 
							
								                                column,
							 | 
						|||
| 
								 | 
							
								                                groupField
							 | 
						|||
| 
								 | 
							
								                            });
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    else
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        // 如果当前列不包含子列,但不是最末级列(不是叶子节点),则增加rowspan
							 | 
						|||
| 
								 | 
							
								                        if (level > 0)
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            cell[0] = level + 1;
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                MultiTable.Add(row);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                if (nextrow.Count > 0)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    ResolveMultiTable(nextrow, level + 1);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            private void PlusColspan(int level, GridColumn column, int colspan)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                if (level < 0)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    return;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                foreach (List<object[]> rows in MultiTable)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    foreach (object[] cells in rows)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        if (cells[2] == column)
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            cells[1] = Convert.ToInt32(cells[1]) + colspan;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                            PlusColspan(level - 1, cells[3] as GridColumn, colspan);
							 | 
						|||
| 
								 | 
							
								                            break;
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #region 编辑单元格
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        protected void Grid1_AfterEdit(object sender, GridAfterEditEventArgs e)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            Dictionary<int, Dictionary<string, object>> modifiedDict = Grid1.GetModifiedDict();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            foreach (int rowIndex in modifiedDict.Keys)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                // 确保GridTable中有足够的行
							 | 
						|||
| 
								 | 
							
								                if (GridTable.Rows.Count <= rowIndex)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    // 如果GridTable中没有足够的行,重新绑定数据
							 | 
						|||
| 
								 | 
							
								                    BindGrid();
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 再次检查是否有了足够的行
							 | 
						|||
| 
								 | 
							
								                if (GridTable.Rows.Count <= rowIndex)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    ShowNotify("数据状态异常,请刷新页面后重试!");
							 | 
						|||
| 
								 | 
							
								                    return;
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 获取行ID
							 | 
						|||
| 
								 | 
							
								                string rowId = Grid1.DataKeys[rowIndex][0].ToString();
							 | 
						|||
| 
								 | 
							
								                //获取固定列的列数据
							 | 
						|||
| 
								 | 
							
								                var d = GridTable.Rows[rowIndex];
							 | 
						|||
| 
								 | 
							
								                string unitId = null;
							 | 
						|||
| 
								 | 
							
								                var UnitIdValue = GridTable.Rows[rowIndex]["UnitId"];
							 | 
						|||
| 
								 | 
							
								                if (UnitIdValue != null && UnitIdValue != DBNull.Value)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    unitId = UnitIdValue.ToString();
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 处理可能为null的unitWorkId
							 | 
						|||
| 
								 | 
							
								                string unitWorkId = null;
							 | 
						|||
| 
								 | 
							
								                var unitWorkIdValue = GridTable.Rows[rowIndex]["UnitWorkId"];
							 | 
						|||
| 
								 | 
							
								                if (unitWorkIdValue != null && unitWorkIdValue != DBNull.Value)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    unitWorkId = unitWorkIdValue.ToString();
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                string workPostId = null;
							 | 
						|||
| 
								 | 
							
								                var workPostIdValue = GridTable.Rows[rowIndex]["WorkPostId"];
							 | 
						|||
| 
								 | 
							
								                if (workPostIdValue != null && workPostIdValue != DBNull.Value)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    workPostId = workPostIdValue.ToString();
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                string version = GridTable.Rows[rowIndex]["Version"].ToString();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 获取主键映射信息
							 | 
						|||
| 
								 | 
							
								                string primaryKeyMapJson = GridTable.Rows[rowIndex]["PrimaryKeyMap"].ToString();
							 | 
						|||
| 
								 | 
							
								                var dateIdMap =
							 | 
						|||
| 
								 | 
							
								                    Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(primaryKeyMapJson)
							 | 
						|||
| 
								 | 
							
								                    ?? new Dictionary<string, string>();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 遍历该行中被修改的列
							 | 
						|||
| 
								 | 
							
								                foreach (string columnName in modifiedDict[rowIndex].Keys)
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    // 获取修改后的值
							 | 
						|||
| 
								 | 
							
								                    object newValue = modifiedDict[rowIndex][columnName];
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                    // 根据列名判断是否为日期列
							 | 
						|||
| 
								 | 
							
								                    DateTime planDate;
							 | 
						|||
| 
								 | 
							
								                    if (DateTime.TryParse(columnName, out planDate))
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        // 检查是否应该删除记录(值为0或空字符串)
							 | 
						|||
| 
								 | 
							
								                        bool shouldDelete = (newValue == null) ||
							 | 
						|||
| 
								 | 
							
								                                            (newValue.ToString() == "") ||
							 | 
						|||
| 
								 | 
							
								                                            (newValue.ToString() == "0");
							 | 
						|||
| 
								 | 
							
								                        if (shouldDelete)
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            // 删除记录
							 | 
						|||
| 
								 | 
							
								                            string recordId = null;
							 | 
						|||
| 
								 | 
							
								                            if (dateIdMap.ContainsKey(columnName))
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                recordId = dateIdMap[columnName];
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                            DeleteManPowerPlan(recordId, unitId, unitWorkId, workPostId, version, planDate);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                            // 从映射中移除该日期
							 | 
						|||
| 
								 | 
							
								                            if (dateIdMap.ContainsKey(columnName))
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                dateIdMap.Remove(columnName);
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                        else
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            // 这是一个日期列,需要更新对应的人力计划数据
							 | 
						|||
| 
								 | 
							
								                            string recordId = null;
							 | 
						|||
| 
								 | 
							
								                            // 尝试从映射中获取记录ID
							 | 
						|||
| 
								 | 
							
								                            if (dateIdMap.ContainsKey(columnName))
							 | 
						|||
| 
								 | 
							
								                            {
							 | 
						|||
| 
								 | 
							
								                                recordId = dateIdMap[columnName];
							 | 
						|||
| 
								 | 
							
								                            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                            // 更新或创建人力计划数据
							 | 
						|||
| 
								 | 
							
								                            UpdateManPowerPlan(recordId, unitId, unitWorkId, workPostId, version, planDate, newValue);
							 | 
						|||
| 
								 | 
							
								                        }
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 更新行中的主键映射信息
							 | 
						|||
| 
								 | 
							
								                GridTable.Rows[rowIndex]["PrimaryKeyMap"] = Newtonsoft.Json.JsonConvert.SerializeObject(dateIdMap);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            BindGrid();
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            ShowNotify("数据保存成功!(表格数据已重新绑定)");
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 更新人力计划数据
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="recordId">记录ID(如果存在)</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="unitId">单位ID</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="unitWorkId">装置ID</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="workPostId">岗位ID</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="version">版本</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="planDate">计划日期</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="quantity">数量</param>
							 | 
						|||
| 
								 | 
							
								        private void UpdateManPowerPlan(string recordId, string unitId, string unitWorkId, string workPostId,
							 | 
						|||
| 
								 | 
							
								            string version, DateTime planDate, object quantity)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            Model.JDGL_SGManPower manpowerPlan = null;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // 如果记录ID存在,则尝试查找现有记录
							 | 
						|||
| 
								 | 
							
								            if (!string.IsNullOrEmpty(recordId))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                manpowerPlan = Funs.DB.JDGL_SGManPower.FirstOrDefault(x => x.Id == recordId);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // 如果没有找到现有记录,则根据条件查找或创建新记录
							 | 
						|||
| 
								 | 
							
								            if (manpowerPlan == null)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                // 尝试查找匹配条件的现有记录
							 | 
						|||
| 
								 | 
							
								                manpowerPlan = Funs.DB.JDGL_SGManPower.FirstOrDefault(x =>
							 | 
						|||
| 
								 | 
							
								                    x.ProjectId == this.CurrUser.LoginProjectId &&
							 | 
						|||
| 
								 | 
							
								                    x.UnitId == unitId &&
							 | 
						|||
| 
								 | 
							
								                    x.UnitWorkId == unitWorkId &&
							 | 
						|||
| 
								 | 
							
								                    x.WorkPostId == workPostId &&
							 | 
						|||
| 
								 | 
							
								                    x.Version == version &&
							 | 
						|||
| 
								 | 
							
								                    x.PlanDate == planDate);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // 如果仍然没有找到记录,则创建新记录
							 | 
						|||
| 
								 | 
							
								            if (manpowerPlan == null)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                manpowerPlan = new Model.JDGL_SGManPower
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    Id = SQLHelper.GetNewID(typeof(Model.JDGL_SGManPower)),
							 | 
						|||
| 
								 | 
							
								                    ProjectId = this.CurrUser.LoginProjectId,
							 | 
						|||
| 
								 | 
							
								                    UnitId = unitId,
							 | 
						|||
| 
								 | 
							
								                    UnitWorkId = unitWorkId,
							 | 
						|||
| 
								 | 
							
								                    WorkPostId = workPostId,
							 | 
						|||
| 
								 | 
							
								                    Version = version,
							 | 
						|||
| 
								 | 
							
								                    PlanDate = planDate,
							 | 
						|||
| 
								 | 
							
								                    CompileMan = this.CurrUser.UserId,
							 | 
						|||
| 
								 | 
							
								                    CompileTime = DateTime.Now
							 | 
						|||
| 
								 | 
							
								                };
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 设置数量
							 | 
						|||
| 
								 | 
							
								                if (quantity != null && !string.IsNullOrEmpty(quantity.ToString()))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    int qty;
							 | 
						|||
| 
								 | 
							
								                    if (int.TryParse(quantity.ToString(), out qty))
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        manpowerPlan.Quantity = qty;
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                BLL.ManPowerPlanService.AddSGManPower(manpowerPlan);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            else
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                // 如果有值就进行编辑修改操作
							 | 
						|||
| 
								 | 
							
								                if (quantity != null && !string.IsNullOrEmpty(quantity.ToString()))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    int qty;
							 | 
						|||
| 
								 | 
							
								                    if (int.TryParse(quantity.ToString(), out qty))
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        manpowerPlan.Quantity = qty;
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                    else
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        manpowerPlan.Quantity = null; // 清空数量
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                else
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    manpowerPlan.Quantity = null; // 清空数量
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            
							 | 
						|||
| 
								 | 
							
								            Funs.DB.SubmitChanges();
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 删除人力计划数据
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="recordId">记录ID(如果存在)</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="unitId">单位ID</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="unitWorkId">装置ID</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="workPostId">岗位ID</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="version">版本</param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="planDate">计划日期</param>
							 | 
						|||
| 
								 | 
							
								        private void DeleteManPowerPlan(string recordId, string unitId, string unitWorkId, string workPostId,
							 | 
						|||
| 
								 | 
							
								            string version, DateTime planDate)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            Model.JDGL_SGManPower manpowerPlan = null;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // 如果记录ID存在,则尝试查找现有记录
							 | 
						|||
| 
								 | 
							
								            if (!string.IsNullOrEmpty(recordId))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                manpowerPlan = Funs.DB.JDGL_SGManPower.FirstOrDefault(x => x.Id == recordId);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            else
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                // 根据条件查找记录
							 | 
						|||
| 
								 | 
							
								                var query = Funs.DB.JDGL_SGManPower.Where(x =>
							 | 
						|||
| 
								 | 
							
								                    x.ProjectId == this.CurrUser.LoginProjectId &&
							 | 
						|||
| 
								 | 
							
								                    x.UnitId == unitId &&
							 | 
						|||
| 
								 | 
							
								                    x.WorkPostId == workPostId &&
							 | 
						|||
| 
								 | 
							
								                    x.Version == version &&
							 | 
						|||
| 
								 | 
							
								                    x.PlanDate == planDate);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                // 根据unitWorkId是否为null进行不同的查询
							 | 
						|||
| 
								 | 
							
								                if (string.IsNullOrEmpty(unitWorkId))
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    query = query.Where(x => x.UnitWorkId == null);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								                else
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    query = query.Where(x => x.UnitWorkId == unitWorkId);
							 | 
						|||
| 
								 | 
							
								                }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								                manpowerPlan = query.FirstOrDefault();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            // 如果找到了记录,则删除它
							 | 
						|||
| 
								 | 
							
								            if (manpowerPlan != null)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                Funs.DB.JDGL_SGManPower.DeleteOnSubmit(manpowerPlan);
							 | 
						|||
| 
								 | 
							
								                Funs.DB.SubmitChanges();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #region 新增
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 新增
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="sender"></param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="e"></param>
							 | 
						|||
| 
								 | 
							
								        protected void btnNew_Click(object sender, EventArgs e)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("ManPowerPlanEdit.aspx"),
							 | 
						|||
| 
								 | 
							
								                "新增 - 施工人力计划"));
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #region 导入
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 导入按钮
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="sender"></param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="e"></param>
							 | 
						|||
| 
								 | 
							
								        protected void btnImport_Click(object sender, EventArgs e)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            PageContext.RegisterStartupScript(Window1.GetShowReference(
							 | 
						|||
| 
								 | 
							
								                String.Format("ManPowerPlanIn.aspx?ProjectId={0}", this.CurrUser.LoginProjectId), "导入 - 施工人力计划"));
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |