@Override
  public void update(NoticeRequestDTO noticeDTO) throws OperationalException {
    LocalDateTime currentTime = LocalDateTime.now();
    Notice notice = findById(noticeDTO.getNoticeId());
    if (notice == null) {
      throw new OperationalException(
          HttpConstants.NOT_FOUND, ResponseConstants.INVALID_NOTICE_ID, HttpStatus.NOT_FOUND);
    }
    assertEnum(noticeDTO.getStatus(), NoticeStatus.class, ResponseConstants.INVALID_STATUS);
    loadNoticeDetails(noticeDTO, notice);

    User user;
    if (SecurityContextHolder.getContext().getAuthentication().getPrincipal() != null) {
      user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    } else {
      user = userDao.getActiveUserDetails(noticeDTO.getModifiedBy());
      if (user == null) {
        throw new OperationalException(
            HttpConstants.NOT_FOUND, ResponseConstants.INVALID_MODIFIED_BY, HttpStatus.NOT_FOUND);
      }
    }

    String status = noticeDTO.getStatus();
    if (!StringUtils.isBlank(status) && status.equals(NoticeStatus.ACTIVE.name())) {
      notice.setApprovedDate(currentTime);
      notice.setApprovedBy(user);
    }
    NoticeHistory history =
        new NoticeHistory(notice, notice.getStatus(), noticeDTO.getNotes(), currentTime, user);
    notice.getHistory().add(history);
    super.update(notice);
  }
 @Override
 public List<NoticeHistory> getHistory(String userId, LocalDate fromDateTemp, LocalDate toDateTemp)
     throws OperationalException {
   if (StringUtils.isBlank(userId) || "all".equalsIgnoreCase(userId)) {
     return super.findAll(NoticeHistory.class);
   } else {
     User user = userDao.getActiveUserDetails(userId);
     if (user == null) {
       throw new OperationalException(
           HttpConstants.BAD_REQUEST, ResponseConstants.INVALID_USER_ID, HttpStatus.BAD_REQUEST);
     }
     return super.findByCriteria(NoticeHistory.class, Restrictions.eq("lastModifiedBy", user));
   }
 }
  @Override
  public List<Notice> userList(String userId) throws OperationalException {
    assertNotBlank(userId, ResponseConstants.NULL_USER_ID);
    User user = userDao.getActiveUserDetails(userId);
    if (user == null) {
      throw new OperationalException(
          HttpConstants.NOT_FOUND, ResponseConstants.INVALID_USER_ID, HttpStatus.NOT_FOUND);
    }
    try {
      List<Criterion> criteriaList = new ArrayList<>();
      criteriaList.add(Restrictions.eq("author", user));
      criteriaList.add(Restrictions.ne(STATUS, NoticeStatus.DELETED.name()));
      return super.findByCriteria(Notice.class, criteriaList, Order.desc(NOTICEID));

    } catch (Exception e) {
      LOGGER.error("userList: Exception ", e);
      throw new OperationalException(
          HttpConstants.INTERNAL_SERVER_ERROR,
          ResponseConstants.ERROR_FETCHING_FROM_DB,
          HttpStatus.INTERNAL_SERVER_ERROR);
    }
  }
  @Override
  public Notice add(NoticeRequestDTO noticeDTO) throws OperationalException {
    try {
      Notice notice = loadNoticeDetails(noticeDTO, null);
      LocalDateTime currentTime = LocalDateTime.now();
      notice.setCreationDate(currentTime);
      User user = userDao.getActiveUserDetails(noticeDTO.getAuthor());
      if (user == null) {
        throw new OperationalException(
            HttpConstants.NOT_FOUND, ResponseConstants.INVALID_AUTHOR, HttpStatus.NOT_FOUND);
      }
      notice.setAuthor(user);
      notice.setDongName(noticeDTO.getDongName());
      notice.setLotId(noticeDTO.getLotId());
      notice.setStatus(NoticeStatus.ACTIVE.name());
      notice.setApprovedDate(currentTime);
      notice.setApprovedBy(user);

      NoticeHistory history =
          new NoticeHistory(notice, notice.getStatus(), null, currentTime, user);
      notice.setHistory(new HashSet(Arrays.asList(history)));

      int id = super.save(notice);

      notice.setNoticeId(id);
      return notice;
    } catch (OperationalException e) {
      LOGGER.error("add: OperationalException ", e);
      throw new OperationalException(e.getHttpCode(), e.getMessage(), e.getHttpStatus());
    } catch (Exception e) {
      LOGGER.error("add: Exception ", e);
      throw new OperationalException(
          HttpConstants.INTERNAL_SERVER_ERROR,
          ResponseConstants.ERROR_FETCHING_FROM_DB,
          HttpStatus.INTERNAL_SERVER_ERROR);
    }
  }