コード例 #1
0
        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);
            }));
        }
コード例 #2
0
        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);
            }));
        }
コード例 #3
0
        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);
            }));
        }
コード例 #4
0
        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);
            }));
        }
コード例 #5
0
        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);
            }));
        }
コード例 #6
0
        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);
            }));
        }
コード例 #7
0
        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;
        }
コード例 #8
0
        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);
            }));
        }
コード例 #9
0
        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);
            }));
        }
コード例 #10
0
        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);
            }));
        }
コード例 #11
0
        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);
            }));
        }
コード例 #12
0
        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);
            }));
        }
コード例 #13
0
        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);
            }));
        }
コード例 #14
0
        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);
        }
コード例 #15
0
        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));
            }));
        }
コード例 #16
0
        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);
            }));
        }
コード例 #17
0
        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);
            }));
        }
コード例 #18
0
        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);
            }));
        }
コード例 #19
0
        // 创建一个项目
        // 创建后给创建者增加读、写、操作的权限
        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);
        }
コード例 #20
0
        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);
            }));
        }