예제 #1
0
        //保存时对比数据是否修改
        protected override void BeforeSave(S_NodeInfo node, Dictionary <string, object> row, bool isNew)
        {
            string detail = string.Empty;

            if (!isNew)
            {
                S_NodeInfo oldNode   = new S_NodeInfo(node.ID, node.Space);
                var        nodeAttrs = node.ConfigInfo.S_DOC_NodeAttr.Select(a => a);
                var        enumList  = EnumBaseHelper.GetEnumDef("DocConst.KeepYear").EnumItem;
                foreach (S_DOC_NodeAttr nodeAttr in nodeAttrs)
                {
                    if (nodeAttr.InputType.Equals("ButtonEdit"))
                    {
                        detail += node.DataEntity.GetValue(nodeAttr.AttrField + "Name") == oldNode.DataEntity.GetValue(nodeAttr.AttrField + "Name") ? "" : "\"" + nodeAttr.AttrName + ":" + oldNode.DataEntity.GetValue(nodeAttr.AttrField + "Name") + "\"修改为\"" + node.DataEntity.GetValue(nodeAttr.AttrField + "Name") + "\";";
                    }

                    else if (nodeAttr.InputType.Equals("Combobox"))
                    {
                        var    enums       = EnumBaseHelper.GetEnumDef(nodeAttr.EnumKey).EnumItem;
                        var    enumNameOld = enums.FirstOrDefault(a => a.Code.Equals(oldNode.DataEntity.GetValue(nodeAttr.AttrField)));
                        string oldName     = enumNameOld != null ? enumNameOld.Name : "";
                        var    enumName    = enums.FirstOrDefault(a => a.Code.Equals(node.DataEntity.GetValue(nodeAttr.AttrField)));
                        detail += node.DataEntity.GetValue(nodeAttr.AttrField) == oldNode.DataEntity.GetValue(nodeAttr.AttrField) ? "" : "\"" + nodeAttr.AttrName + ":" + oldName + "\"修改为\"" + enumName.Name + "\";";
                    }
                    else
                    {
                        if (nodeAttr.AttrField.Equals("SortIndex") || nodeAttr.AttrField.Equals("DocIndexID"))
                        {
                            continue;
                        }
                        detail += node.DataEntity.GetValue(nodeAttr.AttrField) == oldNode.DataEntity.GetValue(nodeAttr.AttrField) ? "" : "\"" + nodeAttr.AttrName + ":" + oldNode.DataEntity.GetValue(nodeAttr.AttrField) + "\"修改为\"" + node.DataEntity.GetValue(nodeAttr.AttrField) + "\";";
                    }
                }
                if (!string.IsNullOrEmpty(detail))
                {
                    //修改,详情说明
                    InventoryFO.CreateNewInventoryLedger(oldNode, detail, InventoryType.Update);
                }
            }
        }
예제 #2
0
        public Dictionary <string, object> GetPieChartData(string belongYear)
        {
            var    depts = EnumBaseHelper.GetEnumDef("System.ManDept").EnumItem;
            string sql   = @"select * from (select Sum(ToA1) SumToA1,ChargeDeptID,ChargeDeptName,BelongYear from S_EP_PublishInfo
left join S_I_ProjectInfo on S_EP_PublishInfo.ProjectInfoID=S_I_ProjectInfo.ID
where PublishTime is not null
group by ChargeDeptID,ChargeDeptName,BelongYear ) tableInfo where ChargeDeptID in ('" + string.Join("','", depts.Select(a => a.Code).ToArray()) + @"') ";

            if (!String.IsNullOrEmpty(belongYear))
            {
                sql += " and BelongYear='" + belongYear + "'";
            }
            var db          = SQLHelper.CreateSqlHelper(ConnEnum.Project);
            var dt          = db.ExecuteDataTable(sql);
            var pieChart    = HighChartHelper.CreatePieChart(belongYear + "各部门出图", "出图量", dt, "ChargeDeptName", "SumToA1");
            var chartOption = pieChart.Render();
            var credits     = new Dictionary <string, object>();

            credits.SetValue("enabled", false);
            chartOption.SetValue("credits", credits);
            return(chartOption);
        }
예제 #3
0
        public JsonResult GetMenu(string ID)
        {
            var wbs = this.GetEntityByID <S_D_WBSTemplateNode>(ID);

            if (wbs == null)
            {
                throw new Formula.Exceptions.BusinessException("未能找到ID为【" + ID + "】的WBS对象");
            }
            if (wbs.StructNodeInfo == null)
            {
                throw new Formula.Exceptions.BusinessException("WBS节点未定义类别,无法显示菜单");
            }
            var childNodeCodes = wbs.StructNodeInfo.ChildCode.Split(',');
            List <Dictionary <string, object> > result = new List <Dictionary <string, object> >();

            foreach (var item in childNodeCodes)
            {
                var menuItem = new Dictionary <string, object>();
                var name     = EnumBaseHelper.GetEnumDescription(typeof(WBSNodeType), item);

                menuItem["name"]    = item;
                menuItem["text"]    = "增加" + name;
                menuItem["iconCls"] = "icon-add";
                menuItem["onClick"] = "addNode";
                var attrDefineList = BaseConfigFO.GetWBSAttrList(item);
                if (attrDefineList.Count > 0)
                {
                    menuItem["attrDefine"] = "true";
                }
                else
                {
                    menuItem["attrDefine"] = "false";
                }
                result.Add(menuItem);
            }
            string json = JsonHelper.ToJson(result);

            return(Json(result));
        }
예제 #4
0
        public void SynchWorkDaysBySingleUserId(string userId, string roleCode, float workDay = 0)
        {
            var entities        = FormulaHelper.GetEntities <ProjectEntities>();
            var currentUserInfo = FormulaHelper.GetUserInfo();

            if (!this.IsUserExistedOfRoleCode(userId, roleCode))
            {
                var user = FormulaHelper.GetUserInfoByID(userId);
                S_W_StandardWorkTimeDetail detail = entities.Set <S_W_StandardWorkTimeDetail>().Create();
                detail.ID            = FormulaHelper.CreateGuid();
                detail.UserID        = user.UserID;
                detail.UserName      = user.UserName;
                detail.WBSID         = this.WBSID;
                detail.TaskWorkID    = this.TaskWorkID;
                detail.ProjectInfoID = this.ProjectInfoID;
                detail.RoleCode      = roleCode;
                var roleName = EnumBaseHelper.GetEnumDescription(typeof(Project.Logic.AuditRoles), roleCode);
                detail.RoleName   = roleName;
                detail.WorkDay    = workDay;
                detail.CreateDate = DateTime.Now;
                if (currentUserInfo != null)
                {
                    detail.CreateUser   = currentUserInfo.UserName;
                    detail.CreateUserID = currentUserInfo.UserID;
                }
                this.S_W_StandardWorkTimeDetail.Add(detail);
            }
            else
            {
                var detail = entities.Set <S_W_StandardWorkTimeDetail>().SingleOrDefault(c => c.FormID == this.ID && c.UserID == userId && c.RoleCode == roleCode);
                detail.WorkDay    = workDay;
                detail.ModifyDate = DateTime.Now;
                if (currentUserInfo != null)
                {
                    detail.ModifyUser   = currentUserInfo.UserName;
                    detail.ModifyUserID = currentUserInfo.UserID;
                }
            }
        }
예제 #5
0
        public JsonResult GetDeptMonthContractList()
        {
            var dt = EnumBaseHelper.GetEnumTable("System.ManDept");

            for (int i = 1; i <= 12; i++)
            {
                var field = i + "_Month";
                dt.Columns.Add(field, typeof(decimal));
            }
            dt.Columns.Add("TotalValue", typeof(decimal));
            var belongYear = String.IsNullOrEmpty(this.GetQueryString("BelongYear")) ? DateTime.Now.Year : Convert.ToInt32(this.GetQueryString("BelongYear"));
            var sql        = @"select isnull(Sum(ContractRMBAmount),0) as ContractValue,BelongMonth,BelongYear,ProductionDept from S_C_ManageContract
where BelongYear='{0}' and IsSigned='{1}' 
group by ProductionDept,BelongMonth,BelongYear ";
            var receiptDt  = this.SqlHelper.ExecuteDataTable(String.Format(sql, belongYear, ContractIsSigned.Signed.ToString()));

            foreach (DataRow row in dt.Rows)
            {
                var sumValue = 0m;
                for (int i = 1; i <= 12; i++)
                {
                    if (belongYear == DateTime.Now.Year && i > DateTime.Now.Month)
                    {
                        row[i + "_Month"] = DBNull.Value; continue;
                    }
                    var monthData = receiptDt.Select(" ProductionDept='" + row["value"] + "' and BelongMonth = '" + i + "'").FirstOrDefault();
                    if (monthData == null)
                    {
                        row[i + "_Month"] = 0;
                        continue;
                    }
                    row[i + "_Month"] = monthData["ContractValue"];
                    sumValue         += Convert.ToDecimal(monthData["ContractValue"]);
                }
                row["TotalValue"] = sumValue;
            }
            return(Json(dt));
        }
예제 #6
0
        public override JsonResult GetTree()
        {
            var result = new List <Dictionary <string, object> >();
            var list   = this.entities.Set <S_M_Parameter>().OrderBy(c => c.SortIndex).ToList();

            foreach (var parameter in list)
            {
                var param = FormulaHelper.ModelToDic <S_M_Parameter>(parameter);
                if (String.IsNullOrEmpty(parameter.ParentID))
                {
                    param.SetValue("ParentID", parameter.ParamType);
                }
                result.Add(param);
            }
            var enums = EnumBaseHelper.GetEnumDef(typeof(ArgumentType));

            foreach (var item in enums.EnumItem)
            {
                var node = new Dictionary <string, object>();
                node.SetValue("Name", item.Name);
                node.SetValue("Code", item.Code);
                node.SetValue("ID", item.Code);
                node.SetValue("NodeType", "ParamType");
                node.SetValue("ParamType", item.Code);
                node.SetValue("ParentID", "Root");
                result.Add(node);
            }
            var rootNode = new Dictionary <string, object>();

            rootNode.SetValue("Name", "计算项定义");
            rootNode.SetValue("Code", "Root");
            rootNode.SetValue("NodeType", "Root");
            rootNode.SetValue("ParamType", "Root");
            rootNode.SetValue("ID", "Root");
            rootNode.SetValue("ParentID", "");
            result.Add(rootNode);
            return(Json(result));
        }
예제 #7
0
        public ActionResult DeptList()
        {
            var QueryStartDate = GetQueryString("QueryStartDate");
            var QueryEndDate   = GetQueryString("QueryEndDate");

            if (string.IsNullOrEmpty(QueryStartDate))
            {
                QueryStartDate = DateTime.Now.Date.ToString("yyyy-MM") + "-01";
            }
            if (string.IsNullOrEmpty(QueryEndDate))
            {
                QueryEndDate = DateTime.Now.Date.ToString("yyyy-MM-dd");
            }
            ViewBag.QueryStartDate = QueryStartDate;
            ViewBag.QueryEndDate   = QueryEndDate;
            var dt = EnumBaseHelper.GetEnumTable("HR.WorkHourState");

            ViewBag.WorkHourState  = dt.Select("value <>'Create'", "sortindex asc");
            ViewBag.WorkHourType   = (workHourType == WorkHourSaveType.Day.ToString() ? "天" : "小时");
            ViewBag.NeedAdditional = String.IsNullOrEmpty(System.Configuration.ConfigurationManager.AppSettings["NeedAdditional"]) ? true :
                                     Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["NeedAdditional"]);
            return(View());
        }
예제 #8
0
        public ActionResult MileStonePlanList()
        {
            string projectInfoID = this.Request["ProjectInfoID"];
            var    projectInfo   = this.GetEntityByID <S_I_ProjectInfo>(projectInfoID);

            if (projectInfo == null)
            {
                throw new Formula.Exceptions.BusinessException("未能找到ID为【" + projectInfoID + "】的项目信息,无法进行里程碑策划");
            }
            var level = EnumBaseHelper.GetEnumDef(typeof(Project.Logic.MileStoneType)).EnumItem.ToList();

            ViewBag.MileStoneLevel = level;
            ViewBag.RootNode       = JsonHelper.ToJson(projectInfo.WBSRoot);
            string sql = @"select S_C_ManageContract_ReceiptObj.ID,S_C_ManageContract_ReceiptObj.Name,S_C_ManageContract.Name as 
ContractName,PlanFinishDate,ReceiptValue  from S_C_ManageContract_ReceiptObj
left join.S_C_ManageContract on S_C_ManageContract_ReceiptObj.S_C_ManageContractID = S_C_ManageContract.ID
where ProjectInfo = '{0}'";
            var    db  = SQLHelper.CreateSqlHelper(ConnEnum.Market);
            var    dt  = db.ExecuteDataTable(String.Format(sql, projectInfo.MarketProjectInfoID));

            ViewBag.ReceiptObject = JsonHelper.ToJson(dt);
            return(View());
        }
예제 #9
0
        public ActionResult Config()
        {
            var pbsEnum  = EnumBaseHelper.GetEnumDef("Base.PBSType");
            var enumList = new List <Dictionary <string, object> >();

            var cbsdic = new Dictionary <string, object>();

            cbsdic.SetValue("value", "CBS");
            cbsdic.SetValue("text", "费用科目");
            cbsdic.SetValue("sortindex", 0);
            enumList.Add(cbsdic);

            foreach (var item in pbsEnum.EnumItem.ToList())
            {
                var dic = new Dictionary <string, object>();
                dic.SetValue("value", item.Code);
                dic.SetValue("text", item.Name);
                dic.SetValue("sortindex", item.SortIndex);
                enumList.Add(dic);
            }
            ViewBag.CBSNodeTypeEnum = JsonHelper.ToJson(enumList);
            return(View());
        }
예제 #10
0
        public ActionResult BatchAdd()
        {
            string wbsID = GetQueryString("WBSID");
            var    wbs   = this.GetEntityByID <S_W_WBS>(wbsID);

            if (wbs == null)
            {
                throw new Formula.Exceptions.BusinessException("未能找到ID为【" + wbsID + "】的WBS对象");
            }
            if (wbs.Parent == null)
            {
                throw new Formula.Exceptions.BusinessException("未能找到子项节点,不能添加成果");
            }
            var monomerEnum = wbs.Parent.S_W_Monomer.OrderBy(d => d.Name).Select(d => new { text = d.Name, value = d.Name }).ToList();

            ViewBag.Monomer = JsonHelper.ToJson(monomerEnum);
            ViewBag.WBSInfo = JsonHelper.ToJson(wbs);
            var phaseCode = wbs.PhaseCode.Split(',').ToList();
            var allPhase  = EnumBaseHelper.GetEnumDef("Project.Phase");
            var phase     = allPhase.EnumItem.Where(a => phaseCode.Contains(a.Code)).Select(a => new { text = a.Name, value = a.Code });

            ViewBag.Phase = JsonHelper.ToJson(phase);
            return(View());
        }
예제 #11
0
        public JsonResult GetProjectList(QueryBuilder qb, string EngineeringID)
        {
            var list   = this.entities.Set <S_I_ProjectInfo>().Where(d => d.EngineeringInfoID == EngineeringID).ToList();
            var result = new List <Dictionary <string, object> >();

            foreach (var projectInfo in list)
            {
                var item = FormulaHelper.ModelToDic <S_I_ProjectInfo>(projectInfo);
                if (this.entities.Set <S_E_Product>().Where(d => d.ProjectInfoID == projectInfo.ID).Count() > 0)
                {
                    var printCount = this.entities.Set <S_E_Product>().Where(d => d.ProjectInfoID == projectInfo.ID).Sum(d => d.PrintCount);
                    item.SetValue("PrintCount", printCount.HasValue ? printCount.Value : 0);
                }
                else
                {
                    item.SetValue("PrintCount", 0);
                }
                var majors = String.Join(",", projectInfo.S_W_WBS.Where(d => d.WBSType == WBSNodeType.Major.ToString()).Select(d => d.Name).Distinct().ToList());
                item.SetValue("Major", majors);
                item.SetValue("StateName", EnumBaseHelper.GetEnumDescription(typeof(Project.Logic.ProjectCommoneState), projectInfo.State));
                result.Add(item);
            }
            return(Json(result));
        }
예제 #12
0
파일: AuditFO.cs 프로젝트: tianzhifeng/EPC
        /// <summary>
        /// 设置设校审人员至校审单上
        /// </summary>
        /// <param name="audit">校审单对象</param>
        /// <param name="Users">设校审人员信息</param>
        private void SetAuditUsers(T_AE_Audit audit, List <Dictionary <string, object> > Users)
        {
            var enumDef = EnumBaseHelper.GetEnumDef(typeof(ProjectRole));

            //设置校审单上的校审人员角色
            foreach (var item in enumDef.EnumItem)
            {
                string idKey    = item.Code + "ID";
                string nameKey  = item.Code + "Name";
                var    roleUser = Users.FirstOrDefault(delegate(Dictionary <string, object> user)
                {
                    if (String.IsNullOrEmpty(user.GetValue(idKey)))
                    {
                        return(false);
                    }
                    return(true);
                });
                if (roleUser != null)
                {
                    audit.SetProperty(idKey, roleUser.GetValue(idKey));
                    audit.SetProperty(nameKey, roleUser.GetValue(nameKey));
                }
            }
        }
예제 #13
0
        public ActionResult WBSAddWithAttrDefine()
        {
            string childType = this.Request["Type"];

            ViewBag.NameTitle = EnumBaseHelper.GetEnumDescription(typeof(WBSNodeType), childType);
            if (String.IsNullOrEmpty(childType))
            {
                throw new Formula.Exceptions.BusinessException("未指定需要增加的WBS节点类型,无法增加节点");
            }

            //项目策划-专业、阶段根据策划及业务类型过滤
            string projectInfoID = this.GetQueryString("ProjectInfoID");
            var    project       = this.entities.Set <S_I_ProjectInfo>().Find(projectInfoID);
            var    prjClass      = string.Empty;

            if (project != null)
            {
                prjClass = project.ProjectClass;
            }
            var list = BaseConfigFO.GetWBSEnum(childType, prjClass);

            ViewBag.DefineAttr = JsonHelper.ToJson(list);
            return(this.View());
        }
        public ActionResult List()
        {
            var items = EnumBaseHelper.GetEnumDef("System.DeptOrg").EnumItem.ToList();

            ViewBag.DeptOrg = items;

            var tab          = new Tab();
            var yearCategory = CategoryFactory.GetYearCategory("BelongYear", 5, 1, false);

            yearCategory.SetDefaultItem(DateTime.Now.Year.ToString());
            yearCategory.Multi = false;
            tab.Categories.Add(yearCategory);

            var monthCategory = CategoryFactory.GetMonthCategory("BelongMonth", false);

            monthCategory.SetDefaultItem(DateTime.Now.Month.ToString());
            monthCategory.Multi = false;
            tab.Categories.Add(monthCategory);

            tab.IsDisplay = true;
            ViewBag.Tab   = tab;

            return(View());
        }
예제 #15
0
        public JsonResult GetUserSummaryInfo(QueryBuilder qb)
        {
            var list             = this.entities.Set <S_AE_Mistake>().Where((SearchCondition)qb).ToList();
            var mistakeLevelEnum = EnumBaseHelper.GetEnumDef("Project.MistakeLevel").EnumItem.ToList();
            var userSummaryList  = list.GroupBy(d => new { UserName = d.Designer, UserID = d.DesignerID }).Select(d => new { UserName = d.Key.UserName, UserID = d.Key.UserID, Summary = d.Count() }).ToList().OrderByDescending(d => d.Summary).ToList();
            var result           = new List <Dictionary <string, object> >();

            foreach (var item in userSummaryList)
            {
                var dic = new Dictionary <string, object>();
                dic.SetValue("UserID", item.UserID);
                dic.SetValue("UserName", item.UserName);
                foreach (var mistakeItem in mistakeLevelEnum)
                {
                    var count = list.Count(d => d.DesignerID == item.UserID && d.MistakeLevel == mistakeItem.Code);
                    dic.SetValue(mistakeItem.Code, count);
                }
                dic.SetValue("Summary", item.Summary);
                result.Add(dic);
            }
            var gridData = new GridData(result);

            return(Json(gridData));
        }
예제 #16
0
        public ActionResult PersonHourRpt()
        {
            var items = EnumBaseHelper.GetEnumDef("System.WorkHourType").EnumItem.ToList();

            ViewBag.WorkHourTypeInfo = items;

            var tab          = new Tab();
            var deptCategory = CategoryFactory.GetCategory("System.ManDept", "所属部门", "DeptID");

            deptCategory.SetDefaultItem();
            deptCategory.Multi = false;
            tab.Categories.Add(deptCategory);

            var workHourCategory = CategoryFactory.GetCategory("System.DateFilder", "工时日期", "WorkHourDate");

            workHourCategory.SetDefaultItem();
            workHourCategory.Multi = false;
            tab.Categories.Add(workHourCategory);

            tab.IsDisplay = true;
            ViewBag.Tab   = tab;

            return(View());
        }
예제 #17
0
        protected override void BeforeSave(Dictionary <string, string> dic, Base.Logic.Domain.S_UI_Form formInfo, bool isNew)
        {
            var entity = this.GetEntityByID(dic["ID"]);

            if (entity == null)
            {
                entity = new T_SC_SingleProjectScheme();
            }
            this.UpdateEntity(entity, dic);
            #region 校验整体专业
            #region 校验成果
            string sql = @"select distinct MajorValue, S_W_WBS.Name MajorName from S_E_Product p
left join S_W_WBS on p.WBSID = S_W_WBS.ID 
where p.ProjectInfoID='{0}' and MajorValue not in ('{1}')";
            sql = string.Format(sql, entity.ProjectInfoID, entity.Major.Replace(",", "','"));
            var dt = this.ProjectSQLDB.ExecuteDataTable(sql);
            if (dt.Rows.Count > 0)
            {
                var msgMajor = "";
                foreach (DataRow item in dt.Rows)
                {
                    msgMajor += item["MajorName"].ToString() + ",";
                }
                throw new Formula.Exceptions.BusinessException("专业【" + msgMajor.TrimEnd(',') + "】已经上传了设计成果,必须选中。");
            }
            #endregion

            #region 校验提资单
            var sqlPutInfo = @"select distinct OutMajorValue, S_W_WBS.Name MajorName from T_EXE_MajorPutInfo p
left join S_W_WBS on p.WBSID = S_W_WBS.ParentID and p.OutMajorValue = S_W_WBS.WBSValue 
where p.ProjectInfoID='{0}' and OutMajorValue not in ('{1}')";
            sqlPutInfo = string.Format(sqlPutInfo, entity.ProjectInfoID, entity.Major.Replace(",", "','"));
            var dtPutInfo = this.ProjectSQLDB.ExecuteDataTable(sqlPutInfo);
            if (dtPutInfo.Rows.Count > 0)
            {
                var msgMajor = "";
                foreach (DataRow item in dtPutInfo.Rows)
                {
                    msgMajor += item["MajorName"].ToString() + ",";
                }
                throw new Formula.Exceptions.BusinessException("专业【" + msgMajor.TrimEnd(',') + "】发起过提资,必须选中。");
            }
            #endregion

            #region 校验共享区
            var sqlShareInfo = @"select distinct p.WBSValue, S_W_WBS.Name MajorName from S_D_ShareInfo p
left join S_W_WBS on p.SubProjectWBSID = S_W_WBS.ParentID and p.WBSValue = S_W_WBS.WBSValue 
where p.ProjectInfoID='{0}' and p.WBSValue not in ('{1}')";
            sqlShareInfo = string.Format(sqlShareInfo, entity.ProjectInfoID, entity.Major.Replace(",", "','"));
            var dtShareInfo = this.ProjectSQLDB.ExecuteDataTable(sqlShareInfo);
            if (dtShareInfo.Rows.Count > 0)
            {
                var msgMajor = "";
                foreach (DataRow item in dtShareInfo.Rows)
                {
                    msgMajor += item["MajorName"].ToString() + ",";
                }
                throw new Formula.Exceptions.BusinessException("专业【" + msgMajor.TrimEnd(',') + "】拥有共享区文件,必须选中。");
            }
            #endregion

            #region 校验专业里程碑
            string        finishState       = ProjectCommoneState.Finish.ToString();
            var           finishMileStones  = this.BusinessEntities.Set <S_P_MileStone>().Where(a => a.ProjectInfoID == entity.ProjectInfoID && a.State == finishState).ToList();
            List <string> msgMileStoneMajor = new List <string>();
            foreach (var item in finishMileStones)
            {
                if (string.IsNullOrEmpty(item.MajorValue) && string.IsNullOrEmpty(item.OutMajorValue))
                {
                    continue;
                }
                if (!entity.Major.Split(',').Contains(item.MajorValue))
                {
                    if (!msgMileStoneMajor.Contains(item.MajorValue))
                    {
                        msgMileStoneMajor.Add(item.MajorValue);
                    }
                }
                if (!string.IsNullOrEmpty(item.OutMajorValue))
                {
                    foreach (var _oMajorValue in item.OutMajorValue.Split(','))
                    {
                        if (string.IsNullOrEmpty(_oMajorValue))
                        {
                            continue;
                        }
                        if (!entity.Major.Split(',').Contains(_oMajorValue))
                        {
                            if (!msgMileStoneMajor.Contains(_oMajorValue))
                            {
                                msgMileStoneMajor.Add(_oMajorValue);
                            }
                        }
                    }
                }
            }
            if (msgMileStoneMajor.Count > 0)
            {
                var enmDef = EnumBaseHelper.GetEnumDef("Project.Major");
                throw new Formula.Exceptions.BusinessException("专业【" + String.Join(",", enmDef.EnumItem.Where(d => msgMileStoneMajor.Contains(d.Code)).Select(d => d.Name)) + "】已经有相关里程碑完成,必须选中。");
            }
            #endregion

            #endregion

            #region 校验里程碑编号

            var projectInfo = this.GetEntityByID <S_I_ProjectInfo>(entity.ProjectInfoID);
            var db          = SQLHelper.CreateSqlHelper(ConnEnum.InfrasBaseConfig);
            sql = @"select ID,MileStoneName,MileStoneCode,MileStoneType,Weight,SortIndex,OutMajors,InMajors,PhaseValue from dbo.S_T_MileStone
where ModeID in (select ID from S_T_ProjectMode where ModeCode='{0}') and ProjectClass like '%{1}%'  {2}
order by SortIndex ";
            var phaseStr = string.Empty;
            foreach (var item in projectInfo.PhaseValue.Split(','))
            {
                phaseStr += ("or PhaseValue like '%" + item + "%' ");
            }
            phaseStr = " and (" + phaseStr.TrimStart('o', 'r') + ")";
            var templateDt = db.ExecuteDataTable(String.Format(sql, projectInfo.ModeCode, projectInfo.ProjectClass, phaseStr));
            //当前端去掉专业,再次勾选专业后,对应的里程碑编号会为空
            var msList = JsonHelper.ToList(dic.GetValue("MileStoneList"));
            foreach (var milestone in msList)
            {
                if (string.IsNullOrEmpty(milestone.GetValue("Code")))
                {
                    DataRow tmpRow = null;
                    var     tmpid  = milestone.GetValue("TemplateID");
                    if (!string.IsNullOrEmpty(tmpid) && templateDt.Select("ID='" + tmpid + "'").Length > 0)
                    {
                        tmpRow = templateDt.Select("ID='" + tmpid + "'")[0];
                    }
                    else
                    {
                        var msName = milestone.GetValue("Name");
                        if (!string.IsNullOrEmpty(msName) && templateDt.Select("MileStoneName='" + msName + "'").Length > 0)
                        {
                            tmpRow = templateDt.Select("MileStoneName='" + msName + "'")[0];
                        }
                    }
                    if (tmpRow != null)
                    {
                        var    msType = milestone.GetValue("MileStoneType");
                        string code   = tmpRow["MileStoneName"].ToString() + "." + projectInfo.ID + "." + projectInfo.PhaseValue + "." + tmpRow["MileStoneType"].ToString();
                        if (msType == MileStoneType.Major.ToString())
                        {
                            code = tmpRow["MileStoneName"].ToString() + "." + projectInfo.ID + "." + projectInfo.PhaseValue + "." + milestone.GetValue("Major") + "." + tmpRow["MileStoneType"].ToString();
                        }
                        else if (msType == MileStoneType.Cooperation.ToString())
                        {
                            code = tmpRow["MileStoneName"].ToString() + "." + projectInfo.ID + "." + projectInfo.PhaseValue + "." + milestone.GetValue("Major") + "." + tmpRow["MileStoneType"].ToString();
                        }
                        milestone.SetValue("Code", code);
                    }
                    else
                    {
                        milestone.SetValue("Code", milestone.GetValue("Name") + "." + projectInfo.ID + "." + projectInfo.PhaseValue + "." + milestone.GetValue("Major"));
                    }
                }
            }
            dic.SetValue("MileStoneList", JsonHelper.ToJson <List <Dictionary <string, object> > >(msList));
            #endregion
        }
예제 #18
0
        protected override void AfterGetData(DataTable dt, bool isNew, string upperVersionID)
        {
            string projectInfoID = this.GetQueryString("ProjectInfoID");

            if (string.IsNullOrEmpty(projectInfoID))
            {
                if (dt.Columns.Contains("ProjectInfoID"))
                {
                    projectInfoID = dt.Rows[0]["ProjectInfoID"].ToString();
                }
            }
            var projectInfo = this.GetEntityByID <S_I_ProjectInfo>(projectInfoID);

            if (projectInfo == null)
            {
                throw new Formula.Exceptions.BusinessException("未找到指定的项目,请联系管理员");
            }
            #region 里程碑数据源(由于流程中列表定义数据源因为要从url获取参数而失效,故在此写数据源)
            var    db       = SQLHelper.CreateSqlHelper(ConnEnum.InfrasBaseConfig);
            string sql      = @"select ID,MileStoneName,MileStoneCode,MileStoneType,Weight,SortIndex,OutMajors,InMajors,PhaseValue from dbo.S_T_MileStone
where ModeID in (select ID from S_T_ProjectMode where ModeCode='{0}') and ProjectClass like '%{1}%'  {2}
order by SortIndex ";
            var    phaseStr = string.Empty;
            foreach (var item in projectInfo.PhaseValue.Split(','))
            {
                phaseStr += ("or PhaseValue like '%" + item + "%' ");
            }
            phaseStr = " and (" + phaseStr.TrimStart('o', 'r') + ")";
            var templateDt = db.ExecuteDataTable(String.Format(sql, projectInfo.ModeCode, projectInfo.ProjectClass, phaseStr));
            #endregion
            if (isNew)
            {
                string lastVersionID      = this.Request["UpperVersion"]; //要升版的ID
                var    lastVersion        = this.GetEntityByID(lastVersionID);
                var    defaultMileStoneDt = new List <Dictionary <string, object> >();
                if (projectInfo.ProjectMode.ExtentionObject.GetValue("Ext_MsDataIsFromLastVertion") == TrueOrFalse.True.ToString() &&
                    lastVersion != null)
                {
                    #region 根据上一版数据生成里程碑列表
                    foreach (var item in lastVersion.T_SC_SingleProjectScheme_MileStoneList.ToList())
                    {
                        var row = item.ToDic();
                        row.SetValue("ID", "");
                        defaultMileStoneDt.Add(row);
                    }
                    #endregion
                }
                else
                {
                    #region 根据里程碑定义获得默认的里程碑列表
                    var majors = dt.Rows[0]["Major"].ToString();
                    foreach (DataRow template in templateDt.Rows)
                    {
                        if (template["MileStoneType"].ToString() == MileStoneType.Major.ToString())
                        {
                            #region 专业级里程碑
                            foreach (var major in majors.Split(','))
                            {
                                if (String.IsNullOrEmpty(major))
                                {
                                    continue;
                                }
                                string code = template["MileStoneName"].ToString() + "." + projectInfo.RootWBSID + "." + major + "." + template["MileStoneType"].ToString();
                                var    row  = this._createDefaultItem(template, code, lastVersion);
                                row.SetValue("Major", major);
                                defaultMileStoneDt.Add(row);
                            }
                            #endregion
                        }
                        else if (template["MileStoneType"].ToString() == MileStoneType.Cooperation.ToString())
                        {
                            #region 提资计划定义
                            if (template["OutMajors"].ToString() == "All")
                            {
                                foreach (var major in majors.Split(','))
                                {
                                    if (String.IsNullOrEmpty(major))
                                    {
                                        continue;
                                    }
                                    var defInMajors = template["InMajors"].ToString();
                                    var InMajors    = String.Join(",", majors.Split(',').Where(d => defInMajors.Contains(d)));
                                    if (defInMajors == "All")
                                    {
                                        InMajors = String.Join(",", majors.Split(','));
                                    }
                                    string code = template["MileStoneName"].ToString() + "." + projectInfo.RootWBSID + "." + major + "." + template["MileStoneType"].ToString();
                                    var    row  = this._createDefaultItem(template, code, lastVersion);
                                    row.SetValue("Major", major);
                                    row.SetValue("OutMajor", major);
                                    row.SetValue("InMajor", InMajors);
                                    var enmDef    = EnumBaseHelper.GetEnumDef("Project.Major");
                                    var majorName = String.Join(",", enmDef.EnumItem.Where(d => InMajors.Split(',').Contains(d.Code)).Select(d => d.Name));
                                    row.SetValue("Remark", "接收专业:" + majorName);
                                    defaultMileStoneDt.Add(row);
                                }
                            }
                            else
                            {
                                var outMajors = template["OutMajors"].ToString().Split(',');
                                foreach (var major in majors.Split(','))
                                {
                                    if (String.IsNullOrEmpty(major))
                                    {
                                        continue;
                                    }
                                    var defInMajors = template["InMajors"].ToString();
                                    var InMajors    = String.Join(",", majors.Split(',').Where(d => defInMajors.Contains(d)));
                                    if (defInMajors == "All")
                                    {
                                        InMajors = String.Join(",", majors.Split(','));
                                    }
                                    if (!outMajors.Contains(major))
                                    {
                                        continue;
                                    }
                                    string code = template["MileStoneName"].ToString() + "." + projectInfo.ID + "." + major + "." + template["MileStoneType"].ToString();
                                    var    row  = this._createDefaultItem(template, code, lastVersion);
                                    row.SetValue("Major", major);
                                    row.SetValue("OutMajor", major);
                                    row.SetValue("InMajor", InMajors);
                                    var enmDef    = EnumBaseHelper.GetEnumDef("Project.Major");
                                    var majorName = String.Join(",", enmDef.EnumItem.Where(d => InMajors.Split(',').Contains(d.Code)).Select(d => d.Name));
                                    row.SetValue("Remark", "接收专业:" + majorName);
                                    defaultMileStoneDt.Add(row);
                                }
                            }
                            #endregion
                        }
                        else
                        {
                            string code = template["MileStoneName"].ToString() + "." + projectInfo.ID + ".." + template["MileStoneType"].ToString();
                            var    row  = this._createDefaultItem(template, code, lastVersion);
                            row.SetValue("Major", "");
                            defaultMileStoneDt.Add(row);
                        }
                    }
                    #region 模板已经删除,但是实际已经完成的里程碑,需要再次加入里程碑子表数据和模板数据
                    var    listCodes   = defaultMileStoneDt.Select(a => a.GetValue("Code")).Where(a => !string.IsNullOrEmpty(a)).ToList();
                    string finishState = ProjectCommoneState.Finish.ToString();
                    var    finishList  = projectInfo.S_P_MileStone.Where(a => a.State == finishState && !listCodes.Contains(a.Code)).ToList();
                    foreach (var item in finishList)
                    {
                        var row = new Dictionary <string, object>();

                        row.SetValue("Name", item.Name);
                        row.SetValue("SortIndex", item.SortIndex ?? 0);
                        row.SetValue("PlanEndDate", item.PlanFinishDate);
                        row.SetValue("Weight", item.Weight);
                        row.SetValue("Code", item.Code);
                        row.SetValue("MileStoneType", item.MileStoneType);
                        row.SetValue("MileStoneID", item.ID);
                        row.SetValue("TemplateID", item.TemplateID);
                        row.SetValue("Major", item.MajorValue);
                        row.SetValue("OutMajor", item.MajorValue);
                        row.SetValue("InMajor", item.OutMajorValue);
                        row.SetValue("Remark", item.Description);
                        defaultMileStoneDt.Add(row);


                        var tmpRow = templateDt.NewRow();
                        tmpRow["ID"]            = string.Empty;
                        tmpRow["MileStoneName"] = item.Name;
                        tmpRow["MileStoneCode"] = item.Code;
                        tmpRow["MileStoneType"] = item.MileStoneType;
                        if (item.Weight.HasValue)
                        {
                            tmpRow["Weight"] = item.Weight;
                        }
                        tmpRow["SortIndex"]  = item.SortIndex ?? 0;
                        tmpRow["OutMajors"]  = item.MajorValue;
                        tmpRow["InMajors"]   = item.OutMajorValue;
                        tmpRow["PhaseValue"] = string.Empty;
                        templateDt.Rows.Add(tmpRow);
                    }

                    #endregion

                    #endregion
                    #region 手动添加的流程碑,需要再次加入里程碑子表数据和模板数据
                    var cusList = projectInfo.S_P_MileStone.Where(a => string.IsNullOrEmpty(a.TemplateID)).ToList();
                    foreach (var item in cusList)
                    {
                        var row = new Dictionary <string, object>();

                        row.SetValue("Name", item.Name);
                        row.SetValue("SortIndex", item.SortIndex ?? 0);
                        row.SetValue("PlanEndDate", item.PlanFinishDate);
                        row.SetValue("Weight", item.Weight);
                        row.SetValue("Code", item.Code);
                        row.SetValue("MileStoneType", item.MileStoneType);
                        row.SetValue("MileStoneID", item.ID);
                        row.SetValue("TemplateID", item.TemplateID);
                        row.SetValue("Major", item.MajorValue);
                        row.SetValue("OutMajor", item.MajorValue);
                        row.SetValue("InMajor", item.OutMajorValue);
                        row.SetValue("Remark", item.Description);
                        defaultMileStoneDt.Add(row);


                        var tmpRow = templateDt.NewRow();
                        tmpRow["ID"]            = string.Empty;
                        tmpRow["MileStoneName"] = item.Name;
                        tmpRow["MileStoneCode"] = item.Code;
                        tmpRow["MileStoneType"] = item.MileStoneType;
                        if (item.Weight.HasValue)
                        {
                            tmpRow["Weight"] = item.Weight;
                        }
                        tmpRow["SortIndex"]  = item.SortIndex ?? 0;
                        tmpRow["OutMajors"]  = item.MajorValue;
                        tmpRow["InMajors"]   = item.OutMajorValue;
                        tmpRow["PhaseValue"] = string.Empty;
                        templateDt.Rows.Add(tmpRow);
                    }
                    #endregion
                    defaultMileStoneDt = defaultMileStoneDt.OrderBy(a => Convert.ToDouble(a.GetValue("SortIndex"))).ToList();
                }
                if (dt.Rows.Count > 0 && dt.Columns.Contains("MileStoneList"))
                {
                    dt.Rows[0]["MileStoneList"] = JsonHelper.ToJson(defaultMileStoneDt);
                }
            }
            if (!dt.Columns.Contains("MileStoneInfo"))
            {
                dt.Columns.Add("MileStoneInfo");
            }
            var dv = templateDt.DefaultView;
            dv.Sort = "SortIndex";
            dt.Rows[0]["MileStoneInfo"] = JsonHelper.ToJson(dv.ToTable());
        }
예제 #19
0
        public JsonResult GetDeptHourList(QueryBuilder qb)
        {
            qb.IsOrRelateion = false;
            qb.Items.RemoveWhere(d => d.Field == "WorkHourDate");
            string startTime = GetQueryString("WorkHourStart");
            string endTime   = GetQueryString("WorkHourEnd");

            string where = "";
            if (!string.IsNullOrEmpty(startTime))
            {
                where += string.Format(" and WorkHourDate>='{0}' ", DateTime.Parse(startTime));
            }
            if (!string.IsNullOrEmpty(endTime))
            {
                where += string.Format(" and WorkHourDate<='{0}' ", DateTime.Parse(endTime));
            }

            SQLHelper shBase = SQLHelper.CreateSqlHelper(ConnEnum.Base);
            SQLHelper shHR   = SQLHelper.CreateSqlHelper(ConnEnum.HR);
            string    post   = OrgType.Post.ToString();
            //int normalHours = int.Parse(System.Configuration.ConfigurationManager.AppSettings["NormalHoursMax"]);
            var calendarService = FormulaHelper.GetService <ICalendarService>();
            //int workDaysCount = (int)calendarService.GetWorkDayCount(DateTime.Parse(startTime), DateTime.Parse(endTime)) + 1;

            string fields = @"--部门信息
org.ID ,org.Name as DeptName,
--部门人数
isnull(whUser.PersonCount,0) as PersonCount,
--计划总工时(部门人数*工作日*每日规定工作时间)
--isnull(isnull(whUser.PersonCount,0)*{0}*{1},0) as PlanWorkHourValue,
--正班工时,加班工时
isnull(wh.NormalValue,0) as NormalValue,isnull(wh.AdditionalValue,0) as AdditionalValue,
isnull(wh.WorkHourValue,0) as WorkHourValue,
--人均工时
isnull(case PersonCount when 0 then 0
else (isnull(wh.NormalValue,0)+isnull(wh.AdditionalValue,0))/PersonCount 
end ,0) as AvgHours";//, workDaysCount, normalHours


            string sql = "SELECT {0} From {1}";
            //查询某项目项目经理,工时填报人数,工时填报统计
            string middleSql = string.Format(@"(select * from dbo.S_A_Org where  Type != '{0}'  and IsDeleted='0') org
LEFT JOIN (
	select UserDeptID,count(*) PersonCount from (Select distinct UserDeptID,UserID From {1}.dbo.S_W_UserWorkHour  where 1=1 {2}) whi
	group by UserDeptID
	)whUser ON org.ID=whUser.UserDeptID
LEFT JOIN (
	select UserDeptID,sum(NormalValue) as NormalValue,sum(AdditionalValue) as AdditionalValue,sum(WorkHourValue) as WorkHourValue from {1}.dbo.S_W_UserWorkHour  where 1=1 {2}
	group by UserDeptID
	) as wh ON wh.UserDeptID=org.ID"    , post, shHR.DbName, where);

            //员工按工时类别分类工时合计
            var whCategory = EnumBaseHelper.GetEnumDef("System.WorkHourType");

            foreach (var item in whCategory.EnumItem)
            {
                middleSql += string.Format(@" Left JOIN (
	Select UserDeptID,isnull(sum(WorkHourValue),0) as {0}Hours 
	from {1}.dbo.S_W_UserWorkHour where WorkHourType='{0}' {2} group by UserDeptID ) wh{0} On org.ID= wh{0}.UserDeptID "    , item.Code, shHR.DbName, where);
                fields    += string.Format(",isnull({0}Hours,0) {0}Hours", item.Code);
            }
            sql = string.Format(sql, fields, middleSql);

            GridData data = shBase.ExecuteGridData(sql, qb);

            return(Json(data));
        }
예제 #20
0
        public JsonResult GetDeptReceiptList()
        {
            var dt = EnumBaseHelper.GetEnumTable("System.ManDept");

            dt.Columns.Add("ReceiptKPI", typeof(decimal));
            dt.Columns.Add("ReceiptValue", typeof(decimal));
            dt.Columns.Add("RecepitComplateRate", typeof(decimal));
            dt.Columns.Add("CanReceiptValue", typeof(decimal));
            dt.Columns.Add("RemaintContractValue", typeof(decimal));
            dt.Columns.Add("ReceiptKPIRemain", typeof(decimal));
            dt.Columns.Add("TimeRate", typeof(decimal));

            var belongYear  = String.IsNullOrEmpty(GetQueryString("BelongYear")) ? DateTime.Now.Year : Convert.ToInt32(GetQueryString("BelongYear"));
            var sql         = "select * from S_KPI_IndicatorOrg where IndicatorType = 'YearIndicator' and BelongYear= '{0}'";
            var indicatorDt = this.SqlHelper.ExecuteDataTable(String.Format(sql, belongYear));

            sql = @"SELECT  ISNULL(SUM(ReceiptInfo.ReceiptValue), 0) AS Value ,
                            ProductionDept,ProductionDeptName
                    FROM    ( SELECT    S_M_Receipt.* ,
					                    YEAR(ReceiptDate) AS BelongYear,
                                        ProductionDept ,
                                        ProductionDeptName
                              FROM      S_M_Receipt 
                                        LEFT JOIN S_M_ContractInfo ON ContractInfo = S_M_ContractInfo.ID
		                      WHERE YEAR(ReceiptDate)='{0}'
                            ) ReceiptInfo
                    WHERE   1 = 1
                    GROUP BY ProductionDept,ProductionDeptName;";
            var receiptDt = this.SqlHelper.ExecuteDataTable(String.Format(sql, belongYear));

            sql = @" select isnull(Sum(isnull(ReceiptValue,0)-isnull(FactReceiptValue,0)),0)  as DataValue,
ProductionDept as ChargeDeptID,ProductionDeptName as ChargeDeptName 
from dbo.S_M_ContractInfo_ReceiptObj left join dbo.S_M_ContractInfo 
on S_M_ContractInfo_ReceiptObj.S_M_ContractInfoID=S_M_ContractInfo.ID
  group by ProductionDept,ProductionDeptName";
            var canReceiptDt = this.SqlHelper.ExecuteDataTable(sql);

            sql = @"select Sum(isnull(ContractRMBValue,0)-isnull(SumReceiptValue,0)) as DataValue,ProductionDept as ChargeDeptID,ProductionDeptName as ChargeDeptName 
 from S_M_ContractInfo where ContractState='Sign' group by ProductionDept,ProductionDeptName";
            var remainContractDt = this.SqlHelper.ExecuteDataTable(sql);
            var sumKpi = 0m; var sumReceiptValue = 0m;

            foreach (DataRow row in dt.Rows)
            {
                var obj = indicatorDt.Compute("Sum(ReceiptValue)", "OrgID='" + row["value"] + "'");
                var kpi = obj == null || obj == DBNull.Value ? 0 : Convert.ToDecimal(obj);
                row["ReceiptKPI"] = kpi;
                sumKpi           += kpi;
                obj = receiptDt.Compute("Sum(DataValue)", "ChargeDeptID='" + row["value"] + "'");
                var recepitValue = obj == null || obj == DBNull.Value ? 0 : Convert.ToDecimal(obj);
                row["ReceiptValue"]        = recepitValue;
                sumReceiptValue           += recepitValue;
                row["RecepitComplateRate"] = kpi == 0 ? 100 : Math.Round(recepitValue / kpi * 100, 2);

                obj = canReceiptDt.Compute("Sum(DataValue)", "ChargeDeptID='" + row["value"] + "'");
                row["CanReceiptValue"]      = obj == null || obj == DBNull.Value ? 0 : Convert.ToDecimal(obj);
                row["RemaintContractValue"] = remainContractDt.Compute("Sum(DataValue)", "ChargeDeptID='" + row["value"] + "'");
                row["ReceiptKPIRemain"]     = kpi - recepitValue;
                row["TimeRate"]             = Math.Round(Convert.ToDecimal(DateTime.Now.DayOfYear) / 365 * 100);
            }
            var result = new Dictionary <string, object>();

            result.SetValue("data", dt);
            var sumData = new Dictionary <string, object>();

            sumData.SetValue("RecepitComplateRate", sumKpi == 0 ? 100 : Math.Round(sumReceiptValue / sumKpi * 100, 2));
            result.SetValue("sumData", sumData);

            var yAxies = new List <yAxis>();
            var y1     = new yAxis {
                MiniValue = 0, TitleInfo = new Dictionary <string, object>(), Lable = new Dictionary <string, object>()
            };

            y1.TitleInfo.SetValue("text", "收款金额");
            y1.Lable.SetValue("format", "{value}元");
            var y2 = new yAxis {
                MiniValue = 0, TitleInfo = new Dictionary <string, object>(), Lable = new Dictionary <string, object>()
            };

            y2.TitleInfo.SetValue("text", "完成率");
            y2.Lable.SetValue("format", "{value}%"); y2.opposite = true;
            yAxies.Add(y1);
            yAxies.Add(y2);

            var serDefines    = new List <Series>();
            var ReceiptKPISer = new Series {
                Name = "收款目标", Field = "ReceiptKPI", Type = "column", yAxis = 0, Tooltip = new Dictionary <string, object>()
            };

            ReceiptKPISer.Tooltip.SetValue("valueSuffix", "元");
            serDefines.Add(ReceiptKPISer);

            var ReceiptValueSer = new Series {
                Name = "已收款", Field = "ReceiptValue", Type = "column", yAxis = 0, Tooltip = new Dictionary <string, object>()
            };

            ReceiptValueSer.Tooltip.SetValue("valueSuffix", "元");
            serDefines.Add(ReceiptValueSer);

            var CanReceiptValueSer = new Series {
                Name = "经营应收款", Field = "CanReceiptValue", Type = "column", yAxis = 0, Tooltip = new Dictionary <string, object>()
            };

            CanReceiptValueSer.Tooltip.SetValue("valueSuffix", "元");
            serDefines.Add(CanReceiptValueSer);

            var RecepitComplateRateSer = new Series {
                Name = "完成率", Field = "RecepitComplateRate", Type = "spline", yAxis = 1, Tooltip = new Dictionary <string, object>()
            };

            RecepitComplateRateSer.Tooltip.SetValue("valueSuffix", "%");
            serDefines.Add(RecepitComplateRateSer);

            var chart = HighChartHelper.CreateColumnXYChart(belongYear + "年各部门收款情况", "", dt, "text", yAxies, serDefines, null);

            result.SetValue("chart", chart);
            return(Json(result));
        }
예제 #21
0
        public JsonResult GetDeptContractList()
        {
            var dt = EnumBaseHelper.GetEnumTable("System.ManDept");

            dt.Columns.Add("ContractKPI", typeof(decimal));
            dt.Columns.Add("ContractValue", typeof(decimal));
            dt.Columns.Add("ContractComplateRate", typeof(decimal));
            dt.Columns.Add("UnContractValue", typeof(decimal));
            dt.Columns.Add("ContractKPIRemain", typeof(decimal));
            dt.Columns.Add("TimeRate", typeof(decimal));

            var belongYear  = String.IsNullOrEmpty(GetQueryString("BelongYear")) ? DateTime.Now.Year : Convert.ToInt32(GetQueryString("BelongYear"));
            var sql         = "select * from S_KPI_IndicatorOrg where IndicatorType = 'YearIndicator' and BelongYear= '{0}'";
            var indicatorDt = this.SqlHelper.ExecuteDataTable(String.Format(sql, belongYear));

            sql = @"select isnull(Sum(ContractRMBValue),0) as DataValue,ChargeDeptID,ChargeDeptName,BelongYear,BelongMonth,BelongQuarter
                    FROM(
                    SELECT ContractRMBValue,ProductionDept as ChargeDeptID,ProductionDeptName as ChargeDeptName,
                    YEAR(SignDate) AS BelongYear,MONTH(SignDate) AS BelongMonth,DATEPART(QUARTER,SignDate) AS BelongQuarter
                    FROM dbo.S_M_ContractInfo
                    WHERE ContractState='Sign'  AND YEAR(SignDate)='{0}'
                    )resulttable
                    GROUP BY ChargeDeptID,ChargeDeptName,BelongYear,BelongMonth,BelongQuarter ";
            var contractDt = this.SqlHelper.ExecuteDataTable(String.Format(sql, belongYear));

            sql = @"select isnull(Sum(ContractRMBValue),0) as DataValue,ChargeDeptID,ChargeDeptName,BelongYear,BelongMonth,BelongQuarter
                    FROM(
                    SELECT ContractRMBValue,ProductionDept as ChargeDeptID,ProductionDeptName as ChargeDeptName,
                    YEAR(SignDate) AS BelongYear,MONTH(SignDate) AS BelongMonth,DATEPART(QUARTER,SignDate) AS BelongQuarter
                    FROM dbo.S_M_ContractInfo
                    WHERE ContractState!='Sign' OR ContractState IS NULL
                    )resulttable
                    GROUP BY ChargeDeptID,ChargeDeptName,BelongYear,BelongMonth,BelongQuarter";
            var UncCntractDt = this.SqlHelper.ExecuteDataTable(sql);

            var sumKpi = 0m; var sumValue = 0m;

            foreach (DataRow row in dt.Rows)
            {
                var obj = indicatorDt.Compute("Sum(ContractValue)", "OrgID='" + row["value"] + "'");
                var kpi = obj == null || obj == DBNull.Value ? 0 : Convert.ToDecimal(obj);
                row["ContractKPI"] = kpi;
                sumKpi            += kpi;
                obj = contractDt.Compute("Sum(DataValue)", "ChargeDeptID='" + row["value"] + "'");
                var value = obj == null || obj == DBNull.Value ? 0 : Convert.ToDecimal(obj);
                row["ContractValue"]        = value;
                sumValue                   += value;
                row["ContractComplateRate"] = kpi == 0 ? 100 : Math.Round(value / kpi * 100, 2);

                obj = UncCntractDt.Compute("Sum(DataValue)", "ChargeDeptID='" + row["value"] + "'");
                row["UnContractValue"]   = obj == null || obj == DBNull.Value ? 0 : Convert.ToDecimal(obj);
                row["ContractKPIRemain"] = kpi - value;
                row["TimeRate"]          = Math.Round(Convert.ToDecimal(DateTime.Now.DayOfYear) / 365 * 100);
            }
            var result = new Dictionary <string, object>();

            result.SetValue("data", dt);
            var sumData = new Dictionary <string, object>();

            sumData.SetValue("ContractComplateRate", sumKpi == 0 ? 100 : Math.Round(sumValue / sumKpi * 100, 2));
            result.SetValue("sumData", sumData);

            var yAxies = new List <yAxis>();
            var y1     = new yAxis {
                MiniValue = 0, TitleInfo = new Dictionary <string, object>(), Lable = new Dictionary <string, object>()
            };

            y1.TitleInfo.SetValue("text", "合同金额");
            y1.Lable.SetValue("format", "{value}元");
            var y2 = new yAxis {
                MiniValue = 0, TitleInfo = new Dictionary <string, object>(), Lable = new Dictionary <string, object>()
            };

            y2.TitleInfo.SetValue("text", "完成率");
            y2.Lable.SetValue("format", "{value}%"); y2.opposite = true;
            yAxies.Add(y1);
            yAxies.Add(y2);

            var serDefines    = new List <Series>();
            var ReceiptKPISer = new Series {
                Name = "合同目标", Field = "ContractKPI", Type = "column", yAxis = 0, Tooltip = new Dictionary <string, object>()
            };

            ReceiptKPISer.Tooltip.SetValue("valueSuffix", "元");
            serDefines.Add(ReceiptKPISer);

            var ReceiptValueSer = new Series {
                Name = "已签订金额", Field = "ContractValue", Type = "column", yAxis = 0, Tooltip = new Dictionary <string, object>()
            };

            ReceiptValueSer.Tooltip.SetValue("valueSuffix", "元");
            serDefines.Add(ReceiptValueSer);

            var CanReceiptValueSer = new Series {
                Name = "待签约金额", Field = "UnContractValue", Type = "column", yAxis = 0, Tooltip = new Dictionary <string, object>()
            };

            CanReceiptValueSer.Tooltip.SetValue("valueSuffix", "元");
            serDefines.Add(CanReceiptValueSer);

            var RecepitComplateRateSer = new Series {
                Name = "完成率", Field = "ContractComplateRate", Type = "spline", yAxis = 1, Tooltip = new Dictionary <string, object>()
            };

            RecepitComplateRateSer.Tooltip.SetValue("valueSuffix", "%");
            serDefines.Add(RecepitComplateRateSer);

            //var TimeRateSer = new Series { Name = "时间", Field = "TimeRate", Type = "spline", yAxis = 1, Tooltip = new Dictionary<string, object>() };
            //TimeRateSer.Tooltip.SetValue("valueSuffix", "%");
            //serDefines.Add(TimeRateSer);

            var chart = HighChartHelper.CreateColumnXYChart(belongYear + "年各部门合同情况", "", dt, "text", yAxies, serDefines, null);

            result.SetValue("chart", chart);
            return(Json(result));
        }
예제 #22
0
        public JsonResult GetDeptIndicatorList(string anlysisValue = "ReceiptValue")
        {
            var dt = EnumBaseHelper.GetEnumTable("System.ManDept");

            dt.Columns.Add("ContractKPI", typeof(decimal));
            dt.Columns.Add("ContractValue", typeof(decimal));
            dt.Columns.Add("ContractComplateRate", typeof(decimal));
            dt.Columns.Add("UnContractValue", typeof(decimal));
            dt.Columns.Add("ContractKPIRemain", typeof(decimal));
            dt.Columns.Add("ReceiptKPI", typeof(decimal));
            dt.Columns.Add("ReceiptValue", typeof(decimal));
            dt.Columns.Add("RecepitComplateRate", typeof(decimal));
            dt.Columns.Add("CanReceiptValue", typeof(decimal));
            dt.Columns.Add("RemaintContractValue", typeof(decimal));
            dt.Columns.Add("ReceiptKPIRemain", typeof(decimal));
            dt.Columns.Add("TimeRate", typeof(decimal));

            var belongYear  = String.IsNullOrEmpty(GetQueryString("BelongYear")) ? DateTime.Now.Year : Convert.ToInt32(GetQueryString("BelongYear"));
            var sql         = "select * from S_KPI_IndicatorOrg where IndicatorType = 'YearIndicator' and BelongYear= '{0}'";
            var indicatorDt = this.SqlHelper.ExecuteDataTable(String.Format(sql, belongYear));

            sql = @"SELECT  ISNULL(SUM(ReceiptInfo.ReceiptValue), 0) AS Value ,
                            ProductionDept,ProductionDeptName
                    FROM    ( SELECT    ReceiptValue,
                                        ProductionDept,ProductionDeptName
                              FROM      S_M_Receipt 
                                        LEFT JOIN S_M_ContractInfo ON ContractInfo = S_M_ContractInfo.ID
		                      WHERE YEAR(ReceiptDate)='{0}'
                            ) ReceiptInfo
                    WHERE   1 = 1
                    GROUP BY ProductionDept,ProductionDeptName; ";
            var receiptDt = this.SqlHelper.ExecuteDataTable(String.Format(sql, belongYear));

            sql = @"  select isnull(Sum(isnull(ReceiptValue,0)-isnull(FactReceiptValue,0)),0)  as DataValue,ProductionDept as ChargeDeptID,ProductionDeptName as ChargeDeptName 
                      FROM S_M_ContractInfo_ReceiptObj
                      left join S_M_ContractInfo on S_M_ContractInfo_ReceiptObj.S_M_ContractInfoID=S_M_ContractInfo.ID
                      group by ProductionDept,ProductionDeptName";
            var canReceiptDt = this.SqlHelper.ExecuteDataTable(sql);

            sql = @" select Sum(isnull(ContractRMBValue,0)-isnull(SumReceiptValue,0)) as DataValue,ProductionDept as ChargeDeptID,
                     ProductionDeptName as ChargeDeptName 
                     from S_M_ContractInfo where ContractState='Sign' group by ProductionDept,ProductionDeptName";
            var remainContractDt = this.SqlHelper.ExecuteDataTable(sql);

            sql = @" SELECT isnull(Sum(ContractRMBValue),0) as DataValue,ChargeDeptID,ChargeDeptName,BelongYear,BelongMonth,BelongQuarter
                     FROM
                    (select ContractRMBValue,ProductionDept as ChargeDeptID,ProductionDeptName as ChargeDeptName,
                    YEAR(SignDate) AS BelongYear,MONTH(SignDate) AS BelongMonth,DATEPART(QUARTER,SignDate) AS BelongQuarter
                    from S_M_ContractInfo 
                    WHERE ContractState='Sign' and YEAR(SignDate)='{0}')result
                    GROUP by BelongYear,BelongQuarter,BelongMonth,ChargeDeptID,ChargeDeptName ";
            var contractDt = this.SqlHelper.ExecuteDataTable(String.Format(sql, belongYear));

            sql = @"select isnull(Sum(ContractRMBValue),0) as DataValue,ChargeDeptID,ChargeDeptName,BelongYear,BelongMonth,BelongQuarter
                    FROM(
                    SELECT ContractRMBValue,ProductionDept as ChargeDeptID,ProductionDeptName as ChargeDeptName,
                    YEAR(SignDate) AS BelongYear,MONTH(SignDate) AS BelongMonth,DATEPART(QUARTER,SignDate) AS BelongQuarter
                    FROM dbo.S_M_ContractInfo
                    WHERE ContractState!='Sign' OR ContractState IS NULL
                    )resulttable
                    GROUP BY ChargeDeptID,ChargeDeptName,BelongYear,BelongMonth,BelongQuarter";
            var UncCntractDt = this.SqlHelper.ExecuteDataTable(sql);

            var sumReceptKpi = 0m; var sumReceiptValue = 0m; var sumContractKpi = 0m; var sumContractValue = 0m;

            foreach (DataRow row in dt.Rows)
            {
                var obj       = indicatorDt.Compute("Sum(ReceiptValue)", "OrgID='" + row["value"] + "'");
                var receptkpi = obj == null || obj == DBNull.Value ? 0 : Convert.ToDecimal(obj);
                row["ReceiptKPI"] = receptkpi;
                sumReceptKpi     += receptkpi;
                obj = receiptDt.Compute("Sum(DataValue)", "ChargeDeptID='" + row["value"] + "'");
                var recepitValue = obj == null || obj == DBNull.Value ? 0 : Convert.ToDecimal(obj);
                row["ReceiptValue"]        = recepitValue;
                sumReceiptValue           += recepitValue;
                row["RecepitComplateRate"] = receptkpi == 0 ? 100 : Math.Round(recepitValue / receptkpi * 100, 2);

                obj = canReceiptDt.Compute("Sum(DataValue)", "ChargeDeptID='" + row["value"] + "'");
                row["CanReceiptValue"]      = obj == null || obj == DBNull.Value ? 0 : Convert.ToDecimal(obj);
                row["RemaintContractValue"] = remainContractDt.Compute("Sum(DataValue)", "ChargeDeptID='" + row["value"] + "'");
                row["ReceiptKPIRemain"]     = receptkpi - recepitValue;
                //row["TimeRate"] = Math.Round(Convert.ToDecimal(DateTime.Now.DayOfYear) / 365 * 100);

                obj = indicatorDt.Compute("Sum(ContractValue)", "OrgID='" + row["value"] + "'");
                var contractKpi = obj == null || obj == DBNull.Value ? 0 : Convert.ToDecimal(obj);
                row["ContractKPI"] = contractKpi;
                sumContractKpi    += contractKpi;

                obj = contractDt.Compute("Sum(DataValue)", "ChargeDeptID='" + row["value"] + "'");
                var value = obj == null || obj == DBNull.Value ? 0 : Convert.ToDecimal(obj);
                row["ContractValue"]        = value;
                sumContractValue           += value;
                row["ContractComplateRate"] = contractKpi == 0 ? 100 : Math.Round(value / contractKpi * 100, 2);

                obj = UncCntractDt.Compute("Sum(DataValue)", "ChargeDeptID='" + row["value"] + "'");
                row["UnContractValue"]   = obj == null || obj == DBNull.Value ? 0 : Convert.ToDecimal(obj);
                row["ContractKPIRemain"] = contractKpi - value;
            }
            var result = new Dictionary <string, object>();

            result.SetValue("data", dt);
            var sumData = new Dictionary <string, object>();

            sumData.SetValue("RecepitComplateRate", sumReceptKpi == 0 ? 100 : Math.Round(sumReceiptValue / sumReceptKpi * 100, 2));
            sumData.SetValue("ContractComplateRate", sumContractKpi == 0 ? 100 : Math.Round(sumReceiptValue / sumContractKpi * 100, 2));
            result.SetValue("sumData", sumData);

            #region 生成图表
            var yAxies = new List <yAxis>();
            var y1     = new yAxis {
                MiniValue = 0, TitleInfo = new Dictionary <string, object>(), Lable = new Dictionary <string, object>()
            };
            y1.TitleInfo.SetValue("text", "金额");
            y1.Lable.SetValue("format", "{value}元");
            var y2 = new yAxis {
                MiniValue = 0, TitleInfo = new Dictionary <string, object>(), Lable = new Dictionary <string, object>()
            };
            y2.TitleInfo.SetValue("text", "完成率");
            y2.Lable.SetValue("format", "{value}%"); y2.opposite = true;
            yAxies.Add(y1);
            yAxies.Add(y2);

            var serDefines = new List <Series>();
            if (anlysisValue == AnlysisValue.ReceiptValue.ToString())
            {
                var ReceiptKPISer = new Series {
                    Name = "收款目标", Field = "ReceiptKPI", Type = "column", yAxis = 0, Tooltip = new Dictionary <string, object>()
                };
                ReceiptKPISer.Tooltip.SetValue("valueSuffix", "元");
                serDefines.Add(ReceiptKPISer);

                var ReceiptValueSer = new Series {
                    Name = "已收款", Field = "ReceiptValue", Type = "column", yAxis = 0, Tooltip = new Dictionary <string, object>()
                };
                ReceiptValueSer.Tooltip.SetValue("valueSuffix", "元");
                serDefines.Add(ReceiptValueSer);

                var CanReceiptValueSer = new Series {
                    Name = "经营应收款", Field = "CanReceiptValue", Type = "column", yAxis = 0, Tooltip = new Dictionary <string, object>()
                };
                CanReceiptValueSer.Tooltip.SetValue("valueSuffix", "元");
                serDefines.Add(CanReceiptValueSer);

                var RecepitComplateRateSer = new Series {
                    Name = "收款完成率", Field = "RecepitComplateRate", Type = "spline", yAxis = 1, Tooltip = new Dictionary <string, object>()
                };
                RecepitComplateRateSer.Tooltip.SetValue("valueSuffix", "%");
                serDefines.Add(RecepitComplateRateSer);
            }
            else
            {
                var contractKPISer = new Series {
                    Name = "合同目标", Field = "ContractKPI", Type = "column", yAxis = 0, Tooltip = new Dictionary <string, object>()
                };
                contractKPISer.Tooltip.SetValue("valueSuffix", "元");
                serDefines.Add(contractKPISer);

                var contractValueSer = new Series {
                    Name = "已签订金额", Field = "ContractValue", Type = "column", yAxis = 0, Tooltip = new Dictionary <string, object>()
                };
                contractValueSer.Tooltip.SetValue("valueSuffix", "元");
                serDefines.Add(contractValueSer);

                var unContractValueSer = new Series {
                    Name = "待签约金额", Field = "UnContractValue", Type = "column", yAxis = 0, Tooltip = new Dictionary <string, object>()
                };
                unContractValueSer.Tooltip.SetValue("valueSuffix", "元");
                serDefines.Add(unContractValueSer);

                var contractComplateRateSer = new Series {
                    Name = "合同完成率", Field = "ContractComplateRate", Type = "spline", yAxis = 1, Tooltip = new Dictionary <string, object>()
                };
                contractComplateRateSer.Tooltip.SetValue("valueSuffix", "%");
                serDefines.Add(contractComplateRateSer);
            }

            //var TimeRateSer = new Series { Name = "时间", Field = "TimeRate", Type = "spline", yAxis = 1, Tooltip = new Dictionary<string, object>() };
            //TimeRateSer.Tooltip.SetValue("valueSuffix", "%");
            //serDefines.Add(TimeRateSer);
            string title = belongYear + "年各部门收款完成情况";
            if (anlysisValue == AnlysisValue.ContractValue.ToString())
            {
                title = belongYear + "年各部门合同完成情况";
            }
            var chart = HighChartHelper.CreateColumnXYChart(title, "", dt, "text", yAxies, serDefines, null);
            result.SetValue("chart", chart);
            #endregion

            return(Json(result));
        }
예제 #23
0
        public ActionResult TraceList()
        {
            string engineeringInfoID = this.GetQueryString("EngineeringInfoID");
            var    engineeringInfo   = this.GetEntityByID <S_I_Engineering>(engineeringInfoID);

            if (engineeringInfo == null)
            {
                throw new Formula.Exceptions.BusinessValidationException("没有找到指定的工程信息");
            }
            if (engineeringInfo.Mode == null)
            {
                throw new Formula.Exceptions.BusinessValidationException("工程未关联任何管理模式,请联系管理员");
            }
            string Code   = this.GetQueryString("ScheduleCode");
            var    define = engineeringInfo.Mode.S_C_ScheduleDefine.FirstOrDefault(c => c.Code == Code);

            if (define == null)
            {
                throw new Formula.Exceptions.BusinessValidationException("没有找到编号为【" + Code + "】的计划定义视图,请联系管理员");
            }
            var version = engineeringInfo.S_I_WBS_Version.Where(c => c.ScheduleCode == Code && c.FlowPhase == "End").
                          OrderByDescending(c => c.ID).FirstOrDefault();
            var pushCount  = engineeringInfo.S_I_WBS_Version.Count(c => c.FlowPhase == "End" && c.ScheduleCode == Code);
            var attrDefine = new List <Dictionary <string, object> >();

            if (!String.IsNullOrEmpty(define.AttrDefine))
            {
                attrDefine = JsonHelper.ToList(define.AttrDefine);
            }
            ViewBag.AttrDefine = JsonHelper.ToJson(attrDefine);
            ViewBag.Define     = define;

            if (version == null)
            {
                ViewBag.FlowPhase = "";
                ViewBag.VersionNo = "0";
                ViewBag.VersionID = "";
            }
            else
            {
                ViewBag.FlowPhase = version.FlowPhase;
                ViewBag.VersionNo = version.VersionNumber;
                ViewBag.VersionID = version.ID;
            }
            ViewBag.EngineeringInfoID = engineeringInfoID;
            ViewBag.PushCount         = pushCount;
            ViewBag.ScheduleCode      = Code;
            ViewBag.DefineID          = define.ID;
            var nodeTypeEnum = EnumBaseHelper.GetEnumDef("Base.WBSType");

            if (nodeTypeEnum == null)
            {
                throw new Formula.Exceptions.BusinessValidationException("没有找到编号为【Base.WBSType】的枚举");
            }
            var nodeTypeList = define.S_C_ScheduleDefine_Nodes.Where(c => c.NodeType != WBSConst.taskNodeType && c.Visible == "1").Select(c => c.NodeType).Distinct().ToList();
            var list         = nodeTypeEnum.EnumItem.Where(c => nodeTypeList.Contains(c.Code)).OrderBy(c => c.SortIndex).ToList();
            var enumNodeType = new List <Dictionary <string, object> >();

            for (int i = 0; i < list.Count; i++)
            {
                var item = list[i];
                var dic  = new Dictionary <string, object>();
                dic.SetValue("value", i + 1);
                dic.SetValue("text", item.Name);
                dic.SetValue("sortindex", item.SortIndex);
                enumNodeType.Add(dic);
                if (i == list.Count - 1)
                {
                    ViewBag.ExpandLevel = i + 1;
                }
            }
            ViewBag.NodeTypeEnum = JsonHelper.ToJson(enumNodeType);
            return(View());
        }
예제 #24
0
        /// <summary>
        /// 执行校审
        /// </summary>
        /// <param name="exeParam">流程执行参数</param>
        /// <returns>执行结果对象</returns>
        public virtual ExeResult Execute(S_W_Activity activity, AuditFlowExecuteParam exeParam)
        {
            var exeResult = new ExeResult();
            var wbs       = this.instanceEnitites.S_W_WBS.SingleOrDefault(d => d.ID == exeParam.WBSID);

            if (wbs == null)
            {
                throw new Exception("未能找到ID为【" + exeParam.WBSID + "】的WBS对象,无法执行校审");
            }

            //结束当前步骤
            activity.ExeucteOption = exeParam.ExecuteOption.ToString();
            activity.Finish();

            //结束属于一组的所有活动
            string state = ProjectCommoneState.Finish.ToString();

            instanceEnitites.S_W_Activity.Where(c => c.BusniessID == activity.BusniessID && c.GroupID == activity.GroupID).Update(c => c.State = state);

            string createState = ProjectCommoneState.Create.ToString();
            var    currentStep = activity.GetCurrentStep();

            //如果是打回,结束所有本环节流程
            if (exeParam.ExecuteOption == AuditOption.Back || exeParam.ExecuteOption == AuditOption.Return)
            {
                instanceEnitites.S_W_Activity.Where(c => c.BusniessID == activity.BusniessID && c.ActivityKey == activity.ActivityKey).Update(c => c.State = state);
            }//并签时,查找本环节是否还有未结束的活动,如果有,直接返回
            else if (currentStep.AuditModel == AuditModel.multi && instanceEnitites.S_W_Activity.Where(c => c.BusniessID == activity.BusniessID && c.State == createState && c.ActivityKey == activity.ActivityKey && c.GroupID != activity.GroupID).Count() > 0)
            {
                exeResult.IsComplete = false;
                exeResult.ExecStatus = "Wait";
                return(exeResult);
            }//串签时,如果还有等待的环节,直接把等待环节new出来
            else if (currentStep.AuditModel == AuditModel.Follow && instanceEnitites.S_W_Activity.Where(c => c.BusniessID == activity.BusniessID && c.State == "Wait" && c.ActivityKey == activity.ActivityKey && c.GroupID != activity.GroupID).Count() > 0)
            {
                var waitAct = instanceEnitites.S_W_Activity.Where(c => c.BusniessID == activity.BusniessID && c.State == "Wait" && c.ActivityKey == activity.ActivityKey && c.GroupID != activity.GroupID).OrderBy("ID", true).FirstOrDefault();
                waitAct.State = ProjectCommoneState.Create.ToString();

                exeResult.IsComplete = false;
                exeResult.ExecStatus = "Wait";
                return(exeResult);
            }


            //活动环节上定义的所有校审步骤
            var steps    = activity.GetSteps();
            var lastStep = steps.OrderByDescending(d => d.StepIndex).FirstOrDefault();

            //如果执行参数中的执行结果为结束校审,则直接结束校审
            if (exeParam.ExecuteOption == AuditOption.Over)
            {
                //如果是第一步直接结束,则认为是设计人直接撤回校审单
                if (activity.ActivityKey == ActivityType.Design.ToString())
                {
                    exeResult.IsCancel = true;
                }
                exeResult.IsComplete = true;
            }
            //如果当前步骤是活动步骤定义中的最后一个步骤,并且执行参数中的执行结果是通过的,则直接结束校审
            else if (lastStep.StepKey.ToString() == activity.ActivityKey && exeParam.ExecuteOption == AuditOption.Pass)
            {
                exeResult.IsComplete = true;
            }
            else
            {
                //正常向下执行校审
                //活动执行参数中的下一步骤对象
                var nextStep = exeParam.NextStep;
                if (nextStep == null)
                {
                    throw new Exception("下一环节的活动未找到,无法执行校审流程");
                }
                if (nextStep.UserID == "SelectOneUser" || nextStep.UserID == "SelectMultiUser" || string.IsNullOrEmpty(nextStep.UserID))
                {
                    throw new Exception("未指定下环节[" + nextStep.StepName + "]人员,不能执行到下一步。");
                }
                exeResult.IsComplete = false;
                var nextUserIDs   = nextStep.UserID.Split(',');
                var nextUserNames = nextStep.UserName.Split(',');
                //步骤上可存在多人,如果步骤中定义的是单签,则创建相同GroupID的活动,否则GroupID不相同
                string groupID = FormulaHelper.CreateGuid();
                for (int i = 0; i < nextUserIDs.Length; i++)
                {
                    var userID       = nextUserIDs[i];
                    var userName     = nextUserNames[i];
                    var nextActivity = new S_W_Activity();
                    if (String.IsNullOrEmpty(exeParam.DisplayName))
                    {
                        nextActivity.DisplayName = activity.DisplayName;
                    }
                    else
                    {
                        nextActivity.DisplayName = exeParam.DisplayName;
                    }
                    nextActivity.ActvityName   = EnumBaseHelper.GetEnumDescription(typeof(ActivityType), exeParam.NextStep.StepKey.ToString());
                    nextActivity.ActivityKey   = nextStep.StepKey.ToString();
                    nextActivity.OwnerUserID   = userID;
                    nextActivity.OwnerUserName = userName;
                    nextActivity.DefSteps      = activity.DefSteps;
                    nextActivity.AuditPatchID  = activity.AuditPatchID;
                    nextActivity.BusniessID    = activity.BusniessID;
                    nextActivity.LinkUrl       = activity.LinkUrl;
                    nextActivity.Params        = activity.Params;

                    //单签
                    if (nextStep.AuditModel == AuditModel.single)
                    {
                        nextActivity.GroupID = groupID;
                    }
                    else
                    {
                        nextActivity.GroupID = FormulaHelper.CreateGuid();
                        //如果是串签,则除去第一个外,都为等待状态
                        if (nextStep.AuditModel == AuditModel.Follow && i != 0)
                        {
                            nextActivity.State = "Wait";
                        }
                    }

                    if (nextStep.StepKey == ActivityType.Design)
                    {
                        if (exeParam.ExecuteOption == AuditOption.Return)
                        {
                            //如果存在中间必须经过的环节,则取必须经过的环节
                            var mustStep = steps.Where(c => c.StepIndex < currentStep.StepIndex && c.MustStep == "是").FirstOrDefault();
                            if (mustStep != null)
                            {
                                nextActivity.NextStep = JsonHelper.ToJson(mustStep.ToDic());
                            }
                            else
                            {
                                nextActivity.NextStep = JsonHelper.ToJson(activity.GetCurrentStep().ToDic());
                            }
                        }
                        else
                        {
                            var nextActivityStep = steps.FirstOrDefault(d => d.StepKey.ToString() == nextActivity.ActivityKey);
                            var afterStepIndex   = steps.IndexOf(nextActivityStep) + 1;
                            if (afterStepIndex >= steps.Count)
                            {
                                throw new Exception("");
                            }
                            nextStep = steps[afterStepIndex];
                            nextActivity.NextStep = JsonHelper.ToJson(nextStep.ToDic());
                        }
                    }

                    wbs.AddActivity(nextActivity);
                    exeResult.Activities.Add(nextActivity);
                }
            }
            return(exeResult);
        }
예제 #25
0
        protected override void OnFlowEnd(T_CP_TaskNotice entity, Workflow.Logic.Domain.S_WF_InsTaskExec taskExec, Workflow.Logic.Domain.S_WF_InsDefRouting routing)
        {
            if (entity == null)
            {
                throw new Formula.Exceptions.BusinessException("没有找到指定的任务单,立项失败");
            }
            var marketEntities = FormulaHelper.GetEntities <Market.Logic.Domain.MarketEntities>();

            var projectList = new List <S_I_ProjectInfo>();

            if (!String.IsNullOrEmpty(entity.ProjectInfoID) &&
                this.BusinessEntities.Set <S_I_ProjectInfo>().Any(a => a.ID == entity.ProjectInfoID))
            {
                #region 任务单升版
                S_I_ProjectInfo projectInfo = null;
                S_I_Project     project     = null;
                projectInfo             = entity.UpGrade();
                project                 = marketEntities.S_I_Project.FirstOrDefault(d => d.ID == projectInfo.MarketProjectInfoID);
                project.Name            = entity.ProjectInfo;
                project.Code            = entity.SerialNumber;
                project.Phase           = entity.Phase;
                project.ProjectClass    = entity.ProjectClass;
                project.Customer        = entity.Customer;
                project.CustomerName    = entity.CustomerName;
                project.CreateDate      = DateTime.Now;
                project.EngineeringInfo = entity.EngineeringID;
                project.ChargerDept     = string.IsNullOrEmpty(entity.ChargeDept) ? entity.DesignDept : entity.ChargeDept;
                project.ChargerDeptName = string.IsNullOrEmpty(entity.ChargeDeptName) ? entity.DesignDeptName : entity.ChargeDeptName;
                project.ChargerUser     = entity.ChargeUser;
                project.ChargerUserName = entity.ChargeUserName;
                project.Country         = entity.Country;
                project.Province        = entity.Province;
                project.Area            = entity.Area;

                if (string.IsNullOrEmpty(project.Area))
                {
                    //获取省份对应的地区(SubCategory)
                    var enumItem = EnumBaseHelper.GetEnumDef("System.Province").EnumItem.FirstOrDefault(a => a.Code == entity.Province);
                    if (enumItem != null)
                    {
                        project.Area = enumItem.SubCategory;
                    }
                }
                project.City             = entity.City;
                project.ProjectScale     = entity.ProjectLevel;
                projectInfo.ModifyDate   = DateTime.Now;
                projectInfo.ModifyUser   = entity.CreateUser;
                projectInfo.ModifyUserID = entity.CreateUserID;

                //修改经营库项目名称冗余字段
                if (!string.IsNullOrEmpty(projectInfo.MarketProjectInfoID))
                {
                    if (entity.ContractValue.HasValue && String.IsNullOrEmpty(entity.ContractInfo))
                    {
                        marketEntities.S_C_ManageContract_ProjectRelation.Where(a => a.ProjectID == projectInfo.MarketProjectInfoID &&
                                                                                a.S_C_ManageContractID == entity.ContractInfo).Update(a => a.ProjectValue = entity.ContractValue);
                    }
                    marketEntities.S_C_ManageContract_ProjectRelation.Where(a => a.ProjectID == projectInfo.MarketProjectInfoID).Update(a => a.ProjectName  = entity.ProjectInfo);
                    marketEntities.S_C_ManageContract_ReceiptObj.Where(a => a.ProjectInfo == projectInfo.MarketProjectInfoID).Update(a => a.ProjectInfoName = entity.ProjectInfo);
                    marketEntities.S_C_PlanReceipt.Where(a => a.ProjectID == projectInfo.MarketProjectInfoID).Update(a => a.ProjectName             = entity.ProjectInfo);
                    marketEntities.S_FC_CostInfo.Where(a => a.ProjectID == projectInfo.MarketProjectInfoID).Update(a => a.ProjectName               = entity.ProjectInfo);
                    marketEntities.S_SP_SupplierContract.Where(a => a.ProjectInfo == projectInfo.MarketProjectInfoID).Update(a => a.ProjectInfoName = entity.ProjectInfo);
                }
                projectList.Add(projectInfo);
                #endregion
            }
            else
            {
                #region 新建任务单立项

                #region 如果工程信息为空,则默认创建工程
                var  engineering = marketEntities.S_I_Engineering.Find(entity.EngineeringID);
                bool newEngineer = false;
                if (engineering == null)
                {
                    engineering    = new S_I_Engineering();
                    engineering.ID = FormulaHelper.CreateGuid();
                    marketEntities.S_I_Engineering.Add(engineering);
                    newEngineer = true;
                }
                engineering.Name = String.IsNullOrEmpty(entity.EngineeringName) ? entity.ProjectInfo : entity.EngineeringName;
                if (!String.IsNullOrEmpty(entity.Customer))
                {
                    engineering.CustomerInfo     = entity.Customer;
                    engineering.CustomerInfoName = entity.CustomerName;
                }
                engineering.Code = String.IsNullOrEmpty(entity.EngineeringCode) ? entity.SerialNumber : entity.EngineeringCode;
                if (!string.IsNullOrEmpty(entity.MainDeptInfo))
                {
                    engineering.MainDept     = entity.MainDeptInfo;
                    engineering.MainDeptName = entity.MainDeptInfoName;
                }
                else if (string.IsNullOrEmpty(engineering.MainDept))
                {
                    engineering.MainDept     = entity.ChargeDept;
                    engineering.MainDeptName = entity.ChargeDeptName;
                }
                engineering.OtherDept       = String.IsNullOrEmpty(entity.EngineeringOtherDept) ? entity.OtherDept : entity.EngineeringOtherDept;
                engineering.OtherDeptName   = String.IsNullOrEmpty(entity.EngineeringOtherDeptName) ? entity.OtherDeptName : entity.EngineeringOtherDeptName;
                engineering.ChargerUser     = String.IsNullOrEmpty(entity.EngineeringChargeUser) ? entity.ChargeUser : entity.EngineeringChargeUser;
                engineering.ChargerUserName = String.IsNullOrEmpty(entity.EngineeringChargeUserName) ? entity.ChargeUserName : entity.EngineeringChargeUserName;
                engineering.Country         = entity.Country;
                engineering.Province        = entity.Province;
                engineering.City            = entity.City;
                engineering.Area            = entity.Area;
                engineering.Proportion      = entity.BuildArea;
                engineering.Address         = entity.BuildAddress;
                engineering.LandingArea     = entity.LandArea;
                engineering.CreateDate      = DateTime.Now;
                if (!String.IsNullOrEmpty(entity.Investment))
                {
                    engineering.Investment = Convert.ToDecimal(entity.Investment);
                }
                if (newEngineer)
                {
                    entity.EngineeringID             = engineering.ID;
                    entity.EngineeringName           = engineering.Name;
                    entity.EngineeringCode           = engineering.Code;
                    entity.EngineeringChargeUser     = engineering.ChargerUser;
                    entity.EngineeringChargeUserName = engineering.ChargerUserName;
                    entity.MainDeptInfo             = engineering.MainDept;
                    entity.MainDeptInfoName         = engineering.MainDeptName;
                    entity.EngineeringOtherDept     = engineering.OtherDept;
                    entity.EngineeringOtherDeptName = engineering.OtherDeptName;
                }

                var phaseName       = "";
                var phaseList       = BaseConfigFO.GetWBSAttrList(WBSNodeType.Phase);
                var entityPhaseList = phaseList.Where(d => entity.Phase.Contains(d.Code)).ToList();
                foreach (var item in entityPhaseList)
                {
                    phaseName += item.Name + ",";
                }
                engineering.PhaseContent = phaseName.TrimEnd(',');
                engineering.PhaseValue   = entity.Phase;
                #endregion

                if (!string.IsNullOrEmpty(entity.MultiProjMode) && entity.MultiProjMode.ToLower() == "1")
                {
                    var list = entity.Phase.Split(',');
                    if (list.Length == 0)
                    {
                        throw new Formula.Exceptions.BusinessException("没有指定阶段");
                    }

                    string projIds = "";
                    foreach (var item in entity.T_CP_TaskNotice_PhaseDetail)
                    {
                        var prj = AddProject(entity, engineering, item);
                        projIds           += prj.ID + ",";
                        item.ProjectInfoID = prj.ID;
                        projectList.Add(prj);
                    }
                    entity.ProjectInfoID = projIds.TrimEnd(',');
                }
                else
                {
                    var prj = AddProject(entity, engineering);
                    projectList.Add(prj);
                }

                #endregion
            }

            this.BusinessEntities.SaveChanges();
            marketEntities.SaveChanges();


            #region 自动同步核算项目
            Expenses.Logic.CBSInfoFO.SynCBSInfo(FormulaHelper.ModelToDic <T_CP_TaskNotice>(entity), Expenses.Logic.SetCBSOpportunity.TaskNoticeComplete);
            #endregion
        }
예제 #26
0
        protected override void BeforeSave(Dictionary <string, string> dic, Base.Logic.Domain.S_UI_Form formInfo, bool isNew)
        {
            var entity = this.GetEntityByID(dic["ID"]);

            if (entity == null)
            {
                entity = new T_SC_MixProjectScheme();
            }
            var sublist = JsonHelper.ToList(dic.GetValue("SubProjectList"));

            if (dic.ContainsKey("SubProjectList"))
            {
                foreach (var item in sublist)
                {
                    if (String.IsNullOrEmpty(item.GetValue("Code")))
                    {
                        item.SetValue("Code", FormulaHelper.CreateGuid());
                    }
                }
                dic.SetValue("SubProjectList", JsonHelper.ToJson(sublist));
            }
            this.UpdateEntity(entity, dic);

            #region 临时模式根据模式结构校验子项
            var projectInfo = this.GetEntityByID <S_I_ProjectInfo>(dic.GetValue("ProjectInfoID"));
            if (projectInfo.ProjectMode.ExtentionObject.GetValue("Ext_TemporaryMode") == TrueOrFalse.True.ToString())
            {
                var ignorKeys = new string[] { "CreateUserID", "CreateUser", "CreateDate", "State", "Major" };
                var schemeDic = new Dictionary <string, string>(dic);
                schemeDic.RemoveWhere(a => ignorKeys.Contains(a.Key));
                projectInfo.ValidateMode(schemeDic, sublist.Count > 0);
            }
            #endregion

            #region 校验整体专业
            #region 校验成果
            string sql = @"select distinct MajorValue, S_W_WBS.Name MajorName from S_E_Product p
left join S_W_WBS on p.WBSID = S_W_WBS.ID 
where p.ProjectInfoID='{0}' and MajorValue not in ('{1}')";
            sql = string.Format(sql, entity.ProjectInfoID, entity.Major.Replace(",", "','"));
            var dt = this.ProjectSQLDB.ExecuteDataTable(sql);
            if (dt.Rows.Count > 0)
            {
                var msgMajor = "";
                foreach (DataRow item in dt.Rows)
                {
                    msgMajor += item["MajorName"].ToString() + ",";
                }
                throw new Formula.Exceptions.BusinessException("专业【" + msgMajor.TrimEnd(',') + "】已经上传了设计成果,必须选中。");
            }
            #endregion

            #region 校验提资单
            var sqlPutInfo = @"select distinct OutMajorValue, S_W_WBS.Name MajorName from T_EXE_MajorPutInfo p
left join S_W_WBS on p.WBSID = S_W_WBS.ParentID and p.OutMajorValue = S_W_WBS.WBSValue 
where p.ProjectInfoID='{0}' and OutMajorValue not in ('{1}')";
            sqlPutInfo = string.Format(sqlPutInfo, entity.ProjectInfoID, entity.Major.Replace(",", "','"));
            var dtPutInfo = this.ProjectSQLDB.ExecuteDataTable(sqlPutInfo);
            if (dtPutInfo.Rows.Count > 0)
            {
                var msgMajor = "";
                foreach (DataRow item in dtPutInfo.Rows)
                {
                    msgMajor += item["MajorName"].ToString() + ",";
                }
                throw new Formula.Exceptions.BusinessException("专业【" + msgMajor.TrimEnd(',') + "】发起过提资,必须选中。");
            }
            #endregion

            #region 校验共享区
            var sqlShareInfo = @"select distinct p.WBSValue, S_W_WBS.Name MajorName from S_D_ShareInfo p
left join S_W_WBS on p.SubProjectWBSID = S_W_WBS.ParentID and p.WBSValue = S_W_WBS.WBSValue 
where p.ProjectInfoID='{0}' and p.WBSValue not in ('{1}')";
            sqlShareInfo = string.Format(sqlShareInfo, entity.ProjectInfoID, entity.Major.Replace(",", "','"));
            var dtShareInfo = this.ProjectSQLDB.ExecuteDataTable(sqlShareInfo);
            if (dtShareInfo.Rows.Count > 0)
            {
                var msgMajor = "";
                foreach (DataRow item in dtShareInfo.Rows)
                {
                    msgMajor += item["MajorName"].ToString() + ",";
                }
                throw new Formula.Exceptions.BusinessException("专业【" + msgMajor.TrimEnd(',') + "】拥有共享区文件,必须选中。");
            }
            #endregion

            #region 校验专业里程碑
            string        finishState       = ProjectCommoneState.Finish.ToString();
            var           finishMileStones  = this.BusinessEntities.Set <S_P_MileStone>().Where(a => a.ProjectInfoID == entity.ProjectInfoID && a.State == finishState).ToList();
            List <string> msgMileStoneMajor = new List <string>();
            foreach (var item in finishMileStones)
            {
                if (string.IsNullOrEmpty(item.MajorValue) && string.IsNullOrEmpty(item.OutMajorValue))
                {
                    continue;
                }
                if (!entity.Major.Split(',').Contains(item.MajorValue))
                {
                    if (!msgMileStoneMajor.Contains(item.MajorValue))
                    {
                        msgMileStoneMajor.Add(item.MajorValue);
                    }
                }
                if (!string.IsNullOrEmpty(item.OutMajorValue))
                {
                    foreach (var _oMajorValue in item.OutMajorValue.Split(','))
                    {
                        if (string.IsNullOrEmpty(_oMajorValue))
                        {
                            continue;
                        }
                        if (!entity.Major.Split(',').Contains(_oMajorValue))
                        {
                            if (!msgMileStoneMajor.Contains(_oMajorValue))
                            {
                                msgMileStoneMajor.Add(_oMajorValue);
                            }
                        }
                    }
                }
            }
            if (msgMileStoneMajor.Count > 0)
            {
                var enmDef = EnumBaseHelper.GetEnumDef("Project.Major");
                throw new Formula.Exceptions.BusinessException("专业【" + String.Join(",", enmDef.EnumItem.Where(d => msgMileStoneMajor.Contains(d.Code)).Select(d => d.Name)) + "】已经有相关里程碑完成,必须选中。");
            }
            #endregion
            #endregion

            #region 校验子项
            var newsubid       = sublist.Select(t => t.GetValue("Code"));
            var enumSubProject = WBSNodeType.SubProject.ToString();
            var wbsList        = this.BusinessEntities.Set <S_W_WBS>().Where(a => a.ProjectInfoID == entity.ProjectInfoID).ToList();
            var subWBSList     = wbsList.Where(a => a.WBSType == enumSubProject).ToList();
            #region 校验成果
            subWBSList
            .Where(w => !newsubid.Contains(w.WBSValue))
            .ToList()
            .ForEach(t =>
            {
                if (t.HasProducts())
                {
                    throw new Formula.Exceptions.BusinessException("子项【" + t.Name + "】已经有成果图纸,不能删除。");
                }
            });
            #endregion

            var WBSIDList = wbsList.Where(a => newsubid.Contains(a.WBSValue)).Select(a => a.ID).ToList();
            #region 校验提资单
            var putInfoList = BusinessEntities.Set <T_EXE_MajorPutInfo>().Where(a => a.ProjectInfoID == entity.ProjectInfoID).ToList();
            var hasPutInfo  = putInfoList.Where(a => !WBSIDList.Contains(a.WBSID)).ToList();
            if (hasPutInfo.Count > 0)
            {
                var name = "";
                for (int i = 0; i < hasPutInfo.Count; i++)
                {
                    var pInfo = hasPutInfo[i];
                    if (!string.IsNullOrEmpty(pInfo.WBSID))
                    {
                        var _wbs = wbsList.FirstOrDefault(a => a.ID == pInfo.WBSID);
                        if (_wbs != null)
                        {
                            var subNode = subWBSList.FirstOrDefault(a => _wbs.FullID.Split('.').Contains(a.ID));
                            if (subNode != null)
                            {
                                name += subNode.Name + ",";
                            }
                        }
                    }
                }
                throw new Formula.Exceptions.BusinessException("子项【" + name.TrimEnd(',') + "】发起过提资,不能删除。");
            }
            #endregion

            #region 校验共享区
            var shareInfoList = BusinessEntities.Set <S_D_ShareInfo>().Where(a => a.ProjectInfoID == entity.ProjectInfoID).ToList();
            var hasShareInfo  = shareInfoList.Where(a => !WBSIDList.Contains(a.SubProjectWBSID)).ToList();
            if (hasShareInfo.Count > 0)
            {
                var name = "";
                for (int i = 0; i < hasShareInfo.Count; i++)
                {
                    var sInfo = hasShareInfo[i];
                    if (!string.IsNullOrEmpty(sInfo.SubProjectWBSID))
                    {
                        var _wbs = wbsList.FirstOrDefault(a => a.ID == sInfo.SubProjectWBSID);
                        if (_wbs != null)
                        {
                            var subNode = subWBSList.FirstOrDefault(a => _wbs.FullID.Split('.').Contains(a.ID));
                            if (subNode != null)
                            {
                                name += subNode.Name + ",";
                            }
                        }
                    }
                }
                throw new Formula.Exceptions.BusinessException("子项【" + name.TrimEnd(',') + "】拥有共享区文件,不能删除。");
            }
            #endregion
            #endregion

            #region 校验子项下的专业
            foreach (var subProject in sublist)
            {
                if (!String.IsNullOrEmpty(subProject.GetValue("RBSJson")))
                {
                    var rbsList            = JsonHelper.ToList(subProject.GetValue("RBSJson"));
                    var subProjectWBSValue = subProject.GetValue("Code");
                    var subProjectWBSNode  = wbsList.FirstOrDefault(a => a.WBSValue == subProjectWBSValue);
                    if (subProjectWBSNode == null)
                    {
                        continue;
                    }
                    foreach (var majorNode in rbsList)
                    {
                        if (majorNode.GetValue("Valid") == "0")
                        {
                            var code = majorNode.GetValue("MajorCode");
                            #region 校验成果
                            wbsList
                            .Where(w => w.ParentID == subProjectWBSNode.ID && w.WBSValue == code)
                            .ToList().ForEach(t =>
                            {
                                if (t.HasProducts())
                                {
                                    throw new Formula.Exceptions.BusinessException("子项【" + subProject.GetValue("Name") + "】下的专业【" + t.Name + "】已经有成果图纸,不能删除。");
                                }
                            });
                            #endregion

                            #region 校验提资单
                            var hasPutInfo2 = putInfoList.Where(a => a.WBSID == subProjectWBSNode.ID && a.OutMajorValue == code).ToList();
                            if (hasPutInfo2.Count > 0)
                            {
                                throw new Formula.Exceptions.BusinessException("子项【" + subProject.GetValue("Name") + "】下的专业【" + majorNode.GetValue("MajorName") + "】发起过提资,不能删除。");
                            }
                            #endregion

                            #region 校验共享区
                            var hasShareInfo2 = shareInfoList.Where(a => a.SubProjectWBSID == subProjectWBSNode.ID && a.WBSValue == code).ToList();
                            if (hasShareInfo2.Count > 0)
                            {
                                throw new Formula.Exceptions.BusinessException("子项【" + subProject.GetValue("Name") + "】下的专业【" + majorNode.GetValue("MajorName") + "】拥有共享区文件,不能删除。");
                            }
                            #endregion
                        }
                    }
                }
            }
            #endregion

            #region 校验里程碑编号

            var db = SQLHelper.CreateSqlHelper(ConnEnum.InfrasBaseConfig);
            sql = @"select ID,MileStoneName,MileStoneCode,MileStoneType,Weight,SortIndex,OutMajors,InMajors,PhaseValue from dbo.S_T_MileStone
where ModeID in (select ID from S_T_ProjectMode where ModeCode='{0}') and ProjectClass like '%{1}%'  {2}
order by SortIndex ";
            var phaseStr = string.Empty;
            foreach (var item in projectInfo.PhaseValue.Split(','))
            {
                phaseStr += ("or PhaseValue like '%" + item + "%' ");
            }
            phaseStr = " and (" + phaseStr.TrimStart('o', 'r') + ")";
            var templateDt = db.ExecuteDataTable(String.Format(sql, projectInfo.ModeCode, projectInfo.ProjectClass, phaseStr));
            //当前端去掉专业,再次勾选专业后,对应的里程碑编号会为空
            var msList = JsonHelper.ToList(dic.GetValue("MileStoneList"));
            foreach (var milestone in msList)
            {
                if (string.IsNullOrEmpty(milestone.GetValue("Code")))
                {
                    DataRow tmpRow = null;
                    var     tmpid  = milestone.GetValue("TemplateID");
                    if (!string.IsNullOrEmpty(tmpid) && templateDt.Select("ID='" + tmpid + "'").Length > 0)
                    {
                        tmpRow = templateDt.Select("ID='" + tmpid + "'")[0];
                    }
                    else
                    {
                        var msName = milestone.GetValue("Name");
                        if (!string.IsNullOrEmpty(msName) && templateDt.Select("MileStoneName='" + msName + "'").Length > 0)
                        {
                            tmpRow = templateDt.Select("MileStoneName='" + msName + "'")[0];
                        }
                    }
                    if (tmpRow != null)
                    {
                        var    msType = milestone.GetValue("MileStoneType");
                        string code   = tmpRow["MileStoneName"].ToString() + "." + projectInfo.ID + "." + projectInfo.PhaseValue + "." + tmpRow["MileStoneType"].ToString();
                        if (msType == MileStoneType.Major.ToString())
                        {
                            code = tmpRow["MileStoneName"].ToString() + "." + projectInfo.ID + "." + projectInfo.PhaseValue + "." + milestone.GetValue("Major") + "." + tmpRow["MileStoneType"].ToString();
                        }
                        else if (msType == MileStoneType.Cooperation.ToString())
                        {
                            code = tmpRow["MileStoneName"].ToString() + "." + projectInfo.ID + "." + projectInfo.PhaseValue + "." + milestone.GetValue("Major") + "." + tmpRow["MileStoneType"].ToString();
                        }
                        milestone.SetValue("Code", code);
                    }
                    else
                    {
                        milestone.SetValue("Code", milestone.GetValue("Name") + "." + projectInfo.ID + "." + projectInfo.PhaseValue + "." + milestone.GetValue("Major"));
                    }
                }
            }
            dic.SetValue("MileStoneList", JsonHelper.ToJson <List <Dictionary <string, object> > >(msList));
            #endregion
        }
예제 #27
0
        public JsonResult GetList()
        {
            string belongYear = this.Request["BelongYear"];

            if (String.IsNullOrEmpty(belongYear))
            {
                belongYear = DateTime.Now.Year.ToString();
            }
            var    db       = SQLHelper.CreateSqlHelper(ConnEnum.Market);
            var    depts    = EnumBaseHelper.GetEnumDef("System.Org").EnumItem;
            string sql      = @"select Sum(CostValue) as CostValue,
BelongYear,BelongMonth,ProjectDeptID, ProjectDeptName from S_FC_CostInfo where  BelongYear='{0}'
group by BelongYear,BelongMonth,ProjectDeptID,ProjectDeptName ";
            var    dt       = db.ExecuteDataTable(String.Format(sql, belongYear));
            var    result   = new Dictionary <string, object>();
            var    resultDt = new DataTable();

            resultDt.Columns.Add("DeptName");
            resultDt.Columns.Add("DeptID");
            resultDt.Columns.Add("BelongYear", typeof(string));
            resultDt.Columns.Add("SumCostValue", typeof(decimal));
            for (int i = 1; i <= 12; i++)
            {
                var field = i.ToString() + "Month";
                if (!resultDt.Columns.Contains(field))
                {
                    resultDt.Columns.Add(field, typeof(decimal));
                }
            }

            string series      = string.Empty;
            string serieFields = string.Empty;

            foreach (var dept in depts)
            {
                var item = resultDt.NewRow();
                item["DeptName"]   = dept.Name;
                item["DeptID"]     = dept.Code;
                item["BelongYear"] = belongYear;
                var sumValue = 0m;
                for (int i = 1; i <= 12; i++)
                {
                    var field = i.ToString() + "Month";
                    if (resultDt.Columns.Contains(field))
                    {
                        var monthRows = dt.Select(" ProjectDeptID='" + dept.Code + "' and BelongMonth='" + i + "' ");
                        if (monthRows.Length == 0)
                        {
                            item[field] = 0;
                        }
                        else
                        {
                            var costValue = monthRows[0]["CostValue"] == null || monthRows[0]["CostValue"] == DBNull.Value ? 0m : Convert.ToDecimal(monthRows[0]["CostValue"]);
                            item[field] = costValue;
                            sumValue   += costValue;
                        }
                    }
                }
                item["SumCostValue"] = sumValue;
                resultDt.Rows.Add(item);
            }
            var data = new Dictionary <string, object>();

            data.SetValue("data", resultDt);
            data.SetValue("chartData", this.GetYearChartData(belongYear));
            data.SetValue("pieChartData", this.GetPieChartData(belongYear));
            return(Json(data));
        }
예제 #28
0
        private Dictionary <string, object> GetChartData(string xAxisType, string anlysisValue, string analysisType, int startYear, int endYear)
        {
            string series      = string.Empty;
            string serieFields = string.Empty;
            string sql         = @"select Sum(DataValue) as Value,BelongYear {0} from
(select isnull(ThisContractRMBAmount,0) as DataValue,BelongYear,BelongQuarter,BelongMonth
from S_C_ManageContract where IsSigned='" + ContractIsSigned.Signed + @"'
union all
select isnull(SupplementaryRMBAmount,0) as DataValue,ad.BelongYear,ad.BelongQuarter,ad.BelongMonth
from S_C_ManageContract_Supplementary ad
inner join S_C_ManageContract con on ad.ContractInfoID=con.ID where IsSigned='" + ContractIsSigned.Signed + @"'
)tb where BelongYear>='" + startYear + "' and BelongYear<='" + endYear + "' group by BelongYear {0}";

            if (anlysisValue == AnlysisValue.ReceiptValue.ToString())
            {
                sql = @"select Sum(Amount) as Value,BelongYear {0} from S_C_Receipt
where BelongYear>='" + startYear + "' and BelongYear<='" + endYear + "' group by BelongYear {0}";
            }

            #region  月为X轴统计图表
            if (xAxisType == XAxisType.Month.ToString())
            {
                sql = String.Format(sql, ",BelongMonth");
                var dt         = this.SqlHelper.ExecuteDataTable(sql);
                var dataSource = new DataTable();
                dataSource.Columns.Add("Month", typeof(string));
                for (int i = startYear; i <= endYear; i++)
                {
                    series      += i.ToString() + "年,";
                    serieFields += i.ToString() + ",";
                    dataSource.Columns.Add(i.ToString(), typeof(decimal));
                }
                for (int i = 1; i <= 12; i++)
                {
                    var row = dataSource.NewRow();
                    row["Month"] = i + "月";
                    for (int j = startYear; j <= endYear; j++)
                    {
                        var data = dt.Select("BelongMonth='" + i + "' and BelongYear='" + j + "'").FirstOrDefault();
                        if (analysisType == AnalysisType.Month.ToString())
                        {
                            if (data == null || data["Value"] == null || data["Value"] == DBNull.Value)
                            {
                                row[j.ToString()] = 0;
                            }
                            else
                            {
                                row[j.ToString()] = data["Value"];
                            }
                        }
                        else
                        {
                            var value = 0M;
                            if (j == DateTime.Now.Year && i > DateTime.Now.Month)
                            {
                                row[j.ToString()] = value;
                            }
                            else
                            {
                                if (data != null && data["Value"] != null && data["Value"] != DBNull.Value)
                                {
                                    value = Convert.ToDecimal(data["Value"]);
                                }
                                if (i == 1)
                                {
                                    row[j.ToString()] = value;
                                }
                                else
                                {
                                    var preDataRow = dataSource.Select("Month='" + (i - 1) + "月'").FirstOrDefault();
                                    var preValue   = 0M;
                                    if (preDataRow != null)
                                    {
                                        preValue = Convert.ToDecimal(preDataRow[j.ToString()]);
                                        value   += preValue;
                                    }
                                }
                            }
                            row[j.ToString()] = value;
                        }
                    }
                    dataSource.Rows.Add(row);
                }
                series      = series.TrimEnd(',');
                serieFields = serieFields.TrimEnd(',');
                var columChart = HighChartHelper.CreateColumnChart("", dataSource, "Month", series.Split(','), serieFields.Split(','));
                return(columChart.Render());
            }
            #endregion
            #region  年统计图表
            else
            {
                sql = String.Format(sql, "");
                var dt         = this.SqlHelper.ExecuteDataTable(sql);
                var dataSource = new DataTable();
                dataSource.Columns.Add("Value", typeof(decimal));
                dataSource.Columns.Add("Year", typeof(string));
                for (int i = startYear; i <= endYear; i++)
                {
                    var row = dataSource.NewRow();
                    row["Year"] = i;
                    var data = dt.Select(" BelongYear='" + i + "' ").FirstOrDefault();
                    //单月统计
                    if (analysisType == AnalysisType.Month.ToString())
                    {
                        if (data == null || data["Value"] == null || data["Value"] == DBNull.Value)
                        {
                            row["Value"] = 0;
                        }
                        else
                        {
                            row["Value"] = data["Value"];
                        }
                        dataSource.Rows.Add(row);
                    }
                    else //累计统计
                    {
                        var value = 0M;
                        if (data == null || data["Value"] == null || data["Value"] == DBNull.Value)
                        {
                            value = 0;
                        }
                        else
                        {
                            value = Convert.ToDecimal(data["Value"]);
                        }
                        if (i == startYear)
                        {
                            row["Value"] = value;
                        }
                        else
                        {
                            var preRow   = dataSource.Select("Year='" + (i - 1) + "'").FirstOrDefault();
                            var preValue = 0M;
                            if (preRow != null && preRow["Value"] != null && preRow["Value"] != DBNull.Value)
                            {
                                preValue = Convert.ToDecimal(preRow["Value"]);
                            }
                            row["Value"] = preValue + value;
                        }
                        dataSource.Rows.Add(row);
                    }
                }
                series      = EnumBaseHelper.GetEnumDescription(typeof(AnlysisValue), anlysisValue);
                serieFields = "Value";
                var columChart = HighChartHelper.CreateColumnChart("", dataSource, "Year", series.Split(','), serieFields.Split(','));
                return(columChart.Render());
            }
            #endregion
        }
예제 #29
0
        public JsonResult ApproveWorkHourList(string SelectedData, string State)
        {
            Action action = () =>
            {
                if (string.IsNullOrEmpty(State))
                {
                    throw new Formula.Exceptions.BusinessException("未传入State,无法操作");
                }
                var       list      = JsonHelper.ToList(SelectedData);
                var       fo        = new WorkHourFO();
                SQLHelper hrDB      = SQLHelper.CreateSqlHelper(ConnEnum.Comprehensive);
                var       enumDef   = EnumBaseHelper.GetEnumDef("Comprehensive.WorkHourState");
                var       enumItems = new List <EnumItemInfo>();
                if (enumDef != null)
                {
                    enumItems = enumDef.EnumItem.ToList();
                }
                var _state = State;
                if (State == "Locked")
                {
                    _state = "Confirm";
                }
                var fieldDt = GetFieldTable(hrDB, "S_W_UserWorkHour");
                foreach (var item in list)
                {
                    var itemStateLevel = 0d;
                    var itemState      = item.GetValue("State");
                    if (enumItems.Any(a => a.Code == itemState))
                    {
                        itemStateLevel = enumItems.FirstOrDefault(a => a.Code == itemState).SortIndex.Value;
                    }
                    var fnStateLevel = 0d;
                    if (enumItems.Any(a => a.Code == State))
                    {
                        fnStateLevel = enumItems.FirstOrDefault(a => a.Code == State).SortIndex.Value;
                    }
                    if (fnStateLevel < itemStateLevel)
                    {
                        throw new Formula.Exceptions.BusinessException("已经【" + enumItems.FirstOrDefault(a => a.Code == itemState).Name
                                                                       + "】的数据不能再【" + enumItems.FirstOrDefault(a => a.Code == State).Name + "】,无法保存");
                    }

                    if (!item.ContainsKey(_state + "Value"))
                    {
                        throw new Formula.Exceptions.BusinessException("列表中不包含【" + _state + "Value】字段,无法保存");
                    }
                    if (!item.ContainsKey(_state + "Day"))
                    {
                        throw new Formula.Exceptions.BusinessException("列表中不包含【" + _state + "Day】字段,无法保存");
                    }
                    if (!item.ContainsKey(_state + "User"))
                    {
                        throw new Formula.Exceptions.BusinessException("列表中不包含【" + _state + "User】字段,无法保存");
                    }
                    if (!item.ContainsKey(_state + "Date"))
                    {
                        throw new Formula.Exceptions.BusinessException("列表中不包含【" + _state + "Date】字段,无法保存");
                    }
                    if (!item.ContainsKey("Is" + _state))
                    {
                        throw new Formula.Exceptions.BusinessException("列表中不包含【Is" + _state + "】字段,无法保存");
                    }
                    var id = item.GetValue("ID");

                    item.SetValue(_state + "User", this.CurrentUserInfo.UserID);
                    item.SetValue(_state + "UserName", this.CurrentUserInfo.UserName);
                    item.SetValue(_state + "Date", System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
                    item.SetValue("Is" + _state, "1");
                    item.SetValue("State", State);

                    decimal?workHourValue = null;
                    if (!string.IsNullOrEmpty(item.GetValue("WorkHourValue")))
                    {
                        workHourValue = decimal.Parse(item.GetValue("WorkHourValue"));
                    }
                    decimal?approveValue = null;
                    if (!string.IsNullOrEmpty(item.GetValue(_state + "Value")))
                    {
                        approveValue = decimal.Parse(item.GetValue(_state + "Value"));
                    }
                    if (approveValue == null)
                    {
                        approveValue = workHourValue;//审批工时为空时,默认审批工时=填报工时;
                    }
                    item.SetValue(_state + "Value", approveValue);
                    decimal?approveDay = fo.ConvertHourToDay(approveValue, workHourType, NormalHoursMax);
                    item.SetValue(_state + "Day", approveDay);

                    var sb = new StringBuilder();
                    sb.AppendLine(CreateUpdateSql(item, hrDB, "S_W_UserWorkHour", id, fieldDt));

                    var detailDic = new Dictionary <string, object>();
                    detailDic.SetValue("ID", FormulaHelper.CreateGuid());
                    detailDic.SetValue("S_W_UserWorkHourID", id);
                    detailDic.SetValue("SortIndex", 0);
                    detailDic.SetValue("ApproveValue", approveValue);
                    detailDic.SetValue("ApproveDay", approveDay);
                    detailDic.SetValue("ApproveDate", item.GetValue(_state + "Date"));
                    detailDic.SetValue("ApproveStep", State);
                    detailDic.SetValue("ApproveUser", this.CurrentUserInfo.UserID);
                    detailDic.SetValue("ApproveUserName", this.CurrentUserInfo.UserName);
                    sb.AppendLine(detailDic.CreateInsertSql(hrDB, "S_W_UserWorkHour_ApproveDetail", detailDic.GetValue("ID")));

                    var sql = sb.ToString();
                    hrDB.ExecuteNonQuery(sql);

                    if (State == "Locked")
                    {
                        #region 工时审批通过后写入成本数据
                        S_W_UserWorkHour workHourInfo = new S_W_UserWorkHour();
                        UpdateEntity <S_W_UserWorkHour>(workHourInfo, item);
                        workHourInfo.ImportToCost();
                        #endregion
                    }
                }
            };

            if (System.Configuration.ConfigurationManager.AppSettings["UseMsdtc"].ToLower() == "true")
            {
                using (TransactionScope ts = new TransactionScope())
                {
                    action();
                    ts.Complete();
                }
            }
            else
            {
                action();
            }

            return(Json(""));
        }
        protected override void AfterGetData(System.Data.DataTable dt, bool isNew, string upperVersionID)
        {
            if (isNew)
            {
                string lastVersionID = this.Request["UpperVersion"];  //要升版的ID
                var    lastVersion   = this.GetEntityByID(lastVersionID);

                string projectInfoID = this.GetQueryString("ProjectInfoID");
                var    projectInfo   = this.GetEntityByID <S_I_ProjectInfo>(projectInfoID);
                if (projectInfo == null)
                {
                    throw new Formula.Exceptions.BusinessException("");
                }
                var defaultMileStoneDt = new List <Dictionary <string, object> >();

                if (lastVersion != null)
                {
                    #region 根据上一版数据生成里程碑列表
                    foreach (var item in lastVersion.T_SC_DesignPlanPetrifaction_MilestoneList.ToList())
                    {
                        var row = item.ToDic();
                        row.SetValue("ID", "");
                        defaultMileStoneDt.Add(row);
                    }
                    #endregion
                }
                else
                {
                    #region 根据里程碑定义获得默认的里程碑列表
                    var enmDef = EnumBaseHelper.GetEnumDef("Project.Major");
                    var majors = enmDef.EnumItem.Select(a => new { Value = a.Code, Name = a.Name }).ToList();
                    if (!string.IsNullOrEmpty(projectInfo.Major))
                    {
                        majors.Clear();
                        var projectMajors = JsonHelper.ToList(projectInfo.Major);
                        foreach (var projectMajor in projectMajors)
                        {
                            majors.Add(new { Value = projectMajor.GetValue("Value"), Name = projectMajor.GetValue("Name") });
                        }
                    }
                    var    db         = SQLHelper.CreateSqlHelper(ConnEnum.InfrasBaseConfig);
                    string sql        = @"select ID,MileStoneName,MileStoneCode,MileStoneType,Weight,SortIndex,OutMajors,InMajors,PhaseValue from dbo.S_T_MileStone
where ModeID in (select ID from S_T_ProjectMode where ModeCode='{0}') and ProjectClass like '%{1}%' and PhaseValue like '%{2}%'
order by SortIndex ";
                    var    templateDt = db.ExecuteDataTable(String.Format(sql, projectInfo.ModeCode, projectInfo.ProjectClass, projectInfo.PhaseValue));
                    foreach (DataRow template in templateDt.Rows)
                    {
                        if (template["MileStoneType"].ToString() == MileStoneType.Major.ToString())
                        {
                            #region 专业级里程碑
                            foreach (var major in majors.Select(a => a.Value))
                            {
                                string code = template["MileStoneName"].ToString() + "." + projectInfo.RootWBSID + "." + projectInfo.PhaseValue + "." + major + "." + template["MileStoneType"].ToString();
                                var    row  = this._createDefaultItem(template, code, lastVersion);
                                row.SetValue("Major", major);
                                defaultMileStoneDt.Add(row);
                            }
                            #endregion
                        }
                        else if (template["MileStoneType"].ToString() == MileStoneType.Cooperation.ToString())
                        {
                            #region 提资计划定义
                            var outMajors   = template["OutMajors"].ToString().Split(',');
                            var defInMajors = template["InMajors"].ToString();
                            foreach (var major in outMajors)
                            {
                                var InMajors = defInMajors;
                                if (defInMajors == "All")
                                {
                                    InMajors = String.Join(",", majors.Where(a => a.Value != major).Select(d => d.Value));
                                }
                                string code = template["MileStoneName"].ToString() + "." + projectInfo.RootWBSID + "." + projectInfo.PhaseValue + "." + major + "." + template["MileStoneType"].ToString();
                                var    row  = this._createDefaultItem(template, code, lastVersion);
                                row.SetValue("Major", major);
                                row.SetValue("OutMajor", major);
                                row.SetValue("InMajor", InMajors);
                                var majorName = String.Join(",", majors.Where(d => InMajors.Split(',').Contains(d.Value)).Select(d => d.Name));
                                row.SetValue("Remark", "接收专业:" + majorName);
                                defaultMileStoneDt.Add(row);
                            }
                            #endregion
                        }
                        else
                        {
                            string code = template["MileStoneName"].ToString() + "." + projectInfo.RootWBSID + "." + projectInfo.PhaseValue + "." + template["MileStoneType"].ToString();
                            var    row  = this._createDefaultItem(template, code, lastVersion);
                            row.SetValue("Major", "");
                            defaultMileStoneDt.Add(row);
                        }
                    }
                    #region 模板已经删除,但是实际已经完成的里程碑,需要再次加入里程碑子表数据和模板数据
                    var    listCodes   = defaultMileStoneDt.Select(a => a.GetValue("Code")).Where(a => !string.IsNullOrEmpty(a)).ToList();
                    string finishState = ProjectCommoneState.Finish.ToString();
                    var    finishList  = projectInfo.S_P_MileStone.Where(a => a.State == finishState && !listCodes.Contains(a.Code)).ToList();
                    foreach (var item in finishList)
                    {
                        var row = new Dictionary <string, object>();

                        row.SetValue("Name", item.Name);
                        row.SetValue("SortIndex", item.SortIndex ?? 0);
                        row.SetValue("PlanEndDate", item.PlanFinishDate);
                        row.SetValue("Weight", item.Weight);
                        row.SetValue("Code", item.Code);
                        row.SetValue("MileStoneType", item.MileStoneType);
                        row.SetValue("MileStoneID", item.ID);
                        row.SetValue("TemplateID", item.TemplateID);
                        row.SetValue("Major", item.MajorValue);
                        row.SetValue("OutMajor", item.MajorValue);
                        row.SetValue("InMajor", item.OutMajorValue);
                        row.SetValue("Remark", item.Description);
                        defaultMileStoneDt.Add(row);


                        var tmpRow = templateDt.NewRow();
                        tmpRow["ID"]            = string.Empty;
                        tmpRow["MileStoneName"] = item.Name;
                        tmpRow["MileStoneCode"] = item.Code;
                        tmpRow["MileStoneType"] = item.MileStoneType;
                        if (item.Weight.HasValue)
                        {
                            tmpRow["Weight"] = item.Weight;
                        }
                        tmpRow["SortIndex"]  = item.SortIndex ?? 0;
                        tmpRow["OutMajors"]  = item.MajorValue;
                        tmpRow["InMajors"]   = item.OutMajorValue;
                        tmpRow["PhaseValue"] = string.Empty;
                        templateDt.Rows.Add(tmpRow);
                    }
                    #endregion
                    #region 手动添加的流程碑,需要再次加入里程碑子表数据和模板数据
                    var cusList = projectInfo.S_P_MileStone.Where(a => string.IsNullOrEmpty(a.TemplateID)).ToList();
                    foreach (var item in cusList)
                    {
                        var row = new Dictionary <string, object>();

                        row.SetValue("Name", item.Name);
                        row.SetValue("SortIndex", item.SortIndex ?? 0);
                        row.SetValue("PlanEndDate", item.PlanFinishDate);
                        row.SetValue("Weight", item.Weight);
                        row.SetValue("Code", item.Code);
                        row.SetValue("MileStoneType", item.MileStoneType);
                        row.SetValue("MileStoneID", item.ID);
                        row.SetValue("TemplateID", item.TemplateID);
                        row.SetValue("Major", item.MajorValue);
                        row.SetValue("OutMajor", item.MajorValue);
                        row.SetValue("InMajor", item.OutMajorValue);
                        row.SetValue("Remark", item.Description);
                        defaultMileStoneDt.Add(row);


                        var tmpRow = templateDt.NewRow();
                        tmpRow["ID"]            = string.Empty;
                        tmpRow["MileStoneName"] = item.Name;
                        tmpRow["MileStoneCode"] = item.Code;
                        tmpRow["MileStoneType"] = item.MileStoneType;
                        if (item.Weight.HasValue)
                        {
                            tmpRow["Weight"] = item.Weight;
                        }
                        tmpRow["SortIndex"]  = item.SortIndex ?? 0;
                        tmpRow["OutMajors"]  = item.MajorValue;
                        tmpRow["InMajors"]   = item.OutMajorValue;
                        tmpRow["PhaseValue"] = string.Empty;
                        templateDt.Rows.Add(tmpRow);
                    }
                    #endregion
                    #endregion
                    defaultMileStoneDt = defaultMileStoneDt.OrderBy(a => Convert.ToDouble(a.GetValue("SortIndex"))).ToList();
                }
                if (dt.Rows.Count > 0 && dt.Columns.Contains("MilestoneList"))
                {
                    dt.Rows[0]["MilestoneList"] = JsonHelper.ToJson(defaultMileStoneDt);
                }
            }
        }