/**
   * Q&A정보를 수정처리한다.
   *
   * @param searchVO
   * @param qnaManageVO
   * @param bindingResult
   * @return "forward:/uss/olh/qna/QnaListInqire.do"
   * @throws Exception
   */
  @RequestMapping("/uss/olh/qna/QnaCnUpdt.do")
  public String updateQnaCn(
      @ModelAttribute("searchVO") QnaManageDefaultVO searchVO,
      @ModelAttribute("qnaManageVO") QnaManageVO qnaManageVO,
      BindingResult bindingResult)
      throws Exception {

    // Validation
    beanValidator.validate(qnaManageVO, bindingResult);

    if (bindingResult.hasErrors()) {

      return "/uss/olh/qna/EgovQnaCnUpdt";
    }

    // 로그인VO에서  사용자 정보 가져오기
    LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();

    String lastUpdusrId = loginVO.getUniqId();

    qnaManageVO.setLastUpdusrId(lastUpdusrId); // 최종수정자ID

    // 작성비밀번호를 암호화 하기 위해서 Get
    String writngPassword = qnaManageVO.getWritngPassword();

    // EgovFileScrty Util에 있는 암호화 모듈을 적용해서 암호화 한다.
    qnaManageVO.setWritngPassword(EgovFileScrty.encode(writngPassword));

    qnaManageService.updateQnaCn(qnaManageVO);

    return "forward:/uss/olh/qna/QnaListInqire.do";
  }
  /**
   * 작성 비밀번호를 확인한다.
   *
   * @param qnaManageVO
   * @param searchVO
   * @return "forward:/uss/olh/qna/QnaDetailInqire.do"
   * @throws Exception
   */
  @RequestMapping("/uss/olh/qna/QnaPasswordConfirm.do")
  public String selectPasswordConfirm(
      QnaManageVO qnaManageVO, @ModelAttribute("searchVO") QnaManageDefaultVO searchVO, Model model)
      throws Exception {

    // 작성비밀번호를 암호화 하기 위해서 Get
    String writngPassword = qnaManageVO.getWritngPassword();

    // EgovFileScrty Util에 있는 암호화 모듈을 적용해서 암호화 한다.
    qnaManageVO.setWritngPassword(EgovFileScrty.encode(writngPassword));

    int searchCnt = qnaManageService.selectQnaPasswordConfirmCnt(qnaManageVO);

    if (searchCnt > 0) { // 작성 비밀번호가 일치하는 경우

      // Q&A를 수정할 수 있는 화면으로 이동.
      return "forward:/uss/olh/qna/QnaCnUpdtView.do";

    } else { // 작성비밀번호가 틀린경우

      // 작성비밀번호 확인 결과 세팅.
      // qnaManageVO.setPasswordConfirmAt("N");

      String passwordConfirmAt = "N";

      // model.addAttribute("QnaManageVO", qnaManageVO);

      // Q&A 상세조회 화면으로 이동.
      return "forward:/uss/olh/qna/QnaDetailInqire.do?passwordConfirmAt=" + passwordConfirmAt;
    }
  }
  /**
   * Q&A정보를 등록하기 위한 전 처리(인증체크)
   *
   * @param searchVO
   * @param qnaManageVO
   * @param model
   * @return "/uss/olh/qna/EgovQnaCnRegist"
   * @throws Exception
   */
  @RequestMapping("/uss/olh/qna/QnaCnRegistView.do")
  public String insertQnaCnView(
      @ModelAttribute("searchVO") QnaManageDefaultVO searchVO, QnaManageVO qnaManageVO, Model model)
      throws Exception {

    // 인증여부 체크
    Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();

    // isAuthenticated = false;

    if (!isAuthenticated) {

      model.addAttribute("result", qnaManageVO);
      model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
      return "uat/uia/EgovLoginUsr";
      // return "/uss/olh/qna/EgovQnaCnRegist";

    }

    // 로그인VO에서  사용자 정보 가져오기
    LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();

    String wrterNm = loginVO.getName(); // 사용자명
    String emailAdres = loginVO.getEmail(); // email 주소

    qnaManageVO.setWrterNm(wrterNm); // 작성자명
    qnaManageVO.setEmailAdres(emailAdres); // email 주소

    model.addAttribute("result", qnaManageVO);
    model.addAttribute("qnaManageVO", qnaManageVO);

    return "/uss/olh/qna/EgovQnaCnRegist";
  }
  /**
   * Q&A정보 목록에 대한 상세정보를 조회한다.
   *
   * @param passwordConfirmAt
   * @param qnaManageVO
   * @param searchVO
   * @param model
   * @return "/uss/olh/qna/EgovQnaDetailInqire"
   * @throws Exception
   */
  @RequestMapping("/uss/olh/qna/QnaDetailInqire.do")
  public String selectQnaListDetail(
      @RequestParam("passwordConfirmAt") String passwordConfirmAt,
      QnaManageVO qnaManageVO,
      @ModelAttribute("searchVO") QnaManageDefaultVO searchVO,
      ModelMap model)
      throws Exception {

    QnaManageVO vo = qnaManageService.selectQnaListDetail(qnaManageVO);

    vo.setPasswordConfirmAt(passwordConfirmAt); // 작성비밀번호 확인여부

    // 작성 비밀번호를 얻는다.
    String writngPassword = vo.getWritngPassword();

    // EgovFileScrty Util에 있는 암호화 모듈을 적용해서 복호화한다.
    vo.setWritngPassword(EgovFileScrty.decode(writngPassword));

    model.addAttribute("result", vo);

    return "/uss/olh/qna/EgovQnaDetailInqire";
  }
  /**
   * Q&A정보를 수정하기 위한 전 처리(비밀번호 암호화)
   *
   * @param qnaManageVO
   * @param searchVO
   * @param model
   * @return "/uss/olh/qna/EgovQnaCnUpdt
   * @throws Exception
   */
  @RequestMapping("/uss/olh/qna/QnaCnUpdtView.do")
  public String updateQnaCnView(
      QnaManageVO qnaManageVO,
      @ModelAttribute("searchVO") QnaManageDefaultVO searchVO,
      ModelMap model)
      throws Exception {

    QnaManageVO vo = qnaManageService.selectQnaListDetail(qnaManageVO);

    // 작성 비밀번호를 얻는다.
    String writngPassword = vo.getWritngPassword();

    // EgovFileScrty Util에 있는 암호화 모듈을 적용해서 복호화한다.
    vo.setWritngPassword(EgovFileScrty.decode(writngPassword));

    // 복호화된 패스워드를 넘긴다..
    model.addAttribute("qnaManageVO", vo);

    // result에도 세팅(jstl 사용을 위해)
    model.addAttribute(selectQnaListDetail("Y", qnaManageVO, searchVO, model));

    return "/uss/olh/qna/EgovQnaCnUpdt";
  }
  /**
   * Q&A답변정보를 수정처리한다.
   *
   * @param qnaManageVO
   * @param searchVO
   * @return "forward:/uss/olh/qnm/QnaAnswerListInqire.do"
   * @throws Exception
   */
  @RequestMapping("/uss/olh/qnm/QnaCnAnswerUpdt.do")
  public String updateQnaCnAnswer(
      QnaManageVO qnaManageVO, @ModelAttribute("searchVO") QnaManageDefaultVO searchVO)
      throws Exception {

    // 로그인VO에서  사용자 정보 가져오기
    LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();

    String lastUpdusrId = loginVO.getUniqId();

    qnaManageVO.setLastUpdusrId(lastUpdusrId); // 최종수정자ID

    qnaManageService.updateQnaCnAnswer(qnaManageVO);

    return "forward:/uss/olh/qnm/QnaAnswerListInqire.do";
  }