public ActionResult CreateContact(string projectGuid, string organizationName, string dutyType, string name, string cellPhone, string email, string note) { return(ActionUtils.Json(() => { var project = m_dbAdapter.Project.GetProjectByGuid(projectGuid); CheckHandleContactPermission(project); ValidateUtils.Name(organizationName, "相关方", 50); CommUtils.Assert(name.Length <= 30, "联系人不能超过30个字符数!"); CommUtils.Assert(email.Length <= 38, "邮箱不能超过38个字符数!"); CommUtils.Assert(cellPhone.Length <= 30, "电话不能超过30个字符数!"); var contact = new Contact(); contact.ProjectId = project.ProjectId; contact.OrganizationName = organizationName; contact.DutyType = CommUtils.ParseEnum <EDutyType>(dutyType); contact.Name = name; contact.Email = email; contact.CellPhone = cellPhone; contact.Note = note; m_dbAdapter.Contact.AddContact(contact); var logicModel = Platform.GetProject(project.ProjectGuid); logicModel.Activity.Add(project.ProjectId, ActivityObjectType.Contact, contact.Guid, "增加机构:" + contact.OrganizationName); return ActionUtils.Success(1); })); }
public ActionResult ModifyInvestment(string investmentGuid, string name, string description, double money, string yieldDue, double?gains, string startTime, string endTime, string accountingTime) { return(ActionUtils.Json(() => { ValidateUtils.Name(name, "投资标的"); CommUtils.AssertHasContent(startTime, "[开始时间]不能为空"); CommUtils.AssertHasContent(endTime, "[到期时间]不能为空"); CommUtils.Assert(money <= 1000000000000, "[投资金额]不能大于10,000亿元"); CommUtils.Assert(money > 0, "[投资金额]必须大于0元"); var valStartTime = DateTime.Parse(startTime); var valEndTime = DateTime.Parse(endTime); CommUtils.Assert(DateTime.Compare(valEndTime, valStartTime) > 0, "[到期时间]必须大于[开始时间]"); var investment = m_dbAdapter.Investment.GetInvestment(investmentGuid); investment.Name = name; investment.Description = description; investment.Money = money; investment.StartTime = valStartTime; investment.EndTime = valEndTime; investment.YieldDue = null; if (investment.Gains.HasValue) { CommUtils.AssertNotNull(gains, "[收益金额]不能为空"); CommUtils.AssertHasContent(accountingTime, "[到账时间]不能为空"); CommUtils.Assert(gains <= 1000000000000, "[收益金额]不能大于10,000亿元"); CommUtils.Assert(gains >= -1000000000000, "[收益金额]不能小于-10,000亿元"); CommUtils.Assert(!(gains <0 && System.Math.Abs(gains.Value)> investment.Money), "[收益金额]不能亏损超过[投资金额]"); var valAccountingTime = DateTime.Parse(accountingTime); CommUtils.Assert(DateTime.Compare(valAccountingTime, valEndTime) >= 0, "[到账时间]不能小于[到期时间]"); investment.AccountingTime = valAccountingTime; investment.Gains = gains; investment.Yield = InterestRateUtils.CalculateYield(investment.Gains.Value, investment.Money, investment.EndTime, investment.StartTime); } if (!string.IsNullOrWhiteSpace(yieldDue) && yieldDue != "-") { var percentValue = 0.0; if (yieldDue.Contains('%')) { CommUtils.Assert(double.TryParse(yieldDue.Substring(0, yieldDue.Length - 1), out percentValue), "预计收益率必须为数字"); } else { CommUtils.Assert(double.TryParse(yieldDue, out percentValue), "预计收益率必须为数字"); } CommUtils.Assert(percentValue >= 365.00 * (-1) / (valEndTime - valStartTime).TotalDays, "预计收益率过低,请重新填写"); investment.YieldDue = percentValue / 100; } var result = m_dbAdapter.Investment.UpdateInvestment(investment); return ActionUtils.Success(result); })); }
public ActionResult NewAgenda(string projectGuid, string agendaName, string description, string startTime, string endTime) { return(ActionUtils.Json(() => { CheckPermission(projectGuid); ValidateUtils.Name(agendaName, "日程名称"); ValidateUtils.Description(description, "日程描述"); CommUtils.Assert(!((string.IsNullOrWhiteSpace(startTime) || startTime == "-") && (string.IsNullOrWhiteSpace(endTime) || endTime == "-")), "开始时间和结束时间不能同时为空"); CommUtils.Assert(DateUtils.IsNullableDate(startTime), "开始时间必须为[YYYY-MM-DD]格式或者为空"); CommUtils.Assert(DateUtils.IsNullableDate(endTime), "结束时间必须为[YYYY-MM-DD]格式或者为空"); var taskStartTime = DateUtils.Parse(startTime); var taskEndTime = DateUtils.Parse(endTime); if (taskStartTime != null && taskEndTime != null) { CommUtils.Assert(taskEndTime.Value >= taskStartTime.Value, "开始时间[{0}]不能大于结束时间[{1}]", startTime, endTime); } var project = m_dbAdapter.Project.GetProjectByGuid(projectGuid); CommUtils.Assert(project.ProjectSeriesId.HasValue, "找不到ProjectSeries[projectGuid={0}]信息", projectGuid); var agenda = new Agenda(); agenda.CreateUserName = CurrentUserName; agenda.Name = agendaName; agenda.Description = description; CommUtils.Assert(!(startTime == "" && endTime == ""), "开始和结束时间必须至少有一个不为空!"); if (startTime == "" && endTime != "") { agenda.EndTime = Convert.ToDateTime(endTime); agenda.StartTime = Convert.ToDateTime(agenda.EndTime.ToShortDateString() + " 00:00:00"); } else if (startTime != "" && endTime == "") { agenda.StartTime = Convert.ToDateTime(startTime); agenda.EndTime = Convert.ToDateTime(agenda.StartTime.ToShortDateString() + " 23:59:59"); } else { agenda.StartTime = Convert.ToDateTime(startTime); agenda.EndTime = Convert.ToDateTime(endTime); } agenda.ProjectId = project.ProjectId; m_dbAdapter.Agenda.NewAgenda(agenda); var logicModel = Platform.GetProject(project.ProjectGuid); logicModel.Activity.Add(project.ProjectId, ActivityObjectType.Agenda, agenda.Guid, "创建日程:" + agenda.Name); return ActionUtils.Success(1); })); }
public ActionResult CreateFolders(string shortCode, string parentFolderGuid, List <string> folderNames, List <string> folderDescriptions) { return(ActionUtils.Json(() => { ValidateUtils.Name(folderNames, "文件夹名称", 100).FileName(); CommUtils.AssertEquals(folderNames.Count, folderDescriptions.Count, "传入folderNames和folderDescriptions长度不相等"); CommUtils.AssertEquals(folderNames.Select(x => x.ToLower()).Distinct().Count(), folderNames.Count, "传入了重复的文件夹名"); var dms = GetDMSAndCheckPermission(shortCode, PermissionType.Write); var parentFolder = m_dbAdapter.DMSFolder.GetByGuid(parentFolderGuid); CommUtils.AssertEquals(parentFolder.DMSId, dms.Instance.Id, "传入projectGuid和folderGuid不在同一个DMS中"); var sibbingFolders = dms.AllFolders.Where(x => x.ParentFolderId.HasValue && x.ParentFolderId.Value == parentFolder.Id); foreach (var folderName in folderNames) { CommUtils.Assert(!sibbingFolders.Any(x => x.Name.Equals(folderName, StringComparison.CurrentCultureIgnoreCase)), "文件夹[{0}]已经存在,请刷新后再试", folderName); } var folders = new List <DMSFolder>(); var now = DateTime.Now; for (int i = 0; i < folderNames.Count; i++) { var folder = new DMSFolder(); folder.DMSId = dms.Instance.Id; folder.Name = folderNames[i]; folder.Description = folderDescriptions[i]; folder.DmsFolderType = DmsFolderType.Normal; folder.ParentFolderId = parentFolder.Id; folder.CreateTime = now; folder.CreateUserName = CurrentUserName; folder.LastModifyTime = now; folder.LastModifyUserName = CurrentUserName; folder = m_dbAdapter.DMSFolder.Create(folder); folders.Add(folder); } var folderNamesArray = folderNames.ConvertAll(x => "[" + x + "]").ToArray(); m_dbAdapter.Task.AddTaskLog(shortCode, "创建文件夹" + string.Join(",", folderNamesArray)); var folderGuids = folders.Select(x => x.Guid); return ActionUtils.Success(folderGuids); })); }
public ActionResult CreateMetaTask(string projectGuid, string metaTaskName, string guidAsStartTime, string guidAsEndTime, string prevMetaTaskText, string taskExtensionType, string detail, string target) { return(ActionUtils.Json(() => { ValidateUtils.Name(metaTaskName, "工作名称"); CommUtils.Assert(detail == null ? true : detail.Length <= 500, "工作描述不能超过500个字符数"); CommUtils.Assert(target == null ? true : target.Length <= 500, "工作目标不能超过500个字符数"); CommUtils.AssertHasContent(guidAsEndTime, "请先设置截止时间"); var startTimeSeries = string.IsNullOrWhiteSpace(guidAsStartTime) ? null : m_dbAdapter.TimeSeries.GetByGuid(guidAsStartTime); var endTimeSeries = m_dbAdapter.TimeSeries.GetByGuid(guidAsEndTime); var timeListCount = CheckStartAndEndTimeCount(startTimeSeries, endTimeSeries); var extensionType = CommUtils.ParseEnum <TaskExtensionType>(taskExtensionType); var project = m_dbAdapter.Project.GetProjectByGuid(projectGuid); var prevMetaTaskGuidList = CommUtils.Split(prevMetaTaskText).ToList(); var prevMetaTask = m_dbAdapter.MetaTask.GetMetaTaskByGuids(prevMetaTaskGuidList); var prevMetaTaskIds = prevMetaTask.ConvertAll(x => x.Id.ToString()).ToList(); CheckPrevMetaTaskGenerateCount(timeListCount, prevMetaTask); var metaTask = new MetaTask(); metaTask.ProjectId = project.ProjectId; metaTask.Name = metaTaskName; if (startTimeSeries == null) { metaTask.StartTimeSeriesId = null; } else { metaTask.StartTimeSeriesId = startTimeSeries.Id; } metaTask.EndTimeSeriesId = endTimeSeries.Id; metaTask.PreMetaTaskIds = CommUtils.Join(prevMetaTaskIds); metaTask.TaskExtensionType = extensionType; metaTask.Detail = detail; metaTask.Target = target; var newMetaTask = m_dbAdapter.MetaTask.New(metaTask); return ActionUtils.Success(newMetaTask.Guid); })); }
public ActionResult AddUserGroup(string name) { return(ActionUtils.Json(() => { ValidateUtils.Name(name, "组名"); var userGroups = m_dbAdapter.UserGroup.GetByOwner(CurrentUserName); var userGroupNames = userGroups.Select(x => x.Name).ToList(); CommUtils.Assert(!userGroupNames.Contains(name), "[{0}]组名已存在,请重新输入", name); var userGroup = new UserGroup { Name = name, Owner = CurrentUserName }; var result = m_dbAdapter.UserGroup.New(userGroup); return ActionUtils.Success(result); })); }
public void ModifyTaskGroup(string taskGroupGuid, string name, string description) { ValidateUtils.Name(name, "名称"); ValidateUtils.Description(description, "描述"); var hasTaskGroupGuid = TaskGroups.Any(x => x.Instance.Guid == taskGroupGuid); CommUtils.Assert(hasTaskGroupGuid, "此工作组不存在"); var taskGroupLogicModel = TaskGroups.Single(x => x.Instance.Guid == taskGroupGuid); var taskGroup = taskGroupLogicModel.Instance; taskGroup.Name = name; taskGroup.Description = description; m_dbAdapter.TaskGroup.UpdateTaskGroup(taskGroup); m_taskGroups = null; }
public ActionResult CreateInvestment(string projectGuid, string name, double money, string yieldDue, string startTime, string endTime, string description) { return(ActionUtils.Json(() => { ValidateUtils.Name(name, "投资标的"); CommUtils.AssertHasContent(startTime, "[开始时间]不能为空"); CommUtils.AssertHasContent(endTime, "[到期时间]不能为空"); CommUtils.Assert(money <= 1000000000000, "[投资金额]不能大于10,000亿元"); CommUtils.Assert(money > 0, "[投资金额]必须大于0元"); var valStartTime = DateTime.Parse(startTime); var valEndTime = DateTime.Parse(endTime); CommUtils.Assert(DateTime.Compare(valEndTime, valStartTime) > 0, "[到期时间]必须大于[开始时间]"); var investment = new Investment(); var project = m_dbAdapter.Project.GetProjectByGuid(projectGuid); investment.ProjectId = project.ProjectId; investment.Name = name; investment.Money = money; investment.StartTime = valStartTime; investment.EndTime = valEndTime; investment.Description = description; investment.YieldDue = null; if (!string.IsNullOrWhiteSpace(yieldDue)) { var percentValue = 0.0; if (yieldDue.Contains('%')) { CommUtils.Assert(double.TryParse(yieldDue.Substring(0, yieldDue.Length - 1), out percentValue), "预计收益率必须为数字"); } else { CommUtils.Assert(double.TryParse(yieldDue, out percentValue), "预计收益率必须为数字"); } CommUtils.Assert(percentValue >= 365.00 * (-1) / (valEndTime - valStartTime).TotalDays, "预计收益率过低,请重新填写"); investment.YieldDue = percentValue / 100; } m_dbAdapter.Investment.NewInvestment(investment); return ActionUtils.Success(1); })); }
public ActionResult ModifyUserGroup(string userGroupGuid, string name) { return(ActionUtils.Json(() => { var userGroup = m_dbAdapter.UserGroup.GetByGuid(userGroupGuid); CommUtils.Assert(IsCurrentUser(userGroup.Owner), "当前用户[{0}]不是[{1}]的创建者", CurrentUserName, userGroup.Name); ValidateUtils.Name(name, "组名"); var userGroups = m_dbAdapter.UserGroup.GetByOwner(CurrentUserName); var userGroupNames = userGroups.Select(x => x.Name).ToList(); CommUtils.Assert(!userGroupNames.Contains(name), "[{0}]组名已存在,请重新输入", name); userGroup.Name = name; m_dbAdapter.UserGroup.Update(userGroup); return ActionUtils.Success(1); })); }
public ActionResult ModifyAgenda(string projectGuid, string guid, string agendaName, string description, DateTime startTime, DateTime endTime) { return(ActionUtils.Json(() => { CheckPermission(projectGuid); ValidateUtils.Name(agendaName, "日程名称"); ValidateUtils.Description(description, "日程描述"); var project = m_dbAdapter.Project.GetProjectByGuid(projectGuid); CommUtils.Assert(project.ProjectSeriesId.HasValue, "找不到ProjectSeries[projectGuid={0}]信息", projectGuid); var agenda = m_dbAdapter.Agenda.GetAgendaByGuid(guid); CommUtils.Assert(IsCurrentUser(agenda.CreateUserName), "非该日程创建用户不得编辑!"); agenda.Name = agendaName; agenda.Description = description; agenda.StartTime = startTime; agenda.EndTime = endTime; m_dbAdapter.Agenda.UpdateAgenda(agenda); return ActionUtils.Success(1); })); }
public ActionResult EditFileName(string shortCode, string folderGuid, string fileSeriesGuid, string fileName) { return(ActionUtils.Json(() => { var dms = GetDMSAndCheckPermission(shortCode, PermissionType.Write); ValidateUtils.Name(fileName, "文件名称", 100).FileName(); var folder = dms.FindFolder(folderGuid); folder.IgnoreNull = false; CommUtils.AssertNotNull(folder, "找不到文件夹[FolderGuid={0} DMSGuid={1}],请刷新后再试", folderGuid, dms.Instance.Guid); CommUtils.Assert(!folder.Files.Any(x => x.FileSeries.Name == fileName && x.FileSeries.Guid != fileSeriesGuid), "文件[{0}]已经存在", fileName); CommUtils.Assert(folder.Files.Exists(x => x.FileSeries.Guid == fileSeriesGuid), "文档不在文件夹下"); var fileSeries = m_dbAdapter.DMSFileSeries.GetByGuid(fileSeriesGuid); var comment = "修改文件名称[" + fileSeries.Name + "]为[" + fileName + "]"; fileSeries.Name = fileName; m_dbAdapter.DMSFileSeries.Update(fileSeries); m_dbAdapter.Task.AddTaskLog(shortCode, comment); return ActionUtils.Success(true); })); }
public ActionResult EditContact(string contactGuid, string organizationName, string dutyType, string name, string cellPhone, string email, string note) { return(ActionUtils.Json(() => { ValidateUtils.Name(organizationName, "相关方", 50); CommUtils.Assert(name.Length <= 30, "联系人不能超过30个字符数!"); CommUtils.Assert(email.Length <= 38, "邮箱不能超过38个字符数!"); var contact = m_dbAdapter.Contact.GetByGuid(contactGuid); var project = m_dbAdapter.Project.GetProjectById(contact.ProjectId); CheckHandleContactPermission(project); contact.OrganizationName = organizationName; contact.DutyType = CommUtils.ParseEnum <EDutyType>(dutyType); contact.Name = name; contact.Email = email; contact.CellPhone = cellPhone; contact.Note = note; m_dbAdapter.Contact.UpdateContact(contact); return ActionUtils.Success(1); })); }
public ActionResult EditFolderName(string shortCode, string folderGuid, string folderName) { return(ActionUtils.Json(() => { var dms = GetDMSAndCheckPermission(shortCode, PermissionType.Write); ValidateUtils.Name(folderName, "文件夹名称", 100).FileName(); var parentFolder = dms.Root.Instance; var sibbingFolders = dms.AllFolders.Where(x => x.ParentFolderId.HasValue && x.ParentFolderId.Value == parentFolder.Id); CommUtils.Assert(!sibbingFolders.Any(x => x.Name.Equals(folderName, StringComparison.CurrentCultureIgnoreCase) && x.Guid != folderGuid), "文件夹[{0}]已经存在,请刷新后再试", folderName); CommUtils.AssertEquals(m_dbAdapter.DMSFolder.GetByGuid(folderGuid).DMSId, dms.Instance.Id, "文件夹不在工作中"); var folder = m_dbAdapter.DMSFolder.GetByGuid(folderGuid); var comment = "修改文件夹名称[" + folder.Name + "]为[" + folderName + "]"; folder.Name = folderName; m_dbAdapter.DMSFolder.Update(folder); m_dbAdapter.Task.AddTaskLog(shortCode, comment); return ActionUtils.Success(true); })); }
public TaskGroupLogicModel NewTaskGroup(string projectSeriesGuid, string name, string description) { ValidateUtils.Name(name, "名称"); ValidateUtils.Description(description, "描述"); var taskGroups = m_dbAdapter.TaskGroup.GetByProjectId(m_instance.ProjectId); CommUtils.Assert(!taskGroups.Any(x => x.Name == name), "[{0}]中,[{1}]分组已存在", m_instance.Name, name); var taskGroup = m_dbAdapter.TaskGroup.NewTaskGroup(m_instance.ProjectId, name, description); var logicModel = new TaskGroupLogicModel(this, taskGroup); var project = m_dbAdapter.Project.GetProjectById(taskGroup.ProjectId); var permissionLogicModel = new PermissionLogicModel(this); var projectSeries = m_dbAdapter.ProjectSeries.GetById(project.ProjectSeriesId.Value); permissionLogicModel.SetPermission(projectSeries, project, taskGroup.Guid, PermissionObjectType.TaskGroup); Activity.Add(taskGroup.ProjectId, ActivityObjectType.TaskGroup, taskGroup.Guid, "新建工作组:" + name); m_taskGroups = null; return(logicModel); }
public ActionResult CreateFile(string shortCode, string folderGuid, List <string> fileSeriesNames, string description) { return(ActionUtils.Json(() => { var dms = GetDMSAndCheckPermission(shortCode, PermissionType.Execute); var folder = dms.FindFolder(folderGuid); CommUtils.AssertNotNull(folder, "找不到文件夹[FolderGuid={0} DMSGuid={1}],请刷新后再试", folderGuid, dms.Instance.Guid); ValidateUtils.Name(fileSeriesNames, "文档名称", 100).FileName(); var dict = new Dictionary <RepositoryFile, HttpPostedFileBase>(); var files = Request.Files; var fileGuids = new List <string>(); for (int i = 0; i < files.Count; i++) { var file = files[i]; var index = Math.Max(file.FileName.LastIndexOf('\\'), file.FileName.LastIndexOf('/')); var fileName = index < 0 ? file.FileName : file.FileName.Substring(index + 1); CommUtils.AssertHasContent(fileName, "文件名不能为空"); CommUtils.Assert(fileName.Length <= 100, "选择的文件名称[{0}]不能超过100个字符数", fileName); CommUtils.Assert(!folder.Files.Any(x => x.FileSeries.Name == fileSeriesNames[i]), "文件[{0}]已经存在", fileSeriesNames[i]); var memoryStream = new MemoryStream(new BinaryReader(file.InputStream).ReadBytes(file.ContentLength)); var newFile = Platform.Repository.AddFile(fileName, memoryStream); fileGuids.Add(newFile.Guid); dict[newFile] = file; } var result = new List <DMSFile>(); string operationType = "上传"; if (dict.Keys.Count == 0) { operationType = "创建"; fileSeriesNames.ForEach(x => { NewFileSeries(x, folder); }); } for (int i = 0; i < dict.Keys.Count; i++) { var repoFile = dict.Keys.ElementAt(i); var fileSeriesName = fileSeriesNames[i]; var dmsFileSeries = new DMSFileSeries(); dmsFileSeries = NewFileSeries(fileSeriesName, folder); var now = DateTime.Now; DMSFile dmsFile = new DMSFile(); dmsFile.DMSId = dms.Instance.Id; dmsFile.DMSFileSeriesId = dmsFileSeries.Id; dmsFile.RepoFileId = repoFile.Id; dmsFile.Name = repoFile.Name; dmsFile.Description = description ?? string.Empty; dmsFile.Size = dict[repoFile].ContentLength; dmsFile.Version = 1; dmsFile.LastModifyUserName = CurrentUserName; dmsFile.LastModifyTime = now; dmsFile.CreateUserName = CurrentUserName; dmsFile.CreateTime = now; result.Add(m_dbAdapter.DMSFile.Create(dmsFile)); } var task = new TaskLogicModel(dms.ProjectLogicModel, shortCode); task.Start(); var fileSeriesNamesArray = fileSeriesNames.ConvertAll(x => "[" + x + "]").ToArray(); m_dbAdapter.Task.AddTaskLog(task.Instance, "文件夹[" + folder.Instance.Name + "]中" + operationType + "文件" + string.Join(",", fileSeriesNamesArray)); return ActionUtils.Success(result.Select(x => x.Guid)); })); }
public ActionResult CreateIssue(string projectGuid, string issueName, string description, string emergencyLevelText, string allotUser, string shortCodeText) { return(ActionUtils.Json(() => { CheckPermission(PermissionObjectType.Project, projectGuid, PermissionType.Read); var files = Request.Files; ValidateUtils.Name(issueName, "问题名称"); CommUtils.Assert(description.Length <= 10000, "描述不能超过10000个字符数"); if (!string.IsNullOrWhiteSpace(allotUser)) { CommUtils.Assert(m_dbAdapter.Authority.IsUserExist(allotUser), "用户[{0}]不存在,请刷新页面后重试", allotUser); } var emergencyLevel = CommUtils.ParseEnum <IssueEmergencyLevel>(emergencyLevelText); //上传文件和图片 var dicFileAndImageIds = UploadFileAndImage(files); //创建问题 var project = m_dbAdapter.Project.GetProjectByGuid(projectGuid); var issue = new Issue(); issue.ProjectId = project.ProjectId; issue.IssueName = issueName; issue.Description = description; issue.IssueEmergencyLevel = emergencyLevel; issue.RelatedTaskShortCode = ""; issue.IssueStatus = IssueStatus.Preparing; issue.CreateTime = DateTime.Now; issue.CreateUserName = CurrentUserName; issue.RecordStatus = RecordStatus.Valid; issue.AllotUser = allotUser; if (!string.IsNullOrWhiteSpace(allotUser)) { issue.IssueAllotTime = DateTime.Now; } var newIssue = m_dbAdapter.Issue.NewIssue(issue); //保存受阻工作 if (!string.IsNullOrWhiteSpace(shortCodeText)) { var shortCodes = CommUtils.Split(shortCodeText).ToList(); var tasks = m_dbAdapter.Task.GetTasks(shortCodes); CommUtils.AssertEquals(tasks.Count, shortCodes.Count, "受阻工作异常,请刷新页面后重试"); shortCodes.ForEach(x => { var issueConnectionTask = new IssueConnectionTasks(); issueConnectionTask.IssueId = newIssue.Id; issueConnectionTask.TaskShortCode = x; m_dbAdapter.IssueConnectionTasks.New(issueConnectionTask); }); } //创建事件,并且匹配其对应的文件与图片 CreateIssueActivity(newIssue.Id, newIssue.Description, IssueActivityType.Original, dicFileAndImageIds); CreateIssueActivity(newIssue.Id, "提出了此问题", IssueActivityType.SystemGenerate, null); var result = new { IssueGuid = newIssue.IssueGuid }; return ActionUtils.Success(result); })); }
public ActionResult ModifyProjectSeriesInfo(string projectSeriesGuid, string name, string projectSeriesType, string personInCharge, string createTime, string estimatedFinishTime, string email) { return(ActionUtils.Json(() => { ValidateUtils.Name(name, "项目名称"); CommUtils.Assert(email.Length <= 38, "名称不能超过38个字符数"); CommUtils.AssertHasContent(personInCharge, "[项目负责人]不能为空"); CommUtils.Assert(m_dbAdapter.Authority.IsUserExist(personInCharge), "[用户]不存在"); CommUtils.AssertHasContent(createTime, "[立项日期]不能为空"); CommUtils.AssertHasContent(estimatedFinishTime, "[计划完成日期]不能为空"); var valStartTime = DateTime.Parse(createTime); var valEstimatedFinishTime = DateTime.Parse(estimatedFinishTime); CommUtils.Assert(valEstimatedFinishTime >= valStartTime, "计划完成日期[{0}]必须大于等于立项日期[{1}]", valEstimatedFinishTime, valStartTime); var type = CommUtils.ParseEnum <ProjectSeriesType>(projectSeriesType); var projectSeriesLogicModel = new ProjectSeriesLogicModel(CurrentUserName, projectSeriesGuid); var projectSeries = projectSeriesLogicModel.Instance; var project = projectSeriesLogicModel.CurrentProject.Instance; CommUtils.Assert(IsCurrentUser(projectSeries.CreateUserName) || IsCurrentUser(projectSeries.PersonInCharge) || m_dbAdapter.TeamAdmin.IsTeamAdmin(project.ProjectId, CurrentUserName), "当前用户[{0}]不是项目[{1}]的管理员/创建者/负责人,无法进行修改", CurrentUserName, projectSeries.Name); CommUtils.Assert(!m_dbAdapter.TeamAdmin.IsTeamAdmin(project.ProjectId, CurrentUserName) || personInCharge == projectSeries.PersonInCharge, "当前用户[{0}]是项目[{1}]的管理员,无法修改负责人", CurrentUserName, projectSeries.Name); var isAdmin = projectSeries.CreateUserName.Equals(personInCharge, StringComparison.CurrentCultureIgnoreCase) || projectSeries.PersonInCharge.Equals(personInCharge, StringComparison.CurrentCultureIgnoreCase); ////////////// var permissionLogicModel = new PermissionLogicModel(CurrentUserName, projectSeries); var teamAdmins = m_dbAdapter.TeamAdmin.GetByProjectId(project.ProjectId); var teamMembers = m_dbAdapter.TeamMember.GetByProjectId(project.ProjectId); var teamMember = new TeamMember { UserName = projectSeries.PersonInCharge, ProjectId = project.ProjectId, Read = true, Write = false, Execute = false }; if (!isAdmin) { if (!projectSeries.CreateUserName.Equals(projectSeries.PersonInCharge, StringComparison.CurrentCultureIgnoreCase)) { //删除原有负责人的所有权限,将其添加为项目成员 permissionLogicModel.RemoveUserPermissionByProjectSeries(new List <string> { projectSeries.PersonInCharge }); m_dbAdapter.TeamMember.Add(teamMember); permissionLogicModel.AddUserPermissionByProjectSeries(new List <TeamMember> { teamMember }, new List <TeamAdmin>(), new List <string>()); } foreach (var item in teamMembers) { //如果新的负责人为原有的项目成员,则在项目成员里移除 if (item.UserName.Equals(personInCharge, StringComparison.CurrentCultureIgnoreCase)) { m_dbAdapter.TeamMember.Remove(item); permissionLogicModel.RemoveUserPermissionByProjectSeries(new List <string> { personInCharge }); } } foreach (var item in teamAdmins) { //如果新的负责人为原有的项目管理员,则在项目管理员里移除 if (item.UserName.Equals(personInCharge, StringComparison.CurrentCultureIgnoreCase)) { m_dbAdapter.TeamAdmin.Delete(item); permissionLogicModel.RemoveUserPermissionByProjectSeries(new List <string> { personInCharge }); } } permissionLogicModel.AddUserPermissionByProjectSeries(new List <TeamMember>(), new List <TeamAdmin>(), new List <string> { personInCharge }); } else { if (!projectSeries.PersonInCharge.Equals(personInCharge, StringComparison.CurrentCultureIgnoreCase)) { //删除原有负责人的所有权限,将其添加为项目成员 permissionLogicModel.RemoveUserPermissionByProjectSeries(new List <string> { projectSeries.PersonInCharge }); m_dbAdapter.TeamMember.Add(teamMember); permissionLogicModel.AddUserPermissionByProjectSeries(new List <TeamMember> { teamMember }, new List <TeamAdmin>(), new List <string>()); } } //同步产品系列名字与产品名字一致 if (projectSeries.Name != name) { project.Name = name; m_dbAdapter.Project.Update(project); } projectSeries.Name = name; projectSeries.Type = type; projectSeries.CreateTime = valStartTime; projectSeries.EstimatedFinishTime = valEstimatedFinishTime; projectSeries.PersonInCharge = personInCharge; projectSeries.Email = email; m_dbAdapter.ProjectSeries.UpdateProjectSeries(projectSeries); return ActionUtils.Success(1); })); }
public ActionResult CreateTask(string projectGuid, string name, string startTime, string endTime, string prevTaskShortCodes, string taskExtensionType, string taskDetail, string taskTarget, string taskGroupGuid, string personInCharge) { return(ActionUtils.Json(() => { CheckPermission(PermissionObjectType.TaskGroup, taskGroupGuid, PermissionType.Write); CommUtils.Assert(DateUtils.IsNullableDate(startTime), "开始时间必须为[YYYY-MM-DD]格式或者为空"); ValidateUtils.Name(name, "工作名称"); CommUtils.AssertHasContent(endTime, "截止时间不能为空"); CommUtils.Assert(taskTarget.Length <= 100000, "工作目标不能超过100000个字符"); CommUtils.Assert(taskDetail.Length <= 100000, "工作描述不能超过100000个字符"); if (!string.IsNullOrWhiteSpace(personInCharge)) { CommUtils.Assert(m_dbAdapter.Authority.IsUserExist(personInCharge), "负责人[{0}]不存在", personInCharge); } var taskStartTime = DateUtils.Parse(startTime); if (taskStartTime != null) { CommUtils.Assert(DateTime.Parse(endTime) >= taskStartTime, "开始时间[{0}]不能大于截止时间[{1}]", startTime, endTime); } var project = m_dbAdapter.Project.GetProjectByGuid(projectGuid); int?taskGroupId = null; if (!string.IsNullOrWhiteSpace(taskGroupGuid)) { var taskGroup = m_dbAdapter.TaskGroup.GetByGuid(taskGroupGuid); CommUtils.AssertEquals(taskGroup.ProjectId, project.ProjectId, "输入工作组[TaskGroupGuid={0}]和项目[ProjectGuid={1}]不属于同一个项目", taskGroupGuid, project.ProjectGuid); taskGroupId = taskGroup.Id; } int?taskExId = null; if (!string.IsNullOrWhiteSpace(taskExtensionType)) { var taskExType = CommUtils.ParseEnum <TaskExtensionType>(taskExtensionType); var taskEx = ChineseAbs.ABSManagement.Models.TaskExtension.Create(taskExType); taskEx = m_dbAdapter.Task.NewTaskExtension(taskEx); taskExId = taskEx.TaskExtensionId; } var task = new Task(); task.ProjectId = project.ProjectId; task.Description = name; task.ProjectName = project.Name; task.StartTime = taskStartTime; task.EndTime = DateTime.Parse(endTime); task.TaskExtensionId = taskExId; task.PersonInCharge = string.IsNullOrWhiteSpace(personInCharge) ? null : personInCharge; if (!string.IsNullOrWhiteSpace(prevTaskShortCodes)) { var shortCodes = CommUtils.Split(prevTaskShortCodes); var prevTasks = m_dbAdapter.Task.GetTasks(shortCodes); var prevTaskIds = prevTasks.Select(x => x.TaskId.ToString()).ToArray(); task.PreTaskIds = CommUtils.Join(prevTaskIds); } task.TaskDetail = taskDetail; task.TaskTarget = taskTarget; task.TaskStatus = (DateTime.Today <= task.EndTime) ? TaskStatus.Waitting : TaskStatus.Overdue; task.TaskGroupId = taskGroupId; task = m_dbAdapter.Task.NewTask(task); var projectLogicModel = new ProjectLogicModel(CurrentUserName, project); var permissionLogicModel = new PermissionLogicModel(projectLogicModel); var projectSeries = m_dbAdapter.ProjectSeries.GetById(project.ProjectSeriesId.Value); permissionLogicModel.SetPermission(projectSeries, project, task.ShortCode, PermissionObjectType.Task); projectLogicModel.Activity.Add(project.ProjectId, ActivityObjectType.Task, task.ShortCode, "创建工作:" + task.Description); var msg = string.Format("创建task:shortCode={0};name={1};startTime={2};endTime={3};taskExtensionType={4};" + "taskDetail={5};taskTarget={6};prevTaskShortCodes={7};projectGuid={8};taskGroupGuid={9}", task.ShortCode, name, startTime, endTime, taskExtensionType, taskDetail, taskTarget, prevTaskShortCodes, projectGuid, taskGroupGuid); LogEditProduct(EditProductType.CreateTask, task.ProjectId, msg, ""); return ActionUtils.Success(1); })); }
// 创建一个项目 // 创建后给创建者增加读、写、操作的权限 public ProjectSeriesLogicModel NewProjectSeries(string name, string projectSeriesType, string personInCharge, string createTime, string estimatedFinishTime, string email) { ValidateUtils.Name(name, "项目名称").FileName(); CommUtils.Assert(email.Length <= 38, "邮箱不能超过38个字符数!"); CommUtils.AssertHasContent(personInCharge, "[项目负责人]不能为空"); CommUtils.Assert(m_dbAdapter.Authority.IsUserExist(personInCharge), "[用户]不存在"); CommUtils.AssertHasContent(createTime, "[立项日期]不能为空"); CommUtils.AssertHasContent(estimatedFinishTime, "[计划完成日期]不能为空"); var valStartTime = DateTime.Parse(createTime); var valEstimatedFinishTime = DateTime.Parse(estimatedFinishTime); CommUtils.Assert(valEstimatedFinishTime >= valStartTime, "计划完成日期[{0}]必须大于等于立项日期[{1}]", valEstimatedFinishTime, valStartTime); var type = CommUtils.ParseEnum <ProjectSeriesType>(projectSeriesType); var projectSeries = m_dbAdapter.ProjectSeries.NewProjectSeries(name, type, personInCharge, valStartTime, valEstimatedFinishTime, email); m_projectSeries = projectSeries; var now = DateTime.Now; ABSMgrConn.TableProject project = new ABSMgrConn.TableProject() { project_guid = Guid.NewGuid().ToString(), project_series_id = projectSeries.Id, name = projectSeries.Name, type_id = (int)ProjectSeriesStage.发行, model_id = -1, cnabs_deal_id = null, create_time = DateTime.Parse(now.ToString("yyyy-MM-dd")), create_user_name = m_userName, time_stamp = now, time_stamp_user_name = m_userName, record_status_id = (int)RecordStatus.Valid }; project.project_id = m_dbAdapter.Project.NewProject(project); m_currentProject = new ProjectLogicModel(m_userName, new Project(project)); var adminUsernames = new List <string> { projectSeries.CreateUserName, projectSeries.PersonInCharge }; adminUsernames = adminUsernames.Distinct(StringComparer.OrdinalIgnoreCase).ToList(); //给[创建者、负责人]添加ProjectSeries与Project的所有权限 foreach (var adminUsername in adminUsernames) { m_dbAdapter.Permission.NewPermission(adminUsername, project.project_guid, PermissionObjectType.Project, PermissionType.Read); m_dbAdapter.Permission.NewPermission(adminUsername, project.project_guid, PermissionObjectType.Project, PermissionType.Write); m_dbAdapter.Permission.NewPermission(adminUsername, project.project_guid, PermissionObjectType.Project, PermissionType.Execute); m_dbAdapter.Permission.NewPermission(adminUsername, projectSeries.Guid, PermissionObjectType.ProjectSeries, PermissionType.Read); m_dbAdapter.Permission.NewPermission(adminUsername, projectSeries.Guid, PermissionObjectType.ProjectSeries, PermissionType.Write); m_dbAdapter.Permission.NewPermission(adminUsername, projectSeries.Guid, PermissionObjectType.ProjectSeries, PermissionType.Execute); } return(this); }
public ActionResult ModifyTask(string shortCode, string name, string startTime, string endTime, string taskExtensionType, string taskDetail, string taskTarget, string personInCharge) { return(ActionUtils.Json(() => { CommUtils.Assert(DateUtils.IsNullableDate(startTime), "开始时间必须为[YYYY-MM-DD]格式或者为空"); var taskStartTime = DateUtils.Parse(startTime); if (taskStartTime != null) { CommUtils.Assert(DateTime.Parse(endTime) >= taskStartTime.Value, "开始时间[{0}]不能大于截止时间[{1}]", startTime, endTime); } var task = m_dbAdapter.Task.GetTask(shortCode); if (task.TaskExtensionId.HasValue) { task.TaskExtension = m_dbAdapter.Task.GetTaskExtension(task.TaskExtensionId.Value); } if (!string.IsNullOrWhiteSpace(personInCharge)) { CommUtils.Assert(m_dbAdapter.Authority.IsUserExist(personInCharge), "负责人[{0}]不存在", personInCharge); } CommUtils.AssertNotNull(task.TaskGroupId, "查找TaskGroup失败,shortCode={0}", shortCode); CheckPermission(PermissionObjectType.Task, shortCode, PermissionType.Write); ValidateUtils.Name(name, "工作名"); CommUtils.AssertHasContent(endTime, "截止时间不能为空"); if (string.IsNullOrWhiteSpace(taskExtensionType)) { task.TaskExtensionId = null; } else { if (!task.TaskExtensionId.HasValue || task.TaskExtension.TaskExtensionType != CommUtils.ParseEnum <TaskExtensionType>(taskExtensionType).ToString()) { var taskExType = CommUtils.ParseEnum <TaskExtensionType>(taskExtensionType); var taskEx = ChineseAbs.ABSManagement.Models.TaskExtension.Create(taskExType); taskEx = m_dbAdapter.Task.NewTaskExtension(taskEx); task.TaskExtensionId = taskEx.TaskExtensionId; } } var taskEndTime = DateTime.Parse(endTime); task.Description = name; task.StartTime = taskStartTime; task.EndTime = taskEndTime; task.PersonInCharge = string.IsNullOrWhiteSpace(personInCharge) ? null : personInCharge; task.TaskDetail = taskDetail; task.TaskTarget = taskTarget; if (task.TaskStatus == TaskStatus.Overdue && taskEndTime >= DateTime.Now.Date) { task.TaskStatus = TaskStatus.Waitting; } if (task.TaskStatus == TaskStatus.Waitting && taskEndTime < DateTime.Now.Date) { task.TaskStatus = TaskStatus.Overdue; } var result = m_dbAdapter.Task.UpdateTask(task); var msg = string.Format("修改task:shortCode={0};name={1};startTime={2};endTime={3};taskExtensionType={4};taskDetail={5};taskTarget={6}", shortCode, name, startTime, endTime, taskExtensionType, taskDetail, taskTarget); LogEditProduct(EditProductType.EditTask, task.ProjectId, msg, ""); return ActionUtils.Success(result); })); }