diff --git a/src/main/java/cokr/xit/fims/mngt/Ntc.java b/src/main/java/cokr/xit/fims/mngt/Ntc.java new file mode 100644 index 00000000..c64d23fd --- /dev/null +++ b/src/main/java/cokr/xit/fims/mngt/Ntc.java @@ -0,0 +1,43 @@ +package cokr.xit.fims.mngt; + +import cokr.xit.foundation.AbstractEntity; +import lombok.Getter; +import lombok.Setter; + +/** 공지사항 + * @author leebj + */ +@Getter +@Setter +public class Ntc extends AbstractEntity { + + /** + * 공지 ID + */ + private String ntcId; + + /** + * 공지 제목 + */ + private String ntcTtl; + + /** + * 공지 내용 + */ + private String ntcCn; + + /** + * 삭제 여부 + */ + private String delYn; + + /** + * 삭제 사유 + */ + private String delRsn; + + /** + * 시군구 코드 + */ + private String sggCd; +} diff --git a/src/main/java/cokr/xit/fims/mngt/NtcQuery.java b/src/main/java/cokr/xit/fims/mngt/NtcQuery.java new file mode 100644 index 00000000..14dc1d43 --- /dev/null +++ b/src/main/java/cokr/xit/fims/mngt/NtcQuery.java @@ -0,0 +1,19 @@ +package cokr.xit.fims.mngt; + +import cokr.xit.fims.cmmn.CmmnQuery; + +/**공지사항 정보 조회 요청 +* +*

상세 설명: +* +*

+* ============ 변경 이력 ============
+* 2024-01-02	leebj 최초 작성
+* ================================
+* 
+*/ +public class NtcQuery extends CmmnQuery { + + private static final long serialVersionUID = 1L; + +} diff --git a/src/main/java/cokr/xit/fims/mngt/dao/NtcMapper.java b/src/main/java/cokr/xit/fims/mngt/dao/NtcMapper.java new file mode 100644 index 00000000..ba3ec45d --- /dev/null +++ b/src/main/java/cokr/xit/fims/mngt/dao/NtcMapper.java @@ -0,0 +1,91 @@ +package cokr.xit.fims.mngt.dao; + +import java.util.List; +import java.util.Map; + +import org.egovframe.rte.psl.dataaccess.mapper.Mapper; + +import cokr.xit.fims.mngt.Ntc; +import cokr.xit.fims.mngt.NtcQuery; +import cokr.xit.foundation.component.AbstractMapper; +import cokr.xit.foundation.data.DataObject; + +/**공지사항 DAO + * @author leebj + */ +@Mapper("ntcMapper") +public interface NtcMapper extends AbstractMapper { + + /**지정한 조건에 따라 공지사항 목록을 조회하여 반환한다.
+ * @param req 공지사항 조회 조건 + * @return 공지사항 목록 + */ + List selectNtcList(NtcQuery req); + + /**지정한 공지사항ID로 공지사항 객체를 반환한다. + * @param ntcId 공지사항 ID + * @return 공지사항 객체 + */ + DataObject selectNtcInfo(String ntcId); + + /**공지사항 정보를 등록한다. + * @param params 파라미터 + * + * @return 저장된 정보수 + */ + int insertNtc(Map params); + + /**공지사항 정보를 등록한다. + * @param ntc 공지사항 + * @return 저장 여부 + * + */ + default boolean insert(Ntc ntc) { + return ntc != null && insertNtc(params().set("ntc", ntc)) == 1; + } + + /**공지사항 정보를 수정한다. + * @param params 파라미터 + * + * @return 저장된 정보수 + */ + int updateNtc(Map params); + + /**공지사항 정보를 수정한다. + * @param ntc 공지사항 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + default boolean update(Ntc ntc) { + return ntc != null && updateNtc(params().set("ntc", ntc)) == 1; + } + + /**지정한 공지사항을 삭제한다. + * @param params 파라미터 + *
  • "ntc" - 공지사항
  • + *
  • "currentUser" - 현재 접속한 사용자
  • + *
+ * @return 저장된 정보수 + */ + int deleteNtc(Map params); + + /**공지사항 정보를 삭제한다. + * @param ntc 공지사항 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + default boolean delete(Ntc ntc) { + return ntc != null && deleteNtc(params().set("ntc", ntc)) == 1; + } + +} diff --git a/src/main/java/cokr/xit/fims/mngt/service/NtcService.java b/src/main/java/cokr/xit/fims/mngt/service/NtcService.java new file mode 100644 index 00000000..9213ebf6 --- /dev/null +++ b/src/main/java/cokr/xit/fims/mngt/service/NtcService.java @@ -0,0 +1,50 @@ +package cokr.xit.fims.mngt.service; + +import java.util.List; + +import cokr.xit.fims.mngt.Ntc; +import cokr.xit.fims.mngt.NtcQuery; +import cokr.xit.foundation.data.DataObject; + +public interface NtcService { + + /**지정한 조건에 따라 공지사항 목록을 조회하여 반환한다. + * @param req 공지사항 조회 조건 + * @return 공지사항 목록 + */ + List getNtcList(NtcQuery req); + + /**지정한 공지사항ID로 공지사항 객체를 반환한다. + * @param ntcId 공지사항 ID + * @return 공지사항 객체 + */ + DataObject getNtcInfo(String ntcId); + + /**공지사항 정보를 등록한다. + * @param ntc 공지사항 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + String create(Ntc ntc); + + /**공지사항 정보를 수정한다. + * @param ntc 공지사항 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + String update(Ntc ntc); + + /**공지사항 정보를 삭제한다. + * @param ntc 공지사항 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + String remove(Ntc ntc); + +} diff --git a/src/main/java/cokr/xit/fims/mngt/service/bean/NtcBean.java b/src/main/java/cokr/xit/fims/mngt/service/bean/NtcBean.java new file mode 100644 index 00000000..1173184d --- /dev/null +++ b/src/main/java/cokr/xit/fims/mngt/service/bean/NtcBean.java @@ -0,0 +1,73 @@ +package cokr.xit.fims.mngt.service.bean; + +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Component; + +import cokr.xit.fims.mngt.Ntc; +import cokr.xit.fims.mngt.NtcQuery; +import cokr.xit.fims.mngt.dao.NtcMapper; +import cokr.xit.foundation.component.AbstractBean; +import cokr.xit.foundation.data.DataObject; + +/** 공지사항 Bean + * @author leebj + */ +@Component("ntcBean") +public class NtcBean extends AbstractBean { + + @Resource(name="ntcMapper") + private NtcMapper ntcMapper; + + /**지정한 조건에 따라 공지사항 목록을 조회하여 반환한다. + * @param req 공지사항 조회 조건 + * @return 공지사항 목록 + */ + public List getNtcList(NtcQuery req) { + return ntcMapper.selectNtcList(req); + } + + /**지정한 공지사항ID로 공지사항 객체를 반환한다. + * @param ntcId 공지사항 ID + * @return 공지사항 객체 + */ + public DataObject getNtcInfo(String ntcId) { + return ntcMapper.selectNtcInfo(ntcId); + } + + /**공지사항 정보를 등록한다. + * @param ntc 공지사항 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + public boolean create(Ntc ntc) { + return ntcMapper.insert(ntc); + } + + /**공지사항 정보를 수정한다. + * @param ntc 공지사항 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + public boolean update(Ntc ntc) { + return ntcMapper.update(ntc); + } + + /**공지사항 정보를 삭제한다. + * @param ntc 공지사항 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + public boolean remove(Ntc ntc) { + return ntcMapper.delete(ntc); + } + +} diff --git a/src/main/java/cokr/xit/fims/mngt/service/bean/NtcServiceBean.java b/src/main/java/cokr/xit/fims/mngt/service/bean/NtcServiceBean.java new file mode 100644 index 00000000..58df5e09 --- /dev/null +++ b/src/main/java/cokr/xit/fims/mngt/service/bean/NtcServiceBean.java @@ -0,0 +1,46 @@ +package cokr.xit.fims.mngt.service.bean; + +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import cokr.xit.fims.mngt.Ntc; +import cokr.xit.fims.mngt.NtcQuery; +import cokr.xit.fims.mngt.service.NtcService; +import cokr.xit.foundation.component.AbstractServiceBean; +import cokr.xit.foundation.data.DataObject; + +@Service("ntcService") +public class NtcServiceBean extends AbstractServiceBean implements NtcService { + + @Resource(name="ntcBean") + private NtcBean ntcBean; + + @Override + public List getNtcList(NtcQuery req) { + return ntcBean.getNtcList(req); + } + + @Override + public DataObject getNtcInfo(String ntcId) { + return ntcBean.getNtcInfo(ntcId); + } + + @Override + public String create(Ntc ntc) { + return ntcBean.create(ntc) ? "[S]" : "[F]"; + } + + @Override + public String update(Ntc ntc) { + return ntcBean.update(ntc) ? "[S]" : "[F]"; + } + + @Override + public String remove(Ntc ntc) { + return ntcBean.remove(ntc) ? "[S]" : "[F]"; + } + +} diff --git a/src/main/java/cokr/xit/fims/mngt/web/Mngt01Controller.java b/src/main/java/cokr/xit/fims/mngt/web/Mngt01Controller.java new file mode 100644 index 00000000..e0efd851 --- /dev/null +++ b/src/main/java/cokr/xit/fims/mngt/web/Mngt01Controller.java @@ -0,0 +1,171 @@ +package cokr.xit.fims.mngt.web; + +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.ModelAndView; + +import cokr.xit.base.user.SigunguQuery; +import cokr.xit.base.user.service.SigunguDepartmentService; +import cokr.xit.base.web.ApplicationController; +import cokr.xit.fims.base.FimsUser; +import cokr.xit.fims.mngt.Ntc; +import cokr.xit.fims.mngt.NtcQuery; +import cokr.xit.fims.mngt.service.NtcService; +import cokr.xit.foundation.data.DataObject; + +/**공지사항 서비스 웹 컨트롤러.
+ * {웹 컨텍스트}/mngt/mngt01 로 접근할 수 있다. + * @author leebj + */ +@Controller +@RequestMapping(name="공지사항 관리", value=Mngt01Controller.CLASS_URL) +public class Mngt01Controller extends ApplicationController { + + public static final String CLASS_URL = "/mngt/mngt01"; + + public class METHOD_URL { + public static final String + ntcMain = "/010/main.do", + getNtcList = "/010/list.do", + getNtcInfo = "/020/info.do", + create = "/020/create.do", + update = "/020/update.do", + remove = "/020/remove.do" + ; + } + + @Resource(name="ntcService") + private NtcService ntcService; + + @Resource(name="sigunguDepartmentService") + private SigunguDepartmentService sggDeptService; + + + /** 공지사항 메인화면을 연다. + * @return fims/mngt/mngt01010-main + */ + @RequestMapping(name="공지사항 메인", value=METHOD_URL.ntcMain) + public ModelAndView ntcMain() { + ModelAndView mav = new ModelAndView(); + mav.setViewName("fims/mngt/mngt01010-main"); + mav.addObject("pageName", "mngt01010"); + + return mav; + } + + /**공지사항 목록을 조회하여 반환한다.
+ * {@link NtcService#getNtcList(NtcQuery)} 참고 + * @param req 공지사항 조회 조건 + * @return jsonView + *
 {
+	 *     "ntcList": [공지사항 목록]
+	 *     "ntcStart": 공지사항 목록 시작 인덱스
+	 *     "ntcFetch": 한 번에 가져오는 공지사항 목록 수
+	 *     "ntcTotal": 조회 결과 찾은 전체 공지사항 수
+	 * }
+ */ + @RequestMapping(name="공지사항 목록 조회", value=METHOD_URL.getNtcList) + public ModelAndView getNtcList(NtcQuery req) { + ModelAndView mav = new ModelAndView("jsonView"); + setFetchSize(req); + + FimsUser currentUser = (FimsUser) currentUser().getUser(); + String sggCd = currentUser.getOrgID(); + req.setSggCd(sggCd); + List list = ntcService.getNtcList(req); + return setPagingInfo(mav, list, ""); + } + + /**공지사항 상세 내용을 조회하여 반환한다.
+ * {@link NtcService#getNtcInfo(NtcQuery)} 참고 + * @param ntcId 공지사항 ID + * @return jsonView + */ + @RequestMapping(name="공지사항 상세 조회", value=METHOD_URL.getNtcInfo) + public ModelAndView getNtcInfo(String ntcId) { + boolean json = jsonResponse(); + ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/mngt/mngt01020-info"); + mav.addObject("pageName", "mngt01020"); + DataObject info = new DataObject(); + if(!ifEmpty(ntcId, ()->"").equals("")) { + info = ntcService.getNtcInfo(ntcId); + } else { + info = null; + } + mav.addObject("ntcInfo", json ? info : toJson(info)); + + List allSggList = sggDeptService.getSigunguList(new SigunguQuery()); + mav.addObject("sggList", allSggList); + + return mav; + } + + /**공지사항를 등록한다. + * @param ntc 공지사항 정보 + * @return jsonView + *
 {
+	 *     "saved": 등록되었으면 true, 그렇지 않으면 false
+	 * }
+ */ + @RequestMapping(name="공지사항 등록", value=METHOD_URL.create) + public ModelAndView create(Ntc ntc) { + ModelAndView mav = new ModelAndView("jsonView"); + boolean saved = false; + + String rtnMsg = ntcService.create(ntc); + + if(rtnMsg.contains("[S]")) { + saved = true; + } + mav.addObject("saved", saved); + return mav; + } + + /**공지사항 정보를 수정한다. + * @param ntc 공지사항 정보 + * @return jsonView + *
 {
+	 *     "saved": 수정되었으면 true, 그렇지 않으면 false
+	 * }
+ */ + @RequestMapping(name="공지사항 수정", value=METHOD_URL.update) + public ModelAndView update(Ntc ntc) { + ModelAndView mav = new ModelAndView("jsonView"); + boolean saved = false; + + String rtnMsg = ntcService.update(ntc); + + if(rtnMsg.contains("[S]")) { + saved = true; + } + mav.addObject("saved", saved); + return mav; + } + + /**지정한 공지사항를 제거한다. + * @param ntcIDs 공지사항 아이디 + * @return jsonView + *
 {
+	 *     "affected": 저장된 정보수
+	 *     "saved": 저장되었으면 true, 그렇지 않으면 false
+	 * }
+ */ + @RequestMapping(name="공지사항 삭제", value=METHOD_URL.remove) + public ModelAndView remove(Ntc ntc) { + ModelAndView mav = new ModelAndView("jsonView"); + boolean saved = false; + + String rtnMsg = ntcService.remove(ntc); + + if(rtnMsg.contains("[S]")) { + saved = true; + } + mav.addObject("saved", saved); + return mav; + + } +} diff --git a/src/main/resources/sql/mapper/fims/mngt/ntc-mapper.xml b/src/main/resources/sql/mapper/fims/mngt/ntc-mapper.xml new file mode 100644 index 00000000..ce73ad87 --- /dev/null +++ b/src/main/resources/sql/mapper/fims/mngt/ntc-mapper.xml @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + +SELECT A.NTC_ID + , A.SGG_CD + , (CASE + WHEN (SELECT SGG_NM FROM TB_SGG WHERE SGG_CD = A.SGG_CD) IS NOT NULL + THEN (SELECT SGG_NM FROM TB_SGG WHERE SGG_CD = A.SGG_CD) + ELSE '전체' END) AS SGG_NM + , A.NTC_TTL + , A.NTC_CN + , A.DEL_YN + , A.REG_DT + , A.RGTR + , A.MDFCN_DT + , A.MDFR + , A.DEL_DT + , A.DLTR + , A.DEL_RSN + FROM TB_NOTICE A + + + + + + + +/* 공지사항 등록(ntcMapper.insertNtc) */ + + + + + + + +INSERT + INTO TB_NOTICE ( + NTC_ID + , SGG_CD + , NTC_TTL + , NTC_CN + , DEL_YN + , REG_DT + , RGTR + , MDFCN_DT + , MDFR +) VALUES ( + #{ntc.ntcId} + , #{ntc.sggCd} + , #{ntc.ntcTtl} + , #{ntc.ntcCn} + , 'N' + , + , #{currentUser.id} + , + , #{currentUser.id} +) + + + +/* 공지사항 수정(ntcMapper.updateNtc) */ +UPDATE TB_NOTICE + SET NTC_TTL = #{ntc.ntcTtl} + , NTC_CN = #{ntc.ntcCn} + , MDFCN_DT = + , MDFR = #{currentUser.id} + WHERE NTC_ID = #{ntc.ntcId} + + + +/* 공지사항 삭제(ntcMapper.deleteNtc) */ +UPDATE TB_NOTICE + SET DEL_YN = 'Y' + , DEL_DT = + , DLTR = #{currentUser.id} + WHERE NTC_ID = #{ntc.ntcId} + + + \ No newline at end of file