diff --git a/src/main/java/nlib/bbs/service/ArticleVO.java b/src/main/java/nlib/bbs/service/ArticleVO.java index 7110efe5..09f4d909 100644 --- a/src/main/java/nlib/bbs/service/ArticleVO.java +++ b/src/main/java/nlib/bbs/service/ArticleVO.java @@ -21,6 +21,13 @@ public class ArticleVO extends PagingVO { private String postStartDate; /* 게시시작일자 */ private String postEndDate; /* 게시종료일자 */ + // FAQ, QNA관련 + private String answer; /* 답변 */ + private String answerYn; /* 답변여부 */ + private String useYn; /* 사용여부 */ + private String questionType; /* 질문유형 */ + private String questionTypeName; /* 질문유형명 */ + private int viewCnt; /* 조회수 */ private String bdAttachFileId; /* 첨부파일아이디 */ private String attachYn; /* 첨부파일존재여부 */ @@ -36,10 +43,15 @@ public class ArticleVO extends PagingVO { // 검색관련 private String searchType; /* 검색대상구분 */ private String searchKeyword; /* 검색어 */ + private String searchQuestionType; /* 검색FAQ유형 */ // 첨부파일 private List attachFiles = null; /* 첨부파일목록 */ + + + // SETTER & GETTER + public int getAttachFileCnt() { if(attachFiles == null) return 0; return attachFiles.size(); @@ -186,6 +198,53 @@ public class ArticleVO extends PagingVO { public void setAttachFiles(List attachFiles) { this.attachFiles = attachFiles; } - + + public String getAnswerYn() { + return answerYn; + } + + public void setAnswerYn(String answerYn) { + this.answerYn = answerYn; + } + + public String getUseYn() { + return useYn; + } + + public void setUseYn(String useYn) { + this.useYn = useYn; + } + + public String getQuestionType() { + return questionType; + } + + public void setQuestionType(String questionType) { + this.questionType = questionType; + } + + public String getQuestionTypeName() { + return questionTypeName; + } + + public void setQuestionTypeName(String questionTypeName) { + this.questionTypeName = questionTypeName; + } + + public String getAnswer() { + return answer; + } + + public void setAnswer(String answer) { + this.answer = answer; + } + + public String getSearchQuestionType() { + return searchQuestionType; + } + + public void setSearchQuestionType(String searchQuestionType) { + this.searchQuestionType = searchQuestionType; + } } diff --git a/src/main/java/nlib/bbs/service/impl/BoardServiceImpl.java b/src/main/java/nlib/bbs/service/impl/BoardServiceImpl.java index 84b4508b..a4a1e3d5 100644 --- a/src/main/java/nlib/bbs/service/impl/BoardServiceImpl.java +++ b/src/main/java/nlib/bbs/service/impl/BoardServiceImpl.java @@ -2,13 +2,11 @@ package nlib.bbs.service.impl; import java.util.List; -import javax.annotation.Resource; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; import nlib.bbs.service.ArticleVO; +import nlib.bbs.service.AttachFileVO; import nlib.bbs.service.BoardService; import nlib.util.StringUtil; @@ -55,10 +53,16 @@ public abstract class BoardServiceImpl implements BoardService */ public ArticleVO selectArticle(ArticleVO articleVO) throws Exception { + if(StringUtil.isEmpty(articleVO.getArticleId())) return null; + // 게시글 조회 ArticleVO retVO = getBoardDAO().selectArticle(articleVO); // 첨부파일 조회 - if(StringUtil.isNotEmpty(retVO.getBdAttachFileId())) retVO.setAttachFiles(getBoardDAO().listAttachFiles(retVO.getBdAttachFileId())); + if(StringUtil.isNotEmpty(retVO.getBdAttachFileId())) { + String attachFileId = retVO.getBdAttachFileId(); + List listFile = getBoardDAO().listAttachFiles(attachFileId); + retVO.setAttachFiles(listFile); + } // 조회수 증가 updateRead(articleVO); diff --git a/src/main/java/nlib/bbs/service/impl/FaqDAO.java b/src/main/java/nlib/bbs/service/impl/FaqDAO.java new file mode 100644 index 00000000..abbabee6 --- /dev/null +++ b/src/main/java/nlib/bbs/service/impl/FaqDAO.java @@ -0,0 +1,12 @@ +package nlib.bbs.service.impl; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +@Mapper("faqDAO") +public interface FaqDAO extends BoardDAO { + + /* + * BoardDAO 상속 내용과 동일 + */ + +} diff --git a/src/main/java/nlib/bbs/service/impl/FaqServiceImpl.java b/src/main/java/nlib/bbs/service/impl/FaqServiceImpl.java new file mode 100644 index 00000000..155f2516 --- /dev/null +++ b/src/main/java/nlib/bbs/service/impl/FaqServiceImpl.java @@ -0,0 +1,28 @@ +package nlib.bbs.service.impl; + +import java.util.List; + +import javax.annotation.Resource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import nlib.bbs.service.ArticleVO; +import nlib.bbs.service.BoardService; +import nlib.util.StringUtil; + +@Service("faqService") +public class FaqServiceImpl extends BoardServiceImpl +{ + static Logger log = LoggerFactory.getLogger(FaqServiceImpl.class); + + @Resource(name="faqDAO") + FaqDAO faqDAO; + + @Override + public BoardDAO getBoardDAO() { + return faqDAO; + } + +} \ No newline at end of file diff --git a/src/main/java/nlib/bbs/service/impl/QnaDAO.java b/src/main/java/nlib/bbs/service/impl/QnaDAO.java new file mode 100644 index 00000000..1002cf9e --- /dev/null +++ b/src/main/java/nlib/bbs/service/impl/QnaDAO.java @@ -0,0 +1,12 @@ +package nlib.bbs.service.impl; + +import egovframework.rte.psl.dataaccess.mapper.Mapper; + +@Mapper("qnaDAO") +public interface QnaDAO extends BoardDAO { + + /* + * BoardDAO 상속 내용과 동일 + */ + +} diff --git a/src/main/java/nlib/bbs/service/impl/QnaServiceImpl.java b/src/main/java/nlib/bbs/service/impl/QnaServiceImpl.java new file mode 100644 index 00000000..9e3541ba --- /dev/null +++ b/src/main/java/nlib/bbs/service/impl/QnaServiceImpl.java @@ -0,0 +1,21 @@ +package nlib.bbs.service.impl; + +import javax.annotation.Resource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +@Service("qnaService") +public class QnaServiceImpl extends BoardServiceImpl +{ + static Logger log = LoggerFactory.getLogger(QnaServiceImpl.class); + + @Resource(name="qnaDAO") + QnaDAO qnaDAO; + + @Override + public BoardDAO getBoardDAO() { + return qnaDAO; + } + +} \ No newline at end of file diff --git a/src/main/java/nlib/bbs/web/BoardController.java b/src/main/java/nlib/bbs/web/BoardControllerApi.java similarity index 99% rename from src/main/java/nlib/bbs/web/BoardController.java rename to src/main/java/nlib/bbs/web/BoardControllerApi.java index 4891cae0..0df77b4d 100644 --- a/src/main/java/nlib/bbs/web/BoardController.java +++ b/src/main/java/nlib/bbs/web/BoardControllerApi.java @@ -34,9 +34,9 @@ import nlib.user.service.NlibLoginVO; import nlib.util.StringUtil; @Controller -public class BoardController extends NlibCommonController +public class BoardControllerApi extends NlibCommonController { - private static final Logger log = LoggerFactory.getLogger(BoardController.class); + private static final Logger log = LoggerFactory.getLogger(BoardControllerApi.class); static final String DEFUALT_PAGE_SIZE = NlibProperty.getProperty("list.paging.page.size"); diff --git a/src/main/java/nlib/bbs/web/FaqController.java b/src/main/java/nlib/bbs/web/FaqController.java index 5a2fdc22..d4cae7a1 100644 --- a/src/main/java/nlib/bbs/web/FaqController.java +++ b/src/main/java/nlib/bbs/web/FaqController.java @@ -22,12 +22,15 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import org.springframework.web.servlet.support.RequestContextUtils; +import nlib.bbs.service.ArticleVO; +import nlib.bbs.service.BoardService; import nlib.bbs.service.BoardServiceApi; import nlib.cmm.NlibCommonController; import nlib.cmm.crypto.AriaCrypto; import nlib.cmm.crypto.NlibPasswordEncoder; import nlib.cmm.service.CodeService; import nlib.cmm.service.NlibProperty; +import nlib.cmm.service.NotificationVO; import nlib.restful.service.DataApiReqVO; import nlib.restful.service.DataApiResVO; import nlib.user.service.NlibLoginVO; @@ -36,150 +39,94 @@ import nlib.util.StringUtil; @Controller public class FaqController extends NlibCommonController { -// private static final Logger log = LoggerFactory.getLogger(FaqController.class); -// -// static final String DEFUALT_PAGE_SIZE = NlibProperty.getProperty("list.paging.page.size"); -// -// @Resource(name = "boardService") -// private BoardService boardService; -// -// @Resource(name = "nlibPasswordEncoder") -// private NlibPasswordEncoder nlibPasswordEncoder; -// -// @Resource(name = "ariaCrypto") -// private AriaCrypto ariaCrypto; -// -// @Resource(name = "codeService") -// private CodeService codeService; -// -// -// @Autowired -// private AuthenticationManager authenticationManager; -// -// /** -// * FAQ 목록 화면을 표출한다. -// * -// * @param req -// * @return -// */ -// @RequestMapping("/board/listFAQs.do") -// public String listFAQs(HttpServletRequest req, Authentication authentication, @RequestParam Map paramMap, ModelMap model) throws Exception { -// -// String searchKeyword = paramMap.get("searchKeyword"); -// String pageIndex = StringUtil.getString(paramMap.get("pageIndex"), "1"); -// String pageSize = StringUtil.getString(paramMap.get("pageSize") , DEFUALT_PAGE_SIZE); -// String message = paramMap.get("message"); -// String faqType = paramMap.get("faqType"); -// -// log.debug("listFAQs > pageIndex = " + pageIndex); -// log.debug("listFAQs > pageSize = " + pageSize); -// log.debug("listFAQs > searchKeyword = " + searchKeyword); -// log.debug("listFAQs > message = " + message); -// log.debug("listFAQs > faqType = " + faqType); -// -// DataApiReqVO reqVOforCode = new DataApiReqVO(); -// reqVOforCode.setPageIndex(0); -// reqVOforCode.setPageSize(0); -// -// -// // 페이징 사이즈 코드 목록 조회 -// List> pageSizeCodes = codeService.listCodes("PAGE_SIZE_OPTION"); -// -// // 유형 코드 목록 조회 -// List> articleTypeCodes = codeService.listCodes("FAQ_TYPE"); -// -// // 반환 정보 -// model.addAttribute("pageIndex" , pageIndex); -// model.addAttribute("pageSize" , pageSize); -// model.addAttribute("searchKeyword", searchKeyword); -// model.addAttribute("pageSizeCodes", pageSizeCodes); -// model.addAttribute("faqTypeCodes" , articleTypeCodes); -// model.addAttribute("message" , message); -// model.addAttribute("faqType" , faqType); -// model.addAttribute("faqType" , faqType); -// -// return "nlib/board/listFAQs"; -// } -// -// -// /** -// * FAQ 목록 조회한다. -// * -// * @param req -// * @return -// */ -// @RequestMapping(value="/board/listFAQsAjax.do") -// public ResponseEntity listFAQsAjax(HttpServletRequest req, -// Authentication authentication, @RequestBody Map paramMap) throws Exception { -// -// String searchKeyword = paramMap.get("searchKeyword"); -// String pageIndex = StringUtil.getString(paramMap.get("pageIndex"), "1"); -// String pageSize = StringUtil.getString(paramMap.get("pageSize") , DEFUALT_PAGE_SIZE); -// String faqType = paramMap.get("faqType"); -// -// log.debug("listFAQsAjax > pageIndex = " + pageIndex); -// log.debug("listFAQsAjax > pageSize = " + pageSize); -// log.debug("listFAQsAjax > searchKeyword = " + searchKeyword); -// log.debug("listFAQsAjax > faqType = " + faqType); -// -// //------------------------------- -// // REQ VO 구성 -// //------------------------------- -// DataApiReqVO reqVO = new DataApiReqVO(); -// reqVO.setPageIndex(pageIndex); -// reqVO.setPageSize(pageSize); -// reqVO.addInfoItem("searchKeyword", searchKeyword); -// reqVO.addInfoItem("faqType", faqType); -// -// // 요청 -// DataApiResVO resVO = boardService.listFAQs(reqVO); -// -// //------------------------------- -// // JSON변환 응답 처리 -// //------------------------------- -// // JS-GRID 페이징 처리를 포함한 응답값 처리 -// // {data: [{...}], -// // itemsCount: 255 -// // } -// HashMap retMap = new HashMap(); -// retMap.put("data", resVO.getList()); -// retMap.put("itemsCount", resVO.getRecordTotCount()); -// -// return makeResponseEntityJson(retMap); -// } -// -// -// /** -// * 묻고답하기 상세 내용 조회한다. -// * -// * @param req -// * @return -// */ -// @RequestMapping("/board/selectFAQAjax.do") -// public ResponseEntity selectFAQAjax(HttpServletRequest req, Authentication authentication, @RequestBody Map paramMap) throws Exception { -// -// // 게시물 번호 -// String articleNo = paramMap.get("articleNo"); -// -// log.debug("selectQnA > articleNo = " + articleNo); -// -// //------------------------------- -// // REQ VO 구성 -// //------------------------------- -// DataApiReqVO reqVO = new DataApiReqVO(); -// reqVO.addInfoItem("boardNo", "FAQ"); // 게시판ID -// reqVO.addInfoItem("articleNo", articleNo); // 게시물번호 -// -// // 요청 -// DataApiResVO resVO = boardService.selectFAQ(reqVO); -// -// // 반환 정보 -// return makeResponseEntityJson(resVO.getInfo()); -// } -// -// @RequestMapping("/board/verifyWriter.do") -// public String verifyWriter(HttpServletRequest req) throws Exception { -// return "nlib/board/verifyWriter"; -// } + private static final Logger log = LoggerFactory.getLogger(FaqController.class); + + static final int DEFUALT_PAGE_SIZE = NlibProperty.getInt("list.paging.page.size", 10); + + @Resource(name = "faqService") + private BoardService faqService; + + @Resource(name="codeService") + private CodeService codeService; + /** + * 목록 화면을 표시한다. + * + * @param req + * @return + */ + @RequestMapping("/bbs/listFaqs.do") + public String listFaqs( + HttpServletRequest req, + @RequestParam Map paramMap, + ArticleVO searchArticleVO, + ModelMap model + ) throws Exception { + + + List> questionTypeList = codeService.listCodes("FAQ_TYPE_CD"); + model.addAttribute("questionTypeList", questionTypeList); + model.addAttribute("searchArticle", searchArticleVO); + + return "nlib/bbs/listFaqs"; + } + + /** + * 목록 조회한다. + * + * @param req + * @return + */ + @RequestMapping(value="/bbs/listFaqsAjax.do") + public ResponseEntity listFaqsAjax( + HttpServletRequest req, + Authentication authentication, + @RequestBody ArticleVO searchArticleVO) throws Exception { + + if(searchArticleVO.getPageIndex() < 1) searchArticleVO.setPageIndex(1); + if(searchArticleVO.getPageSize() < 1) searchArticleVO.setPageSize(DEFUALT_PAGE_SIZE); + + List list = faqService.listArticles(searchArticleVO); + + int totRecordCount = faqService.countArticles(searchArticleVO); + + //------------------------------- + // JSON변환 응답 처리 + //------------------------------- + // JS-GRID 페이징 처리를 포함한 응답값 처리 + // {data: [{...}], + // itemsCount: 255 + // } + HashMap retMap = new HashMap(); + retMap.put("data", list); + retMap.put("itemsCount", totRecordCount); + + return makeResponseEntityJson(retMap); + } + + + /** + * 알림 상세 내용 조회한다. + * + * @param req + * @return + */ + @RequestMapping("/bbs/selectFaqArticleAjax.do") + public ResponseEntity selectFaqArticleAjax(HttpServletRequest req, Authentication authentication, @RequestBody ArticleVO searchArticleVO) throws Exception { + + // 읽음처리 및 상세내용 조회 + ArticleVO articleVO = faqService.selectArticle(searchArticleVO); + + //------------------------------- + // JSON변환 응답 처리 + //------------------------------- + // JS-GRID 페이징 처리를 포함한 응답값 처리 + // {data: [{...}], + // itemsCount: 255 + // } + HashMap retMap = new HashMap(); + retMap.put("data", articleVO); + + return makeResponseEntityJson(retMap); + } } \ No newline at end of file diff --git a/src/main/java/nlib/bbs/web/QnaController.java b/src/main/java/nlib/bbs/web/QnaController.java index 7caafd63..5a0d2636 100644 --- a/src/main/java/nlib/bbs/web/QnaController.java +++ b/src/main/java/nlib/bbs/web/QnaController.java @@ -22,6 +22,8 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import org.springframework.web.servlet.support.RequestContextUtils; +import nlib.bbs.service.ArticleVO; +import nlib.bbs.service.BoardService; import nlib.bbs.service.BoardServiceApi; import nlib.cmm.NlibCommonController; import nlib.cmm.crypto.AriaCrypto; @@ -36,150 +38,81 @@ import nlib.util.StringUtil; @Controller public class QnaController extends NlibCommonController { -// private static final Logger log = LoggerFactory.getLogger(QnaController.class); -// -// static final String DEFUALT_PAGE_SIZE = NlibProperty.getProperty("list.paging.page.size"); -// -// @Resource(name = "boardService") -// private BoardService boardService; -// -// @Resource(name = "nlibPasswordEncoder") -// private NlibPasswordEncoder nlibPasswordEncoder; -// -// @Resource(name = "ariaCrypto") -// private AriaCrypto ariaCrypto; -// -// @Resource(name = "codeService") -// private CodeService codeService; -// -// -// @Autowired -// private AuthenticationManager authenticationManager; -// -// /** -// * FAQ 목록 화면을 표출한다. -// * -// * @param req -// * @return -// */ -// @RequestMapping("/board/listFAQs.do") -// public String listFAQs(HttpServletRequest req, Authentication authentication, @RequestParam Map paramMap, ModelMap model) throws Exception { -// -// String searchKeyword = paramMap.get("searchKeyword"); -// String pageIndex = StringUtil.getString(paramMap.get("pageIndex"), "1"); -// String pageSize = StringUtil.getString(paramMap.get("pageSize") , DEFUALT_PAGE_SIZE); -// String message = paramMap.get("message"); -// String faqType = paramMap.get("faqType"); -// -// log.debug("listFAQs > pageIndex = " + pageIndex); -// log.debug("listFAQs > pageSize = " + pageSize); -// log.debug("listFAQs > searchKeyword = " + searchKeyword); -// log.debug("listFAQs > message = " + message); -// log.debug("listFAQs > faqType = " + faqType); -// -// DataApiReqVO reqVOforCode = new DataApiReqVO(); -// reqVOforCode.setPageIndex(0); -// reqVOforCode.setPageSize(0); -// -// -// // 페이징 사이즈 코드 목록 조회 -// List> pageSizeCodes = codeService.listCodes("PAGE_SIZE_OPTION"); -// -// // 유형 코드 목록 조회 -// List> articleTypeCodes = codeService.listCodes("FAQ_TYPE"); -// -// // 반환 정보 -// model.addAttribute("pageIndex" , pageIndex); -// model.addAttribute("pageSize" , pageSize); -// model.addAttribute("searchKeyword", searchKeyword); -// model.addAttribute("pageSizeCodes", pageSizeCodes); -// model.addAttribute("faqTypeCodes" , articleTypeCodes); -// model.addAttribute("message" , message); -// model.addAttribute("faqType" , faqType); -// model.addAttribute("faqType" , faqType); -// -// return "nlib/board/listFAQs"; -// } -// -// -// /** -// * FAQ 목록 조회한다. -// * -// * @param req -// * @return -// */ -// @RequestMapping(value="/board/listFAQsAjax.do") -// public ResponseEntity listFAQsAjax(HttpServletRequest req, -// Authentication authentication, @RequestBody Map paramMap) throws Exception { -// -// String searchKeyword = paramMap.get("searchKeyword"); -// String pageIndex = StringUtil.getString(paramMap.get("pageIndex"), "1"); -// String pageSize = StringUtil.getString(paramMap.get("pageSize") , DEFUALT_PAGE_SIZE); -// String faqType = paramMap.get("faqType"); -// -// log.debug("listFAQsAjax > pageIndex = " + pageIndex); -// log.debug("listFAQsAjax > pageSize = " + pageSize); -// log.debug("listFAQsAjax > searchKeyword = " + searchKeyword); -// log.debug("listFAQsAjax > faqType = " + faqType); -// -// //------------------------------- -// // REQ VO 구성 -// //------------------------------- -// DataApiReqVO reqVO = new DataApiReqVO(); -// reqVO.setPageIndex(pageIndex); -// reqVO.setPageSize(pageSize); -// reqVO.addInfoItem("searchKeyword", searchKeyword); -// reqVO.addInfoItem("faqType", faqType); -// -// // 요청 -// DataApiResVO resVO = boardService.listFAQs(reqVO); -// -// //------------------------------- -// // JSON변환 응답 처리 -// //------------------------------- -// // JS-GRID 페이징 처리를 포함한 응답값 처리 -// // {data: [{...}], -// // itemsCount: 255 -// // } -// HashMap retMap = new HashMap(); -// retMap.put("data", resVO.getList()); -// retMap.put("itemsCount", resVO.getRecordTotCount()); -// -// return makeResponseEntityJson(retMap); -// } -// -// -// /** -// * 묻고답하기 상세 내용 조회한다. -// * -// * @param req -// * @return -// */ -// @RequestMapping("/board/selectFAQAjax.do") -// public ResponseEntity selectFAQAjax(HttpServletRequest req, Authentication authentication, @RequestBody Map paramMap) throws Exception { -// -// // 게시물 번호 -// String articleNo = paramMap.get("articleNo"); -// -// log.debug("selectQnA > articleNo = " + articleNo); -// -// //------------------------------- -// // REQ VO 구성 -// //------------------------------- -// DataApiReqVO reqVO = new DataApiReqVO(); -// reqVO.addInfoItem("boardNo", "FAQ"); // 게시판ID -// reqVO.addInfoItem("articleNo", articleNo); // 게시물번호 -// -// // 요청 -// DataApiResVO resVO = boardService.selectFAQ(reqVO); -// -// // 반환 정보 -// return makeResponseEntityJson(resVO.getInfo()); -// } -// -// @RequestMapping("/board/verifyWriter.do") -// public String verifyWriter(HttpServletRequest req) throws Exception { -// return "nlib/board/verifyWriter"; -// } + private static final Logger log = LoggerFactory.getLogger(QnaController.class); + + static final int DEFUALT_PAGE_SIZE = NlibProperty.getInt("list.paging.page.size", 10); + + @Resource(name = "qnaService") + private BoardService qnaService; + + /** + * 목록 화면을 표시한다. + * + * @param req + * @return + */ + @RequestMapping("/bbs/listQnas.do") + public String listQnas( + HttpServletRequest req, + @RequestParam Map paramMap, + ArticleVO searchArticleVO, + ModelMap model + ) throws Exception { + model.addAttribute("searchArticle", searchArticleVO); + + return "nlib/bbs/listQnas"; + } + + /** + * 목록 조회한다. + * + * @param req + * @return + */ + @RequestMapping(value="/bbs/listQnasAjax.do") + public ResponseEntity listQnasAjax( + HttpServletRequest req, + Authentication authentication, + @RequestBody ArticleVO searchArticleVO) throws Exception { + + if(searchArticleVO.getPageIndex() < 1) searchArticleVO.setPageIndex(1); + if(searchArticleVO.getPageSize() < 1) searchArticleVO.setPageSize(DEFUALT_PAGE_SIZE); + + List list = qnaService.listArticles(searchArticleVO); + + int totRecordCount = qnaService.countArticles(searchArticleVO); + + //------------------------------- + // JSON변환 응답 처리 + //------------------------------- + // JS-GRID 페이징 처리를 포함한 응답값 처리 + // {data: [{...}], + // itemsCount: 255 + // } + HashMap retMap = new HashMap(); + retMap.put("data", list); + retMap.put("itemsCount", totRecordCount); + + return makeResponseEntityJson(retMap); + } + + + /** + * 알림 상세 내용 조회한다. + * + * @param req + * @return + */ + @RequestMapping("/bbs/selectQnaArticle.do") + public String selectQnaArticle(HttpServletRequest req, Authentication authentication, ArticleVO searchArticleVO, ModelMap model) throws Exception { + + // 읽음처리 및 상세내용 조회 + ArticleVO articleVO = qnaService.selectArticle(searchArticleVO); + + model.addAttribute("searchArticle", searchArticleVO); + model.addAttribute("article", articleVO); + + return "nlib/bbs/selectQnaArticle"; + } } \ No newline at end of file diff --git a/src/main/resources/egovframework/mapper/nlib/bbs/AncmntDAO_SQL.xml b/src/main/resources/egovframework/mapper/nlib/bbs/AncmntDAO_SQL.xml index 24251c6b..98646141 100644 --- a/src/main/resources/egovframework/mapper/nlib/bbs/AncmntDAO_SQL.xml +++ b/src/main/resources/egovframework/mapper/nlib/bbs/AncmntDAO_SQL.xml @@ -34,24 +34,27 @@ , A.POST_START_DATE , A.POST_END_DATE , A.VIEW_CNT - , CASE WHEN A.BD_ATTACH_FILE_ID IS NOT NULL OR A.BD_ATTACH_FILE_ID != '' THEN 'N' ELSE 'Y' END AS ATTACH_YN + , CASE WHEN A.BD_ATTACH_FILE_ID IS NULL OR A.BD_ATTACH_FILE_ID = '' THEN 'N' ELSE 'Y' END AS ATTACH_YN , DATE_FORMAT(A.REG_DD, '%Y-%m-%d') AS REG_DD , A2.RNO , C.USER_NM AS REG_NM FROM BD_NLIB_ANCMNT A INNER JOIN ( - SELECT S.ANCMNT_ID - , ROW_NUMBER() OVER() AS RNO - - ORDER BY S.REG_DD DESC - LIMIT #{pageStartRowNum}, #{pageSize} + SELECT ANCMNT_ID, RNO + FROM ( + SELECT S.ANCMNT_ID + , ROW_NUMBER() OVER(PARTITION BY 1 ORDER BY S.REG_DD, S.TITLE) AS RNO + , ROW_NUMBER() OVER(PARTITION BY 1 ORDER BY S.REG_DD DESC, S.TITLE DESC) AS ONO + + ) S2 + WHERE ONO BETWEEN (#{pageStartRowNum} + 1) AND (#{pageStartRowNum} + #{pageSize}) ) AS A2 USING(ANCMNT_ID) JOIN SM_DEPT B ON B.ORG_CD = A.MNG_ORG_CD LEFT OUTER JOIN SM_USER C ON A.REG_ID = C.USER_ID - ORDER BY A.REG_DD DESC + ORDER BY RNO DESC + SELECT + A.QNA_ID AS ARTICLE_ID + , A.MNG_ORG_CD + , B.DEPT_NM AS MNG_ORG_NM + , A.QUESTION_TYPE + , D.S_CODE_NM AS QUESTION_TYPE_NAME + , A.TITLE + , A.ANSWER_YN + , A.USE_YN + , A.VIEW_CNT + , CASE WHEN A.BD_ATTACH_FILE_ID IS NULL OR A.BD_ATTACH_FILE_ID = '' THEN 'N' ELSE 'Y' END AS ATTACH_YN + , DATE_FORMAT(A.REG_DD, '%Y-%m-%d') AS REG_DD + , A2.RNO + , C.USER_NM AS REG_NM + FROM BD_QNA A + INNER JOIN ( + SELECT QNA_ID, RNO + FROM ( + SELECT S.QNA_ID + , ROW_NUMBER() OVER(PARTITION BY 1 ORDER BY S.REG_DD, S.TITLE) AS RNO + , ROW_NUMBER() OVER(PARTITION BY 1 ORDER BY S.REG_DD DESC, S.TITLE DESC) AS ONO + + ) S2 + WHERE ONO BETWEEN (#{pageStartRowNum} + 1) AND (#{pageStartRowNum} + #{pageSize}) + ) AS A2 + USING(QNA_ID) + JOIN SM_DEPT B + ON B.ORG_CD = A.MNG_ORG_CD + LEFT OUTER JOIN SM_USER C + ON A.REG_ID = C.USER_ID + LEFT OUTER JOIN SM_CODE_S D + ON A.QUESTION_TYPE = D.S_CODE_ID + WHERE D.L_CODE_ID = 'FAQ_TYPE_CD' + AND D.USE_YN = 'Y' + ORDER BY RNO DESC + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/egovframework/mapper/nlib/cmm/CodeDAO_SQL.xml b/src/main/resources/egovframework/mapper/nlib/cmm/CodeDAO_SQL.xml index 2c7492a8..4918b00c 100644 --- a/src/main/resources/egovframework/mapper/nlib/cmm/CodeDAO_SQL.xml +++ b/src/main/resources/egovframework/mapper/nlib/cmm/CodeDAO_SQL.xml @@ -7,7 +7,7 @@ SELECT B.S_CODE_ID , B.S_CODE_NM FROM SM_CODE_M A, - SM_CODE_S B + SM_CODE_S B WHERE A.L_CODE_ID = #{lCodeId} AND A.L_CODE_ID = B.L_CODE_ID AND A.USE_YN = 'Y' diff --git a/src/main/webapp/WEB-INF/jsp/nlib/bbs/listAncmnts.jsp b/src/main/webapp/WEB-INF/jsp/nlib/bbs/listAncmnts.jsp index bbed5b1a..65e59811 100644 --- a/src/main/webapp/WEB-INF/jsp/nlib/bbs/listAncmnts.jsp +++ b/src/main/webapp/WEB-INF/jsp/nlib/bbs/listAncmnts.jsp @@ -31,7 +31,7 @@ <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> -공지사항 +공지사항(DB) @@ -97,8 +97,24 @@ //$("#itemsCount").val(jsonOjb.itemsCount); console.log(jsonObj.itemsCount); - if(jsonObj.itemsCount == undefined) $("#itemsCount").val("0"); - else $("#itemsCount").val(jsonObj.itemsCount); + if(jsonObj.itemsCount == undefined) { + $("#itemsCount").text("0"); + $("#searchItemsCount").text("0"); + } + else { + $("#itemsCount").text(jsonObj.itemsCount); + $("#searchItemsCount").text(jsonObj.itemsCount); + } + + if($("#searchKeyword").val() != "") { + $("#searchKeywordPrt").text($("#searchKeyword").val()); + $("#listResult").hide(); + $("#searchResult").show(); + } + else { + $("#listResult").show(); + $("#searchResult").hide(); + } data.resolve(jsonObj); }); @@ -113,10 +129,9 @@ // 추출할 컬럼의 데이터 가져오기 var articleId = getData["articleId"]; - var selectedRow = $("#jsGrid").find('table tr.jsgrid-selected-row'); // 상세 내용 보기 - fn_viewDetail(articleId, selectedRow); + fn_viewDetail(articleId); }, //====================================== @@ -128,7 +143,7 @@ { title:"제목", name: "title" , type: "text", width: 200, align: "left" }, { title:"등록자", name: "regNm" , type: "text", width: 100, align: "center"}, { title:"등록일", name: "regDd" , type: "text", width: 100, align: "center"}, - { title:"첨부", name: "bdAttachFileId" , type: "text", width: 100, align: "center"} + { title:"첨부", name: "attachYn" , type: "text", width: 100, align: "center"} ] }); @@ -168,13 +183,19 @@ 메시지 : ${message} +
+ 총
+
+ +  
- diff --git a/src/main/webapp/WEB-INF/jsp/nlib/bbs/listFaqs.jsp b/src/main/webapp/WEB-INF/jsp/nlib/bbs/listFaqs.jsp new file mode 100644 index 00000000..c3999eda --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/nlib/bbs/listFaqs.jsp @@ -0,0 +1,314 @@ +<% +/** + *
+ * @Class Name : listFaqs.jsp
+ * 
+ * @Description : 자주하는질문 목록 화면을 표출한다.
+ * 
+ * 
+ * @프로젝트명: 지방문화원 통합자료관리시스템 구축사업 (2021)
+ *
+ * 
+ * + * @ ------------ -------- --------------------------- + * @ 수정일 수정자 수정내용 + * @ ------------ -------- --------------------------- + * @ 2021. 9. 15. KNKIM 최초 생성 + * + * + * @author 이씨플라자 * DIGITALSHIP KNKIM + * @since 2021. 9. 15. + * @version 1.0 + * + */ + %> +<%@ page language="java" contentType="text/html; charset=UTF-8" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator" %> + +자주하는질문(DB) + + + + + ${pageTitle} + + + + + + + + + + + +

${pageTitle }

+ + 메시지 : ${message} + +
+ 총
+
+ + + +  
+ + + + + + + + + + +
전체${qTypeItem.sCodeNm}
+
+ + + + + + + + + + + + +
+ +
+ + + + + +
+ + + +
+ + + + +
+ + + + diff --git a/src/main/webapp/WEB-INF/jsp/nlib/bbs/selectAncmntArticle.jsp b/src/main/webapp/WEB-INF/jsp/nlib/bbs/selectAncmntArticle.jsp index cb35059b..074abf7f 100644 --- a/src/main/webapp/WEB-INF/jsp/nlib/bbs/selectAncmntArticle.jsp +++ b/src/main/webapp/WEB-INF/jsp/nlib/bbs/selectAncmntArticle.jsp @@ -42,33 +42,32 @@ // 목록으로 이동 function fn_list() { - $("#articleForm").attr("action", "${pageContext.request.contextPath}/bbs/listAncmnts.do"); $("#articleForm").submit(); } // 파일 다운로드 function fn_downloadFile(fileId, fileSeq, fileName) { - - if(fileId == null || fileId.trim().length < 1) { - alert("파일정보를 확인해 주시기 바랍니다.[1]"); - return; - } + + if(fileId == null || fileId.trim().length < 1) { + alert("파일정보를 확인해 주시기 바랍니다.[1]"); + return; + } - if(fileSeq < 1) { - alert("파일정보를 확인해 주시기 바랍니다.[2]"); - return; - } - + if(fileSeq < 1) { + alert("파일정보를 확인해 주시기 바랍니다.[2]"); + return; + } + if(fileName == null || fileName.trim().length < 1) { alert("파일정보를 확인해 주시기 바랍니다.[3]"); return; } - $("#fileId").val(fileId); - $("#fileSeq").val(fileSeq); - $("#fileName").val(fileName); - $("#downloadFileForm").submit(); - + $("#fileId").val(fileId); + $("#fileSeq").val(fileSeq); + $("#fileName").val(fileName); + $("#downloadFileForm").submit(); + } @@ -82,13 +81,13 @@ function fn_downloadFile(fileId, fileSeq, fileName) {
- + diff --git a/src/main/webapp/WEB-INF/jsp/nlib/board/listNotices.jsp b/src/main/webapp/WEB-INF/jsp/nlib/board/listNotices.jsp index 94e6e071..a63b3efd 100644 --- a/src/main/webapp/WEB-INF/jsp/nlib/board/listNotices.jsp +++ b/src/main/webapp/WEB-INF/jsp/nlib/board/listNotices.jsp @@ -44,6 +44,9 @@