using BLL; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; using System.Web.UI.WebControls; namespace FineUIPro.Web.JDGL.WBSWeights { public partial class WeightsAudit : PageBase { #region 定义项 private static List noApproveInstallationIds = new List(); private static List noApproveCnProfessionIds = new List(); private static List noApproveUnitProjectIds = new List(); private static List noApproveWbsSetIds = new List(); #endregion #region 页面加载 /// /// 页面加载 /// /// /// protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { List parentUnitWorkIds = new List(); List wbsSetIds = new List(); noApproveInstallationIds.Clear(); noApproveCnProfessionIds.Clear(); noApproveUnitProjectIds.Clear(); noApproveWbsSetIds.Clear(); if (this.CurrUser.Account == BLL.Const.sysglyId) { this.btnUpdateInstallationWeights.Hidden = false; } GetButtonPower(); InitTreeMenu(); this.Grid1.Hidden = true; this.Grid2.Hidden = true; } else { if (GetRequestEventArgument() == "UPDATE_SUMMARY") { // 页面要求重新计算合计行的值 OutputSummaryData(); } } } #endregion #region 合计权重 /// /// 合计权重 /// private void OutputSummaryData() { Grid1.CommitChanges(); decimal lastWeights = 0, lastWeightsMoneys = 0; decimal totalWeights = 0, totalWeightsMoneys = 0; decimal firstWeightsMoneys = 0; decimal changedWeights = 0, changeWeightsMoneys = 0; decimal totalOtherWeights = 0, totalOtherWeightsMoneys = 0; int i = 0, j = 0; JObject firstValue = Grid1.GetMergedData()[0].Value("values"); firstWeightsMoneys = firstValue.Value("WeightsMoney"); foreach (JObject mergedRow in Grid1.GetMergedData()) { if (j > 0) { JObject values = mergedRow.Value("values"); string id = values.Value("Id"); string type = values.Value("Type"); if (values["Weights"].ToString() != "" && values["WeightsMoney"].ToString() != "") { totalWeights += values.Value("Weights"); totalWeightsMoneys += values.Value("WeightsMoney"); if (values["WeightsChanged"].ToString() != "") { changedWeights = values.Value("WeightsChanged"); } if (values["WeightsMoneyChange"].ToString() != "") { changeWeightsMoneys = values.Value("WeightsMoneyChange"); } // 获得除变化的所有其它项的权重的和 if (values.Value("Weights") == changedWeights && values.Value("WeightsMoney") == changeWeightsMoneys) { totalOtherWeights += values.Value("Weights"); totalOtherWeightsMoneys += values.Value("WeightsMoney"); } } } j++; } foreach (JObject mergedRow in Grid1.GetMergedData()) { if (i > 0) { decimal weights = 0, weightsMoneys = 0; changeWeightsMoneys = 0; changedWeights = 0; JObject values = mergedRow.Value("values"); string id = values.Value("Id"); string type = values.Value("Type"); if (values["Weights"].ToString() != "") { weights = values.Value("Weights"); } if (values["WeightsMoney"].ToString() != "") { weightsMoneys = values.Value("WeightsMoney"); } if (values["WeightsMoneyChange"].ToString() != "") { changeWeightsMoneys = values.Value("WeightsMoneyChange"); } if (values["WeightsChanged"].ToString() != "") { changedWeights = values.Value("WeightsChanged"); } // 权重比率发生变化 if (values["Weights"].ToString() != "") { if (changedWeights != values.Value("Weights")) { if (totalWeights == 100) { weightsMoneys = firstWeightsMoneys - totalOtherWeightsMoneys; } else { weightsMoneys = decimal.Round((values.Value("Weights") * firstWeightsMoneys / 100), 2); } lastWeights = values.Value("Weights"); lastWeightsMoneys = weightsMoneys; } } // 权重发生变化 if (values["WeightsMoney"].ToString() != "") { if (changeWeightsMoneys != values.Value("WeightsMoney")) { if (totalWeightsMoneys == firstWeightsMoneys) { weights = 100 - totalOtherWeights; } else { weights = decimal.Round(((values.Value("WeightsMoney") / firstWeightsMoneys) * 100), 2); } lastWeights = weights; lastWeightsMoneys = values.Value("WeightsMoney"); } } // 当权重发生变化时,保存到数据库中 if (changedWeights != weights || changedWeights != weightsMoneys) { if (type == "cnProfession") { Model.WBS_CnProfession wbs = BLL.CnProfessionService.GetCnProfessionByCnProfessionId(id); if (wbs != null) { wbs.Weights = weights; wbs.WeightsMoney = weightsMoneys; } } if (type == "unitProject" || type == "childUnitProject") { Model.Wbs_UnitProject unit = BLL.UnitProjectService.GetUnitProjectByUnitProjectId(id); if (unit != null) { unit.Weights = weights; unit.WeightsMoney = weightsMoneys; } } if (type == "wbsSet") { Model.Wbs_WbsSet wbs = BLL.WbsSetService.GetWbsSetByWbsSetId(id); if (wbs != null) { wbs.Weights = weights; wbs.WeightsMoney = weightsMoneys; } } Funs.DB.SubmitChanges(); } this.Grid1.Rows[i].Values[7] = weights; this.Grid1.Rows[i].Values[8] = weightsMoneys; } i++; } BindGrid(); if (this.Grid1.Rows.Count > 1) { JObject summary = new JObject(); summary.Add("ChildName", "合计:"); summary.Add("Weights", totalOtherWeights + lastWeights); summary.Add("WeightsMoney", totalOtherWeightsMoneys + lastWeightsMoneys); Grid1.SummaryData = summary; } else { Grid1.SummaryData = null; } } #endregion #region 修改关闭窗口 /// /// 关闭窗口 /// /// /// protected void Window1_Close(object sender, WindowCloseEventArgs e) { ShowNotify("设置成功!", MessageBoxIcon.Success); } #endregion #region 加载树 /// /// 加载树 /// private void InitTreeMenu() { this.trWBS.Nodes.Clear(); this.trWBS.ShowBorder = false; this.trWBS.ShowHeader = false; this.trWBS.EnableIcons = true; this.trWBS.AutoScroll = true; this.trWBS.EnableSingleClickExpand = true; var installations = from x in Funs.DB.Project_Installation where x.ProjectId == this.CurrUser.LoginProjectId && x.SuperInstallationId == "0" orderby x.InstallationCode select x; foreach (var installation in installations) { TreeNode rootNode = new TreeNode(); if (noApproveInstallationIds.Contains(installation.InstallationId)) { rootNode.Text = "" + installation.InstallationName + ""; } else { rootNode.Text = installation.InstallationName; } rootNode.NodeID = installation.InstallationId; rootNode.CommandName = "installation"; rootNode.CommandArgument = installation.Weights == null ? null : installation.Weights.ToString(); rootNode.ToolTip = installation.InstallationCode; rootNode.EnableExpandEvent = true; rootNode.EnableClickEvent = true; this.trWBS.Nodes.Add(rootNode); TreeNode emptyNode = new TreeNode(); emptyNode.Text = ""; emptyNode.NodeID = ""; rootNode.Nodes.Add(emptyNode); } } #endregion #region 展开树 /// /// 展开树 /// /// /// protected void trWBS_NodeExpand(object sender, TreeNodeEventArgs e) { e.Node.Nodes.Clear(); if (e.Node.CommandName == "installation") //展开装置/单元节点 { var installations = from x in Funs.DB.Project_Installation where x.SuperInstallationId == e.Node.NodeID orderby x.InstallationCode select x; if (installations.Count() > 0) { foreach (var installation in installations) { TreeNode newNode = new TreeNode(); if (noApproveInstallationIds.Contains(installation.InstallationId)) { newNode.Text = "" + installation.InstallationName + ""; } else { newNode.Text = installation.InstallationName; } newNode.NodeID = installation.InstallationId; newNode.CommandName = "installation"; newNode.CommandArgument = installation.Weights == null ? null : installation.Weights.ToString(); newNode.ToolTip = installation.InstallationCode; newNode.EnableExpandEvent = true; newNode.EnableClickEvent = true; e.Node.Nodes.Add(newNode); TreeNode emptyNode = new TreeNode(); emptyNode.Text = ""; emptyNode.NodeID = ""; newNode.Nodes.Add(emptyNode); } } else { var cnProfessions = from x in Funs.DB.WBS_CnProfession where x.InstallationId == e.Node.NodeID orderby x.OldId select x; if (cnProfessions.Count() > 0) //普通装置主项 { foreach (var cnProfession in cnProfessions) { var unitProjects = from x in Funs.DB.Wbs_UnitProject where x.CnProfessionId == cnProfession.CnProfessionId && x.IsApprove == true select x; if (unitProjects.Count() > 0) { TreeNode newNode = new TreeNode(); if (noApproveCnProfessionIds.Contains(cnProfession.CnProfessionId)) { newNode.Text = "" + cnProfession.CnProfessionName + ""; } else { newNode.Text = cnProfession.CnProfessionName; } newNode.NodeID = cnProfession.CnProfessionId; newNode.CommandName = "cnProfession"; newNode.CommandArgument = cnProfession.Weights == null ? null : cnProfession.Weights.ToString(); newNode.ToolTip = cnProfession.CnProfessionCode; newNode.EnableExpandEvent = true; newNode.EnableClickEvent = true; e.Node.Nodes.Add(newNode); TreeNode emptyNode = new TreeNode(); emptyNode.Text = ""; emptyNode.NodeID = ""; newNode.Nodes.Add(emptyNode); } } } else //总图 { var unitProjects = from x in Funs.DB.Wbs_UnitProject where x.InstallationId == e.Node.NodeID && x.SuperUnitProjectId == null orderby x.SortIndex, x.UnitProjectCode select x; foreach (var unitProject in unitProjects) { var wbsSets = from x in Funs.DB.Wbs_WbsSet where x.UnitProjectId == unitProject.UnitProjectId && x.IsApprove == true select x; if (wbsSets.Count() > 0) { TreeNode newNode = new TreeNode(); if (noApproveUnitProjectIds.Contains(unitProject.UnitProjectId)) { newNode.Text = "" + unitProject.UnitProjectName + ""; } else { newNode.Text = unitProject.UnitProjectName; } newNode.NodeID = unitProject.UnitProjectId; newNode.CommandName = "unitProject"; newNode.CommandArgument = unitProject.Weights == null ? null : unitProject.Weights.ToString(); newNode.ToolTip = unitProject.UnitProjectCode; newNode.EnableExpandEvent = true; newNode.EnableClickEvent = true; e.Node.Nodes.Add(newNode); TreeNode emptyNode = new TreeNode(); emptyNode.Text = ""; emptyNode.NodeID = ""; newNode.Nodes.Add(emptyNode); } } } } } else if (e.Node.CommandName == "cnProfession") //展开专业节点 { var unitProjects = from x in Funs.DB.Wbs_UnitProject where x.CnProfessionId == e.Node.NodeID && x.SuperUnitProjectId == null && x.IsApprove == true orderby x.SortIndex, x.UnitProjectCode select x; foreach (var unitProject in unitProjects) { TreeNode newNode = new TreeNode(); if (noApproveUnitProjectIds.Contains(unitProject.UnitProjectId)) { newNode.Text = "" + unitProject.UnitProjectName + ""; } else { newNode.Text = unitProject.UnitProjectName; } newNode.NodeID = unitProject.UnitProjectId; newNode.CommandName = "unitProject"; newNode.CommandArgument = unitProject.Weights == null ? null : unitProject.Weights.ToString(); newNode.ToolTip = unitProject.UnitProjectCode; newNode.EnableExpandEvent = true; newNode.EnableClickEvent = true; e.Node.Nodes.Add(newNode); TreeNode emptyNode = new TreeNode(); emptyNode.Text = ""; emptyNode.NodeID = ""; newNode.Nodes.Add(emptyNode); } } else if (e.Node.CommandName == "unitProject") //展开单位工程节点 { var childUnitProjects = from x in Funs.DB.Wbs_UnitProject where x.SuperUnitProjectId == e.Node.NodeID && x.IsApprove == true orderby x.SortIndex, x.UnitProjectCode select x; if (childUnitProjects.Count() > 0) //存在子单位工程 { foreach (var childUnitProject in childUnitProjects) { TreeNode newNode = new TreeNode(); if (noApproveUnitProjectIds.Contains(childUnitProject.UnitProjectId)) { newNode.Text = "" + childUnitProject.UnitProjectName + ""; } else { newNode.Text = childUnitProject.UnitProjectName; } newNode.NodeID = childUnitProject.UnitProjectId; newNode.CommandName = "childUnitProject"; newNode.CommandArgument = childUnitProject.Weights == null ? null : childUnitProject.Weights.ToString(); newNode.ToolTip = childUnitProject.UnitProjectCode; newNode.EnableExpandEvent = true; newNode.EnableClickEvent = true; e.Node.Nodes.Add(newNode); TreeNode emptyNode = new TreeNode(); emptyNode.Text = ""; emptyNode.NodeID = ""; newNode.Nodes.Add(emptyNode); } } else //不存在子单位工程,加载分部工程 { var wbsSet1s = from x in Funs.DB.Wbs_WbsSet where x.Flag == 1 && x.UnitProjectId == e.Node.NodeID && x.IsApprove == true && x.NoShow == null orderby x.SortIndex, x.WbsSetCode select x; if (wbsSet1s.Count() > 0) { foreach (var wbsSet1 in wbsSet1s) { TreeNode newNode = new TreeNode(); if (noApproveWbsSetIds.Contains(wbsSet1.WbsSetId)) { newNode.Text = "" + wbsSet1.WbsSetName + ""; } else { newNode.Text = wbsSet1.WbsSetName; } newNode.NodeID = wbsSet1.WbsSetId; newNode.CommandName = "wbsSet"; newNode.CommandArgument = wbsSet1.Weights == null ? null : wbsSet1.Weights.ToString(); newNode.ToolTip = wbsSet1.WbsSetCode; newNode.EnableExpandEvent = true; newNode.EnableClickEvent = true; e.Node.Nodes.Add(newNode); var childWbsSets2 = BLL.WbsSetService.GetApproveWbsSetsBySuperWbsSetId(newNode.NodeID); if (childWbsSets2.Count() > 0) { TreeNode emptyNode = new TreeNode(); emptyNode.Text = ""; emptyNode.NodeID = ""; newNode.Nodes.Add(emptyNode); } } } else //单位工程下直接是分项内容,如质量行为 { var wbsSet3s = from x in Funs.DB.Wbs_WbsSet where x.Flag == 3 && x.UnitProjectId == e.Node.NodeID && x.IsApprove == true && x.NoShow == null orderby x.SortIndex, x.WbsSetCode select x; if (wbsSet3s.Count() > 0) { foreach (var wbsSet3 in wbsSet3s) { TreeNode newNode = new TreeNode(); if (noApproveWbsSetIds.Contains(wbsSet3.WbsSetId)) { newNode.Text = "" + wbsSet3.WbsSetName + ""; } else { newNode.Text = wbsSet3.WbsSetName; } newNode.NodeID = wbsSet3.WbsSetId; newNode.CommandName = "wbsSet"; newNode.CommandArgument = wbsSet3.Weights == null ? null : wbsSet3.Weights.ToString(); newNode.ToolTip = wbsSet3.WbsSetCode; newNode.EnableExpandEvent = true; newNode.EnableClickEvent = true; e.Node.Nodes.Add(newNode); var childWbsSets2 = BLL.WbsSetService.GetApproveWbsSetsBySuperWbsSetId(newNode.NodeID); if (childWbsSets2.Count() > 0) { TreeNode emptyNode = new TreeNode(); emptyNode.Text = ""; emptyNode.NodeID = ""; newNode.Nodes.Add(emptyNode); } } } } } } else if (e.Node.CommandName == "childUnitProject") //展开子单位工程节点 { var wbsSet1s = from x in Funs.DB.Wbs_WbsSet where x.Flag == 1 && x.UnitProjectId == e.Node.NodeID && x.IsApprove == true && x.NoShow == null orderby x.SortIndex, x.WbsSetCode select x; foreach (var wbsSet1 in wbsSet1s) { TreeNode newNode = new TreeNode(); if (noApproveWbsSetIds.Contains(wbsSet1.WbsSetId)) { newNode.Text = "" + wbsSet1.WbsSetName + ""; } else { newNode.Text = wbsSet1.WbsSetName; } newNode.NodeID = wbsSet1.WbsSetId; newNode.CommandName = "wbsSet"; newNode.CommandArgument = wbsSet1.Weights == null ? null : wbsSet1.Weights.ToString(); newNode.ToolTip = wbsSet1.WbsSetCode; newNode.EnableExpandEvent = true; newNode.EnableClickEvent = true; e.Node.Nodes.Add(newNode); var childWbsSets2 = BLL.WbsSetService.GetApproveWbsSetsBySuperWbsSetId(newNode.NodeID); if (childWbsSets2.Count() > 0) { TreeNode emptyNode = new TreeNode(); emptyNode.Text = ""; emptyNode.NodeID = ""; newNode.Nodes.Add(emptyNode); } } } else if (e.Node.CommandName == "wbsSet") //展开分部/子分部/分项/子分项工程节点 { var childWbsSets = BLL.WbsSetService.GetApproveWbsSetsBySuperWbsSetId(e.Node.NodeID); foreach (var wbsSet in childWbsSets) { TreeNode newNode = new TreeNode(); if (noApproveWbsSetIds.Contains(wbsSet.WbsSetId)) { newNode.Text = "" + wbsSet.WbsSetName + ""; } else { newNode.Text = wbsSet.WbsSetName; } newNode.NodeID = wbsSet.WbsSetId; newNode.CommandName = "wbsSet"; newNode.CommandArgument = wbsSet.Weights == null ? null : wbsSet.Weights.ToString(); newNode.ToolTip = wbsSet.WbsSetCode; newNode.EnableExpandEvent = true; newNode.EnableClickEvent = true; e.Node.Nodes.Add(newNode); var childWbsSets2 = BLL.WbsSetService.GetApproveWbsSetsBySuperWbsSetId(newNode.NodeID); if (childWbsSets2.Count() > 0) { TreeNode emptyNode = new TreeNode(); emptyNode.Text = ""; emptyNode.NodeID = ""; newNode.Nodes.Add(emptyNode); } } } } #endregion #region Tree点击事件 /// /// Tree点击事件 /// /// /// protected void trWBS_NodeCommand(object sender, TreeCommandEventArgs e) { this.Grid1.Hidden = true; this.Grid2.Hidden = true; this.btnSave.Hidden = false; this.Grid2.Columns[7].Hidden = true; this.btnUpdateInstallationWeights.Hidden = true; if (this.trWBS.SelectedNode.CommandName != "installation" && this.trWBS.SelectedNode.CommandName != "cnProfession" && this.trWBS.SelectedNode.CommandName != "unitProject") //非装置、专业、单位工程节点可以设置 { if (this.trWBS.SelectedNode.CommandName == "childUnitProject") { var wbsSet1s = from x in Funs.DB.Wbs_WbsSet where x.UnitProjectId == this.trWBS.SelectedNodeID && x.Flag == 1 select x; bool isShow = true; //子单位工程下只有一级子级时可以设置、分配权重 foreach (var wbsSet1 in wbsSet1s) { var wbsSet2s = from x in Funs.DB.Wbs_WbsSet where x.SuperWbsSetId == wbsSet1.WbsSetId select x; if (wbsSet2s.Count() > 0) { isShow = false; break; } } if (isShow) { this.Grid2.Hidden = false; this.Grid1.Hidden = false; BindGrid2(); BindGrid(); OutputSummaryData(); } else { Model.Wbs_UnitProject unitProject = BLL.UnitProjectService.GetUnitProjectByUnitProjectId(this.trWBS.SelectedNodeID); if (unitProject.EngineerQuantity != null) //设置过工程量 { this.Grid2.Hidden = false; BindGrid2(); this.Grid2.Columns[7].Hidden = false; } } } else if (this.trWBS.SelectedNode.CommandName == "wbsSet") { var wbsSet1s = from x in Funs.DB.Wbs_WbsSet where x.SuperWbsSetId == this.trWBS.SelectedNodeID select x; bool isShow = true; //分部分项下只有一级子级时可以设置、分配权重 if (wbsSet1s.Count() > 0) { foreach (var wbsSet1 in wbsSet1s) { var wbsSet2s = from x in Funs.DB.Wbs_WbsSet where x.SuperWbsSetId == wbsSet1.WbsSetId && x.IsApprove == true select x; if (wbsSet2s.Count() > 0) { isShow = false; break; } } if (isShow) { this.Grid2.Hidden = false; this.Grid1.Hidden = false; BindGrid2(); BindGrid(); OutputSummaryData(); } else { Model.Wbs_WbsSet wbsSet = BLL.WbsSetService.GetWbsSetByWbsSetId(this.trWBS.SelectedNodeID); if (wbsSet.EngineerQuantity != null) //设置过工程量 { this.Grid2.Hidden = false; BindGrid2(); this.Grid2.Columns[7].Hidden = false; } } } } } else if (this.trWBS.SelectedNode.CommandName == "installation") { string installationId = this.trWBS.SelectedNodeID; Model.Project_Installation installation = BLL.Project_InstallationService.GetInstallationByInstallationId(installationId); if (installation.SuperInstallationId == "0") { this.Grid1.Hidden = false; this.btnUpdateInstallationWeights.Hidden = false; this.btnSave.Hidden = true; } } } #endregion #region 没有审核的项 /// /// 没有审核的项 /// private string noAuditText = string.Empty; /// /// 判断上级是不是还有没审核权重项 /// /// private void IsParentNoAudit(TreeNode tn) { if (tn.ParentNode != null) { if (tn.ParentNode.CommandName == "wbsSet") { Model.Wbs_WbsSet wbsSet = BLL.WbsSetService.GetWbsSetByWbsSetId(tn.ParentNode.NodeID); if (wbsSet != null && (wbsSet.IsWeightsApprove == null || wbsSet.IsWeightsApprove == false)) { noAuditText = noAuditText + wbsSet.WbsSetName + ","; } } if (tn.ParentNode.CommandName == "unitProject" || tn.ParentNode.CommandName == "childUnitProject") { Model.Wbs_UnitProject unitProject = BLL.UnitProjectService.GetUnitProjectByUnitProjectId(tn.ParentNode.NodeID); if (unitProject != null && (unitProject.IsWeightsApprove == null || unitProject.IsWeightsApprove == false)) { noAuditText = noAuditText + unitProject.UnitProjectName + ","; } } if (tn.ParentNode.CommandName == "cnProfession") { Model.WBS_CnProfession cnProfession = BLL.CnProfessionService.GetCnProfessionByCnProfessionId(tn.ParentNode.NodeID); if (cnProfession != null && (cnProfession.IsWeightsApprove == null || cnProfession.IsWeightsApprove == false)) { noAuditText = noAuditText + cnProfession.CnProfessionName + ","; } } IsParentNoAudit(tn.ParentNode); } } /// /// 选择节点没有审核项 /// /// private void IsSelectNodeNoAudit(TreeNode tn) { if (tn != null) { if (tn.CommandName == "wbsSet") { Model.Wbs_WbsSet wbsSet = BLL.WbsSetService.GetWbsSetByWbsSetId(tn.NodeID); if (wbsSet != null && (wbsSet.IsWeightsApprove == null || wbsSet.IsWeightsApprove == false)) { noAuditText = noAuditText + wbsSet.WbsSetName + ","; } } if (tn.CommandName == "unitProject" || tn.CommandName == "childUnitProject") { Model.Wbs_UnitProject unitProject = BLL.UnitProjectService.GetUnitProjectByUnitProjectId(tn.NodeID); if (unitProject != null && (unitProject.IsWeightsApprove == null || unitProject.IsWeightsApprove == false)) { noAuditText = noAuditText + unitProject.UnitProjectName + ","; } } if (tn.CommandName == "cnProfession") { Model.WBS_CnProfession cnProfession = BLL.CnProfessionService.GetCnProfessionByCnProfessionId(tn.NodeID); if (cnProfession != null && (cnProfession.IsWeightsApprove == null || cnProfession.IsWeightsApprove == false)) { noAuditText = noAuditText + cnProfession.CnProfessionName + ","; } } } } #endregion #region 保存方法 /// /// 保存方法 /// /// private void SaveData() { decimal totalMoney = 0, percents = 0, moneys = 0; JObject firstValue = Grid1.GetMergedData()[0].Value("values"); totalMoney = firstValue.Value("WeightsMoney"); if (this.Grid1.Rows.Count > 1) { int j = 0; bool isLessThanZero = false; foreach (JObject mergedRow in Grid1.GetMergedData()) { if (j > 0) { JObject values = mergedRow.Value("values"); if (values["Weights"].ToString() != "") { percents += values.Value("Weights"); if (values.Value("Weights") < 0) { isLessThanZero = true; break; } } if (values["WeightsMoney"].ToString() != "") { moneys += values.Value("WeightsMoney"); if (values.Value("WeightsMoney") < 0) { isLessThanZero = true; break; } } } j++; } if (isLessThanZero == true) { ShowNotify("权重或权重比率不能为负值!", MessageBoxIcon.Success); return; } if (percents != 100) { Alert.ShowInTop("占比值不是100%!", MessageBoxIcon.Warning); return; } } Model.Project_Sys_Set sysSet = BLL.Project_SysSetService.GetSysSetBySetId("21", this.CurrUser.LoginProjectId); int i = 0; foreach (JObject mergedRow in Grid1.GetMergedData()) { if (i > 0) { JObject values = mergedRow.Value("values"); string rowId = values["Id"].ToString(); string type = values["Type"].ToString(); if (type == "childUnitProject") { Model.Wbs_UnitProject unitProject = BLL.UnitProjectService.GetUnitProjectByUnitProjectId(rowId); if (unitProject != null) { Model.Wbs_UnitProject unitProjectParent = BLL.UnitProjectService.GetUnitProjectByUnitProjectId(unitProject.SuperUnitProjectId); unitProject.Weights = Funs.GetNewDecimalOrZero(values["Weights"].ToString()); unitProject.WeightsMoney = unitProject.Weights * unitProjectParent.WeightsMoney / 100; unitProject.IsWeightsApprove = true; BLL.UnitProjectService.UpdateUnitProject(unitProject); } } else if (type == "wbsSet") { Model.Wbs_WbsSet wbsSet = BLL.WbsSetService.GetWbsSetByWbsSetId(rowId); if (wbsSet != null) { if (string.IsNullOrEmpty(wbsSet.SuperWbsSetId)) //父级为单位工程 { Model.Wbs_UnitProject unitProject = BLL.UnitProjectService.GetUnitProjectByUnitProjectId(wbsSet.UnitProjectId); wbsSet.Weights = Funs.GetNewDecimalOrZero(values["Weights"].ToString()); wbsSet.WeightsMoney = wbsSet.Weights * unitProject.WeightsMoney / 100; wbsSet.IsWeightsApprove = true; BLL.WbsSetService.UpdateWbsSet(wbsSet); } else //父级为分部分项工程 { Model.Wbs_WbsSet wbsSetParent = BLL.WbsSetService.GetWbsSetByWbsSetId(wbsSet.SuperWbsSetId); wbsSet.Weights = Funs.GetNewDecimalOrZero(values["Weights"].ToString()); wbsSet.WeightsMoney = wbsSet.Weights * wbsSetParent.WeightsMoney / 100; wbsSet.IsWeightsApprove = true; BLL.WbsSetService.UpdateWbsSet(wbsSet); } } } } i++; } //BLL.Sys_LogService.AddLog(BLL.Const.System_9, this.CurrUser.LoginProjectId, this.CurrUser.UserId, "审核权重"); Alert.ShowInTop("保存成功!", MessageBoxIcon.Success); } #endregion #region 根据比例(因权重发生变化造成数据不一致)更新子级权重 /// /// 根据比例更新子级权重 /// /// private void UpdateWeights(string id, string type) { decimal rate = 0, weights = 0, totalWeights = 0, values = 0; int i = 0; if (type == "installation") { var ins = BLL.Project_InstallationService.GetInstallationByInstallationId(id); var cnProfession = from x in Funs.DB.WBS_CnProfession where x.InstallationId == id select x; if (ins != null && ins.WeightsMoney != null) { weights = ins.WeightsMoney ?? 0; } if (cnProfession.Count() > 0) { rate = cnProfession.Sum(e => e.Weights ?? 0); totalWeights = cnProfession.Sum(e => e.WeightsMoney ?? 0); } if (rate <= 100 && weights != totalWeights) { foreach (var q in cnProfession) { if (i == cnProfession.Count() - 1 && rate == 100) { q.WeightsMoney = weights - values; } else { q.WeightsMoney = decimal.Round(((q.Weights ?? 0) * weights / 100), 2); values = values + q.WeightsMoney ?? 0; } Funs.DB.SubmitChanges(); i++; } } } if (type == "cnProfession") { var cn = BLL.CnProfessionService.GetCnProfessionByCnProfessionId(id); var unit = from x in Funs.DB.Wbs_UnitProject where x.CnProfessionId == id select x; if (cn != null && cn.WeightsMoney != null) { weights = cn.WeightsMoney ?? 0; } if (unit.Count() > 0) { rate = unit.Sum(e => e.Weights ?? 0); totalWeights = unit.Sum(e => e.WeightsMoney ?? 0); } if (rate <= 100 && weights != totalWeights) { foreach (var q in unit) { if (i == unit.Count() - 1 && rate == 100) { q.WeightsMoney = weights - values; } else { q.WeightsMoney = decimal.Round(((q.Weights ?? 0) * weights / 100), 2); values = values + q.WeightsMoney ?? 0; } Funs.DB.SubmitChanges(); i++; } } } if (type == "unitProject") { var unit = BLL.UnitProjectService.GetUnitProjectByUnitProjectId(id); var childUnit = from x in Funs.DB.Wbs_UnitProject where x.SuperUnitProjectId == id select x; var wbs = from x in Funs.DB.Wbs_WbsSet where x.UnitProjectId == id && (x.Flag == 1 || x.SuperWbsSetId == null) select x; if (unit != null && unit.WeightsMoney != null) { weights = unit.WeightsMoney ?? 0; } if (childUnit.Count() > 0) { rate = childUnit.Sum(e => e.Weights ?? 0); totalWeights = childUnit.Sum(e => e.WeightsMoney ?? 0); } if (wbs.Count() > 0) { rate = wbs.Sum(e => e.Weights ?? 0); totalWeights = wbs.Sum(e => e.WeightsMoney ?? 0); } if (rate <= 100 && weights != totalWeights) { if (childUnit.Count() > 0) { foreach (var q in childUnit) { if (i == childUnit.Count() - 1 && rate == 100) { q.WeightsMoney = weights - values; } else { q.WeightsMoney = decimal.Round(((q.Weights ?? 0) * weights / 100), 2); values = values + q.WeightsMoney ?? 0; } Funs.DB.SubmitChanges(); i++; } } if (wbs.Count() > 0) { foreach (var q in wbs) { if (i == wbs.Count() - 1 && rate == 100) { q.WeightsMoney = weights - values; } else { q.WeightsMoney = decimal.Round(((q.Weights ?? 0) * weights / 100), 2); values = values + q.WeightsMoney ?? 0; } Funs.DB.SubmitChanges(); i++; } } } } if (type == "childUnitProject") { var unit = BLL.UnitProjectService.GetUnitProjectByUnitProjectId(id); var wbs = from x in Funs.DB.Wbs_WbsSet where x.UnitProjectId == id && (x.Flag == 1 || x.SuperWbsSetId == null) select x; if (unit != null && unit.WeightsMoney != null) { weights = unit.WeightsMoney ?? 0; } if (wbs.Count() > 0) { rate = wbs.Sum(e => e.Weights ?? 0); totalWeights = wbs.Sum(e => e.WeightsMoney ?? 0); } if (rate <= 100 && weights != totalWeights) { foreach (var q in wbs) { if (i == wbs.Count() - 1 && rate == 100) { q.WeightsMoney = weights - values; } else { q.WeightsMoney = decimal.Round(((q.Weights ?? 0) * weights / 100), 2); values = values + q.WeightsMoney ?? 0; } Funs.DB.SubmitChanges(); i++; } } } if (type == "wbsSet") { var wbs = BLL.WbsSetService.GetWbsSetByWbsSetId(id); var childWbs = from x in Funs.DB.Wbs_WbsSet where x.SuperWbsSetId == id select x; if (wbs != null && wbs.WeightsMoney != null) { weights = wbs.WeightsMoney ?? 0; } if (childWbs.Count() > 0) { rate = childWbs.Sum(e => e.Weights ?? 0); totalWeights = childWbs.Sum(e => e.WeightsMoney ?? 0); } if (rate <= 100 && weights != totalWeights) { foreach (var q in childWbs) { if (i == childWbs.Count() - 1 && rate == 100) { q.WeightsMoney = weights - values; } else { q.WeightsMoney = decimal.Round(((q.Weights ?? 0) * weights / 100), 2); values = values + q.WeightsMoney ?? 0; } Funs.DB.SubmitChanges(); i++; } } } } #endregion #region 提交、保存按钮 /// /// 提交 /// /// /// protected void btnSave_Click(object sender, EventArgs e) { if (this.Grid1.Rows.Count > 0) { Model.Wbs_UnitProject unitProject = BLL.UnitProjectService.GetUnitProjectByUnitProjectId(this.Grid1.Rows[0].DataKeys[0].ToString()); Model.Wbs_WbsSet wbsSet = BLL.WbsSetService.GetWbsSetByWbsSetId(this.Grid1.Rows[0].DataKeys[0].ToString()); if (unitProject != null) { if (unitProject.WeightsMoney == null || unitProject.WeightsMoney == 0) { Alert.ShowInTop("请先设置父级工作量!", MessageBoxIcon.Warning); return; } } if (wbsSet != null) { if (wbsSet.WeightsMoney == null || wbsSet.WeightsMoney == 0) { Alert.ShowInTop("请先设置父级工作量!", MessageBoxIcon.Warning); return; } } SaveData(); } else { Alert.ShowInTop("请至少选择一条记录!", MessageBoxIcon.Warning); return; } } /// /// 提交 /// /// /// protected void btnSave2_Click(object sender, EventArgs e) { if (this.Grid2.Rows.Count > 0) { if (this.trWBS.SelectedNode.CommandName == "childUnitProject") { Model.Wbs_UnitProject unitProject = BLL.UnitProjectService.GetUnitProjectByUnitProjectId(this.trWBS.SelectedNode.NodeID); foreach (JObject mergedRow in Grid2.GetMergedData()) { decimal oldWeightsMoney = unitProject.WeightsMoney ?? 0; JObject values = mergedRow.Value("values"); if (string.IsNullOrEmpty(values.Value("EngineerQuantity")) || string.IsNullOrEmpty(values.Value("BudgetUnitPrice")) || string.IsNullOrEmpty(values.Value("CostUnivalent"))) { Alert.ShowInTop("工程量、预算单价、成本单价不能为空!", MessageBoxIcon.Warning); return; } unitProject.EngineerQuantity = Convert.ToDecimal(values.Value("EngineerQuantity")); unitProject.Unit = values.Value("Unit"); unitProject.BudgetUnitPrice = Convert.ToDecimal(values.Value("BudgetUnitPrice")); unitProject.CostUnivalent = Convert.ToDecimal(values.Value("CostUnivalent")); unitProject.WeightsMoney = unitProject.EngineerQuantity * unitProject.BudgetUnitPrice; unitProject.IsWeightsApprove = true; BLL.UnitProjectService.UpdateUnitProject(unitProject); decimal money = Convert.ToDecimal(unitProject.WeightsMoney) - oldWeightsMoney; UpdateParentWeightsMoney1(unitProject, money); } } else if (this.trWBS.SelectedNode.CommandName == "wbsSet") { Model.Wbs_WbsSet wbsSet = BLL.WbsSetService.GetWbsSetByWbsSetId(this.trWBS.SelectedNode.NodeID); foreach (JObject mergedRow in Grid2.GetMergedData()) { decimal oldWeightsMoney = wbsSet.WeightsMoney ?? 0; JObject values = mergedRow.Value("values"); if (string.IsNullOrEmpty(values.Value("EngineerQuantity")) || string.IsNullOrEmpty(values.Value("BudgetUnitPrice")) || string.IsNullOrEmpty(values.Value("CostUnivalent"))) { Alert.ShowInTop("工程量、预算单价、成本单价不能为空!", MessageBoxIcon.Warning); return; } wbsSet.EngineerQuantity = Convert.ToDecimal(values.Value("EngineerQuantity")); wbsSet.Unit = values.Value("Unit"); wbsSet.BudgetUnitPrice = Convert.ToDecimal(values.Value("BudgetUnitPrice")); wbsSet.CostUnivalent = Convert.ToDecimal(values.Value("CostUnivalent")); wbsSet.WeightsMoney = wbsSet.EngineerQuantity * wbsSet.BudgetUnitPrice; wbsSet.IsWeightsApprove = true; BLL.WbsSetService.UpdateWbsSet(wbsSet); decimal money = Convert.ToDecimal(wbsSet.WeightsMoney) - oldWeightsMoney; UpdateParentWeightsMoney2(wbsSet, money); } } Alert.ShowInTop("保存成功!", MessageBoxIcon.Success); } else { Alert.ShowInTop("请至少选择一条记录!", MessageBoxIcon.Warning); return; } } /// /// 更新父级权重费用(当前级为子单位工程) /// /// private void UpdateParentWeightsMoney1(Model.Wbs_UnitProject childUnitProject, decimal money) { //更新单位工程 Model.Wbs_UnitProject unitProject = BLL.UnitProjectService.GetUnitProjectByUnitProjectId(childUnitProject.SuperUnitProjectId); if (unitProject.WeightsMoney == null) { unitProject.WeightsMoney = money; } else { unitProject.WeightsMoney += money; } BLL.UnitProjectService.UpdateUnitProject(unitProject); //更新专业 Model.WBS_CnProfession cnProfession = BLL.CnProfessionService.GetCnProfessionByCnProfessionId(childUnitProject.CnProfessionId); if (cnProfession.WeightsMoney == null) { cnProfession.WeightsMoney = money; } else { cnProfession.WeightsMoney += money; } BLL.CnProfessionService.UpdateCnProfession(cnProfession); //更新装置 //主项 Model.Project_Installation installation = BLL.Project_InstallationService.GetInstallationByInstallationId(childUnitProject.InstallationId); if (installation.WeightsMoney == null) { installation.WeightsMoney = money; } else { installation.WeightsMoney += money; } BLL.Project_InstallationService.UpdateInstallation(installation); //工序 Model.Project_Installation pInstallation = BLL.Project_InstallationService.GetInstallationByInstallationId(installation.SuperInstallationId); if (pInstallation.WeightsMoney == null) { pInstallation.WeightsMoney = money; } else { pInstallation.WeightsMoney += money; } BLL.Project_InstallationService.UpdateInstallation(pInstallation); //装置 Model.Project_Installation ppInstallation = BLL.Project_InstallationService.GetInstallationByInstallationId(pInstallation.SuperInstallationId); if (ppInstallation.WeightsMoney == null) { ppInstallation.WeightsMoney = money; } else { ppInstallation.WeightsMoney += money; } BLL.Project_InstallationService.UpdateInstallation(ppInstallation); } /// /// 更新父级权重费用(当前级为分部分项工程) /// /// private void UpdateParentWeightsMoney2(Model.Wbs_WbsSet wbsSet, decimal money) { //更新分部分项工程 Model.Wbs_WbsSet pWbsSet = BLL.WbsSetService.GetWbsSetByWbsSetId(wbsSet.SuperWbsSetId); if (pWbsSet != null) { if (pWbsSet.WeightsMoney == null) { pWbsSet.WeightsMoney = money; } else { pWbsSet.WeightsMoney += money; } BLL.WbsSetService.UpdateWbsSet(pWbsSet); Model.Wbs_WbsSet ppWbsSet = BLL.WbsSetService.GetWbsSetByWbsSetId(pWbsSet.SuperWbsSetId); if (ppWbsSet != null) { if (ppWbsSet.WeightsMoney == null) { ppWbsSet.WeightsMoney = money; } else { ppWbsSet.WeightsMoney += money; } BLL.WbsSetService.UpdateWbsSet(ppWbsSet); Model.Wbs_WbsSet pppWbsSet = BLL.WbsSetService.GetWbsSetByWbsSetId(ppWbsSet.SuperWbsSetId); if (pppWbsSet != null) { if (pppWbsSet.WeightsMoney == null) { pppWbsSet.WeightsMoney = money; } else { pppWbsSet.WeightsMoney += money; } BLL.WbsSetService.UpdateWbsSet(pppWbsSet); } } } //更新单位工程 Model.Wbs_UnitProject unitProject = BLL.UnitProjectService.GetUnitProjectByUnitProjectId(wbsSet.UnitProjectId); if (unitProject.WeightsMoney == null) { unitProject.WeightsMoney = money; } else { unitProject.WeightsMoney += money; } BLL.UnitProjectService.UpdateUnitProject(unitProject); Model.Wbs_UnitProject pUnitProject = BLL.UnitProjectService.GetUnitProjectByUnitProjectId(unitProject.SuperUnitProjectId); if (pUnitProject != null) { if (pUnitProject.WeightsMoney == null) { pUnitProject.WeightsMoney = money; } else { pUnitProject.WeightsMoney += money; } BLL.UnitProjectService.UpdateUnitProject(pUnitProject); } if (unitProject.CnProfessionId != null) //非总图内容 { //更新专业 Model.WBS_CnProfession cnProfession = BLL.CnProfessionService.GetCnProfessionByCnProfessionId(unitProject.CnProfessionId); if (cnProfession.WeightsMoney == null) { cnProfession.WeightsMoney = money; } else { cnProfession.WeightsMoney += money; } BLL.CnProfessionService.UpdateCnProfession(cnProfession); //更新装置 //主项 Model.Project_Installation installation = BLL.Project_InstallationService.GetInstallationByInstallationId(unitProject.InstallationId); if (installation.WeightsMoney == null) { installation.WeightsMoney = money; } else { installation.WeightsMoney += money; } BLL.Project_InstallationService.UpdateInstallation(installation); //工序 Model.Project_Installation pInstallation = BLL.Project_InstallationService.GetInstallationByInstallationId(installation.SuperInstallationId); if (pInstallation.WeightsMoney == null) { pInstallation.WeightsMoney = money; } else { pInstallation.WeightsMoney += money; } BLL.Project_InstallationService.UpdateInstallation(pInstallation); //装置 Model.Project_Installation ppInstallation = BLL.Project_InstallationService.GetInstallationByInstallationId(pInstallation.SuperInstallationId); if (ppInstallation.WeightsMoney == null) { ppInstallation.WeightsMoney = money; } else { ppInstallation.WeightsMoney += money; } BLL.Project_InstallationService.UpdateInstallation(ppInstallation); } else //总图 { Model.Project_Installation installation = BLL.Project_InstallationService.GetInstallationByInstallationId(unitProject.InstallationId); if (installation.WeightsMoney == null) { installation.WeightsMoney = money; } else { installation.WeightsMoney += money; } BLL.Project_InstallationService.UpdateInstallation(installation); } } #region 取消审核 /// /// 判断子节点有没有审核权重项 /// /// private bool IsChildAudit(GridRow row) { bool isAudit = false; if (row.Values[14].ToString() == "cnProfession") { var unitProject = BLL.UnitProjectService.GetUnitProjectsBySuperUnitProjectId(row.RowID); if (unitProject != null) { foreach (var unit in unitProject) { if (unit.IsWeightsApprove == true) { isAudit = true; break; } } } } if (row.Values[14].ToString() == "unitProject") { var childUnit = BLL.UnitProjectService.GetUnitProjectsBySuperUnitProjectId(row.RowID); if (childUnit != null) { foreach (var child in childUnit) { if (child.IsWeightsApprove == true) { isAudit = true; break; } } } var wbsSet = from x in Funs.DB.Wbs_WbsSet where x.UnitProjectId == row.RowID select x; if (wbsSet != null) { foreach (var wbs in wbsSet) { if (wbs.IsWeightsApprove == true) { isAudit = true; break; } } } } if (row.Values[14].ToString() == "childUnitProject") { var wbsSet = from x in Funs.DB.Wbs_WbsSet where x.UnitProjectId == row.RowID select x; if (wbsSet != null) { foreach (var wbs in wbsSet) { if (wbs.IsWeightsApprove == true) { isAudit = true; break; } } } } if (row.Values[14].ToString() == "wbsSet") { var wbsSet = BLL.WbsSetService.GetWbsSetsBySuperWbsSetId(row.RowID); if (wbsSet != null) { foreach (var wbs in wbsSet) { if (wbs.IsWeightsApprove == true) { isAudit = true; break; } } } } return isAudit; } /// /// 右键取消审核事件 /// /// /// protected void btnClearAudit_Click(object sender, EventArgs e) { //if (BLL.CommonService.GetAllButtonPowerList(this.CurrUser.LoginProjectId, this.CurrUser.UserId, Const.JDGL_WeightsAuditMenuId, Const.BtnCancelAuditing)) //{ if (IsChildAudit(Grid1.SelectedRow)) { Alert.ShowInTop("该项的子项权重已设置审核,不能取消审核!", MessageBoxIcon.Warning); return; } else { if (Grid1.SelectedRow.Values[14].ToString() == "cnProfession") { var cn = BLL.CnProfessionService.GetCnProfessionByCnProfessionId(Grid1.SelectedRow.RowID); if (cn != null) { cn.IsWeightsApprove = false; } } if (Grid1.SelectedRow.Values[14].ToString() == "unitProject" || Grid1.SelectedRow.Values[14].ToString() == "childUnitProject") { var unitProject = BLL.UnitProjectService.GetUnitProjectByUnitProjectId(Grid1.SelectedRow.RowID); if (unitProject != null) { unitProject.IsWeightsApprove = false; } } if (Grid1.SelectedRow.Values[14].ToString() == "wbsSet") { var wbsSet = BLL.WbsSetService.GetWbsSetByWbsSetId(Grid1.SelectedRow.RowID); if (wbsSet != null) { wbsSet.IsWeightsApprove = false; } } Funs.DB.SubmitChanges(); BindGrid(); Alert.ShowInTop("已取消该项审核!", MessageBoxIcon.Warning); } //} //else //{ // Alert.ShowInTop("您没有消该项审权限,请于管理员联系!", MessageBoxIcon.Warning); //} } #endregion #endregion #region 绑定数据 /// /// 绑定数据 /// /// /// protected void Grid1_FilterChange(object sender, EventArgs e) { BindGrid(); } protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e) { Grid1.PageIndex = e.NewPageIndex; BindGrid(); } /// /// Grid1排序 /// /// /// protected void Grid1_Sort(object sender, GridSortEventArgs e) { Grid1.SortDirection = e.SortDirection; Grid1.SortField = e.SortField; BindGrid(); } /// /// 分页下拉选择事件 /// /// /// protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e) { Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue); BindGrid(); } /// /// 加载Grid2 /// private void BindGrid2() { this.Grid2.Columns[4].Hidden = false; this.Grid2.Columns[5].Hidden = false; List items = new List(); Model.WBSSetItem item = new Model.WBSSetItem(); if (this.trWBS.SelectedNode != null) { if (this.trWBS.SelectedNode.CommandName == "childUnitProject") { Model.Wbs_UnitProject unitProject = BLL.UnitProjectService.GetUnitProjectByUnitProjectId(this.trWBS.SelectedNode.NodeID); if (unitProject != null) { item.Id = this.trWBS.SelectedNode.NodeID; item.Code = unitProject.UnitProjectCode; item.Name = unitProject.UnitProjectName; item.Type = "unitProject"; item.StartDate = unitProject.StartDate; item.EndDate = unitProject.EndDate; item.Weights = unitProject.Weights; item.WeightsMoney = unitProject.WeightsMoney; item.WeightsMoneyStr = decimal.Round(Convert.ToDecimal(item.WeightsMoney), 2).ToString(); item.EngineerQuantity = unitProject.EngineerQuantity; string unit = string.Empty; decimal? budgetUnitPrice = 0, costUnivalent = 0; Model.Wbs_UnitProject pUnitProject = BLL.UnitProjectService.GetUnitProjectByUnitProjectId(unitProject.SuperUnitProjectId); if (pUnitProject != null) { if (!string.IsNullOrEmpty(pUnitProject.Unit)) { unit = pUnitProject.Unit; } if (pUnitProject.BudgetUnitPrice != null) { budgetUnitPrice = pUnitProject.BudgetUnitPrice; this.Grid2.Columns[4].Hidden = true; this.Grid2.Columns[5].Hidden = true; } if (pUnitProject.CostUnivalent != null) { costUnivalent = pUnitProject.CostUnivalent; } } item.Unit = unitProject.Unit == null ? unit : unitProject.Unit; item.BudgetUnitPrice = unitProject.BudgetUnitPrice == null ? budgetUnitPrice : unitProject.BudgetUnitPrice; item.CostUnivalent = unitProject.CostUnivalent == null ? costUnivalent : unitProject.CostUnivalent; item.ChildEngineerQuantitys = BLL.UnitProjectService.GetChildEngineerQuantitys(this.trWBS.SelectedNode.NodeID); items.Add(item); } } else if (this.trWBS.SelectedNode.CommandName == "wbsSet") { Model.Wbs_WbsSet wbsSet = BLL.WbsSetService.GetWbsSetByWbsSetId(this.trWBS.SelectedNode.NodeID); item.Id = this.trWBS.SelectedNode.NodeID; item.Code = wbsSet.WbsSetCode; item.Name = wbsSet.WbsSetName; item.Type = "wbsSet"; item.StartDate = wbsSet.StartDate; item.EndDate = wbsSet.EndDate; item.Weights = wbsSet.Weights; item.WeightsMoney = wbsSet.WeightsMoney; item.WeightsMoneyStr = decimal.Round(Convert.ToDecimal(item.WeightsMoney), 2).ToString(); item.EngineerQuantity = wbsSet.EngineerQuantity; string unit = string.Empty; decimal? budgetUnitPrice = 0, costUnivalent = 0; Model.Wbs_WbsSet pWbsSet = BLL.WbsSetService.GetWbsSetByWbsSetId(wbsSet.SuperWbsSetId); if (pWbsSet != null) { if (pWbsSet.Unit != null) { unit = pWbsSet.Unit; } if (pWbsSet.BudgetUnitPrice != null) { budgetUnitPrice = pWbsSet.BudgetUnitPrice; this.Grid2.Columns[4].Hidden = true; this.Grid2.Columns[5].Hidden = true; } if (pWbsSet.CostUnivalent != null) { costUnivalent = pWbsSet.CostUnivalent; } } else { Model.Wbs_UnitProject pUnitProject = BLL.UnitProjectService.GetUnitProjectByUnitProjectId(wbsSet.UnitProjectId); if (pUnitProject.Unit != null) { unit = pUnitProject.Unit; } if (pUnitProject.BudgetUnitPrice != null) { budgetUnitPrice = pUnitProject.BudgetUnitPrice; this.Grid2.Columns[4].Hidden = true; this.Grid2.Columns[5].Hidden = true; } if (pUnitProject.CostUnivalent != null) { costUnivalent = pUnitProject.CostUnivalent; } } item.Unit = wbsSet.Unit == null ? unit : wbsSet.Unit; item.BudgetUnitPrice = wbsSet.BudgetUnitPrice == null ? budgetUnitPrice : wbsSet.BudgetUnitPrice; item.CostUnivalent = wbsSet.CostUnivalent == null ? costUnivalent : wbsSet.CostUnivalent; item.ChildEngineerQuantitys = BLL.WbsSetService.GetChildEngineerQuantitys(this.trWBS.SelectedNode.NodeID); items.Add(item); } this.Grid2.DataSource = items; this.Grid2.DataBind(); } } /// /// 加载Grid /// private void BindGrid() { List items = new List(); if (this.trWBS.SelectedNode != null) { if (this.trWBS.SelectedNode.CommandName == "installation") { this.Grid1.Columns[0].HeaderText = "装置"; this.Grid1.Columns[1].HeaderText = "专业"; Model.Project_Installation installation = BLL.Project_InstallationService.GetInstallationByInstallationId(this.trWBS.SelectedNodeID); Model.WBSSetItem parentItem = new Model.WBSSetItem(); if (installation != null) { Model.Base_Project project = BLL.ProjectService.GetProjectByProjectId(this.CurrUser.LoginProjectId); parentItem.Id = this.trWBS.SelectedNode.NodeID; parentItem.Code = installation.InstallationCode; parentItem.Name = installation.InstallationName; parentItem.Type = "installation"; parentItem.StartDate = installation.StartDate; parentItem.EndDate = installation.EndDate; parentItem.Weights = installation.Weights; if (project.ConstructionMoney != null) { parentItem.WeightsMoney = Convert.ToDecimal(project.ConstructionMoney * installation.Weights / 100); parentItem.WeightsMoneyStr = decimal.Round(Convert.ToDecimal(parentItem.WeightsMoney), 2).ToString(); } items.Add(parentItem); } var cnProfessions = from x in Funs.DB.WBS_CnProfession where x.InstallationId == this.trWBS.SelectedNodeID orderby x.OldId select x; foreach (var cnProfession in cnProfessions) { var unitProjects = from x in Funs.DB.Wbs_UnitProject where x.CnProfessionId == cnProfession.CnProfessionId && x.IsApprove == true select x; if (unitProjects.Count() > 0) { Model.WBSSetItem item = new Model.WBSSetItem(); item.Id = cnProfession.CnProfessionId; item.ChildCode = cnProfession.CnProfessionCode; item.ChildName = cnProfession.CnProfessionName; item.Type = "cnProfession"; item.StartDate = cnProfession.StartDate; item.EndDate = cnProfession.EndDate; item.Weights = cnProfession.Weights; item.WeightsMoney = cnProfession.WeightsMoney; item.WeightsMoneys = parentItem.WeightsMoney; if (item.WeightsMoney != null) { item.WeightsMoneyStr = decimal.Round(Convert.ToDecimal(item.WeightsMoney), 2).ToString(); } items.Add(item); } } } else if (this.trWBS.SelectedNode.CommandName == "cnProfession") { this.Grid1.Columns[0].HeaderText = "专业"; this.Grid1.Columns[1].HeaderText = "单位工程"; Model.WBS_CnProfession cnProfession = BLL.CnProfessionService.GetCnProfessionByCnProfessionId(this.trWBS.SelectedNode.NodeID); Model.WBSSetItem parentItem = new Model.WBSSetItem(); if (cnProfession != null) { parentItem.Id = this.trWBS.SelectedNode.NodeID; parentItem.Code = cnProfession.CnProfessionCode; parentItem.Name = cnProfession.CnProfessionName; parentItem.Type = "cnProfession"; parentItem.StartDate = cnProfession.StartDate; parentItem.EndDate = cnProfession.EndDate; parentItem.Weights = cnProfession.Weights; parentItem.WeightsMoney = cnProfession.WeightsMoney; parentItem.WeightsMoneyStr = decimal.Round(Convert.ToDecimal(parentItem.WeightsMoney), 2).ToString(); items.Add(parentItem); } var unitProjects = from x in Funs.DB.Wbs_UnitProject where x.CnProfessionId == this.trWBS.SelectedNodeID && x.SuperUnitProjectId == null && x.IsApprove == true orderby x.SortIndex, x.UnitProjectCode select x; foreach (var unitProject in unitProjects) { Model.WBSSetItem item = new Model.WBSSetItem(); item.Id = unitProject.UnitProjectId; item.ChildCode = unitProject.UnitProjectCode; item.ChildName = unitProject.UnitProjectName; item.Type = "unitProject"; item.StartDate = unitProject.StartDate; item.EndDate = unitProject.EndDate; item.Weights = unitProject.Weights; item.WeightsMoney = unitProject.WeightsMoney; item.WeightsMoneys = parentItem.WeightsMoney; if (item.WeightsMoney != null) { item.WeightsMoneyStr = decimal.Round(Convert.ToDecimal(item.WeightsMoney), 2).ToString(); } items.Add(item); } } else if (this.trWBS.SelectedNode.CommandName == "unitProject") { this.Grid1.Columns[0].HeaderText = "单位工程"; Model.Wbs_UnitProject unitProject = BLL.UnitProjectService.GetUnitProjectByUnitProjectId(this.trWBS.SelectedNode.NodeID); Model.WBSSetItem parentItem = new Model.WBSSetItem(); if (unitProject != null) { parentItem.Id = this.trWBS.SelectedNode.NodeID; parentItem.Code = unitProject.UnitProjectCode; parentItem.Name = unitProject.UnitProjectName; parentItem.Type = "unitProject"; parentItem.StartDate = unitProject.StartDate; parentItem.EndDate = unitProject.EndDate; parentItem.Weights = unitProject.Weights; parentItem.WeightsMoney = unitProject.WeightsMoney; parentItem.WeightsMoneyStr = decimal.Round(Convert.ToDecimal(parentItem.WeightsMoney), 2).ToString(); items.Add(parentItem); } var childUnitProjects = from x in Funs.DB.Wbs_UnitProject where x.SuperUnitProjectId == this.trWBS.SelectedNode.NodeID && x.IsApprove == true orderby x.SortIndex, x.UnitProjectCode select x; if (childUnitProjects.Count() > 0) //存在子单位工程 { this.Grid1.Columns[1].HeaderText = "子单位工程"; foreach (var childUnitProject in childUnitProjects) { Model.WBSSetItem item = new Model.WBSSetItem(); item.Id = childUnitProject.UnitProjectId; item.ChildCode = childUnitProject.UnitProjectCode; item.ChildName = childUnitProject.UnitProjectName; item.Type = "childUnitProject"; item.StartDate = childUnitProject.StartDate; item.EndDate = childUnitProject.EndDate; item.Weights = childUnitProject.Weights; item.WeightsMoney = childUnitProject.WeightsMoney; item.WeightsMoneys = parentItem.WeightsMoney; if (item.WeightsMoney != null) { item.WeightsMoneyStr = decimal.Round(Convert.ToDecimal(item.WeightsMoney), 2).ToString(); } items.Add(item); } } else { this.Grid1.Columns[1].HeaderText = "分部工程"; var wbsSet1s = from x in Funs.DB.Wbs_WbsSet where x.Flag == 1 && x.UnitProjectId == this.trWBS.SelectedNode.NodeID && x.IsApprove == true orderby x.SortIndex, x.WbsSetCode select x; if (wbsSet1s.Count() > 0) { foreach (var wbsSet1 in wbsSet1s) { Model.WBSSetItem item = new Model.WBSSetItem(); item.Id = wbsSet1.WbsSetId; item.ChildCode = wbsSet1.WbsSetCode; item.ChildName = wbsSet1.WbsSetName; item.Type = "wbsSet"; item.StartDate = wbsSet1.StartDate; item.EndDate = wbsSet1.EndDate; item.Weights = wbsSet1.Weights; item.WeightsMoney = wbsSet1.WeightsMoney; item.WeightsMoneys = parentItem.WeightsMoney; if (item.WeightsMoney != null) { item.WeightsMoneyStr = decimal.Round(Convert.ToDecimal(item.WeightsMoney), 2).ToString(); } items.Add(item); } } else //单位工程下直接是分项内容,如质量行为 { var wbsSet3s = from x in Funs.DB.Wbs_WbsSet where x.Flag == 3 && x.UnitProjectId == this.trWBS.SelectedNode.NodeID && x.IsApprove == true orderby x.SortIndex, x.WbsSetCode select x; if (wbsSet3s.Count() > 0) { foreach (var wbsSet3 in wbsSet3s) { Model.WBSSetItem item = new Model.WBSSetItem(); item.Id = wbsSet3.WbsSetId; item.ChildCode = wbsSet3.WbsSetCode; item.ChildName = wbsSet3.WbsSetName; item.Type = "wbsSet"; item.StartDate = wbsSet3.StartDate; item.EndDate = wbsSet3.EndDate; item.Weights = wbsSet3.Weights; item.WeightsMoney = wbsSet3.WeightsMoney; item.WeightsMoneys = parentItem.WeightsMoney; if (item.WeightsMoney != null) { item.WeightsMoneyStr = decimal.Round(Convert.ToDecimal(item.WeightsMoney), 2).ToString(); } items.Add(item); } } } } } else if (this.trWBS.SelectedNode.CommandName == "childUnitProject") { this.Grid1.Columns[0].HeaderText = "子单位工程"; this.Grid1.Columns[1].HeaderText = "分部工程"; Model.Wbs_UnitProject unitProject = BLL.UnitProjectService.GetUnitProjectByUnitProjectId(this.trWBS.SelectedNode.NodeID); Model.WBSSetItem parentItem = new Model.WBSSetItem(); if (unitProject != null) { parentItem.Id = this.trWBS.SelectedNode.NodeID; parentItem.Code = unitProject.UnitProjectCode; parentItem.Name = unitProject.UnitProjectName; parentItem.Type = "unitProject"; parentItem.StartDate = unitProject.StartDate; parentItem.EndDate = unitProject.EndDate; parentItem.Weights = unitProject.Weights; parentItem.WeightsMoney = unitProject.WeightsMoney; parentItem.WeightsMoneyStr = decimal.Round(Convert.ToDecimal(parentItem.WeightsMoney), 2).ToString(); items.Add(parentItem); } var wbsSet1s = from x in Funs.DB.Wbs_WbsSet where x.Flag == 1 && x.UnitProjectId == this.trWBS.SelectedNode.NodeID && x.IsApprove == true orderby x.SortIndex, x.WbsSetCode select x; foreach (var wbsSet1 in wbsSet1s) { Model.WBSSetItem item = new Model.WBSSetItem(); item.Id = wbsSet1.WbsSetId; item.ChildCode = wbsSet1.WbsSetCode; item.ChildName = wbsSet1.WbsSetName; item.Type = "wbsSet"; item.StartDate = wbsSet1.StartDate; item.EndDate = wbsSet1.EndDate; item.Weights = wbsSet1.Weights; item.WeightsMoney = wbsSet1.WeightsMoney; item.WeightsMoneys = parentItem.WeightsMoney; if (item.WeightsMoney != null) { item.WeightsMoneyStr = decimal.Round(Convert.ToDecimal(item.WeightsMoney), 2).ToString(); } items.Add(item); } } else if (this.trWBS.SelectedNode.CommandName == "wbsSet") { Model.Wbs_WbsSet wbsSet = BLL.WbsSetService.GetWbsSetByWbsSetId(this.trWBS.SelectedNode.NodeID); string column0 = string.Empty; if (wbsSet.Flag == 1) { column0 = "分部工程"; } else if (wbsSet.Flag == 2) { column0 = "子分部工程"; } else if (wbsSet.Flag == 3) { column0 = "分项工程"; } else if (wbsSet.Flag == 4) { column0 = "子分项工程"; } this.Grid1.Columns[0].HeaderText = column0; Model.WBSSetItem parentItem = new Model.WBSSetItem(); if (wbsSet != null) { parentItem.Id = this.trWBS.SelectedNode.NodeID; parentItem.Code = wbsSet.WbsSetCode; parentItem.Name = wbsSet.WbsSetName; parentItem.Type = "wbsSet"; parentItem.StartDate = wbsSet.StartDate; parentItem.EndDate = wbsSet.EndDate; parentItem.Weights = wbsSet.Weights; parentItem.WeightsMoney = wbsSet.WeightsMoney; if (parentItem.Weights != null && parentItem.WeightsMoney == null) { parentItem.WeightsMoney = wbsSet.WeightsMoney * parentItem.Weights / 100; } parentItem.WeightsMoneyStr = decimal.Round(Convert.ToDecimal(parentItem.WeightsMoney), 2).ToString(); items.Add(parentItem); } var childWbsSets = BLL.WbsSetService.GetApproveWbsSetsBySuperWbsSetId(this.trWBS.SelectedNode.NodeID); string column1 = string.Empty; if (childWbsSets.Count() > 0) { if (childWbsSets[0].Flag == 2) { column1 = "子分部工程"; } else if (childWbsSets[0].Flag == 3) { column1 = "分项工程"; } else if (childWbsSets[0].Flag == 4) { column1 = "子分项工程"; } this.Grid1.Columns[1].HeaderText = column1; } else { this.Grid1.Columns[1].HeaderText = string.Empty; } foreach (var childWbsSet in childWbsSets) { Model.WBSSetItem item = new Model.WBSSetItem(); item.Id = childWbsSet.WbsSetId; item.ChildCode = childWbsSet.WbsSetCode; item.ChildName = childWbsSet.WbsSetName; item.Type = "wbsSet"; item.StartDate = childWbsSet.StartDate; item.EndDate = childWbsSet.EndDate; item.Weights = childWbsSet.Weights; item.WeightsMoney = childWbsSet.WeightsMoney; item.WeightsMoneys = parentItem.WeightsMoney; if (item.WeightsMoney != null) { item.WeightsMoneyStr = decimal.Round(Convert.ToDecimal(item.WeightsMoney), 2).ToString(); } items.Add(item); } } this.Grid1.DataSource = items; this.Grid1.DataBind(); if (this.Grid1.Rows.Count > 0) { Grid1.Rows[0].CellCssClasses[7] = "f-grid-cell-uneditable"; Grid1.Rows[0].CellCssClasses[8] = "f-grid-cell-uneditable"; } } } #endregion #region 判断按钮权限 /// /// 判断按钮权限 /// private void GetButtonPower() { if (Request.Params["value"] == "0") { return; } var buttonList = BLL.CommonService.GetAllButtonList(this.CurrUser.LoginProjectId, this.CurrUser.UserId, BLL.Const.WeightsAuditMenuId); if (buttonList.Count() > 0) { if (buttonList.Contains(BLL.Const.BtnSave)) { this.btnSave.Hidden = false; this.btnSave2.Hidden = false; } if (buttonList.Contains(BLL.Const.BtnCancelAuditing)) { this.btnClearAudit.Hidden = false; } } } #endregion #region 计算装置权重 /// /// 计算装置权重 /// /// /// protected void btnUpdateInstallationWeights_Click(object sender, EventArgs e) { if (this.trWBS.SelectedNode != null) { if (this.trWBS.SelectedNode.CommandName == "installation") { string installationId = this.trWBS.SelectedNodeID; Model.Project_Installation installation = BLL.Project_InstallationService.GetInstallationByInstallationId(installationId); if (installation.SuperInstallationId == "0") { var installations = (from x in Funs.DB.Project_Installation where x.ProjectId == this.CurrUser.LoginProjectId && x.SuperInstallationId == "0" select x).ToList(); decimal installationTotalMoney = installations.Sum(x => x.WeightsMoney ?? 0); decimal totalInstallationWeights = 0; for (int i = 0; i < installations.Count(); i++) { if (installations[i].WeightsMoney != null && installationTotalMoney > 0) { if (i != installations.Count() - 1) { decimal installationWeights = decimal.Round(Convert.ToDecimal(installations[i].WeightsMoney) / installationTotalMoney * 100, 2); installations[i].Weights = installationWeights; totalInstallationWeights += installationWeights; BLL.Project_InstallationService.UpdateInstallation(installations[i]); } else //最后一项的权重为100减去前面项的权重 { installations[i].Weights = 100 - totalInstallationWeights; BLL.Project_InstallationService.UpdateInstallation(installations[i]); } } } //工序 var installation1s = (from x in Funs.DB.Project_Installation where x.ProjectId == this.CurrUser.LoginProjectId && x.SuperInstallationId == installationId select x).ToList(); if (installation1s.Count > 0) //非总图装置 { decimal installation1TotalMoney = installation.WeightsMoney ?? 0; decimal totalInstallation1Weights = 0; for (int i = 0; i < installation1s.Count(); i++) { if (installation1s[i].WeightsMoney != null && installation1TotalMoney > 0) { if (i != installation1s.Count() - 1) { decimal installation1Weights = decimal.Round(Convert.ToDecimal(installation1s[i].WeightsMoney) / installation1TotalMoney * 100, 2); installation1s[i].Weights = installation1Weights; totalInstallation1Weights += installation1Weights; BLL.Project_InstallationService.UpdateInstallation(installation1s[i]); } else //最后一项的权重为100减去前面项的权重 { installation1s[i].Weights = 100 - totalInstallation1Weights; BLL.Project_InstallationService.UpdateInstallation(installation1s[i]); } //主项 var installation2s = (from x in Funs.DB.Project_Installation where x.ProjectId == this.CurrUser.LoginProjectId && x.SuperInstallationId == installation1s[i].InstallationId select x).ToList(); decimal installation2TotalMoney = installation1s[i].WeightsMoney ?? 0; decimal totalInstallation2Weights = 0; for (int j = 0; j < installation2s.Count(); j++) { if (installation2s[j].WeightsMoney != null && installation2TotalMoney > 0) { if (j != installation2s.Count() - 1) { decimal weights = decimal.Round(Convert.ToDecimal(installation2s[j].WeightsMoney) / installation2TotalMoney * 100, 2); installation2s[j].Weights = weights; totalInstallation2Weights += weights; BLL.Project_InstallationService.UpdateInstallation(installation2s[j]); } else //最后一项的权重为100减去前面项的权重 { installation2s[j].Weights = 100 - totalInstallation2Weights; BLL.Project_InstallationService.UpdateInstallation(installation2s[j]); } //专业 var cnProfessions = (from x in Funs.DB.WBS_CnProfession where x.ProjectId == this.CurrUser.LoginProjectId && x.InstallationId == installation2s[j].InstallationId select x).ToList(); decimal cnProfessionTotalMoney = installation2s[j].WeightsMoney ?? 0; decimal totalCnProfessionWeights = 0; for (int a = 0; a < cnProfessions.Count(); a++) { if (cnProfessions[a].WeightsMoney != null && cnProfessionTotalMoney > 0) { if (a != cnProfessions.Count() - 1) { decimal weights = decimal.Round(Convert.ToDecimal(cnProfessions[a].WeightsMoney) / cnProfessionTotalMoney * 100, 2); cnProfessions[a].Weights = weights; totalCnProfessionWeights += weights; BLL.CnProfessionService.UpdateCnProfession(cnProfessions[a]); } else //最后一项的权重为100减去前面项的权重 { cnProfessions[a].Weights = 100 - totalCnProfessionWeights; BLL.CnProfessionService.UpdateCnProfession(cnProfessions[a]); } //单位工程 var unitProjects = (from x in Funs.DB.Wbs_UnitProject where x.ProjectId == this.CurrUser.LoginProjectId && x.SuperUnitProjectId == null && x.CnProfessionId == cnProfessions[a].CnProfessionId select x).ToList(); decimal unitProjectTotalMoney = cnProfessions[a].WeightsMoney ?? 0; decimal totalUnitProjectWeights = 0; for (int b = 0; b < unitProjects.Count(); b++) { if (unitProjects[b].WeightsMoney != null && unitProjectTotalMoney > 0) { if (b != unitProjects.Count() - 1) { decimal weights = decimal.Round(Convert.ToDecimal(unitProjects[b].WeightsMoney) / unitProjectTotalMoney * 100, 2); unitProjects[b].Weights = weights; totalUnitProjectWeights += weights; BLL.UnitProjectService.UpdateUnitProject(unitProjects[b]); } else //最后一项的权重为100减去前面项的权重 { unitProjects[b].Weights = 100 - totalUnitProjectWeights; BLL.UnitProjectService.UpdateUnitProject(unitProjects[b]); } var childUnitProjects = (from x in Funs.DB.Wbs_UnitProject where x.SuperUnitProjectId == unitProjects[b].UnitProjectId select x).ToList(); if (childUnitProjects.Count > 0) //存在子单位工程 { decimal childUnitProjectTotalMoney = unitProjects[b].WeightsMoney ?? 0; decimal totalChildUnitProjectWeights = 0; for (int c = 0; c < childUnitProjects.Count(); c++) { if (childUnitProjects[c].WeightsMoney != null && childUnitProjectTotalMoney > 0) { if (c != childUnitProjects.Count() - 1) { decimal weights = decimal.Round(Convert.ToDecimal(childUnitProjects[c].WeightsMoney) / childUnitProjectTotalMoney * 100, 2); childUnitProjects[c].Weights = weights; totalChildUnitProjectWeights += weights; BLL.UnitProjectService.UpdateUnitProject(childUnitProjects[c]); } else //最后一项的权重为100减去前面项的权重 { childUnitProjects[c].Weights = 100 - totalChildUnitProjectWeights; BLL.UnitProjectService.UpdateUnitProject(childUnitProjects[c]); } SetWbsSetWeights(childUnitProjects[c]); } } } else //不存在子单位工程 { SetWbsSetWeights(unitProjects[b]); } } } } } } } } } } else //总图 { var unitProjects = (from x in Funs.DB.Wbs_UnitProject where x.InstallationId == installationId && x.SuperUnitProjectId == null orderby x.SortIndex, x.UnitProjectCode select x).ToList(); decimal unitProjectTotalMoney = installation.WeightsMoney ?? 0; decimal totalUnitProjectWeights = 0; for (int b = 0; b < unitProjects.Count(); b++) { if (unitProjects[b].WeightsMoney != null && unitProjectTotalMoney > 0) { if (b != unitProjects.Count() - 1) { decimal weights = decimal.Round(Convert.ToDecimal(unitProjects[b].WeightsMoney) / unitProjectTotalMoney * 100, 2); unitProjects[b].Weights = weights; totalUnitProjectWeights += weights; BLL.UnitProjectService.UpdateUnitProject(unitProjects[b]); } else //最后一项的权重为100减去前面项的权重 { unitProjects[b].Weights = 100 - totalUnitProjectWeights; BLL.UnitProjectService.UpdateUnitProject(unitProjects[b]); } SetWbsSetWeights(unitProjects[b]); } } } Alert.ShowInTop("计算成功!", MessageBoxIcon.Success); } else { Alert.ShowInTop("请选择一个装置!", MessageBoxIcon.Warning); return; } } else { Alert.ShowInTop("请选择一个装置!", MessageBoxIcon.Warning); return; } } else { Alert.ShowInTop("请选择装置!", MessageBoxIcon.Warning); return; } } /// /// 计算分部分项权重 /// /// private void SetWbsSetWeights(Model.Wbs_UnitProject unitProject) { var wbsSet1s = (from x in Funs.DB.Wbs_WbsSet where x.Flag == 1 && x.UnitProjectId == unitProject.UnitProjectId && x.IsApprove == true && x.NoShow == null orderby x.SortIndex, x.WbsSetCode select x).ToList(); decimal wbsSet1TotalMoney = unitProject.WeightsMoney ?? 0; decimal totalWbsSet1Weights = 0; for (int a = 0; a < wbsSet1s.Count(); a++) { if (wbsSet1s[a].WeightsMoney != null && wbsSet1TotalMoney > 0) { if (a != wbsSet1s.Count() - 1) { decimal weights = decimal.Round(Convert.ToDecimal(wbsSet1s[a].WeightsMoney) / wbsSet1TotalMoney * 100, 2); wbsSet1s[a].Weights = weights; totalWbsSet1Weights += weights; BLL.WbsSetService.UpdateWbsSet(wbsSet1s[a]); } else //最后一项的权重为100减去前面项的权重 { wbsSet1s[a].Weights = 100 - totalWbsSet1Weights; BLL.WbsSetService.UpdateWbsSet(wbsSet1s[a]); } var wbsSet2s = (from x in Funs.DB.Wbs_WbsSet where x.SuperWbsSetId == wbsSet1s[a].WbsSetId && x.IsApprove == true && x.NoShow == null orderby x.SortIndex, x.WbsSetCode select x).ToList(); decimal wbsSet2TotalMoney = wbsSet1s[a].WeightsMoney ?? 0; decimal totalWbsSet2Weights = 0; for (int b = 0; b < wbsSet2s.Count(); b++) { if (wbsSet2s[b].WeightsMoney != null && wbsSet2TotalMoney > 0) { if (b != wbsSet2s.Count() - 1) { decimal weights = decimal.Round(Convert.ToDecimal(wbsSet2s[b].WeightsMoney) / wbsSet2TotalMoney * 100, 2); wbsSet2s[b].Weights = weights; totalWbsSet2Weights += weights; BLL.WbsSetService.UpdateWbsSet(wbsSet2s[b]); } else //最后一项的权重为100减去前面项的权重 { wbsSet2s[b].Weights = 100 - totalWbsSet2Weights; BLL.WbsSetService.UpdateWbsSet(wbsSet2s[b]); } var wbsSet3s = (from x in Funs.DB.Wbs_WbsSet where x.SuperWbsSetId == wbsSet2s[b].WbsSetId && x.IsApprove == true && x.NoShow == null orderby x.SortIndex, x.WbsSetCode select x).ToList(); decimal wbsSet3TotalMoney = wbsSet2s[b].WeightsMoney ?? 0; decimal totalWbsSet3Weights = 0; for (int c = 0; c < wbsSet3s.Count(); c++) { if (wbsSet3s[c].WeightsMoney != null && wbsSet3TotalMoney > 0) { if (c != wbsSet3s.Count() - 1) { decimal weights = decimal.Round(Convert.ToDecimal(wbsSet3s[c].WeightsMoney) / wbsSet3TotalMoney * 100, 2); wbsSet3s[c].Weights = weights; totalWbsSet3Weights += weights; BLL.WbsSetService.UpdateWbsSet(wbsSet3s[c]); } else //最后一项的权重为100减去前面项的权重 { wbsSet3s[c].Weights = 100 - totalWbsSet3Weights; BLL.WbsSetService.UpdateWbsSet(wbsSet3s[c]); } var wbsSet4s = (from x in Funs.DB.Wbs_WbsSet where x.SuperWbsSetId == wbsSet3s[c].WbsSetId && x.IsApprove == true && x.NoShow == null orderby x.SortIndex, x.WbsSetCode select x).ToList(); decimal wbsSet4TotalMoney = wbsSet3s[c].WeightsMoney ?? 0; decimal totalWbsSet4Weights = 0; for (int d = 0; d < wbsSet4s.Count(); d++) { if (wbsSet4s[d].WeightsMoney != null && wbsSet4TotalMoney > 0) { if (d != wbsSet4s.Count() - 1) { decimal weights = decimal.Round(Convert.ToDecimal(wbsSet4s[d].WeightsMoney) / wbsSet4TotalMoney * 100, 2); wbsSet4s[d].Weights = weights; totalWbsSet4Weights += weights; BLL.WbsSetService.UpdateWbsSet(wbsSet4s[d]); } else //最后一项的权重为100减去前面项的权重 { wbsSet4s[d].Weights = 100 - totalWbsSet4Weights; BLL.WbsSetService.UpdateWbsSet(wbsSet4s[d]); } } } } } } } } } } private void UpdateWbsSetWeights(Model.Wbs_WbsSet wbsSet) { decimal surplusWbsSetWeightsMoney = Funs.GetNewDecimalOrZero(wbsSet.WeightsMoney.ToString()); //剩余专业费 int wbsIndex = 0; var childWbsSets = from x in Funs.DB.Wbs_WbsSet where x.SuperWbsSetId == wbsSet.WbsSetId && x.IsApprove == true && x.Weights != null && x.Weights > 0 orderby x.Weights, x.SortIndex, x.WbsSetCode select x; if (childWbsSets.Count() > 0) { var noWeightChildWbsSets = from x in Funs.DB.Wbs_WbsSet where x.SuperWbsSetId == wbsSet.WbsSetId && x.IsApprove == true && (x.Weights == null || x.Weights == 0) orderby x.Weights, x.SortIndex, x.WbsSetCode select x; foreach (var noWeightChildWbsSet in noWeightChildWbsSets) { noWeightChildWbsSet.WeightsMoney = 0; BLL.WbsSetService.UpdateWbsSet(noWeightChildWbsSet); } foreach (var childWbsSet in childWbsSets) { if (wbsIndex < childWbsSets.Count() - 1) { childWbsSet.WeightsMoney = decimal.Round(Convert.ToDecimal(wbsSet.WeightsMoney * childWbsSet.Weights / 100), 2); } else { childWbsSet.WeightsMoney = surplusWbsSetWeightsMoney; } BLL.WbsSetService.UpdateWbsSet(childWbsSet); surplusWbsSetWeightsMoney = surplusWbsSetWeightsMoney - Funs.GetNewDecimalOrZero(childWbsSet.WeightsMoney.ToString()); UpdateWbsSetWeights(childWbsSet); wbsIndex++; } } } #endregion } }