CNCEC_SUBQHSE_WUHUAN/SGGL/FineUIPro.Web/JDGL/SGManPower/ManPowerPlanGrid.aspx.cs

1054 lines
38 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
{
// 包含 rowspancolspan 的多表头,方便生成 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
}
}