//保存时对比数据是否修改 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); } } }
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); }
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)); }
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; } } }
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)); }
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)); }
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()); }
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()); }
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()); }
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()); }
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)); }
/// <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)); } } }
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()); }
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)); }
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()); }
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 }
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()); }
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)); }
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)); }
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)); }
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)); }
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()); }
/// <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); }
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 }
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 }
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)); }
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 }
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); } } }