Пример #1
0
        /// <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);
            }
        }
Пример #2
0
        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根节点。");
            }

            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).Where(d => this.Major.Contains(d.Code)).ToList();
            foreach (var attr in majorAttrList)
            {
                var major = projectInfo.S_W_WBS.FirstOrDefault(d => d.WBSValue == attr.Code && 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);
                    //var roleList = roleDefineList.Where(a => dic.ContainsKey(a.RoleCode) && !string.IsNullOrEmpty(dic.GetValue(a.RoleCode)));
                    //foreach (var roleDef in roleList)
                    //    major.SetUsers(roleDef.RoleCode, dic.GetValue(roleDef.RoleCode).Split(','), true, true, true, false);
                    major.SetUsers(ProjectRole.MajorPrinciple.ToString(), this.ProjectManager.Split(','));
                    major.SetUsers(ProjectRole.Designer.ToString(), this.Designer.Split(','));
                    major.SetUsers(ProjectRole.Collactor.ToString(), this.Collactor.Split(','));
                    major.SetUsers(ProjectRole.Auditor.ToString(), this.Auditor.Split(','));
                    major.SetUsers(ProjectRole.Approver.ToString(), this.Approver.Split(','));
                }
                else
                {
                    major.PhaseCode = projectInfo.PhaseValue;
                }
            }
            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_SimpleProjectSchmea_MileStone.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.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.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();
        }