package egovframework.web;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import egovframework.com.cmm.ComDefaultCodeVO;
import egovframework.com.cmm.ComDefaultVO;
import egovframework.com.cmm.FacebookAPI;
import egovframework.com.cmm.LoginVO;
import egovframework.com.cmm.service.CmmnDetailCode;
import egovframework.com.cmm.service.EgovCmmUseService;
import egovframework.com.uss.ion.bnr.service.BannerVO;
import egovframework.com.uss.ion.bnr.service.EgovBannerService;
import egovframework.com.uss.ion.cyb.service.CyberAlertManageService;
import egovframework.com.uss.ion.cyb.service.CyberAlertManageVO;
import egovframework.com.uss.ion.pwm.service.EgovPopupManageService;
import egovframework.com.uss.ion.pwm.service.MainzoneVO;
import egovframework.com.uss.ion.pwm.service.PopupManageVO;
import egovframework.com.uss.ion.pwm.service.PopupzoneVO;
import egovframework.let.cop.bbs.service.BoardVO;
import egovframework.let.cop.bbs.service.EgovBBSManageService;
import egovframework.let.kopost.sys.service.ResearchService;
import egovframework.let.kopost.sys.service.ResearchVO;
import egovframework.let.sts.com.StatsVO;
import egovframework.let.sts.cst.service.EgovConectStatsService;
import egovframework.let.sym.log.clg.service.EgovLoginLogService;
import egovframework.let.sym.log.clg.service.LoginLog;
import egovframework.let.sym.mnu.mpm.service.EgovMenuManageService;
import egovframework.let.sym.mnu.mpm.service.MenuManageVO;
import egovframework.let.uss.ion.cnt.service.CntManageVO;
import egovframework.let.utl.sim.service.EgovXSSUtil;
import egovframework.rte.fdl.property.EgovPropertyService;
import egovframework.rte.fdl.security.intercept.EgovReloadableFilterInvocationSecurityMetadataSource;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import egovframework.rte.psl.dataaccess.util.EgovMap;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
/**
* 템플릿 메인 페이지 컨트롤러 클래스(Sample 소스)
* @author 실행환경 개발팀 JJY
* @since 2011.08.31
* @version 1.0
* @see
*
*
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------- -------- ---------------------------
* 2011.08.31 JJY 최초 생성
*
*
*/
@Controller
@SessionAttributes(types = ComDefaultVO.class)
public class MainController {
/** EgovPropertyService */
@Resource(name = "propertiesService")
protected EgovPropertyService propertiesService;
/**
* EgovBBSManageService
*/
@Resource(name = "EgovBBSManageService")
private EgovBBSManageService bbsMngService;
/** EgovMenuManageService */
@Resource(name = "meunManageService")
private EgovMenuManageService menuManageService;
@Resource(name = "egovBannerService")
private EgovBannerService egovBannerService;
/** EgovPopupManageService */
@Resource(name = "egovPopupManageService")
private EgovPopupManageService egovPopupManageService;
/** cyberAlertManageService */
@Resource(name = "cyberAlertManageService")
private CyberAlertManageService cyberAlertManageService;
@Resource(name="EgovLoginLogService")
private EgovLoginLogService loginLogService;
@Resource(name = "conectStatsService")
private EgovConectStatsService conectStatsService;
@Resource(name="databaseSecurityMetadataSource")
EgovReloadableFilterInvocationSecurityMetadataSource databaseSecurityMetadataSource;
@Resource(name = "researchService")
protected ResearchService researchService;
/** cmmUseService */
@Resource(name = "EgovCmmUseService")
private EgovCmmUseService cmmUseService;
@RequestMapping(value = "/web/main/mainPage.do")
public String mainPage(HttpServletRequest request, ModelMap model) throws Exception{
System.out.println("@@@@@메인페이지시작@@@@@");
//메인이미지
/** EgovPropertyService.sample */
MainzoneVO mainzoneVO = new MainzoneVO();
mainzoneVO.setPageUnit(propertiesService.getInt("pageUnit"));
mainzoneVO.setPageSize(propertiesService.getInt("pageSize"));
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(mainzoneVO.getPageIndex());
paginationInfo.setRecordCountPerPage(mainzoneVO.getPageUnit());
paginationInfo.setPageSize(mainzoneVO.getPageSize());
mainzoneVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
mainzoneVO.setLastIndex(paginationInfo.getLastRecordIndex());
mainzoneVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
// List> mainzoneList = egovPopupManageService.selectMainzoneList(mainzoneVO); //상단메인 이미지
// model.addAttribute("mainzoneList", mainzoneList);
BoardVO boardVO = new BoardVO();
boardVO.setPageUnit(7);
boardVO.setPageSize(10);
paginationInfo.setCurrentPageNo(boardVO.getPageIndex());
paginationInfo.setRecordCountPerPage(boardVO.getPageUnit());
paginationInfo.setPageSize(boardVO.getPageSize());
boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
boardVO.setLastIndex(paginationInfo.getLastRecordIndex());
boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
boardVO.setBbsId("BBSMSTR_000000000153"); //라이브폴라스토리
boardVO.setSecretAt("N"); //비밀글제외
boardVO.setAtchFileCnt(1); //파일이 있는경우만(임의의 숫자 1)
//대표이미지 가져오기
ComDefaultCodeVO vo = new ComDefaultCodeVO();
vo.setCodeId("ITN005");
List> cmmCaLevel = cmmUseService.selectCmmCodeDetail(vo);
BoardVO mainPolaVo = new BoardVO();
if(cmmCaLevel != null){
String bbsId = ((CmmnDetailCode)cmmCaLevel.get(0)).getCodeNm() ;
boardVO.setNttId(Integer.parseInt(bbsId));
boardVO.setMainPolaNttId(bbsId);
mainPolaVo = bbsMngService.selectBoardArticle(boardVO);
if(mainPolaVo !=null){
boardVO.setRecordCountPerPage(5);
model.addAttribute("livePolaStoryListOne", mainPolaVo); //첫번째 사진
}
}
Map livePolaStoryList = bbsMngService.selectBoardArticles(boardVO, "BBSA02");
List livePolaArrayList = (List) livePolaStoryList.get("resultList") ;
model.addAttribute("livePolaStoryListOther", livePolaArrayList); //나머지 사진
/*if(livePolaArrayList.size()!=0){
livePolaArrayList.remove(0) ;
model.addAttribute("livePolaStoryList", livePolaStoryList.get("resultList"));
}*/
boardVO.setAtchFileCnt(0);
boardVO.setRecordCountPerPage(5);
boardVO.setBbsId("BBSMSTR_000000000201"); // News & Issues
Map newsIssuesMap = bbsMngService.selectBoardArticles(boardVO, "BBSA02");
model.addAttribute("newsIssuesMap", newsIssuesMap.get("resultList"));
// boardVO.setBbsId("BBSMSTR_000000000221"); // 다언다청
// Map daunMap = bbsMngService.selectBoardArticles(boardVO, "BBSA02");
// model.addAttribute("daunMap", daunMap.get("resultList"));
boardVO.setBbsId("BBSMSTR_000000000029"); // 채용공고
Map hireMap = bbsMngService.selectBoardArticles(boardVO, "BBSA02");
model.addAttribute("hireMap", hireMap.get("resultList"));
boardVO.setBbsId("BBSMSTR_000000000018"); // 공지사항
Map noticeMap = bbsMngService.selectBoardArticles(boardVO, "BBSA02");
model.addAttribute("noticeMap", noticeMap.get("resultList"));
boardVO.setBbsId("BBSMSTR_000000000019"); // 입찰공고
Map bidMap = bbsMngService.selectBoardArticles(boardVO, "BBSA02");
//model.addAttribute("notiList", map.get("resultList"));
model.addAttribute("bidMap", bidMap.get("resultList"));
/*boardVO.setBbsId("BBSMSTR_000000000101"); //입찰공고
Map map1 = bbsMngService.selectBoardArticles(boardVO, "BBSA02");
model.addAttribute("biddingList", map1.get("resultList"));*/
// 공지사항 메인컨텐츠 조회 끝 -----------------------------------
/*FacebookAPI facebookAPI = FacebookAPI.getInstance(); //페이스북
String posts = facebookAPI.getPosts() ;
String photo = facebookAPI.getPhoto() ;
model.addAttribute("posts", posts);
model.addAttribute("photo", photo);
List facebookList = new ArrayList();
JSONParser parser = new JSONParser();
JSONObject photoJObj = (JSONObject)parser.parse(photo);
String profileImgUrl = "";
if(photoJObj.get("data") != null && ((JSONObject)photoJObj.get("data")).get("url") !=null){
profileImgUrl = ((JSONObject)photoJObj.get("data")).get("url").toString() ;
}
model.addAttribute("facebookImg", profileImgUrl);
JSONObject postJObj = (JSONObject)parser.parse(posts);
JSONArray postJArr = (JSONArray)postJObj.get("data") ;
for(int i=0;i<3;i++){
JSONObject tempObjcet = (JSONObject)postJArr.get(i);
if(!"status".equals(tempObjcet.get("type"))){
if(tempObjcet.get("picture") !=null){
tempObjcet.put("imgUrl", tempObjcet.get("picture"));
}else{
tempObjcet.put("imgUrl", profileImgUrl);
}
}
String line2 = "";
if(tempObjcet.get("caption") !=null)
line2 = tempObjcet.get("caption").toString() ;
else if(tempObjcet.get("message") !=null)
line2 = tempObjcet.get("message").toString();
else if(tempObjcet.get("description")!=null)
line2 = tempObjcet.get("description").toString();
else if(tempObjcet.get("story")!=null)
line2 = tempObjcet.get("story").toString();
else
line2 = tempObjcet.get("name").toString();
tempObjcet.put("line2", line2);
facebookList.add(tempObjcet);
}
model.addAttribute("facebookList", facebookList);*/
/* 페이스북 */
// 자유게시판 메인 컨텐츠 조회 시작 ---------------------------------
boardVO.setPageUnit(9);
boardVO.setPageSize(10);
boardVO.setBbsId("BBSMSTR_BBBBBBBBBBBB");
paginationInfo.setCurrentPageNo(boardVO.getPageIndex());
paginationInfo.setRecordCountPerPage(boardVO.getPageUnit());
paginationInfo.setPageSize(boardVO.getPageSize());
boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
boardVO.setLastIndex(paginationInfo.getLastRecordIndex());
boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
model.addAttribute("bbsList", bbsMngService.selectBoardArticles(boardVO, "BBSA02").get("resultList"));
// 설문참여 메인 컨텐츠 조회 시작 -----------------------------------
ComDefaultVO qVO = new ComDefaultVO();
qVO.setPageUnit(1);
qVO.setPageSize(10);
/** pageing */
paginationInfo.setCurrentPageNo(qVO.getPageIndex());
paginationInfo.setRecordCountPerPage(qVO.getPageUnit());
paginationInfo.setPageSize(qVO.getPageSize());
qVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
qVO.setLastIndex(paginationInfo.getLastRecordIndex());
qVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
//배너 리스트 조회
BannerVO bannerVO = new BannerVO();
bannerVO.setRecordCountPerPage(50); //50개까지
bannerVO.setFirstIndex(0);
bannerVO.setReflctAt("Y"); //반영이 Y 만
ArrayList bannerVOList= (ArrayList) egovBannerService.selectBannerList(bannerVO) ;//배너6개 안되면 좌측 버튼이 안보임
if(null != bannerVOList){
for(int i=0; i<4; i++){
if(bannerVOList.size()<6){
bannerVOList.addAll(bannerVOList);
}
}
}
//bannerVO.setBannerList(egovBannerService.selectBannerList(bannerVO));
bannerVO.setBannerList(bannerVOList);
model.addAttribute("bannerList", bannerVO.getBannerList());
//팝업리스트 조회
if(!isMobile(request)){ //PC인경우만
PopupManageVO popupManageVO = new PopupManageVO();
popupManageVO.setRecordCountPerPage(10); //10개만
popupManageVO.setNtceAt("Y"); //사용만
popupManageVO.setMainPageFlag("Y") ; //메인화면의 용도(시작일 종료일 사이 조회)
List> popupList = egovPopupManageService.selectPopupMainList(popupManageVO);
model.addAttribute("popupList", popupList);
}
//알림판
/** 알림창괸리 */
PopupzoneVO popupzoneVo = new PopupzoneVO();
popupzoneVo.setFirstIndex(0);
popupzoneVo.setRecordCountPerPage(1000);
popupzoneVo.setMainPage("Y");
List> popupzoneList = egovPopupManageService.selectPopupzoneList(popupzoneVo);
model.addAttribute("popupzoneList", popupzoneList);
/** 팝업존관리 */
/* popupManageVO.setRecordCountPerPage(10); //10개만
popupManageVO.setNtceAt("Y"); //사용만
popupManageVO.setMainPageFlag("Y") ; //메인화면의 용도(시작일 종료일 사이 조회)
popupManageVO.setPopupType("Z"); //팝업존만 조회
List> popupzoneList = egovPopupManageService.selectPopupMainList(popupManageVO);
model.addAttribute("popupzoneList", popupzoneList);*/
/** 사이버경고관리 */
CyberAlertManageVO cyberManageVO = new CyberAlertManageVO();
cyberManageVO.setCaId("CYBER_0000000001");
List> cyberAlerMap = cyberAlertManageService.selectCyberAlert(cyberManageVO);
EgovMap emp = new EgovMap();
if( cyberAlerMap.size() != 0 ){
emp = (EgovMap)cyberAlerMap.get(0);
}
model.addAttribute("cyberAlerMap", emp);
//model.addAttribute("qriList", egovQustnrRespondInfoService.selectQustnrRespondInfoManageList(qVO));
// 설문참여 메인 컨텐츠 조회 끝 -----------------------------------
//사용자 방문수 insert
/* {
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyyMMdd", Locale.KOREA );
Date currentTime = new Date ();
String mTime = mSimpleDateFormat.format ( currentTime );
HttpServletRequest req = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
String ip = req.getHeader("X-FORWARDED-FOR");
if (ip == null){ ip = req.getRemoteAddr();}
LoginLog loginLog = new LoginLog();
loginLog.setLoginIp(ip);
loginLog.setCreatDt(mTime);
if(null == loginLogService.selectLoginUserLog(loginLog)){ //오늘날짜의 IP조회
loginLog.setLoginMthd("I"); // 로그인:I, 로그아웃:O
loginLog.setErrOccrrAt("N");
loginLog.setErrorCode("");
loginLog.setUserAt("U");
)
loginLog.setLoginId(""); //connnect_id
if(isMobile(request)){
loginLog.setDeviceType("M");
}else{
loginLog.setDeviceType("P");
}
loginLogService.logInsertLoginLog(loginLog);
}
}*/
//웹 레이아웃 title 조회 용 메뉴명 조회
ComDefaultVO searchVO1 = new ComDefaultVO();
searchVO1.setSearchKeyword1(request.getRequestURI());
MenuManageVO resultMenuVO = menuManageService.selectMenuManage(searchVO1) ;
model.addAttribute("resultMenuVO", resultMenuVO);
System.out.println("@@@@@메인페이지종료@@@@@");
return "web/main/mainPage";
}
/**
* 사용자 상단 매뉴
*/
@RequestMapping(value="/web/com/webCommonHeader.do")
public String webCommonHeader(
@RequestParam Map commandMap,
ModelMap model, HttpServletRequest request)
throws Exception {
//화면 메뉴정보
ComDefaultVO searchVO1 = new ComDefaultVO();
searchVO1.setSearchKeyword1(request.getRequestURI());
MenuManageVO resultMenuVO = menuManageService.selectMenuManage(searchVO1) ;
model.addAttribute("resultMenuVO", resultMenuVO);
return "web/com/webCommonHeader";
}
/**
* 사용자 footer
*/
@RequestMapping(value="/web/com/webCommonFooter.do")
public String webCommonFooter(
@RequestParam Map commandMap, HttpServletRequest request, ModelMap model)
throws Exception {
//화면 메뉴정보
// ComDefaultVO searchVO1 = new ComDefaultVO();
// searchVO1.setSearchKeyword1(request.getRequestURI());
// MenuManageVO resultMenuVO = menuManageService.selectMenuManage(searchVO1) ;
// model.addAttribute("resultMenuVO", resultMenuVO);
LoginLog loginLog = new LoginLog();
if(request.getRequestURI().contains("/web/main/mainPage.do")){ //사용자 메인
loginLog.setProgrmFileNm("mainPage");
loginLog.setMenuNm("사용자메인");
}else if(request.getRequestURI().contains("/web/survey/surveyList")){ //설문조사
loginLog.setProgrmFileNm("surveyList");
loginLog.setMenuNm("설문조사");
}else if(request.getRequestURI().contains("/web/content.do")){ //컨텐츠
if(commandMap.get("proFn")!=null){
ComDefaultVO searchVO = new ComDefaultVO();
searchVO.setSearchCondition("proFn");
searchVO.setSearchKeyword((String)commandMap.get("proFn"));
// MenuManageVO resultVO = menuManageService.selectMenuManage(searchVO) ;
loginLog.setProgrmFileNm((String)commandMap.get("proFn"));
String menuNm = (String)commandMap.get("menuNm");
if(menuNm != null && !("").equals(menuNm)){
// loginLog.setMenuNm(resultMenuVO.getMenuNm());
loginLog.setMenuNm((String)commandMap.get("menuNm"));
}
}
}else if(commandMap.get("bbsId") != null){ //나머지 모든 게시판
ComDefaultVO searchVO = new ComDefaultVO();
searchVO.setSearchCondition("bbsId");
searchVO.setSearchKeyword((String)commandMap.get("bbsId"));
MenuManageVO resultVO = menuManageService.selectMenuManage(searchVO) ;
loginLog.setProgrmFileNm((String)commandMap.get("bbsId"));
if(resultVO!=null && !("").equals(resultVO.getMenuNm())){
loginLog.setMenuNm(resultVO.getMenuNm());
}else {
loginLog.setMenuNm((String)commandMap.get("menuNm"));
}
}else{
loginLog.setProgrmFileNm(null);
}
//사용자 방문수 insert
{
if(loginLog.getProgrmFileNm()!= null){ //미리보기 경우가 아닌경우
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyyMMdd", Locale.KOREA );
Date currentTime = new Date ();
String mTime = mSimpleDateFormat.format ( currentTime );
HttpServletRequest req = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
String ip = req.getHeader("X-FORWARDED-FOR");
if (ip == null){ ip = req.getRemoteAddr();}
loginLog.setLoginIp(ip);
loginLog.setCreatDt(mTime);
loginLog.setLoginMthd("I"); // 로그인:I, 로그아웃:O
loginLog.setErrOccrrAt("N");
loginLog.setErrorCode("");
loginLog.setUserAt("U");
loginLog.setLoginId(""); //connnect_id
if(isMobile(request)){
loginLog.setDeviceType("M");
}else{
loginLog.setDeviceType("P");
}
loginLogService.logInsertLoginLog(loginLog);
}
}
model.addAttribute("loginLog", loginLog);
return "web/com/webCommonFooter";
}
/**
* 만족도 import
*/
@RequestMapping(value="/web/com/webContentResearch.do")
public String webContentResearch(@RequestParam Map commandMap
, CntManageVO cntManageVO
, ResearchVO researchVO
, HttpServletRequest request
, Model model) throws Exception {
// XSS 방지
EgovXSSUtil egovXSSUtil = new EgovXSSUtil();
researchVO.setMcUrl(egovXSSUtil.unscript(researchVO.getMcUrl()));
researchVO.setMcTitle(egovXSSUtil.unscript(researchVO.getMcTitle()));
if(request.getRequestURI().contains("/web/main/mainPage.do")){//만족도 필요없는화면
return "blank";
}
if(request.getRequestURI().contains("/web/content.do")){ //컨텐츠 화면(관리자미리보기/사용자)
if(cntManageVO.getCntDtId() != null){ //관리자 미리보기
researchVO = researchService.selectMcUrlByCntDtId(cntManageVO); //CntDtId 으로 이전 MENU_CODE 테이블의 url 조회
if(researchVO ==null){
return "blank";
}
model.addAttribute("mcUrl", researchVO.getMcUrl());
model.addAttribute("mcIdx", researchVO.getMcIdx());
model.addAttribute("mcTitle", researchVO.getMcTitle());
model.addAttribute("mcManager", researchVO.getMcManager());
return "web/com/webContentResearch";
}else if(commandMap.get("proFn")==null){ //사용자 화면
return "blank";
}
researchVO = researchService.selectMcUrlByProFn(researchVO); //사용자 화면 ProFn 으로 이전 MENU_CODE 테이블의 url 조회
if(researchVO ==null){
return "blank";
}
}else if(request.getRequestURI().contains("/web/survey/surveyList")){ //설문조사 화면(사용자)
researchVO.setProFn("surveyList");
researchVO = researchService.selectMcUrlByProFn(researchVO);
if(researchVO ==null){
return "blank";
}
}
if(commandMap.get("bbsId") != null){ //나머지 모든 게시판화면(사용자)
researchVO.setProFn((String)commandMap.get("bbsId"));
researchVO = researchService.selectMcUrlByProFn(researchVO); //게시판 bbsId 로 MENU_CODE 테이블의 url 조회
if(researchVO ==null){
return "blank";
}
}
if(researchVO==null){ //만족도 컬럼이 등록 안되면 안보이게....
return "blank";
}
model.addAttribute("mcUrl", researchVO.getMcUrl());
model.addAttribute("mcIdx", researchVO.getMcIdx());
model.addAttribute("mcTitle", researchVO.getMcTitle());
model.addAttribute("mcManager", researchVO.getMcManager());
return "web/com/webContentResearch";
}
/*모바일접속 유무*/
private boolean isMobile(HttpServletRequest request) {
String userAgent = request.getHeader("user-agent");
boolean mobile1 = userAgent.matches(".*(iPhone|iPod|Android|Windows CE|BlackBerry|Symbian|Windows Phone|webOS|Opera Mini|Opera Mobi|POLARIS|IEMobile|lgtelecom|nokia|SonyEricsson).*");
boolean mobile2 = userAgent.matches(".*(LG|SAMSUNG|Samsung).*");
if(mobile1 || mobile2) {
return true;
}
return false;
}
}