예제 #1
0
        public async Task <List <Announcement> > GetAllForVipOwnerAsync(AnnouncementDto dto, CancellationToken token = default)
        {
            using (var db = new GuoGuoCommunityContext())
            {
                if (!Guid.TryParse(dto.OwnerCertificationId, out var ownerCertificationId))
                {
                    throw new NotImplementedException("业主认证Id不正确!");
                }
                var ownerCertificationRecord = await db.OwnerCertificationRecords.Include(x => x.Industry.BuildingUnit.Building.SmallDistrict.Community.StreetOffice).Where(x => x.Id == ownerCertificationId && x.IsDeleted == false).FirstOrDefaultAsync(token);

                if (ownerCertificationRecord == null)
                {
                    throw new NotImplementedException("业主认证信息不存在!");
                }
                var list = await db.Announcements.Where(x => x.IsDeleted == false && x.DepartmentValue == dto.DepartmentValue).ToListAsync(token);

                if (!string.IsNullOrWhiteSpace(dto.Title))
                {
                    list = list.Where(x => x.Title.Contains(dto.Title)).ToList();
                }

                list = list.Where(x => x.SmallDistrictArray == ownerCertificationRecord.Industry.BuildingUnit.Building.SmallDistrictId.ToString()).ToList();

                return(list);
            }
        }
예제 #2
0
        public IActionResult GetAccouncementById(Guid id)
        {
            var announcement    = GetAnnouncement(id);
            var announcementDto = new AnnouncementDto(announcement);

            return(Json(announcementDto));
        }
예제 #3
0
        public async Task <Announcement> AddAsync(AnnouncementDto dto, CancellationToken token = default)
        {
            using (var db = new GuoGuoCommunityContext())
            {
                var entity = db.Announcements.Add(new Announcement
                {
                    Content            = dto.Content,
                    SmallDistrictArray = dto.SmallDistrictArray,
                    DepartmentName     = dto.DepartmentName,
                    DepartmentValue    = dto.DepartmentValue,
                    Summary            = dto.Summary,
                    Title = dto.Title,
                    CreateOperationTime   = dto.OperationTime,
                    CreateOperationUserId = dto.OperationUserId,
                    LastOperationTime     = dto.OperationTime,
                    LastOperationUserId   = dto.OperationUserId,
                    CommunityId           = dto.CommunityId,
                    CommunityName         = dto.CommunityName,
                    SmallDistrictId       = dto.SmallDistrictId,
                    SmallDistrictName     = dto.SmallDistrictName,
                    StreetOfficeId        = dto.StreetOfficeId,
                    StreetOfficeName      = dto.StreetOfficeName
                });
                await db.SaveChangesAsync(token);

                return(entity);
            }
        }
        public async Task <IActionResult> CreateAnnouncement(AnnouncementDto announcement, IFormFile file)
        {
            try
            {
                await announcementService.CreateAnnouncementAsync(announcement, file).ConfigureAwait(false);

                return(Ok(announcement));
            }
            catch (InvalidFileExtensionException ex)
            {
                log.Error($"Ocurrió un error al crear el comunicado: {ex.Message}");
                return(StatusCode(HttpStatusCode.UnsupportedMediaType.GetHashCode(), ex.Message));
            }
            catch (InvalidFileSizeException ex)
            {
                log.Error($"Ocurrió un error al crear el comunicado: {ex.Message}");
                return(StatusCode(HttpStatusCode.BadRequest.GetHashCode(), ex.Message));
            }
            catch (InvalidFileDimensionException ex)
            {
                log.Error($"Ocurrió un error al crear el comunicado: {ex.Message}");
                return(StatusCode(HttpStatusCode.BadRequest.GetHashCode(), ex.Message));
            }
            catch (Exception ex)
            {
                log.Error($"Ocurrió un error al crear el comunicado: {ex.Message}");
                return(StatusCode(HttpStatusCode.InternalServerError.GetHashCode(), ex.Message));
            }
        }
예제 #5
0
        public async Task <IHttpActionResult> PutAnnouncement(int id, AnnouncementDto announcementDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != announcementDto.ID)
            {
                return(BadRequest());
            }
            var announcement = DtoToEntityIMapper.Map <AnnouncementDto, Announcement>(announcementDto); ////

            UoW.GetRepository <Announcement>().ModifyEntityState(announcement);

            try
            {
                await UoW.SaveAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!AnnouncementExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
        public async Task AddAnnouncementAsync(AnnouncementDto announcementDto)
        {
            var mapper = new MapperConfiguration(cfg => cfg.CreateMap <AnnouncementDto, AnnouncementEntity>()).CreateMapper();

            var announcement = mapper.Map <AnnouncementDto, AnnouncementEntity>(announcementDto);

            _unitOfWork.Repository <AnnouncementEntity>().Add(announcement);
            await _unitOfWork.SaveChangesAsync();
        }
예제 #7
0
        public static void PushToUser(string who, AnnouncementDto message, PlanetHub hub)
        {
            IHubConnectionContext <dynamic> clients = GetClients(hub);

            foreach (var connectionId in _connections.GetConnections(who))
            {
                clients.Client(connectionId).addChatMessage(message);
            }
        }
        public void Init()
        {
            announcementRepository = Substitute.For <IAnnouncementRepository>();
            var mapper = new MapperConfiguration(x => x.AddProfile(new MappingProfile())).CreateMapper();

            log                  = Substitute.For <ILog>();
            config               = Substitute.For <IConfigProvider>();
            blobStorageService   = Substitute.For <IBlobStorageService>();
            fileProcesingService = Substitute.For <IFileProcesingService>();
            announcementService  = new AnnouncementService(announcementRepository, blobStorageService, fileProcesingService, config, mapper, log);
            file                 = Substitute.For <IFormFile>();

            var content          = "pruebaimagen";
            var fileName         = "test.png";
            var memoryStreamFile = new MemoryStream();
            var writer           = new StreamWriter(memoryStreamFile);

            writer.Write(content);
            writer.Flush();
            memoryStreamFile.Position = 0;

            file.OpenReadStream().Returns(memoryStreamFile);
            file.FileName.Returns(fileName);

            announcementDto = new AnnouncementDto
            {
                IdAnnouncement          = 0,
                Description             = "Auncio prueba",
                DescriptionCallToAction = "",
                ImageId           = "",
                Order             = 0,
                State             = true,
                ThumbnailImageId  = "",
                Title             = "Auncio prueba",
                UrlCallToAction   = "",
                UrlImage          = "",
                UrlThumbnailImage = ""
            };

            announcement = new Announcement
            {
                IdAnnouncement          = 0,
                Description             = "Auncio prueba",
                DescriptionCallToAction = "",
                ImageId           = "",
                Order             = 0,
                State             = true,
                ThumbnailImageId  = "",
                Title             = "Auncio prueba",
                UrlCallToAction   = "",
                UrlImage          = "",
                UrlThumbnailImage = ""
            };
        }
예제 #9
0
        public async Task <IHttpActionResult> PostAnnouncement(AnnouncementDto announcementDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var announcement = DtoToEntityIMapper.Map <AnnouncementDto, Announcement>(announcementDto); ////

            UoW.GetRepository <Announcement>().Insert(announcement);
            await UoW.SaveAsync();

            return(CreatedAtRoute("DefaultApi", new { id = announcement.ID }, announcement));
        }
예제 #10
0
        public Task <AnnouncementDto> GetAnnouncementById(Guid id)
        {
            var query = _announcementRepository.FirstOrDefault(t => t.Id == id);

            if (query == null)
            {
                throw new UserFriendlyException("该公告不存在!");
            }

            var output = new AnnouncementDto();

            return(Task.FromResult(ObjectMapper.Map(query, output)));
        }
예제 #11
0
        public static void PushToUsers(string[] whos, AnnouncementDto message, PlanetHub hub)
        {
            IHubConnectionContext <dynamic> clients = GetClients(hub);

            for (int i = 0; i < whos.Length; i++)
            {
                var who = whos[i];
                foreach (var connectionId in _connections.GetConnections(who))
                {
                    clients.Client(connectionId).addChatMessage(message);
                }
            }
        }
예제 #12
0
 public async Task SendMessageToClient(AnnouncementDto message, string userReceiveMessage)
 {
     try
     {
         await _chatMobileHubContext.Clients.User(userReceiveMessage)
         .SendAsync("ReceiveMessage", message);
     }
     catch (Exception ex)
     {
         Logger.Warn("Internal Server Error");
         Logger.Warn("Could not send chat message to user");
         Logger.Warn(ex.ToString(), ex);
     }
 }
예제 #13
0
        public async Task <ActionResult <AnnouncementDto> > PostAnnouncement([FromBody] AnnouncementDto announcementDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            Announcement announcement = DtoToEntityIMapper.Map <AnnouncementDto, Announcement>(announcementDto);

            repository.Add(announcement);
            await uoW.SaveAsync();

            return(CreatedAtAction("GetAnnouncement", new { id = announcement.ID }, announcementDto));
        }
예제 #14
0
        public async Task <List <Announcement> > GetListPropertyAsync(AnnouncementDto dto, CancellationToken token = default)
        {
            using (var db = new GuoGuoCommunityContext())
            {
                var list = await db.Announcements.Where(x => x.IsDeleted == false && x.DepartmentValue == dto.DepartmentValue).ToListAsync(token);

                if (!string.IsNullOrWhiteSpace(dto.Title))
                {
                    list = list.Where(x => x.Title.Contains(dto.Title)).ToList();
                }
                list = list.Where(x => x.CreateOperationTime >= dto.StartTime && x.CreateOperationTime <= dto.EndTime).ToList();
                return(list.Where(x => x.SmallDistrictId == dto.SmallDistrictId).ToList());
            }
        }
예제 #15
0
        public async Task <AnnouncementDto> GetByIdAsync(Guid id)
        {
            var announcement = await _context.Announcements.FirstOrDefaultAsync(a => a.Id == id);

            var filteredAnnouncement = new AnnouncementDto
            {
                Id        = announcement.Id,
                Subject   = announcement.Subject,
                Type      = announcement.Type,
                CreatedAt = announcement.CreatedAt,
                UserName  = announcement.Author.UserName
            };

            return(filteredAnnouncement);
        }
예제 #16
0
        public async Task UpdateAnnouncementAsync(int id, AnnouncementDto announcementDto)
        {
            var announcement = await _unitOfWork.Repository <AnnouncementEntity>().Get(p => p.Id == id);

            if (announcement == null)
            {
                throw new ArgumentNullException(
                          $"Error while updating Announcement. Announcement with id {nameof(id)}={id} not found");
            }

            announcement.Title       = announcementDto.Title;
            announcement.Description = announcementDto.Description;

            _unitOfWork.Repository <AnnouncementEntity>().Update(announcement);
            await _unitOfWork.SaveChangesAsync();
        }
예제 #17
0
        public async Task <ActionResult <AnnouncementDto> > GetAnnouncement([FromRoute] int id)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var announcement = await repository.GetAsync(a => a.ID == id);

            if (announcement == null)
            {
                return(NotFound());
            }

            AnnouncementDto announcementDto = EntityToDtoIMapper.Map <Announcement, AnnouncementDto>(announcement);

            return(Ok(announcementDto));
        }
예제 #18
0
 public async Task SendMessage(AnnouncementDto message)
 {
     try
     {
         await Clients.All.SendAsync("ReceiveMessage", AbpSession.UserId, message);
     }
     catch (UserFriendlyException ex)
     {
         Logger.Warn("Could not send chat message to user");
         Logger.Warn(ex.ToString(), ex);
     }
     catch (Exception ex)
     {
         Logger.Warn("Internal Server Error");
         Logger.Warn("Could not send chat message to user");
         Logger.Warn(ex.ToString(), ex);
     }
 }
예제 #19
0
        private async Task RunAnnounceLoopAsync()
        {
            await TaskEx.YieldToThreadPool();

            var announce = new AnnouncementDto {
                Identity = identity
            };

            while (!shutdownCancellationToken.IsCancellationRequested)
            {
                try {
                    await payloadSender.BroadcastAsync(announce).ConfigureAwait(false);

                    await Task.Delay(kAnnounceIntervalMillis, shutdownCancellationToken).ConfigureAwait(false);
                } catch (OperationCanceledException) {
                    // shutdown cancellation token cancelled
                }
            }
        }
예제 #20
0
        public async Task <IActionResult> PutAnnouncement([FromRoute] int number, [FromBody] AnnouncementDto announcementDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (number != announcementDto.Number)
            {
                return(BadRequest());
            }

            var result = await _repositoryAnnouncement.GetList();

            var list = result.ToList();

            try
            {
                var annTmp = list.FirstOrDefault(x => x.Number == number);
                if (annTmp == null)
                {
                    return(NotFound());
                }
                annTmp.Text             = announcementDto.Text;
                annTmp.CreationDateTime = DateTime.Now;
                annTmp.Rate             = 1;
                await _repositoryAnnouncement.Update(annTmp);

                _repositoryAnnouncement.Save();
                return(Ok(announcementDto));
            }
            catch (DbUpdateConcurrencyException)
            {
                if (list.Any(x => x.Number == number))
                {
                    return(NotFound());
                }
                else
                {
                    return(NoContent());
                }
            }
        }
예제 #21
0
        public async Task <IActionResult> CreateAnnouncement([FromBody] AnnouncementDto announcementDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            var announcement = Mapper.Map <AnnouncementDto, Announcement>(announcementDto);

            announcement.Timestamp = DateTime.Now.ToString();
            _context.Announcements.Add(announcement);
            await _context.SaveChangesAsync();

            announcement = await _context.Announcements.FindAsync(announcement.Id);

            var result = Mapper.Map <Announcement, AnnouncementDto>(announcement);

            var body = new
            {
                notification = new
                {
                    body  = $"New Announcement: {announcement.caption}",
                    title = $"{announcement.DisplayName}"
                },
                priority = "high",
                data     = new
                {
                    clickaction = "FLUTTERNOTIFICATIONCLICK",
                    id          = "1",
                    status      = "done"
                },
                to = "/topics/all"
            };

            ClientFireBase.DefaultRequestHeaders.Authorization =
                new AuthenticationHeaderValue("key", "=AAAAV02ojhg:APA91bGng1U47tjWoEhKszz5FqOqxwSMGDy8XB5ILjWaKdpcdUBTxi4hHjbX_mV6UbVFsm4zr-CoA0Hzx0i2763ADlNnU5XuX578ObGjo1CEXlWvjlISev3_9Cpgtg_tNOBtqe6hhsqT");
            var response = await ClientFireBase.PostAsync("fcm/send", new StringContent(
                                                              JsonConvert.SerializeObject(body),
                                                              Encoding.UTF8, "application/json"));

            var retFireBase = await response.Content.ReadAsStringAsync();

            return(Ok(result));
        }
예제 #22
0
        public async Task <Announcement> AddVipOwnerAsync(AnnouncementDto dto, CancellationToken token = default)
        {
            using (var db = new GuoGuoCommunityContext())
            {
                if (!Guid.TryParse(dto.OwnerCertificationId, out var ownerCertificationId))
                {
                    throw new NotImplementedException("业主认证Id不正确!");
                }
                var ownerCertificationRecord = await db.OwnerCertificationRecords.Include(x => x.Industry.BuildingUnit.Building.SmallDistrict.Community.StreetOffice).Where(x => x.Id == ownerCertificationId && x.IsDeleted == false).FirstOrDefaultAsync(token);

                if (ownerCertificationRecord == null)
                {
                    throw new NotImplementedException("业主认证信息不存在!");
                }

                var entity = db.Announcements.Add(new Announcement
                {
                    Content            = dto.Content,
                    SmallDistrictArray = ownerCertificationRecord.Industry.BuildingUnit.Building.SmallDistrictId.ToString(),
                    DepartmentName     = dto.DepartmentName,
                    DepartmentValue    = dto.DepartmentValue,
                    Summary            = dto.Summary,
                    Title = dto.Title,
                    CreateOperationTime   = dto.OperationTime,
                    CreateOperationUserId = dto.OperationUserId,
                    LastOperationTime     = dto.OperationTime,
                    LastOperationUserId   = dto.OperationUserId,
                    CommunityId           = ownerCertificationRecord.Industry.BuildingUnit.Building.SmallDistrict.CommunityId.ToString(),
                    CommunityName         = ownerCertificationRecord.Industry.BuildingUnit.Building.SmallDistrict.Community.Name,
                    SmallDistrictId       = ownerCertificationRecord.Industry.BuildingUnit.Building.SmallDistrictId.ToString(),
                    SmallDistrictName     = ownerCertificationRecord.Industry.BuildingUnit.Building.SmallDistrict.Name,
                    StreetOfficeId        = ownerCertificationRecord.Industry.BuildingUnit.Building.SmallDistrict.Community.StreetOfficeId.ToString(),
                    StreetOfficeName      = ownerCertificationRecord.Industry.BuildingUnit.Building.SmallDistrict.Community.StreetOffice.Name,
                    OwnerCertificationId  = dto.OwnerCertificationId
                });
                await db.SaveChangesAsync(token);

                return(entity);
            }
        }
예제 #23
0
        public async Task DeleteAsync(AnnouncementDto dto, CancellationToken token = default)
        {
            using (var db = new GuoGuoCommunityContext())
            {
                if (!Guid.TryParse(dto.Id, out var uid))
                {
                    throw new NotImplementedException("公告信息不正确!");
                }
                var announcement = await db.Announcements.Where(x => x.Id == uid && x.IsDeleted == false).FirstOrDefaultAsync(token);

                if (announcement == null)
                {
                    throw new NotImplementedException("该公告不存在!");
                }

                announcement.LastOperationTime   = dto.OperationTime;
                announcement.LastOperationUserId = dto.OperationUserId;
                announcement.DeletedTime         = dto.OperationTime;
                announcement.IsDeleted           = true;
                await db.SaveChangesAsync(token);
            }
        }
예제 #24
0
        public async Task <IActionResult> PostAnnouncement([FromBody] AnnouncementDto announcement)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var result = await _repositoryUser.GetList();

            var enumerable = result.ToList();

            if (!(enumerable.Count() < _maxCountAnnouncement))
            {
                return(CreatedAtAction("GetAnnouncement", new { number = announcement.Number },
                                       "Превышен лимит количества объявлений в ситсеме"));
            }
            var user = enumerable.FirstOrDefault(x => x.Name == announcement.UserName);

            if (user == null)
            {
                user = new User()
                {
                    Name = announcement.UserName, UserId = new Guid()
                };
                await _repositoryUser.Create(user);
            }
            Announcement annTmp = new Announcement()
            {
                AnnouncementId = new Guid(), CreationDateTime = DateTime.Now,
                Number         = enumerable.Count() + 1,
                Rate           = 1,
                Text           = announcement.Text,
                User           = user
            };
            await _repositoryAnnouncement.Create(annTmp);

            _repositoryAnnouncement.Save();

            return(CreatedAtAction("GetAnnouncement", new { number = announcement.Number }, announcement));
        }
예제 #25
0
        public IHttpActionResult Create(AnnouncementDto announcement)
        {
            return(CreateResponse(() =>
            {
                if (!ModelState.IsValid)
                {
                    return BadRequest(ModelState);
                }

                announcement.DateCreated = DateTime.Now;

                var model = Mapper.Map <Announcement>(announcement);
                _announcementService.Add(model);

                UnitOfWork.Commit();

                announcement.Id = model.Id;

                PlanetHub.PushToAllUsers(announcement, null);

                return Created(new Uri(Request.RequestUri + "/" + announcement.Id), announcement);
            }));
        }
예제 #26
0
 public IEnumerable <Announcement> SaveAnnouncement(AnnouncementDto obj)
 {
     if (obj.ChpaterId.Count > 0)
     {
         foreach (var item in obj.ChpaterId)
         {
             _context.Announcement.Add(new Announcement
             {
                 PlainText    = obj.PlainText,
                 Text         = obj.Text,
                 ChpaterId    = item.ChapterId,
                 CreatedBy    = obj.CreatedBy,
                 StartDate    = obj.StartDate,
                 EndDate      = obj.EndDate,
                 ModifiedBy   = obj.ModifiedBy,
                 ModifiedDate = new DateTime().ToString()
             });
             _context.SaveChanges();
         }
     }
     else
     {
         _context.Announcement.Add(new Announcement
         {
             PlainText    = obj.PlainText,
             Text         = obj.Text,
             CreatedBy    = obj.CreatedBy,
             StartDate    = obj.StartDate,
             EndDate      = obj.EndDate,
             ModifiedBy   = obj.ModifiedBy,
             ModifiedDate = new DateTime().ToString()
         });
         _context.SaveChanges();
     }
     return(_context.Announcement.ToList());
 }
예제 #27
0
        private void HandleAnnouncement(UdpClientRemoteInfo remoteInfo, AnnouncementDto x)
        {
            announcementsReceivedCounter.Increment();

            var            peerIdentity           = x.Identity;
            var            peerId                 = peerIdentity.Id;
            bool           isNewlyDiscoveredRoute = false;
            RoutingContext addedRoutingContext    = null;
            UdpUnicaster   addedUnicaster         = null;
            var            routingContext         = routingContextsByPeerId.GetOrAdd(
                peerId,
                add => {
                isNewlyDiscoveredRoute = true;
                var unicastReceivePort = int.Parse((string)x.Identity.Properties[UdpConstants.kUnicastPortIdentityPropertyKey]);
                var unicastIpAddress   = remoteInfo.IPEndpoint.Address;
                var unicastEndpoint    = new IPEndPoint(unicastIpAddress, unicastReceivePort);
                var unicastRemoteInfo  = new UdpClientRemoteInfo {
                    Socket     = remoteInfo.Socket,
                    IPEndpoint = unicastEndpoint
                };

                addedUnicaster = udpUnicasterFactory.Create(unicastRemoteInfo);
                return(addedRoutingContext = new RoutingContext(addedUnicaster));
            });

            if (addedRoutingContext == routingContext)
            {
                addedUnicaster.Initialize();
            }
            if (isNewlyDiscoveredRoute)
            {
                routingTable.Register(peerId, routingContext);
            }

            peerTable.GetOrAdd(peerId).HandleInboundPeerIdentityUpdate(peerIdentity);
        }
예제 #28
0
 public Task <List <Announcement> > GetListAsync(AnnouncementDto dto, CancellationToken token = default)
 {
     throw new NotImplementedException();
 }
예제 #29
0
 public Task UpdateAsync(AnnouncementDto dto, CancellationToken token = default)
 {
     throw new NotImplementedException();
 }
예제 #30
0
        public async Task <ActionResult <AnnouncementDto> > PutAnnouncement([FromRoute] int id, [FromBody] AnnouncementDto announcementDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != announcementDto.ID)
            {
                return(BadRequest());
            }

            Announcement announcement = DtoToEntityIMapper.Map <AnnouncementDto, Announcement>(announcementDto);

            repository.ModifyEntryState(announcement, EntityState.Modified);

            try
            {
                await uoW.SaveAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!AnnouncementExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }