public ActionResult WBSMultiUserSelect() { string projectInfoID = this.Request["ProjectInfoID"]; var projectInfo = this.entities.Set <S_I_ProjectInfo>().Find(projectInfoID); if (projectInfo == null) { throw new Formula.Exceptions.BusinessException("未能找到ID为【" + projectInfoID + "】的项目对象"); } //string wbsTypes = this.Request["WBSTypes"]; //var mode = BaseConfigFO.GetMode(projectInfo.ModeCode); //if (mode == null) throw new Formula.Exceptions.BusinessException("编码为【" + projectInfo.ModeCode + "】的管理模式定义不存在"); //var roleDefines = new List<S_T_WBSStructRole>(); //foreach (var wbsType in wbsTypes.Split(',')) //{ // var wbsStructNode = mode.S_T_WBSStructInfo.FirstOrDefault(d => d.Code == wbsType); // if (wbsStructNode == null) throw new Formula.Exceptions.BusinessException("未找到WBS节点定义,请确认【" + projectInfo.ModeCode + "】管理模式中存在【" + wbsType + "】的WBS定义"); // var _roleDefines = wbsStructNode.S_T_WBSStructRole.Where(d => d.RoleCode != ProjectRole.ProjectManager.ToString()).OrderBy(d => d.SortIndex).ToList(); // foreach (var _roleDefine in _roleDefines) // { // if (!roleDefines.Any(a => a.RoleCode == _roleDefine.RoleCode && a.RoleName == _roleDefine.RoleName)) // roleDefines.Add(_roleDefine); // } //} var roleCodes = this.GetQueryString("RoleCodes").Split(','); ViewBag.RoleDefines = BaseConfigFO.GetRoleDefineList().Where(a => roleCodes.Contains(a.RoleCode)).OrderBy(a => a.SortIndex).ToList(); ViewBag.ProjectClass = projectInfo.ProjectClass; ViewBag.ProjectLevel = projectInfo.ProjectLevel; ViewBag.MajorCodes = GetQueryString("MajorCodes"); return(View()); }
/// <summary> /// 同步项目负责人,项目副经理,主管副总工,计划工程师,质量工程师,文档工程师写进RBS /// </summary> public void SynchRBSUser(Dictionary <string, string> dic, S_W_WBS rootWBS = null) { if (rootWBS == null) { var projectEntities = FormulaHelper.GetEntities <ProjectEntities>(); //获取项目信息 var projectInfo = projectEntities.Set <S_I_ProjectInfo>().Find(this.ProjectInfoID); if (projectInfo == null) { throw new Formula.Exceptions.BusinessException("根据当前项目策划单,未找到对应的项目信息"); } rootWBS = projectInfo.WBSRoot; if (rootWBS == null) { throw new Formula.Exceptions.BusinessException("未获取到当前项目的WBS根节点。"); } } if (rootWBS.WBSType != WBSNodeType.Project.ToString()) { throw new Formula.Exceptions.BusinessException("非根节点WBS,不可将项目主要干系人信息同步至RBS"); } if (rootWBS == null) { throw new Formula.Exceptions.BusinessException("未获取到当前项目的WBS根节点。"); } //将项目负责人,项目副经理,主管副总工,计划工程师,质量工程师,文档工程师写进RBS rootWBS.SetUsers(ProjectRole.ProjectManager.ToString(), this.ChargeUser.Split(','), true, true);//项目负责人 //c_hua 2018/10/08 根据角色定义与表单字段动态写入RBS var roleList = BaseConfigFO.GetRoleDefineList().Where(a => dic.ContainsKey(a.RoleCode) && !string.IsNullOrEmpty(dic.GetValue(a.RoleCode))); foreach (var roleDef in roleList) { rootWBS.SetUsers(roleDef.RoleCode, dic.GetValue(roleDef.RoleCode).Split(','), true, true); } }
protected override void OnFlowEnd(T_SC_PetrifactionProjectScheme entity, Workflow.Logic.Domain.S_WF_InsTaskExec taskExec, Workflow.Logic.Domain.S_WF_InsDefRouting routing) { var projectInfo = this.BusinessEntities.Set <S_I_ProjectInfo>().Find(entity.ProjectInfoID); if (projectInfo == null) { throw new Formula.Exceptions.BusinessException("根据当前项目策划单,未找到对应的项目信息"); } List <Dictionary <string, object> > majorUserList = null; if (!string.IsNullOrEmpty(entity.MajorList)) { majorUserList = JsonHelper.ToList(entity.MajorList); } projectInfo.SynchMajorData(entity.Major); //从RBS同步人员到obs projectInfo.ResetOBSUserFromRBS(); //人员加到obs表,以便wbs策划时快速选人 if (majorUserList != null) { var roleDefineList = BaseConfigFO.GetRoleDefineList(); foreach (var majorNode in majorUserList) { var roleList = roleDefineList.Where(a => majorNode.ContainsKey(a.RoleCode) && !string.IsNullOrEmpty(majorNode.GetValue(a.RoleCode))); foreach (var roleDef in roleList) { foreach (var userID in majorNode.GetValue(roleDef.RoleCode).Split(',')) { var user = FormulaHelper.GetService <IUserService>().GetUserInfoByID(userID); projectInfo.SetOBSUser(user, roleDef.RoleCode, majorNode.GetValue("MajorCode"), majorNode.GetValue("MajorName")); } } } } //base.OnFlowEnd(entity, taskExec, routing); }
/// <summary> /// 根据阶段、子项信息、专业信息同步WBS节点 /// </summary> public void SynchWBSNode(Dictionary <string, string> dic, S_W_WBS rootWBS = null) { var enumService = FormulaHelper.GetService <IEnumService>(); var userInfo = FormulaHelper.GetUserInfo(); var projectEntities = FormulaHelper.GetEntities <ProjectEntities>(); var projectInfo = projectEntities.Set <S_I_ProjectInfo>().Find(this.ProjectInfoID); if (projectInfo == null) { throw new Formula.Exceptions.BusinessException("根据当前项目策划单,未找到对应的项目信息"); } if (rootWBS == null) { //获取项目信息 rootWBS = projectInfo.WBSRoot; if (rootWBS == null) { throw new Formula.Exceptions.BusinessException("未获取到当前项目的WBS根节点。"); } } var detailList = this.T_SC_SchemeForm_OEM_Szsow_SubProjectList.OrderBy(d => d.SortIndex).ToList(); var roleDefineList = BaseConfigFO.GetRoleDefineList(); var phaseWBSes = rootWBS.Children.ToList(); var phaseAttrs = BaseConfigFO.GetWBSAttrList(WBSNodeType.Phase); foreach (var phaseValue in projectInfo.PhaseValue.Split(',')) { #region 阶段节点 var phaseName = enumService.GetEnumText("Project.Phase", phaseValue); var attr = phaseAttrs.FirstOrDefault(a => a.Code == phaseValue); if (attr == null) { throw new Formula.Exceptions.BusinessException("未定义阶段【" + phaseValue + "】" + phaseName + ",操作失败"); } var phaseWBSNode = phaseWBSes.FirstOrDefault(d => d.WBSValue == phaseValue && d.WBSType == WBSNodeType.Phase.ToString()); if (phaseWBSNode == null) { phaseWBSNode = new S_W_WBS(); phaseWBSNode.ID = FormulaHelper.CreateGuid(); phaseWBSNode.WBSType = WBSNodeType.Phase.ToString(); phaseWBSNode.Name = phaseName; phaseWBSNode.Code = attr.WBSCode; phaseWBSNode.WBSValue = attr.Code; rootWBS.AddChild(phaseWBSNode); } else { phaseWBSNode.Name = phaseName; phaseWBSNode.Code = attr.WBSCode; phaseWBSNode.WBSValue = attr.Code; phaseWBSNode.Save(); phaseWBSes.Remove(phaseWBSNode); } #endregion #region 子项节点 var subwbses = phaseWBSNode.Children.ToList(); foreach (var subProject in detailList.Where(a => a.PhaseValue.Split(',').Contains(phaseValue)).ToList()) { var subWBSNode = subwbses.FirstOrDefault(d => d.WBSValue == subProject.Code && d.WBSType == WBSNodeType.SubProject.ToString()); if (subWBSNode == null) { subWBSNode = new S_W_WBS(); subWBSNode.ID = FormulaHelper.CreateGuid(); subWBSNode.WBSType = WBSNodeType.SubProject.ToString(); subWBSNode.Name = subProject.Name; subWBSNode.Code = ""; subWBSNode.WBSValue = subProject.Code; subWBSNode.ExtField1 = subProject.Area.HasValue ? subProject.Area.ToString() : ""; subWBSNode.ExtField2 = subProject.Unit; phaseWBSNode.AddChild(subWBSNode); } else { subWBSNode.Name = subProject.Name; subWBSNode.WBSValue = subProject.Code; subWBSNode.ExtField1 = subProject.Area.HasValue ? subProject.Area.ToString() : ""; subWBSNode.ExtField2 = subProject.Unit; subWBSNode.Save(); subwbses.Remove(subWBSNode); } subProject.PhaseWBSID = phaseWBSNode.ID; #region 新增单体 var wonomerList = subWBSNode.S_W_Monomer.ToList(); if (String.IsNullOrEmpty(subProject.Unit)) { var wonomer = wonomerList.FirstOrDefault(d => d.Name == subProject.Name); if (wonomer == null) { wonomer = new S_W_Monomer(); wonomer.ID = FormulaHelper.CreateGuid(); wonomer.Name = subProject.Name; wonomer.ProjectInfoID = this.ProjectInfoID; wonomer.Code = ""; wonomer.CreateDate = DateTime.Now; wonomer.CreateUser = userInfo.UserName; wonomer.CreateUserID = userInfo.UserID; wonomer.SchemeFormSubID = this.ID; subWBSNode.S_W_Monomer.Add(wonomer); } } else if (!string.IsNullOrEmpty(subProject.Name)) { foreach (var item in subProject.Unit.Replace(",", ",").Split(',')) { var wonomer = subWBSNode.S_W_Monomer.FirstOrDefault(d => d.Name == item); if (wonomer == null) { wonomer = new S_W_Monomer(); wonomer.ID = FormulaHelper.CreateGuid(); wonomer.Name = item; wonomer.ProjectInfoID = this.ProjectInfoID; wonomer.Code = ""; wonomer.CreateDate = DateTime.Now; wonomer.CreateUser = userInfo.UserName; wonomer.CreateUserID = userInfo.UserID; wonomer.SchemeFormSubID = this.ID; subWBSNode.S_W_Monomer.Add(wonomer); } else { wonomerList.Remove(wonomer); } } } foreach (var delWonomer in wonomerList) //移除不需要的单体 { projectEntities.S_W_Monomer.Remove(delWonomer); } #endregion //增加名称判断逻辑 if (string.IsNullOrEmpty(subProject.Name)) { //将空名子项的专业挂到阶段下 SynchMajorWBSNode(roleDefineList, subWBSNode.Parent, subProject.RBSJson); //删除空名子项 subWBSNode.Delete(); //排除在阶段下的专业 var rbsDicList = JsonHelper.ToList(subProject.RBSJson ?? MajorList); subwbses.RemoveAll(a => rbsDicList.Any(b => a.WBSValue == b.GetValue("MajorCode"))); } else { subProject.SubProjectWBSID = subWBSNode.ID; SynchMajorWBSNode(roleDefineList, subWBSNode, subProject.RBSJson); } //this.InitMileStone(subWBSNode); } #endregion //删除阶段节点下多余的子项和专业 subwbses.ForEach(t => { if (t.WBSType == WBSNodeType.Major.ToString()) { //删除阶段下层专业时,同时删除挂在阶段下的专业计划、发图计划 projectEntities.Set <S_P_MileStone>().Delete(d => d.WBSID == phaseWBSNode.ID && d.MajorValue == t.WBSValue); } t.Delete(); }); } phaseWBSes.ForEach(t => t.Delete()); //删除多余的阶段 this.SubProjectList = JsonHelper.ToJson <List <T_SC_SchemeForm_OEM_Szsow_SubProjectList> >(detailList); }
public void Push(Dictionary <string, string> dic) { var projectEntities = FormulaHelper.GetEntities <ProjectEntities>(); var projectInfo = projectEntities.Set <S_I_ProjectInfo>().Find(this.ProjectInfoID); if (projectInfo == null) { throw new Formula.Exceptions.BusinessException("根据当前项目策划单,未找到对应的项目信息"); } var rootWBS = projectInfo.WBSRoot; if (rootWBS == null) { throw new Formula.Exceptions.BusinessException("未获取到当前项目的WBS根节点。"); } if (!String.IsNullOrEmpty(this.Code)) { projectInfo.Code = this.Code; } if (this.PlanStartDate.HasValue) { projectInfo.PlanStartDate = this.PlanStartDate; } if (this.PlanFinishDate.HasValue) { projectInfo.PlanFinishDate = this.PlanFinishDate; } this.SynchRBSUser(dic); var selectMajorList = this.Major.Split(','); #region 回写专业信息 //移除未选中的专业 var removeMajorList = projectInfo.S_W_WBS.Where(d => d.WBSType == WBSNodeType.Major.ToString() && !selectMajorList.Contains(d.WBSValue)).ToList(); foreach (var item in removeMajorList) { item.Delete(); } var roleDefineList = BaseConfigFO.GetRoleDefineList(); var majorAttrList = BaseConfigFO.GetWBSAttrList(WBSNodeType.Major); if (!string.IsNullOrEmpty(this.MajorList)) { var majorNodes = JsonHelper.ToList(this.MajorList); foreach (var item in majorNodes) { var majorCode = item.GetValue("MajorCode"); var attr = majorAttrList.FirstOrDefault(d => d.Code == majorCode); if (attr == null) { throw new Formula.Exceptions.BusinessException("未定义专业【" + majorCode + "】" + item.GetValue("MajorName") + ",操作失败"); } var major = projectInfo.S_W_WBS.FirstOrDefault(d => d.WBSValue == majorCode && d.WBSType == WBSNodeType.Major.ToString()); if (major == null) { major = new S_W_WBS(); major.Name = attr.Name; major.Code = attr.WBSCode; major.WBSValue = attr.Code; major.MajorCode = attr.Code; major.WBSType = WBSNodeType.Major.ToString(); major.SortIndex = attr.SortIndex; projectInfo.WBSRoot.AddChild(major); } else { major.PhaseCode = projectInfo.PhaseValue; } //if (!string.IsNullOrEmpty(item.MajorPrinciple)) // major.SetUsers(ProjectRole.MajorPrinciple.ToString(), item.MajorPrinciple.Split(','), true, true, true, true); //if (!string.IsNullOrEmpty(item.MajorEngineer)) // major.SetUsers(ProjectRole.MajorEngineer.ToString(), item.MajorEngineer.Split(','), true, true, true, true); //if (!string.IsNullOrEmpty(item.Designer)) // major.SetUsers(ProjectRole.Designer.ToString(), item.Designer.Split(','), true, true, true, true); //if (!string.IsNullOrEmpty(item.Collactor)) // major.SetUsers(ProjectRole.Collactor.ToString(), item.Collactor.Split(','), true, true, true, true); //if (!string.IsNullOrEmpty(item.Auditor)) // major.SetUsers(ProjectRole.Auditor.ToString(), item.Auditor.Split(','), true, true, true, true); //if (!string.IsNullOrEmpty(item.Approver)) // major.SetUsers(ProjectRole.Approver.ToString(), item.Approver.Split(','), true, true, true, true); var roleList = roleDefineList.Where(a => item.ContainsKey(a.RoleCode) && !string.IsNullOrEmpty(item.GetValue(a.RoleCode))); foreach (var roleDef in roleList) { major.SetUsers(roleDef.RoleCode, item.GetValue(roleDef.RoleCode).Split(','), true, true, true, true); } } } var wbsMajorList = projectInfo.S_W_WBS.Where(d => d.WBSType == WBSNodeType.Major.ToString()). Select(d => new { Name = d.Name, Value = d.WBSValue, SortIndex = d.SortIndex }).OrderBy(c => c.SortIndex).ToList(); projectInfo.Major = JsonHelper.ToJson(wbsMajorList); var wonomerList = projectInfo.WBSRoot.S_W_Monomer.ToList(); var userInfo = FormulaHelper.GetUserInfo(); if (wonomerList.Count == 0) { var wonomer = new S_W_Monomer(); wonomer.ID = FormulaHelper.CreateGuid(); wonomer.Name = projectInfo.Name; wonomer.ProjectInfoID = this.ProjectInfoID; wonomer.Code = ""; wonomer.CreateDate = DateTime.Now; wonomer.CreateUser = userInfo.UserName; wonomer.CreateUserID = userInfo.UserID; wonomer.SchemeFormSubID = this.ID; projectInfo.WBSRoot.S_W_Monomer.Add(wonomer); } #endregion var detailMileStoneList = this.T_SC_SingleProjectScheme_MileStoneList.ToList(); #region 除里程碑 var selectCodes = detailMileStoneList.Select(a => a.Code).ToList(); var deleteMileStoneList = projectInfo.S_P_MileStone.Where(a => !selectCodes.Contains(a.Code)).ToList(); foreach (var item in deleteMileStoneList) { item.Delete(); } #endregion #region 更新进度计划 for (int i = 0; i < detailMileStoneList.Count; i++) { var item = detailMileStoneList.ToList()[i]; var mileStone = projectEntities.S_P_MileStone.FirstOrDefault(d => d.Code == item.Code && d.WBSID == projectInfo.WBSRoot.ID && d.ProjectInfoID == this.ProjectInfoID); if (mileStone == null) { mileStone = new S_P_MileStone(); mileStone.ID = FormulaHelper.CreateGuid(); mileStone.Name = item.Name; mileStone.Code = item.Code; mileStone.MileStoneValue = item.Code; mileStone.WBSID = projectInfo.WBSRoot.ID; mileStone.ProjectInfoID = projectInfo.ID; mileStone.OrlPlanFinishDate = item.PlanEndDate; mileStone.S_I_ProjectInfo = projectInfo; } if (mileStone.State == ProjectCommoneState.Finish.ToString()) { continue; } mileStone.PlanFinishDate = item.PlanEndDate; mileStone.Weight = item.Weight; mileStone.MajorValue = item.Major; mileStone.TemplateID = item.TemplateID; mileStone.MileStoneType = item.MileStoneType; mileStone.Name = item.Name; if (projectInfo.ProjectMode.ExtentionObject.GetValue("Ext_MsDataIsFromLastVertion") == TrueOrFalse.True.ToString()) { mileStone.SortIndex = Convert.ToInt32(item.SortIndex.HasValue ? Convert.ToDecimal(item.SortIndex) * 100 : i); } else { var template = projectInfo.ProjectMode.S_T_MileStone.FirstOrDefault(d => d.ID == item.TemplateID); if (template != null) { mileStone.SortIndex = template.SortIndex; } if (!mileStone.SortIndex.HasValue) { mileStone.SortIndex = item.SortIndex.HasValue ? Convert.ToInt32(item.SortIndex) : i; } } mileStone.Description = item.Remark; mileStone.Save(); if (mileStone.MileStoneType == MileStoneType.Cooperation.ToString()) { mileStone.OutMajorValue = item.InMajor; var cooperationPlan = projectEntities.S_P_CooperationPlan.FirstOrDefault(d => d.SchemeWBSID == projectInfo.WBSRoot.ID && d.CooperationValue == mileStone.MileStoneValue); if (cooperationPlan == null) { cooperationPlan = new S_P_CooperationPlan(); cooperationPlan.InMajorValue = item.InMajor; cooperationPlan.OutMajorValue = item.OutMajor; cooperationPlan.MileStoneID = mileStone.ID; cooperationPlan.ID = FormulaHelper.CreateGuid(); cooperationPlan.CooperationContent = mileStone.Name; cooperationPlan.CooperationValue = mileStone.MileStoneValue; cooperationPlan.OrPlanFinishDate = item.PlanEndDate; cooperationPlan.PlanFinishDate = item.PlanEndDate; } if (!cooperationPlan.OrPlanFinishDate.HasValue) { cooperationPlan.OrPlanFinishDate = item.PlanEndDate; } cooperationPlan.PlanFinishDate = item.PlanEndDate; if (projectInfo.WBSRoot != null) { projectInfo.WBSRoot.SaveCooperationPlan(cooperationPlan); } } } #endregion //根据RBS更新OBS projectInfo.ResetOBSUserFromRBS(); projectInfo.State = ProjectCommoneState.Execute.ToString(); }
public void Push(Dictionary <string, string> dic) { var projectEntities = FormulaHelper.GetEntities <ProjectEntities>(); var projectInfo = projectEntities.Set <S_I_ProjectInfo>().Find(this.ProjectInfoID); if (projectInfo == null) { throw new Formula.Exceptions.BusinessException("根据当前项目策划单,未找到对应的项目信息"); } var rootWBS = projectInfo.WBSRoot; if (rootWBS == null) { throw new Formula.Exceptions.BusinessException("未获取到当前项目的WBS根节点。"); } if (!String.IsNullOrEmpty(this.Code)) { projectInfo.Code = this.Code; } if (this.PlanStartDate.HasValue) { projectInfo.PlanStartDate = this.PlanStartDate; } if (this.PlanFinishDate.HasValue) { projectInfo.PlanFinishDate = this.PlanFinishDate; } this.SynchRBSUser(dic); var selectMajorList = this.Major.Split(','); #region 更新预留工时、管理工时CBS var cbsRoot = projectInfo.CBSRoot; var nodeType = CBSNodeType.Category.ToString(); var categoryType = CBSCategoryType.Reserve.ToString(); var enums = EnumBaseHelper.GetEnumDef(typeof(CBSCategoryType)); //预留工时 var reserveCBS = cbsRoot.Children.FirstOrDefault(d => d.NodeType == nodeType && d.Code == categoryType); if (reserveCBS == null) { reserveCBS = new S_C_CBS(); reserveCBS.Name = enums.EnumItem.FirstOrDefault(a => a.Code == categoryType).Name; reserveCBS.Code = categoryType; reserveCBS.NodeType = nodeType; reserveCBS.CBSType = CBSType.LabourExpense.ToString(); reserveCBS.SortIndex = 0; reserveCBS.CreateUserID = this.CreateUserID; reserveCBS.CreateUser = this.CreateUser; cbsRoot.AddChild(reserveCBS); } reserveCBS.Quantity = this.ReserveWorkload ?? 0; reserveCBS.TotalPrice = reserveCBS.Quantity.Value * reserveCBS.UnitPrice.Value; //管理工时 categoryType = CBSCategoryType.Manage.ToString(); var manageCBS = cbsRoot.Children.FirstOrDefault(d => d.NodeType == nodeType && d.Code == categoryType); if (manageCBS == null) { manageCBS = new S_C_CBS(); manageCBS.Name = enums.EnumItem.FirstOrDefault(a => a.Code == categoryType).Name; manageCBS.Code = categoryType; manageCBS.NodeType = nodeType; manageCBS.CBSType = CBSType.LabourExpense.ToString(); manageCBS.SortIndex = 1; manageCBS.CreateUserID = this.CreateUserID; manageCBS.CreateUser = this.CreateUser; cbsRoot.AddChild(manageCBS); } //删除不存在的 var subManageWorkloadList = this.T_SC_ElectricalPowerProjectScheme_ManageWorkloadList.ToList(); var removeManageList = manageCBS.Children.Where(d => !subManageWorkloadList.Select(a => a.Item).Contains(d.Code)).ToList(); foreach (var item in removeManageList) { item.Delete(); } foreach (var item in subManageWorkloadList) { var _mcbs = manageCBS.Children.FirstOrDefault(a => a.Code == item.Item); if (_mcbs == null) { _mcbs = new S_C_CBS(); _mcbs.Name = item.ItemName; _mcbs.Code = item.Item; _mcbs.NodeType = CBSNodeType.CBS.ToString(); _mcbs.CBSType = CBSType.LabourExpense.ToString(); _mcbs.SortIndex = item.SortIndex; _mcbs.CreateUserID = this.CreateUserID; _mcbs.CreateUser = this.CreateUser; manageCBS.AddChild(_mcbs); } else { _mcbs.ModifyUserID = this.CreateUserID; _mcbs.ModifyUser = this.CreateUser; _mcbs.ModifyDate = DateTime.Now; } _mcbs.Quantity = item.ManageWorkload ?? 0; _mcbs.TotalPrice = _mcbs.Quantity.Value * _mcbs.UnitPrice.Value; } manageCBS.SummayQuantity(); #endregion var ProjectTaskWorkList = new List <S_W_TaskWork>(); var DetailTaskWorkList = this.T_SC_ElectricalPowerProjectScheme_TaskWorkList.ToList(); #region 除卷册 if (!string.IsNullOrEmpty(this.TaskWorkList)) { var selectids = DetailTaskWorkList.Select(a => a.TaskWorkID).ToList(); ProjectTaskWorkList = projectEntities.Set <S_W_TaskWork>().Where(a => a.ProjectInfoID == projectInfo.ID).ToList(); var deleteList = ProjectTaskWorkList.Where(a => !selectids.Contains(a.ID)).ToList(); foreach (var item in deleteList) { item.Delete(); ProjectTaskWorkList.Remove(item); } } #endregion #region 回写专业信息,专业工时CBS //移除未选中的专业 var removeMajorList = projectInfo.S_W_WBS.Where(d => d.WBSType == WBSNodeType.Major.ToString() && !selectMajorList.Contains(d.WBSValue)).ToList(); foreach (var item in removeMajorList) { item.Delete(); } #region 专业工时 categoryType = CBSCategoryType.Product.ToString(); var productCBS = cbsRoot.Children.FirstOrDefault(d => d.NodeType == nodeType && d.Code == categoryType); if (productCBS == null) { productCBS = new S_C_CBS(); productCBS.Name = enums.EnumItem.FirstOrDefault(a => a.Code == categoryType).Name; productCBS.Code = categoryType; productCBS.NodeType = nodeType; productCBS.CBSType = CBSType.LabourExpense.ToString(); productCBS.SortIndex = 2; productCBS.CreateUserID = this.CreateUserID; productCBS.CreateUser = this.CreateUser; cbsRoot.AddChild(productCBS); } //删除不存在的 var removeMajorWorkloadList = productCBS.Children.Where(d => !selectMajorList.Contains(d.Code)).ToList(); foreach (var item in removeMajorWorkloadList) { item.Delete(); } #endregion var roleDefineList = BaseConfigFO.GetRoleDefineList(); var majorAttrList = BaseConfigFO.GetWBSAttrList(WBSNodeType.Major); if (!string.IsNullOrEmpty(this.MajorList)) { var majorNodes = JsonHelper.ToList(this.MajorList); foreach (var item in majorNodes) { var majorCode = item.GetValue("MajorCode"); var majorName = item.GetValue("MajorName"); var attr = majorAttrList.FirstOrDefault(d => d.Code == majorCode); if (attr == null) { throw new Formula.Exceptions.BusinessException("未定义专业【" + majorCode + "】" + majorName + ",操作失败"); } var major = projectInfo.S_W_WBS.FirstOrDefault(d => d.WBSValue == majorCode && d.WBSType == WBSNodeType.Major.ToString()); if (major == null) { major = new S_W_WBS(); major.Name = attr.Name; major.Code = attr.WBSCode; major.WBSValue = attr.Code; major.WBSType = WBSNodeType.Major.ToString(); major.SortIndex = attr.SortIndex; projectInfo.WBSRoot.AddChild(major); } //if (!string.IsNullOrEmpty(item.MajorPrinciple)) // major.SetUsers(ProjectRole.MajorPrinciple.ToString(), item.MajorPrinciple.Split(','), true, true, true, true); //if (!string.IsNullOrEmpty(item.MajorEngineer)) // major.SetUsers(ProjectRole.MajorEngineer.ToString(), item.MajorEngineer.Split(','), true, true, true, true); //if (!string.IsNullOrEmpty(item.Designer)) // major.SetUsers(ProjectRole.Designer.ToString(), item.Designer.Split(','), true, true, true, true); //if (!string.IsNullOrEmpty(item.Collactor)) // major.SetUsers(ProjectRole.Collactor.ToString(), item.Collactor.Split(','), true, true, true, true); //if (!string.IsNullOrEmpty(item.Auditor)) // major.SetUsers(ProjectRole.Auditor.ToString(), item.Auditor.Split(','), true, true, true, true); //if (!string.IsNullOrEmpty(item.Approver)) // major.SetUsers(ProjectRole.Approver.ToString(), item.Approver.Split(','), true, true, true, true); var roleList = roleDefineList.Where(a => item.ContainsKey(a.RoleCode) && !string.IsNullOrEmpty(item.GetValue(a.RoleCode))); foreach (var roleDef in roleList) { major.SetUsers(roleDef.RoleCode, item.GetValue(roleDef.RoleCode).Split(','), true, true, true, true); } #region 卷册 if (!string.IsNullOrEmpty(this.TaskWorkList)) { var list = DetailTaskWorkList.Where(a => a.Major == major.WBSValue).ToList(); foreach (var detail in list) { var task = ProjectTaskWorkList.FirstOrDefault(a => a.ID == detail.TaskWorkID); if (task == null) { task = new S_W_TaskWork(); task.State = TaskWorkState.Plan.ToString(); } task.Name = detail.Name; task.Code = detail.Code; task.MajorValue = detail.Major; task.PhaseValue = detail.Phase; if (string.IsNullOrEmpty(task.ID)) { task.ID = detail.TaskWorkID; //根据专业同步人员 task.FillWBSUser(major); major.AddTaskWork(task); } else { task.Save(); } task.DossierCode = detail.DossierCode; task.DossierName = detail.DossierName; task.S_W_WBS.PhaseCode = task.PhaseValue; //修改成果的阶段、专业、卷号 foreach (var product in task.S_W_WBS.S_E_Product.ToList()) { product.PhaseValue = task.PhaseValue; product.MajorValue = task.MajorValue; product.MonomerCode = task.DossierCode; product.MonomerInfo = task.DossierName; product.PackageCode = task.Code; product.PackageName = task.Name; } if (task.Version == null) { task.Version = 1; } } } #endregion #region 专业工时CBS数据 var _mcbs = productCBS.Children.FirstOrDefault(a => a.Code == majorCode); if (_mcbs == null) { _mcbs = new S_C_CBS(); _mcbs.Name = majorName; _mcbs.Code = majorCode; _mcbs.NodeType = CBSNodeType.Major.ToString(); _mcbs.CBSType = CBSType.LabourExpense.ToString(); _mcbs.SortIndex = 0; if (!string.IsNullOrEmpty(item.GetValue("SortIndex"))) { _mcbs.SortIndex = Convert.ToDouble(item.GetValue("SortIndex")); } _mcbs.CreateUserID = this.CreateUserID; _mcbs.CreateUser = this.CreateUser; productCBS.AddChild(_mcbs); } else { _mcbs.ModifyUserID = this.CreateUserID; _mcbs.ModifyUser = this.CreateUser; _mcbs.ModifyDate = DateTime.Now; } _mcbs.Quantity = 0; if (!string.IsNullOrEmpty(item.GetValue("MajorWorkload"))) { _mcbs.Quantity = Convert.ToDecimal(item.GetValue("MajorWorkload")); } _mcbs.TotalPrice = _mcbs.Quantity.Value * _mcbs.UnitPrice.Value; #endregion } } productCBS.SummayQuantity(); var wbsMajorList = projectInfo.S_W_WBS.Where(d => d.WBSType == WBSNodeType.Major.ToString()). Select(d => new { Name = d.Name, Value = d.WBSValue, SortIndex = d.SortIndex }).OrderBy(c => c.SortIndex).ToList(); projectInfo.Major = JsonHelper.ToJson(wbsMajorList); var wonomerList = projectInfo.WBSRoot.S_W_Monomer.ToList(); var userInfo = FormulaHelper.GetUserInfo(); if (wonomerList.Count == 0) { var wonomer = new S_W_Monomer(); wonomer.ID = FormulaHelper.CreateGuid(); wonomer.Name = projectInfo.Name; wonomer.ProjectInfoID = this.ProjectInfoID; wonomer.Code = ""; wonomer.CreateDate = DateTime.Now; wonomer.CreateUser = userInfo.UserName; wonomer.CreateUserID = userInfo.UserID; wonomer.SchemeFormSubID = this.ID; projectInfo.WBSRoot.S_W_Monomer.Add(wonomer); } #endregion var detailMileStoneList = this.T_SC_ElectricalPowerProjectScheme_MileStoneList.ToList(); #region 除里程碑 var selectCodes = detailMileStoneList.Select(a => a.Code).ToList(); var deleteMileStoneList = projectInfo.S_P_MileStone.Where(a => !selectCodes.Contains(a.Code)).ToList(); foreach (var item in deleteMileStoneList) { item.Delete(); } #endregion #region 更新进度计划 for (int i = 0; i < detailMileStoneList.Count; i++) { var item = detailMileStoneList.ToList()[i]; var mileStone = projectEntities.S_P_MileStone.FirstOrDefault(d => d.Code == item.Code && d.WBSID == projectInfo.WBSRoot.ID && d.ProjectInfoID == this.ProjectInfoID); if (mileStone == null) { mileStone = new S_P_MileStone(); mileStone.ID = FormulaHelper.CreateGuid(); mileStone.Name = item.Name; mileStone.Code = item.Code; mileStone.MileStoneValue = item.Code; mileStone.WBSID = projectInfo.WBSRoot.ID; mileStone.ProjectInfoID = projectInfo.ID; mileStone.OrlPlanFinishDate = item.PlanEndDate; mileStone.S_I_ProjectInfo = projectInfo; } if (mileStone.State == ProjectCommoneState.Finish.ToString()) { continue; } mileStone.PlanFinishDate = item.PlanEndDate; mileStone.Weight = item.Weight; mileStone.MajorValue = item.Major; mileStone.TemplateID = item.TemplateID; mileStone.MileStoneType = item.MileStoneType; mileStone.Name = item.Name; if (projectInfo.ProjectMode.ExtentionObject.GetValue("Ext_MsDataIsFromLastVertion") == TrueOrFalse.True.ToString()) { mileStone.SortIndex = Convert.ToInt32(item.SortIndex.HasValue ? Convert.ToDecimal(item.SortIndex) * 100 : i); } else { var template = projectInfo.ProjectMode.S_T_MileStone.FirstOrDefault(d => d.ID == item.TemplateID); if (template != null) { mileStone.SortIndex = template.SortIndex; } if (!mileStone.SortIndex.HasValue) { mileStone.SortIndex = item.SortIndex.HasValue ? Convert.ToInt32(item.SortIndex) : i; } } mileStone.Description = item.Remark; mileStone.Save(); if (mileStone.MileStoneType == MileStoneType.Cooperation.ToString()) { mileStone.OutMajorValue = item.InMajor; var cooperationPlan = projectEntities.S_P_CooperationPlan.FirstOrDefault(d => d.SchemeWBSID == projectInfo.WBSRoot.ID && d.CooperationValue == mileStone.MileStoneValue); if (cooperationPlan == null) { cooperationPlan = new S_P_CooperationPlan(); cooperationPlan.InMajorValue = item.InMajor; cooperationPlan.OutMajorValue = item.OutMajor; cooperationPlan.MileStoneID = mileStone.ID; cooperationPlan.ID = FormulaHelper.CreateGuid(); cooperationPlan.CooperationContent = mileStone.Name; cooperationPlan.CooperationValue = mileStone.MileStoneValue; cooperationPlan.OrPlanFinishDate = item.PlanEndDate; cooperationPlan.PlanFinishDate = item.PlanEndDate; } if (!cooperationPlan.OrPlanFinishDate.HasValue) { cooperationPlan.OrPlanFinishDate = item.PlanEndDate; } cooperationPlan.PlanFinishDate = item.PlanEndDate; if (projectInfo.WBSRoot != null) { projectInfo.WBSRoot.SaveCooperationPlan(cooperationPlan); } } } #endregion //根据RBS更新OBS projectInfo.ResetOBSUserFromRBS(); projectInfo.State = ProjectCommoneState.Execute.ToString(); }
/// <summary> /// 根据子项和专业列表同步WBS表 /// </summary> public void SynchSubProjectWBSNode(Dictionary <string, string> dic, S_W_WBS rootWBS = null) { var userInfo = FormulaHelper.GetUserInfo(); var projectEntities = FormulaHelper.GetEntities <ProjectEntities>(); var projectInfo = projectEntities.Set <S_I_ProjectInfo>().Find(this.ProjectInfoID); if (projectInfo == null) { throw new Formula.Exceptions.BusinessException("根据当前项目策划单,未找到对应的项目信息"); } if (rootWBS == null) { //获取项目信息 rootWBS = projectInfo.WBSRoot; if (rootWBS == null) { throw new Formula.Exceptions.BusinessException("未获取到当前项目的WBS根节点。"); } } var roleDefineList = BaseConfigFO.GetRoleDefineList(); var enumSubProject = WBSNodeType.SubProject.ToString(); var subwbses = rootWBS.Children.ToList(); if (this.T_SC_MixProjectScheme_SubProjectList.ToList().Count == 0) { SynchMajorWBSNode(roleDefineList, rootWBS, ""); subwbses.RemoveWhere(a => a.WBSType == WBSNodeType.Major.ToString()); } foreach (var subProject in this.T_SC_MixProjectScheme_SubProjectList.OrderBy(d => d.SortIndex).ToList()) { var subWBSNode = subwbses.FirstOrDefault(d => d.WBSValue == subProject.Code && d.WBSType == WBSNodeType.SubProject.ToString()); if (subWBSNode == null) { subWBSNode = new S_W_WBS(); subWBSNode.ID = FormulaHelper.CreateGuid(); subWBSNode.WBSType = WBSNodeType.SubProject.ToString(); subWBSNode.Name = subProject.Name; subWBSNode.Code = ""; subWBSNode.WBSValue = subProject.Code; subWBSNode.PhaseCode = subProject.PhaseValue; subWBSNode.ExtField1 = subProject.Area.HasValue ? subProject.Area.ToString() : ""; subWBSNode.ExtField2 = subProject.Unit; rootWBS.AddChild(subWBSNode); } else { subWBSNode.Name = subProject.Name; subWBSNode.PhaseCode = subProject.PhaseValue; subWBSNode.ExtField1 = subProject.Area.HasValue ? subProject.Area.ToString() : ""; subWBSNode.ExtField2 = subProject.Unit; subWBSNode.Save(); subwbses.Remove(subWBSNode); } #region 新增单体 var wonomerList = subWBSNode.S_W_Monomer.ToList(); if (String.IsNullOrEmpty(subProject.Unit)) { var wonomer = wonomerList.FirstOrDefault(d => d.Name == subProject.Name); if (wonomer == null) { wonomer = new S_W_Monomer(); wonomer.ID = FormulaHelper.CreateGuid(); wonomer.Name = subProject.Name; wonomer.ProjectInfoID = this.ProjectInfoID; wonomer.Code = ""; wonomer.CreateDate = DateTime.Now; wonomer.CreateUser = userInfo.UserName; wonomer.CreateUserID = userInfo.UserID; wonomer.SchemeFormSubID = this.ID; subWBSNode.S_W_Monomer.Add(wonomer); } } else { foreach (var item in subProject.Unit.Replace(",", ",").Split(',')) { var wonomer = subWBSNode.S_W_Monomer.FirstOrDefault(d => d.Name == item); if (wonomer == null) { wonomer = new S_W_Monomer(); wonomer.ID = FormulaHelper.CreateGuid(); wonomer.Name = item; wonomer.ProjectInfoID = this.ProjectInfoID; wonomer.Code = ""; wonomer.CreateDate = DateTime.Now; wonomer.CreateUser = userInfo.UserName; wonomer.CreateUserID = userInfo.UserID; wonomer.SchemeFormSubID = this.ID; subWBSNode.S_W_Monomer.Add(wonomer); } else { wonomerList.Remove(wonomer); } } } foreach (var delWonomer in wonomerList) //移除不需要的单体 { projectEntities.S_W_Monomer.Remove(delWonomer); } #endregion SynchMajorWBSNode(roleDefineList, subWBSNode, subProject.RBSJson); //this.InitMileStone(subWBSNode); } subwbses.ForEach(t => t.Delete()); //删除多余的子项 }
protected override void AfterGetData(DataTable dt, bool isNew, string upperVersionID) { if (isNew) { var projectInfoID = dt.Rows[0]["ProjectInfoID"].ToString(); var sql = string.Format("select * from S_W_WBS with(nolock) where ProjectInfoID = '{0}'", projectInfoID); var wbsDT = this.ProjectSQLDB.ExecuteDataTable(sql); sql = string.Format("select * from S_W_RBS where ProjectInfoID = '{0}'", projectInfoID); var rbsDT = this.ProjectSQLDB.ExecuteDataTable(sql); var schemeSubProject = JsonHelper.ToList(dt.Rows[0]["SubProjectList"].ToString()); var schemeMajorList = JsonHelper.ToList(dt.Rows[0]["MajorList"].ToString()); var roleCodes = BaseConfigFO.GetRoleDefineList().Select(a => a.RoleCode).ToArray(); if (schemeMajorList.Count() > 0) { var attendRoles = schemeMajorList[0].Keys.Where(a => roleCodes.Contains(a)).ToArray(); foreach (var subProject in schemeSubProject) { var subProjectWBSID = subProject.GetValue("SubProjectWBSID"); //如果没有子项WBSID,则说明异构结构中,专业直接挂在了阶段节点下 if (String.IsNullOrEmpty(subProjectWBSID)) { subProjectWBSID = subProject.GetValue("PhaseWBSID"); } if (string.IsNullOrEmpty(subProject.GetValue("RBSJson"))) { #region 没有RBSJson //没有RBSJson,说明所有专业都参与 //没有RBSJson,需要判断是否修改过专业人员 var schemeToWrite = new List <Dictionary <string, object> >(); var flag = false; for (int i = 0; i < schemeMajorList.Count(); i++) { var schemeMajor = schemeMajorList[i]; var rbsToWrite = new Dictionary <string, object>(); rbsToWrite.SetValue("SortIndex", i); rbsToWrite.SetValue("MajorName", schemeMajor.GetValue("MajorName")); rbsToWrite.SetValue("MajorCode", schemeMajor.GetValue("MajorCode")); rbsToWrite.SetValue("Valid", "1"); rbsToWrite.SetValue("IsChange", false); var majorWBS = wbsDT.AsEnumerable().Where(a => a["ParentID"].ToString() == subProjectWBSID && a["Code"].ToString() == schemeMajor.GetValue("MajorCode")).ToArray(); if (majorWBS.Length == 0) { continue; } foreach (var aRole in attendRoles) { var rbsList = rbsDT.AsEnumerable().Where(a => a["WBSID"].ToString() == majorWBS[0]["ID"].ToString() && a["RoleCode"].ToString() == aRole).ToArray(); var userIDs = rbsList.Select(a => a["UserID"].ToString()).ToArray(); var userNames = rbsList.Select(a => a["UserName"].ToString()).ToArray(); rbsToWrite.SetValue(aRole, string.Join(",", userIDs)); rbsToWrite.SetValue(aRole + "Name", string.Join(",", userNames)); //判断aRole角色在rbs中和策划的专业人员是否相同 var isSame = true; var schemeMajorRBS = schemeMajor.GetValue(aRole).Split(','); if (userIDs.Length == schemeMajorRBS.Length) { var q = (from a in userIDs join b in schemeMajorRBS on a equals b select a).ToArray(); if (q.Length != userIDs.Length) { isSame = false; } } //schemeMajor.GetValue(aRole)会产生空字符串 else if (!(userIDs.Length == 0 && schemeMajor.GetValue(aRole) == "")) { isSame = false; } if (!isSame) { flag = true; rbsToWrite.SetValue("IsChange", true); } } schemeToWrite.Add(rbsToWrite); } if (flag) { subProject.SetValue("RBSJson", JsonHelper.ToJson(schemeToWrite)); } #endregion } else { #region RBSJson //有RBSJson,替换人员 var schemeRBS = JsonHelper.ToList(subProject.GetValue("RBSJson")); var tmpRBS = JsonHelper.ToList(JsonHelper.ToJson(schemeRBS)); for (int i = 0; i < schemeRBS.Count(); i++) { var sRBS = schemeRBS[i]; if (sRBS.GetValue("Valid") == "1") { var majorWBS = wbsDT.AsEnumerable().Where(a => a["ParentID"].ToString() == subProjectWBSID && a["Code"].ToString() == sRBS.GetValue("MajorCode")).ToArray(); if (majorWBS.Length == 0) { continue; } var roleDefines = sRBS.Keys.Where(a => roleCodes.Contains(a)); foreach (var roleDefine in roleDefines) { var rbsList = rbsDT.AsEnumerable().Where(a => a["WBSID"].ToString() == majorWBS[0]["ID"].ToString() && a["RoleCode"].ToString() == roleDefine).ToArray(); var userIDs = rbsList.Select(a => a["UserID"].ToString()).ToArray(); var userNames = rbsList.Select(a => a["UserName"].ToString()).ToArray(); var schemeUserIDs = tmpRBS[i].GetValue(roleDefine).Split(','); tmpRBS[i].SetValue(roleDefine, string.Join(",", userIDs)); tmpRBS[i].SetValue(roleDefine + "Name", string.Join(",", userNames)); var isSame = true; if (userIDs.Length == schemeUserIDs.Length) { var q = (from a in userIDs join b in schemeUserIDs on a equals b select a).ToArray(); if (q.Length != userIDs.Length) { isSame = false; } } //schemeMajor.GetValue(aRole)会产生空字符串 else if (!(userIDs.Length == 0 && tmpRBS[i].GetValue(roleDefine) == "")) { isSame = false; } if (!isSame) { tmpRBS[i].SetValue("IsChange", true); } } } } subProject.SetValue("RBSJson", JsonHelper.ToJson(tmpRBS)); #endregion } } dt.Rows[0]["SubProjectList"] = JsonHelper.ToJson(schemeSubProject); } } }
public void Push() { var allUser = FormulaHelper.GetService <IUserService>().GetAllUsers(); var userInfo = FormulaHelper.GetUserInfo(); var fo = FormulaHelper.CreateFO <ProjectInfoFO>(); var roleDefine = BaseConfigFO.GetRoleDefineList(); string formData = HttpContext.Current.Request["FormData"]; var dic = JsonHelper.ToObject(formData); var DB = SQLHelper.CreateSqlHelper(ConnEnum.Project); var newRbsDt = DB.ExecuteDataTable("SELECT * FROM S_W_RBS WITH(NOLOCK) WHERE 1<>1"); var wbsDt = DB.ExecuteDataTable("SELECT 'false' as AddState,* FROM S_W_WBS WITH(NOLOCK) WHERE PROJECTINFOID='" + this.ProjectInfoID + "'"); var monomerDt = DB.ExecuteDataTable("SELECT * FROM S_W_Monomer WHIT(NOLOCK) WHERE PROJECTINFOID='" + this.ProjectInfoID + "'"); var projectInfoDt = DB.ExecuteDataTable(String.Format("SELECT * FROM S_I_PROJECTINFO WHERE ID='{0}'", this.ProjectInfoID)); if (projectInfoDt.Rows.Count == 0) { throw new Formula.Exceptions.BusinessException("根据当前项目策划单,未找到对应的项目信息"); } var projectRow = projectInfoDt.Rows[0]; var rootWBS = wbsDt.AsEnumerable().FirstOrDefault(c => c["WBSType"].ToString() == "Project"); if (rootWBS == null) { throw new Formula.Exceptions.BusinessException("未获取到当前项目的WBS根节点。"); } var configBaseEntities = FormulaHelper.GetEntities <BaseConfigEntities>(); var modeCode = projectRow["ModeCode"].ToString(); var mode = configBaseEntities.S_T_ProjectMode.FirstOrDefault(c => c.ModeCode == modeCode); if (mode == null) { throw new Formula.Exceptions.BusinessValidationException("没有找到对应的项目模式,策划失败"); } var structList = mode.S_T_WBSStructInfo.ToList(); var sqlCommand = new StringBuilder(); var newMonomerDT = monomerDt.Clone(); #region 设置项目的RBS //重设项目经理 if (!String.IsNullOrEmpty(this.ChargeUser)) { var pmRoleDefine = roleDefine.FirstOrDefault(c => c.RoleCode == ProjectRole.ProjectManager.ToString()); if (pmRoleDefine == null) { throw new Formula.Exceptions.BusinessException("没有项目负责人的角色定义,无法设置项目负责人。"); } sqlCommand.AppendLine(String.Format("DELETE FROM S_W_RBS WHERE WBSID='{0}' AND ROLECODE='{1}'", rootWBS["ID"], ProjectRole.ProjectManager.ToString())); foreach (var userID in this.ChargeUser.Split(',')) { var user = allUser.SingleOrDefault(c => c.UserID == userID); if (user == null) { continue; } addRbsDt(userInfo, newRbsDt, rootWBS, pmRoleDefine); } } var roleList = BaseConfigFO.GetRoleDefineList().Where(a => dic.ContainsKey(a.RoleCode) && !string.IsNullOrEmpty(dic.GetValue(a.RoleCode))); foreach (var roleDef in roleList) { sqlCommand.AppendLine(String.Format("DELETE FROM S_W_RBS WHERE WBSID='{0}' AND ROLECODE='{1}'", rootWBS["ID"], roleDef.RoleCode)); foreach (var userID in dic.GetValue(roleDef.RoleCode).Split(',')) { var user = allUser.SingleOrDefault(c => c.UserID == userID); if (user == null) { continue; } addRbsDt(user, newRbsDt, rootWBS, roleDef); } } #endregion wbsDt.PrimaryKey = new DataColumn[] { wbsDt.Columns["ID"] }; var subwbsList = wbsDt.AsEnumerable().Where(c => c["ParentID"] != DBNull.Value && c["ParentID"].ToString() == rootWBS["ID"].ToString()); #region 设置WBS if (this.T_SC_SchemeForm_SubProjectList.ToList().Count == 0) //如果没有策划任何子项,则默认建立一个子项,子项名称为项目阶段 { var subProjectListItem = new T_SC_SchemeForm_SubProjectList(); subProjectListItem.ID = FormulaHelper.CreateGuid();; subProjectListItem.Name = projectRow["PhaseName"] == null || projectRow["PhaseName"] == DBNull.Value ? "" : projectRow["PhaseName"].ToString(); subProjectListItem.Code = projectRow["PhaseValue"] == null || projectRow["PhaseValue"] == DBNull.Value ? "" : projectRow["PhaseValue"].ToString(); subProjectListItem.Unit = ""; subProjectListItem.PhaseValue = projectRow["PhaseValue"] == null || projectRow["PhaseValue"] == DBNull.Value ? "" : projectRow["PhaseValue"].ToString(); this.T_SC_SchemeForm_SubProjectList.Add(subProjectListItem); this.SubProjectList = JsonHelper.ToJson(this.T_SC_SchemeForm_SubProjectList); } var subProjectStr = WBSNodeType.SubProject.ToString(); var subPrjWBSNodes = wbsDt.AsEnumerable().Where(a => a["WBSType"].ToString() == subProjectStr).ToList(); //需要删除的子项 var subPrjIDWBSIDs = T_SC_SchemeForm_SubProjectList.Select(a => a.WBSID).ToArray(); var delSubProjects = subPrjWBSNodes.Where(a => !subPrjIDWBSIDs.Contains(a["ID"].ToString())); foreach (var item in delSubProjects) { sqlCommand.AppendLine("delete from S_W_WBS where FullID like '" + item["FullID"].ToString() + "%'"); } foreach (var subProject in this.T_SC_SchemeForm_SubProjectList.OrderBy(d => d.SortIndex).ToList()) { if (String.IsNullOrEmpty(subProject.WBSID)) { subProject.WBSID = FormulaHelper.CreateGuid(); } var subWBSNode = wbsDt.Rows.Find(subProject.WBSID); //subwbsList.FirstOrDefault(d => d["ID"].ToString() == subProject.WBSID); if (subWBSNode == null) { subWBSNode = wbsDt.NewRow(); subWBSNode["ID"] = subProject.WBSID; subWBSNode["Name"] = subProject.Name; subWBSNode["WBSType"] = WBSNodeType.SubProject.ToString(); subWBSNode["WBSValue"] = subProject.Code; subWBSNode["PhaseCode"] = subProject.PhaseValue; subWBSNode["ExtField1"] = subProject.Area.HasValue ? subProject.Area.ToString() : ""; subWBSNode["ExtField2"] = subProject.Unit; fo.AddWBSChildWithAdo(rootWBS, subWBSNode, wbsDt, structList); } else { sqlCommand.AppendLine(String.Format("update S_W_WBS set Name='{0}', PhaseCode='{1}',ExtField1='{2}',ExtField2='{3}' where ID ='{4}'", subProject.Name, subProject.PhaseValue, subProject.Area.HasValue ? subProject.Area.ToString() : "", subProject.Unit, subWBSNode["ID"] )); var allChildren = wbsDt.AsEnumerable().Where(c => c["FullID"].ToString().StartsWith(subWBSNode["FullID"].ToString()) && c["ID"].ToString() != subWBSNode["ID"].ToString()); foreach (DataRow item in allChildren) { sqlCommand.AppendLine(String.Format("update S_W_WBS set PhaseCode='{0}' where ID ='{1}'", subProject.PhaseValue, item["ID"])); } } #region 新增单体 var wonomerList = monomerDt.AsEnumerable().Where(c => c["WBSID"].ToString() == subWBSNode["ID"].ToString()).ToList(); if (String.IsNullOrEmpty(subProject.Unit)) { var wonomer = wonomerList.FirstOrDefault(d => d["Name"].ToString() == subProject.Name); if (wonomer == null) { wonomer = newMonomerDT.NewRow(); wonomer["ID"] = FormulaHelper.CreateGuid(); wonomer["WBSID"] = subWBSNode["ID"].ToString(); wonomer["ProjectInfoID"] = this.ProjectInfoID; wonomer["Name"] = subProject.Name; wonomer["CreateDate"] = DateTime.Now; wonomer["CreateUser"] = userInfo.UserName; wonomer["CreateUserID"] = userInfo.UserID; wonomer["SchemeFormSubID"] = this.ID; wonomer["Code"] = String.IsNullOrEmpty(subProject.Code) ? subProject.Name : subProject.Code; newMonomerDT.Rows.Add(wonomer); } } else { foreach (var item in subProject.Unit.Replace(",", ",").Split(',')) { var wonomer = wonomerList.FirstOrDefault(d => d["Name"].ToString() == item); if (wonomer == null) { wonomer = newMonomerDT.NewRow(); wonomer["ID"] = FormulaHelper.CreateGuid(); wonomer["WBSID"] = subWBSNode["ID"].ToString(); wonomer["ProjectInfoID"] = this.ProjectInfoID; wonomer["Name"] = item; wonomer["CreateDate"] = DateTime.Now; wonomer["CreateUser"] = userInfo.UserName; wonomer["CreateUserID"] = userInfo.UserID; wonomer["SchemeFormSubID"] = this.ID; wonomer["Code"] = item; newMonomerDT.Rows.Add(wonomer); } else { wonomerList.Remove(wonomer); } } } sqlCommand.AppendLine("delete from S_W_Monomer where ID in ('" + String.Join(",", wonomerList.Select(c => c["ID"].ToString())).Replace(",", "','") + "')"); #endregion setMajorNodes(subWBSNode, wbsDt, newRbsDt, roleDefine, subProject.RBSJson, sqlCommand, structList, allUser); } #endregion var newWBSDt = wbsDt.Clone(); var addesRows = wbsDt.AsEnumerable().Where(c => c["AddState"] != null && c["AddState"] != DBNull.Value && c["AddState"].ToString() == "true").ToList(); foreach (var item in addesRows) { newWBSDt.ImportRow(item); } newWBSDt.Columns.Remove("AddState"); if (!String.IsNullOrEmpty(sqlCommand.ToString())) { DB.ExecuteNonQuery(sqlCommand.ToString()); } DB.BulkInsertToDB(newWBSDt, "S_W_WBS"); DB.BulkInsertToDB(newMonomerDT, "S_W_Monomer"); DB.BulkInsertToDB(newRbsDt, "S_W_RBS"); fo.ResetOBSUserFromRBSWithAdo(this.ProjectInfoID); }