示例#1
0
        public async Task <IActionResult> EditIssue([FromBody]  EditIssueFormModel issueForm)
        {
            var resp = await _issueService.EditIssueAsync(HttpContext.GetUser(), issueForm);

            return(Ok(GetRequestResult(resp)));
        }
        public async Task <bool> EditIssueAsync(User user, EditIssueFormModel issueForm)
        {
            try
            {
                var issue = await _context.Issues.FindAsync(issueForm.IssueId);

                if (issue is null)
                {
                    throw new ExperienceManagementGlobalException(IssueServiceErrors.IssueNotFoundError);
                }
                if (issue.AnswerCounts > 1)
                {
                    throw new ExperienceManagementGlobalException(IssueServiceErrors.IssueDetailsCountError);
                }
                FileAddress fileAddress;
                if (issueForm.ImageId != null)
                {
                    fileAddress = await _context.FileAddresses.FindAsync(issueForm.ImageId);

                    if (fileAddress == null)
                    {
                        throw new ExperienceManagementGlobalException(IssueServiceErrors.NotExistFileAddressError);
                    }
                    try
                    {
                        if (!File.Exists(fileAddress.FilePath))
                        {
                            throw new ExperienceManagementGlobalException(IssueServiceErrors.FileNotFoundError);
                        }
                        Image image   = Image.FromFile(fileAddress.FilePath);
                        Image thumb   = image.GetThumbnailImage(120, 120, () => false, IntPtr.Zero);
                        var   newPath = Path.ChangeExtension(fileAddress.FilePath, "thumb");
                        thumb.Save(newPath);
                        issue.FileId         = fileAddress.FileId;
                        fileAddress.FilePath = newPath;
                        fileAddress.FileType = "thumb";
                        _context.FileAddresses.Update(fileAddress);
                    }
                    catch (Exception ex)
                    {
                        throw new ExperienceManagementGlobalException(IssueServiceErrors.ChangeToThumbnailError, ex);
                    }
                }
                var IsExistEquipment = _context.Equipments.All(c => issueForm.EquipmentIds.Contains(c.Id));
                if (!IsExistEquipment)
                {
                    throw new ExperienceManagementGlobalException(IssueServiceErrors.NotExistEquipmentsListError);
                }
                var equipmentIssueSubscriptionsRemove = await _context.EquipmentIssueSubscriptions.Where(c => c.IssueId == issue.Id).ToListAsync();

                var oldequipmentIssueSubscription = equipmentIssueSubscriptionsRemove.Select(c => c.Id).ToList();

                IEnumerable <long> differencesFirst  = issueForm.EquipmentIds.Except(oldequipmentIssueSubscription).Union(oldequipmentIssueSubscription.Except(issueForm.EquipmentIds));
                IEnumerable <long> differencesSecond = issueForm.EquipmentIds.Union(oldequipmentIssueSubscription).Except(issueForm.EquipmentIds.Intersect(oldequipmentIssueSubscription));
                if (differencesFirst.Count() > 0 || differencesSecond.Count() > 0)
                {
                    _context.EquipmentIssueSubscriptions.RemoveRange(equipmentIssueSubscriptionsRemove);
                    issueForm.EquipmentIds.ForEach(async resp =>
                    {
                        var equipmentIssueSubscription         = new EquipmentIssueSubscription();
                        equipmentIssueSubscription.IssueId     = issue.Id;
                        equipmentIssueSubscription.EquipmentId = resp;
                        await _context.EquipmentIssueSubscriptions.AddAsync(equipmentIssueSubscription);
                    });
                }


                issue.IssueType      = (IssueType)issueForm.IssueType;
                issue.Title          = issueForm.Title;
                issue.Description    = issue.Description;
                issue.LastUpdateDate = DateTime.Now;
                _context.Issues.Update(issue);
                await _context.SaveChangesAsync();

                return(true);
            }
            catch (Exception ex)
            {
                throw new ExperienceManagementGlobalException(IssueServiceErrors.EditIssueError, ex);
            }
        }