예제 #1
0
        public ActionResult RemoveFile(string projectGuid, List <string> fileGuids)
        {
            return(ActionUtils.Json(() =>
            {
                var dms = GetDMSAndCheckPermission(projectGuid, PermissionType.Write);
                var dmsFiles = new List <DMSFile>();
                foreach (var fileGuid in fileGuids)
                {
                    var dmsFile = m_dbAdapter.DMSFile.GetByGuid(fileGuid);
                    var dmsFileSeries = m_dbAdapter.DMSFileSeries.GetById(dmsFile.DMSFileSeriesId);
                    var dmsFolder = m_dbAdapter.DMSFolder.GetById(dmsFileSeries.DMSFolderId);

                    CommUtils.AssertEquals(dmsFolder.DMSId, dms.Instance.Id,
                                           "FileGuid[{0}]不在DMS[{1}]中", fileGuid, dms.Instance.Guid);

                    CommUtils.Assert(IsCurrentUser(dmsFile.CreateUserName),
                                     "当前用户[{0}]不是[{1}]的创建者[{2}]", CurrentUserName, dmsFile.Name, dmsFile.CreateUserName);

                    dmsFiles.Add(dmsFile);
                }

                var fileNames = new List <string>();
                foreach (var dmsFile in dmsFiles)
                {
                    m_dbAdapter.DMSFile.Remove(dmsFile);
                    fileNames.Add("[" + dmsFile.Name + "]");
                }

                // m_dbAdapter.DMSProjectLog.AddDmsProjectLog(projectGuid, "删除文件" + string.Join(",", fileNames.ToArray()));

                return ActionUtils.Success(dmsFiles.Count);
            }));
        }
예제 #2
0
        private List <DataSeries> GetChartByDataset(string projectGuid, string paymentDay, Func <PaymentDetail, double> selector)
        {
            var project     = m_dbAdapter.Project.GetProjectByGuid(projectGuid);
            var datasets    = m_dbAdapter.Dataset.GetDatasetByProjectId(project.ProjectId);
            var subDatasets = datasets.Where(x => x.PaymentDate.HasValue && x.PaymentDate.Value.ToString("yyyyMMdd") == paymentDay).ToList();

            CommUtils.AssertEquals(subDatasets.Count, 1, "加载Dataset (project=" + project.Name + ", paymentDay=" + paymentDay + ") 失败");

            var dataset = subDatasets.Single();

            var notes      = m_dbAdapter.Dataset.GetNotes(project.ProjectId);
            var cnabsNotes = new ProjectLogicModel(CurrentUserName, project).Notes;
            var noteDict   = Toolkit.GetNoteDictionary(project, notes, cnabsNotes);
            var noteInfos  = notes.ConvertAll(x => noteDict[x.NoteId]);

            //Load dataset info
            var dealSchedule     = NancyUtils.GetDealSchedule(project.ProjectId);
            var noteDatas        = m_dbAdapter.Dataset.GetNoteDatas(dataset.DatasetId);
            var datasetViewModel = Toolkit.GetDatasetViewModel(dataset, dealSchedule.PaymentDates, noteDict, noteDatas);

            var dataSeriesList = new List <DataSeries>();

            foreach (var noteData in datasetViewModel.NoteDatas)
            {
                var ds = new DataSeries();
                ds.name = noteData.NoteInfo.Name;
                ds.data = new List <Vector>();
                ds.data.Add(new Vector(selector(noteData.PaymentDetail)));
                dataSeriesList.Add(ds);
            }

            return(dataSeriesList);
        }
예제 #3
0
        public ActionResult RemoveFileSeries(string shortCode, List <string> fileSeriesGuids)
        {
            return(ActionUtils.Json(() =>
            {
                var dms = GetDMSAndCheckPermission(shortCode, PermissionType.Write);
                var fileSeriesList = new List <DMSFileSeries>();
                foreach (var fileSeriesGuid in fileSeriesGuids)
                {
                    var dmsFileSeries = m_dbAdapter.DMSFileSeries.GetByGuid(fileSeriesGuid);
                    var dmsFolder = m_dbAdapter.DMSFolder.GetById(dmsFileSeries.DMSFolderId);

                    CommUtils.AssertEquals(dmsFolder.DMSId, dms.Instance.Id,
                                           "fileSeriesGuid[{0}]不在DMS[{1}]中", fileSeriesGuid, dms.Instance.Guid);

                    CommUtils.Assert(IsCurrentUser(dmsFileSeries.CreateUserName),
                                     "当前用户[{0}]不是[{1}]的创建者[{2}]", CurrentUserName, dmsFileSeries.Name, dmsFileSeries.CreateUserName);

                    fileSeriesList.Add(dmsFileSeries);
                }

                var result = m_dbAdapter.DMSFileSeries.Remove(fileSeriesList);

                var fileSeriesNamesArray = fileSeriesList.ConvertAll(x => "[" + x.Name + "]").ToArray();
                m_dbAdapter.Task.AddTaskLog(shortCode, "删除文件" + string.Join(",", fileSeriesNamesArray));
                return ActionUtils.Success(result);
            }));
        }
예제 #4
0
        public ActionResult RemoveFileSeries(string projectGuid, List <string> fileSeriesGuids)
        {
            return(ActionUtils.Json(() =>
            {
                var dms = GetDMSAndCheckPermission(projectGuid, PermissionType.Write);
                var fileSeriesList = new List <DMSFileSeries>();
                foreach (var fileSeriesGuid in fileSeriesGuids)
                {
                    var dmsFileSeries = m_dbAdapter.DMSFileSeries.GetByGuid(fileSeriesGuid);
                    var dmsFolder = m_dbAdapter.DMSFolder.GetById(dmsFileSeries.DMSFolderId);

                    CommUtils.AssertEquals(dmsFolder.DMSId, dms.Instance.Id,
                                           "fileSeriesGuid[{0}]不在DMS[{1}]中", fileSeriesGuid, dms.Instance.Guid);

                    CommUtils.Assert(IsCurrentUser(dmsFileSeries.CreateUserName),
                                     "当前用户[{0}]不是[{1}]的创建者[{2}]", CurrentUserName, dmsFileSeries.Name, dmsFileSeries.CreateUserName);

                    fileSeriesList.Add(dmsFileSeries);
                    m_dbAdapter.DMSProjectLog.AddDmsProjectLog(projectGuid, fileSeriesGuid, "删除文件" + fileSeriesGuid);
                }

                var result = m_dbAdapter.DMSFileSeries.Remove(fileSeriesList);

                return ActionUtils.Success(result);
            }));
        }
예제 #5
0
        public ActionResult DeleteExtensionCheckItem(string shortCode, string checkItemName, string groupName)
        {
            return(ActionUtils.Json(() =>
            {
                CheckPermission(PermissionObjectType.Task, shortCode, PermissionType.Write);
                var task = m_dbAdapter.Task.GetTaskWithExInfo(shortCode);
                var taskExInfo = task.TaskExtension.TaskExtensionInfo;
                if (taskExInfo != null)
                {
                    var taskExCheckListInfo = CommUtils.FromJson <TaskExCheckListInfo>(taskExInfo);
                    foreach (var checkItemGroup in taskExCheckListInfo.CheckGroups)
                    {
                        if (checkItemGroup.GroupName == groupName)
                        {
                            CommUtils.AssertEquals(checkItemGroup.CheckItems.Count(x => x.Name == checkItemName), 1,
                                                   "工作[" + task + "]检查项分组[" + checkItemGroup.GroupName + "]下的[" + checkItemName + "]项有误,请刷新后重试");
                            checkItemGroup.CheckItems.RemoveAll(x => x.Name == checkItemName);
                        }
                    }
                    task.TaskExtension.TaskExtensionInfo = CommUtils.ToJson(taskExCheckListInfo);
                }

                task.TaskHandler = CurrentUserName;

                m_dbAdapter.Task.UpdateTaskExtension(task.TaskExtension);
                m_dbAdapter.Task.UpdateTask(task);
                m_dbAdapter.Project.NewEditProductLog(EditProductType.EditTask, task.ProjectId,
                                                      "更新Task[" + task.Description + "(" + task.ShortCode + ")]," + "删除扩展工作检查项分组[" + groupName + "]下的检查项[" + checkItemName + "]", "");
                var comment = "删除分组[" + groupName + "]中的工作要点[" + checkItemName + "]";
                m_dbAdapter.Task.AddTaskLog(task, comment);

                return ActionUtils.Success("");
            }));
        }
예제 #6
0
        public async Task <JsonResult> CreateUser(UserViewModel vuser)
        {
            CommUtils.AssertEquals(vuser.RepeatPassword, vuser.Password, "两次输入密码不一致");
            CommUtils.Assert(vuser.Password.Length >= 6, "密码最小长度为六位");
            CommUtils.Assert(UserService.GetUserByName(vuser.UserName) == null, "用户[{0}]已存在", vuser.UserName);
            AppUser user = new AppUser()
            {
                UserName      = vuser.UserName,
                PasswordHash  = new PasswordHasher().HashPassword(vuser.Password),
                Email         = vuser.Email,
                NickName      = vuser.NickName,
                PhoneNumber   = vuser.PhoneNumber,
                IsActive      = true,
                SecurityStamp = Guid.NewGuid().ToString(),
            };
            await UserService.CreateAsync(user);

            user = UserService.GetUserByName(vuser.UserName);
            foreach (var item in vuser.Roles)
            {
                await UserService.AddToRoleAsync(user, item);
            }

            return(Json(new JsonResultDataEntity <string>()
            {
                Code = 0
            }));
        }
예제 #7
0
 public AssetLogicModel GetAssetById(int assetId)
 {
     CommUtils.AssertEquals(Assets.Count(x => x.AssetId == assetId), 1,
                            "查找assetId={0}失败,产品[{1}],偿付期[{2}]",
                            ProjectLogicModel.Instance.Name, Instance.PaymentDate.Value);
     return(Assets.Single(x => x.AssetId == assetId));
 }
예제 #8
0
        public ActionResult UploadFile(string shortCode, string fileSeriesGuid, string description)
        {
            return(ActionUtils.Json(() =>
            {
                var dms = GetDMSAndCheckPermission(shortCode, PermissionType.Execute);

                var dmsFileSeries = m_dbAdapter.DMSFileSeries.GetByGuid(fileSeriesGuid);
                var dmsFolder = m_dbAdapter.DMSFolder.GetById(dmsFileSeries.DMSFolderId);
                CommUtils.AssertEquals(dms.Instance.Id, dmsFolder.DMSId,
                                       "文件[fileSeriesGuid={0}]不在DMS[DMSGuid={1}]中,请刷新后再试",
                                       fileSeriesGuid, dms.Instance.Guid);

                var files = Request.Files;
                CommUtils.Assert(files.Count > 0, "请选择上传文件");
                CommUtils.AssertEquals(files.Count, 1, "只能上传一个文件");

                var file = files[0];
                var index = Math.Max(file.FileName.LastIndexOf('\\'), file.FileName.LastIndexOf('/'));
                var fileName = index < 0 ? file.FileName : file.FileName.Substring(index + 1);

                CommUtils.Assert(file.ContentLength > 0, "上传文件不能为空");
                CommUtils.AssertHasContent(fileName, "文件名不能为空");
                CommUtils.Assert(fileName.Length <= 100, "文件名不能超过100个字符数");

                var memoryStream = new MemoryStream(new BinaryReader(file.InputStream).ReadBytes(file.ContentLength));
                var repoFile = Platform.Repository.AddFile(fileName, memoryStream);

                var allFiles = m_dbAdapter.DMSFile.GetFilesByFileSeriesId(dmsFileSeries.Id);
                var currentVer = allFiles.Count == 0?0: allFiles.Max(x => x.Version);

                DMSFile newDMSFile = new DMSFile();
                newDMSFile.DMSId = dms.Instance.Id;
                newDMSFile.DMSFileSeriesId = dmsFileSeries.Id;

                newDMSFile.RepoFileId = repoFile.Id;
                newDMSFile.Name = repoFile.Name;
                newDMSFile.Description = description ?? string.Empty;

                newDMSFile.Size = file.ContentLength;
                newDMSFile.Version = currentVer + 1;

                var now = DateTime.Now;
                newDMSFile.LastModifyUserName = CurrentUserName;
                newDMSFile.LastModifyTime = now;
                newDMSFile.CreateUserName = CurrentUserName;
                newDMSFile.CreateTime = now;

                newDMSFile = m_dbAdapter.DMSFile.Create(newDMSFile);

                var task = m_dbAdapter.Task.GetTask(shortCode);
                new TaskLogicModel(dms.ProjectLogicModel, task).Start();

                var comment = "文件夹[" + dmsFolder.Name + "]中上传文件["
                              + dmsFileSeries.Name + "]的第" + newDMSFile.Version + "版本";
                m_dbAdapter.Task.AddTaskLog(task, comment);

                return ActionUtils.Success(newDMSFile.Guid);
            }));
        }
예제 #9
0
        public int DeleteAgenda(Agenda agenda)
        {
            agenda.RecordStatus = RecordStatus.Deleted;
            var count = UpdateAgenda(agenda);

            CommUtils.AssertEquals(count, 1, "Remove agenda failed : id={0};recordsCount={1}", agenda.Id, count);
            return(count);
        }
예제 #10
0
        public TaskGroup RemoveTaskGroup(TaskGroup taskGroup)
        {
            taskGroup.RecordStatus = RecordStatus.Deleted;
            var count = UpdateTaskGroup(taskGroup);

            CommUtils.AssertEquals(count, 1, "Remove taskGroup failed : id={0};recordsCount={1}", taskGroup.Id, count);
            return(taskGroup);
        }
예제 #11
0
        public int RemoveInvestment(Investment investment)
        {
            investment.RecordStatus = RecordStatus.Deleted;
            var count = UpdateInvestment(investment);

            CommUtils.AssertEquals(count, 1, "Remove investment failed : id={0};recordsCount={1}", investment.Id, count);
            return(count);
        }
예제 #12
0
        public void Load(int projectId, DateTime asOfDate)
        {
            var project      = m_dbAdapter.Project.GetProjectById(projectId);
            var dealSchedule = NancyUtils.GetDealSchedule(projectId, asOfDate.ToString("yyyyMMdd"));

            m_dealSchedule = dealSchedule;

            var errorMsg = "Search payment date/as of date failed, projectGuid=[" + project.ProjectGuid + "] asOfDate=[" + asOfDate.ToString() + "]";

            CommUtils.Assert(dealSchedule.DeterminationDates != null && dealSchedule.DeterminationDates.Length > 0, errorMsg);
            CommUtils.Assert(dealSchedule.PaymentDates != null && dealSchedule.PaymentDates.Length > 0, errorMsg);
            CommUtils.Assert(dealSchedule.DeterminationDates.Length == dealSchedule.PaymentDates.Length, errorMsg);
            CommUtils.Assert(asOfDate < dealSchedule.LegalMaturity, errorMsg);

            var asOfDateList = dealSchedule.DeterminationDates.ToList();

            asOfDateList.Insert(0, dealSchedule.FirstCollectionPeriodStartDate);
            asOfDateList.RemoveAt(asOfDateList.Count - 1);

            var paymentDateList   = dealSchedule.PaymentDates.ToList();
            var projectLogicModel = new ProjectLogicModel(m_userName, project);

            var findPaymentDates = projectLogicModel.DealSchedule.DurationPeriods
                                   .Where(x => x.Dataset != null && x.Dataset.Instance != null &&
                                          DateUtils.ParseDigitDate(x.Dataset.Instance.AsOfDate) == asOfDate)
                                   .Select(x => x.Dataset.Instance.PaymentDate);

            CommUtils.AssertEquals(findPaymentDates.Count(), 1, "查找PaymentDay失败,AsOfDate={0}", asOfDate);

            m_paymentDay = findPaymentDates.Single().Value;
            var index = paymentDateList.IndexOf(m_paymentDay);

            CommUtils.Assert(index >= 0, errorMsg);

            m_asOfDay = asOfDate;
            if (index == 0)
            {
                m_previousPaymentDay = paymentDateList[0];
            }
            else
            {
                m_previousPaymentDay = paymentDateList[index - 1];
            }

            if (index == paymentDateList.Count - 1)
            {
                m_nextAsOfDay    = null;
                m_nextPaymentDay = null;
            }
            else
            {
                m_nextAsOfDay    = asOfDateList[index + 1];
                m_nextPaymentDay = paymentDateList[index + 1];
            }

            m_isInitialized = true;
        }
예제 #13
0
        public void ResetPassword(string userName, string password, string repeatPassword)
        {
            var user = UserService.GetUserByName(userName);

            CommUtils.AssertEquals(repeatPassword, password, "两次输入密码不一致");
            CommUtils.Assert(password.Length >= 6, "密码最小长度为六位");
            CommUtils.Assert(user != null, "用户[{0}]不存在", userName);
            UserService.SetPasswordHashAsync(user, new PasswordHasher().HashPassword(password));
        }
예제 #14
0
        public ActionResult ModifyTaskExtensionCheckList(string shortCode, string groupName, string checkItemName, string checkItemGuid, string checkItemType)
        {
            return(ActionUtils.Json(() =>
            {
                CheckPermission(PermissionObjectType.Task, shortCode, PermissionType.Execute);
                var task = m_dbAdapter.Task.GetTaskWithExInfo(shortCode);
                m_dbAdapter.Task.CheckPrevIsFinished(task);

                CommUtils.Assert(CommUtils.ParseEnum <TaskExtensionType>(task.TaskExtension.TaskExtensionType) == TaskExtensionType.CheckList,
                                 "工作[" + task.Description + "]的工作扩展类型不是[工作要点检查]");

                var oldItemStatus = CommUtils.ParseEnum <TaskExCheckType>(checkItemType);

                var revisionCheckType = string.Empty;

                CommUtils.AssertHasContent(task.TaskExtension.TaskExtensionInfo, "当前工作不包含扩展信息。");
                var taskExInfo = task.TaskExtension.TaskExtensionInfo;
                var taskExCheckListInfo = CommUtils.FromJson <TaskExCheckListInfo>(taskExInfo);

                CommUtils.AssertEquals(taskExCheckListInfo.CheckGroups.Count(x => x.GroupName == groupName), 1, "找不到检查项分组{0}", groupName);
                var group = taskExCheckListInfo.CheckGroups.Single(x => x.GroupName == groupName);

                CommUtils.AssertEquals(group.CheckItems.Count(x => x.Name == checkItemName), 1, "检查项分组{0}中,找不到检查项{1}", checkItemName);
                var checkItem = group.CheckItems.Single(x => x.Name == checkItemName);

                CommUtils.AssertEquals(checkItem.Guid, checkItemGuid, "检查项分组{0}中,检查项{1}匹配失败", groupName, checkItemName);
                CommUtils.AssertEquals(checkItem.CheckStatus, checkItemType, "检查项分组{0}中,检查项{1}状态有误,请刷新后再试", groupName, checkItemName);

                if (oldItemStatus == TaskExCheckType.Unchecked)
                {
                    checkItem.CheckStatus = TaskExCheckType.Checked.ToString();
                }
                else if (oldItemStatus == TaskExCheckType.Checked)
                {
                    checkItem.CheckStatus = TaskExCheckType.Unchecked.ToString();
                }
                else
                {
                    CommUtils.Assert(false, "无法识别的检查项内容[{0}]", oldItemStatus.ToString());
                }

                revisionCheckType = checkItem.CheckStatus;
                task.TaskExtension.TaskExtensionInfo = CommUtils.ToJson(taskExCheckListInfo);
                task.TaskHandler = CurrentUserName;

                m_dbAdapter.Task.UpdateTaskExtension(task.TaskExtension);

                var logicModel = Platform.GetProject(task.ProjectId);
                new TaskLogicModel(logicModel, task).Start();
                m_dbAdapter.Task.UpdateTask(task);
                m_dbAdapter.Task.AddTaskLog(task, "校验分组[" + groupName + "]中的工作要点[" + checkItemName + "],状态为:" + Toolkit.ConvertTaskExCheckType(revisionCheckType));

                return ActionUtils.Success(1);
            }));
        }
예제 #15
0
        public Investment GetInvestment(int investmentId)
        {
            var records = m_db.Fetch <ABSMgrConn.TableInvestment>(
                "SELECT * FROM dbo.Investment WHERE investment_id = @0 AND record_status_id <> @1 ORDER BY investment_id",
                investmentId, (int)RecordStatus.Deleted);

            CommUtils.AssertEquals(records.Count, 1,
                                   "Load multiply records from db, investmentId={0}", investmentId);

            return(new Investment(records.Single()));
        }
예제 #16
0
        //移除用户对uid的全部权限
        private void RemovePermissionByObjType(PermissionObjectType permissionObjectType, List <string> uids, List <string> userNames)
        {
            var permissions = m_dbAdapter.Permission.GetAllPermission(userNames, uids);

            foreach (var permission in permissions)
            {
                CommUtils.AssertEquals(permission.ObjectType, permissionObjectType,
                                       "检测到权限类型错误:uid={0};objType={1}", permission.ObjectUniqueIdentifier, permission.ObjectType);
            }

            m_dbAdapter.Permission.DeletePermission(permissions);
        }
예제 #17
0
        public ActionResult ModifyIssueDescription(string projectGuid, string issueGuid, string issueActivityGuid,
                                                   string issueName, string description, string emergencyLevelText, string allotUser,
                                                   string fileGuidsText, string imageGuidsText, string shortCodeText)
        {
            return(ActionUtils.Json(() =>
            {
                CheckPermission(PermissionObjectType.Project, projectGuid, PermissionType.Read);

                var issue = m_dbAdapter.Issue.GetIssueByIssueGuid(issueGuid);
                var issueActivity = m_dbAdapter.IssueActivity.GetIssueActivityByGuid(issueActivityGuid);
                CommUtils.Assert(issue.IssueStatus != IssueStatus.Finished, "问题[{0}]已经被解决,不能编辑,请刷新页面后重试", issue.IssueName);
                CommUtils.AssertEquals(issue.Id, issueActivity.IssueId,
                                       "当前描述issueActivityGuid[{0}]不属于当前所选择的问题issueGuid[{1}],请刷新页面后重试", issueActivityGuid, issueGuid);
                CommUtils.Assert(issueActivity.IssueActivityTypeId == IssueActivityType.Original, "问题描述的类型不是");
                CommUtils.AssertHasContent(issueName, "问题名称不能为空");
                CommUtils.Assert(issueName.Length <= 30, "问题名称不能超过30个字符数");
                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 files = Request.Files;
                var dicFileAndImageIds = UploadFileAndImage(files);

                issue.IssueName = issueName;
                issue.Description = description;
                issue.IssueEmergencyLevel = emergencyLevel;
                issue.LastModifyTime = DateTime.Now;
                issue.LastModifyUserName = CurrentUserName;
                issue.AllotUser = allotUser;

                m_dbAdapter.Issue.UpdateIssue(issue);

                issueActivity.Comment = description;
                m_dbAdapter.IssueActivity.UpdateIssueActivity(issueActivity);

                //删除IssueActivity原有的图片及文件
                DeleteActivityFilesAndImages(issueActivity.IssueActivityId, fileGuidsText, imageGuidsText);

                //添加新的文件及图片
                if (dicFileAndImageIds != null)
                {
                    dicFileAndImageIds["file"].ForEach(x => m_dbAdapter.File.NewIssueActivityFile(issueActivity.IssueActivityId, x));
                    dicFileAndImageIds["image"].ForEach(x => m_dbAdapter.Image.NewIssueActivityImage(issueActivity.IssueActivityId, x));
                }

                return ActionUtils.Success("");
            }));
        }
예제 #18
0
        public ActionResult GetIssueDescription(string projectGuid, string issueGuid, string issueActivityGuid)
        {
            return(ActionUtils.Json(() =>
            {
                CheckPermission(PermissionObjectType.Project, projectGuid, PermissionType.Read);

                var issue = m_dbAdapter.Issue.GetIssueByIssueGuid(issueGuid);
                var issueActivity = m_dbAdapter.IssueActivity.GetIssueActivityByGuid(issueActivityGuid);
                CommUtils.Assert(issue.IssueStatus != IssueStatus.Finished, "问题[{0}]已经被解决,请刷新页面后重试", issue.IssueName);
                CommUtils.AssertEquals(issue.Id, issueActivity.IssueId,
                                       "当前描述issueActivityGuid[{0}]不属于当前所选择的问题issueGuid[{1}]", issueActivityGuid, issueGuid);
                CommUtils.Assert(issueActivity.IssueActivityTypeId == IssueActivityType.Original, "问题描述的类型不是");

                var issueActivityId = issueActivity.IssueActivityId;
                var fileIds = m_dbAdapter.File.GetFileIdsByIssueActivityId(issueActivityId).ConvertAll(x => x.FileId).ToList();
                var imageIds = m_dbAdapter.Image.GetImageIdsByIssueActivityId(issueActivityId).ConvertAll(x => x.ImageId).ToList();

                var files = m_dbAdapter.File.GetFilesByIds(fileIds);
                var images = m_dbAdapter.Image.GetImagesByIds(imageIds);

                var createUserInfo = Platform.UserProfile.Get(issueActivity.CreateUserName);
                var connectionTasks = m_dbAdapter.IssueConnectionTasks.GetConnectionTasksByIssueId(issue.Id);
                var shortCodes = connectionTasks.ConvertAll(x => x.TaskShortCode).ToList();
                var tasks = m_dbAdapter.Task.GetTasks(shortCodes);

                var result = new {
                    Guid = issueActivityGuid,
                    Description = issueActivity.Comment,
                    CreateUserName = createUserInfo.UserName,
                    CreateRealUserName = createUserInfo.RealName,
                    CreateTime = Toolkit.DateTimeToString(issueActivity.CreateTime),
                    LastModifyTime = Toolkit.DateTimeToString(issueActivity.LastModifyTime),
                    ActivityType = issueActivity.IssueActivityTypeId.ToString(),
                    FileInfo = files.ConvertAll(file => new
                    {
                        Guid = file.Guid,
                        Name = file.Name
                    }),
                    ImageInfo = images.ConvertAll(image => new
                    {
                        Guid = image.Guid,
                        Name = image.Name
                    }),
                    IsValid = issueActivity.RecordStatus == RecordStatus.Valid,
                    ConnectionTasks = tasks.ConvertAll(x => new {
                        taskName = x.Description,
                        shortCode = x.ShortCode
                    })
                };

                return ActionUtils.Success(result);
            }));
        }
예제 #19
0
        public ActionResult CreateTasksByMetaTask(string projectGuid, string metaTaskGuid)
        {
            return(ActionUtils.Json(() =>
            {
                var project = m_dbAdapter.Project.GetProjectByGuid(projectGuid);

                var metaTask = m_dbAdapter.MetaTask.GetByGuid(metaTaskGuid);

                var prevMetaTaskIds = CommUtils.Split(metaTask.PreMetaTaskIds).Select(x => int.Parse(x));
                CommUtils.AssertEquals(project.ProjectId, metaTask.ProjectId, "当前产品下的id[{0}]与工作[{1}]的guid[{2}]不一致", project.ProjectId, metaTask.Name, metaTask.ProjectId);

                var prevMetaTasks = m_dbAdapter.MetaTask.GetByIds(prevMetaTaskIds);
                var dictPrevMetaTask = prevMetaTasks.ToDictionary(x => x.Id.ToString());

                var beginTimeSeries = metaTask.StartTimeSeriesId.HasValue && metaTask.StartTimeSeriesId.Value != 0
                    ? m_dbAdapter.TimeSeries.GetById(metaTask.StartTimeSeriesId.Value) : null;
                var endTimeSeries = m_dbAdapter.TimeSeries.GetById(metaTask.EndTimeSeriesId);

                if (beginTimeSeries == null)
                {
                    var endTimeRule = GetTimeRuleDetail(endTimeSeries.Id);
                    var endTimeOrigin = GetTimeOriginDetail(endTimeSeries.Guid, endTimeSeries.Id);

                    var endTimeStrList = GetTimeListByTimeRuleOrigin(endTimeRule, endTimeOrigin);
                    var endTimeList = endTimeStrList.ConvertAll(x => DateTime.Parse(x)).ToList();
                    //遍历beginTimeList跟endTimeList开始进行生成工作
                    GenerateTasks(metaTask, new List <DateTime>(), endTimeList);
                }
                else
                {
                    var beginTimeRule = GetTimeRuleDetail(beginTimeSeries.Id);
                    var beginTimeOrigin = GetTimeOriginDetail(beginTimeSeries.Guid, beginTimeSeries.Id);

                    var beginTimeStrList = GetTimeListByTimeRuleOrigin(beginTimeRule, beginTimeOrigin);
                    var beginTimeList = beginTimeStrList.ConvertAll(x => DateTime.Parse(x)).ToList();

                    var endTimeRule = GetTimeRuleDetail(endTimeSeries.Id);
                    var endTimeOrigin = GetTimeOriginDetail(endTimeSeries.Guid, endTimeSeries.Id);

                    var endTimeStrList = GetTimeListByTimeRuleOrigin(endTimeRule, endTimeOrigin);
                    var endTimeList = endTimeStrList.ConvertAll(x => DateTime.Parse(x)).ToList();

                    CommUtils.Assert(beginTimeList.Count == endTimeList.Count && endTimeList.Count != 0, "开始时间的数量[{0}]与截止时间的数量[{1}]不匹配,无法创建工作",
                                     beginTimeList.Count, endTimeList.Count);

                    //遍历beginTimeList跟endTimeList开始进行生成工作
                    GenerateTasks(metaTask, beginTimeList, endTimeList);
                }

                return ActionUtils.Success("");
            }));
        }
예제 #20
0
        public ActionResult ResetUserPassword(string userName, string password, string repeatPassword)
        {
            var user = UserService.GetUserByName(userName);

            CommUtils.AssertEquals(repeatPassword, password, "两次输入密码不一致");
            CommUtils.Assert(password.Length >= 6, "密码最小长度为六位");
            CommUtils.Assert(user != null, "用户[{0}]不存在", userName);
            UserService.SetPasswordHashAsync(user, new PasswordHasher().HashPassword(password));
            return(Json(new JsonResultDataEntity <string>()
            {
                Code = 0
            }));
        }
예제 #21
0
        private Dictionary <string, string> ParseKeyValue(string triggerOption)
        {
            var dict = new Dictionary <string, string>();
            var triggerOptionItems = CommUtils.Split(triggerOption);

            foreach (var trigger in triggerOptionItems)
            {
                var keyValue = CommUtils.Split(trigger, new[] { "^" });
                CommUtils.AssertEquals(keyValue.Length, 2, "解析keyValue[{0}]失败", triggerOption);
                dict[keyValue[0]] = keyValue[1];
            }
            return(dict);
        }
예제 #22
0
        public ActionResult GetMetaTask(string projectGuid, string metaTaskGuid)
        {
            return(ActionUtils.Json(() =>
            {
                var project = m_dbAdapter.Project.GetProjectByGuid(projectGuid);

                var metaTask = m_dbAdapter.MetaTask.GetByGuid(metaTaskGuid);

                var prevMetaTaskIds = CommUtils.Split(metaTask.PreMetaTaskIds).Select(x => int.Parse(x));
                CommUtils.AssertEquals(project.ProjectId, metaTask.ProjectId, "当前产品下的id[{0}]与工作[{1}]的guid[{2}]不一致", project.ProjectId, metaTask.Name, metaTask.ProjectId);

                var prevMetaTasks = m_dbAdapter.MetaTask.GetByIds(prevMetaTaskIds);
                var dictPrevMetaTask = prevMetaTasks.ToDictionary(x => x.Id.ToString());

                var beginTimeSeries = metaTask.StartTimeSeriesId.HasValue && metaTask.StartTimeSeriesId.Value != 0
                    ? m_dbAdapter.TimeSeries.GetById(metaTask.StartTimeSeriesId.Value) : null;
                var endTimeSeries = m_dbAdapter.TimeSeries.GetById(metaTask.EndTimeSeriesId);

                var result = new
                {
                    metaTaskName = metaTask.Name,
                    metaTaskGuid = metaTask.Guid,
                    projectGuid = project.ProjectGuid,
                    beginTimeGuid = beginTimeSeries == null ? null : beginTimeSeries.Guid,
                    endTimeGuid = endTimeSeries.Guid,
                    beginTime = beginTimeSeries == null ? null : new
                    {
                        beginTimeRules = GetTimeRuleDetail(beginTimeSeries.Id),
                        beginTimeOrigin = GetTimeOriginDetail(beginTimeSeries.Guid, beginTimeSeries.Id)
                    },
                    endTime = new
                    {
                        endTimeRules = GetTimeRuleDetail(endTimeSeries.Id),
                        endTimeOrigin = GetTimeOriginDetail(endTimeSeries.Guid, endTimeSeries.Id)
                    },
                    prevMetaTask = prevMetaTasks.ConvertAll(x => new
                    {
                        prevMetataskName = x.Name,
                        prevMetaTaskGuid = x.Guid
                    }),
                    taskExtensionType = metaTask.TaskExtensionType.ToString(),
                    detail = metaTask.Detail,
                    target = metaTask.Target,
                    createUserName = metaTask.CreateUserName,
                    createTime = metaTask.CreateTime.ToString("yyyy-MM-dd"),
                    lastModifyTime = metaTask.LastModifyTime.ToString("yyyy-MM-dd"),
                    lastModifyUserName = metaTask.LastModifyUserName,
                };
                return ActionUtils.Success(result);
            }));
        }
예제 #23
0
        public ActionResult UploadTemplateTimeFile(string templateGuid)
        {
            return(ActionUtils.Json(() =>
            {
                CommUtils.Assert(Request.Files.Count > 0, "请选择文件");

                var file = Request.Files[0];
                CommUtils.Assert(file.ContentLength > 0, "请选择文件");

                CommUtils.Assert(file.FileName.EndsWith(".xlsx", StringComparison.CurrentCultureIgnoreCase),
                                 "只支持导入Excel(.xlsx)文件");

                file.InputStream.Seek(0, SeekOrigin.Begin);

                var table = ExcelUtils.ParseExcel(file.InputStream, 0, 1, 0, 9);
                CommUtils.Assert(table.Count > 0, "模板时间为空");

                var template = m_dbAdapter.Template.GetTemplate(templateGuid);
                var templateNames = table.Select(x => x[0].ToString()).ToList();
                var index = templateNames.FindIndex(x => x != template.TemplateName);
                if (index >= 0)
                {
                    CommUtils.Assert(false, "模板时间中包含[{0}]的模板名称,和当前模板[{1}]不一致", templateNames[index], template.TemplateName);
                }

                //判断excel数据格式并序列化
                List <TemplateTime> templateTimeList = ParseTemplateTimeTable(table);
                templateTimeList.ForEach(x => x.TemplateId = template.TemplateId);

                //数据库里所有的时间名称
                var dbNames = m_dbAdapter.Template.GetTemplateTimeNames(template.TemplateId)
                              .ConvertAll(x => x.TemplateTimeName);

                //excel里的所有时间名称
                var excelNames = table.ConvertAll(x => (string)x[1]);

                CommUtils.AssertEquals(excelNames.Count, excelNames.Distinct().Count(), "模板时间中包含重复的模板时间名称");

                var names = excelNames.Intersect(dbNames).ToList();
                CommUtils.Assert(names.Count == 0, "模板时间名称({0})已存在,请查证后在上传", CommUtils.Join(names));

                var templateTimeIds = templateTimeList.ConvertAll(x => m_dbAdapter.Template.NewTemplateTime(x).TemplateTimeId);
                var newTimeIds = CommUtils.Join(templateTimeIds.ConvertAll(x => x.ToString()));
                LogEditProduct(EditProductType.EditTask, null,
                               "从Excel导入时间模板", "共导入[" + templateTimeList.Count + "]条时间模板,templateId=[" +
                               template.TemplateId + "],新增templateTimeId=[" + newTimeIds + "]");

                CommUtils.AssertEquals(templateTimeIds.Count, templateTimeList.Count, "上传模板失败,模板数据有误");
                return ActionUtils.Success(templateTimeList.Count);
            }));
        }
        public void Confirm(double currentAccountBalance, double paymentMoney)
        {
            var task = this.Task;

            m_dbAdapter.Task.CheckPrevIsFinished(Task);

            CommUtils.Assert(task.TaskExtensionId.HasValue, "ConfirmRecyclingPaymentDate失败,Task不包含扩展信息。");

            var taskExtension = m_dbAdapter.Task.GetTaskExtension(task.TaskExtensionId.Value);

            CommUtils.AssertEquals(taskExtension.TaskExtensionType, TaskExtensionType.RecyclingPaymentDate.ToString(),
                                   "ConfirmRecyclingPaymentDate失败,TaskExtensionType错误。");

            var bankAccounts = m_dbAdapter.BankAccount.GetAccounts(task.ProjectId, true);

            var taskExInfo  = RecyclingPaymentDate.FromJson(Task.TaskExtension.TaskExtensionInfo);
            var compareSign = CommUtils.ParseEnum <SignComparisonModes>(taskExInfo.CompareSign);
            var acountType  = CommUtils.ParseEnum <EAccountType>(taskExInfo.AccountType);

            if (compareSign != SignComparisonModes.NotCompare)
            {
                var bankCount = bankAccounts.Count(x => x.AccountType == acountType);
                CommUtils.Assert(bankCount < 2, "[{0}]不唯一", acountType.ToString());
                CommUtils.Assert(bankCount > 0, "未配置[{0}],请在[存续期设置]>[账户配置]中增加[{0}]。", acountType.ToString());
                var accountBalance = bankAccounts.Where(x => x.AccountType == acountType && x.CurrentBalance != null)
                                     .Sum(x => x.CurrentBalance.EndBalance);

                CommUtils.AssertEquals((decimal)currentAccountBalance, accountBalance,
                                       "当前账户余额已更新,请刷新网页后再试");
            }

            var compareResult = CompareAccount(currentAccountBalance, paymentMoney, compareSign, acountType);

            CommUtils.Assert(compareResult.IsPassed, compareResult.ErrorDetail);

            taskExInfo.PaymentMoney            = (decimal)paymentMoney;
            taskExInfo.ConfirmedAccountBalance = (decimal)currentAccountBalance;

            var json = CommUtils.ToJson(taskExInfo);

            taskExtension.TaskExtensionInfo       = json;
            taskExtension.TaskExtensionStatus     = TaskExtensionStatus.Finished;
            taskExtension.TaskExtensionHandler    = m_userName;
            taskExtension.TaskExtensionHandleTime = DateTime.Now;
            m_dbAdapter.Task.SaveTaskExtension(taskExtension);

            var logicModel = new ProjectLogicModel(m_userName, task.ProjectId);

            new TaskLogicModel(logicModel, task).Start();
        }
예제 #25
0
        public void ModifyPassword(string oldPassword, string password, string repeatPassword)
        {
            CommUtils.Assert(oldPassword.Length >= 6, "原密码格式错误,密码最小长度为六位");
            CommUtils.AssertEquals(repeatPassword, password, "两次输入密码不一致");
            CommUtils.Assert(password.Length >= 6, "新密码最小长度为六位");
            var user = UserService.GetUserById(CurrentUserId);

            CommUtils.Assert(user != null, "用户[{0}]信息错误,无法修改密码", CurrentUser.UserName);
            var result = SignInManager.PasswordSignInAsync(user.UserName, oldPassword, true, false).Result;

            CommUtils.Assert(result != SignInStatus.Success || result != SignInStatus.LockedOut,
                             "输入用户名和密码不匹配,如遗忘密码,请联系管理员进行密码重置");
            UserService.SetPasswordHashAsync(CurrentUser, password);
        }
예제 #26
0
        public ActionResult DeleteIssue(string projectGuid, string issueGuid)
        {
            return(ActionUtils.Json(() =>
            {
                CheckPermission(PermissionObjectType.Project, projectGuid, PermissionType.Read);
                var project = m_dbAdapter.Project.GetProjectByGuid(projectGuid);
                var issue = m_dbAdapter.Issue.GetIssueByIssueGuid(issueGuid);
                CommUtils.Assert(IsCurrentUser(issue.CreateUserName), "当前用户[{0}]不是问题[{1}]的提出者,无法删除该问题", CurrentUserName, issue.IssueName);
                CommUtils.AssertEquals(issue.ProjectId, project.ProjectId, "追加的问题[{0}]和当前项目[{1}]不属于同一个项目,请刷新页面后重试", issue.IssueName, project.Name);

                m_dbAdapter.Issue.DeleteIssue(issue);

                return ActionUtils.Success("");
            }));
        }
예제 #27
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);
            }));
        }
예제 #28
0
        public ActionResult ModifyPassword(string oldPassword, string password, string repeatPassword)
        {
            return(ActionUtils.Json(() =>
            {
                var user = UserService.GetUserByName(CurrentUserName);

                CommUtils.Assert(oldPassword.Length >= 6, "原密码格式错误,密码最小长度为六位");
                CommUtils.AssertEquals(repeatPassword, password, "两次输入密码不一致");
                CommUtils.Assert(password.Length >= 6, "新密码最小长度为六位");
                CommUtils.Assert(user != null, "用户[{0}]不存在", CurrentUserName);
                var result = SignInManager.PasswordSignInAsync(user.UserName, password, true, false).Result;
                CommUtils.Assert(result != SignInStatus.Success || result != SignInStatus.LockedOut,
                                 "输入用户名和密码不匹配,如遗忘密码,请联系管理员进行密码重置");
                UserService.SetPasswordHashAsync(CurrentUser, password);
                return ActionUtils.Success(1);
            }));
        }
예제 #29
0
 public ActionResult EstimateTemplateTime(string templateGuid, string templateTimeName)
 {
     return(ActionUtils.Json(() =>
     {
         var template = m_dbAdapter.Template.GetTemplate(templateGuid);
         var templateTimes = m_dbAdapter.Template.GetTemplateTimeLists(template.TemplateId);
         CommUtils.AssertEquals(templateTimes.Count(x => x.TemplateTimeName == templateTimeName), 1,
                                "模板中有多个名称为[{0}]的模板时间", templateTimeName);
         var templateTime = templateTimes.Single(x => x.TemplateTimeName == templateTimeName);
         bool isForward = templateTime.SearchDirection == TemplateTimeSearchDirection.Forward;
         bool ignoreReduplicateDays = templateTime.HandleReduplicate == TemplateTimeHandleReduplicate.Ignore;
         var dateList = DateUtils.GenerateDateList(templateTime.BeginTime, templateTime.EndTime,
                                                   templateTime.TimeSpan, templateTime.TimeSpanUnit, templateTime.TemplateTimeType, isForward, ignoreReduplicateDays);
         var result = dateList.ConvertAll(x => x.ToString("yyyy-MM-dd"));
         return ActionUtils.Success(result);
     }));
 }
예제 #30
0
        public ActionResult GetProjects(string projectType)
        {
            return(ActionUtils.Json(() =>
            {
                //TODO:
                CommUtils.AssertEquals(projectType, "存续期", "目前仅支持获取存续期产品列表");

                var projectIds = m_dbAdapter.Authority.GetAuthorizedProjectIds();
                var projects = m_dbAdapter.Project.GetProjects(projectIds);
                var result = projects.ConvertAll(x => new
                {
                    name = x.Name,
                    guid = x.ProjectGuid
                });

                return ActionUtils.Success(result);
            }));
        }